From 4c49bd7b91476703b6acb76fa2fdd5c9229e6b92 Mon Sep 17 00:00:00 2001 From: amnix Date: Mon, 11 Nov 2024 13:32:04 +0900 Subject: [PATCH 01/11] Moved the SDK UI to the shared module --- android/build.gradle.kts | 22 +-- .../komoju/android/sdk/KomojuAndroidSDK.kt | 176 +++++++++++++++++ .../android/sdk/KomojuPaymentActivity.kt | 35 +--- .../android/sdk/KomojuPaymentViewModel.kt | 15 +- .../java/com/komoju/android/sdk/KomojuSDK.kt | 179 ------------------ .../KomojuStartPaymentForResultContract.kt | 66 +++++++ .../ExperimentalKomojuPaymentApi.kt | 2 +- .../com/komoju/android/sdk/types/Currency.kt | 14 -- .../com/komoju/android/sdk/types/Language.kt | 20 +- .../ThemedCircularProgressIndicator.kt | 12 -- .../KonbiniAwaitingPaymentScreenModel.kt | 23 --- .../composables/CreditCardSchemeIcons.kt | 50 ----- .../payment/composables/OffSitePayForm.kt | 112 ----------- .../payment/composables/PaymentMethodsRow.kt | 149 --------------- .../sdk/ui/screens/webview/WebChromeClient.kt | 8 - .../sdk/ui/screens/webview/WebViewClient.kt | 52 ----- .../ui/screens/webview/WebViewScreenModel.kt | 10 - .../android/sdk/ui/theme/ConfigurableTheme.kt | 70 ------- .../komoju/android/sdk/utils/AmountUtils.kt | 17 -- .../komoju/android/sdk/utils/PreviewScreen.kt | 14 -- .../com/komoju/android/sdk/utils/StringExt.kt | 11 -- android/src/main/res/values/strings.xml | 117 ------------ build.gradle.kts | 1 + example-android/build.gradle.kts | 2 +- .../{ui => }/remote/RemoteApiService.kt | 11 +- .../remote/dtos/CreateSessionRequest.kt | 2 +- .../remote/dtos/CreateSessionResponse.kt | 2 +- .../remote/dtos/PublishableKeyResponse.kt | 2 +- .../ui/screens/store/FakeItemDetailScreen.kt | 4 +- .../ui/screens/store/FakeStoreScreen.kt | 5 +- .../ui/screens/store/FakeStoreScreenModel.kt | 12 +- .../KomojuPaymentSDKConfigurableTheme.kt | 10 +- gradle.properties | 2 +- gradle/libs.versions.toml | 21 +- shared/build.gradle.kts | 49 ++++- .../navigation/PlatformBackPress.android.kt | 33 ++++ .../ExternalScreenLauncherResult.android.kt | 10 + ...memberLauncherForActivityResult.android.kt | 9 + .../mobile/sdk/utils/ModifierExt.android.kt | 8 +- .../utils/OffsiteCustomTabResultContract.kt | 2 +- .../mobile/sdk/utils/Platform.android.kt | 3 + .../drawable/komoju_ic_alipay.xml | 0 .../drawable/komoju_ic_amex.xml | 0 .../drawable/komoju_ic_app_opens_info.xml | 0 .../drawable/komoju_ic_au_pay.xml | 0 .../drawable/komoju_ic_bank_transfer.xml | 0 .../drawable/komoju_ic_bitcash.xml | 0 .../drawable/komoju_ic_credit_card.xml | 0 .../drawable/komoju_ic_cvv.xml | 0 .../drawable/komoju_ic_daily_yamazaki.xml | 0 .../drawable/komoju_ic_diners.xml | 0 .../drawable/komoju_ic_family_mart.xml | 0 .../drawable/komoju_ic_jcb.xml | 0 .../drawable/komoju_ic_konbini.xml | 0 .../drawable/komoju_ic_lawson.xml | 0 .../drawable/komoju_ic_linepay.xml | 0 .../drawable/komoju_ic_master.xml | 0 .../drawable/komoju_ic_merpay.xml | 0 .../drawable/komoju_ic_ministop.xml | 0 .../drawable/komoju_ic_net_cash.xml | 0 .../drawable/komoju_ic_paidy.xml | 0 .../drawable/komoju_ic_pay_easy.xml | 0 .../komoju_ic_payment_status_completed.xml | 0 .../komoju_ic_payment_status_failed.xml | 0 ...moju_ic_payment_status_konbini_pending.xml | 0 .../komoju_ic_payment_status_prenidng.xml | 0 .../drawable/komoju_ic_paypay.xml | 0 .../drawable/komoju_ic_rakuten_pay.xml | 0 .../drawable/komoju_ic_seico_mart.xml | 0 .../drawable/komoju_ic_seven_eleven.xml | 0 .../drawable/komoju_ic_visa.xml | 0 .../drawable/komoju_ic_web_money.xml | 0 .../drawable/komoju_img_payment_footer.xml | 0 .../font/komoju_font_inter_bold.ttf | Bin .../font/komoju_font_inter_light.ttf | Bin .../font/komoju_font_inter_medium.ttf | Bin .../font/komoju_font_inter_regular.ttf | Bin .../font/komoju_font_inter_semibold.ttf | Bin .../composeResources}/values-ja/strings.xml | 0 .../composeResources/values/strings.xml | 121 ++++++++++++ .../sdk/KomojuMobileSDKConfiguration.kt | 29 +++ .../sdk/KomojuMobileSDKPaymentResult.kt | 3 + .../mobile/sdk/entities/PaymentMethod.kt | 2 +- .../mobile/sdk/entities/PaymentRequest.kt | 2 +- .../mobile/sdk/entities/SecureTokenRequest.kt | 2 +- .../sdk/entities/SecureTokenResponse.kt | 2 +- .../com/komoju/mobile/sdk/entities/Session.kt | 2 +- .../navigation/PaymentResultScreenModel.kt | 12 +- .../sdk/navigation/PlatformBackPress.kt | 11 ++ .../sdk/navigation/RouterStateScreenModel.kt | 4 +- .../komoju/mobile/sdk/remote/NetworkClient.kt | 15 +- .../mobile/sdk/remote/apis/KomojuRemoteApi.kt | 9 +- .../mobile/sdk/remote/apis/SessionApi.kt | 2 +- .../mobile/sdk/remote/apis/TokensApi.kt | 2 +- .../sdk/remote/dtos/PayByTokenRequestDto.kt | 2 +- .../remote/dtos/PaymentErrorResponseDto.kt | 2 +- .../sdk/remote/dtos/SecureTokenRequestDto.kt | 2 +- .../SecureTokenVerificationResponseDto.kt | 2 +- .../mobile/sdk/types/OffSitePaymentType.kt | 2 +- .../ExternalScreenLauncherResult.kt | 11 ++ .../InlinedPaymentPrimaryButton.kt | 24 +-- .../sdk/ui/composables/InlinedWebView.kt | 90 ++++----- .../sdk/ui/composables/PrimaryButton.kt | 18 +- .../mobile}/sdk/ui/composables/TextButton.kt | 2 +- .../ThemedCircularProgressIndicator.kt | 12 ++ .../sdk/ui/screens/KomojuPaymentEntryPoint.kt | 32 ++++ .../sdk/ui/screens/KomojuPaymentRoutes.kt | 46 +++-- .../awating/KonbiniAwaitingPaymentScreen.kt | 100 ++++++---- .../KonbiniAwaitingPaymentScreenModel.kt | 26 +++ .../awating/KonbiniAwaitingPaymentUiState.kt | 2 +- .../ui/screens/failed/PaymentFailedScreen.kt | 32 ++-- .../failed/PaymentFailedScreenModel.kt | 4 +- .../mobile}/sdk/ui/screens/failed/Reason.kt | 2 +- .../ui/screens/payment/KomojuPaymentScreen.kt | 41 ++-- .../payment/KomojuPaymentScreenModel.kt | 168 +++++++++------- .../screens/payment/KomojuPaymentUIState.kt | 44 +++-- .../screens/payment/composables/BankForm.kt | 56 +++--- .../payment/composables/BitCashForm.kt | 24 +-- .../payment/composables/CompatTextField.kt | 51 +---- .../payment/composables/CreditCardForm.kt | 73 +++---- .../composables/CreditCardSchemeIcons.kt | 55 ++++++ .../payment/composables/KonbiniBrandsRow.kt | 52 +++-- .../payment/composables/KonbiniForm.kt | 40 ++-- .../payment/composables/NetCashForm.kt | 24 +-- .../payment/composables/OffSitePayForm.kt | 132 +++++++++++++ .../screens/payment/composables/PaidyForm.kt | 44 +++-- .../payment/composables/PayEasyForm.kt | 51 ++--- .../payment/composables/PaymentMethodForm.kt | 16 +- .../payment/composables/PaymentMethodsRow.kt | 179 ++++++++++++++++++ .../payment/composables/PaymentSheetHandle.kt | 7 +- .../screens/payment/composables/TextField.kt | 12 +- .../payment/composables/WebMoneyForm.kt | 24 +-- .../screens/success/PaymentSuccessScreen.kt | 41 ++-- .../success/PaymentSuccessScreenModel.kt | 4 +- .../ui/screens/verify/ProcessPaymentScreen.kt | 9 +- .../verify/VerifyPaymentScreenModel.kt | 19 +- .../webview/WebViewRequestInterceptor.kt | 26 +++ .../sdk/ui/screens/webview/WebViewScreen.kt | 78 +++----- .../ui/screens/webview/WebViewScreenModel.kt | 32 ++++ .../mobile/sdk/ui/theme/ConfigurableTheme.kt | 63 ++++++ .../com/komoju/mobile}/sdk/ui/theme/Theme.kt | 34 ++-- .../komoju/mobile}/sdk/ui/theme/Typography.kt | 21 +- .../komoju/mobile/sdk/utils/AmountUtils.kt | 15 ++ .../mobile}/sdk/utils/CreditCardUtils.kt | 4 +- .../mobile}/sdk/utils/DeeplinkEntity.kt | 8 +- .../sdk/utils/InlinedPaymentProcessor.kt | 4 +- .../com/komoju/mobile/sdk/utils/Logger.kt | 17 ++ .../komoju/mobile/sdk/utils/ModifierExt.kt | 5 + .../com/komoju/mobile/sdk/utils/Platform.kt | 7 + .../com/komoju/mobile/sdk/utils/StringExt.kt | 24 +++ .../kotlin/com/komoju/mobile/sdk/.keep | 0 .../komoju/mobile/sdk/MainViewController.kt | 55 ++++++ .../sdk/navigation/PlatformBackPress.ios.kt | 30 +++ .../ExternalScreenLauncherResult.ios.kt | 8 + .../RememberLauncherForActivityResult.ios.kt | 6 + .../mobile/sdk/utils/ModifierExt.ios.kt | 8 + .../komoju/mobile/sdk/utils/Platform.ios.kt | 3 + 157 files changed, 2037 insertions(+), 1568 deletions(-) create mode 100644 android/src/main/java/com/komoju/android/sdk/KomojuAndroidSDK.kt delete mode 100644 android/src/main/java/com/komoju/android/sdk/KomojuSDK.kt create mode 100644 android/src/main/java/com/komoju/android/sdk/KomojuStartPaymentForResultContract.kt rename android/src/main/java/com/komoju/android/sdk/{ => annotations}/ExperimentalKomojuPaymentApi.kt (96%) delete mode 100644 android/src/main/java/com/komoju/android/sdk/ui/composables/ThemedCircularProgressIndicator.kt delete mode 100644 android/src/main/java/com/komoju/android/sdk/ui/screens/awating/KonbiniAwaitingPaymentScreenModel.kt delete mode 100644 android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/CreditCardSchemeIcons.kt delete mode 100644 android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/OffSitePayForm.kt delete mode 100644 android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/PaymentMethodsRow.kt delete mode 100644 android/src/main/java/com/komoju/android/sdk/ui/screens/webview/WebChromeClient.kt delete mode 100644 android/src/main/java/com/komoju/android/sdk/ui/screens/webview/WebViewClient.kt delete mode 100644 android/src/main/java/com/komoju/android/sdk/ui/screens/webview/WebViewScreenModel.kt delete mode 100644 android/src/main/java/com/komoju/android/sdk/ui/theme/ConfigurableTheme.kt delete mode 100644 android/src/main/java/com/komoju/android/sdk/utils/AmountUtils.kt delete mode 100644 android/src/main/java/com/komoju/android/sdk/utils/PreviewScreen.kt delete mode 100644 android/src/main/java/com/komoju/android/sdk/utils/StringExt.kt rename example-android/src/main/java/com/komoju/android/{ui => }/remote/RemoteApiService.kt (78%) rename example-android/src/main/java/com/komoju/android/{ui => }/remote/dtos/CreateSessionRequest.kt (85%) rename example-android/src/main/java/com/komoju/android/{ui => }/remote/dtos/CreateSessionResponse.kt (77%) rename example-android/src/main/java/com/komoju/android/{ui => }/remote/dtos/PublishableKeyResponse.kt (79%) create mode 100644 shared/src/androidMain/kotlin/com/komoju/mobile/sdk/navigation/PlatformBackPress.android.kt create mode 100644 shared/src/androidMain/kotlin/com/komoju/mobile/sdk/ui/composables/ExternalScreenLauncherResult.android.kt create mode 100644 shared/src/androidMain/kotlin/com/komoju/mobile/sdk/ui/composables/RememberLauncherForActivityResult.android.kt rename android/src/main/java/com/komoju/android/sdk/utils/ModifierExt.kt => shared/src/androidMain/kotlin/com/komoju/mobile/sdk/utils/ModifierExt.android.kt (65%) rename {android/src/main/java/com/komoju/android => shared/src/androidMain/kotlin/com/komoju/mobile}/sdk/utils/OffsiteCustomTabResultContract.kt (97%) create mode 100644 shared/src/androidMain/kotlin/com/komoju/mobile/sdk/utils/Platform.android.kt rename {android/src/main/res => shared/src/commonMain/composeResources}/drawable/komoju_ic_alipay.xml (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/drawable/komoju_ic_amex.xml (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/drawable/komoju_ic_app_opens_info.xml (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/drawable/komoju_ic_au_pay.xml (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/drawable/komoju_ic_bank_transfer.xml (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/drawable/komoju_ic_bitcash.xml (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/drawable/komoju_ic_credit_card.xml (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/drawable/komoju_ic_cvv.xml (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/drawable/komoju_ic_daily_yamazaki.xml (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/drawable/komoju_ic_diners.xml (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/drawable/komoju_ic_family_mart.xml (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/drawable/komoju_ic_jcb.xml (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/drawable/komoju_ic_konbini.xml (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/drawable/komoju_ic_lawson.xml (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/drawable/komoju_ic_linepay.xml (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/drawable/komoju_ic_master.xml (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/drawable/komoju_ic_merpay.xml (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/drawable/komoju_ic_ministop.xml (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/drawable/komoju_ic_net_cash.xml (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/drawable/komoju_ic_paidy.xml (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/drawable/komoju_ic_pay_easy.xml (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/drawable/komoju_ic_payment_status_completed.xml (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/drawable/komoju_ic_payment_status_failed.xml (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/drawable/komoju_ic_payment_status_konbini_pending.xml (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/drawable/komoju_ic_payment_status_prenidng.xml (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/drawable/komoju_ic_paypay.xml (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/drawable/komoju_ic_rakuten_pay.xml (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/drawable/komoju_ic_seico_mart.xml (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/drawable/komoju_ic_seven_eleven.xml (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/drawable/komoju_ic_visa.xml (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/drawable/komoju_ic_web_money.xml (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/drawable/komoju_img_payment_footer.xml (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/font/komoju_font_inter_bold.ttf (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/font/komoju_font_inter_light.ttf (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/font/komoju_font_inter_medium.ttf (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/font/komoju_font_inter_regular.ttf (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/font/komoju_font_inter_semibold.ttf (100%) rename {android/src/main/res => shared/src/commonMain/composeResources}/values-ja/strings.xml (100%) create mode 100644 shared/src/commonMain/composeResources/values/strings.xml create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/KomojuMobileSDKConfiguration.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/KomojuMobileSDKPaymentResult.kt rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/navigation/PaymentResultScreenModel.kt (51%) create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/navigation/PlatformBackPress.kt rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/navigation/RouterStateScreenModel.kt (88%) create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/composables/ExternalScreenLauncherResult.kt rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/ui/composables/InlinedPaymentPrimaryButton.kt (86%) rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/ui/composables/InlinedWebView.kt (51%) rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/ui/composables/PrimaryButton.kt (73%) rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/ui/composables/TextButton.kt (95%) create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/composables/ThemedCircularProgressIndicator.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/KomojuPaymentEntryPoint.kt rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/ui/screens/KomojuPaymentRoutes.kt (57%) rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/ui/screens/awating/KonbiniAwaitingPaymentScreen.kt (53%) create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/awating/KonbiniAwaitingPaymentScreenModel.kt rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/ui/screens/awating/KonbiniAwaitingPaymentUiState.kt (75%) rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/ui/screens/failed/PaymentFailedScreen.kt (62%) rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/ui/screens/failed/PaymentFailedScreenModel.kt (66%) rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/ui/screens/failed/Reason.kt (95%) rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/ui/screens/payment/KomojuPaymentScreen.kt (84%) rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/ui/screens/payment/KomojuPaymentScreenModel.kt (68%) rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/ui/screens/payment/KomojuPaymentUIState.kt (59%) rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/ui/screens/payment/composables/BankForm.kt (70%) rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/ui/screens/payment/composables/BitCashForm.kt (61%) rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/ui/screens/payment/composables/CompatTextField.kt (51%) rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/ui/screens/payment/composables/CreditCardForm.kt (80%) create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/CreditCardSchemeIcons.kt rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/ui/screens/payment/composables/KonbiniBrandsRow.kt (56%) rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/ui/screens/payment/composables/KonbiniForm.kt (73%) rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/ui/screens/payment/composables/NetCashForm.kt (61%) create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/OffSitePayForm.kt rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/ui/screens/payment/composables/PaidyForm.kt (58%) rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/ui/screens/payment/composables/PayEasyForm.kt (68%) rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/ui/screens/payment/composables/PaymentMethodForm.kt (88%) create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PaymentMethodsRow.kt rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/ui/screens/payment/composables/PaymentSheetHandle.kt (80%) rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/ui/screens/payment/composables/TextField.kt (89%) rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/ui/screens/payment/composables/WebMoneyForm.kt (61%) rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/ui/screens/success/PaymentSuccessScreen.kt (66%) rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/ui/screens/success/PaymentSuccessScreenModel.kt (66%) rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/ui/screens/verify/ProcessPaymentScreen.kt (80%) rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/ui/screens/verify/VerifyPaymentScreenModel.kt (85%) create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/webview/WebViewRequestInterceptor.kt rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/ui/screens/webview/WebViewScreen.kt (66%) create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/webview/WebViewScreenModel.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/theme/ConfigurableTheme.kt rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/ui/theme/Theme.kt (54%) rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/ui/theme/Typography.kt (59%) create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/utils/AmountUtils.kt rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/utils/CreditCardUtils.kt (98%) rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/utils/DeeplinkEntity.kt (82%) rename {android/src/main/java/com/komoju/android => shared/src/commonMain/kotlin/com/komoju/mobile}/sdk/utils/InlinedPaymentProcessor.kt (94%) create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/utils/Logger.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/utils/ModifierExt.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/utils/Platform.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/utils/StringExt.kt delete mode 100644 shared/src/iosMain/kotlin/com/komoju/mobile/sdk/.keep create mode 100644 shared/src/iosMain/kotlin/com/komoju/mobile/sdk/MainViewController.kt create mode 100644 shared/src/iosMain/kotlin/com/komoju/mobile/sdk/navigation/PlatformBackPress.ios.kt create mode 100644 shared/src/iosMain/kotlin/com/komoju/mobile/sdk/ui/composables/ExternalScreenLauncherResult.ios.kt create mode 100644 shared/src/iosMain/kotlin/com/komoju/mobile/sdk/ui/composables/RememberLauncherForActivityResult.ios.kt create mode 100644 shared/src/iosMain/kotlin/com/komoju/mobile/sdk/utils/ModifierExt.ios.kt create mode 100644 shared/src/iosMain/kotlin/com/komoju/mobile/sdk/utils/Platform.ios.kt diff --git a/android/build.gradle.kts b/android/build.gradle.kts index b741c24..f1ef6bd 100644 --- a/android/build.gradle.kts +++ b/android/build.gradle.kts @@ -52,30 +52,20 @@ android { } dependencies { - api(project(":shared")) + implementation(project(":shared")) implementation(libs.core.ktx) implementation(libs.androidx.fragment.ktx) implementation(libs.appcompat) implementation(libs.material) + implementation(libs.activity.compose) implementation(libs.kotlinx.coroutines.android) - implementation(libs.kotlinx.datetime) - implementation(libs.kotlinx.serialization.json) - implementation(libs.lifecycle.runtime.ktx) implementation(libs.lifecycle.viewmodel.compose) - implementation(libs.activity.compose) - implementation(platform(libs.compose.bom)) - implementation(libs.ui) - implementation(libs.ui.graphics) - implementation(libs.ui.tooling.preview) - implementation(libs.material3) - implementation(libs.compose.webview) implementation(libs.voyager.navigator) implementation(libs.voyager.screenModel) - implementation(libs.voyager.transitions) - implementation(libs.androidx.browser) - testImplementation(libs.junit) - androidTestImplementation(libs.ext.junit) - androidTestImplementation(libs.espresso.core) + implementation(libs.ui.graphics) + implementation(libs.material3) + implementation(platform(libs.compose.bom)) + implementation(libs.ui) debugImplementation(libs.androidx.ui.tooling) } diff --git a/android/src/main/java/com/komoju/android/sdk/KomojuAndroidSDK.kt b/android/src/main/java/com/komoju/android/sdk/KomojuAndroidSDK.kt new file mode 100644 index 0000000..bea751f --- /dev/null +++ b/android/src/main/java/com/komoju/android/sdk/KomojuAndroidSDK.kt @@ -0,0 +1,176 @@ +package com.komoju.android.sdk + +import android.os.Parcelable +import androidx.activity.result.contract.ActivityResultContract +import androidx.compose.ui.graphics.toArgb +import com.komoju.android.sdk.annotations.ExperimentalKomojuPaymentApi +import com.komoju.android.sdk.types.Currency +import com.komoju.android.sdk.types.Language +import com.komoju.mobile.sdk.KomojuMobileSDKConfiguration +import com.komoju.mobile.sdk.KomojuMobileSDKPaymentResult +import com.komoju.mobile.sdk.canProcessPayment +import com.komoju.mobile.sdk.ui.theme.DefaultConfigurableTheme +import com.komoju.mobile.sdk.ui.theme.toColor +import kotlinx.parcelize.Parcelize +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.contract +import com.komoju.mobile.sdk.ui.theme.ConfigurableTheme as CoreConfigurableTheme + +object KomojuAndroidSDK { + val activityResultContract: ActivityResultContract + get() = KomojuStartPaymentForResultContract() + + /** + * Configuration class to hold parameters required for payment processing. + */ + @Parcelize + data class Configuration( + val language: Language, // Language setting for the payment UI. + val currency: Currency, // Currency used in the transaction. + val publishableKey: String?, // Public API key for Komoju integration. + val isDebugMode: Boolean, // Debug mode flag for logging and testing. + val sessionId: String?, // Unique session ID for payment transaction. + val redirectURL: String, // URL to redirect after payment completion. + val appScheme: String, // App schema for deep links. + val configurableTheme: ConfigurableTheme, // Custom theme for UI elements. + val inlinedProcessing: Boolean, // Flag to enable inlined processing. + ) : Parcelable { + + /** + * Builder class for creating a [Configuration] instance. + * Offers a flexible way to set optional parameters. + */ + class Builder(private val publishableKey: String, private val sessionId: String) { + private var language: Language = Language.JAPANESE // Default language is Japanese. + private var currency: Currency = Currency.JPY // Default currency is Japanese Yen. + private var isDebugMode: Boolean = false // Debug mode is off by default. + private var configurableTheme: ConfigurableTheme = + ConfigurableTheme.default // Custom theme for UI elements. + private var inlinedProcessing: Boolean = false // Inlined processing is off by default. + + /** Sets the language for the payment. */ + fun setLanguage(language: Language) = apply { + this.language = language + } + + /** Sets the currency for the transaction. */ + fun setCurrency(currency: Currency) = apply { + this.currency = currency + } + + /** Enables or disables debug mode. */ + fun setDebugMode(isDebugMode: Boolean) = apply { + this.isDebugMode = isDebugMode + } + + /** Sets the custom theme for the payment UI. */ + fun setConfigurableTheme(configurableTheme: ConfigurableTheme) = apply { + this.configurableTheme = configurableTheme + } + + /** + * WARNING: Experimental API [Try this only if you are sure] Disabled by Default. + * + * This API enables or disables inlined processing. + * If this is enabled then The SDK will try to do processing with minimum amount of screens. + * + * For e.g. + * * If PayPay Payment id captured, it will close the SDK ASAP it verifies the payment. + * * When you will try to pay with Credit Card and Second step verification is not required, SDK will never show the WebView and will handle the callback itself. + * + */ + @ExperimentalKomojuPaymentApi + fun setInlinedProcessing(inlinedProcessing: Boolean) = apply { + this.inlinedProcessing = inlinedProcessing + } + + /** + * Builds the [Configuration] instance with the provided settings. + */ + fun build(): Configuration = Configuration( + language = language, + currency = currency, + publishableKey = publishableKey, + sessionId = sessionId, + isDebugMode = isDebugMode, + configurableTheme = configurableTheme, + inlinedProcessing = inlinedProcessing, + appScheme = "", + redirectURL = "", + ) + } + } + + @Parcelize + data class ConfigurableTheme( + val primaryColorInt: Int, + val primaryContentColorInt: Int, + val loaderColorInt: Int, + val primaryShapeCornerRadiusInDp: Int, + ) : Parcelable { + companion object { + val default: ConfigurableTheme = com.komoju.mobile.sdk.ui.theme.ConfigurableTheme.default.toAndroidSDKConfigurableTheme() + } + } + + @Parcelize + data class PaymentResult(val isSuccessFul: Boolean) : Parcelable +} + +internal fun KomojuAndroidSDK.ConfigurableTheme.toKomojuConfigurableTheme(): CoreConfigurableTheme = DefaultConfigurableTheme( + primaryColor = primaryColorInt.toLong(), + primaryContentColor = primaryContentColorInt.toLong(), + loaderColor = loaderColorInt.toLong(), + primaryShapeCornerRadiusInDp = this.primaryShapeCornerRadiusInDp, +) + +internal fun CoreConfigurableTheme.toAndroidSDKConfigurableTheme(): KomojuAndroidSDK.ConfigurableTheme = + KomojuAndroidSDK.ConfigurableTheme( + primaryColorInt = primaryColor.toColor().toArgb(), + primaryContentColorInt = primaryContentColor.toColor().toArgb(), + loaderColorInt = loaderColor.toColor().toArgb(), + primaryShapeCornerRadiusInDp = primaryShapeCornerRadiusInDp, + ) + + +/** + * Extension function to check if the current configuration is valid for processing a payment. + * @return True if the configuration is non-null and contains both publishableKey and sessionId. + */ +@OptIn(ExperimentalContracts::class) +fun KomojuAndroidSDK.Configuration?.canProcessPayment(): Boolean { + contract { + returns(true) implies (this@canProcessPayment != null) + } + return this?.toMobileConfiguration().canProcessPayment() +} + +internal fun KomojuMobileSDKConfiguration.toAndroidConfiguration(): KomojuAndroidSDK.Configuration = KomojuAndroidSDK.Configuration( + language = Language.parse(this.language), + currency = Currency.parse(this.currency), + publishableKey = this.publishableKey, + isDebugMode = this.isDebugMode, + sessionId = this.sessionId, + redirectURL = this.redirectURL, + configurableTheme = this.configurableTheme.toAndroidSDKConfigurableTheme(), + inlinedProcessing = this.inlinedProcessing, + appScheme = this.appScheme, +) + +internal fun KomojuAndroidSDK.Configuration.toMobileConfiguration(): KomojuMobileSDKConfiguration = KomojuMobileSDKConfiguration( + language = this.language.languageCode, + currency = this.currency.currencyCode, + publishableKey = this.publishableKey, + isDebugMode = this.isDebugMode, + sessionId = this.sessionId, + redirectURL = this.redirectURL, + configurableTheme = this.configurableTheme.toKomojuConfigurableTheme(), + inlinedProcessing = this.inlinedProcessing, + appScheme = this.appScheme, +) + + +internal fun KomojuMobileSDKPaymentResult.toParcelable(): KomojuAndroidSDK.PaymentResult = KomojuAndroidSDK.PaymentResult(this.isSuccessFul) + +internal fun KomojuAndroidSDK.PaymentResult.toPaymentResult(): KomojuMobileSDKPaymentResult = KomojuMobileSDKPaymentResult(this.isSuccessFul) + diff --git a/android/src/main/java/com/komoju/android/sdk/KomojuPaymentActivity.kt b/android/src/main/java/com/komoju/android/sdk/KomojuPaymentActivity.kt index b116936..d0ad7a6 100644 --- a/android/src/main/java/com/komoju/android/sdk/KomojuPaymentActivity.kt +++ b/android/src/main/java/com/komoju/android/sdk/KomojuPaymentActivity.kt @@ -14,7 +14,6 @@ import androidx.compose.animation.slideInVertically import androidx.compose.animation.slideOutVertically import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.navigationBarsPadding @@ -30,13 +29,10 @@ import androidx.core.content.IntentCompat import androidx.core.util.Consumer import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.lifecycleScope -import cafe.adriel.voyager.navigator.Navigator -import cafe.adriel.voyager.transitions.SlideTransition -import com.komoju.android.sdk.navigation.PaymentResultScreenModel -import com.komoju.android.sdk.navigation.paymentResultScreenModel -import com.komoju.android.sdk.ui.screens.RouterEffect -import com.komoju.android.sdk.ui.screens.payment.KomojuPaymentScreen -import com.komoju.android.sdk.ui.theme.KomojuMobileSdkTheme +import com.komoju.mobile.sdk.navigation.PaymentResultScreenModel +import com.komoju.mobile.sdk.navigation.paymentResultScreenModel +import com.komoju.mobile.sdk.ui.screens.KomojuPaymentEntryPoint +import com.komoju.mobile.sdk.ui.screens.RouterEffect import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.delay import kotlinx.coroutines.flow.callbackFlow @@ -55,7 +51,7 @@ internal class KomojuPaymentActivity : ComponentActivity() { /* name = */ KomojuStartPaymentForResultContract.CONFIGURATION_KEY, /* clazz = */ - KomojuSDK.Configuration::class.java, + KomojuAndroidSDK.Configuration::class.java, ) ?: error("komoju sdk configuration is null"), ) }, @@ -87,21 +83,10 @@ internal class KomojuPaymentActivity : ComponentActivity() { .navigationBarsPadding(), contentAlignment = Alignment.BottomCenter, ) { - KomojuMobileSdkTheme(viewModel.configuration) { - Box( - modifier = Modifier - .fillMaxWidth() - .fillMaxHeight(.9f), - ) { - Navigator( - KomojuPaymentScreen(viewModel.configuration), - ) { navigator -> - commonScreenModel = navigator.paymentResultScreenModel() - SlideTransition(navigator) - RouterEffect(viewModel.router.collectAsStateWithLifecycle(), viewModel::onRouteConsumed) - NewIntentEffect(LocalContext.current, viewModel::onNewDeeplink) - } - } + KomojuPaymentEntryPoint(viewModel.configuration) { navigator -> + RouterEffect(viewModel.router.collectAsStateWithLifecycle(), viewModel::onRouteConsumed) + commonScreenModel = navigator.paymentResultScreenModel() + NewIntentEffect(LocalContext.current, viewModel::onNewDeeplink) } } } @@ -128,7 +113,7 @@ internal class KomojuPaymentActivity : ComponentActivity() { setResult( RESULT_OK, Intent().apply { - putExtra(KomojuStartPaymentForResultContract.RESULT_KEY, commonScreenModel?.result) + putExtra(KomojuStartPaymentForResultContract.RESULT_KEY, commonScreenModel?.result?.toParcelable()) }, ) lifecycleScope.launch { diff --git a/android/src/main/java/com/komoju/android/sdk/KomojuPaymentViewModel.kt b/android/src/main/java/com/komoju/android/sdk/KomojuPaymentViewModel.kt index 04ce1c9..b9e37f5 100644 --- a/android/src/main/java/com/komoju/android/sdk/KomojuPaymentViewModel.kt +++ b/android/src/main/java/com/komoju/android/sdk/KomojuPaymentViewModel.kt @@ -2,13 +2,14 @@ package com.komoju.android.sdk import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider -import com.komoju.android.sdk.ui.screens.KomojuPaymentRoute -import com.komoju.android.sdk.ui.screens.Router -import com.komoju.android.sdk.utils.DeeplinkEntity +import com.komoju.mobile.sdk.KomojuMobileSDKConfiguration +import com.komoju.mobile.sdk.ui.screens.KomojuPaymentRoute +import com.komoju.mobile.sdk.ui.screens.Router +import com.komoju.mobile.sdk.utils.DeeplinkEntity import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow -internal class KomojuPaymentViewModel(internal val configuration: KomojuSDK.Configuration) : ViewModel() { +internal class KomojuPaymentViewModel(internal val configuration: KomojuMobileSDKConfiguration) : ViewModel() { private val _isVisible = MutableStateFlow(false) val isVisible = _isVisible.asStateFlow() @@ -35,6 +36,7 @@ internal class KomojuPaymentViewModel(internal val configuration: KomojuSDK.Conf amount = deeplinkEntity.amount, currency = deeplinkEntity.currency, ) + DeeplinkEntity.Verify.BySessionId -> KomojuPaymentRoute.ProcessPayment.ProcessType.Session }, ), @@ -42,9 +44,10 @@ internal class KomojuPaymentViewModel(internal val configuration: KomojuSDK.Conf } } -internal class KomojuPaymentViewModelFactory(private val configuration: KomojuSDK.Configuration) : ViewModelProvider.NewInstanceFactory() { +internal class KomojuPaymentViewModelFactory(private val configuration: KomojuAndroidSDK.Configuration) : + ViewModelProvider.NewInstanceFactory() { override fun create(modelClass: Class): T { @Suppress("UNCHECKED_CAST") - return KomojuPaymentViewModel(configuration) as T + return KomojuPaymentViewModel(configuration.toMobileConfiguration()) as T } } diff --git a/android/src/main/java/com/komoju/android/sdk/KomojuSDK.kt b/android/src/main/java/com/komoju/android/sdk/KomojuSDK.kt deleted file mode 100644 index c1d2e8b..0000000 --- a/android/src/main/java/com/komoju/android/sdk/KomojuSDK.kt +++ /dev/null @@ -1,179 +0,0 @@ -package com.komoju.android.sdk - -import android.content.Context -import android.content.Intent -import android.os.Build -import android.os.Parcelable -import androidx.activity.result.contract.ActivityResultContract -import com.komoju.android.sdk.types.Currency -import com.komoju.android.sdk.types.Language -import com.komoju.android.sdk.ui.theme.ConfigurableTheme -import com.komoju.android.sdk.utils.empty -import kotlin.contracts.ExperimentalContracts -import kotlin.contracts.contract -import kotlinx.parcelize.Parcelize - -/** - * Main entry point for Komoju SDK integration. - * Provides configuration setup and payment processing contract. - */ -object KomojuSDK { - - /** - * Configuration class to hold parameters required for payment processing. - * Implements [Parcelable] to allow passing data between activities. - */ - @Parcelize - data class Configuration( - internal val language: Language, // Language setting for the payment UI. - internal val currency: Currency, // Currency used in the transaction. - internal val publishableKey: String?, // Public API key for Komoju integration. - internal val isDebugMode: Boolean, // Debug mode flag for logging and testing. - internal val sessionId: String?, // Unique session ID for payment transaction. - internal val redirectURL: String = String.empty, // URL to redirect after payment completion. - internal val configurableTheme: ConfigurableTheme, // Custom theme for UI elements. - internal val inlinedProcessing: Boolean, // Flag to enable inlined processing. - ) : Parcelable { - - /** - * Builder class for creating a [Configuration] instance. - * Offers a flexible way to set optional parameters. - */ - class Builder(private val publishableKey: String, private val sessionId: String) { - private var language: Language = Language.ENGLISH // Default language is English. - private var currency: Currency = Currency.JPY // Default currency is Japanese Yen. - private var isDebugMode: Boolean = false // Debug mode is off by default. - private var configurableTheme: ConfigurableTheme = ConfigurableTheme.default // Custom theme for UI elements. - private var inlinedProcessing: Boolean = false // Inlined processing is off by default. - - /** Sets the language for the payment. */ - fun setLanguage(language: Language) = apply { - this.language = language - } - - /** Sets the currency for the transaction. */ - fun setCurrency(currency: Currency) = apply { - this.currency = currency - } - - /** Enables or disables debug mode. */ - fun setDebugMode(isDebugMode: Boolean) = apply { - this.isDebugMode = isDebugMode - } - - /** Sets the custom theme for the payment UI. */ - fun setConfigurableTheme(configurableTheme: ConfigurableTheme) = apply { - this.configurableTheme = configurableTheme - } - - /** - * WARNING: Experimental API [Try this only if you are sure] Disabled by Default. - * - * This API enables or disables inlined processing. - * If this is enabled then The SDK will try to do processing with minimum amount of screens. - * - * For e.g. - * * If PayPay Payment id captured, it will close the SDK ASAP it verifies the payment. - * * When you will try to pay with Credit Card and Second step verification is not required, SDK will never show the WebView and will handle the callback itself. - * - */ - @ExperimentalKomojuPaymentApi - fun setInlinedProcessing(inlinedProcessing: Boolean) = apply { - this.inlinedProcessing = inlinedProcessing - } - - /** - * Builds the [Configuration] instance with the provided settings. - */ - fun build(): Configuration = Configuration( - language = language, - currency = currency, - publishableKey = publishableKey, - sessionId = sessionId, - isDebugMode = isDebugMode, - configurableTheme = configurableTheme, - inlinedProcessing = inlinedProcessing, - ) - } - } - - /** - * Data class to hold the result of a payment transaction. - * @param isSuccessFul Whether the payment was successful or not. - */ - @Parcelize - data class PaymentResult(val isSuccessFul: Boolean) : Parcelable - - /** - * Property that provides the contract to start the payment process - * and receive the result (success or failure). - */ - @JvmStatic - val KomojuPaymentResultContract: ActivityResultContract get() = KomojuStartPaymentForResultContract() -} - -/** - * Extension function to check if the current configuration is valid for processing a payment. - * @return True if the configuration is non-null and contains both publishableKey and sessionId. - */ -@OptIn(ExperimentalContracts::class) -fun KomojuSDK.Configuration?.canProcessPayment(): Boolean { - contract { - returns(true) implies (this@canProcessPayment != null) - } - return this?.publishableKey != null && this.sessionId != null -} - -/** - * Internal contract that handles starting the payment activity and returning the result. - */ -internal class KomojuStartPaymentForResultContract : ActivityResultContract() { - - companion object { - const val CONFIGURATION_KEY: String = "KomojuSDK.Configuration" // Key for passing configuration data via Intent. - const val RESULT_KEY: String = "KomojuSDK.PaymentResult" // Key for passing result data via Intent. - } - - /** - * Creates an [Intent] to start the payment activity using the provided configuration. - * Performs pre-checks before starting the activity. - * @param context Context in which the payment activity will be started. - * @param input Configuration used for payment setup. - * @return The [Intent] with necessary data to start the payment activity. - */ - override fun createIntent(context: Context, input: KomojuSDK.Configuration): Intent { - context.preChecks() // Ensure app scheme is correctly set in resources. - val intent = Intent(context, KomojuPaymentActivity::class.java) - intent.putExtra( - CONFIGURATION_KEY, - input.copy( - redirectURL = "${context.resources.getString(R.string.komoju_consumer_app_scheme)}://", - ), - ) - return intent - } - - /** - * Performs pre-checks to ensure that the app scheme is correctly set in strings.xml. - * Throws an error if the scheme is not properly configured. - */ - private fun Context.preChecks() { - if (resources.getString(R.string.komoju_consumer_app_scheme) == "this-should-not-be-the-case") { - error("Please set komoju_consumer_app_scheme in strings.xml with your app scheme") - } - } - - /** - * Parses the result returned by the payment activity. - * This is a placeholder for actual result parsing logic. - * @param resultCode Result code from the activity. - * @param intent The returned [Intent] containing the result data. - * @return [KomojuSDK.PaymentResult] indicating whether the payment was successful or not. - */ - override fun parseResult(resultCode: Int, intent: Intent?): KomojuSDK.PaymentResult = when { - Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU -> intent?.getParcelableExtra(RESULT_KEY, KomojuSDK.PaymentResult::class.java) - else -> - @Suppress("DEPRECATION") - intent?.getParcelableExtra(RESULT_KEY) - } ?: KomojuSDK.PaymentResult(isSuccessFul = false) -} diff --git a/android/src/main/java/com/komoju/android/sdk/KomojuStartPaymentForResultContract.kt b/android/src/main/java/com/komoju/android/sdk/KomojuStartPaymentForResultContract.kt new file mode 100644 index 0000000..0fb7f9f --- /dev/null +++ b/android/src/main/java/com/komoju/android/sdk/KomojuStartPaymentForResultContract.kt @@ -0,0 +1,66 @@ +package com.komoju.android.sdk + +import android.content.Context +import android.content.Intent +import android.os.Build +import androidx.activity.result.contract.ActivityResultContract +import com.komoju.mobile.sdk.KomojuMobileSDKPaymentResult + +/** + * Internal contract that handles starting the payment activity and returning the result. + */ +internal class KomojuStartPaymentForResultContract : + ActivityResultContract() { + + companion object { + const val CONFIGURATION_KEY: String = "KomojuSDK.Configuration" // Key for passing configuration data via Intent. + const val RESULT_KEY: String = "KomojuSDK.PaymentResult" // Key for passing result data via Intent. + } + + /** + * Creates an [Intent] to start the payment activity using the provided configuration. + * Performs pre-checks before starting the activity. + * @param context Context in which the payment activity will be started. + * @param input Configuration used for payment setup. + * @return The [Intent] with necessary data to start the payment activity. + */ + override fun createIntent(context: Context, input: KomojuAndroidSDK.Configuration): Intent { + context.preChecks() // Ensure app scheme is correctly set in resources. + val intent = Intent(context, KomojuPaymentActivity::class.java) + intent.putExtra( + CONFIGURATION_KEY, + input.copy( + redirectURL = "${context.resources.getString(R.string.komoju_consumer_app_scheme)}://", + appScheme = context.resources.getString(R.string.komoju_consumer_app_scheme), + ), + ) + return intent + } + + /** + * Performs pre-checks to ensure that the app scheme is correctly set in strings.xml. + * Throws an error if the scheme is not properly configured. + */ + private fun Context.preChecks() { + if (resources.getString(R.string.komoju_consumer_app_scheme) == "this-should-not-be-the-case") { + error("Please set komoju_consumer_app_scheme in strings.xml with your app scheme") + } + } + + /** + * Parses the result returned by the payment activity. + * This is a placeholder for actual result parsing logic. + * @param resultCode Result code from the activity. + * @param intent The returned [Intent] containing the result data. + * @return [KomojuMobileSDKPaymentResult] indicating whether the payment was successful or not. + */ + override fun parseResult(resultCode: Int, intent: Intent?): KomojuAndroidSDK.PaymentResult = when { + Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU -> intent?.getParcelableExtra( + RESULT_KEY, + KomojuAndroidSDK.PaymentResult::class.java, + ) + else -> + @Suppress("DEPRECATION") + intent?.getParcelableExtra(RESULT_KEY) + } ?: KomojuAndroidSDK.PaymentResult(isSuccessFul = false) +} diff --git a/android/src/main/java/com/komoju/android/sdk/ExperimentalKomojuPaymentApi.kt b/android/src/main/java/com/komoju/android/sdk/annotations/ExperimentalKomojuPaymentApi.kt similarity index 96% rename from android/src/main/java/com/komoju/android/sdk/ExperimentalKomojuPaymentApi.kt rename to android/src/main/java/com/komoju/android/sdk/annotations/ExperimentalKomojuPaymentApi.kt index 3566258..dbb7e6a 100644 --- a/android/src/main/java/com/komoju/android/sdk/ExperimentalKomojuPaymentApi.kt +++ b/android/src/main/java/com/komoju/android/sdk/annotations/ExperimentalKomojuPaymentApi.kt @@ -1,4 +1,4 @@ -package com.komoju.android.sdk +package com.komoju.android.sdk.annotations /** * Annotation used to mark APIs in the Komoju SDK as experimental. diff --git a/android/src/main/java/com/komoju/android/sdk/types/Currency.kt b/android/src/main/java/com/komoju/android/sdk/types/Currency.kt index 2381b3d..967b712 100644 --- a/android/src/main/java/com/komoju/android/sdk/types/Currency.kt +++ b/android/src/main/java/com/komoju/android/sdk/types/Currency.kt @@ -1,7 +1,5 @@ package com.komoju.android.sdk.types -import java.util.Locale - /** * Enum class representing supported currencies with corresponding ISO 4217 currency codes. * Each currency is associated with a specific locale. @@ -19,18 +17,6 @@ enum class Currency(val currencyCode: String) { USD(currencyCode = "USD"), ; - /** - * Converts the current currency to its corresponding locale. - * - * @return [Locale] for the currency. - * - JPY returns [Locale.JAPAN] - * - USD returns [Locale.US] - */ - fun toLocale(): Locale = when (this) { - JPY -> Locale.JAPAN - USD -> Locale.US - } - companion object { /** * Parses the given language code and returns the corresponding [Currency] enum constant. diff --git a/android/src/main/java/com/komoju/android/sdk/types/Language.kt b/android/src/main/java/com/komoju/android/sdk/types/Language.kt index 3c7528e..e63f6f6 100644 --- a/android/src/main/java/com/komoju/android/sdk/types/Language.kt +++ b/android/src/main/java/com/komoju/android/sdk/types/Language.kt @@ -1,6 +1,6 @@ package com.komoju.android.sdk.types -import java.util.Locale +import androidx.compose.ui.text.intl.Locale /** * Enum class representing supported languages with their respective language codes. @@ -19,17 +19,7 @@ enum class Language(val languageCode: String) { JAPANESE(languageCode = "ja"), ; - /** - * Converts the current language to its corresponding locale. - * - * @return [Locale] for the language. - * - ENGLISH returns [Locale.ENGLISH] - * - JAPANESE returns [Locale.JAPANESE] - */ - internal fun toLocale(): Locale = when (this) { - ENGLISH -> Locale.ENGLISH - JAPANESE -> Locale.JAPANESE - } + override fun toString(): String = languageCode companion object { /** @@ -40,9 +30,11 @@ enum class Language(val languageCode: String) { * - Returns [ENGLISH] for all other cases. */ val default - get() = when (Locale.getDefault().language) { - Locale.JAPANESE.language -> JAPANESE + get() = when (Locale.current.language) { + "ja" -> JAPANESE else -> ENGLISH } + + fun parse(languageCode: String?): Language = entries.find { it.languageCode == languageCode } ?: default } } diff --git a/android/src/main/java/com/komoju/android/sdk/ui/composables/ThemedCircularProgressIndicator.kt b/android/src/main/java/com/komoju/android/sdk/ui/composables/ThemedCircularProgressIndicator.kt deleted file mode 100644 index fa9f26f..0000000 --- a/android/src/main/java/com/komoju/android/sdk/ui/composables/ThemedCircularProgressIndicator.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.komoju.android.sdk.ui.composables - -import androidx.compose.material3.CircularProgressIndicator -import androidx.compose.runtime.Composable -import androidx.compose.ui.graphics.Color -import com.komoju.android.sdk.ui.theme.LocalConfigurableTheme - -@Composable -internal fun ThemedCircularProgressIndicator() { - val configuration = LocalConfigurableTheme.current - CircularProgressIndicator(color = Color(configuration.loaderColor)) -} diff --git a/android/src/main/java/com/komoju/android/sdk/ui/screens/awating/KonbiniAwaitingPaymentScreenModel.kt b/android/src/main/java/com/komoju/android/sdk/ui/screens/awating/KonbiniAwaitingPaymentScreenModel.kt deleted file mode 100644 index ed76f3b..0000000 --- a/android/src/main/java/com/komoju/android/sdk/ui/screens/awating/KonbiniAwaitingPaymentScreenModel.kt +++ /dev/null @@ -1,23 +0,0 @@ -package com.komoju.android.sdk.ui.screens.awating - -import com.komoju.android.sdk.navigation.RouterStateScreenModel -import com.komoju.android.sdk.ui.screens.KomojuPaymentRoute -import com.komoju.android.sdk.ui.screens.Router -import com.komoju.mobile.sdk.entities.Payment - -internal class KonbiniAwaitingPaymentScreenModel(payment: Payment? = null) : - RouterStateScreenModel( - KonbiniAwaitingPaymentUiState(payment), - ) { - - fun onPrimaryButtonClicked() { - when (val payment = state.value.payment) { - is Payment.Konbini -> mutableRouter.value = Router.Push(KomojuPaymentRoute.WebView(payment.instructionURL, canComeBack = true)) - else -> Unit - } - } - - fun onSecondaryButtonClicked() { - mutableRouter.value = Router.Pop - } -} diff --git a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/CreditCardSchemeIcons.kt b/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/CreditCardSchemeIcons.kt deleted file mode 100644 index 7819ac6..0000000 --- a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/CreditCardSchemeIcons.kt +++ /dev/null @@ -1,50 +0,0 @@ -package com.komoju.android.sdk.ui.screens.payment.composables - -import androidx.compose.animation.AnimatedVisibility -import androidx.compose.foundation.Image -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.width -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.dp -import com.komoju.android.sdk.R -import com.komoju.android.sdk.utils.CardScheme - -@Composable -internal fun CreditCardSchemeIcons(cardScheme: CardScheme) { - Row { - AnimatedVisibility(visible = cardScheme == CardScheme.UNKNOWN) { - Row { - Image(painter = painterResource(id = R.drawable.komoju_ic_visa), contentDescription = "visa_icon") - Spacer(Modifier.width(8.dp)) - Image(painter = painterResource(id = R.drawable.komoju_ic_master), contentDescription = "mastercard_icon") - Spacer(Modifier.width(8.dp)) - Image(painter = painterResource(id = R.drawable.komoju_ic_amex), contentDescription = "amex_icon") - } - } - AnimatedVisibility(visible = cardScheme == CardScheme.VISA) { - Image(painter = painterResource(id = R.drawable.komoju_ic_visa), contentDescription = "visa_icon") - } - AnimatedVisibility(visible = cardScheme == CardScheme.MASTERCARD) { - Image(painter = painterResource(id = R.drawable.komoju_ic_master), contentDescription = "mastercard_icon") - } - AnimatedVisibility(visible = cardScheme == CardScheme.AMEX) { - Image(painter = painterResource(id = R.drawable.komoju_ic_amex), contentDescription = "amex_icon") - } - AnimatedVisibility(visible = cardScheme == CardScheme.DINERS_CLUB) { - Image(painter = painterResource(id = R.drawable.komoju_ic_diners), contentDescription = "diners_icon") - } - AnimatedVisibility(visible = cardScheme == CardScheme.JCB) { - Image(painter = painterResource(id = R.drawable.komoju_ic_jcb), contentDescription = "jcb_icon") - } - } -} - -@Composable -@Preview -private fun CreditCardSchemeIconsPreview() { - CreditCardSchemeIcons(CardScheme.UNKNOWN) -} diff --git a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/OffSitePayForm.kt b/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/OffSitePayForm.kt deleted file mode 100644 index 1f66d91..0000000 --- a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/OffSitePayForm.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.komoju.android.sdk.ui.screens.payment.composables - -import androidx.compose.foundation.Image -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.width -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp -import com.komoju.android.sdk.R -import com.komoju.android.sdk.ui.composables.PrimaryButton -import com.komoju.android.sdk.ui.theme.KomojuMobileSdkTheme -import com.komoju.mobile.sdk.entities.PaymentMethod -import com.komoju.mobile.sdk.types.OffSitePaymentType - -@Composable -internal fun OffSitePayForm(paymentMethod: PaymentMethod.OffSitePayment, onPayButtonClicked: () -> Unit) { - val titleKey = remember(paymentMethod) { - when (paymentMethod.type) { - OffSitePaymentType.ALI_PAY -> R.string.komoju_payment_via_alipay - OffSitePaymentType.AU_PAY -> R.string.komoju_payment_via_au_pay - OffSitePaymentType.MER_PAY -> R.string.komoju_payment_via_mer_pay - OffSitePaymentType.PAY_PAY -> R.string.komoju_payment_via_paypay - OffSitePaymentType.RAKUTEN_PAY -> R.string.komoju_payment_via_rakuten_pay - OffSitePaymentType.LINE_PAY -> R.string.komoju_payment_via_line_pay - else -> null - } - } - - val messageKey = remember(paymentMethod) { - when (paymentMethod.type) { - OffSitePaymentType.ALI_PAY -> R.string.komoju_you_will_be_redirected_to_alipay - OffSitePaymentType.AU_PAY -> R.string.komoju_you_will_be_redirected_to_au_pay - OffSitePaymentType.MER_PAY -> R.string.komoju_you_will_be_redirected_to_mer_pay - OffSitePaymentType.PAY_PAY -> R.string.komoju_you_will_be_redirected_to_paypay - OffSitePaymentType.RAKUTEN_PAY -> R.string.komoju_you_will_be_redirected_to_rakuten - OffSitePaymentType.LINE_PAY -> R.string.komoju_you_will_be_redirected_to_line_pay - else -> null - } - } - - val paymentButtonKey = remember(paymentMethod) { - when (paymentMethod.type) { - OffSitePaymentType.ALI_PAY -> R.string.komoju_continue_to_alipay - OffSitePaymentType.AU_PAY -> R.string.komoju_continue_to_aupay - OffSitePaymentType.MER_PAY -> R.string.komoju_continue_to_merpay - OffSitePaymentType.PAY_PAY -> R.string.komoju_continue_to_paypay - OffSitePaymentType.RAKUTEN_PAY -> R.string.komoju_continue_to_rakuten - OffSitePaymentType.LINE_PAY -> R.string.komoju_continue_to_linepay - else -> null - } - } - - if (titleKey != null && messageKey != null && paymentButtonKey != null) { - Column(modifier = Modifier.padding(all = 16.dp)) { - Text(text = stringResource(titleKey), style = TextStyle(fontWeight = FontWeight.Bold, fontSize = 24.sp)) - Spacer(modifier = Modifier.height(12.dp)) - Text(text = stringResource(messageKey)) - Spacer(modifier = Modifier.height(24.dp)) - Row( - modifier = Modifier - .background(Color(0xFFF3F7F9), shape = RoundedCornerShape(8.dp)) - .padding(16.dp), - verticalAlignment = Alignment.CenterVertically, - ) { - Image( - painter = painterResource(R.drawable.komoju_ic_app_opens_info), - contentDescription = "app_opens_info", - modifier = Modifier.size(32.dp), - ) - Spacer(modifier = Modifier.width(16.dp)) - Text(text = stringResource(R.string.komoju_webview_open_info)) - } - Spacer(modifier = Modifier.height(32.dp)) - PrimaryButton(stringResource(paymentButtonKey), modifier = Modifier.fillMaxWidth(), onPayButtonClicked) - } - } -} - -@Composable -@Preview(showBackground = true) -private fun AppPayFormPreview() { - KomojuMobileSdkTheme { - OffSitePayForm( - PaymentMethod.OffSitePayment( - hashedGateway = "paypay", - exchangeRate = 1.0, - currency = "JPY", - amount = "100", - additionalFields = listOf(), - type = OffSitePaymentType.PAY_PAY, - ), - ) { } - } -} diff --git a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/PaymentMethodsRow.kt b/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/PaymentMethodsRow.kt deleted file mode 100644 index 97c41c7..0000000 --- a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/PaymentMethodsRow.kt +++ /dev/null @@ -1,149 +0,0 @@ -package com.komoju.android.sdk.ui.screens.payment.composables - -import androidx.compose.foundation.Image -import androidx.compose.foundation.border -import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.defaultMinSize -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.lazy.LazyRow -import androidx.compose.foundation.lazy.items -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.clip -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp -import com.komoju.android.sdk.R -import com.komoju.android.sdk.ui.theme.Gray200 -import com.komoju.android.sdk.ui.theme.KomojuDarkGreen -import com.komoju.mobile.sdk.entities.PaymentMethod -import com.komoju.mobile.sdk.types.OffSitePaymentType - -@Composable -internal fun PaymentMethodsRow( - paymentMethods: List, - selectedPaymentMethod: PaymentMethod?, - onSelected: (PaymentMethod) -> Unit, -) { - LazyRow(contentPadding = PaddingValues(horizontal = 8.dp)) { - items(paymentMethods) { paymentMethod -> - PaymentMethodComposable( - paymentMethod, - paymentMethod == selectedPaymentMethod, - onSelected = { - onSelected(paymentMethod) - }, - ) - } - } -} - -@Composable -private fun PaymentMethodComposable(paymentMethod: PaymentMethod, isSelected: Boolean, onSelected: () -> Unit) { - Column( - modifier = Modifier - .defaultMinSize(minWidth = 120.dp) - .padding(4.dp) - .clip(RoundedCornerShape(8.dp)) - .border(1.dp, if (isSelected) KomojuDarkGreen else Gray200, RoundedCornerShape(8.dp)) - .clickable(onClick = onSelected) - .padding(start = 12.dp, end = 12.dp, top = 12.dp, bottom = 8.dp), - ) { - Image( - painter = painterResource(paymentMethod.displayIcon), - contentDescription = "${paymentMethod.displayName} icon", - modifier = Modifier.height(32.dp), - ) - Spacer(modifier = Modifier.height(4.dp)) - Text(paymentMethod.displayName, color = Color.Black, fontWeight = FontWeight.SemiBold, fontSize = 14.sp) - } -} - -private val PaymentMethod.displayName - @Composable - get() = when (this) { - is PaymentMethod.BankTransfer -> stringResource(R.string.komoju_bank_transfer) - is PaymentMethod.BitCash -> stringResource(R.string.komoju_bitcash) - is PaymentMethod.CreditCard -> stringResource(R.string.komoju_credit_card) - is PaymentMethod.Konbini -> stringResource(R.string.komoju_konbini) - is PaymentMethod.NetCash -> stringResource(R.string.komoju_netcash) - is PaymentMethod.OffSitePayment -> when (type) { - OffSitePaymentType.AU_PAY -> stringResource(R.string.komoju_aupay) - OffSitePaymentType.ALI_PAY -> stringResource(R.string.komoju_alipay) - OffSitePaymentType.MER_PAY -> stringResource(R.string.komoju_merpay) - OffSitePaymentType.PAY_PAY -> stringResource(R.string.komoju_paypay) - OffSitePaymentType.RAKUTEN_PAY -> stringResource(R.string.komoju_rakuten_pay) - OffSitePaymentType.LINE_PAY -> stringResource(R.string.komoju_line_pay) - OffSitePaymentType.UNKNOWN -> stringResource(R.string.komoju_unknown) - } - is PaymentMethod.Other -> stringResource(R.string.komoju_other) - is PaymentMethod.Paidy -> stringResource(R.string.komoju_paidy) - is PaymentMethod.PayEasy -> stringResource(R.string.komoju_payeasy) - is PaymentMethod.WebMoney -> stringResource(R.string.komoju_webmoney) - } - -private val PaymentMethod.displayIcon - get() = when (this) { - is PaymentMethod.OffSitePayment -> when (type) { - OffSitePaymentType.ALI_PAY -> R.drawable.komoju_ic_alipay - OffSitePaymentType.AU_PAY -> R.drawable.komoju_ic_au_pay - OffSitePaymentType.MER_PAY -> R.drawable.komoju_ic_merpay - OffSitePaymentType.PAY_PAY -> R.drawable.komoju_ic_paypay - OffSitePaymentType.RAKUTEN_PAY -> R.drawable.komoju_ic_rakuten_pay - OffSitePaymentType.LINE_PAY -> R.drawable.komoju_ic_linepay - OffSitePaymentType.UNKNOWN -> R.drawable.komoju_ic_credit_card - } - - is PaymentMethod.BankTransfer -> R.drawable.komoju_ic_bank_transfer - is PaymentMethod.BitCash -> R.drawable.komoju_ic_bitcash - is PaymentMethod.CreditCard -> R.drawable.komoju_ic_credit_card - is PaymentMethod.Konbini -> R.drawable.komoju_ic_konbini - is PaymentMethod.NetCash -> R.drawable.komoju_ic_net_cash - is PaymentMethod.Paidy -> R.drawable.komoju_ic_paidy - is PaymentMethod.PayEasy -> R.drawable.komoju_ic_pay_easy - is PaymentMethod.WebMoney -> R.drawable.komoju_ic_web_money - is PaymentMethod.Other -> R.drawable.komoju_ic_credit_card - } - -@Composable -@Preview -private fun PaymentMethodComposablePreview() { - val paymentMethods = listOf( - PaymentMethod.CreditCard( - hashedGateway = "", - exchangeRate = 0.0, - currency = "", - amount = "0", - additionalFields = listOf(), - brands = listOf(), - ), - PaymentMethod.Konbini( - hashedGateway = "", - exchangeRate = 0.0, - currency = "", - amount = "0", - additionalFields = listOf(), - customerFee = 0, - brands = listOf(), - ), - PaymentMethod.OffSitePayment( - hashedGateway = "", - exchangeRate = 0.0, - currency = "", - amount = "0", - additionalFields = listOf(), - type = OffSitePaymentType.PAY_PAY, - ), - ) - PaymentMethodsRow(paymentMethods, paymentMethods.first()) {} -} diff --git a/android/src/main/java/com/komoju/android/sdk/ui/screens/webview/WebChromeClient.kt b/android/src/main/java/com/komoju/android/sdk/ui/screens/webview/WebChromeClient.kt deleted file mode 100644 index b3206b6..0000000 --- a/android/src/main/java/com/komoju/android/sdk/ui/screens/webview/WebChromeClient.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.komoju.android.sdk.ui.screens.webview - -import android.webkit.ConsoleMessage -import com.kevinnzou.web.AccompanistWebChromeClient - -internal class WebChromeClient : AccompanistWebChromeClient() { - override fun onConsoleMessage(consoleMessage: ConsoleMessage): Boolean = true -} diff --git a/android/src/main/java/com/komoju/android/sdk/ui/screens/webview/WebViewClient.kt b/android/src/main/java/com/komoju/android/sdk/ui/screens/webview/WebViewClient.kt deleted file mode 100644 index e41a27a..0000000 --- a/android/src/main/java/com/komoju/android/sdk/ui/screens/webview/WebViewClient.kt +++ /dev/null @@ -1,52 +0,0 @@ -package com.komoju.android.sdk.ui.screens.webview - -import android.content.Context -import android.content.Intent -import android.net.Uri -import android.webkit.WebResourceRequest -import android.webkit.WebView -import androidx.core.app.ActivityOptionsCompat -import androidx.core.content.ContextCompat.startActivity -import androidx.core.net.toUri -import com.kevinnzou.web.AccompanistWebViewClient -import com.komoju.android.sdk.KomojuPaymentActivity -import com.komoju.android.sdk.R - -internal class WebViewClient : AccompanistWebViewClient() { - - @Deprecated("Deprecated in Java") - override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean = view.checkAndOpen(url) - override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest): Boolean = view.checkAndOpen(request.url.toString()) - - private fun WebView.checkAndOpen(url: String): Boolean { - try { - val uri = url.toUri() - val handled = uri.handle(context) - if (handled.not()) { - error("Unsupported scheme for deeplink, load in webView Instead.") - } else { - return handled - } - } catch (_: Exception) { - loadUrl(url) - return false - } - } -} - -private fun Uri.handle(context: Context): Boolean = openKomojuSDKIfAvailable(context) - -private fun Uri.openKomojuSDKIfAvailable(context: Context): Boolean { - if (scheme == context.resources.getString(R.string.komoju_consumer_app_scheme)) { - startActivity( - context, - Intent(context, KomojuPaymentActivity::class.java).apply { - data = this@openKomojuSDKIfAvailable - }, - ActivityOptionsCompat.makeBasic().toBundle(), - ) - return true - } else { - return false - } -} diff --git a/android/src/main/java/com/komoju/android/sdk/ui/screens/webview/WebViewScreenModel.kt b/android/src/main/java/com/komoju/android/sdk/ui/screens/webview/WebViewScreenModel.kt deleted file mode 100644 index 4e62610..0000000 --- a/android/src/main/java/com/komoju/android/sdk/ui/screens/webview/WebViewScreenModel.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.komoju.android.sdk.ui.screens.webview - -import com.komoju.android.sdk.navigation.RouterStateScreenModel - -internal class WebViewScreenModel : RouterStateScreenModel(Unit) { - - fun onBackPressed() { - mutableRouter.pop() - } -} diff --git a/android/src/main/java/com/komoju/android/sdk/ui/theme/ConfigurableTheme.kt b/android/src/main/java/com/komoju/android/sdk/ui/theme/ConfigurableTheme.kt deleted file mode 100644 index 864953d..0000000 --- a/android/src/main/java/com/komoju/android/sdk/ui/theme/ConfigurableTheme.kt +++ /dev/null @@ -1,70 +0,0 @@ -package com.komoju.android.sdk.ui.theme - -import android.graphics.Color -import android.os.Parcelable -import androidx.annotation.ColorInt -import kotlinx.parcelize.Parcelize - -/** - * Interface representing a configurable theme with customizable UI properties. - * This interface extends [Parcelable], allowing themes to be passed between Android components. - */ -interface ConfigurableTheme : Parcelable { - - /** - * Color value for the primary button background. - * - * @return An integer representing a color value annotated with [ColorInt]. - */ - @get:ColorInt - val primaryButtonColor: Int - - /** - * Color value for the content (e.g., text or icon) inside the primary button. - * - * @return An integer representing a color value annotated with [ColorInt]. - */ - @get:ColorInt - val primaryButtonContentColor: Int - - /** - * Corner radius for the primary button in density-independent pixels (DP). - * - * @return An integer representing the corner radius in DP annotated with [ColorInt]. - */ - @get:ColorInt - val primaryButtonCornerRadiusInDP: Int - - /** - * Color value for the loader/spinner. - * - * @return An integer representing a color value annotated with [ColorInt]. - */ - @get:ColorInt - val loaderColor: Int - - companion object { - /** - * Provides a default implementation of the [ConfigurableTheme]. - */ - val default = DefaultConfigurableTheme() - } -} - -/** - * Data class representing the default implementation of [ConfigurableTheme]. - * This class uses default values for UI elements such as buttons and loaders. - * It is annotated with [Parcelize] to allow it to be passed between Android components. - * - * @param primaryButtonColor The background color of the primary button. - * @param primaryButtonContentColor The color of the content inside the primary button. - * @param primaryButtonCornerRadiusInDP The corner radius of the primary button in DP. - * @param loaderColor The color of the loader/spinner. - */ -@Parcelize -data class DefaultConfigurableTheme( - override val primaryButtonColor: Int = Color.parseColor("#FF297FE7"), // Default blue color for primary button. - override val primaryButtonContentColor: Int = Color.WHITE, // Default white color for primary button content. - override val primaryButtonCornerRadiusInDP: Int = 8, // Default corner radius of 8 DP for primary button. - override val loaderColor: Int = Color.parseColor("#FF3CC239"), // Default green color for loader. -) : ConfigurableTheme diff --git a/android/src/main/java/com/komoju/android/sdk/utils/AmountUtils.kt b/android/src/main/java/com/komoju/android/sdk/utils/AmountUtils.kt deleted file mode 100644 index 1d542bb..0000000 --- a/android/src/main/java/com/komoju/android/sdk/utils/AmountUtils.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.komoju.android.sdk.utils - -import android.icu.text.NumberFormat -import android.icu.util.Currency as PlatformCurrency -import com.komoju.android.sdk.types.Currency - -internal object AmountUtils { - fun formatToDecimal(currency: Currency, amount: String): String { - if (amount.isBlank()) return "" - val locale = currency.toLocale() - return NumberFormat.getCurrencyInstance(locale).apply { - this.maximumFractionDigits = 0 - this.minimumFractionDigits = 0 - this.currency = PlatformCurrency.getInstance(locale) - }.format(amount.toDouble()) - } -} diff --git a/android/src/main/java/com/komoju/android/sdk/utils/PreviewScreen.kt b/android/src/main/java/com/komoju/android/sdk/utils/PreviewScreen.kt deleted file mode 100644 index 3777cd2..0000000 --- a/android/src/main/java/com/komoju/android/sdk/utils/PreviewScreen.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.komoju.android.sdk.utils - -import androidx.compose.runtime.Composable -import cafe.adriel.voyager.core.screen.Screen - -/** - * An Empty Screen to Support Android Studio Previews - */ -internal object PreviewScreen : Screen { - private fun readResolve(): Any = PreviewScreen - - @Composable - override fun Content() = Unit -} diff --git a/android/src/main/java/com/komoju/android/sdk/utils/StringExt.kt b/android/src/main/java/com/komoju/android/sdk/utils/StringExt.kt deleted file mode 100644 index b431528..0000000 --- a/android/src/main/java/com/komoju/android/sdk/utils/StringExt.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.komoju.android.sdk.utils - -private val EMAIL_REGEX = "^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}$".toRegex() - -internal inline val String.Companion.empty get() = "" - -internal inline val String.isValidEmail: Boolean get() = matches(EMAIL_REGEX) - -internal inline val String.isKatakanaOnly: Boolean get() = all { it.isKatakana } - -internal inline val Char.isKatakana get() = Character.UnicodeBlock.of(this) == Character.UnicodeBlock.KATAKANA diff --git a/android/src/main/res/values/strings.xml b/android/src/main/res/values/strings.xml index 2bd2a0f..333e094 100644 --- a/android/src/main/res/values/strings.xml +++ b/android/src/main/res/values/strings.xml @@ -1,121 +1,4 @@ this-should-not-be-the-case - The entered cardholder name cannot be empty - The entered cardholder name is not valid - The entered card number is not valid - The entered expiry date is not valid - The entered CVV is not valid - Payment successful - Payment failed - Awaiting payment - Your payment has been processed successfully. - Your payment has failed. - You need to go to your local %1$s and make the payment to proceed. - Your payment is awaiting processing. - Error - Receipt Number - Confirmation Code - Done - Update Payment method - View instructions - Okay - Have a question? Contact us - I will do it later - We noticed that you’ve canceled the payment process. If this was a mistake, you can try again to complete your purchase. - We attempted to process your payment, but something went wrong. Please update your payment method below to continue. - We tried to charge your card but, something went wrong. Please update your payment method below to continue - Back to store - Payment Options - Pay %1$s - Cardholder name - Full name on card - Card Number - MM/YY - CVV - Save this card for future payments - Daily Yamazaki - Family Mart - Lawson - MiniStop - SeicoMart - 7-Eleven - Full name on receipt - Name (shown on receipt) - Email - Enter Your Email Address - NET CASH Information - NET CASH id - Payment via Alipay - Payment via AU Pay - Payment via Mer Pay - Payment via Paypay - Payment via Rakuten Pay - Payment via Line Pay - You will be redirected to Alipay to complete the payment - You will be redirected to AU Pay to complete the payment - You will be redirected to Mer Pay to complete the payment - You will be redirected to Paypay to complete the payment - You will be redirected to Rakuten to complete the payment - You will be redirected to Line Pay to complete the payment - Continue to Alipay - Continue to AuPay - Continue to MerPay - Continue to PayPay - Continue to Rakuten - Continue to LinePay - Continue to Paidy - Note, a web window will be opened. After purchase you will be redirected back. - Full Name - Enter your name - Phone Number - Enter your phone number - Last Name - First Name - Last Name (Phonetic) - First Name (Phonetic) - WebMoney Information - Prepaid number - Payment Success - Thank you for your order - BitCash Information - Hiragana id - Bank Transfer - BitCash - Credit card - Konbini - NetCash - au Pay - AliPay - Mer Pay - PayPay - Rakuten Pay - Line Pay - Unknown - Other - Paidy - PayEasy - WebMoney - Total Payment - The entered name cannot be empty - The entered email is not valid - Please select a konbini brand - The entered phone number cannot be empty - The entered phone number is not valid - The entered net cash id cannot be empty - The entered net cash id is not valid - The entered bit cash id cannot be empty - The entered bit cash id is not valid - The entered prepaid number cannot be empty - The entered prepaid number is not valid - The entered last name cannot be empty - The entered first name cannot be empty - The entered first name phonetic cannot be empty - The entered first name phonetic must be a kana - The entered last name phonetic cannot be empty - The entered last name phonetic must be a kana - Yes - No - Are you sure you want to cancel the payment? - Cancel Payment? \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index be9076a..bfcc503 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -10,4 +10,5 @@ plugins { alias(libs.plugins.kotlin.parcelize) apply false alias(libs.plugins.jetbrains.kotlin.jvm) apply false alias(libs.plugins.jetbrains.dokka) apply false + alias(libs.plugins.composeMultiplatform) apply false } diff --git a/example-android/build.gradle.kts b/example-android/build.gradle.kts index 0a03c2b..6e34cda 100644 --- a/example-android/build.gradle.kts +++ b/example-android/build.gradle.kts @@ -14,7 +14,7 @@ val localProperties = Properties().apply { android { namespace = "com.komoju.android" - compileSdk = 34 + compileSdk = 35 defaultConfig { minSdk = 24 diff --git a/example-android/src/main/java/com/komoju/android/ui/remote/RemoteApiService.kt b/example-android/src/main/java/com/komoju/android/remote/RemoteApiService.kt similarity index 78% rename from example-android/src/main/java/com/komoju/android/ui/remote/RemoteApiService.kt rename to example-android/src/main/java/com/komoju/android/remote/RemoteApiService.kt index 2c09531..e14557a 100644 --- a/example-android/src/main/java/com/komoju/android/ui/remote/RemoteApiService.kt +++ b/example-android/src/main/java/com/komoju/android/remote/RemoteApiService.kt @@ -1,14 +1,13 @@ -package com.komoju.android.ui.remote +package com.komoju.android.remote import com.komoju.android.BuildConfig -import com.komoju.android.ui.remote.dtos.CreateSessionRequest -import com.komoju.android.ui.remote.dtos.CreateSessionResponse -import com.komoju.android.ui.remote.dtos.PublishableKeyResponse +import com.komoju.android.remote.dtos.CreateSessionRequest +import com.komoju.android.remote.dtos.CreateSessionResponse +import com.komoju.android.remote.dtos.PublishableKeyResponse import java.util.concurrent.TimeUnit import okhttp3.OkHttpClient import retrofit2.Response import retrofit2.Retrofit -import retrofit2.converter.gson.GsonConverterFactory import retrofit2.http.Body import retrofit2.http.GET import retrofit2.http.Headers @@ -31,7 +30,7 @@ interface RemoteApiService { .readTimeout(100, TimeUnit.SECONDS) // Set the read timeout to 100 seconds because the glitch server is slow .build(), ) - .addConverterFactory(GsonConverterFactory.create()) + .addConverterFactory(retrofit2.converter.gson.GsonConverterFactory.create()) .baseUrl(BuildConfig.SERVER_URL) .build() .create(RemoteApiService::class.java) diff --git a/example-android/src/main/java/com/komoju/android/ui/remote/dtos/CreateSessionRequest.kt b/example-android/src/main/java/com/komoju/android/remote/dtos/CreateSessionRequest.kt similarity index 85% rename from example-android/src/main/java/com/komoju/android/ui/remote/dtos/CreateSessionRequest.kt rename to example-android/src/main/java/com/komoju/android/remote/dtos/CreateSessionRequest.kt index 12e0f3b..2f07cc2 100644 --- a/example-android/src/main/java/com/komoju/android/ui/remote/dtos/CreateSessionRequest.kt +++ b/example-android/src/main/java/com/komoju/android/remote/dtos/CreateSessionRequest.kt @@ -1,4 +1,4 @@ -package com.komoju.android.ui.remote.dtos +package com.komoju.android.remote.dtos import com.google.gson.annotations.SerializedName diff --git a/example-android/src/main/java/com/komoju/android/ui/remote/dtos/CreateSessionResponse.kt b/example-android/src/main/java/com/komoju/android/remote/dtos/CreateSessionResponse.kt similarity index 77% rename from example-android/src/main/java/com/komoju/android/ui/remote/dtos/CreateSessionResponse.kt rename to example-android/src/main/java/com/komoju/android/remote/dtos/CreateSessionResponse.kt index 6b7a983..4fba145 100644 --- a/example-android/src/main/java/com/komoju/android/ui/remote/dtos/CreateSessionResponse.kt +++ b/example-android/src/main/java/com/komoju/android/remote/dtos/CreateSessionResponse.kt @@ -1,4 +1,4 @@ -package com.komoju.android.ui.remote.dtos +package com.komoju.android.remote.dtos import com.google.gson.annotations.SerializedName diff --git a/example-android/src/main/java/com/komoju/android/ui/remote/dtos/PublishableKeyResponse.kt b/example-android/src/main/java/com/komoju/android/remote/dtos/PublishableKeyResponse.kt similarity index 79% rename from example-android/src/main/java/com/komoju/android/ui/remote/dtos/PublishableKeyResponse.kt rename to example-android/src/main/java/com/komoju/android/remote/dtos/PublishableKeyResponse.kt index 44535d5..94d91d4 100644 --- a/example-android/src/main/java/com/komoju/android/ui/remote/dtos/PublishableKeyResponse.kt +++ b/example-android/src/main/java/com/komoju/android/remote/dtos/PublishableKeyResponse.kt @@ -1,4 +1,4 @@ -package com.komoju.android.ui.remote.dtos +package com.komoju.android.remote.dtos import com.google.gson.annotations.SerializedName diff --git a/example-android/src/main/java/com/komoju/android/ui/screens/store/FakeItemDetailScreen.kt b/example-android/src/main/java/com/komoju/android/ui/screens/store/FakeItemDetailScreen.kt index b947bc6..c0b83e2 100644 --- a/example-android/src/main/java/com/komoju/android/ui/screens/store/FakeItemDetailScreen.kt +++ b/example-android/src/main/java/com/komoju/android/ui/screens/store/FakeItemDetailScreen.kt @@ -46,7 +46,7 @@ import cafe.adriel.voyager.core.screen.Screen import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import com.komoju.android.R -import com.komoju.android.sdk.KomojuSDK +import com.komoju.android.sdk.KomojuAndroidSDK import com.komoju.android.sdk.canProcessPayment import com.komoju.android.ui.theme.KomojuDarkGreen @@ -60,7 +60,7 @@ data class FakeItemDetailScreen(private val index: Int) : Screen { val uiState by screenModel.uiState.collectAsStateWithLifecycle() val item by remember { derivedStateOf { uiState.items[index] } } val komojuSDKConfiguration by screenModel.komojuSDKConfiguration.collectAsStateWithLifecycle() - val komojuPaymentLauncher = rememberLauncherForActivityResult(KomojuSDK.KomojuPaymentResultContract) { + val komojuPaymentLauncher = rememberLauncherForActivityResult(KomojuAndroidSDK.activityResultContract) { screenModel.onKomojuPaymentCompleted() navigator.push(if (it.isSuccessFul) FakeOrderSuccessScreen() else FakeOrderFailedScreen()) } diff --git a/example-android/src/main/java/com/komoju/android/ui/screens/store/FakeStoreScreen.kt b/example-android/src/main/java/com/komoju/android/ui/screens/store/FakeStoreScreen.kt index dc3619a..41b281e 100644 --- a/example-android/src/main/java/com/komoju/android/ui/screens/store/FakeStoreScreen.kt +++ b/example-android/src/main/java/com/komoju/android/ui/screens/store/FakeStoreScreen.kt @@ -15,7 +15,6 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.LazyVerticalGrid -import androidx.compose.foundation.lazy.grid.items import androidx.compose.foundation.lazy.grid.itemsIndexed import androidx.compose.foundation.shape.CircleShape import androidx.compose.material.icons.Icons @@ -26,7 +25,6 @@ import androidx.compose.material3.Icon import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -46,6 +44,7 @@ import androidx.compose.ui.text.withStyle import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import androidx.lifecycle.compose.collectAsStateWithLifecycle import cafe.adriel.voyager.core.model.rememberNavigatorScreenModel import cafe.adriel.voyager.core.screen.Screen import cafe.adriel.voyager.navigator.LocalNavigator @@ -61,7 +60,7 @@ class FakeStoreScreen : Screen { override fun Content() { val navigator = LocalNavigator.currentOrThrow val screenModel = navigator.rememberNavigatorScreenModel { FakeStoreScreenModel() } - val uiState by screenModel.uiState.collectAsState() + val uiState by screenModel.uiState.collectAsStateWithLifecycle() val context = LocalContext.current LaunchedEffect(uiState.error) { uiState.error?.let { diff --git a/example-android/src/main/java/com/komoju/android/ui/screens/store/FakeStoreScreenModel.kt b/example-android/src/main/java/com/komoju/android/ui/screens/store/FakeStoreScreenModel.kt index c174f4f..e2a424a 100644 --- a/example-android/src/main/java/com/komoju/android/ui/screens/store/FakeStoreScreenModel.kt +++ b/example-android/src/main/java/com/komoju/android/ui/screens/store/FakeStoreScreenModel.kt @@ -3,12 +3,12 @@ package com.komoju.android.ui.screens.store import cafe.adriel.voyager.core.model.ScreenModel import cafe.adriel.voyager.core.model.screenModelScope import com.komoju.android.BuildConfig -import com.komoju.android.sdk.ExperimentalKomojuPaymentApi -import com.komoju.android.sdk.KomojuSDK +import com.komoju.android.sdk.KomojuAndroidSDK +import com.komoju.android.sdk.annotations.ExperimentalKomojuPaymentApi import com.komoju.android.sdk.types.Currency import com.komoju.android.sdk.types.Language -import com.komoju.android.ui.remote.RemoteApiService -import com.komoju.android.ui.remote.dtos.CreateSessionRequest +import com.komoju.android.remote.RemoteApiService +import com.komoju.android.remote.dtos.CreateSessionRequest import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.asStateFlow @@ -21,7 +21,7 @@ class FakeStoreScreenModel : ScreenModel { private val remoteApiService = RemoteApiService.create() private var publishableKey: String? = null - private val _komojuSDKConfiguration = MutableStateFlow(null) + private val _komojuSDKConfiguration = MutableStateFlow(null) val komojuSDKConfiguration = _komojuSDKConfiguration.asStateFlow() private val _uiState = MutableStateFlow(FakeStoreUiState()) val uiState = _uiState.onStart { @@ -65,7 +65,7 @@ class FakeStoreScreenModel : ScreenModel { fun onBuyClicked(item: Item) { screenModelScope.launch { createSession(item)?.let { sessionId -> - KomojuSDK.Configuration.Builder( + KomojuAndroidSDK.Configuration.Builder( requireNotNull(publishableKey), sessionId, ).setLanguage(language) diff --git a/example-android/src/main/java/com/komoju/android/ui/screens/store/KomojuPaymentSDKConfigurableTheme.kt b/example-android/src/main/java/com/komoju/android/ui/screens/store/KomojuPaymentSDKConfigurableTheme.kt index a55692e..f318e3a 100644 --- a/example-android/src/main/java/com/komoju/android/ui/screens/store/KomojuPaymentSDKConfigurableTheme.kt +++ b/example-android/src/main/java/com/komoju/android/ui/screens/store/KomojuPaymentSDKConfigurableTheme.kt @@ -1,11 +1,11 @@ package com.komoju.android.ui.screens.store import androidx.compose.ui.graphics.toArgb -import com.komoju.android.sdk.ui.theme.ConfigurableTheme +import com.komoju.android.sdk.KomojuAndroidSDK import com.komoju.android.ui.theme.KomojuDarkGreen -val komojuConfigurableTheme = ConfigurableTheme.default.copy( - primaryButtonColor = KomojuDarkGreen.toArgb(), - primaryButtonCornerRadiusInDP = 24, - loaderColor = KomojuDarkGreen.toArgb(), +val komojuConfigurableTheme = KomojuAndroidSDK.ConfigurableTheme.default.copy( + primaryColorInt = KomojuDarkGreen.toArgb(), + primaryShapeCornerRadiusInDp = 24, + loaderColorInt = KomojuDarkGreen.toArgb(), ) diff --git a/gradle.properties b/gradle.properties index 5e788f3..bd8cf7b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ #Gradle -org.gradle.jvmargs=-Xmx2048M -Dfile.encoding=UTF-8 -Dkotlin.daemon.jvm.options\="-Xmx2048M" +org.gradle.jvmargs=-Xmx8192M -Dfile.encoding=UTF-8 -Dkotlin.daemon.jvm.options\="-Xmx8192M" org.gradle.caching=true org.gradle.configuration-cache=true #Kotlin diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index cd1fa78..92c3330 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,11 +1,12 @@ [versions] agp = "8.7.2" browser = "1.8.0" +humanReadable = "1.10.0" kotlin = "2.0.21" leakcanaryAndroid = "2.14" nexus-publish = "2.0.0" android-minSdk = "24" -android-compileSdk = "34" +android-compileSdk = "35" coreKtx = "1.15.0" fragmentKtx = "1.8.5" junit = "4.13.2" @@ -21,18 +22,20 @@ ktor = "3.0.1" coroutines = "1.9.0" datetime = "0.6.1" uiTooling = "1.7.5" -composeWebView = "0.33.6" +composeWebView = "1.9.40-alpha04" konlinXJson = "1.7.3" +uriKmp = "0.0.18" voyager = "1.1.0-beta03" mavenPublish = "0.30.0" -nmcp = "0.0.7" dokka = "1.9.20" +compose-multiplatform = "1.7.0" +jetbrainsComposeLifecycle = "2.8.3" [libraries] androidx-browser = { module = "androidx.browser:browser", version.ref = "browser" } +human-readable = { module = "nl.jacobras:Human-Readable", version.ref = "humanReadable" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } leakcanary-android = { module = "com.squareup.leakcanary:leakcanary-android", version.ref = "leakcanaryAndroid" } -nexus-publish = { module = "io.github.gradle-nexus.publish-plugin:io.github.gradle-nexus.publish-plugin.gradle.plugin", version.ref = "nexus-publish" } core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } androidx-fragment-ktx = { group = "androidx.fragment", name = "fragment-ktx", version.ref = "fragmentKtx" } junit = { group = "junit", name = "junit", version.ref = "junit" } @@ -58,15 +61,18 @@ ktor-client-okhttp = { module = "io.ktor:ktor-client-okhttp", version.ref = "kto ktor-client-darwin = { module = "io.ktor:ktor-client-darwin", version.ref = "ktor" } ktor-client-content-negotiation = { module = "io.ktor:ktor-client-content-negotiation", version.ref = "ktor" } ktor-serialization-kotlinx-json = { module = "io.ktor:ktor-serialization-kotlinx-json", version.ref = "ktor" } +ktor-client-logging = { module = "io.ktor:ktor-client-logging", version.ref = "ktor" } kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutines" } kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "coroutines" } kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "konlinXJson" } kotlinx-datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "datetime" } androidx-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling", version.ref = "uiTooling" } -compose-webview = { group = "io.github.kevinnzou", name = "compose-webview", version.ref = "composeWebView" } +compose-webview-multiplatform = { group = "io.github.kevinnzou", name = "compose-webview-multiplatform", version.ref = "composeWebView" } +uri-kmp = { module = "com.eygraber:uri-kmp", version.ref = "uriKmp" } voyager-navigator = { module = "cafe.adriel.voyager:voyager-navigator", version.ref = "voyager" } voyager-screenModel = { module = "cafe.adriel.voyager:voyager-screenmodel", version.ref = "voyager" } voyager-transitions = { module = "cafe.adriel.voyager:voyager-transitions", version.ref = "voyager" } +jetbrains-compose-lifecycle = { module = "org.jetbrains.androidx.lifecycle:lifecycle-runtime-compose", version.ref = "jetbrainsComposeLifecycle" } [plugins] androidLibrary = { id = "com.android.library", version.ref = "agp" } @@ -75,7 +81,8 @@ kotlinAndroid = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } androidApplication = { id = "com.android.application", version.ref = "agp" } kotlin-plugin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } -kotlin-parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize", version.ref = "kotlin" } +kotlin-parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize", version.ref = "kotlin" } maven-publish = { id = "com.vanniktech.maven.publish", version.ref = "mavenPublish" } jetbrains-kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } -jetbrains-dokka = { id = "org.jetbrains.dokka", version.ref = "dokka"} +jetbrains-dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" } +composeMultiplatform = { id = "org.jetbrains.compose", version.ref = "compose-multiplatform" } diff --git a/shared/build.gradle.kts b/shared/build.gradle.kts index 6d53e5d..9983ab4 100644 --- a/shared/build.gradle.kts +++ b/shared/build.gradle.kts @@ -1,12 +1,16 @@ + import com.vanniktech.maven.publish.SonatypeHost import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.jetbrains.kotlin.gradle.plugin.mpp.apple.XCFramework plugins { alias(libs.plugins.kotlinMultiplatform) alias(libs.plugins.androidLibrary) alias(libs.plugins.kotlin.plugin.serialization) alias(libs.plugins.maven.publish) + alias(libs.plugins.compose.compiler) + alias(libs.plugins.composeMultiplatform) } kotlin { @@ -17,18 +21,47 @@ kotlin { jvmTarget.set(JvmTarget.JVM_17) } } - iosX64() - iosArm64() - iosSimulatorArm64() + val xcf = XCFramework() + listOf( + iosX64(), + iosArm64(), + iosSimulatorArm64(), + ).forEach { + it.binaries.framework { + linkerOpts("-make_mergeable") + xcf.add(this) + baseName = "komojuShared" + isStatic = true + } + } sourceSets { commonMain.dependencies { + implementation(compose.runtime) + implementation(compose.foundation) + implementation(compose.material3) + implementation(compose.ui) + implementation(compose.components.resources) + implementation(compose.components.uiToolingPreview) + implementation(libs.jetbrains.compose.lifecycle) + implementation(libs.ktor.client.core) implementation(libs.ktor.client.core) implementation(libs.ktor.client.content.negotiation) implementation(libs.ktor.serialization.kotlinx.json) + implementation(libs.ktor.client.logging) + implementation(libs.kotlinx.coroutines.core) implementation(libs.kotlinx.datetime) + + implementation(libs.voyager.navigator) + implementation(libs.voyager.screenModel) + implementation(libs.voyager.transitions) + + implementation(libs.compose.webview.multiplatform) + + implementation(libs.human.readable) + implementation(libs.uri.kmp) } commonTest.dependencies { implementation(libs.kotlin.test) @@ -36,6 +69,7 @@ kotlin { androidMain.dependencies { implementation(libs.ktor.client.okhttp) implementation(libs.kotlinx.coroutines.android) + implementation(libs.androidx.browser) } iosMain.dependencies { implementation(libs.ktor.client.darwin) @@ -59,6 +93,15 @@ android { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } + resourcePrefix = "komoju_" +} + +compose { + resources { + publicResClass = false + packageOfResClass = "com.komoju.mobile.sdk.shared.generated.resources" + generateResClass = auto + } } mavenPublishing { diff --git a/shared/src/androidMain/kotlin/com/komoju/mobile/sdk/navigation/PlatformBackPress.android.kt b/shared/src/androidMain/kotlin/com/komoju/mobile/sdk/navigation/PlatformBackPress.android.kt new file mode 100644 index 0000000..73d2798 --- /dev/null +++ b/shared/src/androidMain/kotlin/com/komoju/mobile/sdk/navigation/PlatformBackPress.android.kt @@ -0,0 +1,33 @@ +package com.komoju.mobile.sdk.navigation + +import androidx.activity.OnBackPressedDispatcher +import androidx.activity.compose.LocalOnBackPressedDispatcherOwner +import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.remember + +@Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING") +actual class PlatformBackPressDispatcher { + private var onBackPressedDispatcher: OnBackPressedDispatcher? = null + + @Composable + fun Create() { + onBackPressedDispatcher = LocalOnBackPressedDispatcherOwner.current?.onBackPressedDispatcher + DisposableEffect(Unit) { + onDispose { + onBackPressedDispatcher = null + } + } + } + + actual fun onBackPressed() { + onBackPressedDispatcher?.onBackPressed() + } +} + +@Composable +actual fun rememberPlatformBackPressDispatcher(): PlatformBackPressDispatcher = remember { + PlatformBackPressDispatcher() +}.apply { + Create() +} diff --git a/shared/src/androidMain/kotlin/com/komoju/mobile/sdk/ui/composables/ExternalScreenLauncherResult.android.kt b/shared/src/androidMain/kotlin/com/komoju/mobile/sdk/ui/composables/ExternalScreenLauncherResult.android.kt new file mode 100644 index 0000000..e4b0411 --- /dev/null +++ b/shared/src/androidMain/kotlin/com/komoju/mobile/sdk/ui/composables/ExternalScreenLauncherResult.android.kt @@ -0,0 +1,10 @@ +package com.komoju.mobile.sdk.ui.composables + +import androidx.activity.result.ActivityResultLauncher + +@Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING") +actual class Launcher(private val activityLauncher: ActivityResultLauncher) { + actual fun launch(input: I) { + activityLauncher.launch(input) + } +} diff --git a/shared/src/androidMain/kotlin/com/komoju/mobile/sdk/ui/composables/RememberLauncherForActivityResult.android.kt b/shared/src/androidMain/kotlin/com/komoju/mobile/sdk/ui/composables/RememberLauncherForActivityResult.android.kt new file mode 100644 index 0000000..58bfa90 --- /dev/null +++ b/shared/src/androidMain/kotlin/com/komoju/mobile/sdk/ui/composables/RememberLauncherForActivityResult.android.kt @@ -0,0 +1,9 @@ +package com.komoju.mobile.sdk.ui.composables + +import androidx.activity.compose.rememberLauncherForActivityResult +import androidx.compose.runtime.Composable +import com.komoju.mobile.sdk.utils.OffsiteCustomTabResultContract + +@Composable +actual fun launchCustomTab(onResult: (Int) -> Unit): Launcher = + Launcher(rememberLauncherForActivityResult(OffsiteCustomTabResultContract(), onResult = onResult)) diff --git a/android/src/main/java/com/komoju/android/sdk/utils/ModifierExt.kt b/shared/src/androidMain/kotlin/com/komoju/mobile/sdk/utils/ModifierExt.android.kt similarity index 65% rename from android/src/main/java/com/komoju/android/sdk/utils/ModifierExt.kt rename to shared/src/androidMain/kotlin/com/komoju/mobile/sdk/utils/ModifierExt.android.kt index 4ea3b94..589cd11 100644 --- a/android/src/main/java/com/komoju/android/sdk/utils/ModifierExt.kt +++ b/shared/src/androidMain/kotlin/com/komoju/mobile/sdk/utils/ModifierExt.android.kt @@ -1,4 +1,4 @@ -package com.komoju.android.sdk.utils +package com.komoju.mobile.sdk.utils import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier @@ -7,6 +7,6 @@ import androidx.compose.ui.semantics.semantics import androidx.compose.ui.semantics.testTagsAsResourceId @OptIn(ExperimentalComposeUiApi::class) -internal fun Modifier.testID(id: String) = this - .semantics { testTagsAsResourceId = true } - .testTag(id) +internal actual fun Modifier.testID(id: String) = semantics { + testTagsAsResourceId = true +}.testTag(id) diff --git a/android/src/main/java/com/komoju/android/sdk/utils/OffsiteCustomTabResultContract.kt b/shared/src/androidMain/kotlin/com/komoju/mobile/sdk/utils/OffsiteCustomTabResultContract.kt similarity index 97% rename from android/src/main/java/com/komoju/android/sdk/utils/OffsiteCustomTabResultContract.kt rename to shared/src/androidMain/kotlin/com/komoju/mobile/sdk/utils/OffsiteCustomTabResultContract.kt index da09ff2..9dd13e8 100644 --- a/android/src/main/java/com/komoju/android/sdk/utils/OffsiteCustomTabResultContract.kt +++ b/shared/src/androidMain/kotlin/com/komoju/mobile/sdk/utils/OffsiteCustomTabResultContract.kt @@ -1,4 +1,4 @@ -package com.komoju.android.sdk.utils +package com.komoju.mobile.sdk.utils import android.content.Context import android.content.Intent diff --git a/shared/src/androidMain/kotlin/com/komoju/mobile/sdk/utils/Platform.android.kt b/shared/src/androidMain/kotlin/com/komoju/mobile/sdk/utils/Platform.android.kt new file mode 100644 index 0000000..dd96d81 --- /dev/null +++ b/shared/src/androidMain/kotlin/com/komoju/mobile/sdk/utils/Platform.android.kt @@ -0,0 +1,3 @@ +package com.komoju.mobile.sdk.utils + +actual val currentPlatform: Platform = Platform.ANDROID diff --git a/android/src/main/res/drawable/komoju_ic_alipay.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_alipay.xml similarity index 100% rename from android/src/main/res/drawable/komoju_ic_alipay.xml rename to shared/src/commonMain/composeResources/drawable/komoju_ic_alipay.xml diff --git a/android/src/main/res/drawable/komoju_ic_amex.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_amex.xml similarity index 100% rename from android/src/main/res/drawable/komoju_ic_amex.xml rename to shared/src/commonMain/composeResources/drawable/komoju_ic_amex.xml diff --git a/android/src/main/res/drawable/komoju_ic_app_opens_info.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_app_opens_info.xml similarity index 100% rename from android/src/main/res/drawable/komoju_ic_app_opens_info.xml rename to shared/src/commonMain/composeResources/drawable/komoju_ic_app_opens_info.xml diff --git a/android/src/main/res/drawable/komoju_ic_au_pay.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_au_pay.xml similarity index 100% rename from android/src/main/res/drawable/komoju_ic_au_pay.xml rename to shared/src/commonMain/composeResources/drawable/komoju_ic_au_pay.xml diff --git a/android/src/main/res/drawable/komoju_ic_bank_transfer.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_bank_transfer.xml similarity index 100% rename from android/src/main/res/drawable/komoju_ic_bank_transfer.xml rename to shared/src/commonMain/composeResources/drawable/komoju_ic_bank_transfer.xml diff --git a/android/src/main/res/drawable/komoju_ic_bitcash.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_bitcash.xml similarity index 100% rename from android/src/main/res/drawable/komoju_ic_bitcash.xml rename to shared/src/commonMain/composeResources/drawable/komoju_ic_bitcash.xml diff --git a/android/src/main/res/drawable/komoju_ic_credit_card.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_credit_card.xml similarity index 100% rename from android/src/main/res/drawable/komoju_ic_credit_card.xml rename to shared/src/commonMain/composeResources/drawable/komoju_ic_credit_card.xml diff --git a/android/src/main/res/drawable/komoju_ic_cvv.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_cvv.xml similarity index 100% rename from android/src/main/res/drawable/komoju_ic_cvv.xml rename to shared/src/commonMain/composeResources/drawable/komoju_ic_cvv.xml diff --git a/android/src/main/res/drawable/komoju_ic_daily_yamazaki.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_daily_yamazaki.xml similarity index 100% rename from android/src/main/res/drawable/komoju_ic_daily_yamazaki.xml rename to shared/src/commonMain/composeResources/drawable/komoju_ic_daily_yamazaki.xml diff --git a/android/src/main/res/drawable/komoju_ic_diners.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_diners.xml similarity index 100% rename from android/src/main/res/drawable/komoju_ic_diners.xml rename to shared/src/commonMain/composeResources/drawable/komoju_ic_diners.xml diff --git a/android/src/main/res/drawable/komoju_ic_family_mart.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_family_mart.xml similarity index 100% rename from android/src/main/res/drawable/komoju_ic_family_mart.xml rename to shared/src/commonMain/composeResources/drawable/komoju_ic_family_mart.xml diff --git a/android/src/main/res/drawable/komoju_ic_jcb.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_jcb.xml similarity index 100% rename from android/src/main/res/drawable/komoju_ic_jcb.xml rename to shared/src/commonMain/composeResources/drawable/komoju_ic_jcb.xml diff --git a/android/src/main/res/drawable/komoju_ic_konbini.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_konbini.xml similarity index 100% rename from android/src/main/res/drawable/komoju_ic_konbini.xml rename to shared/src/commonMain/composeResources/drawable/komoju_ic_konbini.xml diff --git a/android/src/main/res/drawable/komoju_ic_lawson.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_lawson.xml similarity index 100% rename from android/src/main/res/drawable/komoju_ic_lawson.xml rename to shared/src/commonMain/composeResources/drawable/komoju_ic_lawson.xml diff --git a/android/src/main/res/drawable/komoju_ic_linepay.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_linepay.xml similarity index 100% rename from android/src/main/res/drawable/komoju_ic_linepay.xml rename to shared/src/commonMain/composeResources/drawable/komoju_ic_linepay.xml diff --git a/android/src/main/res/drawable/komoju_ic_master.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_master.xml similarity index 100% rename from android/src/main/res/drawable/komoju_ic_master.xml rename to shared/src/commonMain/composeResources/drawable/komoju_ic_master.xml diff --git a/android/src/main/res/drawable/komoju_ic_merpay.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_merpay.xml similarity index 100% rename from android/src/main/res/drawable/komoju_ic_merpay.xml rename to shared/src/commonMain/composeResources/drawable/komoju_ic_merpay.xml diff --git a/android/src/main/res/drawable/komoju_ic_ministop.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_ministop.xml similarity index 100% rename from android/src/main/res/drawable/komoju_ic_ministop.xml rename to shared/src/commonMain/composeResources/drawable/komoju_ic_ministop.xml diff --git a/android/src/main/res/drawable/komoju_ic_net_cash.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_net_cash.xml similarity index 100% rename from android/src/main/res/drawable/komoju_ic_net_cash.xml rename to shared/src/commonMain/composeResources/drawable/komoju_ic_net_cash.xml diff --git a/android/src/main/res/drawable/komoju_ic_paidy.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_paidy.xml similarity index 100% rename from android/src/main/res/drawable/komoju_ic_paidy.xml rename to shared/src/commonMain/composeResources/drawable/komoju_ic_paidy.xml diff --git a/android/src/main/res/drawable/komoju_ic_pay_easy.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_pay_easy.xml similarity index 100% rename from android/src/main/res/drawable/komoju_ic_pay_easy.xml rename to shared/src/commonMain/composeResources/drawable/komoju_ic_pay_easy.xml diff --git a/android/src/main/res/drawable/komoju_ic_payment_status_completed.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_payment_status_completed.xml similarity index 100% rename from android/src/main/res/drawable/komoju_ic_payment_status_completed.xml rename to shared/src/commonMain/composeResources/drawable/komoju_ic_payment_status_completed.xml diff --git a/android/src/main/res/drawable/komoju_ic_payment_status_failed.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_payment_status_failed.xml similarity index 100% rename from android/src/main/res/drawable/komoju_ic_payment_status_failed.xml rename to shared/src/commonMain/composeResources/drawable/komoju_ic_payment_status_failed.xml diff --git a/android/src/main/res/drawable/komoju_ic_payment_status_konbini_pending.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_payment_status_konbini_pending.xml similarity index 100% rename from android/src/main/res/drawable/komoju_ic_payment_status_konbini_pending.xml rename to shared/src/commonMain/composeResources/drawable/komoju_ic_payment_status_konbini_pending.xml diff --git a/android/src/main/res/drawable/komoju_ic_payment_status_prenidng.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_payment_status_prenidng.xml similarity index 100% rename from android/src/main/res/drawable/komoju_ic_payment_status_prenidng.xml rename to shared/src/commonMain/composeResources/drawable/komoju_ic_payment_status_prenidng.xml diff --git a/android/src/main/res/drawable/komoju_ic_paypay.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_paypay.xml similarity index 100% rename from android/src/main/res/drawable/komoju_ic_paypay.xml rename to shared/src/commonMain/composeResources/drawable/komoju_ic_paypay.xml diff --git a/android/src/main/res/drawable/komoju_ic_rakuten_pay.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_rakuten_pay.xml similarity index 100% rename from android/src/main/res/drawable/komoju_ic_rakuten_pay.xml rename to shared/src/commonMain/composeResources/drawable/komoju_ic_rakuten_pay.xml diff --git a/android/src/main/res/drawable/komoju_ic_seico_mart.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_seico_mart.xml similarity index 100% rename from android/src/main/res/drawable/komoju_ic_seico_mart.xml rename to shared/src/commonMain/composeResources/drawable/komoju_ic_seico_mart.xml diff --git a/android/src/main/res/drawable/komoju_ic_seven_eleven.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_seven_eleven.xml similarity index 100% rename from android/src/main/res/drawable/komoju_ic_seven_eleven.xml rename to shared/src/commonMain/composeResources/drawable/komoju_ic_seven_eleven.xml diff --git a/android/src/main/res/drawable/komoju_ic_visa.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_visa.xml similarity index 100% rename from android/src/main/res/drawable/komoju_ic_visa.xml rename to shared/src/commonMain/composeResources/drawable/komoju_ic_visa.xml diff --git a/android/src/main/res/drawable/komoju_ic_web_money.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_web_money.xml similarity index 100% rename from android/src/main/res/drawable/komoju_ic_web_money.xml rename to shared/src/commonMain/composeResources/drawable/komoju_ic_web_money.xml diff --git a/android/src/main/res/drawable/komoju_img_payment_footer.xml b/shared/src/commonMain/composeResources/drawable/komoju_img_payment_footer.xml similarity index 100% rename from android/src/main/res/drawable/komoju_img_payment_footer.xml rename to shared/src/commonMain/composeResources/drawable/komoju_img_payment_footer.xml diff --git a/android/src/main/res/font/komoju_font_inter_bold.ttf b/shared/src/commonMain/composeResources/font/komoju_font_inter_bold.ttf similarity index 100% rename from android/src/main/res/font/komoju_font_inter_bold.ttf rename to shared/src/commonMain/composeResources/font/komoju_font_inter_bold.ttf diff --git a/android/src/main/res/font/komoju_font_inter_light.ttf b/shared/src/commonMain/composeResources/font/komoju_font_inter_light.ttf similarity index 100% rename from android/src/main/res/font/komoju_font_inter_light.ttf rename to shared/src/commonMain/composeResources/font/komoju_font_inter_light.ttf diff --git a/android/src/main/res/font/komoju_font_inter_medium.ttf b/shared/src/commonMain/composeResources/font/komoju_font_inter_medium.ttf similarity index 100% rename from android/src/main/res/font/komoju_font_inter_medium.ttf rename to shared/src/commonMain/composeResources/font/komoju_font_inter_medium.ttf diff --git a/android/src/main/res/font/komoju_font_inter_regular.ttf b/shared/src/commonMain/composeResources/font/komoju_font_inter_regular.ttf similarity index 100% rename from android/src/main/res/font/komoju_font_inter_regular.ttf rename to shared/src/commonMain/composeResources/font/komoju_font_inter_regular.ttf diff --git a/android/src/main/res/font/komoju_font_inter_semibold.ttf b/shared/src/commonMain/composeResources/font/komoju_font_inter_semibold.ttf similarity index 100% rename from android/src/main/res/font/komoju_font_inter_semibold.ttf rename to shared/src/commonMain/composeResources/font/komoju_font_inter_semibold.ttf diff --git a/android/src/main/res/values-ja/strings.xml b/shared/src/commonMain/composeResources/values-ja/strings.xml similarity index 100% rename from android/src/main/res/values-ja/strings.xml rename to shared/src/commonMain/composeResources/values-ja/strings.xml diff --git a/shared/src/commonMain/composeResources/values/strings.xml b/shared/src/commonMain/composeResources/values/strings.xml new file mode 100644 index 0000000..2bd2a0f --- /dev/null +++ b/shared/src/commonMain/composeResources/values/strings.xml @@ -0,0 +1,121 @@ + + + this-should-not-be-the-case + The entered cardholder name cannot be empty + The entered cardholder name is not valid + The entered card number is not valid + The entered expiry date is not valid + The entered CVV is not valid + Payment successful + Payment failed + Awaiting payment + Your payment has been processed successfully. + Your payment has failed. + You need to go to your local %1$s and make the payment to proceed. + Your payment is awaiting processing. + Error + Receipt Number + Confirmation Code + Done + Update Payment method + View instructions + Okay + Have a question? Contact us + I will do it later + We noticed that you’ve canceled the payment process. If this was a mistake, you can try again to complete your purchase. + We attempted to process your payment, but something went wrong. Please update your payment method below to continue. + We tried to charge your card but, something went wrong. Please update your payment method below to continue + Back to store + Payment Options + Pay %1$s + Cardholder name + Full name on card + Card Number + MM/YY + CVV + Save this card for future payments + Daily Yamazaki + Family Mart + Lawson + MiniStop + SeicoMart + 7-Eleven + Full name on receipt + Name (shown on receipt) + Email + Enter Your Email Address + NET CASH Information + NET CASH id + Payment via Alipay + Payment via AU Pay + Payment via Mer Pay + Payment via Paypay + Payment via Rakuten Pay + Payment via Line Pay + You will be redirected to Alipay to complete the payment + You will be redirected to AU Pay to complete the payment + You will be redirected to Mer Pay to complete the payment + You will be redirected to Paypay to complete the payment + You will be redirected to Rakuten to complete the payment + You will be redirected to Line Pay to complete the payment + Continue to Alipay + Continue to AuPay + Continue to MerPay + Continue to PayPay + Continue to Rakuten + Continue to LinePay + Continue to Paidy + Note, a web window will be opened. After purchase you will be redirected back. + Full Name + Enter your name + Phone Number + Enter your phone number + Last Name + First Name + Last Name (Phonetic) + First Name (Phonetic) + WebMoney Information + Prepaid number + Payment Success + Thank you for your order + BitCash Information + Hiragana id + Bank Transfer + BitCash + Credit card + Konbini + NetCash + au Pay + AliPay + Mer Pay + PayPay + Rakuten Pay + Line Pay + Unknown + Other + Paidy + PayEasy + WebMoney + Total Payment + The entered name cannot be empty + The entered email is not valid + Please select a konbini brand + The entered phone number cannot be empty + The entered phone number is not valid + The entered net cash id cannot be empty + The entered net cash id is not valid + The entered bit cash id cannot be empty + The entered bit cash id is not valid + The entered prepaid number cannot be empty + The entered prepaid number is not valid + The entered last name cannot be empty + The entered first name cannot be empty + The entered first name phonetic cannot be empty + The entered first name phonetic must be a kana + The entered last name phonetic cannot be empty + The entered last name phonetic must be a kana + Yes + No + Are you sure you want to cancel the payment? + Cancel Payment? + \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/KomojuMobileSDKConfiguration.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/KomojuMobileSDKConfiguration.kt new file mode 100644 index 0000000..b9838bc --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/KomojuMobileSDKConfiguration.kt @@ -0,0 +1,29 @@ +package com.komoju.mobile.sdk + +import com.komoju.mobile.sdk.ui.theme.ConfigurableTheme +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.contract + +data class KomojuMobileSDKConfiguration( + val language: String, // Language setting for the payment UI. 'en' for English, 'ja' for Japanese + val currency: String, // Currency used in the transaction. USD for United States Dollar, JPY for Japanese Yen + val publishableKey: String?, // Public API key for Komoju integration. + val isDebugMode: Boolean, // Debug mode flag for logging and testing. + val sessionId: String?, // Unique session ID for payment transaction. + val redirectURL: String, // URL to redirect after payment completion. + val appScheme: String, // App schema for deep links. + val configurableTheme: ConfigurableTheme, // Custom theme for UI elements. + val inlinedProcessing: Boolean, // Flag to enable inlined processing. +) + +/** + * Extension function to check if the current configuration is valid for processing a payment. + * @return True if the configuration is non-null and contains both publishableKey and sessionId. + */ +@OptIn(ExperimentalContracts::class) +fun KomojuMobileSDKConfiguration?.canProcessPayment(): Boolean { + contract { + returns(true) implies (this@canProcessPayment != null) + } + return this?.publishableKey != null && this.sessionId != null +} diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/KomojuMobileSDKPaymentResult.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/KomojuMobileSDKPaymentResult.kt new file mode 100644 index 0000000..63cd489 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/KomojuMobileSDKPaymentResult.kt @@ -0,0 +1,3 @@ +package com.komoju.mobile.sdk + +data class KomojuMobileSDKPaymentResult(val isSuccessFul: Boolean) diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/entities/PaymentMethod.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/entities/PaymentMethod.kt index af8bd06..5f8997e 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/entities/PaymentMethod.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/entities/PaymentMethod.kt @@ -2,7 +2,7 @@ package com.komoju.mobile.sdk.entities import com.komoju.mobile.sdk.types.OffSitePaymentType -sealed interface PaymentMethod { +internal sealed interface PaymentMethod { val hashedGateway: String val exchangeRate: Double val currency: String diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/entities/PaymentRequest.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/entities/PaymentRequest.kt index 646ff3c..ac407a2 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/entities/PaymentRequest.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/entities/PaymentRequest.kt @@ -2,7 +2,7 @@ package com.komoju.mobile.sdk.entities import com.komoju.mobile.sdk.entities.PaymentMethod.Konbini.KonbiniBrand -sealed interface PaymentRequest { +internal sealed interface PaymentRequest { val paymentMethod: PaymentMethod data class Konbini(override val paymentMethod: PaymentMethod.Konbini, val konbiniBrand: KonbiniBrand, val email: String) : diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/entities/SecureTokenRequest.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/entities/SecureTokenRequest.kt index 8237135..b81d6e0 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/entities/SecureTokenRequest.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/entities/SecureTokenRequest.kt @@ -1,6 +1,6 @@ package com.komoju.mobile.sdk.entities -data class SecureTokenRequest( +internal data class SecureTokenRequest( val amount: String, val currency: String, val returnUrl: String, diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/entities/SecureTokenResponse.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/entities/SecureTokenResponse.kt index b27f290..9b50c2e 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/entities/SecureTokenResponse.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/entities/SecureTokenResponse.kt @@ -1,6 +1,6 @@ package com.komoju.mobile.sdk.entities -data class SecureTokenResponse(val id: String, val status: Status, val authURL: String) { +internal data class SecureTokenResponse(val id: String, val status: Status, val authURL: String) { enum class Status { OK, SKIPPED, diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/entities/Session.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/entities/Session.kt index 322f7cc..044778e 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/entities/Session.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/entities/Session.kt @@ -1,3 +1,3 @@ package com.komoju.mobile.sdk.entities -data class Session(val paymentMethods: List) +internal data class Session(val paymentMethods: List) diff --git a/android/src/main/java/com/komoju/android/sdk/navigation/PaymentResultScreenModel.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/navigation/PaymentResultScreenModel.kt similarity index 51% rename from android/src/main/java/com/komoju/android/sdk/navigation/PaymentResultScreenModel.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/navigation/PaymentResultScreenModel.kt index 141924d..9bd93c3 100644 --- a/android/src/main/java/com/komoju/android/sdk/navigation/PaymentResultScreenModel.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/navigation/PaymentResultScreenModel.kt @@ -1,22 +1,22 @@ -package com.komoju.android.sdk.navigation +package com.komoju.mobile.sdk.navigation import androidx.compose.runtime.Composable import cafe.adriel.voyager.core.model.ScreenModel import cafe.adriel.voyager.core.model.rememberNavigatorScreenModel import cafe.adriel.voyager.navigator.Navigator -import com.komoju.android.sdk.KomojuSDK +import com.komoju.mobile.sdk.KomojuMobileSDKPaymentResult -internal class PaymentResultScreenModel : ScreenModel { - var result: KomojuSDK.PaymentResult? = null +class PaymentResultScreenModel internal constructor(): ScreenModel { + var result: KomojuMobileSDKPaymentResult? = null private set - fun setResult(result: KomojuSDK.PaymentResult) { + fun setResult(result: KomojuMobileSDKPaymentResult) { this.result = result } } @Composable -internal fun Navigator.paymentResultScreenModel() = rememberNavigatorScreenModel( +fun Navigator.paymentResultScreenModel() = rememberNavigatorScreenModel( tag = PaymentResultScreenModel::class.simpleName, factory = ::PaymentResultScreenModel, ) diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/navigation/PlatformBackPress.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/navigation/PlatformBackPress.kt new file mode 100644 index 0000000..955f14e --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/navigation/PlatformBackPress.kt @@ -0,0 +1,11 @@ +package com.komoju.mobile.sdk.navigation + +import androidx.compose.runtime.Composable + +@Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING") +internal expect class PlatformBackPressDispatcher private constructor() { + fun onBackPressed() +} + +@Composable +internal expect fun rememberPlatformBackPressDispatcher(): PlatformBackPressDispatcher diff --git a/android/src/main/java/com/komoju/android/sdk/navigation/RouterStateScreenModel.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/navigation/RouterStateScreenModel.kt similarity index 88% rename from android/src/main/java/com/komoju/android/sdk/navigation/RouterStateScreenModel.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/navigation/RouterStateScreenModel.kt index 2516610..b91a52f 100644 --- a/android/src/main/java/com/komoju/android/sdk/navigation/RouterStateScreenModel.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/navigation/RouterStateScreenModel.kt @@ -1,7 +1,7 @@ -package com.komoju.android.sdk.navigation +package com.komoju.mobile.sdk.navigation import cafe.adriel.voyager.core.model.ScreenModel -import com.komoju.android.sdk.ui.screens.Router +import com.komoju.mobile.sdk.ui.screens.Router import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/remote/NetworkClient.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/remote/NetworkClient.kt index 70d1bd9..d773559 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/remote/NetworkClient.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/remote/NetworkClient.kt @@ -1,23 +1,34 @@ package com.komoju.mobile.sdk.remote +import com.komoju.mobile.sdk.KomojuMobileSDKConfiguration import io.ktor.client.HttpClient import io.ktor.client.plugins.contentnegotiation.ContentNegotiation import io.ktor.client.plugins.defaultRequest +import io.ktor.client.plugins.logging.DEFAULT +import io.ktor.client.plugins.logging.LogLevel +import io.ktor.client.plugins.logging.Logger +import io.ktor.client.plugins.logging.Logging import io.ktor.serialization.kotlinx.json.json import io.ktor.util.encodeBase64 import kotlinx.serialization.json.Json private const val BASE_URL = "https://komoju.com/api/" -internal fun createNetworkClient(publishableKey: String?) = HttpClient { +internal fun createNetworkClient(configuration: KomojuMobileSDKConfiguration) = HttpClient { defaultRequest { url(BASE_URL) - headers.append("Authorization", value = "Basic ${publishableKey?.encodeBase64()}") + headers.append("Authorization", value = "Basic ${configuration.publishableKey?.encodeBase64()}") headers.append("KOMOJU-VIA", "mobile_${PLATFORM.lowercase()}") headers.append("X-KOMOJU-API-VERSION", "2024-07-15") headers.append("Accept", "application/json") headers.append("Content-Type", "application/json") } + if (configuration.isDebugMode) { + install(Logging) { + logger = Logger.DEFAULT + level = LogLevel.ALL + } + } install(ContentNegotiation) { json( Json { diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/remote/apis/KomojuRemoteApi.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/remote/apis/KomojuRemoteApi.kt index 687436b..81771e6 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/remote/apis/KomojuRemoteApi.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/remote/apis/KomojuRemoteApi.kt @@ -1,18 +1,19 @@ package com.komoju.mobile.sdk.remote.apis +import com.komoju.mobile.sdk.KomojuMobileSDKConfiguration import com.komoju.mobile.sdk.remote.createNetworkClient -interface KomojuRemoteApi : AutoCloseable { +internal interface KomojuRemoteApi : AutoCloseable { val sessions: SessionApi val tokens: TokensApi companion object { - fun create(publishableKey: String?): KomojuRemoteApi = KomojuRemoteApiImpl(publishableKey) + fun create(configuration: KomojuMobileSDKConfiguration): KomojuRemoteApi = KomojuRemoteApiImpl(configuration) } } -internal class KomojuRemoteApiImpl(publishableKey: String?) : KomojuRemoteApi { - private val networkClient by lazy { createNetworkClient(publishableKey) } +internal class KomojuRemoteApiImpl(configuration: KomojuMobileSDKConfiguration) : KomojuRemoteApi { + private val networkClient by lazy { createNetworkClient(configuration) } override val sessions: SessionApi by lazy { SessionApiImpl(networkClient) } diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/remote/apis/SessionApi.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/remote/apis/SessionApi.kt index b97d632..6f68308 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/remote/apis/SessionApi.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/remote/apis/SessionApi.kt @@ -20,7 +20,7 @@ import io.ktor.http.ContentType import io.ktor.http.HttpStatusCode import io.ktor.http.contentType -interface SessionApi { +internal interface SessionApi { suspend fun show(id: String): Result suspend fun pay(id: String, paymentRequest: PaymentRequest): Result suspend fun pay(sessionID: String, token: String, amount: String, currency: String): Result diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/remote/apis/TokensApi.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/remote/apis/TokensApi.kt index 26b0ae9..3e1521c 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/remote/apis/TokensApi.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/remote/apis/TokensApi.kt @@ -14,7 +14,7 @@ import io.ktor.client.request.setBody import io.ktor.http.ContentType import io.ktor.http.contentType -interface TokensApi { +internal interface TokensApi { suspend fun generateSecureToken(request: SecureTokenRequest): Result suspend fun verifySecureToken(token: String): Result } diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/remote/dtos/PayByTokenRequestDto.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/remote/dtos/PayByTokenRequestDto.kt index 99b668e..a0cbe51 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/remote/dtos/PayByTokenRequestDto.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/remote/dtos/PayByTokenRequestDto.kt @@ -4,7 +4,7 @@ import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable -data class PayByTokenRequestDto( +internal data class PayByTokenRequestDto( @SerialName("amount") val amount: String? = null, @SerialName("currency") val currency: String? = null, @SerialName("payment_details") val paymentDetails: String? = null, diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/remote/dtos/PaymentErrorResponseDto.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/remote/dtos/PaymentErrorResponseDto.kt index 8a012bf..d898b89 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/remote/dtos/PaymentErrorResponseDto.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/remote/dtos/PaymentErrorResponseDto.kt @@ -4,7 +4,7 @@ import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable -data class PaymentErrorResponseDto(@SerialName("error") val error: Error? = null) { +internal data class PaymentErrorResponseDto(@SerialName("error") val error: Error? = null) { @Serializable data class Error(@SerialName("code") val code: String? = null, @SerialName("message") val message: String? = null) } diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/remote/dtos/SecureTokenRequestDto.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/remote/dtos/SecureTokenRequestDto.kt index 3db7420..b053ae0 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/remote/dtos/SecureTokenRequestDto.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/remote/dtos/SecureTokenRequestDto.kt @@ -5,7 +5,7 @@ import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable -data class SecureTokenRequestDto( +internal data class SecureTokenRequestDto( @SerialName("amount") val amount: String? = null, @SerialName("currency") val currency: String? = null, @SerialName("return_url") val returnUrl: String? = null, diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/remote/dtos/SecureTokenVerificationResponseDto.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/remote/dtos/SecureTokenVerificationResponseDto.kt index 579bf26..fb03809 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/remote/dtos/SecureTokenVerificationResponseDto.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/remote/dtos/SecureTokenVerificationResponseDto.kt @@ -4,7 +4,7 @@ import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable -data class SecureTokenVerificationResponseDto( +internal data class SecureTokenVerificationResponseDto( @SerialName("secure_token") val secureToken: String? = null, @SerialName("verification_status") val verificationStatus: String? = null, ) diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/types/OffSitePaymentType.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/types/OffSitePaymentType.kt index 6f8f332..3f4065e 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/types/OffSitePaymentType.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/types/OffSitePaymentType.kt @@ -1,6 +1,6 @@ package com.komoju.mobile.sdk.types -enum class OffSitePaymentType(val id: String) { +internal enum class OffSitePaymentType(val id: String) { AU_PAY("aupay"), ALI_PAY("alipay"), MER_PAY("merpay"), diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/composables/ExternalScreenLauncherResult.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/composables/ExternalScreenLauncherResult.kt new file mode 100644 index 0000000..bfd6e2a --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/composables/ExternalScreenLauncherResult.kt @@ -0,0 +1,11 @@ +package com.komoju.mobile.sdk.ui.composables + +import androidx.compose.runtime.Composable + +@Composable +expect fun launchCustomTab(onResult: (Int) -> Unit): Launcher + +@Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING") +expect class Launcher { + fun launch(input: I) +} diff --git a/android/src/main/java/com/komoju/android/sdk/ui/composables/InlinedPaymentPrimaryButton.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/composables/InlinedPaymentPrimaryButton.kt similarity index 86% rename from android/src/main/java/com/komoju/android/sdk/ui/composables/InlinedPaymentPrimaryButton.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/composables/InlinedPaymentPrimaryButton.kt index c45200d..735f2d4 100644 --- a/android/src/main/java/com/komoju/android/sdk/ui/composables/InlinedPaymentPrimaryButton.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/composables/InlinedPaymentPrimaryButton.kt @@ -1,4 +1,4 @@ -package com.komoju.android.sdk.ui.composables +package com.komoju.mobile.sdk.ui.composables import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxWidth @@ -24,16 +24,16 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import com.komoju.android.sdk.ui.theme.KomojuMobileSdkTheme -import com.komoju.android.sdk.ui.theme.LocalConfigurableTheme -import kotlin.time.Duration.Companion.seconds +import com.komoju.mobile.sdk.ui.theme.KomojuMobileSdkTheme +import com.komoju.mobile.sdk.ui.theme.LocalConfigurableTheme +import com.komoju.mobile.sdk.ui.theme.toColor import kotlinx.coroutines.delay import kotlinx.coroutines.launch +import org.jetbrains.compose.ui.tooling.preview.Preview +import kotlin.time.Duration.Companion.seconds @Composable internal fun InlinedPaymentPrimaryButton( @@ -47,10 +47,10 @@ internal fun InlinedPaymentPrimaryButton( modifier = modifier, onClick = onClick, colors = ButtonDefaults.buttonColors( - containerColor = Color(configurableTheme.primaryButtonColor), - contentColor = Color(configurableTheme.primaryButtonContentColor), + containerColor = configurableTheme.primaryColor.toColor(), + contentColor = configurableTheme.primaryContentColor.toColor(), ), - shape = RoundedCornerShape(configurableTheme.primaryButtonCornerRadiusInDP.dp), + shape = RoundedCornerShape(configurableTheme.primaryShapeCornerRadiusInDp.dp), ) { Box( modifier = Modifier @@ -85,7 +85,7 @@ internal fun InlinedPaymentPrimaryButton( } } -internal enum class InlinedPaymentPrimaryButtonState { +enum class InlinedPaymentPrimaryButtonState { LOADING, IDLE, SUCCESS, @@ -93,12 +93,12 @@ internal enum class InlinedPaymentPrimaryButtonState { } @Composable -internal fun rememberInlinedPaymentPrimaryButtonState( +fun rememberInlinedPaymentPrimaryButtonState( default: InlinedPaymentPrimaryButtonState = InlinedPaymentPrimaryButtonState.IDLE, ): MutableState = rememberSaveable { mutableStateOf(default) } @Composable -@Preview(showBackground = true, showSystemUi = true) +@Preview private fun PaymentButtonPreview() { var state by rememberInlinedPaymentPrimaryButtonState() val coroutineScope = rememberCoroutineScope() diff --git a/android/src/main/java/com/komoju/android/sdk/ui/composables/InlinedWebView.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/composables/InlinedWebView.kt similarity index 51% rename from android/src/main/java/com/komoju/android/sdk/ui/composables/InlinedWebView.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/composables/InlinedWebView.kt index d95d442..4971a86 100644 --- a/android/src/main/java/com/komoju/android/sdk/ui/composables/InlinedWebView.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/composables/InlinedWebView.kt @@ -1,44 +1,49 @@ -package com.komoju.android.sdk.ui.composables +package com.komoju.mobile.sdk.ui.composables -import android.annotation.SuppressLint -import android.graphics.Color -import android.webkit.WebResourceRequest -import android.webkit.WebResourceResponse -import android.webkit.WebView import androidx.compose.foundation.Image import androidx.compose.foundation.clickable -import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.rounded.Close import androidx.compose.material3.Text -import androidx.compose.material3.ripple import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember +import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import androidx.core.net.toUri -import com.kevinnzou.web.AccompanistWebViewClient -import com.kevinnzou.web.WebView -import com.kevinnzou.web.rememberWebViewState -import com.komoju.android.sdk.R +import com.eygraber.uri.Uri +import com.multiplatform.webview.request.RequestInterceptor +import com.multiplatform.webview.request.WebRequest +import com.multiplatform.webview.request.WebRequestInterceptResult +import com.multiplatform.webview.web.WebView +import com.multiplatform.webview.web.WebViewNavigator +import com.multiplatform.webview.web.rememberWebViewNavigator +import com.multiplatform.webview.web.rememberWebViewState +import kotlin.time.Duration.Companion.seconds +import kotlinx.coroutines.delay -@SuppressLint("SetJavaScriptEnabled") @Composable internal fun InlinedWebView( modifier: Modifier, url: String, + appScheme: String, onDone: (String) -> Unit, onChallengePresented: () -> Unit, onCloseButtonClicked: () -> Unit, ) { + LaunchedEffect(url) { + delay(5.seconds) // TODO: Workaround as of now, replace with actual challenge detection + onChallengePresented() + } val state = rememberWebViewState(url) Column(modifier = modifier) { Row( @@ -61,8 +66,6 @@ internal fun InlinedWebView( contentDescription = "Close Payment Sheet", modifier = Modifier .clickable( - indication = ripple(bounded = true, radius = 24.dp), - interactionSource = remember { MutableInteractionSource() }, onClick = { onCloseButtonClicked() }, @@ -71,47 +74,44 @@ internal fun InlinedWebView( ) } WebView( - modifier = Modifier.weight(1f), + modifier = Modifier.fillMaxSize(), state = state, - onCreated = { nativeWebView -> - nativeWebView.clipToOutline = true - nativeWebView.setBackgroundColor(Color.TRANSPARENT) - nativeWebView.settings.apply { - domStorageEnabled = true - javaScriptEnabled = true - } - }, captureBackPresses = false, - client = remember { InlinedWebViewClient(onDone, onChallengePresented) }, + navigator = rememberWebViewNavigator( + requestInterceptor = WebViewRequestInterceptor( + onDeeplinkCaptured = onDone, + appScheme = appScheme, + ), + ), ) + DisposableEffect(Unit) { + state.webSettings.apply { + isJavaScriptEnabled = true + androidWebSettings.apply { + backgroundColor = Color.Transparent + domStorageEnabled = true + } + } + onDispose { } + } } } -private class InlinedWebViewClient(private val onDeeplinkCaptured: (String) -> Unit, private val onChallengePresented: () -> Unit) : - AccompanistWebViewClient() { - @Deprecated("Deprecated in Java") - override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean = view.checkAndOpen(url) - override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest): Boolean = view.checkAndOpen(request.url.toString()) +private class WebViewRequestInterceptor(private val onDeeplinkCaptured: (String) -> Unit, private val appScheme: String) : + RequestInterceptor { + override fun onInterceptUrlRequest(request: WebRequest, navigator: WebViewNavigator): WebRequestInterceptResult = request.checkAndOpen() - private fun WebView.checkAndOpen(url: String): Boolean { + private fun WebRequest.checkAndOpen(): WebRequestInterceptResult { try { - val uri = url.toUri() - if (uri.scheme == resources.getString(R.string.komoju_consumer_app_scheme)) { + val uri = Uri.parse(url) + if (uri.scheme == appScheme) { onDeeplinkCaptured(url) - return true + return WebRequestInterceptResult.Reject } else { error("Unsupported scheme for deeplink, load in webView Instead.") } } catch (_: Exception) { - loadUrl(url) - return false - } - } - - override fun shouldInterceptRequest(view: WebView?, request: WebResourceRequest?): WebResourceResponse? { - if (request?.url.toString().contains("acs-challenge.testlab.3dsecure.cloud")) { - onChallengePresented() + return WebRequestInterceptResult.Allow } - return super.shouldInterceptRequest(view, request) } } diff --git a/android/src/main/java/com/komoju/android/sdk/ui/composables/PrimaryButton.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/composables/PrimaryButton.kt similarity index 73% rename from android/src/main/java/com/komoju/android/sdk/ui/composables/PrimaryButton.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/composables/PrimaryButton.kt index 9006016..0e33482 100644 --- a/android/src/main/java/com/komoju/android/sdk/ui/composables/PrimaryButton.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/composables/PrimaryButton.kt @@ -1,4 +1,4 @@ -package com.komoju.android.sdk.ui.composables +package com.komoju.mobile.sdk.ui.composables import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxWidth @@ -11,13 +11,13 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import com.komoju.android.sdk.ui.theme.KomojuMobileSdkTheme -import com.komoju.android.sdk.ui.theme.LocalConfigurableTheme +import com.komoju.mobile.sdk.ui.theme.KomojuMobileSdkTheme +import com.komoju.mobile.sdk.ui.theme.LocalConfigurableTheme +import com.komoju.mobile.sdk.ui.theme.toColor +import org.jetbrains.compose.ui.tooling.preview.Preview @Composable internal fun PrimaryButton(text: String, modifier: Modifier = Modifier, onClick: () -> Unit) { @@ -26,10 +26,10 @@ internal fun PrimaryButton(text: String, modifier: Modifier = Modifier, onClick: modifier = modifier, onClick = onClick, colors = ButtonDefaults.buttonColors( - containerColor = Color(configurableTheme.primaryButtonColor), - contentColor = Color(configurableTheme.primaryButtonContentColor), + containerColor = configurableTheme.primaryColor.toColor(), + contentColor = configurableTheme.primaryContentColor.toColor(), ), - shape = RoundedCornerShape(configurableTheme.primaryButtonCornerRadiusInDP.dp), + shape = RoundedCornerShape(configurableTheme.primaryShapeCornerRadiusInDp.dp), ) { Box( modifier = Modifier @@ -43,7 +43,7 @@ internal fun PrimaryButton(text: String, modifier: Modifier = Modifier, onClick: } @Composable -@Preview(showBackground = true, showSystemUi = true) +@Preview private fun PaymentButtonPreview() { KomojuMobileSdkTheme { PrimaryButton( diff --git a/android/src/main/java/com/komoju/android/sdk/ui/composables/TextButton.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/composables/TextButton.kt similarity index 95% rename from android/src/main/java/com/komoju/android/sdk/ui/composables/TextButton.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/composables/TextButton.kt index e5ad509..77e1ced 100644 --- a/android/src/main/java/com/komoju/android/sdk/ui/composables/TextButton.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/composables/TextButton.kt @@ -1,4 +1,4 @@ -package com.komoju.android.sdk.ui.composables +package com.komoju.mobile.sdk.ui.composables import androidx.compose.foundation.layout.padding import androidx.compose.foundation.shape.RoundedCornerShape diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/composables/ThemedCircularProgressIndicator.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/composables/ThemedCircularProgressIndicator.kt new file mode 100644 index 0000000..8c42760 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/composables/ThemedCircularProgressIndicator.kt @@ -0,0 +1,12 @@ +package com.komoju.mobile.sdk.ui.composables + +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.runtime.Composable +import com.komoju.mobile.sdk.ui.theme.LocalConfigurableTheme +import com.komoju.mobile.sdk.ui.theme.toColor + +@Composable +internal fun ThemedCircularProgressIndicator() { + val configuration = LocalConfigurableTheme.current + CircularProgressIndicator(color = configuration.loaderColor.toColor()) +} diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/KomojuPaymentEntryPoint.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/KomojuPaymentEntryPoint.kt new file mode 100644 index 0000000..eab9a2d --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/KomojuPaymentEntryPoint.kt @@ -0,0 +1,32 @@ +package com.komoju.mobile.sdk.ui.screens + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import cafe.adriel.voyager.navigator.Navigator +import cafe.adriel.voyager.transitions.SlideTransition +import com.komoju.mobile.sdk.KomojuMobileSDKConfiguration +import com.komoju.mobile.sdk.ui.screens.payment.KomojuPaymentScreen +import com.komoju.mobile.sdk.ui.theme.KomojuMobileSdkTheme +import com.komoju.mobile.sdk.utils.Logger + +@Composable +fun KomojuPaymentEntryPoint(configuration: KomojuMobileSDKConfiguration, onCreated: @Composable (Navigator) -> Unit) { + Logger.setDebugMode(configuration.isDebugMode) + KomojuMobileSdkTheme(configuration) { + Box( + modifier = Modifier + .fillMaxWidth() + .fillMaxHeight(.9f), + ) { + Navigator( + KomojuPaymentScreen(configuration), + ) { navigator -> + onCreated(navigator) + SlideTransition(navigator) + } + } + } +} diff --git a/android/src/main/java/com/komoju/android/sdk/ui/screens/KomojuPaymentRoutes.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/KomojuPaymentRoutes.kt similarity index 57% rename from android/src/main/java/com/komoju/android/sdk/ui/screens/KomojuPaymentRoutes.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/KomojuPaymentRoutes.kt index f47b37e..d6c371c 100644 --- a/android/src/main/java/com/komoju/android/sdk/ui/screens/KomojuPaymentRoutes.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/KomojuPaymentRoutes.kt @@ -1,39 +1,45 @@ -package com.komoju.android.sdk.ui.screens +package com.komoju.mobile.sdk.ui.screens -import androidx.activity.compose.LocalOnBackPressedDispatcherOwner import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.State import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow -import com.komoju.android.sdk.KomojuSDK -import com.komoju.android.sdk.navigation.paymentResultScreenModel -import com.komoju.android.sdk.ui.screens.awating.KonbiniAwaitingPaymentScreen -import com.komoju.android.sdk.ui.screens.failed.PaymentFailedScreen -import com.komoju.android.sdk.ui.screens.failed.Reason -import com.komoju.android.sdk.ui.screens.success.PaymentSuccessScreen -import com.komoju.android.sdk.ui.screens.verify.ProcessPaymentScreen -import com.komoju.android.sdk.ui.screens.webview.WebViewScreen +import com.komoju.mobile.sdk.KomojuMobileSDKConfiguration +import com.komoju.mobile.sdk.KomojuMobileSDKPaymentResult import com.komoju.mobile.sdk.entities.Payment +import com.komoju.mobile.sdk.navigation.paymentResultScreenModel +import com.komoju.mobile.sdk.navigation.rememberPlatformBackPressDispatcher +import com.komoju.mobile.sdk.ui.screens.awating.KonbiniAwaitingPaymentScreen +import com.komoju.mobile.sdk.ui.screens.failed.PaymentFailedScreen +import com.komoju.mobile.sdk.ui.screens.failed.Reason +import com.komoju.mobile.sdk.ui.screens.success.PaymentSuccessScreen +import com.komoju.mobile.sdk.ui.screens.verify.ProcessPaymentScreen +import com.komoju.mobile.sdk.ui.screens.webview.WebViewScreen -internal sealed class Router { +sealed class Router { data object Pop : Router() data object PopAll : Router() data object PopToRoot : Router() data class Push(val route: KomojuPaymentRoute) : Router() data class Replace(val route: KomojuPaymentRoute) : Router() data class ReplaceAll(val route: KomojuPaymentRoute) : Router() - data class SetPaymentResultAndPop(val result: KomojuSDK.PaymentResult = KomojuSDK.PaymentResult(false)) : Router() + data class SetPaymentResultAndPop(val result: KomojuMobileSDKPaymentResult = KomojuMobileSDKPaymentResult(false)) : Router() } -internal sealed interface KomojuPaymentRoute { - data class KonbiniAwaitingPayment(val configuration: KomojuSDK.Configuration, val payment: Payment) : KomojuPaymentRoute +sealed interface KomojuPaymentRoute { + data class KonbiniAwaitingPayment(val configuration: KomojuMobileSDKConfiguration, val payment: Payment) : KomojuPaymentRoute - data class WebView(val url: String, val canComeBack: Boolean = false, val isJavaScriptEnabled: Boolean = false) : KomojuPaymentRoute + data class WebView( + val configuration: KomojuMobileSDKConfiguration, + val url: String, + val canComeBack: Boolean = false, + val isJavaScriptEnabled: Boolean = false, + ) : KomojuPaymentRoute data object PaymentSuccess : KomojuPaymentRoute data class PaymentFailed(val reason: Reason) : KomojuPaymentRoute - data class ProcessPayment(val configuration: KomojuSDK.Configuration, val processType: ProcessType) : KomojuPaymentRoute { + data class ProcessPayment(val configuration: KomojuMobileSDKConfiguration, val processType: ProcessType) : KomojuPaymentRoute { sealed interface ProcessType { data object Session : ProcessType data class VerifyTokenAndPay(val token: String, val amount: String, val currency: String) : ProcessType @@ -53,14 +59,14 @@ internal sealed interface KomojuPaymentRoute { } @Composable -internal fun RouterEffect(routerState: State, onHandled: () -> Unit) { +fun RouterEffect(routerState: State, onHandled: () -> Unit) { val navigator = LocalNavigator.currentOrThrow val router = routerState.value - val backPressDispatcher = LocalOnBackPressedDispatcherOwner.current?.onBackPressedDispatcher + val backPressDispatcher = rememberPlatformBackPressDispatcher() val resultScreenModel = navigator.paymentResultScreenModel() LaunchedEffect(router) { when (router) { - is Router.Pop -> if (navigator.pop().not()) backPressDispatcher?.onBackPressed() + is Router.Pop -> if (navigator.pop().not()) backPressDispatcher.onBackPressed() is Router.PopAll -> navigator.popAll() is Router.PopToRoot -> navigator.popUntilRoot() is Router.Push -> navigator.push(router.route.screen) @@ -70,7 +76,7 @@ internal fun RouterEffect(routerState: State, onHandled: () -> Unit) { null -> Unit is Router.SetPaymentResultAndPop -> { resultScreenModel.setResult(router.result) - if (navigator.pop().not()) backPressDispatcher?.onBackPressed() + if (navigator.pop().not()) backPressDispatcher.onBackPressed() } } onHandled() diff --git a/android/src/main/java/com/komoju/android/sdk/ui/screens/awating/KonbiniAwaitingPaymentScreen.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/awating/KonbiniAwaitingPaymentScreen.kt similarity index 53% rename from android/src/main/java/com/komoju/android/sdk/ui/screens/awating/KonbiniAwaitingPaymentScreen.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/awating/KonbiniAwaitingPaymentScreen.kt index 5d45a79..4462443 100644 --- a/android/src/main/java/com/komoju/android/sdk/ui/screens/awating/KonbiniAwaitingPaymentScreen.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/awating/KonbiniAwaitingPaymentScreen.kt @@ -1,4 +1,4 @@ -package com.komoju.android.sdk.ui.screens.awating +package com.komoju.mobile.sdk.ui.screens.awating import androidx.compose.foundation.Image import androidx.compose.foundation.background @@ -21,8 +21,6 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign @@ -32,19 +30,41 @@ import androidx.compose.ui.unit.sp import androidx.lifecycle.compose.collectAsStateWithLifecycle import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.screen.Screen -import com.komoju.android.sdk.R -import com.komoju.android.sdk.types.Currency -import com.komoju.android.sdk.ui.composables.PrimaryButton -import com.komoju.android.sdk.ui.composables.TextButton -import com.komoju.android.sdk.ui.composables.ThemedCircularProgressIndicator -import com.komoju.android.sdk.ui.screens.KomojuPaymentRoute -import com.komoju.android.sdk.ui.screens.RouterEffect -import com.komoju.android.sdk.ui.theme.Gray200 -import com.komoju.android.sdk.ui.theme.Gray50 -import com.komoju.android.sdk.ui.theme.Gray700 -import com.komoju.android.sdk.utils.AmountUtils import com.komoju.mobile.sdk.entities.Payment import com.komoju.mobile.sdk.entities.PaymentStatus +import com.komoju.mobile.sdk.shared.generated.resources.Res +import com.komoju.mobile.sdk.shared.generated.resources.komoju_awaiting_payment +import com.komoju.mobile.sdk.shared.generated.resources.komoju_awaiting_payment_instruction +import com.komoju.mobile.sdk.shared.generated.resources.komoju_confirmation_code +import com.komoju.mobile.sdk.shared.generated.resources.komoju_done +import com.komoju.mobile.sdk.shared.generated.resources.komoju_error +import com.komoju.mobile.sdk.shared.generated.resources.komoju_have_a_question_contact_us +import com.komoju.mobile.sdk.shared.generated.resources.komoju_i_will_do_it_later +import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_payment_status_completed +import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_payment_status_failed +import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_payment_status_konbini_pending +import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_payment_status_prenidng +import com.komoju.mobile.sdk.shared.generated.resources.komoju_okay +import com.komoju.mobile.sdk.shared.generated.resources.komoju_payment_failed +import com.komoju.mobile.sdk.shared.generated.resources.komoju_payment_successful +import com.komoju.mobile.sdk.shared.generated.resources.komoju_receipt_number +import com.komoju.mobile.sdk.shared.generated.resources.komoju_total_payment +import com.komoju.mobile.sdk.shared.generated.resources.komoju_update_payment_method +import com.komoju.mobile.sdk.shared.generated.resources.komoju_view_instructions +import com.komoju.mobile.sdk.shared.generated.resources.komoju_your_payment_has_been_processed_successfully +import com.komoju.mobile.sdk.shared.generated.resources.komoju_your_payment_has_failed +import com.komoju.mobile.sdk.shared.generated.resources.komoju_your_payment_is_awaiting_processing +import com.komoju.mobile.sdk.ui.composables.PrimaryButton +import com.komoju.mobile.sdk.ui.composables.TextButton +import com.komoju.mobile.sdk.ui.composables.ThemedCircularProgressIndicator +import com.komoju.mobile.sdk.ui.screens.KomojuPaymentRoute +import com.komoju.mobile.sdk.ui.screens.RouterEffect +import com.komoju.mobile.sdk.ui.theme.Gray200 +import com.komoju.mobile.sdk.ui.theme.Gray50 +import com.komoju.mobile.sdk.ui.theme.Gray700 +import com.komoju.mobile.sdk.utils.AmountUtils +import org.jetbrains.compose.resources.painterResource +import org.jetbrains.compose.resources.stringResource internal data class KonbiniAwaitingPaymentScreen(val route: KomojuPaymentRoute.KonbiniAwaitingPayment) : Screen { @Composable @@ -53,9 +73,11 @@ internal data class KonbiniAwaitingPaymentScreen(val route: KomojuPaymentRoute.K val uiState by screenModel.state.collectAsStateWithLifecycle() RouterEffect(screenModel.router.collectAsStateWithLifecycle(), screenModel::onRouteConsumed) uiState.payment?.let { - PaymentStatus( + ProcessForPaymentStatus( payment = it, - onPrimaryButtonClicked = screenModel::onPrimaryButtonClicked, + onPrimaryButtonClicked = { + screenModel.onPrimaryButtonClicked(route.configuration) + }, onSecondaryButtonClicked = screenModel::onSecondaryButtonClicked, ) } @@ -74,10 +96,10 @@ internal data class KonbiniAwaitingPaymentScreen(val route: KomojuPaymentRoute.K } @Composable -private fun PaymentStatus(payment: Payment, onPrimaryButtonClicked: () -> Unit, onSecondaryButtonClicked: () -> Unit) { +private fun ProcessForPaymentStatus(payment: Payment, onPrimaryButtonClicked: () -> Unit, onSecondaryButtonClicked: () -> Unit) { val displayPayableAmount by remember(payment.amount) { derivedStateOf { - AmountUtils.formatToDecimal(Currency.parse(payment.currency), payment.amount) + AmountUtils.formatToDecimal(payment.currency, payment.amount) } } Column( @@ -102,7 +124,7 @@ private fun PaymentStatus(payment: Payment, onPrimaryButtonClicked: () -> Unit, .padding(vertical = 16.dp), ) { Column(modifier = Modifier.background(Gray50, RoundedCornerShape(8.dp))) { - InformationItem(title = stringResource(R.string.komoju_total_payment), displayPayableAmount) + InformationItem(title = stringResource(Res.string.komoju_total_payment), displayPayableAmount) payment.additionalInformation.forEach { HorizontalDivider(color = Gray200, modifier = Modifier.padding(horizontal = 16.dp)) InformationItem(it.first, it.second) @@ -137,37 +159,37 @@ private fun InformationItem(title: String, description: String) { private val Payment.icon get() = when { - status == PaymentStatus.COMPLETED -> R.drawable.komoju_ic_payment_status_completed - status == PaymentStatus.FAILED -> R.drawable.komoju_ic_payment_status_failed - this is Payment.Konbini && status == PaymentStatus.AUTHORIZED -> R.drawable.komoju_ic_payment_status_konbini_pending - else -> R.drawable.komoju_ic_payment_status_prenidng + status == PaymentStatus.COMPLETED -> Res.drawable.komoju_ic_payment_status_completed + status == PaymentStatus.FAILED -> Res.drawable.komoju_ic_payment_status_failed + this is Payment.Konbini && status == PaymentStatus.AUTHORIZED -> Res.drawable.komoju_ic_payment_status_konbini_pending + else -> Res.drawable.komoju_ic_payment_status_prenidng } private val Payment.title @Composable get() = when (status) { - PaymentStatus.COMPLETED -> stringResource(R.string.komoju_payment_successful) - PaymentStatus.FAILED -> stringResource(R.string.komoju_payment_failed) - else -> stringResource(R.string.komoju_awaiting_payment) + PaymentStatus.COMPLETED -> stringResource(Res.string.komoju_payment_successful) + PaymentStatus.FAILED -> stringResource(Res.string.komoju_payment_failed) + else -> stringResource(Res.string.komoju_awaiting_payment) } private val Payment.description @Composable get() = when { - status == PaymentStatus.COMPLETED -> stringResource(R.string.komoju_your_payment_has_been_processed_successfully) - status == PaymentStatus.FAILED -> stringResource(R.string.komoju_your_payment_has_failed) + status == PaymentStatus.COMPLETED -> stringResource(Res.string.komoju_your_payment_has_been_processed_successfully) + status == PaymentStatus.FAILED -> stringResource(Res.string.komoju_your_payment_has_failed) this is Payment.Konbini && status == PaymentStatus.AUTHORIZED -> - stringResource(R.string.komoju_awaiting_payment_instruction, this.konbiniStoreKey) - else -> stringResource(R.string.komoju_your_payment_is_awaiting_processing) + stringResource(Res.string.komoju_awaiting_payment_instruction, this.konbiniStoreKey) + else -> stringResource(Res.string.komoju_your_payment_is_awaiting_processing) } private val Payment.additionalInformation @Composable get() = when { - this is Payment.Error -> listOf(stringResource(R.string.komoju_error) to code + message) + this is Payment.Error -> listOf(stringResource(Res.string.komoju_error) to code + message) this is Payment.Konbini && status == PaymentStatus.AUTHORIZED -> listOfNotNull( - receiptNumber?.let { stringResource(R.string.komoju_receipt_number) to it }, - confirmationCode?.let { stringResource(R.string.komoju_confirmation_code) to it }, + receiptNumber?.let { stringResource(Res.string.komoju_receipt_number) to it }, + confirmationCode?.let { stringResource(Res.string.komoju_confirmation_code) to it }, ) else -> emptyList() @@ -176,16 +198,16 @@ private val Payment.additionalInformation private val Payment.primaryButtonText @Composable get() = when { - status == PaymentStatus.COMPLETED -> stringResource(R.string.komoju_done) - status == PaymentStatus.FAILED -> stringResource(R.string.komoju_update_payment_method) - this is Payment.Konbini && status == PaymentStatus.AUTHORIZED -> stringResource(R.string.komoju_view_instructions) - else -> stringResource(R.string.komoju_okay) + status == PaymentStatus.COMPLETED -> stringResource(Res.string.komoju_done) + status == PaymentStatus.FAILED -> stringResource(Res.string.komoju_update_payment_method) + this is Payment.Konbini && status == PaymentStatus.AUTHORIZED -> stringResource(Res.string.komoju_view_instructions) + else -> stringResource(Res.string.komoju_okay) } private val Payment.secondaryButtonText @Composable get() = when { - status == PaymentStatus.FAILED -> stringResource(R.string.komoju_have_a_question_contact_us) - this is Payment.Konbini && status == PaymentStatus.AUTHORIZED -> stringResource(R.string.komoju_i_will_do_it_later) + status == PaymentStatus.FAILED -> stringResource(Res.string.komoju_have_a_question_contact_us) + this is Payment.Konbini && status == PaymentStatus.AUTHORIZED -> stringResource(Res.string.komoju_i_will_do_it_later) else -> null } diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/awating/KonbiniAwaitingPaymentScreenModel.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/awating/KonbiniAwaitingPaymentScreenModel.kt new file mode 100644 index 0000000..12c4a70 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/awating/KonbiniAwaitingPaymentScreenModel.kt @@ -0,0 +1,26 @@ +package com.komoju.mobile.sdk.ui.screens.awating + +import com.komoju.mobile.sdk.KomojuMobileSDKConfiguration +import com.komoju.mobile.sdk.entities.Payment +import com.komoju.mobile.sdk.navigation.RouterStateScreenModel +import com.komoju.mobile.sdk.ui.screens.KomojuPaymentRoute +import com.komoju.mobile.sdk.ui.screens.Router + +internal class KonbiniAwaitingPaymentScreenModel(payment: Payment? = null) : + RouterStateScreenModel( + KonbiniAwaitingPaymentUiState(payment), + ) { + + fun onPrimaryButtonClicked(configuration: KomojuMobileSDKConfiguration) { + when (val payment = state.value.payment) { + is Payment.Konbini -> + mutableRouter.value = + Router.Push(KomojuPaymentRoute.WebView(configuration, payment.instructionURL, canComeBack = true)) + else -> Unit + } + } + + fun onSecondaryButtonClicked() { + mutableRouter.value = Router.Pop + } +} diff --git a/android/src/main/java/com/komoju/android/sdk/ui/screens/awating/KonbiniAwaitingPaymentUiState.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/awating/KonbiniAwaitingPaymentUiState.kt similarity index 75% rename from android/src/main/java/com/komoju/android/sdk/ui/screens/awating/KonbiniAwaitingPaymentUiState.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/awating/KonbiniAwaitingPaymentUiState.kt index c56f7c6..671daa5 100644 --- a/android/src/main/java/com/komoju/android/sdk/ui/screens/awating/KonbiniAwaitingPaymentUiState.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/awating/KonbiniAwaitingPaymentUiState.kt @@ -1,4 +1,4 @@ -package com.komoju.android.sdk.ui.screens.awating +package com.komoju.mobile.sdk.ui.screens.awating import com.komoju.mobile.sdk.entities.Payment diff --git a/android/src/main/java/com/komoju/android/sdk/ui/screens/failed/PaymentFailedScreen.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/failed/PaymentFailedScreen.kt similarity index 62% rename from android/src/main/java/com/komoju/android/sdk/ui/screens/failed/PaymentFailedScreen.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/failed/PaymentFailedScreen.kt index d7c2477..2bbc34b 100644 --- a/android/src/main/java/com/komoju/android/sdk/ui/screens/failed/PaymentFailedScreen.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/failed/PaymentFailedScreen.kt @@ -1,4 +1,4 @@ -package com.komoju.android.sdk.ui.screens.failed +package com.komoju.mobile.sdk.ui.screens.failed import androidx.compose.foundation.Image import androidx.compose.foundation.clickable @@ -15,8 +15,6 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp @@ -24,10 +22,18 @@ import androidx.compose.ui.unit.sp import androidx.lifecycle.compose.collectAsStateWithLifecycle import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.screen.Screen -import com.komoju.android.sdk.R -import com.komoju.android.sdk.ui.composables.PrimaryButton -import com.komoju.android.sdk.ui.screens.KomojuPaymentRoute -import com.komoju.android.sdk.ui.screens.RouterEffect +import com.komoju.mobile.sdk.shared.generated.resources.Res +import com.komoju.mobile.sdk.shared.generated.resources.komoju_back_to_store +import com.komoju.mobile.sdk.shared.generated.resources.komoju_credit_card_error +import com.komoju.mobile.sdk.shared.generated.resources.komoju_error_other +import com.komoju.mobile.sdk.shared.generated.resources.komoju_error_user_cancel +import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_payment_status_failed +import com.komoju.mobile.sdk.shared.generated.resources.komoju_payment_failed +import com.komoju.mobile.sdk.ui.composables.PrimaryButton +import com.komoju.mobile.sdk.ui.screens.KomojuPaymentRoute +import com.komoju.mobile.sdk.ui.screens.RouterEffect +import org.jetbrains.compose.resources.painterResource +import org.jetbrains.compose.resources.stringResource internal class PaymentFailedScreen(private val route: KomojuPaymentRoute.PaymentFailed) : Screen { @Composable @@ -50,14 +56,14 @@ private fun Screen.PaymentFailedScreenContent(route: KomojuPaymentRoute.PaymentF .clickable(onClick = screenModel::onCloseButtonClicked), ) } - Image(painterResource(R.drawable.komoju_ic_payment_status_failed), "status_icon") + Image(painterResource(Res.drawable.komoju_ic_payment_status_failed), "status_icon") Spacer(Modifier.height(16.dp)) - Text(stringResource(R.string.komoju_payment_failed), fontSize = 24.sp, fontWeight = FontWeight.Bold) + Text(stringResource(Res.string.komoju_payment_failed), fontSize = 24.sp, fontWeight = FontWeight.Bold) Text( text = when (route.reason) { - Reason.USER_CANCEL -> stringResource(R.string.komoju_error_user_cancel) - Reason.OTHER -> stringResource(R.string.komoju_error_other) - Reason.CREDIT_CARD_ERROR -> stringResource(R.string.komoju_credit_card_error) + Reason.USER_CANCEL -> stringResource(Res.string.komoju_error_user_cancel) + Reason.OTHER -> stringResource(Res.string.komoju_error_other) + Reason.CREDIT_CARD_ERROR -> stringResource(Res.string.komoju_credit_card_error) }, modifier = Modifier.padding(16.dp), textAlign = TextAlign.Center, @@ -67,7 +73,7 @@ private fun Screen.PaymentFailedScreenContent(route: KomojuPaymentRoute.PaymentF modifier = Modifier .fillMaxWidth() .padding(16.dp), - text = stringResource(R.string.komoju_back_to_store), + text = stringResource(Res.string.komoju_back_to_store), ) { screenModel.onBackToStoreButtonClicked() } diff --git a/android/src/main/java/com/komoju/android/sdk/ui/screens/failed/PaymentFailedScreenModel.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/failed/PaymentFailedScreenModel.kt similarity index 66% rename from android/src/main/java/com/komoju/android/sdk/ui/screens/failed/PaymentFailedScreenModel.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/failed/PaymentFailedScreenModel.kt index 8f1fdcc..f212801 100644 --- a/android/src/main/java/com/komoju/android/sdk/ui/screens/failed/PaymentFailedScreenModel.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/failed/PaymentFailedScreenModel.kt @@ -1,6 +1,6 @@ -package com.komoju.android.sdk.ui.screens.failed +package com.komoju.mobile.sdk.ui.screens.failed -import com.komoju.android.sdk.navigation.RouterStateScreenModel +import com.komoju.mobile.sdk.navigation.RouterStateScreenModel internal class PaymentFailedScreenModel : RouterStateScreenModel(Unit) { fun onCloseButtonClicked() { diff --git a/android/src/main/java/com/komoju/android/sdk/ui/screens/failed/Reason.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/failed/Reason.kt similarity index 95% rename from android/src/main/java/com/komoju/android/sdk/ui/screens/failed/Reason.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/failed/Reason.kt index cdc9fb3..0b97d7f 100644 --- a/android/src/main/java/com/komoju/android/sdk/ui/screens/failed/Reason.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/failed/Reason.kt @@ -1,4 +1,4 @@ -package com.komoju.android.sdk.ui.screens.failed +package com.komoju.mobile.sdk.ui.screens.failed /** * Enum class representing the reasons for a payment failure. diff --git a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/KomojuPaymentScreen.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentScreen.kt similarity index 84% rename from android/src/main/java/com/komoju/android/sdk/ui/screens/payment/KomojuPaymentScreen.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentScreen.kt index 7f58185..bcffcc8 100644 --- a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/KomojuPaymentScreen.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentScreen.kt @@ -1,7 +1,5 @@ -package com.komoju.android.sdk.ui.screens.payment +package com.komoju.mobile.sdk.ui.screens.payment -import android.os.Parcelable -import androidx.activity.compose.rememberLauncherForActivityResult import androidx.compose.animation.animateContentSize import androidx.compose.foundation.Image import androidx.compose.foundation.background @@ -26,35 +24,33 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.screen.Screen -import com.komoju.android.sdk.KomojuSDK -import com.komoju.android.sdk.R -import com.komoju.android.sdk.ui.composables.InlinedWebView -import com.komoju.android.sdk.ui.composables.ThemedCircularProgressIndicator -import com.komoju.android.sdk.ui.screens.RouterEffect -import com.komoju.android.sdk.ui.screens.payment.composables.PaymentMethodForm -import com.komoju.android.sdk.ui.screens.payment.composables.PaymentMethodsRow -import com.komoju.android.sdk.ui.screens.payment.composables.PaymentSheetHandle -import com.komoju.android.sdk.utils.OffsiteCustomTabResultContract +import com.komoju.mobile.sdk.KomojuMobileSDKConfiguration import com.komoju.mobile.sdk.entities.PaymentMethod -import kotlinx.parcelize.Parcelize +import com.komoju.mobile.sdk.shared.generated.resources.Res +import com.komoju.mobile.sdk.shared.generated.resources.komoju_img_payment_footer +import com.komoju.mobile.sdk.shared.generated.resources.komoju_payment_options +import com.komoju.mobile.sdk.ui.composables.InlinedWebView +import com.komoju.mobile.sdk.ui.composables.ThemedCircularProgressIndicator +import com.komoju.mobile.sdk.ui.composables.launchCustomTab +import com.komoju.mobile.sdk.ui.screens.RouterEffect +import com.komoju.mobile.sdk.ui.screens.payment.composables.PaymentMethodForm +import com.komoju.mobile.sdk.ui.screens.payment.composables.PaymentMethodsRow +import com.komoju.mobile.sdk.ui.screens.payment.composables.PaymentSheetHandle +import org.jetbrains.compose.resources.painterResource +import org.jetbrains.compose.resources.stringResource -@Parcelize -internal data class KomojuPaymentScreen(private val sdkConfiguration: KomojuSDK.Configuration) : - Screen, - Parcelable { +internal data class KomojuPaymentScreen(private val sdkConfiguration: KomojuMobileSDKConfiguration) : Screen { @Composable override fun Content() { val screenViewModel = rememberScreenModel { KomojuPaymentScreenModel(sdkConfiguration) } val uiState by screenViewModel.state.collectAsStateWithLifecycle() val offSitePaymentURL by screenViewModel.offSitePaymentURL.collectAsStateWithLifecycle() - val offsitePaymentLauncher = rememberLauncherForActivityResult(OffsiteCustomTabResultContract()) { + val offsitePaymentLauncher = launchCustomTab { screenViewModel.onOffsitePaymentResult() } LaunchedEffect(sdkConfiguration.sessionId) { @@ -74,7 +70,7 @@ internal data class KomojuPaymentScreen(private val sdkConfiguration: KomojuSDK. if (uiState.session != null) { Column { PaymentSheetHandle( - stringResource(R.string.komoju_payment_options), + stringResource(Res.string.komoju_payment_options), onCloseClicked = { screenViewModel.onCloseClicked() }, @@ -109,7 +105,7 @@ internal data class KomojuPaymentScreen(private val sdkConfiguration: KomojuSDK. } Image( modifier = Modifier.fillMaxWidth().height(54.dp).padding(horizontal = 16.dp), - painter = painterResource(R.drawable.komoju_img_payment_footer), + painter = painterResource(Res.drawable.komoju_img_payment_footer), contentDescription = "payment footer", ) } @@ -146,6 +142,7 @@ internal data class KomojuPaymentScreen(private val sdkConfiguration: KomojuSDK. }, ), url = inlineWebViewURL, + appScheme = sdkConfiguration.appScheme, onDone = { screenViewModel.onInlinedDeeplinkCaptured(it) }, diff --git a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/KomojuPaymentScreenModel.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentScreenModel.kt similarity index 68% rename from android/src/main/java/com/komoju/android/sdk/ui/screens/payment/KomojuPaymentScreenModel.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentScreenModel.kt index cc84d37..41fe29b 100644 --- a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/KomojuPaymentScreenModel.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentScreenModel.kt @@ -1,22 +1,8 @@ -package com.komoju.android.sdk.ui.screens.payment +package com.komoju.mobile.sdk.ui.screens.payment -import androidx.core.text.isDigitsOnly import cafe.adriel.voyager.core.model.screenModelScope -import com.komoju.android.sdk.KomojuSDK -import com.komoju.android.sdk.R -import com.komoju.android.sdk.navigation.RouterStateScreenModel -import com.komoju.android.sdk.ui.composables.InlinedPaymentPrimaryButtonState -import com.komoju.android.sdk.ui.screens.KomojuPaymentRoute -import com.komoju.android.sdk.ui.screens.Router -import com.komoju.android.sdk.ui.screens.failed.Reason -import com.komoju.android.sdk.utils.CreditCardUtils.isValidCVV -import com.komoju.android.sdk.utils.CreditCardUtils.isValidCardHolderNameChar -import com.komoju.android.sdk.utils.CreditCardUtils.isValidCardNumber -import com.komoju.android.sdk.utils.CreditCardUtils.isValidExpiryDate -import com.komoju.android.sdk.utils.DeeplinkEntity -import com.komoju.android.sdk.utils.isKatakanaOnly -import com.komoju.android.sdk.utils.isValidEmail -import com.komoju.android.sdk.utils.verifyTokenAndProcessPayment +import com.komoju.mobile.sdk.KomojuMobileSDKConfiguration +import com.komoju.mobile.sdk.KomojuMobileSDKPaymentResult import com.komoju.mobile.sdk.entities.Payment import com.komoju.mobile.sdk.entities.PaymentMethod import com.komoju.mobile.sdk.entities.PaymentRequest @@ -28,17 +14,57 @@ import com.komoju.mobile.sdk.entities.SecureTokenResponse.Status.NEEDS_VERIFY import com.komoju.mobile.sdk.entities.SecureTokenResponse.Status.OK import com.komoju.mobile.sdk.entities.SecureTokenResponse.Status.SKIPPED import com.komoju.mobile.sdk.entities.SecureTokenResponse.Status.UNKNOWN +import com.komoju.mobile.sdk.navigation.RouterStateScreenModel import com.komoju.mobile.sdk.remote.apis.KomojuRemoteApi -import kotlin.time.Duration.Companion.milliseconds +import com.komoju.mobile.sdk.shared.generated.resources.Res +import com.komoju.mobile.sdk.shared.generated.resources.komoju_cadrholder_name_cannot_be_empty +import com.komoju.mobile.sdk.shared.generated.resources.komoju_please_select_a_konbini_brand +import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_bit_cash_id_cannot_be_empty +import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_bit_cash_id_is_not_valid +import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_card_number_is_not_valid +import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_cardholder_name_is_not_valid +import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_cvv_is_not_valid +import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_email_is_not_valid +import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_expiry_date_is_not_valid +import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_first_name_cannot_be_empty +import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_first_name_phonetic_cannot_be_empty +import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_first_name_phonetic_must_be_a_kana +import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_last_name_cannot_be_empty +import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_last_name_phonetic_cannot_be_empty +import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_last_name_phonetic_must_be_a_kana +import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_name_cannot_be_empty +import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_net_cash_id_cannot_be_empty +import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_net_cash_id_is_not_valid +import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_phone_number_cannot_be_empty +import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_phone_number_is_not_valid +import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_prepaid_number_cannot_be_empty +import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_prepaid_number_is_not_valid +import com.komoju.mobile.sdk.ui.composables.InlinedPaymentPrimaryButtonState +import com.komoju.mobile.sdk.ui.screens.KomojuPaymentRoute +import com.komoju.mobile.sdk.ui.screens.Router +import com.komoju.mobile.sdk.ui.screens.failed.Reason +import com.komoju.mobile.sdk.utils.CreditCardUtils.isValidCVV +import com.komoju.mobile.sdk.utils.CreditCardUtils.isValidCardHolderNameChar +import com.komoju.mobile.sdk.utils.CreditCardUtils.isValidCardNumber +import com.komoju.mobile.sdk.utils.CreditCardUtils.isValidExpiryDate +import com.komoju.mobile.sdk.utils.DeeplinkEntity +import com.komoju.mobile.sdk.utils.Logger +import com.komoju.mobile.sdk.utils.Platform +import com.komoju.mobile.sdk.utils.currentPlatform +import com.komoju.mobile.sdk.utils.isDigitsOnly +import com.komoju.mobile.sdk.utils.isKanaOnly +import com.komoju.mobile.sdk.utils.isValidEmail +import com.komoju.mobile.sdk.utils.verifyTokenAndProcessPayment import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch +import kotlin.time.Duration.Companion.milliseconds -internal class KomojuPaymentScreenModel(private val config: KomojuSDK.Configuration) : +internal class KomojuPaymentScreenModel(private val config: KomojuMobileSDKConfiguration) : RouterStateScreenModel(KomojuPaymentUIState()) { - private val komojuApi: KomojuRemoteApi = KomojuRemoteApi.create(config.publishableKey) + private val komojuApi: KomojuRemoteApi = KomojuRemoteApi.create(config) private val _offSitePaymentURL = MutableStateFlow(null) val offSitePaymentURL = _offSitePaymentURL.asStateFlow() @@ -71,10 +97,7 @@ internal class KomojuPaymentScreenModel(private val config: KomojuSDK.Configurat } fun onCreditCardDisplayDataChange(creditCardDisplayData: CreditCardDisplayData) { - if (creditCardDisplayData.creditCardNumber.length <= 16 && - creditCardDisplayData.creditCardExpiryDate.length <= 4 && - creditCardDisplayData.creditCardCvv.length <= 7 - ) { + if (creditCardDisplayData.creditCardNumber.length <= 16 && creditCardDisplayData.creditCardExpiryDate.length <= 4 && creditCardDisplayData.creditCardCvv.length <= 7) { mutableState.update { it.copy( creditCardDisplayData = creditCardDisplayData.copy( @@ -160,13 +183,17 @@ internal class KomojuPaymentScreenModel(private val config: KomojuSDK.Configurat mutableState.update { it.copy(inlinedCreditCardProcessingURL = tokens.authURL) } } else { mutableRouter.value = - Router.ReplaceAll(KomojuPaymentRoute.WebView(url = tokens.authURL, isJavaScriptEnabled = true)) + Router.ReplaceAll(KomojuPaymentRoute.WebView(config, url = tokens.authURL, isJavaScriptEnabled = true)) } } - ERRORED, UNKNOWN -> mutableRouter.value = Router.ReplaceAll(KomojuPaymentRoute.PaymentFailed(Reason.CREDIT_CARD_ERROR)) + ERRORED, UNKNOWN -> { + Logger.d("Error creating secure tokens status ${tokens.status}") + mutableRouter.value = Router.ReplaceAll(KomojuPaymentRoute.PaymentFailed(Reason.CREDIT_CARD_ERROR)) + } } }.onFailure { + Logger.e(it) mutableRouter.value = Router.ReplaceAll(KomojuPaymentRoute.PaymentFailed(Reason.CREDIT_CARD_ERROR)) } } @@ -196,8 +223,8 @@ internal class KomojuPaymentScreenModel(private val config: KomojuSDK.Configurat }, onSuccess = { changeInlinePaymentState(InlinedPaymentPrimaryButtonState.SUCCESS) - delay(400.milliseconds) - mutableRouter.value = Router.SetPaymentResultAndPop(KomojuSDK.PaymentResult(isSuccessFul = it.isSuccessful())) + delay(400.milliseconds) // Wait till Check icon is at-least visible to the User + mutableRouter.value = Router.SetPaymentResultAndPop(KomojuMobileSDKPaymentResult(isSuccessFul = it.isSuccessful())) }, ) } @@ -214,12 +241,19 @@ internal class KomojuPaymentScreenModel(private val config: KomojuSDK.Configurat private fun Payment.handle() { when (this) { is Payment.Konbini -> mutableRouter.value = Router.Replace(KomojuPaymentRoute.KonbiniAwaitingPayment(config, payment = this)) - is Payment.OffSitePayment -> _offSitePaymentURL.value = redirectURL - is Payment.Completed -> - mutableRouter.value = - Router.SetPaymentResultAndPop(KomojuSDK.PaymentResult(isSuccessFul = status == PaymentStatus.CAPTURED)) - is Payment.BankTransfer -> mutableRouter.value = Router.ReplaceAll(KomojuPaymentRoute.WebView(url = instructionURL)) - is Payment.PayEasy -> mutableRouter.value = Router.ReplaceAll(KomojuPaymentRoute.WebView(url = instructionURL)) + is Payment.OffSitePayment -> when (currentPlatform) { + // we will use WebView in IOS first. + Platform.IOS -> mutableRouter.value = + Router.Replace(KomojuPaymentRoute.WebView(config, url = redirectURL, isJavaScriptEnabled = true, canComeBack = false)) + + else -> _offSitePaymentURL.value = redirectURL + } + + is Payment.Completed -> mutableRouter.value = + Router.SetPaymentResultAndPop(KomojuMobileSDKPaymentResult(isSuccessFul = status == PaymentStatus.CAPTURED)) + + is Payment.BankTransfer -> mutableRouter.value = Router.ReplaceAll(KomojuPaymentRoute.WebView(config, url = instructionURL)) + is Payment.PayEasy -> mutableRouter.value = Router.ReplaceAll(KomojuPaymentRoute.WebView(config, url = instructionURL)) else -> Unit } } @@ -233,30 +267,30 @@ internal class KomojuPaymentScreenModel(private val config: KomojuSDK.Configurat is PaymentMethod.WebMoney -> state.value.webMoneyDisplayData.validate() is PaymentMethod.BankTransfer, is PaymentMethod.PayEasy, - -> state.value.commonDisplayData.validate() + -> state.value.commonDisplayData.validate() is PaymentMethod.OffSitePayment -> true // No input required for Offsite payment else -> false } private fun CommonDisplayData.validate(): Boolean { - val lastNameError = if (lastName.isBlank()) R.string.komoju_the_entered_last_name_cannot_be_empty else null - val firstNameError = if (firstName.isBlank()) R.string.komoju_the_entered_first_name_cannot_be_empty else null + val lastNameError = if (lastName.isBlank()) Res.string.komoju_the_entered_last_name_cannot_be_empty else null + val firstNameError = if (firstName.isBlank()) Res.string.komoju_the_entered_first_name_cannot_be_empty else null val firstNamePhoneticError = when { - firstNamePhonetic.isBlank() -> R.string.komoju_the_entered_first_name_phonetic_cannot_be_empty - firstNamePhonetic.isKatakanaOnly.not() -> R.string.komoju_the_entered_first_name_phonetic_must_be_a_kana + firstNamePhonetic.isBlank() -> Res.string.komoju_the_entered_first_name_phonetic_cannot_be_empty + firstNamePhonetic.isKanaOnly.not() -> Res.string.komoju_the_entered_first_name_phonetic_must_be_a_kana else -> null } val lastNamePhoneticError = when { - lastNamePhonetic.isBlank() -> R.string.komoju_the_entered_last_name_phonetic_cannot_be_empty - lastNamePhonetic.isKatakanaOnly.not() -> R.string.komoju_the_entered_last_name_phonetic_must_be_a_kana + lastNamePhonetic.isBlank() -> Res.string.komoju_the_entered_last_name_phonetic_cannot_be_empty + lastNamePhonetic.isKanaOnly.not() -> Res.string.komoju_the_entered_last_name_phonetic_must_be_a_kana else -> null } - val emailError = if (email.isValidEmail.not()) R.string.komoju_the_entered_email_is_not_valid else null + val emailError = if (email.isValidEmail.not()) Res.string.komoju_the_entered_email_is_not_valid else null val phoneNumberError = when { - phoneNumber.isBlank() -> R.string.komoju_the_entered_phone_number_cannot_be_empty - phoneNumber.length < 7 -> R.string.komoju_the_entered_phone_number_is_not_valid - phoneNumber.isDigitsOnly().not() -> R.string.komoju_the_entered_phone_number_is_not_valid + phoneNumber.isBlank() -> Res.string.komoju_the_entered_phone_number_cannot_be_empty + phoneNumber.length < 7 -> Res.string.komoju_the_entered_phone_number_is_not_valid + phoneNumber.isDigitsOnly.not() -> Res.string.komoju_the_entered_phone_number_is_not_valid else -> null } mutableState.update { @@ -271,18 +305,13 @@ internal class KomojuPaymentScreenModel(private val config: KomojuSDK.Configurat ), ) } - return lastNameError == null && - firstNameError == null && - firstNamePhoneticError == null && - lastNamePhoneticError == null && - emailError == null && - phoneNumberError == null + return lastNameError == null && firstNameError == null && firstNamePhoneticError == null && lastNamePhoneticError == null && emailError == null && phoneNumberError == null } private fun WebMoneyDisplayData.validate(): Boolean { val prepaidNumberError = when { - prepaidNumber.isBlank() -> R.string.komoju_the_entered_prepaid_number_cannot_be_empty - prepaidNumber.length != 16 -> R.string.komoju_the_entered_prepaid_number_is_not_valid + prepaidNumber.isBlank() -> Res.string.komoju_the_entered_prepaid_number_cannot_be_empty + prepaidNumber.length != 16 -> Res.string.komoju_the_entered_prepaid_number_is_not_valid else -> null } mutableState.update { @@ -297,8 +326,8 @@ internal class KomojuPaymentScreenModel(private val config: KomojuSDK.Configurat private fun BitCashDisplayData.validate(): Boolean { val idError = when { - bitCashId.isBlank() -> R.string.komoju_the_entered_bit_cash_id_cannot_be_empty - bitCashId.length != 16 -> R.string.komoju_the_entered_bit_cash_id_is_not_valid + bitCashId.isBlank() -> Res.string.komoju_the_entered_bit_cash_id_cannot_be_empty + bitCashId.length != 16 -> Res.string.komoju_the_entered_bit_cash_id_is_not_valid else -> null } mutableState.update { @@ -313,8 +342,8 @@ internal class KomojuPaymentScreenModel(private val config: KomojuSDK.Configurat private fun NetCashDisplayData.validate(): Boolean { val idError = when { - netCashId.isBlank() -> R.string.komoju_the_entered_net_cash_id_cannot_be_empty - netCashId.length !in 16..20 -> R.string.komoju_the_entered_net_cash_id_is_not_valid + netCashId.isBlank() -> Res.string.komoju_the_entered_net_cash_id_cannot_be_empty + netCashId.length !in 16..20 -> Res.string.komoju_the_entered_net_cash_id_is_not_valid else -> null } mutableState.update { @@ -329,13 +358,13 @@ internal class KomojuPaymentScreenModel(private val config: KomojuSDK.Configurat private fun PaidyDisplayData.validate(): Boolean { val fullNameError = when { - fullName.isBlank() -> R.string.komoju_the_entered_name_cannot_be_empty + fullName.isBlank() -> Res.string.komoju_the_entered_name_cannot_be_empty else -> null } val phoneNumberError = when { - phoneNumber.isBlank() -> R.string.komoju_the_entered_phone_number_cannot_be_empty - phoneNumber.length < 7 -> R.string.komoju_the_entered_phone_number_is_not_valid - phoneNumber.isDigitsOnly().not() -> R.string.komoju_the_entered_phone_number_is_not_valid + phoneNumber.isBlank() -> Res.string.komoju_the_entered_phone_number_cannot_be_empty + phoneNumber.length < 7 -> Res.string.komoju_the_entered_phone_number_is_not_valid + phoneNumber.isDigitsOnly.not() -> Res.string.komoju_the_entered_phone_number_is_not_valid else -> null } mutableState.update { @@ -351,15 +380,15 @@ internal class KomojuPaymentScreenModel(private val config: KomojuSDK.Configurat private fun CreditCardDisplayData.validate(): Boolean { val fullNameOnCardError = when { - fullNameOnCard.isBlank() -> R.string.komoju_cadrholder_name_cannot_be_empty + fullNameOnCard.isBlank() -> Res.string.komoju_cadrholder_name_cannot_be_empty fullNameOnCard.all { char -> char.isValidCardHolderNameChar() } -> null - else -> R.string.komoju_the_entered_cardholder_name_is_not_valid + else -> Res.string.komoju_the_entered_cardholder_name_is_not_valid } val creditCardError = run { when { - creditCardNumber.isValidCardNumber().not() -> R.string.komoju_the_entered_card_number_is_not_valid - creditCardExpiryDate.isValidExpiryDate().not() -> R.string.komoju_the_entered_expiry_date_is_not_valid - creditCardCvv.isValidCVV().not() -> R.string.komoju_the_entered_cvv_is_not_valid + creditCardNumber.isValidCardNumber().not() -> Res.string.komoju_the_entered_card_number_is_not_valid + creditCardExpiryDate.isValidExpiryDate().not() -> Res.string.komoju_the_entered_expiry_date_is_not_valid + creditCardCvv.isValidCVV().not() -> Res.string.komoju_the_entered_cvv_is_not_valid else -> null } } @@ -375,9 +404,9 @@ internal class KomojuPaymentScreenModel(private val config: KomojuSDK.Configurat } private fun KonbiniDisplayData.validate(commonDisplayData: CommonDisplayData): Boolean { - val nameError = if (receiptName.trim().isEmpty()) R.string.komoju_the_entered_name_cannot_be_empty else null - val emailError = if (commonDisplayData.email.isValidEmail.not()) R.string.komoju_the_entered_email_is_not_valid else null - val konbiniBrandNullError = if (selectedKonbiniBrand == null) R.string.komoju_please_select_a_konbini_brand else null + val nameError = if (receiptName.trim().isEmpty()) Res.string.komoju_the_entered_name_cannot_be_empty else null + val emailError = if (commonDisplayData.email.isValidEmail.not()) Res.string.komoju_the_entered_email_is_not_valid else null + val konbiniBrandNullError = if (selectedKonbiniBrand == null) Res.string.komoju_please_select_a_konbini_brand else null mutableState.update { it.copy( konbiniDisplayData = it.konbiniDisplayData.copy( @@ -443,6 +472,7 @@ internal class KomojuPaymentScreenModel(private val config: KomojuSDK.Configurat email = state.value.commonDisplayData.email, phoneNumber = state.value.commonDisplayData.phoneNumber, ) + is PaymentMethod.WebMoney -> PaymentRequest.WebMoney( paymentMethod = this, prepaidNumber = state.value.webMoneyDisplayData.prepaidNumber, diff --git a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/KomojuPaymentUIState.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentUIState.kt similarity index 59% rename from android/src/main/java/com/komoju/android/sdk/ui/screens/payment/KomojuPaymentUIState.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentUIState.kt index 89f8f2b..2d7d7ec 100644 --- a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/KomojuPaymentUIState.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentUIState.kt @@ -1,9 +1,10 @@ -package com.komoju.android.sdk.ui.screens.payment +package com.komoju.mobile.sdk.ui.screens.payment -import com.komoju.android.sdk.ui.composables.InlinedPaymentPrimaryButtonState -import com.komoju.android.sdk.utils.empty import com.komoju.mobile.sdk.entities.PaymentMethod import com.komoju.mobile.sdk.entities.Session +import com.komoju.mobile.sdk.ui.composables.InlinedPaymentPrimaryButtonState +import com.komoju.mobile.sdk.utils.empty +import org.jetbrains.compose.resources.StringResource internal data class KomojuPaymentUIState( val isLoading: Boolean = true, @@ -28,22 +29,22 @@ internal data class CommonDisplayData( val firstNamePhonetic: String = String.empty, val email: String = String.empty, val phoneNumber: String = String.empty, - val fullNameErrorStringResource: Int? = null, - val lastNameErrorStringResource: Int? = null, - val firstNameErrorStringResource: Int? = null, - val lastNamePhoneticErrorStringResource: Int? = null, - val firstNamePhoneticErrorStringResource: Int? = null, - val emailErrorStringResource: Int? = null, - val phoneNumberErrorStringResource: Int? = null, + val fullNameErrorStringResource: StringResource? = null, + val lastNameErrorStringResource: StringResource? = null, + val firstNameErrorStringResource: StringResource? = null, + val lastNamePhoneticErrorStringResource: StringResource? = null, + val firstNamePhoneticErrorStringResource: StringResource? = null, + val emailErrorStringResource: StringResource? = null, + val phoneNumberErrorStringResource: StringResource? = null, ) internal data class CreditCardDisplayData( val fullNameOnCard: String = String.empty, - val fullNameOnCardErrorStringResource: Int? = null, + val fullNameOnCardErrorStringResource: StringResource? = null, val creditCardNumber: String = String.empty, val creditCardExpiryDate: String = String.empty, val creditCardCvv: String = String.empty, - val creditCardErrorStringResource: Int? = null, + val creditCardErrorStringResource: StringResource? = null, val canSaveCard: Boolean = false, val saveCard: Boolean = false, val inlinePaymentEnabled: Boolean = false, @@ -52,21 +53,24 @@ internal data class CreditCardDisplayData( internal data class KonbiniDisplayData( val receiptName: String = String.empty, - val receiptNameErrorStringResource: Int? = null, - val receiptEmailErrorStringResource: Int? = null, + val receiptNameErrorStringResource: StringResource? = null, + val receiptEmailErrorStringResource: StringResource? = null, val selectedKonbiniBrand: PaymentMethod.Konbini.KonbiniBrand? = null, - val konbiniBrandNullErrorStringResource: Int? = null, + val konbiniBrandNullErrorStringResource: StringResource? = null, ) -internal data class BitCashDisplayData(val bitCashId: String = String.empty, val bitCashErrorStringResource: Int? = null) +internal data class BitCashDisplayData(val bitCashId: String = String.empty, val bitCashErrorStringResource: StringResource? = null) -internal data class NetCashDisplayData(val netCashId: String = String.empty, val netCashErrorStringResource: Int? = null) +internal data class NetCashDisplayData(val netCashId: String = String.empty, val netCashErrorStringResource: StringResource? = null) -internal data class WebMoneyDisplayData(val prepaidNumber: String = String.empty, val prepaidNumberErrorStringResource: Int? = null) +internal data class WebMoneyDisplayData( + val prepaidNumber: String = String.empty, + val prepaidNumberErrorStringResource: StringResource? = null, +) internal data class PaidyDisplayData( val fullName: String = String.empty, - val fullNameErrorStringResource: Int? = null, + val fullNameErrorStringResource: StringResource? = null, val phoneNumber: String = String.empty, - val phoneNumberErrorStringResource: Int? = null, + val phoneNumberErrorStringResource: StringResource? = null, ) diff --git a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/BankForm.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/BankForm.kt similarity index 70% rename from android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/BankForm.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/BankForm.kt index 6f2d165..933a768 100644 --- a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/BankForm.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/BankForm.kt @@ -1,4 +1,4 @@ -package com.komoju.android.sdk.ui.screens.payment.composables +package com.komoju.mobile.sdk.ui.screens.payment.composables import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -12,19 +12,27 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.intl.Locale -import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import com.komoju.android.sdk.R -import com.komoju.android.sdk.types.Currency -import com.komoju.android.sdk.ui.composables.PrimaryButton -import com.komoju.android.sdk.ui.screens.payment.CommonDisplayData -import com.komoju.android.sdk.ui.theme.KomojuMobileSdkTheme -import com.komoju.android.sdk.utils.AmountUtils import com.komoju.mobile.sdk.entities.PaymentMethod +import com.komoju.mobile.sdk.shared.generated.resources.Res +import com.komoju.mobile.sdk.shared.generated.resources.komoju_email +import com.komoju.mobile.sdk.shared.generated.resources.komoju_enter_your_email_address +import com.komoju.mobile.sdk.shared.generated.resources.komoju_enter_your_phone_number +import com.komoju.mobile.sdk.shared.generated.resources.komoju_first_name +import com.komoju.mobile.sdk.shared.generated.resources.komoju_first_name_phonetic +import com.komoju.mobile.sdk.shared.generated.resources.komoju_last_name +import com.komoju.mobile.sdk.shared.generated.resources.komoju_last_name_phonetic +import com.komoju.mobile.sdk.shared.generated.resources.komoju_pay +import com.komoju.mobile.sdk.shared.generated.resources.komoju_phone_number +import com.komoju.mobile.sdk.ui.composables.PrimaryButton +import com.komoju.mobile.sdk.ui.screens.payment.CommonDisplayData +import com.komoju.mobile.sdk.ui.theme.KomojuMobileSdkTheme +import com.komoju.mobile.sdk.utils.AmountUtils +import org.jetbrains.compose.resources.stringResource +import org.jetbrains.compose.ui.tooling.preview.Preview internal val JAPANESE_LOCALE = Locale("ja") @@ -37,7 +45,7 @@ internal fun BankForm( ) { val displayPayableAmount by remember(bankTransfer.amount) { derivedStateOf { - AmountUtils.formatToDecimal(Currency.parse(bankTransfer.currency), bankTransfer.amount) + AmountUtils.formatToDecimal(bankTransfer.currency, bankTransfer.amount) } } Column { @@ -46,8 +54,8 @@ internal fun BankForm( .fillMaxWidth() .padding(horizontal = 16.dp), value = commonDisplayData.lastName, - title = stringResource(R.string.komoju_last_name), - placeholder = stringResource(R.string.komoju_last_name), + title = stringResource(Res.string.komoju_last_name), + placeholder = stringResource(Res.string.komoju_last_name), onValueChange = { onCommonDisplayDataChange(commonDisplayData.copy(lastName = it)) }, @@ -61,8 +69,8 @@ internal fun BankForm( .fillMaxWidth() .padding(horizontal = 16.dp), value = commonDisplayData.firstName, - title = stringResource(R.string.komoju_first_name), - placeholder = stringResource(R.string.komoju_first_name), + title = stringResource(Res.string.komoju_first_name), + placeholder = stringResource(Res.string.komoju_first_name), onValueChange = { onCommonDisplayDataChange(commonDisplayData.copy(firstName = it)) }, @@ -76,8 +84,8 @@ internal fun BankForm( .fillMaxWidth() .padding(horizontal = 16.dp), value = commonDisplayData.lastNamePhonetic, - title = stringResource(R.string.komoju_last_name_phonetic), - placeholder = stringResource(R.string.komoju_last_name_phonetic), + title = stringResource(Res.string.komoju_last_name_phonetic), + placeholder = stringResource(Res.string.komoju_last_name_phonetic), onValueChange = { onCommonDisplayDataChange(commonDisplayData.copy(lastNamePhonetic = it)) }, @@ -92,8 +100,8 @@ internal fun BankForm( .fillMaxWidth() .padding(horizontal = 16.dp), value = commonDisplayData.firstNamePhonetic, - title = stringResource(R.string.komoju_first_name_phonetic), - placeholder = stringResource(R.string.komoju_first_name_phonetic), + title = stringResource(Res.string.komoju_first_name_phonetic), + placeholder = stringResource(Res.string.komoju_first_name_phonetic), onValueChange = { onCommonDisplayDataChange(commonDisplayData.copy(firstNamePhonetic = it)) }, @@ -108,8 +116,8 @@ internal fun BankForm( .fillMaxWidth() .padding(horizontal = 16.dp), value = commonDisplayData.email, - title = stringResource(R.string.komoju_email), - placeholder = stringResource(R.string.komoju_enter_your_email_address), + title = stringResource(Res.string.komoju_email), + placeholder = stringResource(Res.string.komoju_enter_your_email_address), onValueChange = { onCommonDisplayDataChange(commonDisplayData.copy(email = it)) }, @@ -123,8 +131,8 @@ internal fun BankForm( .fillMaxWidth() .padding(horizontal = 16.dp), value = commonDisplayData.phoneNumber, - title = stringResource(R.string.komoju_phone_number), - placeholder = stringResource(R.string.komoju_enter_your_phone_number), + title = stringResource(Res.string.komoju_phone_number), + placeholder = stringResource(Res.string.komoju_enter_your_phone_number), onValueChange = { onCommonDisplayDataChange(commonDisplayData.copy(phoneNumber = it)) }, @@ -138,14 +146,14 @@ internal fun BankForm( modifier = Modifier .padding(16.dp) .fillMaxWidth(), - text = stringResource(R.string.komoju_pay, displayPayableAmount), + text = stringResource(Res.string.komoju_pay, displayPayableAmount), onClick = onPayButtonClicked, ) } } @Composable -@Preview(showBackground = true) +@Preview private fun BankFormPreview() { val bankTransfer = PaymentMethod.BankTransfer( hashedGateway = "hashedGateway", diff --git a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/BitCashForm.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/BitCashForm.kt similarity index 61% rename from android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/BitCashForm.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/BitCashForm.kt index a3f66b3..231da31 100644 --- a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/BitCashForm.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/BitCashForm.kt @@ -1,4 +1,4 @@ -package com.komoju.android.sdk.ui.screens.payment.composables +package com.komoju.mobile.sdk.ui.screens.payment.composables import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -10,14 +10,16 @@ import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp -import com.komoju.android.sdk.R -import com.komoju.android.sdk.types.Currency -import com.komoju.android.sdk.ui.composables.PrimaryButton -import com.komoju.android.sdk.ui.screens.payment.BitCashDisplayData -import com.komoju.android.sdk.utils.AmountUtils import com.komoju.mobile.sdk.entities.PaymentMethod +import com.komoju.mobile.sdk.shared.generated.resources.Res +import com.komoju.mobile.sdk.shared.generated.resources.komoju_bitcash_information +import com.komoju.mobile.sdk.shared.generated.resources.komoju_hiragana_id +import com.komoju.mobile.sdk.shared.generated.resources.komoju_pay +import com.komoju.mobile.sdk.ui.composables.PrimaryButton +import com.komoju.mobile.sdk.ui.screens.payment.BitCashDisplayData +import com.komoju.mobile.sdk.utils.AmountUtils +import org.jetbrains.compose.resources.stringResource @Composable internal fun BitCashForm( @@ -28,14 +30,14 @@ internal fun BitCashForm( ) { val displayPayableAmount by remember(bitCash.amount) { derivedStateOf { - AmountUtils.formatToDecimal(Currency.parse(bitCash.currency), bitCash.amount) + AmountUtils.formatToDecimal(bitCash.currency, bitCash.amount) } } Column { TextField( value = bitCashDisplayData.bitCashId, - title = stringResource(R.string.komoju_bitcash_information), - placeholder = stringResource(R.string.komoju_hiragana_id), + title = stringResource(Res.string.komoju_bitcash_information), + placeholder = stringResource(Res.string.komoju_hiragana_id), onValueChange = { onBitCashDisplayDataChange(bitCashDisplayData.copy(bitCashId = it)) }, @@ -46,7 +48,7 @@ internal fun BitCashForm( modifier = Modifier .padding(16.dp) .fillMaxWidth(), - text = stringResource(R.string.komoju_pay, displayPayableAmount), + text = stringResource(Res.string.komoju_pay, displayPayableAmount), onClick = onPayButtonClicked, ) } diff --git a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/CompatTextField.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/CompatTextField.kt similarity index 51% rename from android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/CompatTextField.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/CompatTextField.kt index d1f156f..112b65f 100644 --- a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/CompatTextField.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/CompatTextField.kt @@ -1,4 +1,4 @@ -package com.komoju.android.sdk.ui.screens.payment.composables +package com.komoju.mobile.sdk.ui.screens.payment.composables import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.KeyboardOptions @@ -7,16 +7,16 @@ import androidx.compose.material3.OutlinedTextFieldDefaults import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.KeyboardCapitalization import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.intl.Locale import androidx.compose.ui.text.intl.LocaleList import androidx.compose.ui.unit.dp -import com.komoju.android.sdk.ui.theme.Gray200 -import com.komoju.android.sdk.ui.theme.LocalConfigurableTheme -import com.komoju.android.sdk.ui.theme.Red600 +import com.komoju.mobile.sdk.ui.theme.Gray200 +import com.komoju.mobile.sdk.ui.theme.LocalConfigurableTheme +import com.komoju.mobile.sdk.ui.theme.Red600 +import com.komoju.mobile.sdk.ui.theme.toColor @Composable internal fun CompatTextField( @@ -59,46 +59,9 @@ internal fun CompatTextField( ), colors = OutlinedTextFieldDefaults.colors() .copy( - focusedLabelColor = Color(configurableTheme.primaryButtonColor), - focusedIndicatorColor = Color(configurableTheme.primaryButtonColor), + focusedLabelColor = configurableTheme.primaryColor.toColor(), + focusedIndicatorColor = configurableTheme.primaryColor.toColor(), unfocusedIndicatorColor = Gray200, ), ) -// Column { -// Text( -// modifier = Modifier -// .fillMaxWidth() -// .padding(horizontal = 16.dp), -// text = LocalI18nTexts.current[titleKey], -// ) -// Box( -// modifier = Modifier -// .fillMaxWidth() -// .padding(horizontal = 16.dp, vertical = 8.dp) -// .border(1.dp, if (error != null) Red600 else Gray200, shape = RoundedCornerShape(8.dp)) -// .padding(16.dp), -// ) { -// BasicTextField( -// modifier = Modifier.fillMaxWidth(), -// value = value, -// onValueChange = onValueChange, -// textStyle = TextStyle(fontSize = 16.sp, color = Color.Black), -// singleLine = true, -// keyboardOptions = KeyboardOptions(keyboardType = keyboardType, capitalization = capitalization), -// ) -// if (value.isEmpty()) { -// Text( -// text = LocalI18nTexts.current[placeholderKey], -// style = TextStyle(fontSize = 16.sp, color = Gray500), -// ) -// } -// } -// Text( -// modifier = Modifier -// .fillMaxWidth() -// .padding(horizontal = 16.dp), -// text = LocalI18nTexts.current[error.orEmpty()], -// style = TextStyle(fontSize = 16.sp, color = Red600), -// ) -// } } diff --git a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/CreditCardForm.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/CreditCardForm.kt similarity index 80% rename from android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/CreditCardForm.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/CreditCardForm.kt index e939935..e7a14b3 100644 --- a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/CreditCardForm.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/CreditCardForm.kt @@ -1,4 +1,4 @@ -package com.komoju.android.sdk.ui.screens.payment.composables +package com.komoju.mobile.sdk.ui.screens.payment.composables import androidx.compose.foundation.Image import androidx.compose.foundation.border @@ -29,34 +29,41 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.input.KeyboardCapitalization import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.intl.Locale import androidx.compose.ui.text.toUpperCase -import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import com.komoju.android.sdk.R -import com.komoju.android.sdk.types.Currency -import com.komoju.android.sdk.ui.composables.InlinedPaymentPrimaryButton -import com.komoju.android.sdk.ui.composables.PrimaryButton -import com.komoju.android.sdk.ui.screens.payment.CreditCardDisplayData -import com.komoju.android.sdk.ui.theme.Gray200 -import com.komoju.android.sdk.ui.theme.Gray500 -import com.komoju.android.sdk.ui.theme.KomojuMobileSdkTheme -import com.komoju.android.sdk.ui.theme.Red600 -import com.komoju.android.sdk.utils.AmountUtils -import com.komoju.android.sdk.utils.CardScheme -import com.komoju.android.sdk.utils.CreditCardUtils.formatAmex -import com.komoju.android.sdk.utils.CreditCardUtils.formatDinnersClub -import com.komoju.android.sdk.utils.CreditCardUtils.formatOtherCardNumbers -import com.komoju.android.sdk.utils.CreditCardUtils.identifyCardScheme -import com.komoju.android.sdk.utils.CreditCardUtils.makeExpirationFilter -import com.komoju.android.sdk.utils.testID import com.komoju.mobile.sdk.entities.PaymentMethod +import com.komoju.mobile.sdk.shared.generated.resources.Res +import com.komoju.mobile.sdk.shared.generated.resources.komoju_card_number +import com.komoju.mobile.sdk.shared.generated.resources.komoju_cardholder_name +import com.komoju.mobile.sdk.shared.generated.resources.komoju_cvv +import com.komoju.mobile.sdk.shared.generated.resources.komoju_full_name_on_card +import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_cvv +import com.komoju.mobile.sdk.shared.generated.resources.komoju_mm_yy +import com.komoju.mobile.sdk.shared.generated.resources.komoju_pay +import com.komoju.mobile.sdk.shared.generated.resources.komoju_save_this_card_for_future_payments +import com.komoju.mobile.sdk.ui.composables.InlinedPaymentPrimaryButton +import com.komoju.mobile.sdk.ui.composables.PrimaryButton +import com.komoju.mobile.sdk.ui.screens.payment.CreditCardDisplayData +import com.komoju.mobile.sdk.ui.theme.Gray200 +import com.komoju.mobile.sdk.ui.theme.Gray500 +import com.komoju.mobile.sdk.ui.theme.KomojuMobileSdkTheme +import com.komoju.mobile.sdk.ui.theme.Red600 +import com.komoju.mobile.sdk.utils.AmountUtils +import com.komoju.mobile.sdk.utils.CardScheme +import com.komoju.mobile.sdk.utils.CreditCardUtils.formatAmex +import com.komoju.mobile.sdk.utils.CreditCardUtils.formatDinnersClub +import com.komoju.mobile.sdk.utils.CreditCardUtils.formatOtherCardNumbers +import com.komoju.mobile.sdk.utils.CreditCardUtils.identifyCardScheme +import com.komoju.mobile.sdk.utils.CreditCardUtils.makeExpirationFilter +import com.komoju.mobile.sdk.utils.testID +import org.jetbrains.compose.resources.painterResource +import org.jetbrains.compose.resources.stringResource +import org.jetbrains.compose.ui.tooling.preview.Preview @Composable internal fun CreditCardForm( @@ -70,15 +77,15 @@ internal fun CreditCardForm( val localDensity = LocalDensity.current val displayPayableAmount by remember(creditCard.amount) { derivedStateOf { - AmountUtils.formatToDecimal(Currency.parse(creditCard.currency), creditCard.amount) + AmountUtils.formatToDecimal(creditCard.currency, creditCard.amount) } } val dividerColor = if (creditCardDisplayData.creditCardErrorStringResource == null) Gray200 else Red600 Column { TextField( creditCardDisplayData.fullNameOnCard, - title = stringResource(R.string.komoju_cardholder_name), - placeholder = stringResource(R.string.komoju_full_name_on_card), + title = stringResource(Res.string.komoju_cardholder_name), + placeholder = stringResource(Res.string.komoju_full_name_on_card), capitalization = KeyboardCapitalization.Characters, error = creditCardDisplayData.fullNameOnCardErrorStringResource?.let { stringResource(it) }, onValueChange = { @@ -90,7 +97,7 @@ internal fun CreditCardForm( modifier = Modifier .fillMaxWidth() .padding(horizontal = 16.dp), - text = stringResource(R.string.komoju_card_number), + text = stringResource(Res.string.komoju_card_number), ) Box( @@ -165,7 +172,7 @@ internal fun CreditCardForm( ) if (creditCardDisplayData.creditCardExpiryDate.isEmpty()) { Text( - text = stringResource(R.string.komoju_mm_yy), + text = stringResource(Res.string.komoju_mm_yy), style = TextStyle(fontSize = 16.sp, color = Gray500), ) } @@ -185,14 +192,14 @@ internal fun CreditCardForm( ) if (creditCardDisplayData.creditCardCvv.isEmpty()) { Text( - text = stringResource(R.string.komoju_cvv), + text = stringResource(Res.string.komoju_cvv), style = TextStyle(fontSize = 16.sp, color = Gray500), ) } } Image( - painter = painterResource(R.drawable.komoju_ic_cvv), + painter = painterResource(Res.drawable.komoju_ic_cvv), contentDescription = null, modifier = Modifier.padding(start = 16.dp), ) @@ -216,7 +223,7 @@ internal fun CreditCardForm( .testID("credit_card_pay") .padding(horizontal = 16.dp) .fillMaxWidth(), - text = stringResource(R.string.komoju_pay, displayPayableAmount), + text = stringResource(Res.string.komoju_pay, displayPayableAmount), onClick = onPayButtonClicked, state = creditCardDisplayData.inlinedPaymentPrimaryButtonState, ) @@ -226,7 +233,7 @@ internal fun CreditCardForm( .testID("credit_card_pay") .padding(horizontal = 16.dp) .fillMaxWidth(), - text = stringResource(R.string.komoju_pay, displayPayableAmount), + text = stringResource(Res.string.komoju_pay, displayPayableAmount), onClick = onPayButtonClicked, ) } @@ -240,16 +247,14 @@ internal fun CreditCardForm( }, colors = CheckboxDefaults.colors(checkedColor = Color.Black, uncheckedColor = Color.Black), ) - Text(stringResource(R.string.komoju_save_this_card_for_future_payments)) + Text(stringResource(Res.string.komoju_save_this_card_for_future_payments)) } } } } @Composable -@Preview( - showBackground = true, -) +@Preview private fun CreditCardFormPreview() { val creditCard = PaymentMethod.CreditCard( hashedGateway = "", diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/CreditCardSchemeIcons.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/CreditCardSchemeIcons.kt new file mode 100644 index 0000000..eac74f0 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/CreditCardSchemeIcons.kt @@ -0,0 +1,55 @@ +package com.komoju.mobile.sdk.ui.screens.payment.composables + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.width +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.komoju.mobile.sdk.shared.generated.resources.Res +import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_amex +import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_diners +import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_jcb +import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_master +import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_visa +import com.komoju.mobile.sdk.utils.CardScheme +import org.jetbrains.compose.resources.painterResource +import org.jetbrains.compose.ui.tooling.preview.Preview + +@Composable +internal fun CreditCardSchemeIcons(cardScheme: CardScheme) { + Row { + AnimatedVisibility(visible = cardScheme == CardScheme.UNKNOWN) { + Row { + Image(painter = painterResource(Res.drawable.komoju_ic_visa), contentDescription = "visa_icon") + Spacer(Modifier.width(8.dp)) + Image(painter = painterResource(Res.drawable.komoju_ic_master), contentDescription = "mastercard_icon") + Spacer(Modifier.width(8.dp)) + Image(painter = painterResource(Res.drawable.komoju_ic_amex), contentDescription = "amex_icon") + } + } + AnimatedVisibility(visible = cardScheme == CardScheme.VISA) { + Image(painter = painterResource(Res.drawable.komoju_ic_visa), contentDescription = "visa_icon") + } + AnimatedVisibility(visible = cardScheme == CardScheme.MASTERCARD) { + Image(painter = painterResource(Res.drawable.komoju_ic_master), contentDescription = "mastercard_icon") + } + AnimatedVisibility(visible = cardScheme == CardScheme.AMEX) { + Image(painter = painterResource(Res.drawable.komoju_ic_amex), contentDescription = "amex_icon") + } + AnimatedVisibility(visible = cardScheme == CardScheme.DINERS_CLUB) { + Image(painter = painterResource(Res.drawable.komoju_ic_diners), contentDescription = "diners_icon") + } + AnimatedVisibility(visible = cardScheme == CardScheme.JCB) { + Image(painter = painterResource(Res.drawable.komoju_ic_jcb), contentDescription = "jcb_icon") + } + } +} + +@Composable +@Preview +private fun CreditCardSchemeIconsPreview() { + CreditCardSchemeIcons(CardScheme.UNKNOWN) +} diff --git a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/KonbiniBrandsRow.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/KonbiniBrandsRow.kt similarity index 56% rename from android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/KonbiniBrandsRow.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/KonbiniBrandsRow.kt index f151b98..2f5f2a2 100644 --- a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/KonbiniBrandsRow.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/KonbiniBrandsRow.kt @@ -1,4 +1,4 @@ -package com.komoju.android.sdk.ui.screens.payment.composables +package com.komoju.mobile.sdk.ui.screens.payment.composables import androidx.compose.foundation.Image import androidx.compose.foundation.border @@ -17,16 +17,28 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import com.komoju.android.sdk.R -import com.komoju.android.sdk.ui.theme.Gray200 -import com.komoju.android.sdk.ui.theme.KomojuDarkGreen -import com.komoju.android.sdk.ui.theme.KomojuMobileSdkTheme import com.komoju.mobile.sdk.entities.PaymentMethod.Konbini.KonbiniBrand +import com.komoju.mobile.sdk.shared.generated.resources.Res +import com.komoju.mobile.sdk.shared.generated.resources.komoju__7_eleven +import com.komoju.mobile.sdk.shared.generated.resources.komoju_daily_yamazaki +import com.komoju.mobile.sdk.shared.generated.resources.komoju_family_mart +import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_daily_yamazaki +import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_family_mart +import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_lawson +import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_ministop +import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_seico_mart +import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_seven_eleven +import com.komoju.mobile.sdk.shared.generated.resources.komoju_lawson +import com.komoju.mobile.sdk.shared.generated.resources.komoju_ministop +import com.komoju.mobile.sdk.shared.generated.resources.komoju_seicomart +import com.komoju.mobile.sdk.ui.theme.Gray200 +import com.komoju.mobile.sdk.ui.theme.KomojuDarkGreen +import com.komoju.mobile.sdk.ui.theme.KomojuMobileSdkTheme +import org.jetbrains.compose.resources.painterResource +import org.jetbrains.compose.resources.stringResource +import org.jetbrains.compose.ui.tooling.preview.Preview @Composable internal fun KonbiniBrandsRow(konbiniBrands: List, selectedKonbiniBrand: KonbiniBrand?, onSelected: (KonbiniBrand) -> Unit) { @@ -67,22 +79,22 @@ private fun KonbiniBrand(konbiniBrand: KonbiniBrand, isSelected: Boolean, onSele private val KonbiniBrand.displayText @Composable get() = when (this) { - is KonbiniBrand.DailyYamazaki -> stringResource(R.string.komoju_daily_yamazaki) - is KonbiniBrand.FamilyMart -> stringResource(R.string.komoju_family_mart) - is KonbiniBrand.Lawson -> stringResource(R.string.komoju_lawson) - is KonbiniBrand.MiniStop -> stringResource(R.string.komoju_ministop) - is KonbiniBrand.SeicoMart -> stringResource(R.string.komoju_seicomart) - is KonbiniBrand.SevenEleven -> stringResource(R.string.komoju__7_eleven) + is KonbiniBrand.DailyYamazaki -> stringResource(Res.string.komoju_daily_yamazaki) + is KonbiniBrand.FamilyMart -> stringResource(Res.string.komoju_family_mart) + is KonbiniBrand.Lawson -> stringResource(Res.string.komoju_lawson) + is KonbiniBrand.MiniStop -> stringResource(Res.string.komoju_ministop) + is KonbiniBrand.SeicoMart -> stringResource(Res.string.komoju_seicomart) + is KonbiniBrand.SevenEleven -> stringResource(Res.string.komoju__7_eleven) } private val KonbiniBrand.displayIcon get() = when (this) { - is KonbiniBrand.DailyYamazaki -> R.drawable.komoju_ic_daily_yamazaki - is KonbiniBrand.FamilyMart -> R.drawable.komoju_ic_family_mart - is KonbiniBrand.Lawson -> R.drawable.komoju_ic_lawson - is KonbiniBrand.MiniStop -> R.drawable.komoju_ic_ministop - is KonbiniBrand.SeicoMart -> R.drawable.komoju_ic_seico_mart - is KonbiniBrand.SevenEleven -> R.drawable.komoju_ic_seven_eleven + is KonbiniBrand.DailyYamazaki -> Res.drawable.komoju_ic_daily_yamazaki + is KonbiniBrand.FamilyMart -> Res.drawable.komoju_ic_family_mart + is KonbiniBrand.Lawson -> Res.drawable.komoju_ic_lawson + is KonbiniBrand.MiniStop -> Res.drawable.komoju_ic_ministop + is KonbiniBrand.SeicoMart -> Res.drawable.komoju_ic_seico_mart + is KonbiniBrand.SevenEleven -> Res.drawable.komoju_ic_seven_eleven } @Composable diff --git a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/KonbiniForm.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/KonbiniForm.kt similarity index 73% rename from android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/KonbiniForm.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/KonbiniForm.kt index a380977..4809f60 100644 --- a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/KonbiniForm.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/KonbiniForm.kt @@ -1,4 +1,4 @@ -package com.komoju.android.sdk.ui.screens.payment.composables +package com.komoju.mobile.sdk.ui.screens.payment.composables import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -13,22 +13,26 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.input.KeyboardType -import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import com.komoju.android.sdk.R -import com.komoju.android.sdk.types.Currency -import com.komoju.android.sdk.ui.composables.PrimaryButton -import com.komoju.android.sdk.ui.screens.payment.CommonDisplayData -import com.komoju.android.sdk.ui.screens.payment.KonbiniDisplayData -import com.komoju.android.sdk.ui.theme.KomojuMobileSdkTheme -import com.komoju.android.sdk.ui.theme.Red600 -import com.komoju.android.sdk.utils.AmountUtils import com.komoju.mobile.sdk.entities.PaymentMethod import com.komoju.mobile.sdk.entities.PaymentMethod.Konbini.KonbiniBrand +import com.komoju.mobile.sdk.shared.generated.resources.Res +import com.komoju.mobile.sdk.shared.generated.resources.komoju_email +import com.komoju.mobile.sdk.shared.generated.resources.komoju_enter_your_email_address +import com.komoju.mobile.sdk.shared.generated.resources.komoju_full_name_on_receipt +import com.komoju.mobile.sdk.shared.generated.resources.komoju_name_shown_on_receipt +import com.komoju.mobile.sdk.shared.generated.resources.komoju_pay +import com.komoju.mobile.sdk.ui.composables.PrimaryButton +import com.komoju.mobile.sdk.ui.screens.payment.CommonDisplayData +import com.komoju.mobile.sdk.ui.screens.payment.KonbiniDisplayData +import com.komoju.mobile.sdk.ui.theme.KomojuMobileSdkTheme +import com.komoju.mobile.sdk.ui.theme.Red600 +import com.komoju.mobile.sdk.utils.AmountUtils +import org.jetbrains.compose.resources.stringResource +import org.jetbrains.compose.ui.tooling.preview.Preview @Composable internal fun KonbiniForm( @@ -41,14 +45,14 @@ internal fun KonbiniForm( ) { val displayPayableAmount by remember { derivedStateOf { - AmountUtils.formatToDecimal(Currency.parse(konbini.currency), konbini.amount) + AmountUtils.formatToDecimal(konbini.currency, konbini.amount) } } Column { TextField( konbiniDisplayData.receiptName, - title = stringResource(R.string.komoju_name_shown_on_receipt), - placeholder = stringResource(R.string.komoju_full_name_on_receipt), + title = stringResource(Res.string.komoju_name_shown_on_receipt), + placeholder = stringResource(Res.string.komoju_full_name_on_receipt), error = konbiniDisplayData.receiptNameErrorStringResource?.let { stringResource(it) }, onValueChange = { onKonbiniDisplayDataChange(konbiniDisplayData.copy(receiptName = it)) @@ -56,8 +60,8 @@ internal fun KonbiniForm( ) TextField( commonDisplayData.email, - title = stringResource(R.string.komoju_email), - placeholder = stringResource(R.string.komoju_enter_your_email_address), + title = stringResource(Res.string.komoju_email), + placeholder = stringResource(Res.string.komoju_enter_your_email_address), error = konbiniDisplayData.receiptEmailErrorStringResource?.let { stringResource(it) }, onValueChange = { onCommonDisplayDataChange(commonDisplayData.copy(email = it)) @@ -83,14 +87,14 @@ internal fun KonbiniForm( modifier = Modifier .padding(16.dp) .fillMaxWidth(), - text = stringResource(R.string.komoju_pay, displayPayableAmount), + text = stringResource(Res.string.komoju_pay, displayPayableAmount), onClick = onPayButtonClicked, ) } } @Composable -@Preview(showBackground = true) +@Preview private fun KonbiniFormPreview() { val konbini = PaymentMethod.Konbini( hashedGateway = "", diff --git a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/NetCashForm.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/NetCashForm.kt similarity index 61% rename from android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/NetCashForm.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/NetCashForm.kt index f005f57..442adc3 100644 --- a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/NetCashForm.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/NetCashForm.kt @@ -1,4 +1,4 @@ -package com.komoju.android.sdk.ui.screens.payment.composables +package com.komoju.mobile.sdk.ui.screens.payment.composables import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -10,14 +10,16 @@ import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp -import com.komoju.android.sdk.R -import com.komoju.android.sdk.types.Currency -import com.komoju.android.sdk.ui.composables.PrimaryButton -import com.komoju.android.sdk.ui.screens.payment.NetCashDisplayData -import com.komoju.android.sdk.utils.AmountUtils import com.komoju.mobile.sdk.entities.PaymentMethod +import com.komoju.mobile.sdk.shared.generated.resources.Res +import com.komoju.mobile.sdk.shared.generated.resources.komoju_net_cash_id +import com.komoju.mobile.sdk.shared.generated.resources.komoju_net_cash_information +import com.komoju.mobile.sdk.shared.generated.resources.komoju_pay +import com.komoju.mobile.sdk.ui.composables.PrimaryButton +import com.komoju.mobile.sdk.ui.screens.payment.NetCashDisplayData +import com.komoju.mobile.sdk.utils.AmountUtils +import org.jetbrains.compose.resources.stringResource @Composable internal fun NetCashForm( @@ -28,14 +30,14 @@ internal fun NetCashForm( ) { val displayPayableAmount by remember(netCash.amount) { derivedStateOf { - AmountUtils.formatToDecimal(Currency.parse(netCash.currency), netCash.amount) + AmountUtils.formatToDecimal(netCash.currency, netCash.amount) } } Column { TextField( value = netCashDisplayData.netCashId, - title = stringResource(R.string.komoju_net_cash_information), - placeholder = stringResource(R.string.komoju_net_cash_id), + title = stringResource(Res.string.komoju_net_cash_information), + placeholder = stringResource(Res.string.komoju_net_cash_id), onValueChange = { onNetCashDisplayDataChange(netCashDisplayData.copy(netCashId = it)) }, @@ -46,7 +48,7 @@ internal fun NetCashForm( modifier = Modifier .padding(16.dp) .fillMaxWidth(), - text = stringResource(R.string.komoju_pay, displayPayableAmount), + text = stringResource(Res.string.komoju_pay, displayPayableAmount), onClick = onPayButtonClicked, ) } diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/OffSitePayForm.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/OffSitePayForm.kt new file mode 100644 index 0000000..d3067cd --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/OffSitePayForm.kt @@ -0,0 +1,132 @@ +package com.komoju.mobile.sdk.ui.screens.payment.composables + +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.komoju.mobile.sdk.entities.PaymentMethod +import com.komoju.mobile.sdk.shared.generated.resources.Res +import com.komoju.mobile.sdk.shared.generated.resources.komoju_continue_to_alipay +import com.komoju.mobile.sdk.shared.generated.resources.komoju_continue_to_aupay +import com.komoju.mobile.sdk.shared.generated.resources.komoju_continue_to_linepay +import com.komoju.mobile.sdk.shared.generated.resources.komoju_continue_to_merpay +import com.komoju.mobile.sdk.shared.generated.resources.komoju_continue_to_paypay +import com.komoju.mobile.sdk.shared.generated.resources.komoju_continue_to_rakuten +import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_app_opens_info +import com.komoju.mobile.sdk.shared.generated.resources.komoju_payment_via_alipay +import com.komoju.mobile.sdk.shared.generated.resources.komoju_payment_via_au_pay +import com.komoju.mobile.sdk.shared.generated.resources.komoju_payment_via_line_pay +import com.komoju.mobile.sdk.shared.generated.resources.komoju_payment_via_mer_pay +import com.komoju.mobile.sdk.shared.generated.resources.komoju_payment_via_paypay +import com.komoju.mobile.sdk.shared.generated.resources.komoju_payment_via_rakuten_pay +import com.komoju.mobile.sdk.shared.generated.resources.komoju_webview_open_info +import com.komoju.mobile.sdk.shared.generated.resources.komoju_you_will_be_redirected_to_alipay +import com.komoju.mobile.sdk.shared.generated.resources.komoju_you_will_be_redirected_to_au_pay +import com.komoju.mobile.sdk.shared.generated.resources.komoju_you_will_be_redirected_to_line_pay +import com.komoju.mobile.sdk.shared.generated.resources.komoju_you_will_be_redirected_to_mer_pay +import com.komoju.mobile.sdk.shared.generated.resources.komoju_you_will_be_redirected_to_paypay +import com.komoju.mobile.sdk.shared.generated.resources.komoju_you_will_be_redirected_to_rakuten +import com.komoju.mobile.sdk.types.OffSitePaymentType +import com.komoju.mobile.sdk.ui.composables.PrimaryButton +import com.komoju.mobile.sdk.ui.theme.KomojuMobileSdkTheme +import org.jetbrains.compose.resources.painterResource +import org.jetbrains.compose.resources.stringResource +import org.jetbrains.compose.ui.tooling.preview.Preview + +@Composable +internal fun OffSitePayForm(paymentMethod: PaymentMethod.OffSitePayment, onPayButtonClicked: () -> Unit) { + val titleKey = remember(paymentMethod) { + when (paymentMethod.type) { + OffSitePaymentType.ALI_PAY -> Res.string.komoju_payment_via_alipay + OffSitePaymentType.AU_PAY -> Res.string.komoju_payment_via_au_pay + OffSitePaymentType.MER_PAY -> Res.string.komoju_payment_via_mer_pay + OffSitePaymentType.PAY_PAY -> Res.string.komoju_payment_via_paypay + OffSitePaymentType.RAKUTEN_PAY -> Res.string.komoju_payment_via_rakuten_pay + OffSitePaymentType.LINE_PAY -> Res.string.komoju_payment_via_line_pay + else -> null + } + } + + val messageKey = remember(paymentMethod) { + when (paymentMethod.type) { + OffSitePaymentType.ALI_PAY -> Res.string.komoju_you_will_be_redirected_to_alipay + OffSitePaymentType.AU_PAY -> Res.string.komoju_you_will_be_redirected_to_au_pay + OffSitePaymentType.MER_PAY -> Res.string.komoju_you_will_be_redirected_to_mer_pay + OffSitePaymentType.PAY_PAY -> Res.string.komoju_you_will_be_redirected_to_paypay + OffSitePaymentType.RAKUTEN_PAY -> Res.string.komoju_you_will_be_redirected_to_rakuten + OffSitePaymentType.LINE_PAY -> Res.string.komoju_you_will_be_redirected_to_line_pay + else -> null + } + } + + val paymentButtonKey = remember(paymentMethod) { + when (paymentMethod.type) { + OffSitePaymentType.ALI_PAY -> Res.string.komoju_continue_to_alipay + OffSitePaymentType.AU_PAY -> Res.string.komoju_continue_to_aupay + OffSitePaymentType.MER_PAY -> Res.string.komoju_continue_to_merpay + OffSitePaymentType.PAY_PAY -> Res.string.komoju_continue_to_paypay + OffSitePaymentType.RAKUTEN_PAY -> Res.string.komoju_continue_to_rakuten + OffSitePaymentType.LINE_PAY -> Res.string.komoju_continue_to_linepay + else -> null + } + } + + if (titleKey != null && messageKey != null && paymentButtonKey != null) { + Column(modifier = Modifier.padding(all = 16.dp)) { + Text(text = stringResource(titleKey), style = TextStyle(fontWeight = FontWeight.Bold, fontSize = 24.sp)) + Spacer(modifier = Modifier.height(12.dp)) + Text(text = stringResource(messageKey)) + Spacer(modifier = Modifier.height(24.dp)) + Row( + modifier = Modifier + .background(Color(0xFFF3F7F9), shape = RoundedCornerShape(8.dp)) + .padding(16.dp), + verticalAlignment = Alignment.CenterVertically, + ) { + Image( + painter = painterResource(Res.drawable.komoju_ic_app_opens_info), + contentDescription = "app_opens_info", + modifier = Modifier.size(32.dp), + ) + Spacer(modifier = Modifier.width(16.dp)) + Text(text = stringResource(Res.string.komoju_webview_open_info)) + } + Spacer(modifier = Modifier.height(32.dp)) + PrimaryButton(stringResource(paymentButtonKey), modifier = Modifier.fillMaxWidth(), onPayButtonClicked) + } + } +} + +@Composable +@Preview +private fun AppPayFormPreview() { + KomojuMobileSdkTheme { + OffSitePayForm( + PaymentMethod.OffSitePayment( + hashedGateway = "paypay", + exchangeRate = 1.0, + currency = "JPY", + amount = "100", + additionalFields = listOf(), + type = OffSitePaymentType.PAY_PAY, + ), + ) { } + } +} diff --git a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/PaidyForm.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PaidyForm.kt similarity index 58% rename from android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/PaidyForm.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PaidyForm.kt index 2a311a9..3e2fa78 100644 --- a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/PaidyForm.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PaidyForm.kt @@ -1,23 +1,30 @@ -package com.komoju.android.sdk.ui.screens.payment.composables +package com.komoju.mobile.sdk.ui.screens.payment.composables import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.runtime.Composable +import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.input.KeyboardType -import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import com.komoju.android.sdk.R -import com.komoju.android.sdk.ui.composables.PrimaryButton -import com.komoju.android.sdk.ui.screens.payment.PaidyDisplayData -import com.komoju.android.sdk.ui.theme.KomojuMobileSdkTheme import com.komoju.mobile.sdk.entities.PaymentMethod +import com.komoju.mobile.sdk.shared.generated.resources.Res +import com.komoju.mobile.sdk.shared.generated.resources.komoju_enter_your_name +import com.komoju.mobile.sdk.shared.generated.resources.komoju_enter_your_phone_number +import com.komoju.mobile.sdk.shared.generated.resources.komoju_full_name +import com.komoju.mobile.sdk.shared.generated.resources.komoju_pay +import com.komoju.mobile.sdk.shared.generated.resources.komoju_phone_number +import com.komoju.mobile.sdk.ui.composables.PrimaryButton +import com.komoju.mobile.sdk.ui.screens.payment.PaidyDisplayData +import com.komoju.mobile.sdk.ui.theme.KomojuMobileSdkTheme +import com.komoju.mobile.sdk.utils.AmountUtils +import org.jetbrains.compose.resources.stringResource +import org.jetbrains.compose.ui.tooling.preview.Preview @Composable internal fun PaidyForm( @@ -26,11 +33,16 @@ internal fun PaidyForm( onPaidyDisplayDataChange: (PaidyDisplayData) -> Unit, onPayButtonClicked: () -> Unit, ) { + val displayPayableAmount by remember(paidy.amount) { + derivedStateOf { + AmountUtils.formatToDecimal(paidy.currency, paidy.amount) + } + } Column { TextField( value = paidyDisplayData.fullName, - title = stringResource(R.string.komoju_full_name), - placeholder = stringResource(R.string.komoju_enter_your_name), + title = stringResource(Res.string.komoju_full_name), + placeholder = stringResource(Res.string.komoju_enter_your_name), onValueChange = { onPaidyDisplayDataChange(paidyDisplayData.copy(fullName = it)) }, @@ -38,8 +50,8 @@ internal fun PaidyForm( ) TextField( value = paidyDisplayData.phoneNumber, - title = stringResource(R.string.komoju_phone_number), - placeholder = stringResource(R.string.komoju_enter_your_phone_number), + title = stringResource(Res.string.komoju_phone_number), + placeholder = stringResource(Res.string.komoju_enter_your_phone_number), keyboardType = KeyboardType.Phone, onValueChange = { onPaidyDisplayDataChange(paidyDisplayData.copy(phoneNumber = it)) @@ -47,17 +59,17 @@ internal fun PaidyForm( error = paidyDisplayData.phoneNumberErrorStringResource?.let { stringResource(it) }, ) PrimaryButton( - stringResource(R.string.komoju_continue_to_paidy), modifier = Modifier - .fillMaxWidth() - .padding(all = 16.dp), - onPayButtonClicked, + .padding(16.dp) + .fillMaxWidth(), + text = stringResource(Res.string.komoju_pay, displayPayableAmount), + onClick = onPayButtonClicked, ) } } @Composable -@Preview(showBackground = true) +@Preview private fun PaidyFormPreview() { val paidy = PaymentMethod.Paidy( hashedGateway = "hashedGateway", diff --git a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/PayEasyForm.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PayEasyForm.kt similarity index 68% rename from android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/PayEasyForm.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PayEasyForm.kt index e3ec888..f406b48 100644 --- a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/PayEasyForm.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PayEasyForm.kt @@ -1,4 +1,4 @@ -package com.komoju.android.sdk.ui.screens.payment.composables +package com.komoju.mobile.sdk.ui.screens.payment.composables import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -9,18 +9,25 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.unit.dp -import com.komoju.android.sdk.R -import com.komoju.android.sdk.types.Currency -import com.komoju.android.sdk.ui.composables.PrimaryButton -import com.komoju.android.sdk.ui.screens.payment.CommonDisplayData -import com.komoju.android.sdk.utils.AmountUtils import com.komoju.mobile.sdk.entities.PaymentMethod +import com.komoju.mobile.sdk.shared.generated.resources.Res +import com.komoju.mobile.sdk.shared.generated.resources.komoju_email +import com.komoju.mobile.sdk.shared.generated.resources.komoju_enter_your_email_address +import com.komoju.mobile.sdk.shared.generated.resources.komoju_enter_your_phone_number +import com.komoju.mobile.sdk.shared.generated.resources.komoju_first_name +import com.komoju.mobile.sdk.shared.generated.resources.komoju_first_name_phonetic +import com.komoju.mobile.sdk.shared.generated.resources.komoju_last_name +import com.komoju.mobile.sdk.shared.generated.resources.komoju_last_name_phonetic +import com.komoju.mobile.sdk.shared.generated.resources.komoju_pay +import com.komoju.mobile.sdk.shared.generated.resources.komoju_phone_number +import com.komoju.mobile.sdk.ui.composables.PrimaryButton +import com.komoju.mobile.sdk.ui.screens.payment.CommonDisplayData +import com.komoju.mobile.sdk.utils.AmountUtils +import org.jetbrains.compose.resources.stringResource @Composable internal fun PayEasyForm( @@ -31,7 +38,7 @@ internal fun PayEasyForm( ) { val displayPayableAmount by remember(payEasy.amount) { derivedStateOf { - AmountUtils.formatToDecimal(Currency.parse(payEasy.currency), payEasy.amount) + AmountUtils.formatToDecimal(payEasy.currency, payEasy.amount) } } Column { @@ -40,8 +47,8 @@ internal fun PayEasyForm( .fillMaxWidth() .padding(horizontal = 16.dp), value = commonDisplayData.lastName, - title = stringResource(R.string.komoju_last_name), - placeholder = stringResource(R.string.komoju_last_name), + title = stringResource(Res.string.komoju_last_name), + placeholder = stringResource(Res.string.komoju_last_name), onValueChange = { onCommonDisplayDataChange(commonDisplayData.copy(lastName = it)) }, @@ -55,8 +62,8 @@ internal fun PayEasyForm( .fillMaxWidth() .padding(horizontal = 16.dp), value = commonDisplayData.firstName, - title = stringResource(R.string.komoju_first_name), - placeholder = stringResource(R.string.komoju_first_name), + title = stringResource(Res.string.komoju_first_name), + placeholder = stringResource(Res.string.komoju_first_name), onValueChange = { onCommonDisplayDataChange(commonDisplayData.copy(firstName = it)) }, @@ -70,8 +77,8 @@ internal fun PayEasyForm( .fillMaxWidth() .padding(horizontal = 16.dp), value = commonDisplayData.lastNamePhonetic, - title = stringResource(R.string.komoju_last_name_phonetic), - placeholder = stringResource(R.string.komoju_last_name_phonetic), + title = stringResource(Res.string.komoju_last_name_phonetic), + placeholder = stringResource(Res.string.komoju_last_name_phonetic), onValueChange = { onCommonDisplayDataChange(commonDisplayData.copy(lastNamePhonetic = it)) }, @@ -86,8 +93,8 @@ internal fun PayEasyForm( .fillMaxWidth() .padding(horizontal = 16.dp), value = commonDisplayData.firstNamePhonetic, - title = stringResource(R.string.komoju_first_name_phonetic), - placeholder = stringResource(R.string.komoju_first_name_phonetic), + title = stringResource(Res.string.komoju_first_name_phonetic), + placeholder = stringResource(Res.string.komoju_first_name_phonetic), onValueChange = { onCommonDisplayDataChange(commonDisplayData.copy(firstNamePhonetic = it)) }, @@ -102,8 +109,8 @@ internal fun PayEasyForm( .fillMaxWidth() .padding(horizontal = 16.dp), value = commonDisplayData.email, - title = stringResource(R.string.komoju_email), - placeholder = stringResource(R.string.komoju_enter_your_email_address), + title = stringResource(Res.string.komoju_email), + placeholder = stringResource(Res.string.komoju_enter_your_email_address), onValueChange = { onCommonDisplayDataChange(commonDisplayData.copy(email = it)) }, @@ -117,8 +124,8 @@ internal fun PayEasyForm( .fillMaxWidth() .padding(horizontal = 16.dp), value = commonDisplayData.phoneNumber, - title = stringResource(R.string.komoju_phone_number), - placeholder = stringResource(R.string.komoju_enter_your_phone_number), + title = stringResource(Res.string.komoju_phone_number), + placeholder = stringResource(Res.string.komoju_enter_your_phone_number), onValueChange = { onCommonDisplayDataChange(commonDisplayData.copy(phoneNumber = it)) }, @@ -132,7 +139,7 @@ internal fun PayEasyForm( modifier = Modifier .padding(16.dp) .fillMaxWidth(), - text = stringResource(R.string.komoju_pay, displayPayableAmount), + text = stringResource(Res.string.komoju_pay, displayPayableAmount), onClick = onPayButtonClicked, ) } diff --git a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/PaymentMethodForm.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PaymentMethodForm.kt similarity index 88% rename from android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/PaymentMethodForm.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PaymentMethodForm.kt index 5dfea37..18e81c4 100644 --- a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/PaymentMethodForm.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PaymentMethodForm.kt @@ -1,14 +1,14 @@ -package com.komoju.android.sdk.ui.screens.payment.composables +package com.komoju.mobile.sdk.ui.screens.payment.composables import androidx.compose.runtime.Composable -import com.komoju.android.sdk.ui.screens.payment.BitCashDisplayData -import com.komoju.android.sdk.ui.screens.payment.CommonDisplayData -import com.komoju.android.sdk.ui.screens.payment.CreditCardDisplayData -import com.komoju.android.sdk.ui.screens.payment.KonbiniDisplayData -import com.komoju.android.sdk.ui.screens.payment.NetCashDisplayData -import com.komoju.android.sdk.ui.screens.payment.PaidyDisplayData -import com.komoju.android.sdk.ui.screens.payment.WebMoneyDisplayData import com.komoju.mobile.sdk.entities.PaymentMethod +import com.komoju.mobile.sdk.ui.screens.payment.BitCashDisplayData +import com.komoju.mobile.sdk.ui.screens.payment.CommonDisplayData +import com.komoju.mobile.sdk.ui.screens.payment.CreditCardDisplayData +import com.komoju.mobile.sdk.ui.screens.payment.KonbiniDisplayData +import com.komoju.mobile.sdk.ui.screens.payment.NetCashDisplayData +import com.komoju.mobile.sdk.ui.screens.payment.PaidyDisplayData +import com.komoju.mobile.sdk.ui.screens.payment.WebMoneyDisplayData @Composable internal fun PaymentMethodForm( diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PaymentMethodsRow.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PaymentMethodsRow.kt new file mode 100644 index 0000000..14fb1fb --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PaymentMethodsRow.kt @@ -0,0 +1,179 @@ +package com.komoju.mobile.sdk.ui.screens.payment.composables + +import androidx.compose.foundation.Image +import androidx.compose.foundation.border +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.defaultMinSize +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyRow +import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.komoju.mobile.sdk.entities.PaymentMethod +import com.komoju.mobile.sdk.shared.generated.resources.Res +import com.komoju.mobile.sdk.shared.generated.resources.komoju_alipay +import com.komoju.mobile.sdk.shared.generated.resources.komoju_aupay +import com.komoju.mobile.sdk.shared.generated.resources.komoju_bank_transfer +import com.komoju.mobile.sdk.shared.generated.resources.komoju_bitcash +import com.komoju.mobile.sdk.shared.generated.resources.komoju_credit_card +import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_alipay +import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_au_pay +import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_bank_transfer +import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_bitcash +import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_credit_card +import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_konbini +import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_linepay +import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_merpay +import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_net_cash +import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_paidy +import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_pay_easy +import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_paypay +import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_rakuten_pay +import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_web_money +import com.komoju.mobile.sdk.shared.generated.resources.komoju_konbini +import com.komoju.mobile.sdk.shared.generated.resources.komoju_line_pay +import com.komoju.mobile.sdk.shared.generated.resources.komoju_merpay +import com.komoju.mobile.sdk.shared.generated.resources.komoju_netcash +import com.komoju.mobile.sdk.shared.generated.resources.komoju_other +import com.komoju.mobile.sdk.shared.generated.resources.komoju_paidy +import com.komoju.mobile.sdk.shared.generated.resources.komoju_payeasy +import com.komoju.mobile.sdk.shared.generated.resources.komoju_paypay +import com.komoju.mobile.sdk.shared.generated.resources.komoju_rakuten_pay +import com.komoju.mobile.sdk.shared.generated.resources.komoju_unknown +import com.komoju.mobile.sdk.shared.generated.resources.komoju_webmoney +import com.komoju.mobile.sdk.types.OffSitePaymentType +import com.komoju.mobile.sdk.ui.theme.Gray200 +import com.komoju.mobile.sdk.ui.theme.KomojuDarkGreen +import org.jetbrains.compose.resources.painterResource +import org.jetbrains.compose.resources.stringResource +import org.jetbrains.compose.ui.tooling.preview.Preview + +@Composable +internal fun PaymentMethodsRow( + paymentMethods: List, + selectedPaymentMethod: PaymentMethod?, + onSelected: (PaymentMethod) -> Unit, +) { + LazyRow(contentPadding = PaddingValues(horizontal = 8.dp)) { + items(paymentMethods) { paymentMethod -> + PaymentMethodComposable( + paymentMethod, + paymentMethod == selectedPaymentMethod, + onSelected = { + onSelected(paymentMethod) + }, + ) + } + } +} + +@Composable +private fun PaymentMethodComposable(paymentMethod: PaymentMethod, isSelected: Boolean, onSelected: () -> Unit) { + Column( + modifier = Modifier + .defaultMinSize(minWidth = 120.dp) + .padding(4.dp) + .clip(RoundedCornerShape(8.dp)) + .border(1.dp, if (isSelected) KomojuDarkGreen else Gray200, RoundedCornerShape(8.dp)) + .clickable(onClick = onSelected) + .padding(start = 12.dp, end = 12.dp, top = 12.dp, bottom = 8.dp), + ) { + Image( + painter = painterResource(paymentMethod.displayIcon), + contentDescription = "${paymentMethod.displayName} icon", + modifier = Modifier.height(32.dp), + ) + Spacer(modifier = Modifier.height(4.dp)) + Text(paymentMethod.displayName, color = Color.Black, fontWeight = FontWeight.SemiBold, fontSize = 14.sp) + } +} + +private val PaymentMethod.displayName + @Composable + get() = when (this) { + is PaymentMethod.BankTransfer -> stringResource(Res.string.komoju_bank_transfer) + is PaymentMethod.BitCash -> stringResource(Res.string.komoju_bitcash) + is PaymentMethod.CreditCard -> stringResource(Res.string.komoju_credit_card) + is PaymentMethod.Konbini -> stringResource(Res.string.komoju_konbini) + is PaymentMethod.NetCash -> stringResource(Res.string.komoju_netcash) + is PaymentMethod.OffSitePayment -> when (type) { + OffSitePaymentType.AU_PAY -> stringResource(Res.string.komoju_aupay) + OffSitePaymentType.ALI_PAY -> stringResource(Res.string.komoju_alipay) + OffSitePaymentType.MER_PAY -> stringResource(Res.string.komoju_merpay) + OffSitePaymentType.PAY_PAY -> stringResource(Res.string.komoju_paypay) + OffSitePaymentType.RAKUTEN_PAY -> stringResource(Res.string.komoju_rakuten_pay) + OffSitePaymentType.LINE_PAY -> stringResource(Res.string.komoju_line_pay) + OffSitePaymentType.UNKNOWN -> stringResource(Res.string.komoju_unknown) + } + is PaymentMethod.Other -> stringResource(Res.string.komoju_other) + is PaymentMethod.Paidy -> stringResource(Res.string.komoju_paidy) + is PaymentMethod.PayEasy -> stringResource(Res.string.komoju_payeasy) + is PaymentMethod.WebMoney -> stringResource(Res.string.komoju_webmoney) + } + +private val PaymentMethod.displayIcon + get() = when (this) { + is PaymentMethod.OffSitePayment -> when (type) { + OffSitePaymentType.ALI_PAY -> Res.drawable.komoju_ic_alipay + OffSitePaymentType.AU_PAY -> Res.drawable.komoju_ic_au_pay + OffSitePaymentType.MER_PAY -> Res.drawable.komoju_ic_merpay + OffSitePaymentType.PAY_PAY -> Res.drawable.komoju_ic_paypay + OffSitePaymentType.RAKUTEN_PAY -> Res.drawable.komoju_ic_rakuten_pay + OffSitePaymentType.LINE_PAY -> Res.drawable.komoju_ic_linepay + OffSitePaymentType.UNKNOWN -> Res.drawable.komoju_ic_credit_card + } + + is PaymentMethod.BankTransfer -> Res.drawable.komoju_ic_bank_transfer + is PaymentMethod.BitCash -> Res.drawable.komoju_ic_bitcash + is PaymentMethod.CreditCard -> Res.drawable.komoju_ic_credit_card + is PaymentMethod.Konbini -> Res.drawable.komoju_ic_konbini + is PaymentMethod.NetCash -> Res.drawable.komoju_ic_net_cash + is PaymentMethod.Paidy -> Res.drawable.komoju_ic_paidy + is PaymentMethod.PayEasy -> Res.drawable.komoju_ic_pay_easy + is PaymentMethod.WebMoney -> Res.drawable.komoju_ic_web_money + is PaymentMethod.Other -> Res.drawable.komoju_ic_credit_card + } + +@Composable +@Preview +private fun PaymentMethodComposablePreview() { + val paymentMethods = listOf( + PaymentMethod.CreditCard( + hashedGateway = "", + exchangeRate = 0.0, + currency = "", + amount = "0", + additionalFields = listOf(), + brands = listOf(), + ), + PaymentMethod.Konbini( + hashedGateway = "", + exchangeRate = 0.0, + currency = "", + amount = "0", + additionalFields = listOf(), + customerFee = 0, + brands = listOf(), + ), + PaymentMethod.OffSitePayment( + hashedGateway = "", + exchangeRate = 0.0, + currency = "", + amount = "0", + additionalFields = listOf(), + type = OffSitePaymentType.PAY_PAY, + ), + ) + PaymentMethodsRow(paymentMethods, paymentMethods.first()) {} +} diff --git a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/PaymentSheetHandle.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PaymentSheetHandle.kt similarity index 80% rename from android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/PaymentSheetHandle.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PaymentSheetHandle.kt index 73a1334..71e88e6 100644 --- a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/PaymentSheetHandle.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PaymentSheetHandle.kt @@ -1,17 +1,14 @@ -package com.komoju.android.sdk.ui.screens.payment.composables +package com.komoju.mobile.sdk.ui.screens.payment.composables import androidx.compose.foundation.Image import androidx.compose.foundation.clickable -import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.rounded.Close import androidx.compose.material3.Text -import androidx.compose.material3.ripple import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color @@ -36,8 +33,6 @@ internal fun PaymentSheetHandle(title: String, onCloseClicked: () -> Unit) { contentDescription = "Close Payment Sheet", modifier = Modifier.align(Alignment.CenterEnd) .clickable( - indication = ripple(bounded = true, radius = 24.dp), - interactionSource = remember { MutableInteractionSource() }, onClick = onCloseClicked, ) .padding(16.dp), diff --git a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/TextField.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/TextField.kt similarity index 89% rename from android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/TextField.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/TextField.kt index 68e01cd..fc9ee79 100644 --- a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/TextField.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/TextField.kt @@ -1,4 +1,4 @@ -package com.komoju.android.sdk.ui.screens.payment.composables +package com.komoju.mobile.sdk.ui.screens.payment.composables import androidx.compose.foundation.border import androidx.compose.foundation.layout.Box @@ -17,9 +17,9 @@ import androidx.compose.ui.text.input.KeyboardCapitalization import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import com.komoju.android.sdk.ui.theme.Gray200 -import com.komoju.android.sdk.ui.theme.Gray500 -import com.komoju.android.sdk.ui.theme.Red600 +import com.komoju.mobile.sdk.ui.theme.Gray200 +import com.komoju.mobile.sdk.ui.theme.Gray500 +import com.komoju.mobile.sdk.ui.theme.Red600 @Composable internal fun TextField( @@ -28,8 +28,8 @@ internal fun TextField( placeholder: String, onValueChange: (String) -> Unit, error: String? = null, - keyboardType: KeyboardType = KeyboardType.Unspecified, - capitalization: KeyboardCapitalization = KeyboardCapitalization.Unspecified, + keyboardType: KeyboardType = KeyboardType.Text, + capitalization: KeyboardCapitalization = KeyboardCapitalization.None, ) { Column { Text( diff --git a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/WebMoneyForm.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/WebMoneyForm.kt similarity index 61% rename from android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/WebMoneyForm.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/WebMoneyForm.kt index 2ad256b..fd3c44b 100644 --- a/android/src/main/java/com/komoju/android/sdk/ui/screens/payment/composables/WebMoneyForm.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/WebMoneyForm.kt @@ -1,4 +1,4 @@ -package com.komoju.android.sdk.ui.screens.payment.composables +package com.komoju.mobile.sdk.ui.screens.payment.composables import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -10,14 +10,16 @@ import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp -import com.komoju.android.sdk.R -import com.komoju.android.sdk.types.Currency -import com.komoju.android.sdk.ui.composables.PrimaryButton -import com.komoju.android.sdk.ui.screens.payment.WebMoneyDisplayData -import com.komoju.android.sdk.utils.AmountUtils import com.komoju.mobile.sdk.entities.PaymentMethod +import com.komoju.mobile.sdk.shared.generated.resources.Res +import com.komoju.mobile.sdk.shared.generated.resources.komoju_pay +import com.komoju.mobile.sdk.shared.generated.resources.komoju_prepaid_number +import com.komoju.mobile.sdk.shared.generated.resources.komoju_webmoney_information +import com.komoju.mobile.sdk.ui.composables.PrimaryButton +import com.komoju.mobile.sdk.ui.screens.payment.WebMoneyDisplayData +import com.komoju.mobile.sdk.utils.AmountUtils +import org.jetbrains.compose.resources.stringResource @Composable internal fun WebMoneyForm( @@ -28,14 +30,14 @@ internal fun WebMoneyForm( ) { val displayPayableAmount by remember(webMoney.amount) { derivedStateOf { - AmountUtils.formatToDecimal(Currency.parse(webMoney.currency), webMoney.amount) + AmountUtils.formatToDecimal(webMoney.currency, webMoney.amount) } } Column { TextField( value = webMoneyDisplayData.prepaidNumber, - title = stringResource(R.string.komoju_webmoney_information), - placeholder = stringResource(R.string.komoju_prepaid_number), + title = stringResource(Res.string.komoju_webmoney_information), + placeholder = stringResource(Res.string.komoju_prepaid_number), onValueChange = { onWebMoneyDisplayDataChange(webMoneyDisplayData.copy(prepaidNumber = it)) }, @@ -46,7 +48,7 @@ internal fun WebMoneyForm( modifier = Modifier .padding(16.dp) .fillMaxWidth(), - text = stringResource(R.string.komoju_pay, displayPayableAmount), + text = stringResource(Res.string.komoju_pay, displayPayableAmount), onClick = onPayButtonClicked, ) } diff --git a/android/src/main/java/com/komoju/android/sdk/ui/screens/success/PaymentSuccessScreen.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/success/PaymentSuccessScreen.kt similarity index 66% rename from android/src/main/java/com/komoju/android/sdk/ui/screens/success/PaymentSuccessScreen.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/success/PaymentSuccessScreen.kt index 66aaf06..13ad771 100644 --- a/android/src/main/java/com/komoju/android/sdk/ui/screens/success/PaymentSuccessScreen.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/success/PaymentSuccessScreen.kt @@ -1,4 +1,4 @@ -package com.komoju.android.sdk.ui.screens.success +package com.komoju.mobile.sdk.ui.screens.success import androidx.compose.foundation.Image import androidx.compose.foundation.clickable @@ -16,10 +16,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.lifecycle.compose.collectAsStateWithLifecycle @@ -27,13 +24,17 @@ import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.screen.Screen import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow -import com.komoju.android.sdk.KomojuSDK -import com.komoju.android.sdk.R -import com.komoju.android.sdk.navigation.paymentResultScreenModel -import com.komoju.android.sdk.ui.composables.PrimaryButton -import com.komoju.android.sdk.ui.screens.RouterEffect -import com.komoju.android.sdk.ui.theme.KomojuMobileSdkTheme -import com.komoju.android.sdk.utils.PreviewScreen +import com.komoju.mobile.sdk.KomojuMobileSDKPaymentResult +import com.komoju.mobile.sdk.navigation.paymentResultScreenModel +import com.komoju.mobile.sdk.shared.generated.resources.Res +import com.komoju.mobile.sdk.shared.generated.resources.komoju_back_to_store +import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_payment_status_completed +import com.komoju.mobile.sdk.shared.generated.resources.komoju_payment_success +import com.komoju.mobile.sdk.shared.generated.resources.komoju_thank_you_for_your_order +import com.komoju.mobile.sdk.ui.composables.PrimaryButton +import com.komoju.mobile.sdk.ui.screens.RouterEffect +import org.jetbrains.compose.resources.painterResource +import org.jetbrains.compose.resources.stringResource internal class PaymentSuccessScreen : Screen { @Composable @@ -49,7 +50,7 @@ private fun Screen.PaymentSuccessScreenContent() { val navigator = LocalNavigator.currentOrThrow val resultScreenModel = navigator.paymentResultScreenModel() LaunchedEffect(Unit) { - resultScreenModel.setResult(KomojuSDK.PaymentResult(isSuccessFul = true)) + resultScreenModel.setResult(KomojuMobileSDKPaymentResult(isSuccessFul = true)) } Column(modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally) { Box(modifier = Modifier.fillMaxWidth(), contentAlignment = Alignment.CenterEnd) { @@ -63,27 +64,19 @@ private fun Screen.PaymentSuccessScreenContent() { }, ) } - Image(painterResource(R.drawable.komoju_ic_payment_status_completed), "status_icon") + Image(painterResource(Res.drawable.komoju_ic_payment_status_completed), "status_icon") Spacer(Modifier.height(16.dp)) - Text(stringResource(R.string.komoju_payment_success), fontSize = 24.sp, fontWeight = FontWeight.Bold) + Text(stringResource(Res.string.komoju_payment_success), fontSize = 24.sp, fontWeight = FontWeight.Bold) Spacer(Modifier.height(16.dp)) - Text(stringResource(R.string.komoju_thank_you_for_your_order)) + Text(stringResource(Res.string.komoju_thank_you_for_your_order)) Spacer(Modifier.weight(1f)) PrimaryButton( modifier = Modifier .fillMaxWidth() .padding(16.dp), - text = stringResource(R.string.komoju_back_to_store), + text = stringResource(Res.string.komoju_back_to_store), ) { screenModel.onBackToStoreButtonClicked() } } } - -@Composable -@Preview -private fun PaymentSuccessScreenContentPreview() { - KomojuMobileSdkTheme { - PreviewScreen.PaymentSuccessScreenContent() - } -} diff --git a/android/src/main/java/com/komoju/android/sdk/ui/screens/success/PaymentSuccessScreenModel.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/success/PaymentSuccessScreenModel.kt similarity index 66% rename from android/src/main/java/com/komoju/android/sdk/ui/screens/success/PaymentSuccessScreenModel.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/success/PaymentSuccessScreenModel.kt index 61c2f88..54fa28c 100644 --- a/android/src/main/java/com/komoju/android/sdk/ui/screens/success/PaymentSuccessScreenModel.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/success/PaymentSuccessScreenModel.kt @@ -1,6 +1,6 @@ -package com.komoju.android.sdk.ui.screens.success +package com.komoju.mobile.sdk.ui.screens.success -import com.komoju.android.sdk.navigation.RouterStateScreenModel +import com.komoju.mobile.sdk.navigation.RouterStateScreenModel internal class PaymentSuccessScreenModel : RouterStateScreenModel(Unit) { fun onCloseButtonClicked() { diff --git a/android/src/main/java/com/komoju/android/sdk/ui/screens/verify/ProcessPaymentScreen.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/verify/ProcessPaymentScreen.kt similarity index 80% rename from android/src/main/java/com/komoju/android/sdk/ui/screens/verify/ProcessPaymentScreen.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/verify/ProcessPaymentScreen.kt index 8df74ed..5bfa718 100644 --- a/android/src/main/java/com/komoju/android/sdk/ui/screens/verify/ProcessPaymentScreen.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/verify/ProcessPaymentScreen.kt @@ -1,18 +1,17 @@ -package com.komoju.android.sdk.ui.screens.verify +package com.komoju.mobile.sdk.ui.screens.verify import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.lifecycle.compose.collectAsStateWithLifecycle import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.screen.Screen -import com.komoju.android.sdk.ui.composables.ThemedCircularProgressIndicator -import com.komoju.android.sdk.ui.screens.KomojuPaymentRoute -import com.komoju.android.sdk.ui.screens.RouterEffect +import com.komoju.mobile.sdk.ui.composables.ThemedCircularProgressIndicator +import com.komoju.mobile.sdk.ui.screens.KomojuPaymentRoute +import com.komoju.mobile.sdk.ui.screens.RouterEffect internal class ProcessPaymentScreen(private val route: KomojuPaymentRoute.ProcessPayment) : Screen { @Composable diff --git a/android/src/main/java/com/komoju/android/sdk/ui/screens/verify/VerifyPaymentScreenModel.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/verify/VerifyPaymentScreenModel.kt similarity index 85% rename from android/src/main/java/com/komoju/android/sdk/ui/screens/verify/VerifyPaymentScreenModel.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/verify/VerifyPaymentScreenModel.kt index 46ff9ad..a502e78 100644 --- a/android/src/main/java/com/komoju/android/sdk/ui/screens/verify/VerifyPaymentScreenModel.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/verify/VerifyPaymentScreenModel.kt @@ -1,19 +1,20 @@ -package com.komoju.android.sdk.ui.screens.verify +package com.komoju.mobile.sdk.ui.screens.verify import cafe.adriel.voyager.core.model.screenModelScope -import com.komoju.android.sdk.KomojuSDK -import com.komoju.android.sdk.navigation.RouterStateScreenModel -import com.komoju.android.sdk.ui.screens.KomojuPaymentRoute -import com.komoju.android.sdk.ui.screens.Router -import com.komoju.android.sdk.ui.screens.failed.Reason +import com.komoju.mobile.sdk.KomojuMobileSDKConfiguration +import com.komoju.mobile.sdk.KomojuMobileSDKPaymentResult import com.komoju.mobile.sdk.entities.PaymentStatus import com.komoju.mobile.sdk.entities.PaymentStatus.Companion.isSuccessful +import com.komoju.mobile.sdk.navigation.RouterStateScreenModel import com.komoju.mobile.sdk.remote.apis.KomojuRemoteApi +import com.komoju.mobile.sdk.ui.screens.KomojuPaymentRoute +import com.komoju.mobile.sdk.ui.screens.Router +import com.komoju.mobile.sdk.ui.screens.failed.Reason import kotlinx.coroutines.launch -internal class VerifyPaymentScreenModel(private val config: KomojuSDK.Configuration) : RouterStateScreenModel(Unit) { +internal class VerifyPaymentScreenModel(private val config: KomojuMobileSDKConfiguration) : RouterStateScreenModel(Unit) { - private val komojuApi: KomojuRemoteApi = KomojuRemoteApi.create(config.publishableKey) + private val komojuApi: KomojuRemoteApi = KomojuRemoteApi.create(config) fun process(type: KomojuPaymentRoute.ProcessPayment.ProcessType) { screenModelScope.launch { @@ -29,7 +30,7 @@ internal class VerifyPaymentScreenModel(private val config: KomojuSDK.Configurat komojuApi.sessions.verifyPaymentBySessionID(config.sessionId.orEmpty()).onSuccess { paymentDetails -> mutableRouter.value = when { config.inlinedProcessing -> Router.SetPaymentResultAndPop( - KomojuSDK.PaymentResult( + KomojuMobileSDKPaymentResult( isSuccessFul = paymentDetails.status.isSuccessful(), ), ) diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/webview/WebViewRequestInterceptor.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/webview/WebViewRequestInterceptor.kt new file mode 100644 index 0000000..66c4614 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/webview/WebViewRequestInterceptor.kt @@ -0,0 +1,26 @@ +package com.komoju.mobile.sdk.ui.screens.webview + +import com.eygraber.uri.Uri +import com.multiplatform.webview.request.RequestInterceptor +import com.multiplatform.webview.request.WebRequest +import com.multiplatform.webview.request.WebRequestInterceptResult +import com.multiplatform.webview.web.WebViewNavigator + +internal class WebViewRequestInterceptor(private val appScheme: String, private val onDeeplinkCaptured: (String) -> Unit) : RequestInterceptor { + override fun onInterceptUrlRequest(request: WebRequest, navigator: WebViewNavigator): WebRequestInterceptResult = + request.checkAndOpen(appScheme, onDeeplinkCaptured) + + private fun WebRequest.checkAndOpen(appScheme: String, onDeeplinkCaptured: (String) -> Unit): WebRequestInterceptResult { + try { + val uri = Uri.parse(url) + if (uri.scheme == appScheme) { + onDeeplinkCaptured(url) + return WebRequestInterceptResult.Reject + } else { + error("Unsupported scheme for deeplink, load in webView Instead.") + } + } catch (_: Exception) { + return WebRequestInterceptResult.Allow + } + } +} diff --git a/android/src/main/java/com/komoju/android/sdk/ui/screens/webview/WebViewScreen.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/webview/WebViewScreen.kt similarity index 66% rename from android/src/main/java/com/komoju/android/sdk/ui/screens/webview/WebViewScreen.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/webview/WebViewScreen.kt index 514ff45..1636524 100644 --- a/android/src/main/java/com/komoju/android/sdk/ui/screens/webview/WebViewScreen.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/webview/WebViewScreen.kt @@ -1,10 +1,7 @@ -package com.komoju.android.sdk.ui.screens.webview +package com.komoju.mobile.sdk.ui.screens.webview -import androidx.activity.compose.BackHandler import androidx.compose.foundation.Image -import androidx.compose.foundation.background import androidx.compose.foundation.clickable -import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxSize @@ -17,9 +14,7 @@ import androidx.compose.material.icons.rounded.Close import androidx.compose.material3.AlertDialog import androidx.compose.material3.Icon import androidx.compose.material3.LinearProgressIndicator -import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text -import androidx.compose.material3.ripple import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -27,22 +22,28 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow -import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.lifecycle.compose.collectAsStateWithLifecycle +import cafe.adriel.voyager.core.annotation.InternalVoyagerApi import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.screen.Screen -import com.kevinnzou.web.LoadingState -import com.kevinnzou.web.WebView -import com.kevinnzou.web.rememberWebViewState -import com.komoju.android.sdk.R -import com.komoju.android.sdk.ui.screens.KomojuPaymentRoute -import com.komoju.android.sdk.ui.screens.RouterEffect -import com.komoju.android.sdk.ui.theme.LocalConfigurableTheme +import cafe.adriel.voyager.navigator.internal.BackHandler +import com.komoju.mobile.sdk.shared.generated.resources.Res +import com.komoju.mobile.sdk.shared.generated.resources.komoju_are_you_sure_you_want_to_cancel_the_payment +import com.komoju.mobile.sdk.shared.generated.resources.komoju_cancel_payment +import com.komoju.mobile.sdk.shared.generated.resources.komoju_no +import com.komoju.mobile.sdk.shared.generated.resources.komoju_yes +import com.komoju.mobile.sdk.ui.screens.KomojuPaymentRoute +import com.komoju.mobile.sdk.ui.screens.RouterEffect +import com.komoju.mobile.sdk.ui.theme.LocalConfigurableTheme +import com.komoju.mobile.sdk.ui.theme.toColor +import com.multiplatform.webview.web.LoadingState +import com.multiplatform.webview.web.WebView +import com.multiplatform.webview.web.rememberWebViewNavigator +import com.multiplatform.webview.web.rememberWebViewState +import org.jetbrains.compose.resources.stringResource internal data class WebViewScreen(val route: KomojuPaymentRoute.WebView) : Screen { @Composable @@ -51,16 +52,15 @@ internal data class WebViewScreen(val route: KomojuPaymentRoute.WebView) : Scree } } +@OptIn(InternalVoyagerApi::class) @Composable private fun Screen.WebViewScreenContent(route: KomojuPaymentRoute.WebView) { val state = rememberWebViewState(route.url) var showBackPressDialog by remember { mutableStateOf(false) } val screenModel = rememberScreenModel { WebViewScreenModel() } RouterEffect(screenModel.router.collectAsStateWithLifecycle(), screenModel::onRouteConsumed) - if (route.canComeBack.not() && showBackPressDialog.not()) { - BackHandler { - showBackPressDialog = true - } + BackHandler(enabled = route.canComeBack.not() && showBackPressDialog.not()) { + showBackPressDialog = true } Column(modifier = Modifier) { Row( @@ -74,8 +74,6 @@ private fun Screen.WebViewScreenContent(route: KomojuPaymentRoute.WebView) { contentDescription = "Back", modifier = Modifier .clickable( - indication = ripple(bounded = true, radius = 24.dp), - interactionSource = remember { MutableInteractionSource() }, onClick = { screenModel.onBackPressed() }, @@ -99,8 +97,6 @@ private fun Screen.WebViewScreenContent(route: KomojuPaymentRoute.WebView) { contentDescription = "Close Payment Sheet", modifier = Modifier .clickable( - indication = ripple(bounded = true, radius = 24.dp), - interactionSource = remember { MutableInteractionSource() }, onClick = { showBackPressDialog = true }, @@ -114,25 +110,19 @@ private fun Screen.WebViewScreenContent(route: KomojuPaymentRoute.WebView) { LinearProgressIndicator( progress = { loadingState.progress }, modifier = Modifier.fillMaxWidth(), - color = Color(LocalConfigurableTheme.current.loaderColor), + color = LocalConfigurableTheme.current.loaderColor.toColor(), ) } WebView( modifier = Modifier - .fillMaxSize() - .background(MaterialTheme.colorScheme.surface), + .fillMaxSize(), state = state, - onCreated = { nativeWebView -> - nativeWebView.clipToOutline = true - nativeWebView.setBackgroundColor(android.graphics.Color.TRANSPARENT) - nativeWebView.settings.apply { - domStorageEnabled = true - javaScriptEnabled = route.isJavaScriptEnabled - } - }, captureBackPresses = false, - chromeClient = remember { WebChromeClient() }, - client = remember { WebViewClient() }, + navigator = rememberWebViewNavigator( + requestInterceptor = WebViewRequestInterceptor(route.configuration.appScheme) { + screenModel.onNewDeeplink(route.configuration, it) + }, + ), ) if (showBackPressDialog) { AlertDialog( @@ -141,7 +131,7 @@ private fun Screen.WebViewScreenContent(route: KomojuPaymentRoute.WebView) { }, confirmButton = { Text( - text = stringResource(R.string.komoju_yes), + text = stringResource(Res.string.komoju_yes), modifier = Modifier .clickable { screenModel.onBackPressed() @@ -151,7 +141,7 @@ private fun Screen.WebViewScreenContent(route: KomojuPaymentRoute.WebView) { }, dismissButton = { Text( - text = stringResource(R.string.komoju_no), + text = stringResource(Res.string.komoju_no), modifier = Modifier .clickable { showBackPressDialog = false @@ -161,20 +151,14 @@ private fun Screen.WebViewScreenContent(route: KomojuPaymentRoute.WebView) { }, text = { Text( - text = stringResource(R.string.komoju_are_you_sure_you_want_to_cancel_the_payment), + text = stringResource(Res.string.komoju_are_you_sure_you_want_to_cancel_the_payment), modifier = Modifier.padding(8.dp), ) }, title = { - Text(text = stringResource(R.string.komoju_cancel_payment)) + Text(text = stringResource(Res.string.komoju_cancel_payment)) }, ) } } } - -@Composable -@Preview(showBackground = true, showSystemUi = true) -private fun WebViewScreenPreview() { - WebViewScreen(KomojuPaymentRoute.WebView("https://www.komoju.com/")) -} diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/webview/WebViewScreenModel.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/webview/WebViewScreenModel.kt new file mode 100644 index 0000000..625005e --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/webview/WebViewScreenModel.kt @@ -0,0 +1,32 @@ +package com.komoju.mobile.sdk.ui.screens.webview + +import com.komoju.mobile.sdk.KomojuMobileSDKConfiguration +import com.komoju.mobile.sdk.navigation.RouterStateScreenModel +import com.komoju.mobile.sdk.ui.screens.KomojuPaymentRoute +import com.komoju.mobile.sdk.ui.screens.Router +import com.komoju.mobile.sdk.utils.DeeplinkEntity + +internal class WebViewScreenModel : RouterStateScreenModel(Unit) { + + fun onBackPressed() { + mutableRouter.pop() + } + + fun onNewDeeplink(configuration: KomojuMobileSDKConfiguration, deeplink: String) { + val deeplinkEntity = DeeplinkEntity.from(deeplink) + mutableRouter.value = Router.ReplaceAll( + KomojuPaymentRoute.ProcessPayment( + configuration = configuration, + processType = when (deeplinkEntity) { + is DeeplinkEntity.Verify.BySecureToken -> KomojuPaymentRoute.ProcessPayment.ProcessType.VerifyTokenAndPay( + deeplinkEntity.secureTokenId, + amount = deeplinkEntity.amount, + currency = deeplinkEntity.currency, + ) + + DeeplinkEntity.Verify.BySessionId -> KomojuPaymentRoute.ProcessPayment.ProcessType.Session + }, + ), + ) + } +} diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/theme/ConfigurableTheme.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/theme/ConfigurableTheme.kt new file mode 100644 index 0000000..31884ff --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/theme/ConfigurableTheme.kt @@ -0,0 +1,63 @@ +package com.komoju.mobile.sdk.ui.theme + +import androidx.compose.ui.graphics.Color + +/** + * Interface representing a configurable theme with customizable UI properties. + */ +interface ConfigurableTheme { + + /** + * primary color of the SDK + * + * @return A value representing a color value annotated with [Color]. + */ + val primaryColor: Long + + /** + * Color value for the content (e.g., text or icon) inside the primary button. + * + * @return A value representing a color value annotated with [Color]. + */ + val primaryContentColor: Long + + /** + * Corner radius for the primary button in density-independent pixels (DP). + * + * @return A value representing the corner radius in DP annotated with [Int]. + */ + val primaryShapeCornerRadiusInDp: Int + + /** + * Color value for the loader/spinner. + * + * @return A value representing a color value annotated with [Color]. + */ + val loaderColor: Long + + companion object { + /** + * Provides a default implementation of the [ConfigurableTheme]. + */ + val default = DefaultConfigurableTheme() + } +} + +/** + * Data class representing the default implementation of [ConfigurableTheme]. + * This class uses default values for UI elements such as buttons and loaders. + * + * @param primaryColor The background color of the primary button. + * @param primaryContentColor The color of the content inside the primary button. + * @param primaryShapeCornerRadiusInDp The corner radius of the primary button in DP. + * @param loaderColor The color of the loader/spinner. + */ + +data class DefaultConfigurableTheme( + override val primaryColor: Long = 0xFF297FE7, // Default blue color for primary button. + override val primaryContentColor: Long = 0xFFFFFFFF, // Default white color for primary button content. + override val primaryShapeCornerRadiusInDp: Int = 8, // Default corner radius of 8 DP for primary button. + override val loaderColor: Long = 0xFF3CC239, // Default green color for loader. +) : ConfigurableTheme + +fun Long.toColor(): Color = Color(this) diff --git a/android/src/main/java/com/komoju/android/sdk/ui/theme/Theme.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/theme/Theme.kt similarity index 54% rename from android/src/main/java/com/komoju/android/sdk/ui/theme/Theme.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/theme/Theme.kt index e204735..8461b53 100644 --- a/android/src/main/java/com/komoju/android/sdk/ui/theme/Theme.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/theme/Theme.kt @@ -1,4 +1,4 @@ -package com.komoju.android.sdk.ui.theme +package com.komoju.mobile.sdk.ui.theme import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface @@ -7,7 +7,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.compositionLocalOf import androidx.compose.ui.graphics.Color -import com.komoju.android.sdk.KomojuSDK +import com.komoju.mobile.sdk.KomojuMobileSDKConfiguration internal val KomojuLightGreen = Color(0xFF3CC239) internal val KomojuDarkGreen = Color(0xFF172E44) @@ -30,16 +30,26 @@ private val LightColorScheme = lightColorScheme( ) @Composable -internal fun KomojuMobileSdkTheme(configuration: KomojuSDK.Configuration = EmptyConfiguration, content: @Composable () -> Unit) { - CompositionLocalProvider(LocalConfigurableTheme provides configuration.configurableTheme) { - Surface(color = Color.White) { - MaterialTheme( - colorScheme = LightColorScheme, - content = content, - typography = interTypography(), - ) - } +internal fun KomojuMobileSdkTheme(configuration: KomojuMobileSDKConfiguration = EmptyConfiguration, content: @Composable () -> Unit) { + Surface(color = Color.White) { + MaterialTheme( + colorScheme = LightColorScheme, + typography = interTypography(), + content = { + CompositionLocalProvider(LocalConfigurableTheme provides configuration.configurableTheme, content = content) + }, + ) } } -private val EmptyConfiguration = KomojuSDK.Configuration.Builder("", "").build() +internal val EmptyConfiguration = KomojuMobileSDKConfiguration( + language = "ja", + currency = "jpy", + publishableKey = null, + isDebugMode = false, + sessionId = null, + redirectURL = "", + appScheme = "", + configurableTheme = DefaultConfigurableTheme(), + inlinedProcessing = false, +) diff --git a/android/src/main/java/com/komoju/android/sdk/ui/theme/Typography.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/theme/Typography.kt similarity index 59% rename from android/src/main/java/com/komoju/android/sdk/ui/theme/Typography.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/theme/Typography.kt index 582825c..e86b962 100644 --- a/android/src/main/java/com/komoju/android/sdk/ui/theme/Typography.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/theme/Typography.kt @@ -1,19 +1,24 @@ -package com.komoju.android.sdk.ui.theme +package com.komoju.mobile.sdk.ui.theme import androidx.compose.material3.Typography import androidx.compose.runtime.Composable -import androidx.compose.ui.text.font.Font import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontWeight -import com.komoju.android.sdk.R +import com.komoju.mobile.sdk.shared.generated.resources.Res +import com.komoju.mobile.sdk.shared.generated.resources.komoju_font_inter_bold +import com.komoju.mobile.sdk.shared.generated.resources.komoju_font_inter_light +import com.komoju.mobile.sdk.shared.generated.resources.komoju_font_inter_medium +import com.komoju.mobile.sdk.shared.generated.resources.komoju_font_inter_regular +import com.komoju.mobile.sdk.shared.generated.resources.komoju_font_inter_semibold +import org.jetbrains.compose.resources.Font @Composable private fun interFontFamily() = FontFamily( - Font(R.font.komoju_font_inter_light, weight = FontWeight.Light), - Font(R.font.komoju_font_inter_regular, weight = FontWeight.Normal), - Font(R.font.komoju_font_inter_medium, weight = FontWeight.Medium), - Font(R.font.komoju_font_inter_semibold, weight = FontWeight.SemiBold), - Font(R.font.komoju_font_inter_bold, weight = FontWeight.Bold), + Font(Res.font.komoju_font_inter_light, weight = FontWeight.Light), + Font(Res.font.komoju_font_inter_regular, weight = FontWeight.Normal), + Font(Res.font.komoju_font_inter_medium, weight = FontWeight.Medium), + Font(Res.font.komoju_font_inter_semibold, weight = FontWeight.SemiBold), + Font(Res.font.komoju_font_inter_bold, weight = FontWeight.Bold), ) @Composable diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/utils/AmountUtils.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/utils/AmountUtils.kt new file mode 100644 index 0000000..620f5e1 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/utils/AmountUtils.kt @@ -0,0 +1,15 @@ +package com.komoju.mobile.sdk.utils + +import nl.jacobras.humanreadable.HumanReadable + +internal object AmountUtils { + fun formatToDecimal(currency: String, amount: String): String { + if (amount.isBlank()) return "" + return currency.symbol() + HumanReadable.number(amount.toInt(), decimals = 0) + } +} + +private fun String.symbol(): String = when (this.uppercase()) { + "JPY" -> "¥" + else -> "$" +} diff --git a/android/src/main/java/com/komoju/android/sdk/utils/CreditCardUtils.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/utils/CreditCardUtils.kt similarity index 98% rename from android/src/main/java/com/komoju/android/sdk/utils/CreditCardUtils.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/utils/CreditCardUtils.kt index 2ea3805..1878461 100644 --- a/android/src/main/java/com/komoju/android/sdk/utils/CreditCardUtils.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/utils/CreditCardUtils.kt @@ -1,4 +1,4 @@ -package com.komoju.android.sdk.utils +package com.komoju.mobile.sdk.utils import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.input.OffsetMapping @@ -153,7 +153,7 @@ internal object CreditCardUtils { var sum = 0 var alternate = false for (i in sanitizedCardNumber.length - 1 downTo 0) { - var digit = Character.getNumericValue(sanitizedCardNumber[i]) + var digit = sanitizedCardNumber[i].digitToInt() if (alternate) { digit *= 2 if (digit > 9) { diff --git a/android/src/main/java/com/komoju/android/sdk/utils/DeeplinkEntity.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/utils/DeeplinkEntity.kt similarity index 82% rename from android/src/main/java/com/komoju/android/sdk/utils/DeeplinkEntity.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/utils/DeeplinkEntity.kt index 19eae8a..f54ac51 100644 --- a/android/src/main/java/com/komoju/android/sdk/utils/DeeplinkEntity.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/utils/DeeplinkEntity.kt @@ -1,8 +1,8 @@ -package com.komoju.android.sdk.utils +package com.komoju.mobile.sdk.utils -import androidx.core.net.toUri +import com.eygraber.uri.Uri -internal sealed interface DeeplinkEntity { +sealed interface DeeplinkEntity { sealed interface Verify : DeeplinkEntity { data class BySecureToken(val secureTokenId: String, val amount: String, val currency: String) : Verify @@ -11,7 +11,7 @@ internal sealed interface DeeplinkEntity { companion object { fun from(rawDeeplink: String): DeeplinkEntity { - val uri = rawDeeplink.toUri() + val uri = Uri.parse(rawDeeplink) val token = uri.getQueryParameter("secure_token_id") return when { token != null -> Verify.BySecureToken( diff --git a/android/src/main/java/com/komoju/android/sdk/utils/InlinedPaymentProcessor.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/utils/InlinedPaymentProcessor.kt similarity index 94% rename from android/src/main/java/com/komoju/android/sdk/utils/InlinedPaymentProcessor.kt rename to shared/src/commonMain/kotlin/com/komoju/mobile/sdk/utils/InlinedPaymentProcessor.kt index 8043127..5c72729 100644 --- a/android/src/main/java/com/komoju/android/sdk/utils/InlinedPaymentProcessor.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/utils/InlinedPaymentProcessor.kt @@ -1,8 +1,8 @@ -package com.komoju.android.sdk.utils +package com.komoju.mobile.sdk.utils -import com.komoju.android.sdk.ui.screens.failed.Reason import com.komoju.mobile.sdk.entities.PaymentStatus import com.komoju.mobile.sdk.remote.apis.KomojuRemoteApi +import com.komoju.mobile.sdk.ui.screens.failed.Reason internal suspend fun KomojuRemoteApi.verifyTokenAndProcessPayment( sessionId: String, diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/utils/Logger.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/utils/Logger.kt new file mode 100644 index 0000000..adb8e91 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/utils/Logger.kt @@ -0,0 +1,17 @@ +package com.komoju.mobile.sdk.utils + +internal object Logger { + private var shouldPrintLogs = false + + fun setDebugMode(debugMode: Boolean) { + shouldPrintLogs = debugMode + } + + fun d(message: String?) { + if (shouldPrintLogs) println(message) + } + + fun e(t: Throwable) { + if (shouldPrintLogs) println(t) + } +} diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/utils/ModifierExt.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/utils/ModifierExt.kt new file mode 100644 index 0000000..92e392f --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/utils/ModifierExt.kt @@ -0,0 +1,5 @@ +package com.komoju.mobile.sdk.utils + +import androidx.compose.ui.Modifier + +internal expect fun Modifier.testID(id: String): Modifier diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/utils/Platform.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/utils/Platform.kt new file mode 100644 index 0000000..8baca64 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/utils/Platform.kt @@ -0,0 +1,7 @@ +package com.komoju.mobile.sdk.utils + +enum class Platform { + ANDROID, IOS +} + +expect val currentPlatform: Platform diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/utils/StringExt.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/utils/StringExt.kt new file mode 100644 index 0000000..9b97401 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/utils/StringExt.kt @@ -0,0 +1,24 @@ +package com.komoju.mobile.sdk.utils + +private val EMAIL_REGEX = "^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}$".toRegex() + +internal inline val String.Companion.empty get() = "" + +internal inline val String.isValidEmail: Boolean get() = matches(EMAIL_REGEX) + +internal inline val String.isDigitsOnly get() = all { it.isDigit() } + +// japanese detection Stuff below. +internal inline val Char.isKana get() = isHiragana || isKatakana +internal inline val String.isKanaOnly: Boolean get() = all { it.isKana } + +// Source: https://github.com/esnaultdev/wanakana-kt +private const val KATAKANA_START = 0x30a1 +private const val KATAKANA_END = 0x30fc +private const val HIRAGANA_START = 0x3041 +private const val HIRAGANA_END = 0x3096 +private const val PROLONGED_SOUND_MARK = 0x30fc +private val KATAKANA_RANGE = KATAKANA_START..KATAKANA_END +private val HIRAGANA_RANGE = HIRAGANA_START..HIRAGANA_END +private val Char.isHiragana: Boolean get() = code == PROLONGED_SOUND_MARK || code in HIRAGANA_RANGE +private val Char.isKatakana: Boolean get() = code in KATAKANA_RANGE diff --git a/shared/src/iosMain/kotlin/com/komoju/mobile/sdk/.keep b/shared/src/iosMain/kotlin/com/komoju/mobile/sdk/.keep deleted file mode 100644 index e69de29..0000000 diff --git a/shared/src/iosMain/kotlin/com/komoju/mobile/sdk/MainViewController.kt b/shared/src/iosMain/kotlin/com/komoju/mobile/sdk/MainViewController.kt new file mode 100644 index 0000000..0c4efff --- /dev/null +++ b/shared/src/iosMain/kotlin/com/komoju/mobile/sdk/MainViewController.kt @@ -0,0 +1,55 @@ +package com.komoju.mobile.sdk + +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.ExperimentalComposeApi +import androidx.compose.runtime.compositionLocalOf +import androidx.compose.ui.uikit.ComposeUIViewControllerDelegate +import androidx.compose.ui.uikit.OnFocusBehavior +import androidx.compose.ui.window.ComposeUIViewController +import com.komoju.mobile.sdk.navigation.PaymentResultScreenModel +import com.komoju.mobile.sdk.navigation.paymentResultScreenModel +import com.komoju.mobile.sdk.ui.screens.KomojuPaymentEntryPoint +import platform.UIKit.UIViewController + +internal val LocalViewController = compositionLocalOf<() -> UIViewController> { + error("LocalViewController not provided") +} + +fun MainViewController( + configuration: KomojuMobileSDKConfiguration, + onDismiss: (KomojuMobileSDKPaymentResult) -> Unit +) = extendedComposeViewController(configuration, onDismiss) + +@OptIn(ExperimentalComposeApi::class) +private fun extendedComposeViewController( + configuration: KomojuMobileSDKConfiguration, + onDismiss: (KomojuMobileSDKPaymentResult) -> Unit, +): UIViewController { + var platformResultScreenModel : PaymentResultScreenModel? = null + var localViewController: UIViewController? = null + return ComposeUIViewController( + configure = { + onFocusBehavior = OnFocusBehavior.FocusableAboveKeyboard + opaque = false + delegate = object : ComposeUIViewControllerDelegate { + override fun viewWillDisappear(animated: Boolean){ + super.viewWillDisappear(animated) + onDismiss(platformResultScreenModel?.result ?: KomojuMobileSDKPaymentResult(isSuccessFul = false)) + } + } + }, + content = { + CompositionLocalProvider(LocalViewController provides { localViewController!! }) { + KomojuPaymentEntryPoint( + configuration = configuration, + onCreated = { navigator -> + platformResultScreenModel = navigator.paymentResultScreenModel() + }, + ) + + } + }, + ).also { + localViewController = it + } +} diff --git a/shared/src/iosMain/kotlin/com/komoju/mobile/sdk/navigation/PlatformBackPress.ios.kt b/shared/src/iosMain/kotlin/com/komoju/mobile/sdk/navigation/PlatformBackPress.ios.kt new file mode 100644 index 0000000..662e4aa --- /dev/null +++ b/shared/src/iosMain/kotlin/com/komoju/mobile/sdk/navigation/PlatformBackPress.ios.kt @@ -0,0 +1,30 @@ +package com.komoju.mobile.sdk.navigation + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.interop.LocalUIViewController +import platform.UIKit.UIViewController + +@Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING") +internal actual class PlatformBackPressDispatcher { + private var uiViewController: UIViewController? = null + + @Composable + fun Create() { + uiViewController = LocalUIViewController.current + } + + actual fun onBackPressed() { + uiViewController?.dismissViewControllerAnimated(true) { + // Nothing to do here + } + } +} + + +@Composable +internal actual fun rememberPlatformBackPressDispatcher(): PlatformBackPressDispatcher = remember { + PlatformBackPressDispatcher() +}.apply { + Create() +} diff --git a/shared/src/iosMain/kotlin/com/komoju/mobile/sdk/ui/composables/ExternalScreenLauncherResult.ios.kt b/shared/src/iosMain/kotlin/com/komoju/mobile/sdk/ui/composables/ExternalScreenLauncherResult.ios.kt new file mode 100644 index 0000000..76f0a7b --- /dev/null +++ b/shared/src/iosMain/kotlin/com/komoju/mobile/sdk/ui/composables/ExternalScreenLauncherResult.ios.kt @@ -0,0 +1,8 @@ +package com.komoju.mobile.sdk.ui.composables + +@Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING") +actual class Launcher { + actual fun launch(input: I) { + error("IOS Launcher is not implemented") + } +} diff --git a/shared/src/iosMain/kotlin/com/komoju/mobile/sdk/ui/composables/RememberLauncherForActivityResult.ios.kt b/shared/src/iosMain/kotlin/com/komoju/mobile/sdk/ui/composables/RememberLauncherForActivityResult.ios.kt new file mode 100644 index 0000000..2f31215 --- /dev/null +++ b/shared/src/iosMain/kotlin/com/komoju/mobile/sdk/ui/composables/RememberLauncherForActivityResult.ios.kt @@ -0,0 +1,6 @@ +package com.komoju.mobile.sdk.ui.composables + +import androidx.compose.runtime.Composable + +@Composable +actual fun launchCustomTab(onResult: (Int) -> Unit): Launcher = Launcher() diff --git a/shared/src/iosMain/kotlin/com/komoju/mobile/sdk/utils/ModifierExt.ios.kt b/shared/src/iosMain/kotlin/com/komoju/mobile/sdk/utils/ModifierExt.ios.kt new file mode 100644 index 0000000..3c3a625 --- /dev/null +++ b/shared/src/iosMain/kotlin/com/komoju/mobile/sdk/utils/ModifierExt.ios.kt @@ -0,0 +1,8 @@ +package com.komoju.mobile.sdk.utils + +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.testTag +import androidx.compose.ui.semantics.semantics + +internal actual fun Modifier.testID(id: String) = semantics { +}.testTag(id) diff --git a/shared/src/iosMain/kotlin/com/komoju/mobile/sdk/utils/Platform.ios.kt b/shared/src/iosMain/kotlin/com/komoju/mobile/sdk/utils/Platform.ios.kt new file mode 100644 index 0000000..d3ed78b --- /dev/null +++ b/shared/src/iosMain/kotlin/com/komoju/mobile/sdk/utils/Platform.ios.kt @@ -0,0 +1,3 @@ +package com.komoju.mobile.sdk.utils + +actual val currentPlatform: Platform = Platform.IOS From a4f6c13b8f14c9d703b3c16542339b9354cae128 Mon Sep 17 00:00:00 2001 From: amnix Date: Mon, 11 Nov 2024 13:51:57 +0900 Subject: [PATCH 02/11] ktlint fixup --- .../komoju/android/sdk/KomojuAndroidSDK.kt | 23 +++++++--------- .../ui/screens/store/FakeStoreScreenModel.kt | 4 +-- .../navigation/PaymentResultScreenModel.kt | 2 +- .../InlinedPaymentPrimaryButton.kt | 2 +- .../payment/KomojuPaymentScreenModel.kt | 26 ++++++++++++++----- .../webview/WebViewRequestInterceptor.kt | 3 ++- .../com/komoju/mobile/sdk/utils/Platform.kt | 3 ++- .../komoju/mobile/sdk/MainViewController.kt | 11 +++----- .../sdk/navigation/PlatformBackPress.ios.kt | 1 - 9 files changed, 41 insertions(+), 34 deletions(-) diff --git a/android/src/main/java/com/komoju/android/sdk/KomojuAndroidSDK.kt b/android/src/main/java/com/komoju/android/sdk/KomojuAndroidSDK.kt index bea751f..f8a370f 100644 --- a/android/src/main/java/com/komoju/android/sdk/KomojuAndroidSDK.kt +++ b/android/src/main/java/com/komoju/android/sdk/KomojuAndroidSDK.kt @@ -9,12 +9,12 @@ import com.komoju.android.sdk.types.Language import com.komoju.mobile.sdk.KomojuMobileSDKConfiguration import com.komoju.mobile.sdk.KomojuMobileSDKPaymentResult import com.komoju.mobile.sdk.canProcessPayment +import com.komoju.mobile.sdk.ui.theme.ConfigurableTheme as CoreConfigurableTheme import com.komoju.mobile.sdk.ui.theme.DefaultConfigurableTheme import com.komoju.mobile.sdk.ui.theme.toColor -import kotlinx.parcelize.Parcelize import kotlin.contracts.ExperimentalContracts import kotlin.contracts.contract -import com.komoju.mobile.sdk.ui.theme.ConfigurableTheme as CoreConfigurableTheme +import kotlinx.parcelize.Parcelize object KomojuAndroidSDK { val activityResultContract: ActivityResultContract @@ -124,14 +124,12 @@ internal fun KomojuAndroidSDK.ConfigurableTheme.toKomojuConfigurableTheme(): Cor primaryShapeCornerRadiusInDp = this.primaryShapeCornerRadiusInDp, ) -internal fun CoreConfigurableTheme.toAndroidSDKConfigurableTheme(): KomojuAndroidSDK.ConfigurableTheme = - KomojuAndroidSDK.ConfigurableTheme( - primaryColorInt = primaryColor.toColor().toArgb(), - primaryContentColorInt = primaryContentColor.toColor().toArgb(), - loaderColorInt = loaderColor.toColor().toArgb(), - primaryShapeCornerRadiusInDp = primaryShapeCornerRadiusInDp, - ) - +internal fun CoreConfigurableTheme.toAndroidSDKConfigurableTheme(): KomojuAndroidSDK.ConfigurableTheme = KomojuAndroidSDK.ConfigurableTheme( + primaryColorInt = primaryColor.toColor().toArgb(), + primaryContentColorInt = primaryContentColor.toColor().toArgb(), + loaderColorInt = loaderColor.toColor().toArgb(), + primaryShapeCornerRadiusInDp = primaryShapeCornerRadiusInDp, +) /** * Extension function to check if the current configuration is valid for processing a payment. @@ -169,8 +167,7 @@ internal fun KomojuAndroidSDK.Configuration.toMobileConfiguration(): KomojuMobil appScheme = this.appScheme, ) - internal fun KomojuMobileSDKPaymentResult.toParcelable(): KomojuAndroidSDK.PaymentResult = KomojuAndroidSDK.PaymentResult(this.isSuccessFul) -internal fun KomojuAndroidSDK.PaymentResult.toPaymentResult(): KomojuMobileSDKPaymentResult = KomojuMobileSDKPaymentResult(this.isSuccessFul) - +internal fun KomojuAndroidSDK.PaymentResult.toPaymentResult(): KomojuMobileSDKPaymentResult = + KomojuMobileSDKPaymentResult(this.isSuccessFul) diff --git a/example-android/src/main/java/com/komoju/android/ui/screens/store/FakeStoreScreenModel.kt b/example-android/src/main/java/com/komoju/android/ui/screens/store/FakeStoreScreenModel.kt index e2a424a..eec1b58 100644 --- a/example-android/src/main/java/com/komoju/android/ui/screens/store/FakeStoreScreenModel.kt +++ b/example-android/src/main/java/com/komoju/android/ui/screens/store/FakeStoreScreenModel.kt @@ -3,12 +3,12 @@ package com.komoju.android.ui.screens.store import cafe.adriel.voyager.core.model.ScreenModel import cafe.adriel.voyager.core.model.screenModelScope import com.komoju.android.BuildConfig +import com.komoju.android.remote.RemoteApiService +import com.komoju.android.remote.dtos.CreateSessionRequest import com.komoju.android.sdk.KomojuAndroidSDK import com.komoju.android.sdk.annotations.ExperimentalKomojuPaymentApi import com.komoju.android.sdk.types.Currency import com.komoju.android.sdk.types.Language -import com.komoju.android.remote.RemoteApiService -import com.komoju.android.remote.dtos.CreateSessionRequest import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.asStateFlow diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/navigation/PaymentResultScreenModel.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/navigation/PaymentResultScreenModel.kt index 9bd93c3..e7f2abf 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/navigation/PaymentResultScreenModel.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/navigation/PaymentResultScreenModel.kt @@ -6,7 +6,7 @@ import cafe.adriel.voyager.core.model.rememberNavigatorScreenModel import cafe.adriel.voyager.navigator.Navigator import com.komoju.mobile.sdk.KomojuMobileSDKPaymentResult -class PaymentResultScreenModel internal constructor(): ScreenModel { +class PaymentResultScreenModel internal constructor() : ScreenModel { var result: KomojuMobileSDKPaymentResult? = null private set diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/composables/InlinedPaymentPrimaryButton.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/composables/InlinedPaymentPrimaryButton.kt index 735f2d4..9076925 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/composables/InlinedPaymentPrimaryButton.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/composables/InlinedPaymentPrimaryButton.kt @@ -30,10 +30,10 @@ import androidx.compose.ui.unit.dp import com.komoju.mobile.sdk.ui.theme.KomojuMobileSdkTheme import com.komoju.mobile.sdk.ui.theme.LocalConfigurableTheme import com.komoju.mobile.sdk.ui.theme.toColor +import kotlin.time.Duration.Companion.seconds import kotlinx.coroutines.delay import kotlinx.coroutines.launch import org.jetbrains.compose.ui.tooling.preview.Preview -import kotlin.time.Duration.Companion.seconds @Composable internal fun InlinedPaymentPrimaryButton( diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentScreenModel.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentScreenModel.kt index 41fe29b..791eb98 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentScreenModel.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentScreenModel.kt @@ -97,7 +97,10 @@ internal class KomojuPaymentScreenModel(private val config: KomojuMobileSDKConfi } fun onCreditCardDisplayDataChange(creditCardDisplayData: CreditCardDisplayData) { - if (creditCardDisplayData.creditCardNumber.length <= 16 && creditCardDisplayData.creditCardExpiryDate.length <= 4 && creditCardDisplayData.creditCardCvv.length <= 7) { + if (creditCardDisplayData.creditCardNumber.length <= 16 && + creditCardDisplayData.creditCardExpiryDate.length <= 4 && + creditCardDisplayData.creditCardCvv.length <= 7 + ) { mutableState.update { it.copy( creditCardDisplayData = creditCardDisplayData.copy( @@ -243,14 +246,18 @@ internal class KomojuPaymentScreenModel(private val config: KomojuMobileSDKConfi is Payment.Konbini -> mutableRouter.value = Router.Replace(KomojuPaymentRoute.KonbiniAwaitingPayment(config, payment = this)) is Payment.OffSitePayment -> when (currentPlatform) { // we will use WebView in IOS first. - Platform.IOS -> mutableRouter.value = - Router.Replace(KomojuPaymentRoute.WebView(config, url = redirectURL, isJavaScriptEnabled = true, canComeBack = false)) + Platform.IOS -> + mutableRouter.value = + Router.Replace( + KomojuPaymentRoute.WebView(config, url = redirectURL, isJavaScriptEnabled = true, canComeBack = false), + ) else -> _offSitePaymentURL.value = redirectURL } - is Payment.Completed -> mutableRouter.value = - Router.SetPaymentResultAndPop(KomojuMobileSDKPaymentResult(isSuccessFul = status == PaymentStatus.CAPTURED)) + is Payment.Completed -> + mutableRouter.value = + Router.SetPaymentResultAndPop(KomojuMobileSDKPaymentResult(isSuccessFul = status == PaymentStatus.CAPTURED)) is Payment.BankTransfer -> mutableRouter.value = Router.ReplaceAll(KomojuPaymentRoute.WebView(config, url = instructionURL)) is Payment.PayEasy -> mutableRouter.value = Router.ReplaceAll(KomojuPaymentRoute.WebView(config, url = instructionURL)) @@ -267,7 +274,7 @@ internal class KomojuPaymentScreenModel(private val config: KomojuMobileSDKConfi is PaymentMethod.WebMoney -> state.value.webMoneyDisplayData.validate() is PaymentMethod.BankTransfer, is PaymentMethod.PayEasy, - -> state.value.commonDisplayData.validate() + -> state.value.commonDisplayData.validate() is PaymentMethod.OffSitePayment -> true // No input required for Offsite payment else -> false @@ -305,7 +312,12 @@ internal class KomojuPaymentScreenModel(private val config: KomojuMobileSDKConfi ), ) } - return lastNameError == null && firstNameError == null && firstNamePhoneticError == null && lastNamePhoneticError == null && emailError == null && phoneNumberError == null + return lastNameError == null && + firstNameError == null && + firstNamePhoneticError == null && + lastNamePhoneticError == null && + emailError == null && + phoneNumberError == null } private fun WebMoneyDisplayData.validate(): Boolean { diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/webview/WebViewRequestInterceptor.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/webview/WebViewRequestInterceptor.kt index 66c4614..118f908 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/webview/WebViewRequestInterceptor.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/webview/WebViewRequestInterceptor.kt @@ -6,7 +6,8 @@ import com.multiplatform.webview.request.WebRequest import com.multiplatform.webview.request.WebRequestInterceptResult import com.multiplatform.webview.web.WebViewNavigator -internal class WebViewRequestInterceptor(private val appScheme: String, private val onDeeplinkCaptured: (String) -> Unit) : RequestInterceptor { +internal class WebViewRequestInterceptor(private val appScheme: String, private val onDeeplinkCaptured: (String) -> Unit) : + RequestInterceptor { override fun onInterceptUrlRequest(request: WebRequest, navigator: WebViewNavigator): WebRequestInterceptResult = request.checkAndOpen(appScheme, onDeeplinkCaptured) diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/utils/Platform.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/utils/Platform.kt index 8baca64..801f2a4 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/utils/Platform.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/utils/Platform.kt @@ -1,7 +1,8 @@ package com.komoju.mobile.sdk.utils enum class Platform { - ANDROID, IOS + ANDROID, + IOS, } expect val currentPlatform: Platform diff --git a/shared/src/iosMain/kotlin/com/komoju/mobile/sdk/MainViewController.kt b/shared/src/iosMain/kotlin/com/komoju/mobile/sdk/MainViewController.kt index 0c4efff..f76b66d 100644 --- a/shared/src/iosMain/kotlin/com/komoju/mobile/sdk/MainViewController.kt +++ b/shared/src/iosMain/kotlin/com/komoju/mobile/sdk/MainViewController.kt @@ -15,24 +15,22 @@ internal val LocalViewController = compositionLocalOf<() -> UIViewController> { error("LocalViewController not provided") } -fun MainViewController( - configuration: KomojuMobileSDKConfiguration, - onDismiss: (KomojuMobileSDKPaymentResult) -> Unit -) = extendedComposeViewController(configuration, onDismiss) +fun MainViewController(configuration: KomojuMobileSDKConfiguration, onDismiss: (KomojuMobileSDKPaymentResult) -> Unit) = + extendedComposeViewController(configuration, onDismiss) @OptIn(ExperimentalComposeApi::class) private fun extendedComposeViewController( configuration: KomojuMobileSDKConfiguration, onDismiss: (KomojuMobileSDKPaymentResult) -> Unit, ): UIViewController { - var platformResultScreenModel : PaymentResultScreenModel? = null + var platformResultScreenModel: PaymentResultScreenModel? = null var localViewController: UIViewController? = null return ComposeUIViewController( configure = { onFocusBehavior = OnFocusBehavior.FocusableAboveKeyboard opaque = false delegate = object : ComposeUIViewControllerDelegate { - override fun viewWillDisappear(animated: Boolean){ + override fun viewWillDisappear(animated: Boolean) { super.viewWillDisappear(animated) onDismiss(platformResultScreenModel?.result ?: KomojuMobileSDKPaymentResult(isSuccessFul = false)) } @@ -46,7 +44,6 @@ private fun extendedComposeViewController( platformResultScreenModel = navigator.paymentResultScreenModel() }, ) - } }, ).also { diff --git a/shared/src/iosMain/kotlin/com/komoju/mobile/sdk/navigation/PlatformBackPress.ios.kt b/shared/src/iosMain/kotlin/com/komoju/mobile/sdk/navigation/PlatformBackPress.ios.kt index 662e4aa..e50a74a 100644 --- a/shared/src/iosMain/kotlin/com/komoju/mobile/sdk/navigation/PlatformBackPress.ios.kt +++ b/shared/src/iosMain/kotlin/com/komoju/mobile/sdk/navigation/PlatformBackPress.ios.kt @@ -21,7 +21,6 @@ internal actual class PlatformBackPressDispatcher { } } - @Composable internal actual fun rememberPlatformBackPressDispatcher(): PlatformBackPressDispatcher = remember { PlatformBackPressDispatcher() From f4b14a40c0c18dca7d3e6ad85cb2875c8e296e8a Mon Sep 17 00:00:00 2001 From: amnix Date: Mon, 11 Nov 2024 17:40:57 +0900 Subject: [PATCH 03/11] Use default Res Package directory --- gradle/libs.versions.toml | 2 + shared/build.gradle.kts | 12 ++-- .../awating/KonbiniAwaitingPaymentScreen.kt | 44 ++++++------- .../ui/screens/failed/PaymentFailedScreen.kt | 14 ++--- .../ui/screens/payment/KomojuPaymentScreen.kt | 6 +- .../payment/KomojuPaymentScreenModel.kt | 46 +++++++------- .../screens/payment/composables/BankForm.kt | 20 +++--- .../payment/composables/BitCashForm.kt | 8 +-- .../payment/composables/CreditCardForm.kt | 18 +++--- .../composables/CreditCardSchemeIcons.kt | 12 ++-- .../payment/composables/KonbiniBrandsRow.kt | 26 ++++---- .../payment/composables/KonbiniForm.kt | 12 ++-- .../payment/composables/NetCashForm.kt | 8 +-- .../payment/composables/OffSitePayForm.kt | 42 ++++++------- .../screens/payment/composables/PaidyForm.kt | 12 ++-- .../payment/composables/PayEasyForm.kt | 20 +++--- .../payment/composables/PaymentMethodsRow.kt | 62 +++++++++---------- .../payment/composables/WebMoneyForm.kt | 8 +-- .../screens/success/PaymentSuccessScreen.kt | 10 +-- .../sdk/ui/screens/webview/WebViewScreen.kt | 10 +-- .../komoju/mobile/sdk/ui/theme/Typography.kt | 12 ++-- 21 files changed, 205 insertions(+), 199 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 92c3330..af5602f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -30,12 +30,14 @@ mavenPublish = "0.30.0" dokka = "1.9.20" compose-multiplatform = "1.7.0" jetbrainsComposeLifecycle = "2.8.3" +androidx-ui-tooling = "1.7.5" [libraries] androidx-browser = { module = "androidx.browser:browser", version.ref = "browser" } human-readable = { module = "nl.jacobras:Human-Readable", version.ref = "humanReadable" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } leakcanary-android = { module = "com.squareup.leakcanary:leakcanary-android", version.ref = "leakcanaryAndroid" } +androidx-compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview", version.ref = "androidx-ui-tooling" } core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } androidx-fragment-ktx = { group = "androidx.fragment", name = "fragment-ktx", version.ref = "fragmentKtx" } junit = { group = "junit", name = "junit", version.ref = "junit" } diff --git a/shared/build.gradle.kts b/shared/build.gradle.kts index 9983ab4..fb9acd1 100644 --- a/shared/build.gradle.kts +++ b/shared/build.gradle.kts @@ -28,7 +28,6 @@ kotlin { iosSimulatorArm64(), ).forEach { it.binaries.framework { - linkerOpts("-make_mergeable") xcf.add(this) baseName = "komojuShared" isStatic = true @@ -70,6 +69,7 @@ kotlin { implementation(libs.ktor.client.okhttp) implementation(libs.kotlinx.coroutines.android) implementation(libs.androidx.browser) + implementation(libs.androidx.compose.ui.tooling.preview) } iosMain.dependencies { implementation(libs.ktor.client.darwin) @@ -96,11 +96,15 @@ android { resourcePrefix = "komoju_" } +dependencies { + debugImplementation(libs.androidx.ui.tooling) +} + compose { resources { - publicResClass = false - packageOfResClass = "com.komoju.mobile.sdk.shared.generated.resources" - generateResClass = auto + publicResClass = true + //packageOfResClass = "com.komoju.mobile.sdk.shared.generated.resources" + generateResClass = always } } diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/awating/KonbiniAwaitingPaymentScreen.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/awating/KonbiniAwaitingPaymentScreen.kt index 4462443..9a33383 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/awating/KonbiniAwaitingPaymentScreen.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/awating/KonbiniAwaitingPaymentScreen.kt @@ -32,28 +32,6 @@ import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.screen.Screen import com.komoju.mobile.sdk.entities.Payment import com.komoju.mobile.sdk.entities.PaymentStatus -import com.komoju.mobile.sdk.shared.generated.resources.Res -import com.komoju.mobile.sdk.shared.generated.resources.komoju_awaiting_payment -import com.komoju.mobile.sdk.shared.generated.resources.komoju_awaiting_payment_instruction -import com.komoju.mobile.sdk.shared.generated.resources.komoju_confirmation_code -import com.komoju.mobile.sdk.shared.generated.resources.komoju_done -import com.komoju.mobile.sdk.shared.generated.resources.komoju_error -import com.komoju.mobile.sdk.shared.generated.resources.komoju_have_a_question_contact_us -import com.komoju.mobile.sdk.shared.generated.resources.komoju_i_will_do_it_later -import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_payment_status_completed -import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_payment_status_failed -import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_payment_status_konbini_pending -import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_payment_status_prenidng -import com.komoju.mobile.sdk.shared.generated.resources.komoju_okay -import com.komoju.mobile.sdk.shared.generated.resources.komoju_payment_failed -import com.komoju.mobile.sdk.shared.generated.resources.komoju_payment_successful -import com.komoju.mobile.sdk.shared.generated.resources.komoju_receipt_number -import com.komoju.mobile.sdk.shared.generated.resources.komoju_total_payment -import com.komoju.mobile.sdk.shared.generated.resources.komoju_update_payment_method -import com.komoju.mobile.sdk.shared.generated.resources.komoju_view_instructions -import com.komoju.mobile.sdk.shared.generated.resources.komoju_your_payment_has_been_processed_successfully -import com.komoju.mobile.sdk.shared.generated.resources.komoju_your_payment_has_failed -import com.komoju.mobile.sdk.shared.generated.resources.komoju_your_payment_is_awaiting_processing import com.komoju.mobile.sdk.ui.composables.PrimaryButton import com.komoju.mobile.sdk.ui.composables.TextButton import com.komoju.mobile.sdk.ui.composables.ThemedCircularProgressIndicator @@ -63,6 +41,28 @@ import com.komoju.mobile.sdk.ui.theme.Gray200 import com.komoju.mobile.sdk.ui.theme.Gray50 import com.komoju.mobile.sdk.ui.theme.Gray700 import com.komoju.mobile.sdk.utils.AmountUtils +import komoju_mobile_sdk.shared.generated.resources.Res +import komoju_mobile_sdk.shared.generated.resources.komoju_awaiting_payment +import komoju_mobile_sdk.shared.generated.resources.komoju_awaiting_payment_instruction +import komoju_mobile_sdk.shared.generated.resources.komoju_confirmation_code +import komoju_mobile_sdk.shared.generated.resources.komoju_done +import komoju_mobile_sdk.shared.generated.resources.komoju_error +import komoju_mobile_sdk.shared.generated.resources.komoju_have_a_question_contact_us +import komoju_mobile_sdk.shared.generated.resources.komoju_i_will_do_it_later +import komoju_mobile_sdk.shared.generated.resources.komoju_ic_payment_status_completed +import komoju_mobile_sdk.shared.generated.resources.komoju_ic_payment_status_failed +import komoju_mobile_sdk.shared.generated.resources.komoju_ic_payment_status_konbini_pending +import komoju_mobile_sdk.shared.generated.resources.komoju_ic_payment_status_prenidng +import komoju_mobile_sdk.shared.generated.resources.komoju_okay +import komoju_mobile_sdk.shared.generated.resources.komoju_payment_failed +import komoju_mobile_sdk.shared.generated.resources.komoju_payment_successful +import komoju_mobile_sdk.shared.generated.resources.komoju_receipt_number +import komoju_mobile_sdk.shared.generated.resources.komoju_total_payment +import komoju_mobile_sdk.shared.generated.resources.komoju_update_payment_method +import komoju_mobile_sdk.shared.generated.resources.komoju_view_instructions +import komoju_mobile_sdk.shared.generated.resources.komoju_your_payment_has_been_processed_successfully +import komoju_mobile_sdk.shared.generated.resources.komoju_your_payment_has_failed +import komoju_mobile_sdk.shared.generated.resources.komoju_your_payment_is_awaiting_processing import org.jetbrains.compose.resources.painterResource import org.jetbrains.compose.resources.stringResource diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/failed/PaymentFailedScreen.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/failed/PaymentFailedScreen.kt index 2bbc34b..b0a08a7 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/failed/PaymentFailedScreen.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/failed/PaymentFailedScreen.kt @@ -22,16 +22,16 @@ import androidx.compose.ui.unit.sp import androidx.lifecycle.compose.collectAsStateWithLifecycle import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.screen.Screen -import com.komoju.mobile.sdk.shared.generated.resources.Res -import com.komoju.mobile.sdk.shared.generated.resources.komoju_back_to_store -import com.komoju.mobile.sdk.shared.generated.resources.komoju_credit_card_error -import com.komoju.mobile.sdk.shared.generated.resources.komoju_error_other -import com.komoju.mobile.sdk.shared.generated.resources.komoju_error_user_cancel -import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_payment_status_failed -import com.komoju.mobile.sdk.shared.generated.resources.komoju_payment_failed import com.komoju.mobile.sdk.ui.composables.PrimaryButton import com.komoju.mobile.sdk.ui.screens.KomojuPaymentRoute import com.komoju.mobile.sdk.ui.screens.RouterEffect +import komoju_mobile_sdk.shared.generated.resources.Res +import komoju_mobile_sdk.shared.generated.resources.komoju_back_to_store +import komoju_mobile_sdk.shared.generated.resources.komoju_credit_card_error +import komoju_mobile_sdk.shared.generated.resources.komoju_error_other +import komoju_mobile_sdk.shared.generated.resources.komoju_error_user_cancel +import komoju_mobile_sdk.shared.generated.resources.komoju_ic_payment_status_failed +import komoju_mobile_sdk.shared.generated.resources.komoju_payment_failed import org.jetbrains.compose.resources.painterResource import org.jetbrains.compose.resources.stringResource diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentScreen.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentScreen.kt index bcffcc8..f0c5818 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentScreen.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentScreen.kt @@ -31,9 +31,6 @@ import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.screen.Screen import com.komoju.mobile.sdk.KomojuMobileSDKConfiguration import com.komoju.mobile.sdk.entities.PaymentMethod -import com.komoju.mobile.sdk.shared.generated.resources.Res -import com.komoju.mobile.sdk.shared.generated.resources.komoju_img_payment_footer -import com.komoju.mobile.sdk.shared.generated.resources.komoju_payment_options import com.komoju.mobile.sdk.ui.composables.InlinedWebView import com.komoju.mobile.sdk.ui.composables.ThemedCircularProgressIndicator import com.komoju.mobile.sdk.ui.composables.launchCustomTab @@ -41,6 +38,9 @@ import com.komoju.mobile.sdk.ui.screens.RouterEffect import com.komoju.mobile.sdk.ui.screens.payment.composables.PaymentMethodForm import com.komoju.mobile.sdk.ui.screens.payment.composables.PaymentMethodsRow import com.komoju.mobile.sdk.ui.screens.payment.composables.PaymentSheetHandle +import komoju_mobile_sdk.shared.generated.resources.Res +import komoju_mobile_sdk.shared.generated.resources.komoju_img_payment_footer +import komoju_mobile_sdk.shared.generated.resources.komoju_payment_options import org.jetbrains.compose.resources.painterResource import org.jetbrains.compose.resources.stringResource diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentScreenModel.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentScreenModel.kt index 791eb98..bae9824 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentScreenModel.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentScreenModel.kt @@ -16,29 +16,6 @@ import com.komoju.mobile.sdk.entities.SecureTokenResponse.Status.SKIPPED import com.komoju.mobile.sdk.entities.SecureTokenResponse.Status.UNKNOWN import com.komoju.mobile.sdk.navigation.RouterStateScreenModel import com.komoju.mobile.sdk.remote.apis.KomojuRemoteApi -import com.komoju.mobile.sdk.shared.generated.resources.Res -import com.komoju.mobile.sdk.shared.generated.resources.komoju_cadrholder_name_cannot_be_empty -import com.komoju.mobile.sdk.shared.generated.resources.komoju_please_select_a_konbini_brand -import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_bit_cash_id_cannot_be_empty -import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_bit_cash_id_is_not_valid -import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_card_number_is_not_valid -import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_cardholder_name_is_not_valid -import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_cvv_is_not_valid -import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_email_is_not_valid -import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_expiry_date_is_not_valid -import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_first_name_cannot_be_empty -import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_first_name_phonetic_cannot_be_empty -import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_first_name_phonetic_must_be_a_kana -import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_last_name_cannot_be_empty -import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_last_name_phonetic_cannot_be_empty -import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_last_name_phonetic_must_be_a_kana -import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_name_cannot_be_empty -import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_net_cash_id_cannot_be_empty -import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_net_cash_id_is_not_valid -import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_phone_number_cannot_be_empty -import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_phone_number_is_not_valid -import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_prepaid_number_cannot_be_empty -import com.komoju.mobile.sdk.shared.generated.resources.komoju_the_entered_prepaid_number_is_not_valid import com.komoju.mobile.sdk.ui.composables.InlinedPaymentPrimaryButtonState import com.komoju.mobile.sdk.ui.screens.KomojuPaymentRoute import com.komoju.mobile.sdk.ui.screens.Router @@ -55,6 +32,29 @@ import com.komoju.mobile.sdk.utils.isDigitsOnly import com.komoju.mobile.sdk.utils.isKanaOnly import com.komoju.mobile.sdk.utils.isValidEmail import com.komoju.mobile.sdk.utils.verifyTokenAndProcessPayment +import komoju_mobile_sdk.shared.generated.resources.Res +import komoju_mobile_sdk.shared.generated.resources.komoju_cadrholder_name_cannot_be_empty +import komoju_mobile_sdk.shared.generated.resources.komoju_please_select_a_konbini_brand +import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_bit_cash_id_cannot_be_empty +import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_bit_cash_id_is_not_valid +import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_card_number_is_not_valid +import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_cardholder_name_is_not_valid +import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_cvv_is_not_valid +import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_email_is_not_valid +import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_expiry_date_is_not_valid +import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_first_name_cannot_be_empty +import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_first_name_phonetic_cannot_be_empty +import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_first_name_phonetic_must_be_a_kana +import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_last_name_cannot_be_empty +import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_last_name_phonetic_cannot_be_empty +import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_last_name_phonetic_must_be_a_kana +import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_name_cannot_be_empty +import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_net_cash_id_cannot_be_empty +import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_net_cash_id_is_not_valid +import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_phone_number_cannot_be_empty +import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_phone_number_is_not_valid +import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_prepaid_number_cannot_be_empty +import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_prepaid_number_is_not_valid import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/BankForm.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/BankForm.kt index 933a768..fa60137 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/BankForm.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/BankForm.kt @@ -17,20 +17,20 @@ import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.intl.Locale import androidx.compose.ui.unit.dp import com.komoju.mobile.sdk.entities.PaymentMethod -import com.komoju.mobile.sdk.shared.generated.resources.Res -import com.komoju.mobile.sdk.shared.generated.resources.komoju_email -import com.komoju.mobile.sdk.shared.generated.resources.komoju_enter_your_email_address -import com.komoju.mobile.sdk.shared.generated.resources.komoju_enter_your_phone_number -import com.komoju.mobile.sdk.shared.generated.resources.komoju_first_name -import com.komoju.mobile.sdk.shared.generated.resources.komoju_first_name_phonetic -import com.komoju.mobile.sdk.shared.generated.resources.komoju_last_name -import com.komoju.mobile.sdk.shared.generated.resources.komoju_last_name_phonetic -import com.komoju.mobile.sdk.shared.generated.resources.komoju_pay -import com.komoju.mobile.sdk.shared.generated.resources.komoju_phone_number import com.komoju.mobile.sdk.ui.composables.PrimaryButton import com.komoju.mobile.sdk.ui.screens.payment.CommonDisplayData import com.komoju.mobile.sdk.ui.theme.KomojuMobileSdkTheme import com.komoju.mobile.sdk.utils.AmountUtils +import komoju_mobile_sdk.shared.generated.resources.Res +import komoju_mobile_sdk.shared.generated.resources.komoju_email +import komoju_mobile_sdk.shared.generated.resources.komoju_enter_your_email_address +import komoju_mobile_sdk.shared.generated.resources.komoju_enter_your_phone_number +import komoju_mobile_sdk.shared.generated.resources.komoju_first_name +import komoju_mobile_sdk.shared.generated.resources.komoju_first_name_phonetic +import komoju_mobile_sdk.shared.generated.resources.komoju_last_name +import komoju_mobile_sdk.shared.generated.resources.komoju_last_name_phonetic +import komoju_mobile_sdk.shared.generated.resources.komoju_pay +import komoju_mobile_sdk.shared.generated.resources.komoju_phone_number import org.jetbrains.compose.resources.stringResource import org.jetbrains.compose.ui.tooling.preview.Preview diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/BitCashForm.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/BitCashForm.kt index 231da31..acfa521 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/BitCashForm.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/BitCashForm.kt @@ -12,13 +12,13 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import com.komoju.mobile.sdk.entities.PaymentMethod -import com.komoju.mobile.sdk.shared.generated.resources.Res -import com.komoju.mobile.sdk.shared.generated.resources.komoju_bitcash_information -import com.komoju.mobile.sdk.shared.generated.resources.komoju_hiragana_id -import com.komoju.mobile.sdk.shared.generated.resources.komoju_pay import com.komoju.mobile.sdk.ui.composables.PrimaryButton import com.komoju.mobile.sdk.ui.screens.payment.BitCashDisplayData import com.komoju.mobile.sdk.utils.AmountUtils +import komoju_mobile_sdk.shared.generated.resources.Res +import komoju_mobile_sdk.shared.generated.resources.komoju_bitcash_information +import komoju_mobile_sdk.shared.generated.resources.komoju_hiragana_id +import komoju_mobile_sdk.shared.generated.resources.komoju_pay import org.jetbrains.compose.resources.stringResource @Composable diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/CreditCardForm.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/CreditCardForm.kt index e7a14b3..3de36ac 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/CreditCardForm.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/CreditCardForm.kt @@ -37,15 +37,7 @@ import androidx.compose.ui.text.toUpperCase import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.komoju.mobile.sdk.entities.PaymentMethod -import com.komoju.mobile.sdk.shared.generated.resources.Res -import com.komoju.mobile.sdk.shared.generated.resources.komoju_card_number -import com.komoju.mobile.sdk.shared.generated.resources.komoju_cardholder_name -import com.komoju.mobile.sdk.shared.generated.resources.komoju_cvv -import com.komoju.mobile.sdk.shared.generated.resources.komoju_full_name_on_card -import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_cvv -import com.komoju.mobile.sdk.shared.generated.resources.komoju_mm_yy -import com.komoju.mobile.sdk.shared.generated.resources.komoju_pay -import com.komoju.mobile.sdk.shared.generated.resources.komoju_save_this_card_for_future_payments +import komoju_mobile_sdk.shared.generated.resources.Res import com.komoju.mobile.sdk.ui.composables.InlinedPaymentPrimaryButton import com.komoju.mobile.sdk.ui.composables.PrimaryButton import com.komoju.mobile.sdk.ui.screens.payment.CreditCardDisplayData @@ -61,6 +53,14 @@ import com.komoju.mobile.sdk.utils.CreditCardUtils.formatOtherCardNumbers import com.komoju.mobile.sdk.utils.CreditCardUtils.identifyCardScheme import com.komoju.mobile.sdk.utils.CreditCardUtils.makeExpirationFilter import com.komoju.mobile.sdk.utils.testID +import komoju_mobile_sdk.shared.generated.resources.komoju_card_number +import komoju_mobile_sdk.shared.generated.resources.komoju_cardholder_name +import komoju_mobile_sdk.shared.generated.resources.komoju_cvv +import komoju_mobile_sdk.shared.generated.resources.komoju_full_name_on_card +import komoju_mobile_sdk.shared.generated.resources.komoju_ic_cvv +import komoju_mobile_sdk.shared.generated.resources.komoju_mm_yy +import komoju_mobile_sdk.shared.generated.resources.komoju_pay +import komoju_mobile_sdk.shared.generated.resources.komoju_save_this_card_for_future_payments import org.jetbrains.compose.resources.painterResource import org.jetbrains.compose.resources.stringResource import org.jetbrains.compose.ui.tooling.preview.Preview diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/CreditCardSchemeIcons.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/CreditCardSchemeIcons.kt index eac74f0..d8917a8 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/CreditCardSchemeIcons.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/CreditCardSchemeIcons.kt @@ -8,13 +8,13 @@ import androidx.compose.foundation.layout.width import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import com.komoju.mobile.sdk.shared.generated.resources.Res -import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_amex -import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_diners -import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_jcb -import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_master -import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_visa +import komoju_mobile_sdk.shared.generated.resources.Res import com.komoju.mobile.sdk.utils.CardScheme +import komoju_mobile_sdk.shared.generated.resources.komoju_ic_amex +import komoju_mobile_sdk.shared.generated.resources.komoju_ic_diners +import komoju_mobile_sdk.shared.generated.resources.komoju_ic_jcb +import komoju_mobile_sdk.shared.generated.resources.komoju_ic_master +import komoju_mobile_sdk.shared.generated.resources.komoju_ic_visa import org.jetbrains.compose.resources.painterResource import org.jetbrains.compose.ui.tooling.preview.Preview diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/KonbiniBrandsRow.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/KonbiniBrandsRow.kt index 2f5f2a2..5803485 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/KonbiniBrandsRow.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/KonbiniBrandsRow.kt @@ -20,22 +20,22 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.komoju.mobile.sdk.entities.PaymentMethod.Konbini.KonbiniBrand -import com.komoju.mobile.sdk.shared.generated.resources.Res -import com.komoju.mobile.sdk.shared.generated.resources.komoju__7_eleven -import com.komoju.mobile.sdk.shared.generated.resources.komoju_daily_yamazaki -import com.komoju.mobile.sdk.shared.generated.resources.komoju_family_mart -import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_daily_yamazaki -import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_family_mart -import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_lawson -import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_ministop -import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_seico_mart -import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_seven_eleven -import com.komoju.mobile.sdk.shared.generated.resources.komoju_lawson -import com.komoju.mobile.sdk.shared.generated.resources.komoju_ministop -import com.komoju.mobile.sdk.shared.generated.resources.komoju_seicomart +import komoju_mobile_sdk.shared.generated.resources.Res import com.komoju.mobile.sdk.ui.theme.Gray200 import com.komoju.mobile.sdk.ui.theme.KomojuDarkGreen import com.komoju.mobile.sdk.ui.theme.KomojuMobileSdkTheme +import komoju_mobile_sdk.shared.generated.resources.komoju__7_eleven +import komoju_mobile_sdk.shared.generated.resources.komoju_daily_yamazaki +import komoju_mobile_sdk.shared.generated.resources.komoju_family_mart +import komoju_mobile_sdk.shared.generated.resources.komoju_ic_daily_yamazaki +import komoju_mobile_sdk.shared.generated.resources.komoju_ic_family_mart +import komoju_mobile_sdk.shared.generated.resources.komoju_ic_lawson +import komoju_mobile_sdk.shared.generated.resources.komoju_ic_ministop +import komoju_mobile_sdk.shared.generated.resources.komoju_ic_seico_mart +import komoju_mobile_sdk.shared.generated.resources.komoju_ic_seven_eleven +import komoju_mobile_sdk.shared.generated.resources.komoju_lawson +import komoju_mobile_sdk.shared.generated.resources.komoju_ministop +import komoju_mobile_sdk.shared.generated.resources.komoju_seicomart import org.jetbrains.compose.resources.painterResource import org.jetbrains.compose.resources.stringResource import org.jetbrains.compose.ui.tooling.preview.Preview diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/KonbiniForm.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/KonbiniForm.kt index 4809f60..136f161 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/KonbiniForm.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/KonbiniForm.kt @@ -19,18 +19,18 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.komoju.mobile.sdk.entities.PaymentMethod import com.komoju.mobile.sdk.entities.PaymentMethod.Konbini.KonbiniBrand -import com.komoju.mobile.sdk.shared.generated.resources.Res -import com.komoju.mobile.sdk.shared.generated.resources.komoju_email -import com.komoju.mobile.sdk.shared.generated.resources.komoju_enter_your_email_address -import com.komoju.mobile.sdk.shared.generated.resources.komoju_full_name_on_receipt -import com.komoju.mobile.sdk.shared.generated.resources.komoju_name_shown_on_receipt -import com.komoju.mobile.sdk.shared.generated.resources.komoju_pay +import komoju_mobile_sdk.shared.generated.resources.Res import com.komoju.mobile.sdk.ui.composables.PrimaryButton import com.komoju.mobile.sdk.ui.screens.payment.CommonDisplayData import com.komoju.mobile.sdk.ui.screens.payment.KonbiniDisplayData import com.komoju.mobile.sdk.ui.theme.KomojuMobileSdkTheme import com.komoju.mobile.sdk.ui.theme.Red600 import com.komoju.mobile.sdk.utils.AmountUtils +import komoju_mobile_sdk.shared.generated.resources.komoju_email +import komoju_mobile_sdk.shared.generated.resources.komoju_enter_your_email_address +import komoju_mobile_sdk.shared.generated.resources.komoju_full_name_on_receipt +import komoju_mobile_sdk.shared.generated.resources.komoju_name_shown_on_receipt +import komoju_mobile_sdk.shared.generated.resources.komoju_pay import org.jetbrains.compose.resources.stringResource import org.jetbrains.compose.ui.tooling.preview.Preview diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/NetCashForm.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/NetCashForm.kt index 442adc3..7ce6a32 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/NetCashForm.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/NetCashForm.kt @@ -12,13 +12,13 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import com.komoju.mobile.sdk.entities.PaymentMethod -import com.komoju.mobile.sdk.shared.generated.resources.Res -import com.komoju.mobile.sdk.shared.generated.resources.komoju_net_cash_id -import com.komoju.mobile.sdk.shared.generated.resources.komoju_net_cash_information -import com.komoju.mobile.sdk.shared.generated.resources.komoju_pay +import komoju_mobile_sdk.shared.generated.resources.Res import com.komoju.mobile.sdk.ui.composables.PrimaryButton import com.komoju.mobile.sdk.ui.screens.payment.NetCashDisplayData import com.komoju.mobile.sdk.utils.AmountUtils +import komoju_mobile_sdk.shared.generated.resources.komoju_net_cash_id +import komoju_mobile_sdk.shared.generated.resources.komoju_net_cash_information +import komoju_mobile_sdk.shared.generated.resources.komoju_pay import org.jetbrains.compose.resources.stringResource @Composable diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/OffSitePayForm.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/OffSitePayForm.kt index d3067cd..51da283 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/OffSitePayForm.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/OffSitePayForm.kt @@ -22,30 +22,30 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.komoju.mobile.sdk.entities.PaymentMethod -import com.komoju.mobile.sdk.shared.generated.resources.Res -import com.komoju.mobile.sdk.shared.generated.resources.komoju_continue_to_alipay -import com.komoju.mobile.sdk.shared.generated.resources.komoju_continue_to_aupay -import com.komoju.mobile.sdk.shared.generated.resources.komoju_continue_to_linepay -import com.komoju.mobile.sdk.shared.generated.resources.komoju_continue_to_merpay -import com.komoju.mobile.sdk.shared.generated.resources.komoju_continue_to_paypay -import com.komoju.mobile.sdk.shared.generated.resources.komoju_continue_to_rakuten -import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_app_opens_info -import com.komoju.mobile.sdk.shared.generated.resources.komoju_payment_via_alipay -import com.komoju.mobile.sdk.shared.generated.resources.komoju_payment_via_au_pay -import com.komoju.mobile.sdk.shared.generated.resources.komoju_payment_via_line_pay -import com.komoju.mobile.sdk.shared.generated.resources.komoju_payment_via_mer_pay -import com.komoju.mobile.sdk.shared.generated.resources.komoju_payment_via_paypay -import com.komoju.mobile.sdk.shared.generated.resources.komoju_payment_via_rakuten_pay -import com.komoju.mobile.sdk.shared.generated.resources.komoju_webview_open_info -import com.komoju.mobile.sdk.shared.generated.resources.komoju_you_will_be_redirected_to_alipay -import com.komoju.mobile.sdk.shared.generated.resources.komoju_you_will_be_redirected_to_au_pay -import com.komoju.mobile.sdk.shared.generated.resources.komoju_you_will_be_redirected_to_line_pay -import com.komoju.mobile.sdk.shared.generated.resources.komoju_you_will_be_redirected_to_mer_pay -import com.komoju.mobile.sdk.shared.generated.resources.komoju_you_will_be_redirected_to_paypay -import com.komoju.mobile.sdk.shared.generated.resources.komoju_you_will_be_redirected_to_rakuten +import komoju_mobile_sdk.shared.generated.resources.Res import com.komoju.mobile.sdk.types.OffSitePaymentType import com.komoju.mobile.sdk.ui.composables.PrimaryButton import com.komoju.mobile.sdk.ui.theme.KomojuMobileSdkTheme +import komoju_mobile_sdk.shared.generated.resources.komoju_continue_to_alipay +import komoju_mobile_sdk.shared.generated.resources.komoju_continue_to_aupay +import komoju_mobile_sdk.shared.generated.resources.komoju_continue_to_linepay +import komoju_mobile_sdk.shared.generated.resources.komoju_continue_to_merpay +import komoju_mobile_sdk.shared.generated.resources.komoju_continue_to_paypay +import komoju_mobile_sdk.shared.generated.resources.komoju_continue_to_rakuten +import komoju_mobile_sdk.shared.generated.resources.komoju_ic_app_opens_info +import komoju_mobile_sdk.shared.generated.resources.komoju_payment_via_alipay +import komoju_mobile_sdk.shared.generated.resources.komoju_payment_via_au_pay +import komoju_mobile_sdk.shared.generated.resources.komoju_payment_via_line_pay +import komoju_mobile_sdk.shared.generated.resources.komoju_payment_via_mer_pay +import komoju_mobile_sdk.shared.generated.resources.komoju_payment_via_paypay +import komoju_mobile_sdk.shared.generated.resources.komoju_payment_via_rakuten_pay +import komoju_mobile_sdk.shared.generated.resources.komoju_webview_open_info +import komoju_mobile_sdk.shared.generated.resources.komoju_you_will_be_redirected_to_alipay +import komoju_mobile_sdk.shared.generated.resources.komoju_you_will_be_redirected_to_au_pay +import komoju_mobile_sdk.shared.generated.resources.komoju_you_will_be_redirected_to_line_pay +import komoju_mobile_sdk.shared.generated.resources.komoju_you_will_be_redirected_to_mer_pay +import komoju_mobile_sdk.shared.generated.resources.komoju_you_will_be_redirected_to_paypay +import komoju_mobile_sdk.shared.generated.resources.komoju_you_will_be_redirected_to_rakuten import org.jetbrains.compose.resources.painterResource import org.jetbrains.compose.resources.stringResource import org.jetbrains.compose.ui.tooling.preview.Preview diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PaidyForm.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PaidyForm.kt index 3e2fa78..59fab46 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PaidyForm.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PaidyForm.kt @@ -13,16 +13,16 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.unit.dp import com.komoju.mobile.sdk.entities.PaymentMethod -import com.komoju.mobile.sdk.shared.generated.resources.Res -import com.komoju.mobile.sdk.shared.generated.resources.komoju_enter_your_name -import com.komoju.mobile.sdk.shared.generated.resources.komoju_enter_your_phone_number -import com.komoju.mobile.sdk.shared.generated.resources.komoju_full_name -import com.komoju.mobile.sdk.shared.generated.resources.komoju_pay -import com.komoju.mobile.sdk.shared.generated.resources.komoju_phone_number +import komoju_mobile_sdk.shared.generated.resources.Res import com.komoju.mobile.sdk.ui.composables.PrimaryButton import com.komoju.mobile.sdk.ui.screens.payment.PaidyDisplayData import com.komoju.mobile.sdk.ui.theme.KomojuMobileSdkTheme import com.komoju.mobile.sdk.utils.AmountUtils +import komoju_mobile_sdk.shared.generated.resources.komoju_enter_your_name +import komoju_mobile_sdk.shared.generated.resources.komoju_enter_your_phone_number +import komoju_mobile_sdk.shared.generated.resources.komoju_full_name +import komoju_mobile_sdk.shared.generated.resources.komoju_pay +import komoju_mobile_sdk.shared.generated.resources.komoju_phone_number import org.jetbrains.compose.resources.stringResource import org.jetbrains.compose.ui.tooling.preview.Preview diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PayEasyForm.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PayEasyForm.kt index f406b48..04338ff 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PayEasyForm.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PayEasyForm.kt @@ -14,19 +14,19 @@ import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.unit.dp import com.komoju.mobile.sdk.entities.PaymentMethod -import com.komoju.mobile.sdk.shared.generated.resources.Res -import com.komoju.mobile.sdk.shared.generated.resources.komoju_email -import com.komoju.mobile.sdk.shared.generated.resources.komoju_enter_your_email_address -import com.komoju.mobile.sdk.shared.generated.resources.komoju_enter_your_phone_number -import com.komoju.mobile.sdk.shared.generated.resources.komoju_first_name -import com.komoju.mobile.sdk.shared.generated.resources.komoju_first_name_phonetic -import com.komoju.mobile.sdk.shared.generated.resources.komoju_last_name -import com.komoju.mobile.sdk.shared.generated.resources.komoju_last_name_phonetic -import com.komoju.mobile.sdk.shared.generated.resources.komoju_pay -import com.komoju.mobile.sdk.shared.generated.resources.komoju_phone_number +import komoju_mobile_sdk.shared.generated.resources.Res import com.komoju.mobile.sdk.ui.composables.PrimaryButton import com.komoju.mobile.sdk.ui.screens.payment.CommonDisplayData import com.komoju.mobile.sdk.utils.AmountUtils +import komoju_mobile_sdk.shared.generated.resources.komoju_email +import komoju_mobile_sdk.shared.generated.resources.komoju_enter_your_email_address +import komoju_mobile_sdk.shared.generated.resources.komoju_enter_your_phone_number +import komoju_mobile_sdk.shared.generated.resources.komoju_first_name +import komoju_mobile_sdk.shared.generated.resources.komoju_first_name_phonetic +import komoju_mobile_sdk.shared.generated.resources.komoju_last_name +import komoju_mobile_sdk.shared.generated.resources.komoju_last_name_phonetic +import komoju_mobile_sdk.shared.generated.resources.komoju_pay +import komoju_mobile_sdk.shared.generated.resources.komoju_phone_number import org.jetbrains.compose.resources.stringResource @Composable diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PaymentMethodsRow.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PaymentMethodsRow.kt index 14fb1fb..a0b5423 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PaymentMethodsRow.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PaymentMethodsRow.kt @@ -21,40 +21,40 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.komoju.mobile.sdk.entities.PaymentMethod -import com.komoju.mobile.sdk.shared.generated.resources.Res -import com.komoju.mobile.sdk.shared.generated.resources.komoju_alipay -import com.komoju.mobile.sdk.shared.generated.resources.komoju_aupay -import com.komoju.mobile.sdk.shared.generated.resources.komoju_bank_transfer -import com.komoju.mobile.sdk.shared.generated.resources.komoju_bitcash -import com.komoju.mobile.sdk.shared.generated.resources.komoju_credit_card -import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_alipay -import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_au_pay -import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_bank_transfer -import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_bitcash -import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_credit_card -import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_konbini -import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_linepay -import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_merpay -import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_net_cash -import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_paidy -import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_pay_easy -import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_paypay -import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_rakuten_pay -import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_web_money -import com.komoju.mobile.sdk.shared.generated.resources.komoju_konbini -import com.komoju.mobile.sdk.shared.generated.resources.komoju_line_pay -import com.komoju.mobile.sdk.shared.generated.resources.komoju_merpay -import com.komoju.mobile.sdk.shared.generated.resources.komoju_netcash -import com.komoju.mobile.sdk.shared.generated.resources.komoju_other -import com.komoju.mobile.sdk.shared.generated.resources.komoju_paidy -import com.komoju.mobile.sdk.shared.generated.resources.komoju_payeasy -import com.komoju.mobile.sdk.shared.generated.resources.komoju_paypay -import com.komoju.mobile.sdk.shared.generated.resources.komoju_rakuten_pay -import com.komoju.mobile.sdk.shared.generated.resources.komoju_unknown -import com.komoju.mobile.sdk.shared.generated.resources.komoju_webmoney +import komoju_mobile_sdk.shared.generated.resources.Res import com.komoju.mobile.sdk.types.OffSitePaymentType import com.komoju.mobile.sdk.ui.theme.Gray200 import com.komoju.mobile.sdk.ui.theme.KomojuDarkGreen +import komoju_mobile_sdk.shared.generated.resources.komoju_alipay +import komoju_mobile_sdk.shared.generated.resources.komoju_aupay +import komoju_mobile_sdk.shared.generated.resources.komoju_bank_transfer +import komoju_mobile_sdk.shared.generated.resources.komoju_bitcash +import komoju_mobile_sdk.shared.generated.resources.komoju_credit_card +import komoju_mobile_sdk.shared.generated.resources.komoju_ic_alipay +import komoju_mobile_sdk.shared.generated.resources.komoju_ic_au_pay +import komoju_mobile_sdk.shared.generated.resources.komoju_ic_bank_transfer +import komoju_mobile_sdk.shared.generated.resources.komoju_ic_bitcash +import komoju_mobile_sdk.shared.generated.resources.komoju_ic_credit_card +import komoju_mobile_sdk.shared.generated.resources.komoju_ic_konbini +import komoju_mobile_sdk.shared.generated.resources.komoju_ic_linepay +import komoju_mobile_sdk.shared.generated.resources.komoju_ic_merpay +import komoju_mobile_sdk.shared.generated.resources.komoju_ic_net_cash +import komoju_mobile_sdk.shared.generated.resources.komoju_ic_paidy +import komoju_mobile_sdk.shared.generated.resources.komoju_ic_pay_easy +import komoju_mobile_sdk.shared.generated.resources.komoju_ic_paypay +import komoju_mobile_sdk.shared.generated.resources.komoju_ic_rakuten_pay +import komoju_mobile_sdk.shared.generated.resources.komoju_ic_web_money +import komoju_mobile_sdk.shared.generated.resources.komoju_konbini +import komoju_mobile_sdk.shared.generated.resources.komoju_line_pay +import komoju_mobile_sdk.shared.generated.resources.komoju_merpay +import komoju_mobile_sdk.shared.generated.resources.komoju_netcash +import komoju_mobile_sdk.shared.generated.resources.komoju_other +import komoju_mobile_sdk.shared.generated.resources.komoju_paidy +import komoju_mobile_sdk.shared.generated.resources.komoju_payeasy +import komoju_mobile_sdk.shared.generated.resources.komoju_paypay +import komoju_mobile_sdk.shared.generated.resources.komoju_rakuten_pay +import komoju_mobile_sdk.shared.generated.resources.komoju_unknown +import komoju_mobile_sdk.shared.generated.resources.komoju_webmoney import org.jetbrains.compose.resources.painterResource import org.jetbrains.compose.resources.stringResource import org.jetbrains.compose.ui.tooling.preview.Preview diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/WebMoneyForm.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/WebMoneyForm.kt index fd3c44b..ddd3aa7 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/WebMoneyForm.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/WebMoneyForm.kt @@ -12,13 +12,13 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import com.komoju.mobile.sdk.entities.PaymentMethod -import com.komoju.mobile.sdk.shared.generated.resources.Res -import com.komoju.mobile.sdk.shared.generated.resources.komoju_pay -import com.komoju.mobile.sdk.shared.generated.resources.komoju_prepaid_number -import com.komoju.mobile.sdk.shared.generated.resources.komoju_webmoney_information +import komoju_mobile_sdk.shared.generated.resources.Res import com.komoju.mobile.sdk.ui.composables.PrimaryButton import com.komoju.mobile.sdk.ui.screens.payment.WebMoneyDisplayData import com.komoju.mobile.sdk.utils.AmountUtils +import komoju_mobile_sdk.shared.generated.resources.komoju_pay +import komoju_mobile_sdk.shared.generated.resources.komoju_prepaid_number +import komoju_mobile_sdk.shared.generated.resources.komoju_webmoney_information import org.jetbrains.compose.resources.stringResource @Composable diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/success/PaymentSuccessScreen.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/success/PaymentSuccessScreen.kt index 13ad771..85f6c03 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/success/PaymentSuccessScreen.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/success/PaymentSuccessScreen.kt @@ -26,13 +26,13 @@ import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import com.komoju.mobile.sdk.KomojuMobileSDKPaymentResult import com.komoju.mobile.sdk.navigation.paymentResultScreenModel -import com.komoju.mobile.sdk.shared.generated.resources.Res -import com.komoju.mobile.sdk.shared.generated.resources.komoju_back_to_store -import com.komoju.mobile.sdk.shared.generated.resources.komoju_ic_payment_status_completed -import com.komoju.mobile.sdk.shared.generated.resources.komoju_payment_success -import com.komoju.mobile.sdk.shared.generated.resources.komoju_thank_you_for_your_order +import komoju_mobile_sdk.shared.generated.resources.Res import com.komoju.mobile.sdk.ui.composables.PrimaryButton import com.komoju.mobile.sdk.ui.screens.RouterEffect +import komoju_mobile_sdk.shared.generated.resources.komoju_back_to_store +import komoju_mobile_sdk.shared.generated.resources.komoju_ic_payment_status_completed +import komoju_mobile_sdk.shared.generated.resources.komoju_payment_success +import komoju_mobile_sdk.shared.generated.resources.komoju_thank_you_for_your_order import org.jetbrains.compose.resources.painterResource import org.jetbrains.compose.resources.stringResource diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/webview/WebViewScreen.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/webview/WebViewScreen.kt index 1636524..18b57ee 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/webview/WebViewScreen.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/webview/WebViewScreen.kt @@ -30,11 +30,7 @@ import cafe.adriel.voyager.core.annotation.InternalVoyagerApi import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.screen.Screen import cafe.adriel.voyager.navigator.internal.BackHandler -import com.komoju.mobile.sdk.shared.generated.resources.Res -import com.komoju.mobile.sdk.shared.generated.resources.komoju_are_you_sure_you_want_to_cancel_the_payment -import com.komoju.mobile.sdk.shared.generated.resources.komoju_cancel_payment -import com.komoju.mobile.sdk.shared.generated.resources.komoju_no -import com.komoju.mobile.sdk.shared.generated.resources.komoju_yes +import komoju_mobile_sdk.shared.generated.resources.Res import com.komoju.mobile.sdk.ui.screens.KomojuPaymentRoute import com.komoju.mobile.sdk.ui.screens.RouterEffect import com.komoju.mobile.sdk.ui.theme.LocalConfigurableTheme @@ -43,6 +39,10 @@ import com.multiplatform.webview.web.LoadingState import com.multiplatform.webview.web.WebView import com.multiplatform.webview.web.rememberWebViewNavigator import com.multiplatform.webview.web.rememberWebViewState +import komoju_mobile_sdk.shared.generated.resources.komoju_are_you_sure_you_want_to_cancel_the_payment +import komoju_mobile_sdk.shared.generated.resources.komoju_cancel_payment +import komoju_mobile_sdk.shared.generated.resources.komoju_no +import komoju_mobile_sdk.shared.generated.resources.komoju_yes import org.jetbrains.compose.resources.stringResource internal data class WebViewScreen(val route: KomojuPaymentRoute.WebView) : Screen { diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/theme/Typography.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/theme/Typography.kt index e86b962..1aa84f5 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/theme/Typography.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/theme/Typography.kt @@ -4,12 +4,12 @@ import androidx.compose.material3.Typography import androidx.compose.runtime.Composable import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontWeight -import com.komoju.mobile.sdk.shared.generated.resources.Res -import com.komoju.mobile.sdk.shared.generated.resources.komoju_font_inter_bold -import com.komoju.mobile.sdk.shared.generated.resources.komoju_font_inter_light -import com.komoju.mobile.sdk.shared.generated.resources.komoju_font_inter_medium -import com.komoju.mobile.sdk.shared.generated.resources.komoju_font_inter_regular -import com.komoju.mobile.sdk.shared.generated.resources.komoju_font_inter_semibold +import komoju_mobile_sdk.shared.generated.resources.Res +import komoju_mobile_sdk.shared.generated.resources.komoju_font_inter_bold +import komoju_mobile_sdk.shared.generated.resources.komoju_font_inter_light +import komoju_mobile_sdk.shared.generated.resources.komoju_font_inter_medium +import komoju_mobile_sdk.shared.generated.resources.komoju_font_inter_regular +import komoju_mobile_sdk.shared.generated.resources.komoju_font_inter_semibold import org.jetbrains.compose.resources.Font @Composable From 710ab80718a0d62a779e15af2db543e61f13d0fb Mon Sep 17 00:00:00 2001 From: amnix Date: Mon, 11 Nov 2024 19:05:18 +0900 Subject: [PATCH 04/11] Got rid of resources as iOS have issues with them. Used code based resources as of now. --- .editorconfig | 3 + shared/build.gradle.kts | 4 +- .../drawable/komoju_ic_alipay.xml | 10 - .../drawable/komoju_ic_amex.xml | 36 - .../drawable/komoju_ic_app_opens_info.xml | 19 - .../drawable/komoju_ic_au_pay.xml | 6 - .../drawable/komoju_ic_bank_transfer.xml | 10 - .../drawable/komoju_ic_bitcash.xml | 16 - .../drawable/komoju_ic_credit_card.xml | 15 - .../drawable/komoju_ic_cvv.xml | 27 - .../drawable/komoju_ic_daily_yamazaki.xml | 16 - .../drawable/komoju_ic_diners.xml | 18 - .../drawable/komoju_ic_family_mart.xml | 12 - .../drawable/komoju_ic_jcb.xml | 95 --- .../drawable/komoju_ic_konbini.xml | 25 - .../drawable/komoju_ic_lawson.xml | 35 - .../drawable/komoju_ic_linepay.xml | 15 - .../drawable/komoju_ic_master.xml | 22 - .../drawable/komoju_ic_merpay.xml | 24 - .../drawable/komoju_ic_ministop.xml | 12 - .../drawable/komoju_ic_net_cash.xml | 29 - .../drawable/komoju_ic_paidy.xml | 32 - .../drawable/komoju_ic_pay_easy.xml | 137 ---- .../komoju_ic_payment_status_completed.xml | 9 - .../komoju_ic_payment_status_failed.xml | 9 - ...moju_ic_payment_status_konbini_pending.xml | 19 - .../komoju_ic_payment_status_prenidng.xml | 12 - .../drawable/komoju_ic_paypay.xml | 9 - .../drawable/komoju_ic_rakuten_pay.xml | 10 - .../drawable/komoju_ic_seico_mart.xml | 40 -- .../drawable/komoju_ic_seven_eleven.xml | 30 - .../drawable/komoju_ic_visa.xml | 20 - .../drawable/komoju_ic_web_money.xml | 99 --- .../drawable/komoju_img_payment_footer.xml | 60 -- .../font/komoju_font_inter_bold.ttf | Bin 344152 -> 0 bytes .../font/komoju_font_inter_light.ttf | Bin 343704 -> 0 bytes .../font/komoju_font_inter_medium.ttf | Bin 343200 -> 0 bytes .../font/komoju_font_inter_regular.ttf | Bin 342680 -> 0 bytes .../font/komoju_font_inter_semibold.ttf | Bin 343828 -> 0 bytes .../composeResources/values-ja/strings.xml | 120 ---- .../composeResources/values/strings.xml | 121 ---- .../komoju/mobile/sdk/i18n/EnglishStrings.kt | 129 ++++ .../komoju/mobile/sdk/i18n/I18nStringKey.kt | 121 ++++ .../mobile/sdk/i18n/I18nStringResource.kt | 21 + .../com/komoju/mobile/sdk/i18n/I18nStrings.kt | 9 + .../komoju/mobile/sdk/i18n/KomojuLanguage.kt | 6 + .../mobile/sdk/ui/icon/KomojuIcAlipay.kt | 69 ++ .../komoju/mobile/sdk/ui/icon/KomojuIcAmex.kt | 157 +++++ .../sdk/ui/icon/KomojuIcAppOpensInfo.kt | 70 ++ .../mobile/sdk/ui/icon/KomojuIcAuPay.kt | 104 +++ .../sdk/ui/icon/KomojuIcBankTransfer.kt | 84 +++ .../mobile/sdk/ui/icon/KomojuIcBitcash.kt | 89 +++ .../mobile/sdk/ui/icon/KomojuIcCreditCard.kt | 72 ++ .../komoju/mobile/sdk/ui/icon/KomojuIcCvv.kt | 125 ++++ .../sdk/ui/icon/KomojuIcDailyYamazaki.kt | 664 ++++++++++++++++++ .../mobile/sdk/ui/icon/KomojuIcDiners.kt | 83 +++ .../mobile/sdk/ui/icon/KomojuIcFamilyMart.kt | 216 ++++++ .../komoju/mobile/sdk/ui/icon/KomojuIcJcb.kt | 178 +++++ .../mobile/sdk/ui/icon/KomojuIcKonbini.kt | 91 +++ .../mobile/sdk/ui/icon/KomojuIcLawson.kt | 286 ++++++++ .../mobile/sdk/ui/icon/KomojuIcLinepay.kt | 165 +++++ .../mobile/sdk/ui/icon/KomojuIcMaster.kt | 70 ++ .../mobile/sdk/ui/icon/KomojuIcMerpay.kt | 129 ++++ .../mobile/sdk/ui/icon/KomojuIcMinistop.kt | 257 +++++++ .../mobile/sdk/ui/icon/KomojuIcNetCash.kt | 150 ++++ .../mobile/sdk/ui/icon/KomojuIcPaidy.kt | 215 ++++++ .../mobile/sdk/ui/icon/KomojuIcPayEasy.kt | 218 ++++++ .../ui/icon/KomojuIcPaymentStatusCompleted.kt | 48 ++ .../ui/icon/KomojuIcPaymentStatusFailed.kt | 64 ++ .../KomojuIcPaymentStatusKonbiniPending.kt | 80 +++ .../ui/icon/KomojuIcPaymentStatusPrenidng.kt | 48 ++ .../mobile/sdk/ui/icon/KomojuIcPaypay.kt | 53 ++ .../mobile/sdk/ui/icon/KomojuIcRakutenPay.kt | 100 +++ .../mobile/sdk/ui/icon/KomojuIcSeicoMart.kt | 205 ++++++ .../mobile/sdk/ui/icon/KomojuIcSevenEleven.kt | 165 +++++ .../komoju/mobile/sdk/ui/icon/KomojuIcVisa.kt | 116 +++ .../mobile/sdk/ui/icon/KomojuIcWebMoney.kt | 105 +++ .../komoju/mobile/sdk/ui/icon/KomojuIcon.kt | 3 + .../sdk/ui/icon/KomojuImgPaymentFooter.kt | 637 +++++++++++++++++ .../awating/KonbiniAwaitingPaymentScreen.kt | 75 +- .../ui/screens/failed/PaymentFailedScreen.kt | 25 +- .../ui/screens/payment/KomojuPaymentScreen.kt | 14 +- .../payment/KomojuPaymentScreenModel.kt | 118 ++-- .../screens/payment/KomojuPaymentUIState.kt | 36 +- .../screens/payment/composables/BankForm.kt | 51 +- .../payment/composables/BitCashForm.kt | 15 +- .../payment/composables/CompatTextField.kt | 6 +- .../payment/composables/CreditCardForm.kt | 40 +- .../composables/CreditCardSchemeIcons.kt | 30 +- .../payment/composables/KonbiniBrandsRow.kt | 51 +- .../payment/composables/KonbiniForm.kt | 25 +- .../payment/composables/NetCashForm.kt | 15 +- .../payment/composables/OffSitePayForm.kt | 74 +- .../screens/payment/composables/PaidyForm.kt | 23 +- .../payment/composables/PayEasyForm.kt | 51 +- .../payment/composables/PaymentMethodsRow.kt | 117 ++- .../payment/composables/WebMoneyForm.kt | 15 +- .../screens/success/PaymentSuccessScreen.kt | 20 +- .../sdk/ui/screens/webview/WebViewScreen.kt | 16 +- .../com/komoju/mobile/sdk/ui/theme/Theme.kt | 10 +- .../komoju/mobile/sdk/ui/theme/Typography.kt | 44 -- 101 files changed, 5758 insertions(+), 1691 deletions(-) delete mode 100644 shared/src/commonMain/composeResources/drawable/komoju_ic_alipay.xml delete mode 100644 shared/src/commonMain/composeResources/drawable/komoju_ic_amex.xml delete mode 100644 shared/src/commonMain/composeResources/drawable/komoju_ic_app_opens_info.xml delete mode 100644 shared/src/commonMain/composeResources/drawable/komoju_ic_au_pay.xml delete mode 100644 shared/src/commonMain/composeResources/drawable/komoju_ic_bank_transfer.xml delete mode 100644 shared/src/commonMain/composeResources/drawable/komoju_ic_bitcash.xml delete mode 100644 shared/src/commonMain/composeResources/drawable/komoju_ic_credit_card.xml delete mode 100644 shared/src/commonMain/composeResources/drawable/komoju_ic_cvv.xml delete mode 100644 shared/src/commonMain/composeResources/drawable/komoju_ic_daily_yamazaki.xml delete mode 100644 shared/src/commonMain/composeResources/drawable/komoju_ic_diners.xml delete mode 100644 shared/src/commonMain/composeResources/drawable/komoju_ic_family_mart.xml delete mode 100644 shared/src/commonMain/composeResources/drawable/komoju_ic_jcb.xml delete mode 100644 shared/src/commonMain/composeResources/drawable/komoju_ic_konbini.xml delete mode 100644 shared/src/commonMain/composeResources/drawable/komoju_ic_lawson.xml delete mode 100644 shared/src/commonMain/composeResources/drawable/komoju_ic_linepay.xml delete mode 100644 shared/src/commonMain/composeResources/drawable/komoju_ic_master.xml delete mode 100644 shared/src/commonMain/composeResources/drawable/komoju_ic_merpay.xml delete mode 100644 shared/src/commonMain/composeResources/drawable/komoju_ic_ministop.xml delete mode 100644 shared/src/commonMain/composeResources/drawable/komoju_ic_net_cash.xml delete mode 100644 shared/src/commonMain/composeResources/drawable/komoju_ic_paidy.xml delete mode 100644 shared/src/commonMain/composeResources/drawable/komoju_ic_pay_easy.xml delete mode 100644 shared/src/commonMain/composeResources/drawable/komoju_ic_payment_status_completed.xml delete mode 100644 shared/src/commonMain/composeResources/drawable/komoju_ic_payment_status_failed.xml delete mode 100644 shared/src/commonMain/composeResources/drawable/komoju_ic_payment_status_konbini_pending.xml delete mode 100644 shared/src/commonMain/composeResources/drawable/komoju_ic_payment_status_prenidng.xml delete mode 100644 shared/src/commonMain/composeResources/drawable/komoju_ic_paypay.xml delete mode 100644 shared/src/commonMain/composeResources/drawable/komoju_ic_rakuten_pay.xml delete mode 100644 shared/src/commonMain/composeResources/drawable/komoju_ic_seico_mart.xml delete mode 100644 shared/src/commonMain/composeResources/drawable/komoju_ic_seven_eleven.xml delete mode 100644 shared/src/commonMain/composeResources/drawable/komoju_ic_visa.xml delete mode 100644 shared/src/commonMain/composeResources/drawable/komoju_ic_web_money.xml delete mode 100644 shared/src/commonMain/composeResources/drawable/komoju_img_payment_footer.xml delete mode 100644 shared/src/commonMain/composeResources/font/komoju_font_inter_bold.ttf delete mode 100644 shared/src/commonMain/composeResources/font/komoju_font_inter_light.ttf delete mode 100644 shared/src/commonMain/composeResources/font/komoju_font_inter_medium.ttf delete mode 100644 shared/src/commonMain/composeResources/font/komoju_font_inter_regular.ttf delete mode 100644 shared/src/commonMain/composeResources/font/komoju_font_inter_semibold.ttf delete mode 100644 shared/src/commonMain/composeResources/values-ja/strings.xml delete mode 100644 shared/src/commonMain/composeResources/values/strings.xml create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/EnglishStrings.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/I18nStringKey.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/I18nStringResource.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/I18nStrings.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/KomojuLanguage.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcAlipay.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcAmex.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcAppOpensInfo.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcAuPay.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcBankTransfer.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcBitcash.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcCreditCard.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcCvv.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcDailyYamazaki.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcDiners.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcFamilyMart.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcJcb.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcKonbini.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcLawson.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcLinepay.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcMaster.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcMerpay.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcMinistop.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcNetCash.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcPaidy.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcPayEasy.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcPaymentStatusCompleted.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcPaymentStatusFailed.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcPaymentStatusKonbiniPending.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcPaymentStatusPrenidng.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcPaypay.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcRakutenPay.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcSeicoMart.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcSevenEleven.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcVisa.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcWebMoney.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcon.kt create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuImgPaymentFooter.kt delete mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/theme/Typography.kt diff --git a/.editorconfig b/.editorconfig index 580b6ec..6b5ea13 100644 --- a/.editorconfig +++ b/.editorconfig @@ -23,3 +23,6 @@ ktlint_standard_filename = disabled ktlint_standard_package-name = disabled ktlint_standard_enum-entry-name-case = disabled ktlint_standard_function-naming = disabled + +[shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/**] +ktlint_standard_backing-property-naming = disabled diff --git a/shared/build.gradle.kts b/shared/build.gradle.kts index fb9acd1..cc5b6fc 100644 --- a/shared/build.gradle.kts +++ b/shared/build.gradle.kts @@ -102,9 +102,7 @@ dependencies { compose { resources { - publicResClass = true - //packageOfResClass = "com.komoju.mobile.sdk.shared.generated.resources" - generateResClass = always + generateResClass = never } } diff --git a/shared/src/commonMain/composeResources/drawable/komoju_ic_alipay.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_alipay.xml deleted file mode 100644 index 9d20633..0000000 --- a/shared/src/commonMain/composeResources/drawable/komoju_ic_alipay.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/shared/src/commonMain/composeResources/drawable/komoju_ic_amex.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_amex.xml deleted file mode 100644 index 0bbbfcc..0000000 --- a/shared/src/commonMain/composeResources/drawable/komoju_ic_amex.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - diff --git a/shared/src/commonMain/composeResources/drawable/komoju_ic_app_opens_info.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_app_opens_info.xml deleted file mode 100644 index 95b5851..0000000 --- a/shared/src/commonMain/composeResources/drawable/komoju_ic_app_opens_info.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - diff --git a/shared/src/commonMain/composeResources/drawable/komoju_ic_au_pay.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_au_pay.xml deleted file mode 100644 index 3ee368f..0000000 --- a/shared/src/commonMain/composeResources/drawable/komoju_ic_au_pay.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - diff --git a/shared/src/commonMain/composeResources/drawable/komoju_ic_bank_transfer.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_bank_transfer.xml deleted file mode 100644 index 39ef205..0000000 --- a/shared/src/commonMain/composeResources/drawable/komoju_ic_bank_transfer.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/shared/src/commonMain/composeResources/drawable/komoju_ic_bitcash.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_bitcash.xml deleted file mode 100644 index ac13afd..0000000 --- a/shared/src/commonMain/composeResources/drawable/komoju_ic_bitcash.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - diff --git a/shared/src/commonMain/composeResources/drawable/komoju_ic_credit_card.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_credit_card.xml deleted file mode 100644 index e031440..0000000 --- a/shared/src/commonMain/composeResources/drawable/komoju_ic_credit_card.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - diff --git a/shared/src/commonMain/composeResources/drawable/komoju_ic_cvv.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_cvv.xml deleted file mode 100644 index 5882e99..0000000 --- a/shared/src/commonMain/composeResources/drawable/komoju_ic_cvv.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - diff --git a/shared/src/commonMain/composeResources/drawable/komoju_ic_daily_yamazaki.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_daily_yamazaki.xml deleted file mode 100644 index f3835e0..0000000 --- a/shared/src/commonMain/composeResources/drawable/komoju_ic_daily_yamazaki.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - diff --git a/shared/src/commonMain/composeResources/drawable/komoju_ic_diners.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_diners.xml deleted file mode 100644 index 5f9edaa..0000000 --- a/shared/src/commonMain/composeResources/drawable/komoju_ic_diners.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - diff --git a/shared/src/commonMain/composeResources/drawable/komoju_ic_family_mart.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_family_mart.xml deleted file mode 100644 index 69cb4d5..0000000 --- a/shared/src/commonMain/composeResources/drawable/komoju_ic_family_mart.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - diff --git a/shared/src/commonMain/composeResources/drawable/komoju_ic_jcb.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_jcb.xml deleted file mode 100644 index 7c68f03..0000000 --- a/shared/src/commonMain/composeResources/drawable/komoju_ic_jcb.xml +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/shared/src/commonMain/composeResources/drawable/komoju_ic_konbini.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_konbini.xml deleted file mode 100644 index a48aa8f..0000000 --- a/shared/src/commonMain/composeResources/drawable/komoju_ic_konbini.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - diff --git a/shared/src/commonMain/composeResources/drawable/komoju_ic_lawson.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_lawson.xml deleted file mode 100644 index bf59d13..0000000 --- a/shared/src/commonMain/composeResources/drawable/komoju_ic_lawson.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - diff --git a/shared/src/commonMain/composeResources/drawable/komoju_ic_linepay.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_linepay.xml deleted file mode 100644 index 4526151..0000000 --- a/shared/src/commonMain/composeResources/drawable/komoju_ic_linepay.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - \ No newline at end of file diff --git a/shared/src/commonMain/composeResources/drawable/komoju_ic_master.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_master.xml deleted file mode 100644 index 0108c5e..0000000 --- a/shared/src/commonMain/composeResources/drawable/komoju_ic_master.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - diff --git a/shared/src/commonMain/composeResources/drawable/komoju_ic_merpay.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_merpay.xml deleted file mode 100644 index 708c343..0000000 --- a/shared/src/commonMain/composeResources/drawable/komoju_ic_merpay.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - diff --git a/shared/src/commonMain/composeResources/drawable/komoju_ic_ministop.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_ministop.xml deleted file mode 100644 index 2862eeb..0000000 --- a/shared/src/commonMain/composeResources/drawable/komoju_ic_ministop.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - diff --git a/shared/src/commonMain/composeResources/drawable/komoju_ic_net_cash.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_net_cash.xml deleted file mode 100644 index bcab96a..0000000 --- a/shared/src/commonMain/composeResources/drawable/komoju_ic_net_cash.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - diff --git a/shared/src/commonMain/composeResources/drawable/komoju_ic_paidy.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_paidy.xml deleted file mode 100644 index 98be004..0000000 --- a/shared/src/commonMain/composeResources/drawable/komoju_ic_paidy.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/shared/src/commonMain/composeResources/drawable/komoju_ic_pay_easy.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_pay_easy.xml deleted file mode 100644 index d3a4a03..0000000 --- a/shared/src/commonMain/composeResources/drawable/komoju_ic_pay_easy.xml +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/shared/src/commonMain/composeResources/drawable/komoju_ic_payment_status_completed.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_payment_status_completed.xml deleted file mode 100644 index f320a46..0000000 --- a/shared/src/commonMain/composeResources/drawable/komoju_ic_payment_status_completed.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/shared/src/commonMain/composeResources/drawable/komoju_ic_payment_status_failed.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_payment_status_failed.xml deleted file mode 100644 index c888d57..0000000 --- a/shared/src/commonMain/composeResources/drawable/komoju_ic_payment_status_failed.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/shared/src/commonMain/composeResources/drawable/komoju_ic_payment_status_konbini_pending.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_payment_status_konbini_pending.xml deleted file mode 100644 index a842789..0000000 --- a/shared/src/commonMain/composeResources/drawable/komoju_ic_payment_status_konbini_pending.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - diff --git a/shared/src/commonMain/composeResources/drawable/komoju_ic_payment_status_prenidng.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_payment_status_prenidng.xml deleted file mode 100644 index 30a955a..0000000 --- a/shared/src/commonMain/composeResources/drawable/komoju_ic_payment_status_prenidng.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - diff --git a/shared/src/commonMain/composeResources/drawable/komoju_ic_paypay.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_paypay.xml deleted file mode 100644 index 748f4d6..0000000 --- a/shared/src/commonMain/composeResources/drawable/komoju_ic_paypay.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/shared/src/commonMain/composeResources/drawable/komoju_ic_rakuten_pay.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_rakuten_pay.xml deleted file mode 100644 index 979e8e5..0000000 --- a/shared/src/commonMain/composeResources/drawable/komoju_ic_rakuten_pay.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/shared/src/commonMain/composeResources/drawable/komoju_ic_seico_mart.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_seico_mart.xml deleted file mode 100644 index 4e63e2b..0000000 --- a/shared/src/commonMain/composeResources/drawable/komoju_ic_seico_mart.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/shared/src/commonMain/composeResources/drawable/komoju_ic_seven_eleven.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_seven_eleven.xml deleted file mode 100644 index dd4de8d..0000000 --- a/shared/src/commonMain/composeResources/drawable/komoju_ic_seven_eleven.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - diff --git a/shared/src/commonMain/composeResources/drawable/komoju_ic_visa.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_visa.xml deleted file mode 100644 index 08ac4de..0000000 --- a/shared/src/commonMain/composeResources/drawable/komoju_ic_visa.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - diff --git a/shared/src/commonMain/composeResources/drawable/komoju_ic_web_money.xml b/shared/src/commonMain/composeResources/drawable/komoju_ic_web_money.xml deleted file mode 100644 index 911b9c0..0000000 --- a/shared/src/commonMain/composeResources/drawable/komoju_ic_web_money.xml +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/shared/src/commonMain/composeResources/drawable/komoju_img_payment_footer.xml b/shared/src/commonMain/composeResources/drawable/komoju_img_payment_footer.xml deleted file mode 100644 index 2a4c309..0000000 --- a/shared/src/commonMain/composeResources/drawable/komoju_img_payment_footer.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/shared/src/commonMain/composeResources/font/komoju_font_inter_bold.ttf b/shared/src/commonMain/composeResources/font/komoju_font_inter_bold.ttf deleted file mode 100644 index cd13f60ce1987656c23484e5468d82dcaf6689a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 344152 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�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 z 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
+kfm`VHw1%7c3;ipS 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
HleY zYFXkxZ?`~eymUZnPs=p_OMAFd;G_xE;Kd9fe=}|i+~hu}-hPhe_NWe@t385T9bRIC zKyD5AP3{5Fp46E}kI5}i9X_8S%w@)78P{T_8i{JZrmGP2R+iO;50M}V9+IlF&fK@~ z(sscP3wCUU8i!HW($puZIgQ3eHrs`oLm?QwJ>HsvTP(tIxR(@2GkH;ASi-TZdP=Qp z4LL}w1|C|x>8IH{`1Mb>e!#!om~(1&T=zkp`)`}Rb@twY9g{+R{TgB66wW*|dikS0 zXZSy>Rx{m^vU|Im-)@k)D0S?XZb0M!hixMB6jZ2MZ zr4GjHlU7AVt(pXv-=}AdrF^1+J*0?RT;+XzGS-u?W%P!^uDG zTXz4H@4%NonOnBHWcJ^G&n{VAR(k!V0bNc$DBJh*q`X&W7QH$K5+SG&M#Xz1RknZO zRT+{L6;6hN3NNO2scL}FmZsDQpTktCt&V4|RsyLyyo6n-5l<;wX@Lu4L8WINyIUiC zzV>cb^>HnhQq=ZHRZ13WpYXuVCG`>GHjl5C&&}hk<#Y3RYx&$f?pi)KkH41B&3vHG z&3v%XZ{|lWpPTt2@RKQCb^KNML;0ubysP}7d9USrRpo_DZ!tgmyV?;>{hkSKrdRzO zt0A5DQGQZ}!6+vO0=?}-c|oQ+6WCBG?^!GZY1`hnP=u^)Qz?-78UO0mvo-F#hjcam z&U_{BmTm3N@jinf?9RosU-D zj#-+Wy`*pKvdm#i`$6v^P^k2QQfO$?3@?*5$R1z^rvGP$2zi`eH^@6Dc;xiC8W z!czVZs}tF;UnGC{Zr{W~v3S~I^Qyr!8tY@H_8Yc1=BMz$u-?bR0{khl7ahq{&=F3Y z5o#LK6yAm3P!jG}(A5u-G$BvX6@sR^v>CWK_=;vyHgi-PvNrq&(HLg=J)T6^FzYvI zHNhyFSlNrRo$8TO&5fVcwG@Mbp;$w<6RcLZ6t^y|9QCc`{)hQb#+c#kMgE>$y)OK$ z)U9deysgP>a>Xv=Wfn~UY4Vbz4=@BIlj%fAri_eXjn>~Nwl#dz=+m#a-866nf`$VshfXMKGoXrSX4bGfVPqAMyGIRYP zb>bA7I3#LNz*-CyqgJNy8wMW0S$hM!%p_^KaT2b?O_i2nG?cUANB5x>=t>lQS!r`o zj4D(%h*6QyZ2?M579|~+d5AjigK)(l6OU1>;oJE4z{n%mYsPPlALGsh6(uR+?+KrK zV{tVmz(un(4W6PLN|iJ#dls|svrP%Z4ve1@l^qzrJd^to`cRg|>sPW}KgBOPnpN=f zvJM|Kj~fvlJE<2RuJxA4hpS^yZiyMWCuk3oJL9JiQ=KemM=*-0N8&pqKt_>s1Tv{o zebYNEjbCP=eDBBnTFO?02+V`n%`@awV+qi}sMQSu8j*WOIV+TzV`hXSTQ!b|4F@kK z2wwa!SswS}j}>dIkP$~E7+s4&QZ?A10O%w*Ui{7 z^^bN5%SN+`@?&x~zxeip0*urVv*jSx(qHNCX1u2$ZqRTipnP&QGt8)s@q{UAF5|4%Y5r{kx1l0~;xu!1t>8({H+9Xc&T z10!)z>R=TajAxSg4f%ig3r1YHf1mBd^PRX8h;IT1YF42yQDsILP^8nXYnaPc_+)#l zn%tgdyj2SAE5ogO&}6!c7^O;msH}i`q1Tiw^bE-+r6uUi!Xq4o{5nx5XOem&E<^v} zGy|@U$M;l&^K0w~|5t-^&OW|k1xJe1Ui!J0UuQl^(<36LC-Lja^fQ_HJZ5lyJ7n9) zkvlRnc8nakZHRG$Ve-Q=Q0~S_-z3>77# z8XDEWz3qYzP|d6_E@%e6^)B=07q5ABbWGpJ6Lk8!N}Y&aEdqM`UFUlwPpLiM&a#c4 z@dJ^C8SO`{rT3Yk=#&pg2*jO35(21bmAwksgPgoxU=P8g&2X?6`H3n#oWYz@m!T2^ z;8~G=tJ+J!9&`oZWM8qqp+jn;l3azz7~_ahg2t%BxW&NOwQ z|Br^JBMpcybP@QeN)N4GY$;VU$+Tz>lCN36)z`+2yS5tFQoO$(kdZNfpOO9@esI$G zLr_>1+hcq7ir4f>10Yhb<6r?fS4kZ+p>t$qX)JctwZg({tBijU!ePUJke1Z+syNm0 z>%J01V@Ia<)|5c}6xC*w%cAa#f$m|D_9E|#Tyu}|RO3kIIkKi+SHJe!Ypel(!1q?| z+uR4`^!@+nqm<9C-Ur6#fkAbo@hN{{bsBVar7ti(p^yx9z)Lml5hKjPMkDrGL^lxA zpt6B9UQKJ`RMs|O;J^g_5*zTz{rjJkLjaPbo=MF6UiWSxp}(Ksv**0HynNxo1Kx{% z!+iBaowFedJ$T!m3_@h4xK~SxbEl*@_3-J4exe(+Z(W9TwqwaD9!oJw?=2>2DTy0p*K{W_dV>vi18k6}b=1VqvNo_WR>|!XPAYh6C=-GmdGEt7 zQ}QIc1E{rje^=p!l>;hL<)+I5$50XKo|F62yXdSz^F{BoFF$@Ouh5uO#%zvYtgHJj z|72;>Ip37oz5C1@Fh8RducP~TX0D{2b0}&~yo24yKv{HrHs%MCr(D8N?V+KtUHj3^ z8_LQ+$?RQxCJTLFyU%Uc>}6y98}V;2zF#EIS<~)zsh|w?ft7yB9sLe)2`areE`oT% z;Y4m9Y!t%F}f3+iSOhA{EZhn2bI(l`w^!%dt zCQN*PQO4+w1N;J_J2!M`5;J{!1LjmjM$=CLM`e2q5ywt3c{Fy;c`@hv*>p zI;<(J0m`gDYFYzZh79owg`92JOzYBTg-DEe0oQ*06u%s}^B zf@o!9`k_Vw*gzKiA)X|~3K($&4A(+}(;&;4xZ zt8dn`{Yj_v={poV&KT6VJSq4|RvRMN5e_;B=AwtY7xt$+Bu_?ANr%5ucmA<7h557H z{M&OwHU==y(Hjzn8Y89i#z>kyN%v{Rk3aG^_S@FEHR77w`?D{vPx|DGPa!jDI9JgP zQS}gjeN$6YLK`D7#n1$qW0*C$u;N$Qe(=O@-3pWW@BAaF*RhB58C&>hX2of#?LRCa zCo*D8c)6$U&7&g53~Vv6|9cb8@vm^R#r@or%kl@?w(*a4 z?UFA1*~Hg%%vXmFeVN(iki>l}~J`8>L=!{r;y-*x^4fAFB!%E^;gMwEL=@2pwF z?AEM-%psbp@1>D#Plx0PEL}!hGc(XrpN=eu=`KB*DAnN~>U@oMVfO>242c`AODpBw z;pskU_6x?W}IPYqY>%=byMh-O)_3^e}ftRdzfrE z{4kk0utxP+GyG|4&l<6&d_wR$Phurh@MA zDAiO2Hlt@(7R0@0RTyCvZ^~g$RT}KU+O@3Z+O=Q+E}!b&&=`R8i?}XDGe$!<7yIe1 zoA_u2{?3vZTOrx;!}omByY}%-_Wo7cwt6+cyk-r@as^jEEMvXje3PGDYV3kBAHhQN z!$PBF+=hIn5o(6ImRzQ%XgGYdDBX^k#3KdJAL_DGgBTRokpAma}bj-~5 zk*%XU2K3+|*Nl%Y8~tC~7rW3Uv~{XakLc(@%T5de4mOy@ui?Myw z3z)ZaSfhlq2ZN;#!J{L6Rvw#DXYAYCeT@U5>ryL&bldb>Kn8XYZ4;-c6>c7&^D0+3 zz%6I+iSD>apDpV95r6ae85Z)+?5_@vZNT4c5Ik^9&nd^Vvrf#&-_Gl)PQ zAe^Y9hL(C5D#>kB5~*-@^z{;=bliEfeE;dH@7@W&5ykZEY--Vg+D4q(ua#; zo{0`&%ba-z0`BT2LW&#Pz;hO%?x1=DNrd*GNsx7%UNhw_8%JwNS7(@AP`k)Xf5!h~ z2HS=)BZE66&*NV-?3r2+R zemH1f9sZJQlKv=lj3KzD8&auUMSP)9Ji-S1y zv`MxZK}QGeFrb}p1N_y^l6T8SoHtyj5m3J4XahLfYyFGs7Cr%HVT|6i>D6sqBzPixz zmc6$u8pJ0)E%gHeIlZz}za0S(^<7LX66gu@Bc&Fpa5e>l#HVC>EAJRz`%3EFiGQ2f zuk(N|aQeC1wM?1Vr(lJfZOhELv02-P@#`I9JEo@VY#x>BW*bi%W285-2DKj)X^c^Z zE%uJ`8WP(nwqx?ETa4k-o4p3OjRZL>us6Pg5LkUWNhBe(;Diog>Vpz7;qZ9?08?g# zWW4eklGj7xc|8A;9cS+BYTojZmObgTK-8M{X3?Ha=PH~X2#E9aQ|0dC8`JhbWKg0UZM zI<)T_*5k+#{`xoaY2C}< z{oFmY+hlaz&xH=`Fxn96@`K6bB>%d9Kfih4fbliuzH!yZ{D-yAv$n6k%G&PcKd_Xo z7q0j_9;m(hYRl1><4&aBOcSmEp>N`gITlXLu?!?F}EAcH7h7R5kpDDWUkAa6!3B zN%M^drNrG|7xtdfKV{vJ$u|$c9a4W@ap?GXe)nOoQQar!RlH$Hd3X?;bM}$(sq>Q? z)mPHDkDc~v{(rftJu(AtbV?0L8UwrT!` zg*+4gK=__QpKc-3^GEdezl)~daLf5g$_(3@34xXx*adY@c(%G54fm~?tdKLnR|B^yNH0XBTYd;X-kKtg96ff zu^?6~peVK|_FiI&T|r}_Df+}{)FjrZiN>fgnqp#!Mop|qZ0uhC@0oiSP}e+pUf<8} z|4I<1WQIIYW|}x*{IDO{{MKaS&Q~Ib?!FJQk0sljAl)y#YkaLdJ}ttuc`Y z4vCB&>M#8~^Y)rGf6R#3xac9Bc#+)H4;d01(ce3uq|b_QU`_Fjm4KDCfz~?A`0{z{nlE;qf5vSR!4#rDhSu`E__{TwJL>a!SUW zIlV`P=mvy`57!gvM>_xh%C~--wtCXA6@8Y~s;tMIoDrPo;gug8obP?rBP%c<)1y~b z@bsgjM}9hP@|IT`H7{76JN4*jjQJdlK#WYB;bH+v@x~b`v$a_hOSWasq2*tdOU1$z zsk0gyz4bler1Xh#Zew@^lKkPK1&_Xyj$PtgpaAPE^D=8_l)!M+I$GJ`ZnP(>TzQbt z(JSvS5J^`dY(yB2@xsgc#7*ri{ShWCGmdo7c3)FawC&ZH`Hx$V`LZ%F-z#E5V&6%T zfu4>+ml|n-Z+PsCox|R^ITMmcfbZvg?r>pC9~8NN!yON=ounxZBq-B|jpY*D4ilCd zM>%M?1kcTuPSp{%EByLNqv%{Fy2iVr?yS?luMXSrt zRpqCw{$>91EAyI5=Ua`>88|!A!hY1^zO&C(EO`8O+}Mb)vN+%TXy@>;)=BRXn=kf~ zZr_xQIW#Fbuk_r~knEn5e_V(fc@SOEr}y}%Zn6DzaTPJ>a8M4!RC!30Vlsu|O}5ez z#_nQE<1+E2g^{iQn9!K~U-JRst_tD9lrR4}?`Ld+$_yvgi!Ym(tW3Klw=>>FqwHp<(E}WnrPE@u36!dm2IzDHtw(%5p`5m1^5pN(+|+mwVrtaL0O)jSwR80Ug!WB zczx%j`c{3-E2r%~-u5_4MN2T7rfo;c{lPQ>)U~?7j*Bt0Z28r>Er^S$!bdJnn)PkP zf~VEx-=aO%{QRnKK~&f9v2n5EBEm~;OTU1$DQS?aEDU3_B3{L^I(W*seb88++KHJo!INjKwB0S^dhNE<%q7{d6B zlQ)7~Fy!-w|3h4W0`iv*nXqVR<_u(dQ~sG@CihcX{^rAFg#$z&Y#X)t}vjHa*nNI$Q(066gq$D-rIqtPek2(sJ;&TKKwganoahqu8CUp@!I!mSop2MwYSLu5&?{# zc-&zAjaQnS*f-8if2uu8FETvUf5-t5vFjK_^@W@wY(xs9`7Lrd%QSh)b)IL3be$g2 zxPbO5E8Y_LF5%y+VOtU4FTm3=?{PbM3hd;}b&j%wC|sApCXwAb#lS$ICFlce|H#x< zhjF=K6So$RPjMKqhc+$VIx#GF+=@K|98$&`3!c!jRYjvdn6V+XJIGNK~6{Xg@Gzlx%2@R$nUkM7052& zv6Uw*c z_sk5Iz6lD^^$$s2HKq4czrm4xlFrzS{IoP{R$0KOHlF^SJ!9>IU3%sZ3padAm&Gkx zpEqplfP%IC!z+fk{n#Tjz&F)BZr1LS8Rs{8d4%hk+KS_?p*SREey7ZjLLg^m8gC0u z>v22a$&;teu|mC$`HkIb75JV7k?IB6|A4!C?6o2KHgo$77|0O+6p-LJgUNvck}n)5EJ*L#eQ>0Af~#9b=#qm2`+YQN(tE)U zk=c=*CFcf(h8z}axO^*kp;w5L`6vNg1A`~zmf=eo9F>tT4HZ4a0gBwbhnPADdJ~NG zih9i)qP?wT7aQIN^uAk`J}TWK-P;FplTNhqr#VZ0o?JF4Al^xqd*DDi&tbws$Xy)e zmC)TSGi33hf&F$)ocvypV+7z4k;L!#r4Rq5D ziXyggV?w7*l&*h*P>W4wzC{v9;+y5tZt2apuS-EEL1Zh4ECmr*V^Ux{hc(Z7E4hC7 zuykD;aqa2MU(v%%D9r7H@7`gw=7@Buv~?*%rVlS(thuLTAgTh;j8tfP!%BhuY{8*J zD0Bn40M{ z^b6W!#K$vY`b}Q{#ZafrsYXxI^ncM-AhFQBUVwk4t*GHE++Ai@vU5gs|H(#AF3I}I z{iA2>qy^GnOoo4{ub|d4q!jHD^>J0K3hupn7J8Q5c4l@u=FBD!b!Yi`XXRkP#?})R z%WogS#Oa2~K-93VW+O7AC%Xamd|Wos;aBMm!;EQsvTU#TE$hYV0@74T! zE54WV?=}3p0N;`PdmaCtT^o&l#8k8mrgStb``*aEGirNik7%l}%vND~{Q(ALOPJkS z^Ce92q3&npDG;5VmMFjJdw*Z~+c4cpoa1C@^w*WYq^nNiYy?<*>PE)GlVU#mOQ^Vd zRi#l)N2sbL;yrF^U`n^UY>8qkJUg*rR=4K#1#^S5&Q`#WTKO$#rvAJoKYz>5Qzu`1 zr?Bvyi<8G595d$N*z!YT#vG!(=AKx%@WkA2Y9`J-xnRM`x!<%d*m`Z|%wOLvD0uhR znKQ3#Er2h?#K}j?%8pK+cx){FW8tYqHM72+|J9;JU(KgKf4zvg;o8)8rcX6(FoD7? z$BxjaQfJ9PE@|34vCuq5`c0`b6}3BfI<}ltl&)!aJS=I%o;^P$-5>}9jx;u>;IxBn zN>7odth3{1tuan>%NS4p^DG+#`61+?)R~Cn(k0E~C+x|C*-(#r(C;`G7!8FU#%%iC zojXWTksG3_K1Ea+@WoRisGWFCXlcqLUaKh(THd`Y=doyz$3pd(=RuzWHI{-tfM5;4 zTt!+6?Sv&vWr1^=X(aJD$K=P%W$Ee5GP9PZr!OTfO@CzpilVO~t&njUGUC+d`K zIm&EqkzK@aL74pA~N~-rp!B8{P+nwV)7PM}e6o@uQrh*kPrhE3o(Mirf=s9vn98 zpfv8mgDo3riw(t}RaSmJSV)H8dx#r?ESE9CSy$LYql|lmGUFc9`fO}ij zY^$T9qeT^m>`)*Pv>L6s960|0q*BJQka1XBv0SUjJ3>3L8*n}bcQv^#Psu-b+9FYam+Y5H&$cgQw8xt3FkS55Q_&1#XH;g{=j1rcU zU8d6838TD8tBJyL8e%+vOh^F?Dcu6or;^W< zj^8Yu;b}^qXU+xQbz&mMAGklm`#YZJyBByfxU-tWLGwFKo2Uj0L&>80R@oLoob ztp>z0WiWOCr~+5>H%ve<`EZebqLrNbPihUPj&yN!T{=ucEM3k=?ueandd2bqj`71x zMJrUN$Q?CepK$mUIYs#FA5&NfjEWJ7m4H!eAycEaMR9dqWlOpnD@msnB`z2FTx~A;IF0zFSWJ!zCj~AWk1FOu-xExpA39R zUb*#lOUD*(-+Df8Ic&J_&2t1>M{n{G%SfvlH8SQ2PyO!Sr)kn}x882y*z)aL(r?JR zAEupZVL#Zim6n-*@v~p})zDt}74B{|lAXbT#Qm_?REtYE8aiYVJm?rA|H&o$Z%U!k zL^+eSII(6X{ZPqC5i}t|+#x2)42syXHS$qUqj8!@64-W~%)NIHm9`r;qivKe`FwvM zZZkBcXCw(CZi4k_zgVbHU=D#eUlFy2wR?nqhIM;{{+~n&g?kNaKlw!HzZY1$A?r4A zDgKhzQ2DH|ZU70I`oYAwkSEbaMbXg%2SzKu=~wsf8{>*%A_oqPj42YFNKs7mfC14l zMW86R(iAQW>VefYD~}rG;x&yXnrUR!oO|n5ExloE1Nq;CHS45kh4mbV_bJ%YVj#=@ z_|Beicg5Zs&fHkjZH0eGdoyuiUhKG7_wX*hA>;;4T2c@(KFQt3K^IDHCN9j48yDvu zR-ZHhN%lyhv*&)0>Kou>pVD{c_H1vxQ-|0T$z|^QDZT;DT~hnb+>zxI>eN0q3HARP zY;30lKkjQHJ35<{@lCPMl75ks`nvi%d56;*V&dZb*r|Qod>p+Z1hQi8-a_AKC+Fmh zIeQC(!n)ZfnI=xIOKN)@{wwn_`bS5aM+bpW}B;r+*Tm_ zVVkQK(}8mb5Vj=mhi$G}?F7hO1+rar3BBzKAol=a_Ojiu&21Bg0CHc!*#z6%e(@0? z4;095*ygsWy8`m30{IBGx%bs z#9k~AnsZ|oKY|td8_R^b#J=X9WQ}xHZCl|KaM8#6F=h0Wp%?s?na(#$w7`m?=69=^ zKNk<@OrCfU>t4ot!U!^pRMO){oiv&D`Tl$4UxiZvQx41*{p$0u9$A;qupD_S#l)KJ z$Z7lCcjU|Oz5~BdgtT3${s45)hxNFVKro(}HHDn@@{&dn&%cQ0^{<Y*{^H2OqsHIt@JBM?SL6`v-mq4Y*a;7*p@h2JHl5R)G)T;WUh78 zSy5fFyEG4a*+EK1TU6EF)KsZ&!dJyp6%BFa*#Hkw z%8pP_`E9V_)+vXNIADHu>yF;&%n!ZU4xM=$bfmP|$bDl5ZYgPUw&|cyzd}F!A6n4l z+a^Od4IHy?Bzb+EbnDyl@^6XFx^={c{UzO6S8`xkO3JbWB_#)zCnqmIKyQ@p8I`%B zz%RzPz~7Jk%6}t$L=dy89e;|V?BmZrtRIoNPYa*sTRvLbp1#_QPIn4bxrBeHk z+&gB#+e4e2ZI&12pYP|F?;lpwo!o%8g?41f73v3kv=n5ZonDj3jLamAy_K15icr|#Op6%ysAhzIXg$;)tRxi^JTg`;h3u9-`9(!KeT}eV` z7`$d8c+GKP4{al@B1L$wrH%YUZb)s&yCo$UYw^NPajW_~KLqq(cb2em0xED#Sbb>2iBgl6x^lFwYYqii$}L!9bE!*5-Axoc;M(+4lXV(gmmZ} zklt_XvC7F8#?6{F?);=mVP|e)$1ZK#*>=!qn`H+g@J*Uyhqi5Ov4}Lw3XREB%W~Gs zjOi71pk9qSFkKjWg*P2HM6wECg}3$gw6LY?o|}>DAg3x4-NK0WU#W+hVF^|7DTX(;t2G z)s-o~OkcBxlHh)1<_f7ok|w@JW^g{0!}qchkQvgX;YCHmO|>qw!V^37E$RG1OR~Cz zABYVOV=;NKzih0vY~+#5`li)a=FNy*>k&ZwJlCxoHj4xekAAU{8QT&P>Ym>#q=ZcE zm#HuELwjclyTlvnb4p*rO@rrplG?OkQ6?|hZ&-&=c+UzzGH1-LoH?dKJK4hDD@-32 z(aW#VB#W{a#SmuAoi}sH0C)Fz>EG5sn|By5NHx?Fd z?B9PwVc~}UE>YdOMY*^{ckLD>SQh{)r)?}aPP#?9vQ+*rc=*tHLY(?GmJpA69{d=D zcVyW~8YVZ?Hf*Nc>gJ7bG5qv|6r{~cD0nL~G2b;VJSwHx4^~6g4~m;TB_?DA~yDP zck_TuL3EB#1)0p3yM9h(Mj{(>Z^q$a!w$`yd5HZRn%<*FdT2;S_wE^VPRXHZm4`-* zI8-_9@Q6L3qhe!6g#?d^iyOtB$_k@5NDr+)=5OXFh~Cujv?}iV5pGeD?meTU=?$Tc z;f63g!rd)0!o6oW7WO#6R2mC7)nisXL5Eze# zG+c!?l_7mzn`L}TE{De^fO`zIn;>-XrtEY>4|kM0%aZ_6L^o-0de!B!vddNE&aZ!p zH;o|`=Vs43J5heC3i+oY|2R{AY-;M3bV~seEg^TRFO`*Ds!sptPvpKi@$9VG=PKxd z8e3#x2J*A8b=<(U+P-p=J3E@9y5JU^e2}Wsag!cX1&5ML??y>cJ*^dpgw1UP3yB>^Iv;ki4jTK3z< z5YTceY>}t0WG^dsvufY0S=&~TU(J|$YU0FGQ?r(r_h=1JM@!f8*K($uo;2xn1o6uB z4jJ03y;HNMy;`}B4E4_RQnw|Z89w?^E;ikpv~X(Eb9jhPhNtLHJQ7`7b!gF|eM|j_ zimxV4`l`Ysp}u`N z+{V?WhmQxlgt7+iHanpucH#$)Xiug+Y2;|0aJFIrV0rIjN0HpuOHsoxv$|0_BV(Cg zn}G|`L&`#WCN1gzIZ@Af_0HxsH>ZsK@nGL#kDdeK69)Bas>>9c`TC4n)wkU%XPul6 zN~<3E!?Eh!Id@mtym58v?WkANS|?A5PInIv0KgWR5IpWq8Y|_E_J?hNB!X5J;NsvhOMvDOZ4VCXwdx3v!Nwl? z3I9(WA$@PWD8XjM!H@ujpTQVU`wDd9`1wJBW+$mo2-@ zmchL$pFQR<9Xx5Bnp0bhu&oK==tSej@u$~jWvx9ue%v?fva;5FGcILLa`N2d(2|s% z@Z+5C(N`SRr)FFB+SBFbrx?Pi^77Mbvx#N$+|-nL$%MG4jtIdY=p9ig!X#dWY#Jn< zS^@IwtORG6KkTE(>Wcw?KXEyg@#JBT(`1!2=rp}SZ(T7yHs1gKd)k6pTrt{k3qZIq zoL<5nwKMk%;Ax^6&!&+NE!?O`|K<)K`0E=}?q66?^VhfQ33e0&?X zE?we=`=c1~D29E5Vwg@>Y-P0v3$d<2G03ol=?TfxW73OTX|7$huqhToqM|}VBO-;7 z5sOBYEewryC;o=R#qPoHCxo+NME2pu7$#Vu81RpMMzz2=WDf?RC_EfAoBeQ`nCu&~ zDKm3J$&fW!cqXyQ@Nm6rP^Z3nx6o!^b=WKn>%DYPzomWSmlSzUYO4!u=joUoMBv)wzaX8 zmTua_s)SAzoVd7dvcS$ddC_8ON!{{^>5U)dBHn7l3fh^wD7)DgjbnVH;##-vpBO(q zF}X4(ZAfeF)%?u^L!u%>Ln5Q-RF`+A|{3-90iAwNYwZNOuIebPo)4b;WZSwU6jR zp0g=`OA`mzr~vL0?QLb!O0n@6dM$o#cGp)tx{h&=faVerp}t|PNX>KDV%vru3UYM` z;?x9Qo?a-AylX<4Jaz2iFdH?_xYe!ea)OA`*%0ZyYd`FJgY*!!q~&SpW9hsQXgK_^ zN-CDCgd~ClvuvUkNa8ikcEe#IP)-uJpxK4`*q)>9?tQ zz|hn@CYE(9Al*5&_+0zY(sj=@PrNXU_qP`8itRH41l281BJvo)IpyBcs?5x)(lHw| z(yPV`gpy3+=^m zLK=(_!Ty@srZ`ENNd{qPNUM}-gmpLf5P2$z={Z{RZZL~rG*Dj{9$WGDRf=J2%{3)7 z=Fg2<=lEH6YGLW!DkPaTUqwWSMtxYT3GtFXL2D%m!{}Ye$Zou_m6>Z>C^y?s%l7R0 zX;s-!Yskt;Tf3}j;uB@>73$(PZN!jmODdK*E^Okh@7OhXKSmH)-9vc?Ydk^YqB@{_M(y3r@0(nhIrZQhY#o^aSu{D#^@i zonC3`thKX?a~w3C43NS!6~;qWmKwUTQB#sNhEt1`qcpVSnIJ za!j9tdzXe@3)Sf&u79UizcN}V!CXKVOY3`hd37iKj0@LC7lMu(=9XB{fij^do>pw2 zU@5U;M-kGK`y*^SwQy+J(H3gO6IPef)sUIV$umPp2jfCyb`r+I+wul>a;g-;lc~2X zv#!Bkf;|GcJF|eF+Q(<^;cjJ9>*kKFgO2;Rc5L3dac4`PKfnDwp^0_tMox`dTQ^By zJPt;_mXo_8{NTapWjUFv^aqU#k9N$;>)bgnyTeiN^n$>S;K^(OxDq1s!d+&aCoX5& zqY-&D$`Q!6xvwbdQj>cjLNvv`gvWVjqpUaN~ZmG^yuEAD1|N z=Ok&==TiP4kI_1PvBw}*G1w6%f=@f}(V=KQKF-e1R1nwL`v=;z_wH&V3eto7!`s-j z=xS;A%GkToH@0zQ>8=TM{RYxfXwkM=D^_*-8A+*?tm-m7Q+qW7i{U8l_h12oF%H4J zu?kwF16U6yiPGmZSvpBVg|U-Jr1<_k={O>xQ&k!}=+x{(2AFu!>~-fa4OI;C$Nux@ z_wPUd-GQXEw7yAcslw1p$G*ID`S`I*dnc5QtC%>pYy#%ZhO|(|mr>I)4Y47`q`qmX zVF_epiW#y=ooN4dC|Ds1#*_)JC1V=Udh4kDZ`yNb*(6QJPdqdUNd1A-TC;=qygGk> z9SlZ2nzxQk?J6cuw><=uB(0rO%a7AS49vAI3ytrI3Sf=zUFVU@;#{%09X>i*cI|L5 zDRlPf5FZd2`_rMdn-5$2kIWuG<_TjrNgaB0Z|COiRIh zr)ZMsLGn<7N+K_Evi8;>nwHjD-oTMFL$(eiw~~TG5|SbY4GQcX>F=NLb3yf>;x(DW z(@IAVcwZPAT@mlxvzK!>k9obEoqKe5=u;LJQW6!BWua*@uy^d}P=$Xw>Pyk@oMk&M zn~d$fVc$Z(P@Ap|k#i&8?MLCB92gpx6j%0*G?Z?Zwhw=&uvli*)!oOfyWgDY>fM`u zbZF^4CNX(zFnUfdDsCb;)ZJ0EwnunKkY&cgTr#h!@EX-gA8OAFcrd!f1L=3|<~iFF zXpn(jYBpsyT{ZG#z0{O7^C#&;8X#?N^fk|Fe1e=GCK8RY1_c|5B`pbT?c`aiLBZI5 zkX>uk)+@^7ry-m2$rY098YXFHkxXG|kACaQW*r<7Jub$sgJ1s;|L};hy=Paw zulMK`*1@xjSEwR`8wzXFK*41*>9cpL>Xuk?q~M*w0p2$+N#C|@?%&5bV|ILg)ewD3 zYG`mO#%%D^!suym@{-=Nw6_f!lbky<7Ti4a><2X)hXz%F8HQMjGIcC~S<|0>ELC9C zysF-{+c-%X=KXlZxbl0>iq*&b-9$ypkoOc;4VG&1!^jT@`SlCvQk}I*3=J6;=8@)Sp>0|mp)c|eC<=`j)J$vPm+BcdEM%>( ztBbd{i>ogw^l)_Q)zjI5DWz$`V6@!lb^EybQ;cV{2iXk7_NKB;1SSJ=WZ z@m%h)-C>o|mC4Zyw~Q)fV=5e3_bOSLK^Ds^uN-Z-cW}Gd$ZtIQxTL1in@uylm%NM#BvB?xNsaN>4>xltKnjsdZb7{Q=?_S2N|7r}fnOsz8?276=`QA0TNAq9W1| zcu@qvGRIsgU|2-(Mb#MtJOXjK8U78m59wb*l&pI;be^kQPT7>avijqXtE)fWxhXs% zB0MZIqVZ2(ef9G%Uw(OU^Nh(;XU(26r4rN`sYePasGct)##PVNn|AHmRK4rtO<|Fd zVPR1b0pTPdy7AA)zx?IW@#8;N&z$n=tl3ki%na;Ei`rt=L8Fl~Faz+pN!C2cnJ+DN zf52=9bm{DmSP)5ubP!0`^OVY(r#{F z74ER6FpK50+|4PR3v!mEA-q9k56{r{{%*N%OYhKV>1Ni#q^#E)`woq@v+w2A&eLwj zYHjsGWA_&R<-HR|u@_WP$@Ct0aE-GZQ85~7oG~P3Vajguvvg6jck)_l_lxvph}EakLvls>+2SLX)A&0wZjB+WxW1WJ`!_uWrm!$RTQF9e z&+D5SvNUUcA~{0BU3?;=eLDoU`p^X)^J}csmf3#2N9+48ZW3A&)y*x+&p)P3Ygh7a z^})_PA}SJ6D|;*B;R0H)BadbCqQ=?4zEU?rFxG6yn?V%=gL2jkOrP1e(ecIsjxoKp z?MfqJN#d7#BaidR1>2DP3^buZO5n(<(0t4LK z`~w;X4-NB3_qVWUR;&+Y8fHk?pk@{p{^=fJLxYzDy7vqU>ggUxigm88KHlA3e0fFv zMK1`kvWD59TOi0q13Ruyy@rVcMmD@rYm?^1!y zeeH-4)ik0s(!n`sM3jFx4i?g8CJ=}0jguA~8ANv22Xyi7+s9WI#{@xjZWf}I zqk=jO(+bua#hi@OFtAk=%u&e;GdxXAhW_~84Ay4&5u!tQqalRM_>S)WWBSfmy(-Gr zH!4bpR->xXs&Vuqx<}Tpn0F}G(84xK3u*W`8e!abZskfeZV8E`ACMbtw%0>JqaPSQ zCpW69KwupF@;{`bWdbJu)p69{_yzSR-)z_*{jrg`(HGb5ARh|b&FQekj^VB!2Zq1m z>-KR>Z}LX=(OuACuU14Z*j!Tj2w8g|>o_@U#xpu>kDj_V;ej8!hB?K>CXC!NKfHo; zsMPO1nmyssSmZ0Ky^m)-YnjC)qk;LO#xEhk4?ivVzxWHN3DS8o86J-)9=iaL5P54M zAQvTjq~#;9Wu>Zyx$C6x>mOe1#xB~R&Y-f)zF%Bt*Iv5VzQG}xVek*SDN*V zjP>`AOHZBj4ya73ZHm{{@39~u87x+nx3?|K1sHhtlk9rBw_9Z_E%|G-zqd!H`!!?A zp}vOF1@tfVPnZPepd&DEM+SMsA#)W-41Jxz8xT128bA=$3Xu5PxA9yH>Tnj& zvmCOp0pvW-wWtpAI)yI{=q!E#vP6O8(fKUw32>Gw5GLUTPI*}!WIo-@ah59(9pstE zA+OcpEP!E)m2^cNWG?9Z0?6xikk>)yA|P)lkkLX@`jHyZo;7bOkP_iX`hhqFkhc^F zV*Jq$)mlJSDv)9tLq60*1F}ki^Z;ZWhpc80)@|qjGF=$O4Q&k?+00D^vl_R1$?NTo0myw-to86cBL1(_h^1F{~F5NF4a zf!+xkyiao)EjW#3CN5}~zs%BjO&nIo<(yfJ6$%&VbJ|j~WmzGjr$SOD2d*5Nkz<7- zhYoGKm}Bs9#B043mvn{ju_DJ`FDdQo^>Q?_G$Sc`Bf~(=&CztkZ#BZrUe_kVdz`(| z+Y4cRcw!+gBM^*UY63BJ7$#GJSC!t>wC$$2Xuzp{7bgoKCW6$FKcrjJ~UZ(SAz3lG`|DV+8f2nH> zZI{~H+HM$hPEDZx@(HFZA8I<$-!L8N@wHF1$JKX5Ck?Drd|1mv(NC;0%;)KUYo|Pu zF7f=HVkS=yul++i6``7(UQ3h_r_uf|H&@AUQv)PWyTd}cIh@}KWMARWaY5#s9@@r7s$kX6UC%5(NNNHgLI zOT389XQW#3y70TExu|Ij?F0nzt=_C@&aDLYysOozRCWzk-iCjxn}=p)g@$Bh8e&7T zvO+>LGsz?wk|kcx2ntS54-QU${x?Jm6@L}dnP`o%Na4Fm{7cA2V0}D7&c9cv+d$>` z4&T4??*j3H&{ER^_*hJUUxaTP`CG%jCyKw2FErLj$HIy4LE<_(UGpZsp&sG8o*z^y zUerIt_fezlFb-A>{Y#3cv$7M!SAsG!g7ISv#6Lm785x`GNYjbpA8CPsX$^l4vx*0= zn^HaCvBE1sg$J(+v|D;((%Zf6}_~TG#zC;{g8D0z|=LQW1ywf zFsH?K5EqP}s=xc}Go&bOAs>cRYrc-CSNf@2mD>lHRZI@2M zMxj*vt5dg5KCV;ecIw)xSI;SIcubUh$QQN4MJ;QXCmAYYIBPs_G}MlUZ2^vaFpe-C z-rH!%2w865YjH&0-r#ue(&Q94$xTzKEaLE_IE(aZ#~w8)MO0kw(S-Q8I5uGq|2)5> zF$Zt?zz<8_v>KY*M0#kfYA!m{O6ju^8!|H1k0@D}o`&EH@$u2Iz2gz%@}bxm@liE3 zPsvAbzfJ7&HWr5$Z_LlH8iZeY+sVM>@Z`e6z7;=tb6St7-E0V`rGHaqpaaHQ^ml7N*0t1bS)|K z5XKwkc$AfN)!63^Ds;RTOV81B)%Uzc4Ri>!uxxg>Su1To+nD5J2X?a&^c(F|7yeiJ zjDU&0X33LL&(Z(3N~W)E^#c8mT8~r@P+7?G69`U()y8i0{3a>F^41+2vab)lK+ji8 z5qG6XjDRDxAECelpjdIoOjc+@9G%g_bh!K>=QMsry`|I};=P)dH$)3LzwxB;gz>lE z$jskZs7p{mvHlem3yVjOZ)iKeNQJ0sQ2A$-%6Hb`%~j@Ij8kOh1_fVSXE<32#_Icy z1;u$?)U4(WbA<7%X4E|@XL;SPrr*U@-*ZS#j%gdfE5_0y&|%;xuY1)-S5!TyH~L+v z`j=4GS~sNrWRzyfKTvO_m8n-5yL0LvwceyuyfcB&xSMME^(OM^9c#`9d8X;<<7t(qsI_Ew*29Q}AAvvj?LfU;0C{hjd=b3<;qU@?Pc2+t*{Woo#SAvewXIh$A;OuXJK) zF?Qt>Wy6V%b3jF~A@@=ajk7RRjVG$PO;655{8( zAzJ2!hCs&LCzJW8H5atnBgzUhvdAGwE3Ytt?P8LX9PbHj=sBaSY3&#>*27RLEc6&V z!n8KYO$qvE82wlbMvM}$;BI*AI0%!jPBYTzV(eaZ-*Z%vJ?jZ~n^{^YD;V8_wXfmY zBrG(P*0k*3mi=Y&TCestPs?!>@^nZ zfEyO2L)E;>cUjEQsF<79vxA(U$g#64=JCVq7WU7n8P8O8L40{cM0tE({_>l%XWv|I zSl^)HnbKiW3ZQgEl=q1r7jd`p*Tsvk&Ui)v*-^X8Vyq&|GZPE9kFY1{;LHw>4$p?G zu6lj-J;%a9tn92$t(OJJ&+9WjB4T_Wp@8==x9PL7)Y5Ye*Wejf7cc&`@-7a65JVZ> zsBXoCLU=^g8k)!FXcUc##e~5(bcoMbBPrjlpvvsWw}t5&`0N{jJ~@6X;Ir?>{JRG9 z&T@K9Oy8JV8NH^;cPp&W48NJ_8~E(Ix#=7D?7Id3KB5Z4_Y!=!h7pX(7lxtFzO9w- zRtmn2g5L`1EWa)PzMy&+m)9*&97`y+yFuZC>PtWnT0qOpV_yPt7m#=k!DOXC-UWo^ zYRPh;_Z(CeYLjx0%yoY z@P0&0F+y7%6Sf{bW=K0KY%M%0ynW1&Eo?q!$O73BwHvj+VVpu6Pq8B-v=xRh+ywfD zr9ch8u3=~A?Ctas!am_sjoXtmNEuoir8$B}D3F4VtU2;zlO|^mc0a6>pQ?@0c9YXG zEXgTNHeUZRw?VO9CSYb*HWDD#)5XF{!yqo4@eXZ8nK>a4 zobPejd2lPnyMYrKt|Z$B3O@)x7@Pu=lLP&dlReHi`9rhdN!g(kzkrmK0KXKngWNm&wnk&`Xoq>v5@(fm zI5os3j#S-1^tCbL$xTBy;e&R~Nb`1vq_!8-Db3Mh^-{D{ zb;jfmHO%TCdAP9M%Y>IO5+0v2od3V%)?K_?V_E(ZZuFf~lG97MvGd6`7ELtl92A>u zizWsyLs#Jfy<0KwQ6>ffYHDVe-4oRHFS*JF!upwyRtpON9}rcye2 zm%MLqV^H!gu=sC$0~^7>=rdGRvD!MmmBxw8!Og_q;6~>f%Z=l)!+c&2_BJqk0uEBE zbRk7E_47uFUpi>>Qf;lEdi29v~F;IV&QHByaRX{ozwhmNjo z=pWg)|H#NfhQh+E0RODaKW=ABc{HZ`xUnv-?K`*`jXgTH@8L3bEHe$%3uIOt^Q_IX zz?!ZQgB}oz6`ZJc);`d#!Quj=pB`^m+F8M7Z6$Uy{_unG0xj0RG?pG# zOHUxxYMAXDHBq?B#Ik<5W5gQq*qf8@Idd@iq3CJyR z1|7Y#Fnnp(P$#F*Zur|dtSkFl-_;-xIduu3ikGeSGz*-3J?%6^bQLlUV z%1%lT7{-aRvJ<5F%E7zmB___>J$T6O`3aDki=fqE0qp_-{)w{y{rluU@QjsOl6&Hn zf8r<2AUB{sKgYFSy#j5mgs@VcC_oKBk!O60+lcf17CbeA7d5L#X_6MJm`@C4I zNb{4d3U&=O6_6KM7$lsQY%x8(gITZ!RV{}lz&;H@%Vdp~jRTz}Qv?%-~EcE0?FiP@0 z84Fu!w^Ln0uN&JM{$5A7uUltK#IKqk#P&pzXw9#9O%|~NNF<|X%mra%PA#g35|GBR ziZ+3F4n_Ghso-pEF~wz?=H%1%qM=3<<{0BQ(Cx;=4fH?j6usOaQ>)@~ve+o+GZQ@^cZ|9le;{>Sn4D-O1W{ zt=jdsKa8{J*eY_9+%&GgeOvg{5Kh15-TGM)EPkhnK!eQBWQ1Ht!8fLkud2wBu<(lZ z;Hb_d_nu6>bzSXRC7h9L%NeKJw~^%tYA71zkwt}(i?LxUPy;s9opm|m`nz`xh2r8G z<}!E`*<$Lm=`FeH$MV*5qVBBU)ZAoQ1Y~B}YHw(=>jgyEX|*6%i8w~G6;2yBkb5;3 zMf*17!8&ny%?M%J@4qA4PF1aTlX%)BWKkokRHSInD$=m*7TGUG)v{`2dO!5u(FjNV zVm{OdBxFjes3Q-aE)ZkLXSZrug^as%M_SBsqV=$diz9HlUDtXkji{21HQs8lxnbB( zKahIekv!nJ)}B0&nj6(W{2=`zp0DXfXaD#kqf&cD9D#MBjtUCPT{IQZ=}cDO26WuW zgFQd~D9z_Ie){1DEC+3jW146z3grV<2Q(4_&Z|@`;=D@59&3Z3>LoX%Txp|JyKo_v z{(Mr6-Cq^SBV^%1saC3z@{D6xLLS>Tl4>Bx2^*!{8#kmpAk;2|i1mzcdaCbYo|UtQ zgM<9gfrA4g*^3mHnOe0H|GNk`4v~Ju`9gX51w3ZH?$BXro%H?p<>lYwT%+HA7w<pI zETw{=rViofunJRr59QycbSIV$n-Zn#&BFBp22BHcCj3}hVHTcB|1t|N5HL@gp)(h8 zNX@|)Qh1u0!QVjPb7=;CL>y}lP8tg^%f5(DS|I+cIru9=f?2o&xo8&NoxKNRhQ6Lo zH487NaH27TKZQcGH3NUue0`FI^uAgARaAB>d9HoQ7P`eO{xOQ#!wlcA$QZNmGql<) z`~ux(7JiT3F$Y%%&?{!)fdUro7v)h039|p@bLCQpn6DpoDE-hZ9X-W@XNG<_HJF7* z2oYxCkuRYWWxjpY(ey{NbYcXv{aGDL|1^sqM?WwN?=4_5F;lKSFM%%=aY@V!{t6-6 zEPU%r>Sw#KlZVxRzFlt7-8^#c^YGt=re@)H=tb2VScMdPtc6;rr*K?jHwD-#M*i1H z-twv8qB`D~^Iw*mf12yV)Co^_(4Keh)TsX3n)Hv8zL|Qy&&w+`C~rHqF=Cee|Fxu| z!!cp?G2=J?4+R~yS&ZNOc<29hAs?_pnkoFB=Hc2lai&YW0hzvdC$B(Wa^-z)g#%6I(p_Vu`B&X5e~y%`7~Y%9H8ybW)Yc z^m%xJ(8w&Exq_Qn_(CfC20l;c4O(gze*;x~2W3q}V=C7Xakx2rETZxx_#AyKq8rWP zzan7ZzF0rRfqZKg-knZ23)jvgkgKAFeD~&%+~x0JC%=UqUD9CGco^)+`;NU)_7LPY!S<*ft4>;d?_#4l_rvab&>^d=@U5>w>;{z@RbNDL? zJk|tP@Vmc2$BN^>s=(#DM9H9Yi~IVT&!xIkzj<^i56V@nJ>7TES2yI8??;@DQ8 zeOz4t?C~;O^%{pWo=Z4z@?uY8$3I7WZ#5=xsky>UAyKd9l(=8G5C=_ah|Yg z$gq-vxY*o`pq8C2!v`gH7S@zI9?9b^6MU2 ziNR4Dz{f*DcUY)JJ)At5k9J+80r`%q582i|DZgu1pWw*cfeC#}LT9P(ly&M`6k*x9 zWl%xG-Hn*B1VkO+`U8WB26$S>=hI4In*vt>|b zUQAqJ$?(COCp=5)WfexY4W1QR(x8%reCG+92M;ePjEl+33<613IjDZ6=n$*d%d21g zvS!&b1YDBhi%d;nyzp<>mYETSwGR5o9Tqf&wF2)ofC#J~Ide!hS_~~ylMURiQY3uu zmngpX&W#t7KwL-GT3jY)o@CUeuc%93NV-0o4ky@y+DS^f*5Z6MO`hm)#k7jpJh;;`p~@ ze8@A1!`WD8^mQgW>Oq{22|kF^Vf4pqS-A^{qdL|;9O!#5~=rN{AQiS>o8BhE5hrPcgi+uy`rbA|CInB7?W(ZweInk$Td zJzVC4_MXl0`T7HTS55d0*Cht$_!;Pb$5?ywyC!IF5~;NJT{)fIMd9@1{&oqk@vwf* z@2IeTF5gkHc-#=)0RJ+%E8{ah^>YVD-M5Efsd;zcY}2oeCNyc1in_h-WfitcfeV_t1k0=$+fq{TNXRPU+#zZ zR3FvDIUiI1oFv21jt$mv(3{5jBr|v&KH~#8ABS>2Y!cNXPsjF#!z($x2*@Y$_N{}< za-&`nI6iEXtpBRUaQtZu&iXI5>kR%tHCl#)4i3la;J~k^WASYr{4W#!b95d)1840m z(|>H@`yBntAlV+y`9592tp6)*2sa(UtH zq|CF=z%NsSiH=1pPDjQEoXg{adfv+Ez=qB1Z7j!s9)6h|GtpPC<@gsA{1UV9%jBSm zuX-)#E8|}#hdJM(y8e1kDc5w4Uxa>fiQ}8#Q#gM8{KxfB^cQ*li^e@gdA`KlqKIPCyq9 z)zSP~aSGV$Q0D`zEv@hhUe`FR-JuM>5Th$E>*jI5GmYa(m*I-L98VnZOyhWTa1txy z0lXX$vi3qT$}?HGREKXsE1hyqhrLIe@3A&B>Mxet{mTOM*a>!s1Wb#nQe zB$d+z|0Fv({)4>sH=i)<`ye03v_hGD1pm>))oGy0N`t>pdH+&N!^y7J^7aP6!rIXC z3!~A}Ow-60FW(xiIL`V>rt}%j)zLpA(|^k7Y(cne9shzs9opr$*tZ;J->|oQ#M|tO z(6<`imOAudH4EDoe&n?~M;e8AlplxM?ci;f;Wt|z^LioBPw-&epO<$)eF5iEH(TyA zRP$3_3$D*Y>Q3Qfh`v;PDiz?nR=A$NRLRQAJ1x{JRbRgC4vfKhc{Udov6&@WuvTJb z>9rKy%)=a7#PPBBm|1_Z*0Y(lh^;366;{(rXlq$EulPK{`~eNVpJO;Uyp{Gx$_QZT z_9~oX*R*199wYa7F4h=p8L)CJkb7(-(BmCBT&F)OWHaA*@Ryf+OEwc^InUur$S1z% zWIYbJ0s-Ad3|n-|eaS{$iMJ)3%2R^b*$Ve=h5v%PSX$wnx?KJyK^s|lw7Jb57Jbo$ zx0%CR%Y!+qJbOO^TBoPj}#1$MIa$mFGGui<44q<*mHT;Xf+w z%jI8#-xLPw@u;?PJaYM)f{X_mExadKZ`}YM^w!s`UtWc>c`Mr?y3uHgTG)G~mK~-Un5n*`8xzJ9Jhas{nYa(AM_6d@G!n=dyvxMZpH;nOyu> z_gz|>_e@5}?-wb+K{;OCdnR)jJ^mhTlo&NGiP%ckL7%^bww7ge%j9+Ab>NbN(O_^H z_XNg!S)Fw}S;uwR+7$M3i85C%ukhd!rLLt($0eU~xSmU5CbqF20l&hDwXKD5$qddV zS$PK;{*p_!?8oY85#|K%#S4Zt@@S819IGoXWX)$7S;&>m{wLH;rPgxTE$Xm^! zeAUR%m#e0dj}wEkRf9YN=ux>eTQzcN{i*@xHaPUFhC$h?k;^`BU5{-s>v=V5ty?vx zIK@^ttF@Y~8o4I=RWl7U>|b`s|83_9E9OI4)07f*Es`~QXK23ROwLRFWVlY#90Hx{ z41+6!bme<;nFYGKou8i$K8eHmPK}i(l{&b*gG&b8297^c2bXu8j=+=3;Tj!0MlTbU zJvcl-2hY&cRegf{vFxQmfIBEYRd$l!69fJp*#A{?jRMyx<+FVj%421436IsUI?A9d zvlJg+nWu%f{3>4M@P~5gb!;7Brb{&(3ac{1fwUz$Imw`0PTIE%Cj1?jmNAfWIqV&; zCB8VL#}mz=l8ooE4ywGSe1V&=4FPo!4obfG$>!W)K10!7Wft!da3~JXVl8gj*U}{G zP!jwU7+lt&=}A= z3;q=zGC0G<;a|K8$EZCdev(|?!Qh-QLw?V0ZHKuG3Mjdu^ZUf571kp2pg&|uLM$P@ z!^wZx?b+0gxX?=|9E+J^1?#Cb%bgLTccJ!{o!QmaNNAx;;s`4(oCo2Kzp!6+Ncdon z!M;A(8iD>O%(y0&8;HrePTgKW#H0(1{)= z;q=or%gG>m)+r=BMqEn#<(`yET6+dP$$Eyvub?NJROl=8&=t9l#gFl3H2Ufte4#Qp z_a9brH2PeA{z86c?ikA2#lt9S^0v~;O%4si#7sTJALiw?^s6j@N|q9WO>|8<`ED1HAYDH z3iZAzkF9jmutL?9^*H+TCd4sDUH++5;V1f8Jzu)XW`T55_3&Rxq690+O3)}67^lg& zXq1c#KY0lnCHER@0p`n(oVutkE zIbm~zf7I9i`1cpj3CF2US+hokl*&db?Fu$ETTy-kl+Rv4`Lb$=EN44Ytf>aSTe zisMp+vr5r7U%|tw_NNYy8Jc)m-LbWa>}CKR9&x4igJ8Kv9TB$ooel@C6%#MRW~_#_ z7|lb+WvOO}CI))}X_B!jvXmGgwQF0f4*J?5Db)a?-c3}>4^N(~e~kZ7Y!mWaWgsp? z7ih^Y4Eg6eZf)RPo~x>twXjtjJ=8rqz^kjAt4e#4sDN0y*4wFO%U@$ zgl0?jhLFArwP9x>`?l)g4hCPeT!pyeU*IQE;0-wmH3O=!jrPq}m(AbsgPD;9N4gSJAvG^vOxvMaxOV83=r5F;5ouj=|wEtQD=b zHRH84W3>gJng$WTG8Gu(*p+E!$o$osFT+6>m1ko!O}wJbZa&a5e}2n>=H|iU0_RO@ zR$gqT7plHowD8jSzk)^tW=#eaU^7A%PRU-8#;A~AlppZE0!`(+GCT#kSi2EFG1}um z`#a_5GVOepokPx(!Ey}|+(j(s%8Hg>1Vd6LRi|5m)`H#(*aC!d13)RG~ zxv4KXJ}E13L=foz8y&(+No&tu4SwV0s5@;HOBih>I_F!fD{ItS`xV-HnH;`@G&Qdw; zy8hA3p*wzFu#Z06R+>INYWUt!b%*kQAWPd5Bue%)ZoiJUY+LwfZ{ET`(R5Ca9Tpn) zViU!vLGc*U4mTK~9&U0yic~BZj~(}SM%s9NH83mWfnuYBqTA?$eG7ixIb_!3b+n6A zt~DXs){T5CH?E-|eSW&KbmLzO^7cMjxQ&o??TyKo*J(?8TJb~vp}J9fheu6M$0V$y zanePo^W9hmnN%NNTi$X`#=1>Jt7M0~U98h3wZ6>H$B4KgYJ6=}S%3P)f1kTxMD_H%^0Ux&q>Eh^G_|E{nLBPJ~*V#-#=+P zZTh(0>JO{jSqCaA3fLNId8C2|4%X18d<_{1K70)UZm^ZX`T4Gz7)jGPd^T1QvWqY{ zww!9Ch2*UExs1oinZsRWJh&^IsjY=HS9J#sHb-WDPjDg=HmLT9dGxU}=OeE{0I?D| z|9Bsm+p+%VfxUK6ca$b}N*k9=S7)sMb9WZ;BhedYBu%y@&h)aww1_#IqUhP|y?<|* z{_T45h<-~?lWAg^HrY2fVAxTj+*T}!l@J5(G7LS?G2`_myTneny>&KwiUA` z>KlI%k3uqWU-SIAFZO7U5l>5A`bkzB)Z>X@iv4Q5{n z(jv01fi};Qg0StBe7URK8yI=k5lE|{l7#JV(dK2uo6MRub2+EJ}7is^_*JL?u zHmm)4r+A~;diH_^vxOlUp_25>(D34?+O0e8)uQ6V=w{_E+_WPid55*UZ$RLYoTEss zwsyc4QVxIS(cHv*7*i|-x82WYCM_L4oLUi5kW{YmDNlJ$KNDNDPf4U;t{iplTv5>{ zi^uO6)kpIu@g5c&R^Zd*KsSpInr%9O)H=+nKhSUR@n;jgi1n4JhGj)!Y!^>DK4Yh` zcnuaPD9>Sle^(C6eZQgdtsLUu6y-Lgtgm*&aFTbjal+O#;^-LFFDB2|LMvT*(GPdk ztb8(W@F&|Oho!X6(N|9 zt)i2$Nyr&nOEiV=$1T{r)C*JxA08Yp+3?P1LD)#a$-K*ib(Xv7qQ;iDEZ>66K|sJM z%bJCYsx7PM&tKdlu_`DqWcH_{mb55#^w`m|xcv02&;fx};+nEAmaX}=YRr|@%g>Me zep1cYT2fnEJ+Y}vbVO*B@e`7>XUe=?i3z*rPuZJIo)|}kMn-i(UnGHV3_#s`D6Ck` zS#Z9tJ6idk9LmquJ^8#eJ-biOtehcvgkGKe?VQ~YCr)^{H=mf$Go+a$%uZe(GB0mr z;>^<(Z~VP>{p!D#G*JnzYl0#N3wa-(crbnC6Vc01uqIwo2HoI&TQJlXBQS5LU~pS{ zg9IU6DuOtb7qR@0V426tObt?7O}Yvlz`Tf}9v!|x`H>vDtHG+5-Mug;hdu0jFt~kAMX58wlW7F1Lo<8s} zvHO0m`EQ-m8@^szHgr~mcR_gkxWQO416v*`zt=UPD<_RGV^Jh(8$$F-i*Eh$iz684 zNH3UqB;OhQ78XE?i}0wO?}ham$)AItKvvFT=sT#S62Ufw9rRuC?* z*Ku%@Y4wk`jr#HHY^TkqKEsm*;cH2lN?X9y~O;s61PbBX=ZF!*W0 zcFAv2v4IkaZD6YeW~jJ)ycj!ETW2{)QfAggE2o z!n6>Zo&i$+iY@^??SfN60#lvMdo~>C8|4%;sk$zzxIwhtKVWEJ{l~L{X3q?qFzFJp z?$l%0(xUv)Zg$J|cenGZEgdpHx2H+(OOwY3&YT}P^@GWQLojwjX@um88iV79qk`70 ztXHpOSnJ1&bx=-ni9jqTUzob*c2(8w-SaNg(ECDOPEJ&*?6!kA7G$Rncg_zn?qQNv>_+E4 zGp$p%;sF4-I7H|-1 z2SpQe#X%#>R~^%57iL-ebXH(+!1qy4q06cpLCbv>Ma)=Y=8+LPxLheDG%qGZy1Db= z#94otjZWPX?7MN1L*V#)|B8x^rzaDESgoYZZ#t}cwiq_<NVn+mC=Rp@q5kE6L# zn#v2Bk0M+i0CWqeSt`|b{RH$1n`;38I>>3KRTe@6agGji^ym}kc<_w& zSMZUl_eYO@ziP~}O0qs6lVtV}O(%oJ2P>M2(vl7D8>laQBCV@+-QN6I6EKd=6>{ zJ6UD41gg}^6Aek?&gOdye9PkE%l(7LCi=qpnf}&o_W7y1{+K!Q7vXHms6iGh1QKIv z?cr!@Z{lf_Xc5(LaenW{lM|BD>%$`^CeF;A7S=n!#UZ~Tabb&M?=DK0G)FHkwfw-V zZb^`#^6k!DQU4*hhVC>wUrxrpbxO1OgE|$rYLIMl?E|GM@zrUh|Mh0=? zR;1?co)L>VnSr*PLjC%%`f;s6-tJ&6ke3-F*>;C*MjN-%mSy>$ucf2JM{tmjUq5tO zXzc01}T4c zw+H<8ze;b+j;~DgHSO%|iH?BnR>cx~xIs^7RZ5X6lWR^6ZT9O*{kZ9`Vz&`GFFKM= zoPz@eMb^-W=#!f^RbN;%>(g;2^qFyfa!h_m>}OlnRbJbiv3Qy`fOU`o2`d zn55Kk<<_$#bEcBpa5e1cgtQzR(mOjlxkQ3QnDkZs-rH5A>ZhF(NN@U$;FY>4BPU@| zW_nc3!NMhftu>Y*=@tl5`gXhqxsT z9j&b)eVzS1`lnAHCYWpQM-0}u2Nfm{TRFI5=ivT>dIpFgSFWIUStDJQcVSnENAIfJ zl2Uo!HtFrl_FcUYxi0P8A_lxA)BXY8)i7 zn46Q6-IMgp4yNCTUp*m9pRb+2`Z;9p^te&^4dL@+7Uv3rR*TRe(30z*=*f3B%%Ft1 z+bVwbV%{7XhS&jukW*an4l5fQdQ0Y!9gFTCJuum5-`WTCO#HRLiA#oLjc6lO z?YU4zAGZ{1S&|p5U*;%--*~qB5Ht>FYYtw7B}*mS=w-={s_47QUBtHo{puEZS4wI+ zASG#wuagg&4v>$RYj>hi-J#h9;&uj+i$@1LFjmQm46} z&u+4nQaydW+qF~OZr34Ta&hwlUq535)eWPL0aJ>J>&T1MRhP=NpP^ESWl*MK`iN}h zq@rEQf65F?$P9rc)rVR$jr5?m$rpV_hDDDK3am~&KvK0!#oL4yuRS}AkR>f|&HOF~ zX@iEWw{r;?6(2Lw|1v3P_t#f6v%N|E`<06?)h2|2EYua{LJY7S)A);U9Vxn$6JYbH zv)mshcCDrw2r_~aY7;vls&8l);_NVHYxT}sV@BWEGjhjxYkIlMAdkUWRt`hN74-6B z5`E3mf|SsV0fqgS{Jpxz4k9g&sqmvm%!s0UFQh%|F?d0$IOByv+LuqPm!djv!iI1h z)#=VM1B95rw8Z(qpxy}$ho%Vy#+GN(;v&PQk6?m#FFQ-zfAE{3){%Y@!@mFK^tf%s zZlv@K>2v%z>2tQky?E=m)8AYpc@h4RRztp#%AbsRuQGN*#H5ucwqTQgFTL?dUgP7v zL!Ueuy7zHo-jT+1(uJtDoLDhAVnS@?dt)F%_%cTgAxl$b&hlTlDVF3=Vkx+%`)6eJ zBE7S+@`i}ur!^Pm?F2uqzP)4S1>E809%Y~1m~4}bFLidGIVmRl~v4?p$NF$D+m#!aojk6X_U3$f5(@VtVhhxrhR)UFZ z@5I4U|0`EWhvp8UUPkT3A39iPZz-pHq?N}{wKKS_l%gXwO%vZc)lPj|QpOHK?U*m+ z`^xJ)3qAG`SdUzN(QySIf?8YZs%S2&3MTuAgHM2IKNCBbA^o-=B2-(l_T58nNxdvQ zyMzXS2dM{WB=Kguc3YN{K1&w<*8bhYW?aOSgSq(^cMjRNAcZ(crK!1@!!pB? zhtN~x%ML=`gZE5(6EgVCu_NBfcTAm{Y3!#-3=2u>C8R%i0NUMQKv}}sD&l%l|6%cj z;9^9rZ=U{<^cYTJmV8-J@#PZj@5JTD#GykI>AOPI2(poG&)YS2^zJ+{Av^bZw!4IU1aYs-eQ|5>!)Y)w1*)F?kC zrXVcl?B)#Hx<|VAP z*i4r$p<67rv@BiP@~%bQf(3OJljqKxm|PPaGob#X$~Uwdd#tC+Do#!A9~oGaD9+D2 zy>8v5^72b-*PqV2G^MhlzP_?z$`i+&_|y!uTV&|bIctxnkd$LDE2aZ&v6f3ze2fAj*@#bmJ4 zPG}>)z$;a57Oy|YVO59vyRMrBe*ChIyEK9n0aam2j`t0dGoXC zy?NV46=#=~7M`PQ$I6tW2<%u@(rqZF5_?wSj!MjSrYxC&dxK{XY{rNe%x6AKRw%z| zen$+{dY%%#JXO|oU?si$^yyRKgXXkD;_hF5A=TUlZNM_Si@zujVoZ#{5zWCbtiZh? zlR`|r)bQ{ywX_kLw}||kgZQsdlHAy6wYu6U$6&!WVQAL*Hy1=MGp=23wdvo%l0^1x zr$dAoI(QTQ$sjwm@9+n*Wygz0WY;#94VY$c!9O`T9|RAggEx>jx1oE%#DpghGW-gW zeB3S7R+MO1C)|T{_~E!yl9goAw?{(ub#0oo;`k@+)OVH2=qUGN$IzRzTJA~j!91*z zM#EqMj)C4B$a_0nU1EQf1Djls`SEMffL>A-y!-BG)@{7&aPJuy&2p79XX^ZT zkExZfT9ext2VhPv+CF^BPpij&ydbvp1Tok+tnl3>={|+wp?O}OdTa8Ut5s=hF3lKt zh)xM`8b|3>y7Ldhs%GR#RgAx`_WDH6_IHqm!>xv^XW$6kTxC%U%&q9n1i$5@Nh}`+N{gqmBZ=c zji2U#;$fUZZ30D!+kDt86>&EVmvW5JNbD9QDEKnxCpWMhEIUo^IIws{>B5f-%fF(R zPIg)QbgolwQewUvOgDJOT7@QYtNk z2BEuu0h=-rn!1-tP>akXsv9XMjbt2sdwMr_x31xKgZfMf7KXCT8QER(?(q?8=?}AM z`h{D!FnJjptK!N?>q29!iv7XWZSSVi%i>@3vTy+WX%pMrvA>vYjN3iKZ{SK}aqbAy zvkfl8focg=5^eQ@Ujz6Ps}#oE+@y}2-e_Xgql0?~^X^C}DJ9WCzH=JpYJBG`o}(e}qr&@rW-ohV(D08BCD3HDKk3Lv!-C&fKG&Bf zqY_Yf#1>RS4RwdPnBbIx)X)v$Bf3c}KxX9)C^Lq}iKS#d9~fr#(whjlFNV%I%+xJ; zMv%{@y;n#I_SKBrmLa@BqmrXCQfjmOi|uM0-z4)#94PBO{#aST!EuFaO+sSoi+c|p z)6b>ehb0YI(ejw!I98=nF5yN>crlV$N`5Ut2#iZ)))D2g7ZFOv>-K_SRw|Fd&uHv* zm^2K>vUp2u!?yrlC&M99czhc!0%hBA`<7mi235$Dn+3V>(t@QZLfTyq-35*;1uwhE zQM&V^Hu=W}`uSq%^kVvDqj=+nHto8&w2_`~tglyk)xStk9^`+|>z^>C%7jJYFm4_L zKM%1n^}?nAS18JC?B$g^!n8ks_=`@Yjn`I(ga!rQ`f=pCwDgTqAgOA;F4|~U5^onr z&ATbnW8)@818V|F5sm|^F+>=)RI&!7JER5|Ry~^K2X!4V;>VQ*KYm7rshmp`aKB>>mO;Qe9-)+SY24_ zEh)uQN~JHgk*W?9Hg2Ix@=j5fFI({gg&9IS-Y`r;UBi5IC+!-v$Y!9KhgITWPZByd z*39bu_j}O*wNZAeSaqOC`LwOh8rEJWgq#v}W+!YWQl>VCeu?waCYZJ`Q+NUH zRD<=VP^<0{IWl<~{g8bKqZo&`8^|2qF@rvq5$fQocBPHX-wjw0{jnTz0UkOma=b5t zvpfhYslDuvg0ETJu}T+V$D%`)AueBqZ1D`wAe3hw94fMwKf`ka(IAb$3+n;w^NTS9 zndc^=Q1FLr(P|G?VS&(Ma8aOxs_$@yCJxYd?*6l;;mGBmG9?4#R7Mco#ntTXogy##`)DyKI6sq&y# zO@cE=4jj27KYz!_fU=CBPQ<0h*lk~o`IXF4w2pRm#uO#DW@Z=*TSLbQKdhcVd;mE!Vj7dN>uomrgoSb>g zij{w94+sP|9kio+p15RrMtGz--|vWv%N%hX0{$}1N4T(%gr7P^-C!d}^4KakF zRe#8ltI;QHMWZ$FzAAfxfJwX!2*Vm87T~5ce5rP+t6MwB(CyLGa z!k*uMhb%zb4Sv(rhFNUwA*9#|1m_9=RwLHYOy<2>GvU_jRcjtiJO+sS{Qs?j=foNR ztRNqph=&hxQ1EY6Wu9BXl9Rd)g3Lz&SJ+g&(-6PoOtu1;dRfV~by=5$jfQWAy|{TB z{c2;XcSZjWUe!+~PkOL@2PjB6WD=C_F4TMB6bqr;GA!qwN|Q^F#U8Xgi|?EZPn-OUIYN1euMEEq!86tl6E0 zHei1mYXUO8=!S8{LffiBxgmiB8Qi>|t0@9omvy}PTo z<7HtNPR0g{BYzeXnnEi|G@6o%(5B{(zi)0N{{1r&-QAKh`qMKYpMh#;BYnOt8@M89 z<*lst6@Oi*=o&9$Q3+jAcz67@-NW~jz8}UYEs3UnOR##CDx}I7psHE z?j({x9B1deO%z+dC*E5^r@l8Xs@P}v`?Ka8&-cm?FFY_iZnjXaU54@fSK$CS`ctgI zNwd9lhxN1Sp5ib4_=+_wo>YcI$}VK^mM5%y8+d+8RZFOhN2+1*z|tc=UW*kU%6K4G zW&9kjy06&Z3SZ0V0wb61arg<{8dmvPP;2eDM}^*u2TKKb)Jx$hOG^i6+Cta*V@1R% zBLT{j?cjt&oSPOMtDk%zU!A4O+izC-LA~&yHafGUBvUxr`ZKuxgVLf8rcZyr81tbH z-U9LP7GRns28W49&Jg?XF_MoZ+WJ)E-~vb2(!S<}W%P=8Yv=DXWZ|+8ATf(_r$q!mMM*$T_}uShIwX9lMCoIO2n;nl!h>C~R=@MG-nEHv_^ljk6+V{WFKBnJ9`Cf8|{vZ)pp?B0_7dt!qNVeYAz- z&F>13aga=EI&djcLr%JfhPt05zEPL3shFYd3ndHVteVXUuo#}6OdpYnpkKKR_*Y`e z+~>I<_V*ved9mQN**hY1oR#&skZ^D9aPsEWf@d;GzPZXgaf0q>LtGR2l6Wa*Kije~ zX{?u#KHj#l&Pr$%-y1?iqJ>`nkVK_Kd5^^1B}#h7ZRj9+IC!YnBhsBd!mVH7#I0vQ zSLDeFqKQ-?njE}y?%bV&hhnpx?6Q&$krqnG0^w8by8IF$R~sORAAgJyMn9O9yig2{-DhuA19x?`C zv|O=+mu5~)Lm6C7QUgIK3l<16w%>(%KbnSh9JdRHbO+1Ak`3SxVOL{gM5R-#Pdymk^KT4LBb0A#W_?s#k!Y} zK$=f*3EzqFZV3(}9b(*S$)lx9shP0pqA-0|%BHxuO)0yybr-ZnXOlO^#B5AH3$k%I zLd)h{x+erEmL&{}OoslGKZ|O5Yub)yoGV|Qs;0LMd@}-~M-2!V6?0j8S#W;zZ+w{T z)X*^Ii*LxSI^5~g+GLt|Q=2U8*Cu02O3PkoKR~;u(RdbvhJu|~I?oUjC=k%-9oVKx z#NmMhyZnz7xD6={A)`o*c0pH|20UTm+4}SQ)c>R~oWzp83G?PAAa1}(-At7iX(^qx zTzi?uuOK~z&3BqvT1&0~A$*1lLfDe5d%>p0EfTQTKuKvEIdggbPuq)(iBJ3f85P0f z4&>(_s12?h?B9-_Ga0q(`>AJ0|D*5F)8=W*KO7ZU5N2C-edGG;<7@^M1Wq|UKk6O2 z^S58=u6Hnp^qXFt5~}>3oEMS+*VP4U?{mxnq!=Z$I2_EBClgT_!u=ZMu=1r}*;*8r zqZ|(2@&33pm?_DyGo=WtXbpwjgMl4gg;?k`%B>pzjmA*ZRbc+Z|ankxB?C+C4qB1LfhvYu4`;z9kJ=PJJUiyQi-lUbr%?o5vs*$IL~AK8q>c zy^FRiW)lxI!H-~2g#iH^7)L{}ZGzW|trHMR7dz zdxo~Ys1KZjM<%*PYU~V1mkz1ZcaxnlKCGxu3=M%t=&s#FSnN}{DAUnpkVm()m4(As zrg!&@?CX@(P~wY9={w?IDut=?zq-YhQSpt5arl4e9v{r>ito_egc!xE~a3Ea6xiNYPxt$fLFVG9Qvc%z4WbcP;= zPfgPu;vA{mOT6IOA<~5DSXf8aYIkz6`Sv|>RGW{^SPzr;5gf4gWta1Yw4P#vJ@|BD z<_!I@cB_9bvv|TFkCWF{69`{e!fy*cub6my(}7BvE0zql8~#a09aRK$+1z%;H!g};SC1}=*%`z?>IfJYOXR?HyJ4TIRBa7P8b z#a_*iZUP1Ae7oq}Fq@i-z*A&t3 zg{hgrf37awdS zHj^jOTdPlEk2?F=))QA}H6*Vr9lY-&RILi$RBLh6z+5^Uz@{-T9K=@pH9ul9A?)zQ zM58mSLT_#sp4`)ZQ9aZcpC33 z376D{e)&_QwU6l^1B&Xy1dH#r?PD~8c*#%=vg@d=bOaT!fD03B79lohGyJ(Q(=5$Z zU<18G0v!zyjb1cy$8R1n(AGQMLP~z@k`r5VeEOiDRo2P%nIl)^y3oe5{YwU#xLT8m z4|eRhUpMN)S82mth*LpkdZDxHaB6GUw^zsR6Tcv~AN$$(&--j%QfD*&)M|1jW>uB7 zQ}0e@2Z+(~xxa4gz4-3T$FUP5dne6JNt~0`JEATYt0cDNH*q=!m>&ceVRKxB^#IVRYTmX;JVSgp#i|Y0US!w!3mBwju z!DjTk0FM}~(6!W({Ma&|^Cqx-7GZ4x>C2ojNY1cfKbZG1v@q!&OD&7Cj_k1NLC745 zX}-G8R4T*UKqD$Lgo$Fc>PznW!EE!bUCs|Vi!b5FwX$QRao*vExpNy1FPTd$*x}0S zMjbqh_n47}8F{ez`BWc#iT>@`3U`pMrg56|j(93L~f<9p>LeK|uUPX!$YXLJDP^)TY^fuCm?P_ZCX;L+RzLO(y-VfH zN{bg!KbEMeMu)ACmq%|KAV`(H2b{e>%6=Lxl(x&ysw;AN)oFcsqdos;d3?{xGkgXx zCb2dfVEpAas}}vE_BV93N9?pz!fSuy1uKm{Rz+}XH)L#5ql`_O%CX_SLGeG{v)bc5 zqpmuDpP;VV$jjGZwAd8^D&a@|tkdl99K)Yu5&AV1vqdGO%ZblGpCz?a@uZeSu?W&9 z0lvJ}%vde^CF;+$W#@Jl-ierMCeIs*YrDo-^@{^S->6$Kt3Cau)5501r%Bh9%jko% z`*HI#xifp_=&u^4FZps*!;B?A&)rQ=Uzv7=e!6SMZ7}P%=qhCi7LDwoC+i3hGQP4p zV`(j)@OHo4&Z>{E`_BUyXLo-qgHWECJg>_o=?cS*wKfDjmSKh$%t? zK?4pw@b1VKd`Dc@7K$h7x8g_I;v40HpIEDXk6sW~iQQgkm16TP?MUJ-M1qfIlMB)( zVlJDAAvWyD2^$xjl`}~#ee$1?Z&S{H<1ja zq`6Bzrh%l}4jPDWVrUm}l2F4t0wd_a-PXlP+O_9};r(gzO5!J|n@uXjr%i8?wMS_u zbhD?lPPG)aCKC|p2dxwvcn4ow?gwnCaxQ-OqJG-nH-?T+B?{uZ?GOoh9wDvsiL$qg z@-9l97#21$6>E06U`d{c6$oWQRw==mLEszkgbY%t7zEGO%HPFbRNqNzl~Q4?`c9!z zyrl?Io>BJVRW-#}xiAHkU0%jL?e*I&XvMhdUEX@(cd^ayZQ+9AZP9k$zUJ@W7Ok6R z4~dP<$&QO1f=e^9@oP?OY&Isa{W*ZnJ+`@jab#ExReDOAMT!y2#PKC0^RMS*#E8bL^sLTrLMGP6vGuf+VB*+r$y z)yLKp9O)GzndeC8oxsu(y6W#g>CTezi9Zsr^PkgmHxu-POG^Xq&<|9mB&IH|&^I@` ze_?W6_;c~KdbH3bl0Or$D#JpsTGXbbS&0UYBj=Q>#ko*6vBP0I8a|(7w<8{6r?jmZ zaHwp^#-$B0aTEMX!`~Z~vbu48Smb!I*D=5Rfk^|roKN*n8;~@>n|GH5@2*Zb6M$1X z^VDu_8v2Wb-3=;@xIlm1_Ka>X9UuP#@vUaHwheR57+91zF$xRkl)^}QB-ys|1s+Pu z=NHa}Ma(tnQPUO4=~r#%9l~R}`{CXl!jrei<_FqS!sD%46VbcrE<#D2w+K(SqWkYt zE3rX+5H_-XOu{Jl!N-Qp?fK-M=q_BARLZxxrS6qy3{rbKOgxG&7{<&fWFfNnrdQh6kI0WBIlXg3iYD9 zM4KiTr;Jb&C$HWo=JgA4>1=LoWzjux(3~TEG%hBg8BQ34IgrkuDFd0`QHY2DQ_;rM zPNU?1z3?oiUnVXw^z!jTcj)?Z#r89r?9jdh{cFwWHD<$8V5Zl}w`W5lmbGMpQ-`!2mzd;_{h@Y3;BX(iV zlO=zy?y>r>MsoV=uYtKp2oj5x0Xi0I3J)O0WlhQ6ur1%vJD<^8->x4d1d&j3Oe+b^ zG=iSMN4tb*@m;0A{81`A^_4i*S1Naj#?+sjY5t8wk~8A`HN^azb#y8*TN}3W^^ZdA z?BFKrV`pbBzDwVu{-QCyIzuAG`9bTxp%1CurIlf8|4}`DIK<9^gr!@;HjwVkEu`nV zLF-Y!<0ORF?<5V!SIZP@gnA)Fo^H%k%Y@!C@{sO0MHU@C{5yGzW}(;w?RUcRmUne+ zN7^$>8x70H7IJoFrCVIT$`z-z-@$M1(YbR-BWH~9azph{l!e7PyvatqX^3%j-HDoBYx_V0ha{i)2M*bCy-bi&zDZk10f`;Fqw zKTGcu%d=>{pr}EAt#0{9KkNuCR@(VkDr*E=%JuIZh0Tv94b2BHtKx3*clJ3 z3A#Nawv2^QHR0hkQS!h2LW14gfg@P9$9NKQ8AH*h-pYiEbESZ!e}sst?^gbLJNF96s~?mpYGdt zj?N(y*k2j7=%c3}g6YM+5Ph`2YCfbt?caZ!jv{XW;hS*8Jb?o)9qMpa5Vk8Y8I5>C zTYU5eow!7>yg|>dbUc3i0-c#aFOq&yz%MW10J(j&s5Wyf*(pE1fxLKce3>MZ{NFvbDt#FoMJyq!QxVO;oJyOJk!}cZhA5Z&Vd7EB-~Zm znJ_L<=jIsLdl2i&-Hn*iX#tO36EB!^qWz=e!lDvJGi1&w;z7gyjQiDSo7Uz>nKmP!iW>d6<=C-(xwzAJO+(< zbdPd6+%x1AfPwNdnfFxe{*>+^KWeqq3a9_WT3VDlvFN(;FkU;HdSiOGu}0~4l(1qV z>JlhS*>(><`5|OXx?dM+&$p|bD-ydEXOo!dSFWNT!E_I;w_wSQw_wQp=N5HBA>k?O0ZT`vL^g0gf zb;jx&s z^7gW~atpLJ%}7cuo;h9Vd(Y0HXHODaQdDr$EvS2!=tr5JR$Y2~n8(`1=ftJvDoAsk zw1v)4{m7%JF|D}el@SInf@N4|0c18t(ABQUst*eqpE7Y44Z!_s9-jR@qJmw*E#tdY zNLxsBU3BNvX)(*|LQ2}Zcn=Bd91`EFSEfy{LeRQP2er4=N6^V^Qvy~bH&1Sg_S(kw zo{ml!Ja=bD57kxX*0|8dwQnDreyn>&qk;{nUJI!nysJMzHZ~DiS27Q)n^8`56R9BX&-`Iv(2-RjCj22DkP>E zs}{Jl2zOyDP#^rxEvwqgTjr^KN#&@)r5jxBLp+tfWUKaDq7bTAmDQ4Dy5G}10i8G% zb*x1lVJgBFm31Np&k|O6wp-;EY}SJ~de+X%tnEK@*67J(Mc;l-eLI=BI$_7Wg3LoL zW2Pn;*KDcFwb8gn*c&@WxH$F6tWt>0wbC{^U3~_%H07hj>WQs}o{G7#fPT=0urXTN zAGa*nR5q?=WO0eHp-*;qZ-2G2zmKn%htfq@*Zi;p**M;4%G#B+ed5MP)DIfq7aEa0 z$Vk^82kCfFLhz?NOs2Zq4>4lAEn1rm^PI;FPanC(pv)trZL@`1kGHvc(`*CZ%JRWwo17d%yh*BtlvfTO zA#8MX40TrxMhuiAeNnxtd^~-J#CW^K2Ue{aHJ%#XW*E|5ud zPwFO3CredFj~=P%svpOVn@zqI;^ z3A0PVU#AlnJ4ZX^$btgjEFUXZTSwh54jA_zpeK8PjdjE^cqH(@#>gCAvM_xJF;)rr zKUt0w=W(;khtF&fvc0?=tXxBtR^~&JQi^6wB}G|N2L+E$n>d{gfY##fIiO!upkqYW zgl=P%Unbh?Szl~Fnd|jRa86)ckG@Hw>S9`Xm9tN7NaxVF?$()hfeNYVJlf%>YlpW2 zr#B%wKIp)M=#WnK-&?{~qF|;>A+w%^wkts^95#^I<%KgB3)$XYXhv|m9%e&0 zn0){g1s|* zNmsAff!+~iDK@#&zz>>V(qt0#|Bb4h(!uV3QzqVYw-d?uKP%vWB;Y96_Gs~YIve{L z6DV11BwmK@BbJw)r{g$Q$HNg4114_ql8Ix=lxrs2M|X>G2@Wz_6jNUiS=N7AS!`xM zBO}kOUV)xQ2ATkWe`x97yE+f=ZWHK3me*?^C6xJoMPlj`+fCXKS)bY|esauI65;P3 z8j(4uT}UPv&oB(e0=0p{3iWA~q)fq(<&-WMn(b8}swPd^h=i`=Yv&lPH+1)O@wOoS zLp;3Nk0G79O_z3%Ib~Bu&dM)v?A^z&&ls=Bc82lgzxMV=!Bd z)eahsse{H;>#<27e@xemSln%EC%sNa{gdjw=kZ|;V2U!a@{(YnSc zDYIl76ef_K+A+(geP8wcG`o$0=|*J{+04Fr`4@B!;`?o?+gyg}B$!%W{XoGNlQwP3 zTmxTHQ8Bo5BXM;I_LRj+i$bVbSyoH;lVmTq1k@x8m=@`3%-B7P4Fe8qR`21pbVcnZ z!F#jx&|m28ude~O)xMYq&WGRib z%ibk#IP`V1%ii2nF()NX30LfPO0}OmQj&-U>TQM+aZ^s2;@G>V19cJ73ep18&4iA| zL`1UH_`VSiNIYv}pl%o1!Op=B6?qpG$$^H%y?;XxF)5R07I@ue-xLvs=2|hLcR|GpbIx3?~ zZ91C7#YPqv$M?4F+0~+#u^D1>bNvSQb?(y>6RRIulcxTbE1@hLjVWo+q?nScJ-@Lg z*TT_UZD85a#!WgX}qJ( zFS(n)k5cju@bhqcYq6=R0qM}m&MYd9U@@*5Z&?3k;fLI=vH)Rl*giihM;So9puViL5#ko%(6Rmz?P< z??nAOE#c)R5|;;nh`cESqKixSHWbY*2pr*QzgMIsI_t)Utan+=+M&o+48s*u?Zhk)fc8%p9 zSNHYv?JGS?9x)=>VcKGU(J$t1L zEBv37^70gipkQ>{Gg?4KC|N9-A=sKJ3eYK zR3WvKn!vJW&eo|~8{2-$@MyBONFedyXX(05B#o{)H@x%O=D(sAwXfF}M3H{Q0@c!8 zq%eI|*ylx3u`x-Zn|>%XUK63sj96$iQENn83+S=uWSBACM~p&0FEl2bCKe1@h_Q|e zrI&|cW%q#!rB>4aueC3Mi>hk>=iGZ|1_2dC7-WZmVUcYHMnD(_7(kRw_EkmPcLh|0 zR8%xf&6La~_oX*mTuLi@-_pu9tt?Hm*SE5=ve$OAUSj6l-}l@*;JE$X-~aRZ>t~p` z_nv#sbN1&v&-ZyAwn&=;-8BhtPt|4p=mo;*xuc4J#lOrznlOc@m;l8PQ^7I^K5Q_$ zYb2(zA10k8OkKRHxiNL_@-?Z^QIlIYRu5L}(8L5!nWc3d8XFuPjOjdD;Z19mvm{f^ zP(z$bO&y+nl=5o`tG#mpXv2qWHN{tN1 z?{?aC23DU7K9$V;&X64o`xh=AsjErVghvk#>1V7lgiLJuWy}~v?erCXrynahh);j$ zZjr>(VX&{>Bz%NB--&;~GaPXkC7dP8lo}?DD(Riu67UskKuh2L@$s>`xQMonRl?a4 ze}5mJ)zwAC75{(U1M9JQn_SRM_WXkE;c^Czi_sqxTt!ykB`4Ub2&`)$r0v`88m)QR`%$>wfqST?s&v(KO9a~m;IJ`QM`XH^T(iI9}tO^%yQ zpD8Vrk_?;;weMW|8RB)Zap7$p9W5~(*>VOZ!%!JgTJM=*~dWX{@L)rdCvNIrx!^550o$QqIB;Whp6T_McNM&{R*> z@LGFSQhkmU-skfWXo?lZc1OGH?TcbKPB0921fJrKrd3s?nX0O&g8fLVtR(UGi$e8& zd1`98{fErEBO(=nOyV*r1Lgs$ET+RJWm2H5%M#%q;+YlTKtK_txxQEUov+61S1Oq` z28W7$%U@UalPYrGYVajCI;jAvO(0nK7Of}I)$@(n-zt1T-hv+)#=6=y2noy@H!d@~ zu1@%(I-SYW(yNg;O}NUJgJ@{L(iw9E$Eu;kBog&^u+Cj0Tvd{A`ib(XJ5u)Q%1k!P zp6``zJyttNI##&EyDIxjJewr0kPnKGUMR_n~(P9+_Pl=0M0hq=Wb1 zFX1eL-2rq<%(H>_h%1fn42j||y`9u}6cZjE zQytPMjGoj4(0sFRK!DF@k>z}8K}|7UPY2v-AjAqxHYkmS1Ov8#i2o2m zopqL|u63}g(pgt`b%J3&OI36MAWrgu6S*>dpY?^;n7)sy$Oby=3RC5EUl1M!9m$d+ z1Fd7zMKZ2NT80fwMX3sfOz?&-J2^ExSbvBZr)7i>PdA5XhCYMemzxjG7k=~(^47=n z!8r5^^oosk$!W={Gm<%}kn8+QSV6C<{y+gClEH_a&XYN^v6T~Ihd$!%epACif}@#K zc2GPxHRIF_C_^)~!EsO+R_Er`*5-|@A*3pAsP}{ic)|+LalEImua{1lx@LO+ax>eI3=rLr9%aOpZhfLQ0lbI^s@Y+ zn)qjoQ_VxGD&jTqH0+=^r*a=`C;cbU)!Q#k zq5p1cqd%QDY^B!t^Tg3`_G~-`*jDSObc}eUcYxsljsSCNwR=c{^~B1R^zzq9Ptxxa zfkbGhmi2Fsp0@taaTrl?h})N;0{`U{*8LE-1eL!R)ekMV&DKV|i zQ_0+^)9L!@WTy4TG%|TAeT+<>PB)+?ooIj;#n(`icnj1UxYL0<&q#L+7OVxL*nQgi zse>2pggP0zWw3pmbp`e!;*cO92C1|RW66<)7zUgEEP<`5(yA-$lvdbP@@k7UqE&bw zyAF>XZjHlFI4f+hUZHj3F-eq@5SpM4jZ-D4RcckJ%JSCS{eJuUPI21qw|{z3-5Bb- zA-X=}rB~AHqaRM*`Y6P?Kf^JcyLcE&q$ku7I#gOd|49d5o9}g5RIR?>gYI8Q`?&fQ z?c?j0H+$)V^hTpzXZ(gNuOGj>y}o|=0&jhwJ{9^VBmJ_hrKPNR{`_L^SU*!lR9ae8 zSxalF{SDM+tFVJkR4$e}AWjAOY=XwxZ)-}|f~}@5<>LMH&An*k7ilcFN!*NO@`!k` z>uJ39rLcl~P4Oc;FqwgygC!%gGJ}mD4D+K8iw;L-2cGvSUv#v!^@SxRgU<&x9HGLB zw5dzdywZ(fVaANX>1|U?SWwFpL!jtnKJgriFh6j8?r(oXCzjD>bY=ibd=3jUv|8QI z3upKb72R0!F;dtXbiX%r?8PEQF7OGzJ`v1CeW>f|=e&gX$ZZR?%$l0*!wHm0^N}^ntfPd?P%k^o^jKR~hmL;W-)R zd82}GmsDl88G{yM+&YKYhHoJtq~gS@ueOtc^d~t><;{C!iL6+bECn?vZ-Nt&3T1IT zS)nYBCrg2EzB^J_CQg=6C^F*$Y@JG$ib>-&#O}9s{Cj`UtH1U@MY&&UM&?ylV;NUE zAVQ|$hOxLLWmr+s_S8{D#^ge#nae}w9mw3-#uZ7K$%_a)JCG2&@lO+L3uH`cK`kwN z2e7!WtRIpZI9#jA&971PO(`i!Nh&Vx!-6L5Hx`XbO)i87GRrCJ$JBs{ifNW5Z9gnl z44jQgUy`gXL5mR^&9g6g)~PI~q8fBr#RvB)>#?f4wqgclWM7yEg5@cz;DWLw`j3C@|h(IvnV3 zIYWOV31ws-3p={*2~;p$I3woUk{AM^x3i>k8K-ZwD=MF)XVxMCK>}h+AUUwLkaxKR zx?ma0;z^|FK7bTskpc+WbUsj>z;aPp7JNXQM%R)0wI3~LVoA4er)RcrNAe3u{*W!X z8%xdyhN`+RtS0rN>q#HL85cF%r~m5*;jDvF(Z%@Xl0Zq-V$<*$0+rTG;IKO=3OKxnMu zZHa@F&TT3%EVf|)fwEP*aD84j{eDzoh}KQ(st=x_c>5Ly8RF!)&(#x?ek}&sbn#)S zOTqJH0r9E8N5wd^j`IEGq@(JIinocPf&QC#?4j3)XH!!XN}o#|#pU7~Y&Xq{Q%S>< z2|W?dNb-5c4t1f{K2MJsl0G;r-5BUS)TLb&RhphSespYjaqN8Kk6!%)0t3Utht(%* zwcdVcG)t~9kM336ltkFl?iR{+H+f1ypv^XHh_U5(I84|Kkitzbe@$d`buuim3-gQB zeS_V+{lol>3Hf2;4p-z295AeYJY2#m!kPZDMO+=hZ7Rf_b zg>DOl$g~HAa4)PwUX#KvZro_W%ReZz@P4?5X9ES)e}24QN&TRK;U2C+2mR_``f$2;|#JYnX%c^i_VVw2(%6^dcPbG*BC!ot2J zt2sYt;l`~?oSJtosWLfbR_CN84ujWD%Y2|Y76VQYh!$p2yg>IJqt{zw6;002IZ%@| zEL=|Bpq~N_lN_A|G|b>UpIK$qOU!A_z;tX}m@&mUBEB|bP->yCe}y&`fJ3*UWh2qD zOqZ1hWrPg2z`o)J)e`GUwM`{K1L?Dty<`E@5(9WA_kJN!40>Qa$BnC-cuO^L2-#$z zT^M?Zi7miwGl@PMdNRm{jd84r_qfY5<=USG#+cy5IA6EH#YVkv(lGCV-sH|(1AI>J z+NJz#aP)8w_dvC0)JP9?P=`7?N9_^p?jAG3-6N3fgno{9qR68_ZEXWn13j;w22_Avf1ypG;v)Wa)5G;ztHf4tla-D%mrq&&mL zRBO|7TlT}w=dkk2Tf+g2Ig}WzOHln#XyRc+&Bg&!YoOb#!|g#aHD0}-7-bD?hTLy~ zV)7RZZ!;V1Krv77$EALfEf_RzQeArbNX0a{tU#Lr#d>--Aq&P1(z%yP;JI z9mG4S`-Ma@t&*+lLIUHhyT(ma3C*0KWf~?gwA?I7!{jKj`)E0)sstcO%AWy}WC!sU zucz9cC5An#ltX9DDx12CghfQ@2ie+-6xiTN^BL$-0+rUI${V(7)%SOF+NNntoP#qaWbm8GT_6Z0L z)rM|gF@3@cN0*&WE^eeIUZ?esHUX8u03l0NlWe##O;A*%CO9g}`nw$hE;J*+GxOKV zct217SdShAoM4%T>E2-@KSVNqw_}9tIWC?JWw~ndP{zQPCK@VYd5q}7B4T19fMauu z57Wl$!@}aD+a7tOZRuLFW@)OP=u%VT;%*VBiIfSf>mA~^qtgU{%ATZ6HoANuwt@MK zywbA)C)1^pKs#=C3>0b5BW$KFEG$k3NF8z4X@|i6UN=Om3){2GF=6Jc@~Jz>5N$f> zu{BgMYdERF?gF?Wl$GT@;R*VJayU+b8J0xB8H?nn)XcpsK7CIH{^bjdfp2}_=;9LZ z3z~-Ktj|7UIWmu$aS{m)XAFGXlvLxCHY|eutiOpK;z^qX!A@#mu#+0__qlI*`I(fd z=7dTnH#lUn$r7M*ymgZa7|J1F(9_TQB#uo9Lc2L9jZF#)3Z=g~Cg6r9Ow%W647-6! zRtnq2NvgG|WN7z6;0T0nC+jB;4*~Dqqi_S51SS{?hLSfhyu2HXG1Ti#eG4TzzX>h4q_P5H&ur-=;dhvEIJp9yl5;ex1FU1YkL^aQ4v zvOChMt-1X^uDkN(xbuBax}2-~;!53l7vaM1EBDNqvuEYa8!PwCp1F7V@9Z$4@Z>Hj zVAKP*JPaZKq;Q!lkr4COq~PEOaa|={e;>re!t((6jo{bFobW`p-vEWcM^MrvyFA}+ zX~I*^VKLGL^`w(A7DyLF-J0NbJ@x0GNr9A*$>!hZud7O>X)g;|ZIfe=GSE&|45JnP zZfUa#hbQ4~Nq930Vvow$q=e`SSxU%>qVN`%q3SOkUT%{`Gv5Hc^5}nAUlHDdIJ&AT zBdwYnv1bpeE7Qr|lza@xvP+3&x{XePeD0=`yoMa_qLa(8%lW^z0MLMU=WKlA&lSS^ zJ+k(mZz8n-sLq5ISF6IY&30G=bqEG`&lYBfQPQ1SS($2r(!<&ILvixNiRtAj#I71iiATVvcyn?cwKcXe!TN}MNDMf>@=wYm|>daodVeh=SBpJQEj*+1NW z=#V9={KNcpv5QxeX{_UV8@pI)Y=$zr56O~)Ol&~+XmP(KORjXi_n&(-`iiYvmGlqd z#9SJP%0m9S}*kap$|+?p(wjXn0tfo6n{uG!wPwGLAJ zTT-S>Qo3@>Ab0&g=n)EAva(tV3m0Z*FD%rjrRnwQ=}OnM*_l~0)6-{WWz9-!H^s)L zrpCrX3gci?;-JMGO56hZ4+DuyD^v@KlsT2!h%WlOr2Sz+It{`v<3lE&n@gOZzj%m1 zyTB4k%AiLv%T4mEXEm}sP9LJ#;_DD@U$dyXU`Et^i9ROw6CXhhz>#Ie$=+L-`h>BG zA#uH@Jn6do(p-`mpP12LoR(#tVkGqqro?!2Q|dHx_S9i>n3OBKAtR$9yZ0BWG6QO# zFl7Kcai%k__?Dz{C^uHB&wC|y^TQC5~wwXPIBID>lgVPXZ^9xlkb z5gm_w6ioVc-RHZia3`LIfcBlZW9oicyb3B?>>3?gU$4O5=VS=k z?st-ENh@7(?!bX_>>Ha*f1K+tD*prVA(LcbMA}uF?dd&o5NpGp*Un`W=9@pR*fqVh zxF#>Jl8_4F%->eTjVg>Uhhr=?DKi)g3X@X`K^#ww;$U$Gh+EtJhD7c~{t6wU^b}Oi zk(Np(|Fno;>+%tWnyG%klQP+vyF2XS^ks2O^>gj*tj_kR!n7@Q@31i~D?4S4B)f*H z!h^ImC)EFv`DRRyMuq>(7z-O2?`RqG%nC zBe$T8KpX2UpG%GKB<}3M9j3iWL#s3G4HIRG)=cPiIPtiY_Fr8HRSF5*1KcHX7^Vl7 zjV|QZy;B(}&QcA;9Yyy})j&*`&5AF?bk!zlh&h09~YS#;1SEZgx z47XvJ6t`Vj|6JMG*!bv!W~0$eTUKspYV2HTHl}3KO^qubY)Hkwh6kl@6cY=Bt8ckO zsKXE4Yb?*=j*jNjYhsOb=V3NBySLHh;&gGERL^bVG?22%`n8xYJ}cLAcyB$+`KK)9 zCC87`U;qAhOrE{MzhNJ8N>0_QFz7#nEP%pb^=vX%_+cuUHG_7N+0*GGSiHi7GuWsb z@d6V;Vcp{GP6KhLNfy0I%gx!vC0UteOmc;&>wYN(1u4k|1$et&_$R+WWrjG3nPl|n zhV6GgQrF`FlB_aSR+{ipbnV`)fS&;`MQTA}VgdW0JL;9S`~t^QN|iGtK5(|nOG@E= zs;BUa+4F<hU%`yuQR(^Li6#x*ir;a(d#YIkpr zp+nl-{Q|jt{G8FTBa-6=%bU9kI0zFk6tu7H2ixfV3_})o_+g`uS@aMYH!3MG-S zZKDOou`n#?Wik5yZ!Cu7(dm9HMzZzQI~fcv9vl}2mvS=qxaw2XpY1kaQ|!-YB&_qw z8CscdOv}wpOU+YGh673mt1dGuR-cuHm&Xbxc~`JhvTl%dy!}Ri%x(h|yt?ehN#W!z zPyuO^SRBM!M>a0^&4vMsj@EChIZ~ICGwx8$HpQ`%H}1>^wA2Z2@m{KQ&=QJ@+(FBI z@HEHjw^Tn#)6QK4cu8br!y*)$CcMX= z1MSS&E;tJtNJGLO^#V0Eu!_HD18bbNRhqpx_3jtJ+1^5UTsv`N**#w@mtKV8s<*_D zTi6LeCwhw}(c986UstakS4l!{Wi{8?X;sGfSR4K2Xf_$b-b?>IF*&!gT^(b`%Epcy z7ALc^O}!;t^66L=19{CtGG?!*FpM()7YniU$dACvv4@BZm85CXN%{FSI}C&m^PkAG!rBwlFauamPfb5YXE zT(pt6a(!oTEPwsf@XlpXg{F-Y-vk|x!j?1x!8n+ur32z^$?{8Vw-Oex$MQf00J7%M z=QlL(Dk8^@78sJV{0NCIPK)RJe*LxL#){2j4>iAZ@PniJiiG2J3)8}>nl8UH^K=`2 z8$uBe3G>&BgCtCzm2r_bq?SbcXD93Ojy{*Oqiy|BYP@o{pqN<^p#0CdOBNLm>T2QiW99c}UUL#s@Ju5FuE^juA#pR&t zW@ZLgB%z%O^NEFw7%V}&1Kk6eY!$8$0Dy{fQ)w6;g#@b5{cJgw+&OEQ?1)KeyB{RS z>F}95cXHo8`+3O#N)K)xRNQ|j{STQHO25?ZSlRkic%J5W7yyE&iGC`8PZ8wl; zdRG4?@ugpLVGVR-?Se^ADJ-h3O^OLOp-&?Cu{;ZtCxtzO_W)>_n9dk56cuBbBW_y7 zPpX1q21N{v2rLUFkMU!%C?iNuOSnvjb4=P&a!XQcKsG9+@(pcvh>LodXR3KJ zS*{RXrzHyI7rc;@n{e)r*Wbq5Kax%S_uO$w&IKJ6n>W2ma7p?{GAo9+WDczv={uw- zyxP1lFQIa{Usx&GlvP_Btcl1lj<42en7f!fFoF*YFbQyQV6Ay3^u_ncfmJc7>u24Qt z6e%Xmfjsd?M^NdIMX=d4(@VBgPe?bo+#`ED78=wp~&e*n=SZRU+Q<=V3= z`_*KSdUyW#@%i`&eY*b?w$zQx9XmF6WF6>O3N39mMmO3E(e0%FitO%WqUXjDz2aPV zlyDve+}iM&0sS4DEN~Y+@I7on_E19iZ6>ACMcRadZ{NCmHX`2PQ{g|`T%%d!^bBo`>t)il4ZVx&<#$}SOV_c&1u|OM7tcE!|3b6fjd;K|&xA~8A+lm( zrR4;O2lT>v;X5uFhfOx{csRwGdWm>$zyUOdesud&CgNDXfp~t}`!HGp6ArvDn9#gn zM{WukT9hw=3H8B^v~P0vKX*fNFq zwvzmUg@ZBaY}$pWB(W0{e~`qnGb4%HkU`p^>QGm`W(=*&nV+@4H8I&)wV%~c9Lp#o z$L>$jG*C2i`LdZA?U^%MXJ*|-(YWlC^s<(UrpG6k6VrPs;w-HS4(28@IuN258$`5~ zGbEi6Y0^wPfP%O{UKW4m*x^+=`49N(Tdwi=aWwlPZXI97o7n^Av1k!@iCcH{ zD9*>*tlhL)JctKai_)y()(!(dIBl*rs$w`{Fih)Zl`;hK&`*dsrx9mH4kbKjd3n!Ee3fmtv9qAF^etzyJUM diff --git a/shared/src/commonMain/composeResources/font/komoju_font_inter_light.ttf b/shared/src/commonMain/composeResources/font/komoju_font_inter_light.ttf deleted file mode 100644 index acae361282a129f3f44b919dab13fdb139a9316d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 343704 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 diff --git a/shared/src/commonMain/composeResources/font/komoju_font_inter_medium.ttf b/shared/src/commonMain/composeResources/font/komoju_font_inter_medium.ttf deleted file mode 100644 index 71d90172f10fab5ed0fd422a40cc09e7ef558072..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 343200 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 M#2c+wFW;w$4Cq|>)5%=|W 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

=(yz@O*K8Sz}a-+D&3^4H!)XVVw(P>=y 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.aAeWmKV`DG&sXXuv!^w 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%0Dp20B>@C_f+r#Qpk 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 lqFBl_ZY - - 入力したカード所有者名は空欄にできません - 入力したカード所有者名は無効です - 入力したカード番号は無効です - 入力した有効期限は無効です - 入力した CVV は無効です - 支払いは成功しました - 支払いは失敗しました - 支払いを待機しています - 支払いは正常に処理されました。 - 支払いは失敗しました。 - 続行するには、お近くの %1$s に行って支払いを行う必要があります。 - 支払いは処理を待機しています。 - エラー - 領収書番号 - 確認コード - 完了 - お支払い方法を更新 - 手順を表示 - 了解 - ご質問がありますか? お問い合わせください - 後で行います - お支払い処理がキャンセルされたことがわかりました。これが間違いだった場合は、もう一度試して購入を完了してください。 - お支払いの処理を試みましたが、問題が発生しました。続行するには、以下のお支払い方法を更新してください。 - カードへの請求を試みましたが、問題が発生しました。続行するには、以下のお支払い方法を更新してください - ストアに戻る - お支払いオプション - %1$s を支払う - カード所有者名 - TARO YAMADA - カード番号 - MM/YY - CVV - 今後のお支払いのためにこのカードを保存する - デイリーヤマザキ - ファミリーマート - ローソン - ミニストップ - セイコーマート - セブンイレブン - レシートのフルネーム - 名前(カードに記載)領収書) - メール - メールアドレスを入力してください - NET CASH 情報 - NET CASH ID - Alipay での支払い - AU Pay での支払い - Mer Pay での支払い - Paypay での支払い - Rakuten Pay での支払い - Line Pay での支払い - 支払いを完了するには、Alipay にリダイレクトされます - 支払いを完了するには、AU Pay にリダイレクトされます - 支払いを完了するには、Mer Pay にリダイレクトされます - 支払いを完了するには、Paypay にリダイレクトされます - 支払いを完了するには、Rakuten にリダイレクトされますお支払い - お支払いを完了するには、Line Pay にリダイレクトされます - Alipay に進みます - AuPay に進みます - MerPay に進みます - PayPay に進みます - Rakuten に進みます - LinePay に進みます - Paidy に進みます - 注: Web ウィンドウが開きます。購入後、元のウィンドウに戻ります。 - 氏名 - お名前を入力してください - 電話番号 - 電話番号を入力してください - - - 姓(フリガナ) - 名(フリガナ) - WebMoney情報 - プリペイド番号 - お支払い完了 - ご注文ありがとうございます - BitCash情報 - ひらがなID - 銀行振込 - BitCash - カード - コンビニ - NetCash - au Pay - AliPay - メルペイ - PayPay - 楽天ペイ - Line Pay - 不明 - その他 - Paidy - PayEasy - WebMoney - 合計支払額 - 入力した名前は空欄にできません - 入力したメールアドレスは無効です - コンビニのブランドを選択してください - 入力した電話番号は空欄にできません - 入力した電話番号は無効です - 入力したネットキャッシュIDは空欄にできません - 入力したネットキャッシュIDは無効です - 入力したビットキャッシュIDは空欄にできません - 入力したビットキャッシュIDは無効です - 入力したプリペイド番号は空欄にできません - 入力したプリペイド番号は無効です - 入力した姓は空欄にできません - 入力した名字は空欄にできません - 入力した名のフリガナは空 - 入力したファーストネームの読みはカナでなければなりません - 入力したラストネームの読みは空にできません - 入力したラストネームの読みはカナでなければなりません - はい - いいえ - 支払いをキャンセルしてもよろしいですか? - 支払いをキャンセルしますか? - \ No newline at end of file diff --git a/shared/src/commonMain/composeResources/values/strings.xml b/shared/src/commonMain/composeResources/values/strings.xml deleted file mode 100644 index 2bd2a0f..0000000 --- a/shared/src/commonMain/composeResources/values/strings.xml +++ /dev/null @@ -1,121 +0,0 @@ - - - this-should-not-be-the-case - The entered cardholder name cannot be empty - The entered cardholder name is not valid - The entered card number is not valid - The entered expiry date is not valid - The entered CVV is not valid - Payment successful - Payment failed - Awaiting payment - Your payment has been processed successfully. - Your payment has failed. - You need to go to your local %1$s and make the payment to proceed. - Your payment is awaiting processing. - Error - Receipt Number - Confirmation Code - Done - Update Payment method - View instructions - Okay - Have a question? Contact us - I will do it later - We noticed that you’ve canceled the payment process. If this was a mistake, you can try again to complete your purchase. - We attempted to process your payment, but something went wrong. Please update your payment method below to continue. - We tried to charge your card but, something went wrong. Please update your payment method below to continue - Back to store - Payment Options - Pay %1$s - Cardholder name - Full name on card - Card Number - MM/YY - CVV - Save this card for future payments - Daily Yamazaki - Family Mart - Lawson - MiniStop - SeicoMart - 7-Eleven - Full name on receipt - Name (shown on receipt) - Email - Enter Your Email Address - NET CASH Information - NET CASH id - Payment via Alipay - Payment via AU Pay - Payment via Mer Pay - Payment via Paypay - Payment via Rakuten Pay - Payment via Line Pay - You will be redirected to Alipay to complete the payment - You will be redirected to AU Pay to complete the payment - You will be redirected to Mer Pay to complete the payment - You will be redirected to Paypay to complete the payment - You will be redirected to Rakuten to complete the payment - You will be redirected to Line Pay to complete the payment - Continue to Alipay - Continue to AuPay - Continue to MerPay - Continue to PayPay - Continue to Rakuten - Continue to LinePay - Continue to Paidy - Note, a web window will be opened. After purchase you will be redirected back. - Full Name - Enter your name - Phone Number - Enter your phone number - Last Name - First Name - Last Name (Phonetic) - First Name (Phonetic) - WebMoney Information - Prepaid number - Payment Success - Thank you for your order - BitCash Information - Hiragana id - Bank Transfer - BitCash - Credit card - Konbini - NetCash - au Pay - AliPay - Mer Pay - PayPay - Rakuten Pay - Line Pay - Unknown - Other - Paidy - PayEasy - WebMoney - Total Payment - The entered name cannot be empty - The entered email is not valid - Please select a konbini brand - The entered phone number cannot be empty - The entered phone number is not valid - The entered net cash id cannot be empty - The entered net cash id is not valid - The entered bit cash id cannot be empty - The entered bit cash id is not valid - The entered prepaid number cannot be empty - The entered prepaid number is not valid - The entered last name cannot be empty - The entered first name cannot be empty - The entered first name phonetic cannot be empty - The entered first name phonetic must be a kana - The entered last name phonetic cannot be empty - The entered last name phonetic must be a kana - Yes - No - Are you sure you want to cancel the payment? - Cancel Payment? - \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/EnglishStrings.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/EnglishStrings.kt new file mode 100644 index 0000000..f879d82 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/EnglishStrings.kt @@ -0,0 +1,129 @@ +package com.komoju.mobile.sdk.i18n + +object EnglishStrings : I18nStrings { + override fun get(key: I18nStringKey): String = when (key) { + I18nStringKey.cadrholder_name_cannot_be_empty -> "The entered cardholder name cannot be empty" + I18nStringKey.the_entered_cardholder_name_is_not_valid -> "The entered cardholder name is not valid" + I18nStringKey.the_entered_card_number_is_not_valid -> "The entered card number is not valid" + I18nStringKey.the_entered_expiry_date_is_not_valid -> "The entered expiry date is not valid" + I18nStringKey.the_entered_cvv_is_not_valid -> "The entered CVV is not valid" + I18nStringKey.payment_successful -> "Payment successful" + I18nStringKey.payment_failed -> "Payment failed" + I18nStringKey.awaiting_payment -> "Awaiting payment" + I18nStringKey.your_payment_has_been_processed_successfully -> "Your payment has been processed successfully." + I18nStringKey.your_payment_has_failed -> "Your payment has failed." + I18nStringKey.awaiting_payment_instruction -> "You need to go to your local %1s and make the payment to proceed." + I18nStringKey.your_payment_is_awaiting_processing -> "Your payment is awaiting processing." + I18nStringKey.error -> "Error" + I18nStringKey.receipt_number -> "Receipt Number" + I18nStringKey.confirmation_code -> "Confirmation Code" + I18nStringKey.done -> "Done" + I18nStringKey.update_payment_method -> "Update Payment method" + I18nStringKey.view_instructions -> "View instructions" + I18nStringKey.okay -> "Okay" + I18nStringKey.have_a_question_contact_us -> "Have a question? Contact us" + I18nStringKey.i_will_do_it_later -> "I will do it later" + I18nStringKey.error_user_cancel -> + "We noticed that you’ve canceled the payment process. " + + "If this was a mistake you cantry again to complete your purchase." + I18nStringKey.error_other -> + "We attempted to process your payment but something went wrong. " + + "Please update your payment method below to continue." + I18nStringKey.credit_card_error -> + "We tried to charge your card but, something went wrong. " + + "Please update your payment method below to continue" + I18nStringKey.back_to_store -> "Back to store" + I18nStringKey.payment_options -> "Payment Options" + I18nStringKey.pay -> "Pay %1s" + I18nStringKey.cardholder_name -> "Cardholder name" + I18nStringKey.full_name_on_card -> "Full name on card" + I18nStringKey.card_number -> "Card Number" + I18nStringKey.mm_yy -> "MM/YY" + I18nStringKey.cvv -> "CVV" + I18nStringKey.save_this_card_for_future_payments -> "Save this card for future payments" + I18nStringKey.daily_yamazaki -> "Daily Yamazaki" + I18nStringKey.family_mart -> "Family Mart" + I18nStringKey.lawson -> "Lawson" + I18nStringKey.ministop -> "MiniStop" + I18nStringKey.seicomart -> "SeicoMart" + I18nStringKey._7_eleven -> "7-Eleven" + I18nStringKey.full_name_on_receipt -> "Full name on receipt" + I18nStringKey.name_shown_on_receipt -> "Name (shown on receipt)" + I18nStringKey.email -> "Email" + I18nStringKey.enter_your_email_address -> "Enter Your Email Address" + I18nStringKey.net_cash_information -> "NET CASH Information" + I18nStringKey.net_cash_id -> "NET CASH id" + I18nStringKey.payment_via_alipay -> "Payment via Alipay" + I18nStringKey.payment_via_au_pay -> "Payment via AU Pay" + I18nStringKey.payment_via_mer_pay -> "Payment via Mer Pay" + I18nStringKey.payment_via_paypay -> "Payment via Paypay" + I18nStringKey.payment_via_rakuten_pay -> "Payment via Rakuten Pay" + I18nStringKey.payment_via_line_pay -> "Payment via Line Pay" + I18nStringKey.you_will_be_redirected_to_alipay -> "You will be redirected to Alipay to complete the payment" + I18nStringKey.you_will_be_redirected_to_au_pay -> "You will be redirected to AU Pay to complete the payment" + I18nStringKey.you_will_be_redirected_to_mer_pay -> "You will be redirected to Mer Pay to complete the payment" + I18nStringKey.you_will_be_redirected_to_paypay -> "You will be redirected to Paypay to complete the payment" + I18nStringKey.you_will_be_redirected_to_rakuten -> "You will be redirected to Rakuten to complete the payment" + I18nStringKey.you_will_be_redirected_to_line_pay -> "You will be redirected to Line Pay to complete the payment" + I18nStringKey.continue_to_alipay -> "Continue to Alipay" + I18nStringKey.continue_to_aupay -> "Continue to AuPay" + I18nStringKey.continue_to_merpay -> "Continue to MerPay" + I18nStringKey.continue_to_paypay -> "Continue to PayPay" + I18nStringKey.continue_to_rakuten -> "Continue to Rakuten" + I18nStringKey.continue_to_linepay -> "Continue to LinePay" + I18nStringKey.continue_to_paidy -> "Continue to Paidy" + I18nStringKey.webview_open_info -> "Note a web window will be opened.After purchase you will be redirected back." + I18nStringKey.full_name -> "Full Name" + I18nStringKey.enter_your_name -> "Enter your name" + I18nStringKey.phone_number -> "Phone Number" + I18nStringKey.enter_your_phone_number -> "Enter your phone number" + I18nStringKey.last_name -> "Last Name" + I18nStringKey.first_name -> "First Name" + I18nStringKey.last_name_phonetic -> "Last Name (Phonetic)" + I18nStringKey.first_name_phonetic -> "First Name (Phonetic)" + I18nStringKey.webmoney_information -> "WebMoney Information" + I18nStringKey.prepaid_number -> "Prepaid number" + I18nStringKey.payment_success -> "Payment Success" + I18nStringKey.thank_you_for_your_order -> "Thank you for your order" + I18nStringKey.bitcash_information -> "BitCash Information" + I18nStringKey.hiragana_id -> "Hiragana id" + I18nStringKey.bank_transfer -> "Bank Transfer" + I18nStringKey.bitcash -> "BitCash" + I18nStringKey.credit_card -> "Credit card" + I18nStringKey.konbini -> "Konbini" + I18nStringKey.netcash -> "NetCash" + I18nStringKey.aupay -> "au Pay" + I18nStringKey.alipay -> "AliPay" + I18nStringKey.merpay -> "Mer Pay" + I18nStringKey.paypay -> "PayPay" + I18nStringKey.rakuten_pay -> "Rakuten Pay" + I18nStringKey.line_pay -> "Line Pay" + I18nStringKey.unknown -> "Unknown" + I18nStringKey.other -> "Other" + I18nStringKey.paidy -> "Paidy" + I18nStringKey.payeasy -> "PayEasy" + I18nStringKey.webmoney -> "WebMoney" + I18nStringKey.total_payment -> "Total Payment" + I18nStringKey.the_entered_name_cannot_be_empty -> "The entered name cannot be empty" + I18nStringKey.the_entered_email_is_not_valid -> "The entered email is not valid" + I18nStringKey.please_select_a_konbini_brand -> "Please select a konbini brand" + I18nStringKey.the_entered_phone_number_cannot_be_empty -> "The entered phone number cannot be empty" + I18nStringKey.the_entered_phone_number_is_not_valid -> "The entered phone number is not valid" + I18nStringKey.the_entered_net_cash_id_cannot_be_empty -> "The entered net cash id cannot be empty" + I18nStringKey.the_entered_net_cash_id_is_not_valid -> "The entered net cash id is not valid" + I18nStringKey.the_entered_bit_cash_id_cannot_be_empty -> "The entered bit cash id cannot be empty" + I18nStringKey.the_entered_bit_cash_id_is_not_valid -> "The entered bit cash id is not valid" + I18nStringKey.the_entered_prepaid_number_cannot_be_empty -> "The entered prepaid number cannot be empty" + I18nStringKey.the_entered_prepaid_number_is_not_valid -> "The entered prepaid number is not valid" + I18nStringKey.the_entered_last_name_cannot_be_empty -> "The entered last name cannot be empty" + I18nStringKey.the_entered_first_name_cannot_be_empty -> "The entered first name cannot be empty" + I18nStringKey.the_entered_first_name_phonetic_cannot_be_empty -> "The entered first name phonetic cannot be empty" + I18nStringKey.the_entered_first_name_phonetic_must_be_a_kana -> "The entered first name phonetic must be a kana" + I18nStringKey.the_entered_last_name_phonetic_cannot_be_empty -> "The entered last name phonetic cannot be empty" + I18nStringKey.the_entered_last_name_phonetic_must_be_a_kana -> "The entered last name phonetic must be a kana" + I18nStringKey.yes -> "Yes" + I18nStringKey.no -> "No" + I18nStringKey.are_you_sure_you_want_to_cancel_the_payment -> "Are you sure you want to cancel the payment?" + I18nStringKey.cancel_payment -> "Cancel Payment?" + } +} diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/I18nStringKey.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/I18nStringKey.kt new file mode 100644 index 0000000..c6308cf --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/I18nStringKey.kt @@ -0,0 +1,121 @@ +package com.komoju.mobile.sdk.i18n + +enum class I18nStringKey { + cadrholder_name_cannot_be_empty, + the_entered_cardholder_name_is_not_valid, + the_entered_card_number_is_not_valid, + the_entered_expiry_date_is_not_valid, + the_entered_cvv_is_not_valid, + payment_successful, + payment_failed, + awaiting_payment, + your_payment_has_been_processed_successfully, + your_payment_has_failed, + awaiting_payment_instruction, + your_payment_is_awaiting_processing, + error, + receipt_number, + confirmation_code, + done, + update_payment_method, + view_instructions, + okay, + have_a_question_contact_us, + i_will_do_it_later, + error_user_cancel, + error_other, + credit_card_error, + back_to_store, + payment_options, + pay, + cardholder_name, + full_name_on_card, + card_number, + mm_yy, + cvv, + save_this_card_for_future_payments, + daily_yamazaki, + family_mart, + lawson, + ministop, + seicomart, + _7_eleven, + full_name_on_receipt, + name_shown_on_receipt, + email, + enter_your_email_address, + net_cash_information, + net_cash_id, + payment_via_alipay, + payment_via_au_pay, + payment_via_mer_pay, + payment_via_paypay, + payment_via_rakuten_pay, + payment_via_line_pay, + you_will_be_redirected_to_alipay, + you_will_be_redirected_to_au_pay, + you_will_be_redirected_to_mer_pay, + you_will_be_redirected_to_paypay, + you_will_be_redirected_to_rakuten, + you_will_be_redirected_to_line_pay, + continue_to_alipay, + continue_to_aupay, + continue_to_merpay, + continue_to_paypay, + continue_to_rakuten, + continue_to_linepay, + continue_to_paidy, + webview_open_info, + full_name, + enter_your_name, + phone_number, + enter_your_phone_number, + last_name, + first_name, + last_name_phonetic, + first_name_phonetic, + webmoney_information, + prepaid_number, + payment_success, + thank_you_for_your_order, + bitcash_information, + hiragana_id, + bank_transfer, + bitcash, + credit_card, + konbini, + netcash, + aupay, + alipay, + merpay, + paypay, + rakuten_pay, + line_pay, + unknown, + other, + paidy, + payeasy, + webmoney, + total_payment, + the_entered_name_cannot_be_empty, + the_entered_email_is_not_valid, + please_select_a_konbini_brand, + the_entered_phone_number_cannot_be_empty, + the_entered_phone_number_is_not_valid, + the_entered_net_cash_id_cannot_be_empty, + the_entered_net_cash_id_is_not_valid, + the_entered_bit_cash_id_cannot_be_empty, + the_entered_bit_cash_id_is_not_valid, + the_entered_prepaid_number_cannot_be_empty, + the_entered_prepaid_number_is_not_valid, + the_entered_last_name_cannot_be_empty, + the_entered_first_name_cannot_be_empty, + the_entered_first_name_phonetic_cannot_be_empty, + the_entered_first_name_phonetic_must_be_a_kana, + the_entered_last_name_phonetic_cannot_be_empty, + the_entered_last_name_phonetic_must_be_a_kana, + yes, + no, + are_you_sure_you_want_to_cancel_the_payment, + cancel_payment, +} diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/I18nStringResource.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/I18nStringResource.kt new file mode 100644 index 0000000..639b8b7 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/I18nStringResource.kt @@ -0,0 +1,21 @@ +package com.komoju.mobile.sdk.i18n + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import com.komoju.mobile.sdk.ui.theme.LocalKomojuLanguage + +@Composable +fun i18nStringResource(key: I18nStringKey, vararg args: Any): String { + val languageCode = LocalKomojuLanguage.current.code + val strings = when (languageCode) { + "en" -> EnglishStrings + else -> EnglishStrings + } + val string = remember(key, languageCode) { strings.get(key).replaceWithArgs(args.map { it.toString() }) } + return string +} + +private val SimpleStringFormatRegex = Regex("""%(\d)\$[ds]""") +internal fun String.replaceWithArgs(args: List) = SimpleStringFormatRegex.replace(this) { matchResult -> + args[matchResult.groupValues[1].toInt() - 1] +} diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/I18nStrings.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/I18nStrings.kt new file mode 100644 index 0000000..fb8fd40 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/I18nStrings.kt @@ -0,0 +1,9 @@ +package com.komoju.mobile.sdk.i18n + +interface I18nStrings { + fun get(key: I18nStringKey): String + + companion object { + operator fun invoke(key: I18nStringKey) = EnglishStrings.get(key) + } +} diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/KomojuLanguage.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/KomojuLanguage.kt new file mode 100644 index 0000000..8fa9e2b --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/KomojuLanguage.kt @@ -0,0 +1,6 @@ +package com.komoju.mobile.sdk.i18n + +import androidx.compose.runtime.Stable + +@Stable +data class KomojuLanguage(val code: String) diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcAlipay.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcAlipay.kt new file mode 100644 index 0000000..eee329a --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcAlipay.kt @@ -0,0 +1,69 @@ +package com.komoju.mobile.sdk.ui.icon + +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.PathFillType +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.unit.dp + +val KomojuIcon.Alipay: ImageVector + get() { + if (_KomojuIcAlipay != null) { + return _KomojuIcAlipay!! + } + _KomojuIcAlipay = ImageVector.Builder( + name = "KomojuIcAlipay", + defaultWidth = 38.dp, + defaultHeight = 38.dp, + viewportWidth = 38f, + viewportHeight = 38f, + ).apply { + path( + fill = SolidColor(Color(0xFF1677FF)), + pathFillType = PathFillType.EvenOdd, + ) { + moveTo(30.862f, 23.864f) + curveTo(36.233f, 25.688f, 37.519f, 25.764f, 37.519f, 25.764f) + verticalLineTo(6.08f) + curveTo(37.519f, 2.736f, 34.796f, 0f, 31.543f, 0f) + horizontalLineTo(5.976f) + curveTo(2.723f, 0f, 0f, 2.736f, 0f, 6.08f) + verticalLineTo(31.92f) + curveTo(0f, 35.264f, 2.723f, 38f, 5.976f, 38f) + horizontalLineTo(31.468f) + curveTo(34.796f, 38f, 37.443f, 35.264f, 37.443f, 31.92f) + verticalLineTo(31.692f) + curveTo(37.443f, 31.692f, 27.685f, 27.588f, 22.768f, 25.156f) + curveTo(19.44f, 29.26f, 15.204f, 31.768f, 10.817f, 31.768f) + curveTo(3.328f, 31.768f, 0.756f, 25.156f, 4.312f, 20.748f) + curveTo(5.068f, 19.76f, 6.43f, 18.924f, 8.472f, 18.392f) + curveTo(11.649f, 17.632f, 16.717f, 18.924f, 21.483f, 20.444f) + curveTo(22.315f, 18.848f, 23.071f, 17.1f, 23.601f, 15.2f) + horizontalLineTo(8.926f) + verticalLineTo(13.68f) + horizontalLineTo(16.49f) + verticalLineTo(11.02f) + horizontalLineTo(7.337f) + verticalLineTo(9.5f) + horizontalLineTo(16.49f) + verticalLineTo(5.7f) + curveTo(16.49f, 5.7f, 16.49f, 5.016f, 17.171f, 5.016f) + horizontalLineTo(20.878f) + verticalLineTo(9.5f) + horizontalLineTo(29.955f) + verticalLineTo(11.02f) + horizontalLineTo(20.878f) + verticalLineTo(13.68f) + horizontalLineTo(28.291f) + curveTo(27.61f, 16.644f, 26.475f, 19.304f, 25.189f, 21.66f) + curveTo(27.383f, 22.572f, 29.35f, 23.332f, 30.862f, 23.864f) + close() + } + }.build() + + return _KomojuIcAlipay!! + } + +@Suppress("ObjectPropertyName") +private var _KomojuIcAlipay: ImageVector? = null diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcAmex.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcAmex.kt new file mode 100644 index 0000000..185618d --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcAmex.kt @@ -0,0 +1,157 @@ +package com.komoju.mobile.sdk.ui.icon + +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.PathFillType +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.group +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.unit.dp + +val KomojuIcon.Amex: ImageVector + get() { + if (_KomojuIcAmex != null) { + return _KomojuIcAmex!! + } + _KomojuIcAmex = ImageVector.Builder( + name = "KomojuIcAmex", + defaultWidth = 24.dp, + defaultHeight = 17.dp, + viewportWidth = 24f, + viewportHeight = 17f, + ).apply { + group { + path(fill = SolidColor(Color(0xFF016FD0))) { + moveTo(22f, 0.5f) + horizontalLineTo(2f) + curveToRelative(-1.105f, 0f, -2f, 0.895f, -2f, 2f) + verticalLineToRelative(12f) + curveToRelative(0f, 1.105f, 0.895f, 2f, 2f, 2f) + horizontalLineToRelative(20f) + curveToRelative(1.105f, 0f, 2f, -0.895f, 2f, -2f) + verticalLineToRelative(-12f) + curveToRelative(0f, -1.105f, -0.895f, -2f, -2f, -2f) + close() + } + path( + fill = SolidColor(Color(0xFFFFFFFE)), + pathFillType = PathFillType.EvenOdd, + ) { + moveTo(13.764f, 13.894f) + verticalLineTo(8.193f) + lineToRelative(10.148f, 0.009f) + verticalLineToRelative(1.574f) + lineToRelative(-1.173f, 1.254f) + lineToRelative(1.173f, 1.265f) + verticalLineToRelative(1.608f) + horizontalLineToRelative(-1.873f) + lineToRelative(-0.995f, -1.098f) + lineToRelative(-0.988f, 1.102f) + lineToRelative(-6.292f, -0.013f) + close() + } + path( + fill = SolidColor(Color(0xFF016FD0)), + pathFillType = PathFillType.EvenOdd, + ) { + moveTo(14.442f, 13.269f) + verticalLineTo(8.82f) + horizontalLineToRelative(3.772f) + verticalLineToRelative(1.025f) + horizontalLineToRelative(-2.551f) + verticalLineToRelative(0.695f) + horizontalLineToRelative(2.49f) + verticalLineToRelative(1.008f) + horizontalLineToRelative(-2.49f) + verticalLineToRelative(0.684f) + horizontalLineToRelative(2.551f) + verticalLineToRelative(1.037f) + horizontalLineToRelative(-3.772f) + close() + } + path( + fill = SolidColor(Color(0xFF016FD0)), + pathFillType = PathFillType.EvenOdd, + ) { + moveTo(18.195f, 13.269f) + lineToRelative(2.088f, -2.227f) + lineToRelative(-2.088f, -2.222f) + horizontalLineToRelative(1.616f) + lineToRelative(1.275f, 1.41f) + lineToRelative(1.279f, -1.41f) + horizontalLineToRelative(1.547f) + verticalLineToRelative(0.035f) + lineToRelative(-2.043f, 2.187f) + lineToRelative(2.043f, 2.164f) + verticalLineToRelative(0.063f) + horizontalLineTo(22.35f) + lineToRelative(-1.298f, -1.424f) + lineToRelative(-1.285f, 1.424f) + horizontalLineToRelative(-1.572f) + close() + } + path( + fill = SolidColor(Color(0xFFFFFFFE)), + pathFillType = PathFillType.EvenOdd, + ) { + moveTo(14.237f, 3.132f) + horizontalLineToRelative(2.446f) + lineToRelative(0.86f, 1.951f) + verticalLineTo(3.132f) + horizontalLineToRelative(3.019f) + lineToRelative(0.521f, 1.462f) + lineToRelative(0.523f, -1.462f) + horizontalLineToRelative(2.306f) + verticalLineToRelative(5.701f) + horizontalLineTo(11.725f) + lineToRelative(2.512f, -5.701f) + close() + } + path( + fill = SolidColor(Color(0xFF016FD0)), + pathFillType = PathFillType.EvenOdd, + ) { + moveTo(14.7f, 3.751f) + lineToRelative(-1.974f, 4.446f) + horizontalLineToRelative(1.354f) + lineToRelative(0.373f, -0.891f) + horizontalLineToRelative(2.018f) + lineToRelative(0.372f, 0.891f) + horizontalLineToRelative(1.387f) + lineToRelative(-1.965f, -4.446f) + horizontalLineTo(14.7f) + close() + moveToRelative(0.17f, 2.558f) + lineToRelative(0.592f, -1.415f) + lineToRelative(0.591f, 1.415f) + horizontalLineTo(14.87f) + close() + } + path( + fill = SolidColor(Color(0xFF016FD0)), + pathFillType = PathFillType.EvenOdd, + ) { + moveTo(18.212f, 8.196f) + verticalLineTo(3.751f) + lineToRelative(1.903f, 0.006f) + lineToRelative(0.979f, 2.733f) + lineToRelative(0.986f, -2.739f) + horizontalLineToRelative(1.832f) + verticalLineToRelative(4.445f) + lineToRelative(-1.179f, 0.01f) + verticalLineTo(5.153f) + lineTo(21.62f, 8.196f) + horizontalLineToRelative(-1.075f) + lineToRelative(-1.136f, -3.054f) + verticalLineToRelative(3.054f) + horizontalLineToRelative(-1.197f) + close() + } + } + }.build() + + return _KomojuIcAmex!! + } + +@Suppress("ObjectPropertyName") +private var _KomojuIcAmex: ImageVector? = null diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcAppOpensInfo.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcAppOpensInfo.kt new file mode 100644 index 0000000..412c676 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcAppOpensInfo.kt @@ -0,0 +1,70 @@ +package com.komoju.mobile.sdk.ui.icon + +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.StrokeCap +import androidx.compose.ui.graphics.StrokeJoin +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.unit.dp + +val KomojuIcon.AppOpensInfo: ImageVector + get() { + if (_KomojuIcAppOpensInfo != null) { + return _KomojuIcAppOpensInfo!! + } + _KomojuIcAppOpensInfo = ImageVector.Builder( + name = "KomojuIcAppOpensInfo", + defaultWidth = 32.dp, + defaultHeight = 33.dp, + viewportWidth = 32f, + viewportHeight = 33f, + ).apply { + path(fill = SolidColor(Color(0xFFFFFFFF))) { + moveTo(16f, 0.5f) + lineTo(16f, 0.5f) + arcTo(16f, 16f, 0f, isMoreThanHalf = false, isPositiveArc = true, 32f, 16.5f) + lineTo(32f, 16.5f) + arcTo(16f, 16f, 0f, isMoreThanHalf = false, isPositiveArc = true, 16f, 32.5f) + lineTo(16f, 32.5f) + arcTo(16f, 16f, 0f, isMoreThanHalf = false, isPositiveArc = true, 0f, 16.5f) + lineTo(0f, 16.5f) + arcTo(16f, 16f, 0f, isMoreThanHalf = false, isPositiveArc = true, 16f, 0.5f) + close() + } + path(fill = SolidColor(Color(0xFFFFFFFF))) { + moveTo(6f, 6.5f) + horizontalLineToRelative(20f) + verticalLineToRelative(20f) + horizontalLineToRelative(-20f) + close() + } + path( + fill = SolidColor(Color(0xFFFFB800)), + stroke = SolidColor(Color(0xFFFFB800)), + strokeLineWidth = 2f, + strokeLineCap = StrokeCap.Round, + strokeLineJoin = StrokeJoin.Round, + ) { + moveTo(16.833f, 8.167f) + lineTo(9.411f, 17.073f) + curveTo(9.121f, 17.422f, 8.975f, 17.596f, 8.973f, 17.744f) + curveTo(8.971f, 17.872f, 9.028f, 17.994f, 9.128f, 18.074f) + curveTo(9.242f, 18.167f, 9.469f, 18.167f, 9.923f, 18.167f) + horizontalLineTo(16f) + lineTo(15.167f, 24.833f) + lineTo(22.589f, 15.927f) + curveTo(22.879f, 15.578f, 23.025f, 15.404f, 23.027f, 15.256f) + curveTo(23.029f, 15.128f, 22.972f, 15.006f, 22.872f, 14.926f) + curveTo(22.758f, 14.833f, 22.531f, 14.833f, 22.077f, 14.833f) + horizontalLineTo(16f) + lineTo(16.833f, 8.167f) + close() + } + }.build() + + return _KomojuIcAppOpensInfo!! + } + +@Suppress("ObjectPropertyName") +private var _KomojuIcAppOpensInfo: ImageVector? = null diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcAuPay.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcAuPay.kt new file mode 100644 index 0000000..7533dca --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcAuPay.kt @@ -0,0 +1,104 @@ +package com.komoju.mobile.sdk.ui.icon + +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.PathFillType +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.unit.dp + +val KomojuIcon.AuPay: ImageVector + get() { + if (_KomojuIcAuPay != null) { + return _KomojuIcAuPay!! + } + _KomojuIcAuPay = ImageVector.Builder( + name = "KomojuIcAuPay", + defaultWidth = 84.dp, + defaultHeight = 16.dp, + viewportWidth = 84f, + viewportHeight = 16f, + ).apply { + path( + fill = SolidColor(Color(0xFFEB560C)), + pathFillType = PathFillType.EvenOdd, + ) { + moveTo(49.52f, 16f) + horizontalLineToRelative(-2.77f) + verticalLineTo(0f) + horizontalLineTo(53f) + arcToRelative(5.55f, 5.55f, 0f, isMoreThanHalf = false, isPositiveArc = true, 5.24f, 5.6f) + arcTo(5.58f, 5.58f, 0f, isMoreThanHalf = false, isPositiveArc = true, 53f, 11.23f) + horizontalLineToRelative(-3.47f) + verticalLineTo(16f) + close() + moveToRelative(22.16f, 0f) + horizontalLineTo(68.7f) + lineToRelative(-0.92f, -3.09f) + horizontalLineToRelative(-5.65f) + lineTo(61.05f, 16f) + horizontalLineToRelative(-2.98f) + lineToRelative(5.68f, -16f) + horizontalLineToRelative(2.23f) + lineToRelative(5.7f, 16f) + close() + moveToRelative(6.49f, 0f) + horizontalLineToRelative(-2.6f) + verticalLineToRelative(-4.66f) + lineTo(69.72f, 0f) + horizontalLineToRelative(3.34f) + lineToRelative(3.8f, 8.06f) + lineTo(80.65f, 0f) + horizontalLineTo(84f) + lineToRelative(-5.83f, 11.34f) + verticalLineTo(16f) + close() + moveToRelative(-11.3f, -5.64f) + lineTo(64.9f, 4.64f) + lineToRelative(-1.93f, 5.72f) + horizontalLineToRelative(3.9f) + close() + moveTo(52.6f, 8.64f) + curveToRelative(0.53f, 0f, 2.73f, -0.59f, 2.73f, -3.06f) + curveToRelative(0f, -2.48f, -2.23f, -2.92f, -2.73f, -2.92f) + horizontalLineToRelative(-3.13f) + verticalLineToRelative(5.98f) + horizontalLineToRelative(3.13f) + close() + moveTo(17.41f, 0.06f) + curveToRelative(-2.05f, 9.23f, -4.24f, 13.43f, -2.87f, 13.67f) + curveToRelative(1.37f, 0.24f, 3f, -1.6f, 3.78f, -2.96f) + curveToRelative(0.94f, -1.63f, 1.33f, -5.65f, 2.49f, -8.04f) + curveToRelative(0.96f, -2f, 3.4f, -2.88f, 5.04f, -2.67f) + curveToRelative(-1.96f, 8.88f, -4.14f, 13.5f, -2.54f, 13.78f) + curveToRelative(2.02f, 0.35f, 4.1f, -1.24f, 5.03f, -2.87f) + curveToRelative(1.57f, -2.73f, 0.82f, -3.66f, 2.7f, -8.19f) + arcToRelative(5.36f, 5.36f, 0f, isMoreThanHalf = false, isPositiveArc = true, 5.03f, -2.76f) + curveTo(35.87f, 1.22f, 33f, 12.04f, 33f, 12.04f) + reflectiveCurveToRelative(-0.4f, 1.44f, 0.34f, 1.72f) + curveToRelative(1.47f, 0.57f, 6.1f, -5.59f, 7.63f, -8.42f) + horizontalLineToRelative(2.34f) + curveToRelative(-3.85f, 5.98f, -7.29f, 10.95f, -11.43f, 10.46f) + curveToRelative(-3.06f, -0.37f, -2.9f, -2.73f, -2.9f, -2.73f) + reflectiveCurveToRelative(-2.14f, 3.05f, -6.11f, 2.88f) + curveToRelative(-3.81f, -0.17f, -4.08f, -2.84f, -4.08f, -2.84f) + reflectiveCurveToRelative(-2.48f, 3f, -5.4f, 2.69f) + curveToRelative(-3.23f, -0.33f, -2.97f, -2.84f, -2.97f, -2.84f) + reflectiveCurveToRelative(-2.36f, 3.51f, -6.7f, 2.99f) + curveToRelative(-1.09f, -0.14f, -4.76f, -0.83f, -3.44f, -5.83f) + curveToRelative(2.43f, -9.2f, 9.4f, -10.4f, 17.13f, -10.06f) + close() + moveTo(12.4f, 1.9f) + curveToRelative(-0.85f, 4f, -1.68f, 7.18f, -2.82f, 9.13f) + curveToRelative(-1.5f, 2.57f, -3.63f, 3.13f, -4.7f, 2.8f) + curveToRelative(-1.5f, -0.45f, -0.36f, -4f, 0.42f, -5.61f) + curveToRelative(0.93f, -1.8f, 2.4f, -5.42f, 7.1f, -6.32f) + close() + } + }.build() + + return _KomojuIcAuPay!! + } + +@Suppress("ObjectPropertyName") +private var _KomojuIcAuPay: ImageVector? = null diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcBankTransfer.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcBankTransfer.kt new file mode 100644 index 0000000..13fd3fb --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcBankTransfer.kt @@ -0,0 +1,84 @@ +package com.komoju.mobile.sdk.ui.icon + +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.PathFillType +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.unit.dp + +val KomojuIcon.BankTransfer: ImageVector + get() { + if (_KomojuIcBankTransfer != null) { + return _KomojuIcBankTransfer!! + } + _KomojuIcBankTransfer = ImageVector.Builder( + name = "KomojuIcBankTransfer", + defaultWidth = 47.dp, + defaultHeight = 49.dp, + viewportWidth = 47f, + viewportHeight = 49f, + ).apply { + path( + fill = SolidColor(Color(0xFF1D354F)), + pathFillType = PathFillType.EvenOdd, + ) { + moveTo(0f, 12.408f) + lineTo(23.5f, 0f) + lineTo(47f, 12.408f) + verticalLineToRelative(4.136f) + horizontalLineTo(28.577f) + verticalLineToRelative(5.64f) + horizontalLineToRelative(-9.776f) + verticalLineToRelative(-5.64f) + horizontalLineToRelative(-6.017f) + verticalLineToRelative(5.64f) + horizontalLineTo(3.008f) + verticalLineToRelative(-5.64f) + horizontalLineTo(0f) + verticalLineToRelative(-4.136f) + close() + moveTo(47f, 43.24f) + verticalLineToRelative(5.64f) + horizontalLineTo(0f) + verticalLineToRelative(-5.64f) + horizontalLineToRelative(3.008f) + verticalLineToRelative(-4.512f) + horizontalLineToRelative(1.883f) + verticalLineTo(22.184f) + horizontalLineToRelative(6.016f) + verticalLineToRelative(16.544f) + horizontalLineToRelative(1.877f) + verticalLineToRelative(4.512f) + horizontalLineToRelative(6.017f) + verticalLineToRelative(-4.512f) + horizontalLineToRelative(1.879f) + verticalLineTo(22.184f) + horizontalLineToRelative(6.016f) + verticalLineToRelative(16.544f) + horizontalLineToRelative(1.881f) + verticalLineToRelative(4.512f) + horizontalLineToRelative(6.017f) + verticalLineToRelative(-4.511f) + horizontalLineToRelative(9.776f) + verticalLineToRelative(4.511f) + horizontalLineTo(47f) + close() + moveTo(34.594f, 16.544f) + horizontalLineToRelative(9.776f) + verticalLineToRelative(5.64f) + horizontalLineToRelative(-1.881f) + verticalLineToRelative(16.544f) + horizontalLineToRelative(-6.016f) + verticalLineTo(22.184f) + horizontalLineToRelative(-1.879f) + verticalLineToRelative(-5.64f) + close() + } + }.build() + + return _KomojuIcBankTransfer!! + } + +@Suppress("ObjectPropertyName") +private var _KomojuIcBankTransfer: ImageVector? = null diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcBitcash.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcBitcash.kt new file mode 100644 index 0000000..135316e --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcBitcash.kt @@ -0,0 +1,89 @@ +package com.komoju.mobile.sdk.ui.icon + +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.PathFillType +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.unit.dp + +val KomojuIcon.Bitcash: ImageVector + get() { + if (_KomojuIcBitcash != null) { + return _KomojuIcBitcash!! + } + _KomojuIcBitcash = ImageVector.Builder( + name = "KomojuIcBitcash", + defaultWidth = 56.dp, + defaultHeight = 54.dp, + viewportWidth = 218f, + viewportHeight = 211f, + ).apply { + path( + fill = SolidColor(Color(0xFF00388B)), + pathFillType = PathFillType.EvenOdd, + ) { + moveTo(196f, 135.2f) + arcToRelative(67.2f, 67.2f, 0f, isMoreThanHalf = false, isPositiveArc = true, -64.3f, 66.9f) + horizontalLineToRelative(-2.5f) + lineToRelative(-3.9f, -0.1f) + lineToRelative(-6.3f, -0.5f) + arcTo(98.5f, 98.5f, 0f, isMoreThanHalf = false, isPositiveArc = true, 129.2f, 5f) + horizontalLineToRelative(2f) + arcToRelative(51.6f, 51.6f, 0f, isMoreThanHalf = false, isPositiveArc = true, 41.6f, 79f) + arcToRelative(67.6f, 67.6f, 0f, isMoreThanHalf = false, isPositiveArc = true, 23.2f, 51.2f) + close() + moveToRelative(-40.5f, -0.5f) + arcToRelative(26.7f, 26.7f, 0f, isMoreThanHalf = false, isPositiveArc = false, -25.1f, -26.5f) + horizontalLineToRelative(-1.5f) + arcToRelative(20.3f, 20.3f, 0f, isMoreThanHalf = false, isPositiveArc = true, -20.3f, -20.3f) + arcToRelative(20f, 20f, 0f, isMoreThanHalf = false, isPositiveArc = true, 3.7f, -11.5f) + arcToRelative(20f, 20f, 0f, isMoreThanHalf = false, isPositiveArc = true, 16.6f, -8.8f) + arcToRelative(11f, 11f, 0f, isMoreThanHalf = false, isPositiveArc = false, 11.1f, -11f) + arcToRelative(11f, 11f, 0f, isMoreThanHalf = false, isPositiveArc = false, -3.3f, -7.8f) + curveToRelative(-2f, -2.1f, -4.9f, -3.3f, -7.8f, -3.3f) + horizontalLineToRelative(-3f) + curveToRelative(-0.9f, 0.2f, -1.8f, 0.4f, -2.8f, 0.4f) + arcToRelative(57.6f, 57.6f, 0f, isMoreThanHalf = false, isPositiveArc = false, -42f, 90f) + curveToRelative(2.2f, 2.9f, 4.3f, 5.7f, 6.9f, 8.4f) + arcToRelative(58.6f, 58.6f, 0f, isMoreThanHalf = false, isPositiveArc = false, 37.9f, 17f) + lineToRelative(3f, 0.1f) + horizontalLineToRelative(1.5f) + curveToRelative(14f, -0.8f, 25.1f, -12.5f, 25.1f, -26.7f) + close() + } + path(fill = SolidColor(Color(0xFFABCD03))) { + moveTo(155.5f, 134.9f) + arcToRelative(26.7f, 26.7f, 0f, isMoreThanHalf = false, isPositiveArc = true, -25.1f, 26.5f) + horizontalLineToRelative(-4f) + arcToRelative(47f, 47f, 0f, isMoreThanHalf = false, isPositiveArc = true, -30.6f, -79.9f) + curveToRelative(7.9f, -7.9f, 18.8f, -13f, 30.6f, -13.7f) + horizontalLineToRelative(2.5f) + arcToRelative(20.3f, 20.3f, 0f, isMoreThanHalf = false, isPositiveArc = false, 0f, 40.6f) + horizontalLineToRelative(1.5f) + curveToRelative(14f, 0.6f, 25.1f, 12.3f, 25.1f, 26.5f) + close() + } + path(fill = SolidColor(Color(0xFFE62E8B))) { + moveTo(130.6f, 161.4f) + horizontalLineToRelative(-4.5f) + arcToRelative(57.7f, 57.7f, 0f, isMoreThanHalf = false, isPositiveArc = true, -54.9f, -57.8f) + arcToRelative(57.8f, 57.8f, 0f, isMoreThanHalf = false, isPositiveArc = true, 54.9f, -57.9f) + horizontalLineToRelative(3f) + curveToRelative(2.9f, 0f, 5.7f, 1.2f, 7.8f, 3.2f) + arcToRelative(11f, 11f, 0f, isMoreThanHalf = false, isPositiveArc = true, 3.2f, 7.9f) + arcToRelative(11f, 11f, 0f, isMoreThanHalf = false, isPositiveArc = true, -11f, 11f) + horizontalLineToRelative(-2.5f) + curveToRelative(-12f, 0.7f, -22.7f, 5.8f, -30.7f, 13.7f) + arcToRelative(47.3f, 47.3f, 0f, isMoreThanHalf = false, isPositiveArc = false, 0f, 66.2f) + curveToRelative(8f, 8f, 18.8f, 13.1f, 30.7f, 13.7f) + horizontalLineToRelative(2.5f) + close() + } + }.build() + + return _KomojuIcBitcash!! + } + +@Suppress("ObjectPropertyName") +private var _KomojuIcBitcash: ImageVector? = null diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcCreditCard.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcCreditCard.kt new file mode 100644 index 0000000..e3f677f --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcCreditCard.kt @@ -0,0 +1,72 @@ +package com.komoju.mobile.sdk.ui.icon + +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.StrokeCap +import androidx.compose.ui.graphics.StrokeJoin +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.unit.dp + +val KomojuIcon.CreditCard: ImageVector + get() { + if (_KomojuIcCreditCard != null) { + return _KomojuIcCreditCard!! + } + _KomojuIcCreditCard = ImageVector.Builder( + name = "KomojuIcCreditCard", + defaultWidth = 32.dp, + defaultHeight = 33.dp, + viewportWidth = 32f, + viewportHeight = 33f, + ).apply { + path(fill = SolidColor(Color(0xFF79C3F8))) { + moveTo(2.667f, 11.433f) + verticalLineToRelative(2.4f) + horizontalLineToRelative(26.666f) + verticalLineToRelative(-2.4f) + curveToRelative(0f, -1.493f, 0f, -2.24f, -0.29f, -2.81f) + curveToRelative(-0.256f, -0.502f, -0.664f, -0.91f, -1.166f, -1.166f) + curveToRelative(-0.57f, -0.29f, -1.317f, -0.29f, -2.81f, -0.29f) + horizontalLineTo(6.933f) + curveToRelative(-1.493f, 0f, -2.24f, 0f, -2.81f, 0.29f) + curveToRelative(-0.502f, 0.256f, -0.91f, 0.664f, -1.166f, 1.166f) + curveToRelative(-0.29f, 0.57f, -0.29f, 1.317f, -0.29f, 2.81f) + close() + } + path( + stroke = SolidColor(Color(0xFF0F1C29)), + strokeLineWidth = 1.5f, + strokeLineCap = StrokeCap.Round, + strokeLineJoin = StrokeJoin.Round, + ) { + moveTo(29.333f, 13.833f) + horizontalLineTo(2.667f) + moveToRelative(12f, 5.334f) + horizontalLineTo(8f) + moveToRelative(-5.333f, -7.734f) + verticalLineToRelative(10.134f) + curveToRelative(0f, 1.493f, 0f, 2.24f, 0.29f, 2.81f) + curveToRelative(0.256f, 0.502f, 0.664f, 0.91f, 1.166f, 1.166f) + curveToRelative(0.57f, 0.29f, 1.317f, 0.29f, 2.81f, 0.29f) + horizontalLineToRelative(18.134f) + curveToRelative(1.493f, 0f, 2.24f, 0f, 2.81f, -0.29f) + curveToRelative(0.502f, -0.256f, 0.91f, -0.664f, 1.166f, -1.166f) + curveToRelative(0.29f, -0.57f, 0.29f, -1.317f, 0.29f, -2.81f) + verticalLineTo(11.433f) + curveToRelative(0f, -1.493f, 0f, -2.24f, -0.29f, -2.81f) + curveToRelative(-0.256f, -0.502f, -0.664f, -0.91f, -1.166f, -1.166f) + curveToRelative(-0.57f, -0.29f, -1.317f, -0.29f, -2.81f, -0.29f) + horizontalLineTo(6.933f) + curveToRelative(-1.493f, 0f, -2.24f, 0f, -2.81f, 0.29f) + curveToRelative(-0.502f, 0.256f, -0.91f, 0.664f, -1.166f, 1.166f) + curveToRelative(-0.29f, 0.57f, -0.29f, 1.317f, -0.29f, 2.81f) + close() + } + }.build() + + return _KomojuIcCreditCard!! + } + +@Suppress("ObjectPropertyName") +private var _KomojuIcCreditCard: ImageVector? = null diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcCvv.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcCvv.kt new file mode 100644 index 0000000..ec9cab5 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcCvv.kt @@ -0,0 +1,125 @@ +package com.komoju.mobile.sdk.ui.icon + +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.PathFillType +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.group +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.unit.dp + +val KomojuIcon.Cvv: ImageVector + get() { + if (_KomojuIcCvv != null) { + return _KomojuIcCvv!! + } + _KomojuIcCvv = ImageVector.Builder( + name = "KomojuIcCvv", + defaultWidth = 25.dp, + defaultHeight = 17.dp, + viewportWidth = 25f, + viewportHeight = 17f, + ).apply { + group { + path( + fill = SolidColor(Color(0xFF565656)), + fillAlpha = 0.2f, + strokeAlpha = 0.2f, + pathFillType = PathFillType.EvenOdd, + ) { + moveTo(16.52f, 2.02f) + horizontalLineToRelative(-15f) + curveTo(0.82f, 2.02f, 0f, 2.83f, 0f, 3.55f) + verticalLineToRelative(11.43f) + curveToRelative(0f, 0.71f, 0.82f, 1.52f, 1.52f, 1.52f) + horizontalLineToRelative(19.05f) + curveToRelative(0.7f, 0f, 1.53f, -0.8f, 1.53f, -1.52f) + verticalLineTo(9.24f) + curveToRelative(-0.65f, 0.58f, -1.44f, 0.96f, -2.3f, 1.1f) + verticalLineToRelative(0.06f) + curveToRelative(0f, 0.5f, -0.26f, 0.77f, -0.75f, 0.77f) + horizontalLineTo(2.29f) + curveToRelative(-0.5f, 0f, -0.77f, -0.26f, -0.77f, -0.77f) + verticalLineTo(9.64f) + curveToRelative(0f, -0.5f, 0.28f, -0.76f, 0.77f, -0.76f) + horizontalLineToRelative(13.35f) + arcToRelative(4.56f, 4.56f, 0f, isMoreThanHalf = false, isPositiveArc = true, 0.88f, -6.86f) + close() + } + path( + fill = SolidColor(Color(0xFF565656)), + fillAlpha = 0.3f, + strokeAlpha = 0.3f, + pathFillType = PathFillType.EvenOdd, + ) { + moveTo(14.74f, 4.31f) + horizontalLineTo(0f) + verticalLineTo(6.6f) + horizontalLineToRelative(14.54f) + arcToRelative(4.6f, 4.6f, 0f, isMoreThanHalf = false, isPositiveArc = true, 0.2f, -2.29f) + close() + } + path( + fill = SolidColor(Color(0xFF565656)), + pathFillType = PathFillType.EvenOdd, + ) { + moveTo(19.05f, 11.17f) + arcToRelative(5.33f, 5.33f, 0f, isMoreThanHalf = true, isPositiveArc = true, 0f, -10.67f) + arcToRelative(5.33f, 5.33f, 0f, isMoreThanHalf = false, isPositiveArc = true, 0f, 10.67f) + close() + moveToRelative(-2.12f, -7.55f) + horizontalLineToRelative(-0.6f) + lineToRelative(-1.47f, 0.75f) + verticalLineToRelative(0.76f) + lineToRelative(1.16f, -0.6f) + verticalLineToRelative(3.51f) + horizontalLineToRelative(0.92f) + verticalLineTo(3.62f) + horizontalLineToRelative(-0.01f) + close() + moveToRelative(1.75f, 0.61f) + curveToRelative(0.44f, 0f, 0.74f, 0.25f, 0.74f, 0.6f) + curveToRelative(0f, 0.38f, -0.36f, 0.65f, -0.88f, 0.65f) + horizontalLineToRelative(-0.22f) + verticalLineToRelative(0.64f) + horizontalLineToRelative(0.27f) + curveToRelative(0.55f, 0f, 0.92f, 0.28f, 0.92f, 0.67f) + curveToRelative(0f, 0.38f, -0.36f, 0.64f, -0.88f, 0.64f) + curveToRelative(-0.38f, 0f, -0.76f, -0.12f, -1.16f, -0.35f) + verticalLineToRelative(0.76f) + curveToRelative(0.43f, 0.18f, 0.85f, 0.28f, 1.27f, 0.28f) + curveToRelative(1f, 0f, 1.69f, -0.51f, 1.69f, -1.25f) + curveToRelative(0f, -0.52f, -0.32f, -0.94f, -0.86f, -1.1f) + curveToRelative(0.46f, -0.16f, 0.76f, -0.56f, 0.76f, -1.02f) + curveToRelative(0f, -0.71f, -0.63f, -1.2f, -1.55f, -1.2f) + curveToRelative(-0.41f, 0f, -0.82f, 0.09f, -1.2f, 0.26f) + verticalLineToRelative(0.74f) + curveToRelative(0.37f, -0.2f, 0.74f, -0.32f, 1.1f, -0.32f) + close() + moveToRelative(3.3f, 1.66f) + curveToRelative(0.55f, 0f, 0.94f, 0.33f, 0.94f, 0.76f) + curveToRelative(0f, 0.45f, -0.39f, 0.76f, -0.95f, 0.76f) + curveToRelative(-0.33f, 0f, -0.68f, -0.1f, -1.04f, -0.33f) + verticalLineToRelative(0.79f) + curveToRelative(0.37f, 0.17f, 0.75f, 0.25f, 1.13f, 0.25f) + curveToRelative(0.2f, 0f, 0.38f, -0.03f, 0.55f, -0.08f) + curveToRelative(0.4f, -0.64f, 0.63f, -1.4f, 0.63f, -2.2f) + lineToRelative(-0.02f, -0.31f) + curveToRelative(-0.28f, -0.17f, -0.6f, -0.25f, -0.93f, -0.25f) + curveToRelative(-0.14f, 0f, -0.29f, 0.01f, -0.44f, 0.04f) + verticalLineToRelative(-1f) + horizontalLineToRelative(1.1f) + curveToRelative(-0.1f, -0.24f, -0.21f, -0.47f, -0.35f, -0.7f) + horizontalLineToRelative(-1.54f) + verticalLineToRelative(2.4f) + curveToRelative(0.3f, -0.07f, 0.6f, -0.13f, 0.91f, -0.13f) + close() + } + } + }.build() + + return _KomojuIcCvv!! + } + +@Suppress("ObjectPropertyName") +private var _KomojuIcCvv: ImageVector? = null diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcDailyYamazaki.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcDailyYamazaki.kt new file mode 100644 index 0000000..b0afb8d --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcDailyYamazaki.kt @@ -0,0 +1,664 @@ +package com.komoju.mobile.sdk.ui.icon + +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.group +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.unit.dp +import kotlin.Suppress + +val KomojuIcon.DailyYamazaki: ImageVector + get() { + if (_KomojuIcDailyYamazaki != null) { + return _KomojuIcDailyYamazaki!! + } + _KomojuIcDailyYamazaki = ImageVector.Builder( + name = "KomojuIcDailyYamazaki", + defaultWidth = 32.dp, + defaultHeight = 32.dp, + viewportWidth = 32f, + viewportHeight = 32f, + ).apply { + path(fill = SolidColor(Color(0xFFFFE9EA))) { + moveTo(5.333f, 0f) + horizontalLineToRelative(21.334f) + arcTo(5.333f, 5.333f, 0f, isMoreThanHalf = false, isPositiveArc = true, 32f, 5.333f) + verticalLineToRelative(21.334f) + arcTo(5.333f, 5.333f, 0f, isMoreThanHalf = false, isPositiveArc = true, 26.667f, 32f) + horizontalLineTo(5.333f) + arcTo(5.333f, 5.333f, 0f, isMoreThanHalf = false, isPositiveArc = true, 0f, 26.667f) + verticalLineTo(5.333f) + arcTo(5.333f, 5.333f, 0f, isMoreThanHalf = false, isPositiveArc = true, 5.333f, 0f) + close() + } + group { + path(fill = SolidColor(Color(0xFFD71718))) { + moveTo(27.704f, 10.323f) + curveToRelative(0.526f, 0f, 0.953f, 0.429f, 0.953f, 0.955f) + verticalLineToRelative(9.445f) + curveToRelative(0f, 0.526f, -0.427f, 0.955f, -0.953f, 0.955f) + horizontalLineTo(4.299f) + curveToRelative(-0.526f, 0f, -0.955f, -0.43f, -0.955f, -0.955f) + verticalLineToRelative(-9.445f) + curveToRelative(0f, -0.526f, 0.429f, -0.955f, 0.955f, -0.955f) + horizontalLineToRelative(23.405f) + close() + } + path( + stroke = SolidColor(Color(0xFFFFFFFF)), + strokeLineWidth = 0.0736638f, + ) { + moveTo(27.704f, 10.323f) + curveToRelative(0.526f, 0f, 0.953f, 0.429f, 0.953f, 0.955f) + verticalLineToRelative(9.445f) + curveToRelative(0f, 0.526f, -0.427f, 0.955f, -0.953f, 0.955f) + horizontalLineTo(4.299f) + curveToRelative(-0.526f, 0f, -0.955f, -0.43f, -0.955f, -0.955f) + verticalLineToRelative(-9.445f) + curveToRelative(0f, -0.526f, 0.429f, -0.955f, 0.955f, -0.955f) + horizontalLineToRelative(23.405f) + close() + } + path(fill = SolidColor(Color(0xFFD71718))) { + moveTo(27.704f, 10.323f) + curveToRelative(0.526f, 0f, 0.953f, 0.429f, 0.953f, 0.955f) + verticalLineToRelative(9.445f) + curveToRelative(0f, 0.526f, -0.427f, 0.955f, -0.953f, 0.955f) + horizontalLineTo(4.299f) + curveToRelative(-0.526f, 0f, -0.955f, -0.43f, -0.955f, -0.955f) + verticalLineToRelative(-9.445f) + curveToRelative(0f, -0.526f, 0.429f, -0.955f, 0.955f, -0.955f) + horizontalLineToRelative(23.405f) + close() + } + path(fill = SolidColor(Color(0xFFFFFFFF))) { + moveTo(8.654f, 18.47f) + curveToRelative(1.495f, 0f, 2.708f, -1.306f, 2.708f, -2.916f) + curveToRelative(0f, -1.61f, -1.213f, -2.917f, -2.708f, -2.917f) + reflectiveCurveToRelative(-2.706f, 1.306f, -2.706f, 2.917f) + curveToRelative(0f, 1.61f, 1.211f, 2.916f, 2.706f, 2.916f) + close() + } + path(fill = SolidColor(Color(0xFF430307))) { + moveTo(27.522f, 14.173f) + curveToRelative(-0.05f, -0.088f, -0.147f, -0.138f, -0.268f, -0.138f) + horizontalLineToRelative(-1.913f) + curveToRelative(-0.168f, 0f, -0.355f, 0.092f, -0.47f, 0.221f) + curveToRelative(-0.081f, -0.132f, -0.229f, -0.221f, -0.387f, -0.221f) + horizontalLineToRelative(-1.533f) + lineToRelative(0.225f, -1.282f) + curveToRelative(0.018f, -0.109f, -0.012f, -0.218f, -0.078f, -0.299f) + curveToRelative(-0.067f, -0.08f, -0.171f, -0.127f, -0.281f, -0.127f) + horizontalLineToRelative(-1.898f) + curveToRelative(-0.126f, 0f, -0.244f, 0.056f, -0.331f, 0.146f) + curveToRelative(-0.148f, -0.098f, -0.328f, -0.148f, -0.535f, -0.152f) + verticalLineToRelative(-0.003f) + horizontalLineToRelative(-0.741f) + verticalLineToRelative(0.005f) + curveToRelative(-0.276f, 0.005f, -0.531f, 0.091f, -0.758f, 0.255f) + curveToRelative(-0.239f, 0.172f, -0.386f, 0.384f, -0.437f, 0.629f) + curveToRelative(-0.053f, 0.253f, 0.014f, 0.483f, 0.193f, 0.668f) + curveToRelative(0.065f, 0.065f, 0.138f, 0.119f, 0.22f, 0.16f) + horizontalLineToRelative(-0.103f) + verticalLineToRelative(-0.002f) + horizontalLineToRelative(-0.71f) + verticalLineToRelative(0.002f) + horizontalLineToRelative(-0.836f) + verticalLineToRelative(-0.002f) + horizontalLineToRelative(-1.607f) + curveToRelative(-0.124f, -0.028f, -0.262f, -0.043f, -0.416f, -0.043f) + curveToRelative(-0.569f, 0f, -1.068f, 0.212f, -1.485f, 0.63f) + curveToRelative(-0.048f, 0.046f, -0.093f, 0.094f, -0.134f, 0.141f) + curveToRelative(-0.009f, -0.044f, -0.038f, -0.2f, -0.058f, -0.275f) + curveToRelative(-0.037f, -0.154f, -0.068f, -0.245f, -0.094f, -0.325f) + lineToRelative(-0.025f, -0.081f) + lineToRelative(-0.001f, -0.004f) + lineToRelative(-0.002f, -0.002f) + curveToRelative(-0.236f, -0.644f, -0.582f, -1.029f, -0.861f, -1.294f) + curveToRelative(-0.321f, -0.293f, -0.836f, -0.618f, -1.195f, -0.76f) + curveToRelative(-0.324f, -0.127f, -0.525f, -0.186f, -0.843f, -0.24f) + curveToRelative(-0.909f, -0.2f, -2.22f, -0.074f, -2.22f, -0.074f) + lineToRelative(0.007f, 0.006f) + curveToRelative(-0.167f, 0.012f, -0.331f, 0.031f, -0.478f, 0.063f) + curveToRelative(-0.852f, 0.18f, -1.316f, 0.491f, -1.376f, 0.535f) + lineToRelative(0.006f, -0.004f) + lineToRelative(-0.015f, 0.009f) + lineToRelative(0.008f, -0.005f) + curveToRelative(-0.086f, 0.048f, -0.816f, 0.493f, -1.179f, 1.394f) + curveToRelative(-0.295f, 0.728f, -0.229f, 1.202f, -0.191f, 1.485f) + curveToRelative(0.07f, 0.499f, 0.222f, 0.913f, 0.466f, 1.267f) + curveToRelative(0.169f, 0.247f, 0.38f, 0.446f, 0.491f, 0.545f) + curveToRelative(-0.176f, 0.415f, -0.583f, 1.379f, -0.606f, 1.537f) + curveToRelative(-0.05f, 0.336f, 0f, 0.559f, 0.186f, 0.826f) + curveToRelative(0.223f, 0.323f, 0.647f, 0.6f, 1.257f, 0.821f) + curveToRelative(0.242f, 0.088f, 0.549f, 0.138f, 0.88f, 0.157f) + lineToRelative(-0.004f, 0.001f) + reflectiveCurveToRelative(0.672f, 0.07f, 1.46f, -0.008f) + curveToRelative(0.486f, -0.034f, 0.957f, -0.121f, 1.296f, -0.243f) + curveToRelative(0.86f, -0.311f, 1.321f, -0.675f, 1.669f, -1.023f) + lineToRelative(0.026f, 0.105f) + lineToRelative(0.016f, 0.056f) + lineToRelative(-0.104f, 0.583f) + curveToRelative(-0.013f, 0.068f, 0.005f, 0.135f, 0.046f, 0.186f) + curveToRelative(0.042f, 0.049f, 0.104f, 0.078f, 0.172f, 0.078f) + horizontalLineToRelative(0.236f) + lineToRelative(0.022f, -0.002f) + lineToRelative(0.017f, 0.002f) + horizontalLineToRelative(0.237f) + curveToRelative(0.026f, 0f, 0.054f, -0.006f, 0.078f, -0.014f) + curveToRelative(0.024f, 0.008f, 0.05f, 0.013f, 0.078f, 0.013f) + horizontalLineTo(12.9f) + lineToRelative(0.004f, -0.001f) + lineToRelative(0.012f, 0.001f) + horizontalLineToRelative(0.257f) + curveToRelative(0.049f, 0f, 0.098f, -0.014f, 0.139f, -0.039f) + curveToRelative(0.037f, 0.025f, 0.082f, 0.039f, 0.131f, 0.039f) + horizontalLineTo(13.7f) + lineToRelative(0.008f, -0.001f) + lineToRelative(0.008f, 0.001f) + horizontalLineToRelative(0.258f) + lineToRelative(0.023f, -0.002f) + lineToRelative(0.008f, 0.001f) + horizontalLineToRelative(0.235f) + lineToRelative(0.023f, -0.002f) + lineToRelative(0.017f, 0.002f) + horizontalLineToRelative(0.235f) + lineToRelative(0.019f, -0.002f) + lineToRelative(0.018f, 0.002f) + horizontalLineToRelative(0.17f) + curveToRelative(0.018f, 0f, 0.035f, -0.003f, 0.054f, -0.007f) + curveToRelative(0.015f, 0.004f, 0.033f, 0.007f, 0.052f, 0.007f) + horizontalLineToRelative(0.169f) + lineToRelative(0.018f, -0.002f) + lineToRelative(0.018f, 0.002f) + horizontalLineToRelative(0.237f) + lineToRelative(0.02f, -0.002f) + lineToRelative(0.019f, 0.002f) + horizontalLineToRelative(0.235f) + lineToRelative(0.005f, -0.001f) + lineToRelative(0.028f, 0.002f) + horizontalLineToRelative(0.258f) + lineToRelative(0.007f, -0.001f) + lineToRelative(0.006f, 0.001f) + horizontalLineToRelative(0.263f) + curveToRelative(0.048f, 0f, 0.094f, -0.014f, 0.138f, -0.039f) + curveToRelative(0.036f, 0.025f, 0.083f, 0.039f, 0.129f, 0.039f) + horizontalLineToRelative(0.26f) + lineToRelative(0.008f, -0.001f) + lineToRelative(0.007f, 0.001f) + horizontalLineToRelative(0.258f) + lineToRelative(0.014f, -0.001f) + lineToRelative(0.02f, 0.001f) + horizontalLineToRelative(1.167f) + lineToRelative(0.012f, -0.001f) + lineToRelative(0.008f, 0.001f) + horizontalLineToRelative(0.259f) + lineToRelative(0.007f, -0.001f) + lineToRelative(0.01f, 0.001f) + horizontalLineToRelative(0.259f) + curveToRelative(0.047f, 0f, 0.094f, -0.014f, 0.138f, -0.039f) + curveToRelative(0.037f, 0.025f, 0.081f, 0.039f, 0.129f, 0.039f) + horizontalLineToRelative(0.259f) + lineToRelative(0.008f, -0.001f) + lineToRelative(0.007f, 0.001f) + horizontalLineToRelative(0.261f) + lineToRelative(0.007f, -0.001f) + lineToRelative(0.018f, 0.001f) + horizontalLineToRelative(0.236f) + lineToRelative(0.023f, -0.001f) + lineToRelative(0.016f, 0.001f) + horizontalLineToRelative(0.237f) + curveToRelative(0.033f, 0f, 0.068f, -0.009f, 0.099f, -0.022f) + curveToRelative(0.03f, 0.013f, 0.065f, 0.022f, 0.099f, 0.022f) + horizontalLineToRelative(0.782f) + lineToRelative(0.021f, -0.001f) + lineToRelative(0.019f, 0.001f) + horizontalLineToRelative(0.237f) + curveToRelative(0.122f, 0f, 0.232f, -0.092f, 0.253f, -0.214f) + lineToRelative(0.252f, -1.424f) + curveToRelative(0.011f, -0.066f, -0.007f, -0.135f, -0.049f, -0.185f) + curveToRelative(-0.042f, -0.051f, -0.104f, -0.078f, -0.171f, -0.078f) + horizontalLineToRelative(-0.235f) + lineToRelative(-0.021f, 0.001f) + lineToRelative(-0.018f, -0.001f) + horizontalLineToRelative(-0.235f) + curveToRelative(-0.015f, 0f, -0.026f, 0.001f, -0.039f, 0.003f) + horizontalLineToRelative(-0.544f) + curveToRelative(-0.026f, 0f, -0.055f, 0.005f, -0.082f, 0.014f) + curveToRelative(-0.024f, -0.009f, -0.053f, -0.016f, -0.082f, -0.016f) + horizontalLineToRelative(-0.237f) + lineToRelative(-0.019f, 0.002f) + lineToRelative(-0.019f, -0.002f) + horizontalLineToRelative(-0.235f) + curveToRelative(-0.074f, 0f, -0.144f, 0.035f, -0.192f, 0.089f) + curveToRelative(-0.046f, -0.055f, -0.113f, -0.09f, -0.187f, -0.09f) + horizontalLineToRelative(-0.627f) + curveToRelative(-0.072f, 0f, -0.148f, 0.034f, -0.201f, 0.086f) + curveToRelative(-0.002f, -0.002f, -0.003f, -0.006f, -0.006f, -0.008f) + curveToRelative(-0.04f, -0.05f, -0.104f, -0.077f, -0.17f, -0.077f) + horizontalLineToRelative(-1.166f) + curveToRelative(-0.075f, 0f, -0.147f, 0.037f, -0.196f, 0.093f) + curveToRelative(-0.046f, -0.055f, -0.115f, -0.093f, -0.191f, -0.093f) + horizontalLineToRelative(-0.627f) + curveToRelative(-0.076f, 0f, -0.152f, 0.036f, -0.207f, 0.093f) + lineToRelative(-0.008f, -0.015f) + curveToRelative(-0.043f, -0.05f, -0.107f, -0.078f, -0.172f, -0.078f) + horizontalLineToRelative(-0.674f) + curveToRelative(-0.033f, 0f, -0.064f, 0.008f, -0.096f, 0.02f) + curveToRelative(-0.014f, -0.006f, -0.027f, -0.01f, -0.042f, -0.013f) + verticalLineToRelative(-0.021f) + curveToRelative(0.131f, -0.016f, 0.251f, -0.048f, 0.359f, -0.088f) + curveToRelative(0.039f, 0.011f, 0.086f, 0.018f, 0.131f, 0.018f) + horizontalLineToRelative(1.864f) + curveToRelative(0.022f, 0f, 0.04f, -0.002f, 0.059f, -0.004f) + horizontalLineToRelative(0.234f) + curveToRelative(0.018f, 0.002f, 0.036f, 0.004f, 0.056f, 0.004f) + horizontalLineToRelative(1.899f) + curveToRelative(0.019f, 0f, 0.038f, -0.002f, 0.056f, -0.004f) + horizontalLineToRelative(0.233f) + curveToRelative(0.016f, 0.002f, 0.031f, 0.004f, 0.048f, 0.004f) + horizontalLineToRelative(1.898f) + curveToRelative(0.216f, 0f, 0.414f, -0.167f, 0.451f, -0.379f) + lineToRelative(0.297f, -1.703f) + lineToRelative(0.304f, 1.176f) + curveToRelative(0.029f, 0.106f, 0f, 0.292f, -0.055f, 0.385f) + lineToRelative(-1.269f, 2.069f) + curveToRelative(-0.061f, 0.103f, -0.069f, 0.214f, -0.02f, 0.301f) + curveToRelative(0.05f, 0.088f, 0.15f, 0.137f, 0.27f, 0.137f) + horizontalLineToRelative(1.866f) + curveToRelative(0.196f, 0f, 0.423f, -0.126f, 0.526f, -0.294f) + lineToRelative(3.273f, -5.309f) + curveToRelative(0.062f, -0.105f, 0.07f, -0.215f, 0.022f, -0.302f) + close() + moveToRelative(-17.427f, 2.305f) + curveToRelative(-0.221f, 0.472f, -0.498f, 0.836f, -0.827f, 1.081f) + curveToRelative(-0.201f, 0.153f, -0.407f, 0.268f, -0.576f, 0.329f) + lineTo(8.68f, 17.892f) + curveToRelative(-0.011f, -0.005f, -0.021f, -0.011f, -0.027f, -0.016f) + lineToRelative(-0.008f, -0.005f) + lineToRelative(-0.008f, -0.006f) + lineToRelative(-0.008f, -0.004f) + curveToRelative(-0.057f, -0.03f, -0.094f, -0.068f, -0.121f, -0.121f) + curveToRelative(-0.014f, -0.023f, -0.022f, -0.054f, -0.026f, -0.093f) + curveToRelative(-0.006f, -0.039f, -0.006f, -0.08f, 0f, -0.129f) + verticalLineToRelative(-0.01f) + lineToRelative(0.001f, -0.016f) + lineToRelative(0.002f, -0.009f) + lineToRelative(0.001f, -0.007f) + lineToRelative(0.001f, -0.004f) + curveToRelative(0.021f, -0.119f, 0.067f, -0.234f, 0.102f, -0.31f) + curveToRelative(0.031f, -0.063f, 0.12f, -0.254f, 0.149f, -0.323f) + lineToRelative(0.163f, -0.381f) + curveToRelative(0.109f, -0.259f, 0.212f, -0.503f, 0.272f, -0.654f) + lineToRelative(0.078f, -0.196f) + curveToRelative(0.103f, -0.25f, 0.228f, -0.561f, 0.271f, -0.72f) + lineToRelative(-0.001f, 0.007f) + curveToRelative(0.011f, -0.03f, 0.017f, -0.062f, 0.017f, -0.097f) + verticalLineToRelative(0.014f) + curveToRelative(0.004f, -0.018f, 0.004f, -0.034f, 0f, -0.049f) + curveToRelative(0f, -0.016f, -0.004f, -0.031f, -0.008f, -0.047f) + curveToRelative(-0.019f, -0.076f, -0.065f, -0.147f, -0.134f, -0.206f) + lineToRelative(0.002f, 0.001f) + lineToRelative(-0.002f, -0.001f) + lineToRelative(-0.008f, -0.009f) + lineToRelative(0.005f, 0.005f) + curveToRelative(-0.005f, -0.005f, -0.007f, -0.008f, -0.014f, -0.013f) + horizontalLineTo(9.38f) + curveToRelative(-0.113f, -0.098f, -0.241f, -0.173f, -0.37f, -0.23f) + horizontalLineToRelative(0.016f) + curveToRelative(-0.451f, -0.204f, -0.958f, -0.283f, -1.315f, -0.313f) + curveToRelative(0.1f, -0.056f, 0.221f, -0.105f, 0.369f, -0.147f) + curveToRelative(0.569f, -0.12f, 0.903f, -0.03f, 0.903f, -0.03f) + lineTo(8.942f, 13.76f) + curveToRelative(0.12f, 0.031f, 0.246f, 0.071f, 0.301f, 0.096f) + curveToRelative(0.208f, 0.094f, 0.303f, 0.145f, 0.439f, 0.268f) + curveToRelative(0.07f, 0.064f, 0.139f, 0.137f, 0.202f, 0.218f) + curveToRelative(0.069f, 0.09f, 0.122f, 0.178f, 0.182f, 0.289f) + curveToRelative(0.034f, 0.07f, 0.06f, 0.136f, 0.088f, 0.213f) + curveToRelative(0.049f, 0.138f, 0.083f, 0.301f, 0.105f, 0.495f) + curveToRelative(0.043f, 0.404f, -0.018f, 0.83f, -0.164f, 1.139f) + close() + moveToRelative(3.364f, 1.697f) + horizontalLineToRelative(-0.176f) + curveToRelative(-0.024f, 0f, -0.045f, 0.003f, -0.066f, 0.009f) + curveToRelative(-0.016f, -0.004f, -0.033f, -0.006f, -0.054f, -0.006f) + horizontalLineToRelative(-0.236f) + lineToRelative(-0.016f, 0.002f) + curveToRelative(-0.007f, -0.002f, -0.015f, -0.002f, -0.023f, -0.002f) + horizontalLineToRelative(-0.236f) + curveToRelative(-0.04f, 0f, -0.08f, 0.01f, -0.12f, 0.027f) + curveToRelative(0.131f, -0.209f, 0.251f, -0.441f, 0.355f, -0.674f) + curveToRelative(0.251f, 0.377f, 0.621f, 0.589f, 1.102f, 0.631f) + verticalLineToRelative(0.027f) + curveToRelative(-0.025f, -0.009f, -0.053f, -0.014f, -0.08f, -0.014f) + horizontalLineToRelative(-0.45f) + close() + moveToRelative(4.655f, 1.186f) + horizontalLineToRelative(-0.019f) + lineToRelative(0.038f, -0.05f) + lineToRelative(-0.019f, 0.05f) + close() + moveToRelative(-0.863f, -0.472f) + lineToRelative(-0.133f, 0.18f) + lineToRelative(-0.01f, -0.186f) + curveToRelative(0.016f, 0.005f, 0.032f, 0.006f, 0.049f, 0.006f) + horizontalLineToRelative(0.094f) + close() + } + path(fill = SolidColor(Color(0xFFF5E829))) { + moveTo(15.243f, 16.468f) + curveToRelative(-0.113f, 0.121f, -0.244f, 0.18f, -0.396f, 0.18f) + curveToRelative(-0.153f, 0f, -0.262f, -0.058f, -0.325f, -0.174f) + curveToRelative(-0.064f, -0.116f, -0.083f, -0.252f, -0.055f, -0.41f) + curveToRelative(0.029f, -0.158f, 0.094f, -0.294f, 0.202f, -0.409f) + curveToRelative(0.106f, -0.114f, 0.233f, -0.17f, 0.381f, -0.17f) + curveToRelative(0.151f, 0f, 0.263f, 0.06f, 0.333f, 0.18f) + curveToRelative(0.059f, 0.107f, 0.074f, 0.241f, 0.047f, 0.399f) + curveToRelative(-0.027f, 0.158f, -0.091f, 0.292f, -0.187f, 0.404f) + close() + moveToRelative(2.329f, -2.029f) + curveToRelative(0.026f, -0.147f, -0.075f, -0.266f, -0.221f, -0.266f) + horizontalLineToRelative(-1.18f) + curveToRelative(-0.147f, 0f, -0.291f, 0.119f, -0.315f, 0.266f) + lineToRelative(-0.028f, 0.151f) + curveToRelative(-0.16f, -0.308f, -0.481f, -0.462f, -0.969f, -0.462f) + curveToRelative(-0.533f, 0f, -0.997f, 0.196f, -1.39f, 0.589f) + curveToRelative(-0.368f, 0.367f, -0.601f, 0.826f, -0.696f, 1.372f) + curveToRelative(-0.097f, 0.546f, -0.021f, 1f, 0.224f, 1.362f) + curveToRelative(0.258f, 0.389f, 0.649f, 0.582f, 1.177f, 0.582f) + curveToRelative(0.509f, 0f, 0.932f, -0.342f, 0.932f, -0.342f) + curveToRelative(0.02f, -0.017f, 0.207f, -0.142f, 0.207f, -0.142f) + reflectiveCurveToRelative(-0.028f, 0.143f, -0.035f, 0.188f) + curveToRelative(-0.02f, 0.12f, 0.084f, 0.218f, 0.231f, 0.218f) + horizontalLineToRelative(1.178f) + curveToRelative(0.148f, 0f, 0.289f, -0.12f, 0.316f, -0.266f) + lineToRelative(0.569f, -3.25f) + close() + moveToRelative(2.53f, -1.205f) + curveToRelative(-0.043f, 0.212f, -0.173f, 0.392f, -0.385f, 0.544f) + curveToRelative(-0.214f, 0.15f, -0.448f, 0.227f, -0.703f, 0.227f) + curveToRelative(-0.256f, 0f, -0.458f, -0.076f, -0.606f, -0.227f) + curveToRelative(-0.15f, -0.152f, -0.202f, -0.332f, -0.157f, -0.544f) + curveToRelative(0.046f, -0.21f, 0.171f, -0.392f, 0.383f, -0.546f) + curveToRelative(0.211f, -0.152f, 0.447f, -0.23f, 0.709f, -0.23f) + curveToRelative(0.255f, 0f, 0.455f, 0.078f, 0.603f, 0.23f) + curveToRelative(0.149f, 0.154f, 0.201f, 0.336f, 0.156f, 0.546f) + close() + moveToRelative(-0.852f, 4.455f) + curveToRelative(-0.026f, 0.147f, -0.167f, 0.266f, -0.316f, 0.266f) + horizontalLineToRelative(-1.211f) + curveToRelative(-0.149f, 0f, -0.249f, -0.12f, -0.224f, -0.266f) + lineToRelative(0.568f, -3.25f) + curveToRelative(0.027f, -0.147f, 0.169f, -0.266f, 0.317f, -0.266f) + horizontalLineToRelative(1.212f) + curveToRelative(0.148f, 0f, 0.247f, 0.119f, 0.223f, 0.266f) + lineToRelative(-0.569f, 3.25f) + close() + moveToRelative(7.315f, -3.516f) + curveToRelative(0.149f, 0f, 0.206f, 0.104f, 0.13f, 0.23f) + lineToRelative(-3.272f, 5.307f) + curveToRelative(-0.078f, 0.126f, -0.262f, 0.229f, -0.411f, 0.229f) + horizontalLineToRelative(-1.177f) + curveToRelative(-0.147f, 0f, -0.207f, -0.103f, -0.132f, -0.23f) + lineToRelative(1.268f, -2.068f) + curveToRelative(0.075f, -0.127f, 0.108f, -0.347f, 0.071f, -0.491f) + lineToRelative(-0.703f, -2.716f) + curveToRelative(-0.037f, -0.144f, 0.054f, -0.261f, 0.202f, -0.261f) + horizontalLineToRelative(1.254f) + curveToRelative(0.148f, 0f, 0.291f, 0.119f, 0.317f, 0.266f) + lineToRelative(0.183f, 0.946f) + lineToRelative(0.638f, -0.981f) + curveToRelative(0.076f, -0.127f, 0.261f, -0.231f, 0.408f, -0.231f) + horizontalLineToRelative(1.224f) + close() + moveToRelative(-5.08f, 3.515f) + curveToRelative(-0.026f, 0.146f, -0.167f, 0.265f, -0.317f, 0.265f) + horizontalLineToRelative(-1.21f) + curveToRelative(-0.15f, 0f, -0.25f, -0.119f, -0.225f, -0.265f) + lineToRelative(0.87f, -4.958f) + curveToRelative(0.024f, -0.145f, 0.166f, -0.265f, 0.316f, -0.265f) + horizontalLineToRelative(1.21f) + curveToRelative(0.148f, 0f, 0.249f, 0.12f, 0.222f, 0.265f) + lineToRelative(-0.866f, 4.958f) + close() + moveTo(12.42f, 14.8f) + reflectiveCurveToRelative(-0.038f, -0.196f, -0.06f, -0.281f) + curveToRelative(-0.049f, -0.202f, -0.082f, -0.287f, -0.117f, -0.398f) + curveToRelative(-0.209f, -0.574f, -0.513f, -0.942f, -0.825f, -1.24f) + curveToRelative(-0.322f, -0.293f, -0.823f, -0.603f, -1.153f, -0.733f) + curveToRelative(-0.315f, -0.125f, -0.504f, -0.181f, -0.838f, -0.237f) + curveToRelative(-0.303f, -0.052f, -1.253f, -0.144f, -1.93f, 0f) + curveToRelative(-0.88f, 0.183f, -1.331f, 0.516f, -1.331f, 0.516f) + reflectiveCurveToRelative(-0.762f, 0.425f, -1.126f, 1.328f) + curveToRelative(-0.271f, 0.672f, -0.223f, 1.103f, -0.18f, 1.416f) + curveToRelative(0.043f, 0.313f, 0.144f, 0.775f, 0.442f, 1.205f) + curveToRelative(0.231f, 0.336f, 0.545f, 0.585f, 0.545f, 0.585f) + reflectiveCurveToRelative(-0.612f, 1.431f, -0.638f, 1.598f) + curveToRelative(-0.043f, 0.292f, -0.006f, 0.483f, 0.163f, 0.726f) + curveToRelative(0.25f, 0.363f, 0.746f, 0.609f, 1.191f, 0.771f) + curveToRelative(0.722f, 0.261f, 2.092f, 0.18f, 2.851f, -0.093f) + curveToRelative(1.138f, -0.411f, 1.552f, -0.914f, 1.961f, -1.356f) + curveToRelative(0.536f, -0.579f, 0.993f, -1.709f, 1.069f, -2.328f) + curveToRelative(0.031f, -0.255f, 0.047f, -0.541f, 0.047f, -0.743f) + curveToRelative(-0.001f, -0.3f, -0.036f, -0.507f, -0.071f, -0.736f) + close() + moveToRelative(-2.2f, 1.737f) + curveToRelative(-0.188f, 0.397f, -0.466f, 0.831f, -0.869f, 1.133f) + curveToRelative(-0.205f, 0.152f, -0.422f, 0.279f, -0.614f, 0.348f) + curveToRelative(-0.031f, 0.009f, -0.121f, 0.036f, -0.17f, 0.046f) + curveToRelative(-0.274f, 0.054f, -0.579f, 0.002f, -0.685f, -0.076f) + lineToRelative(-0.007f, -0.007f) + curveToRelative(-0.084f, -0.046f, -0.139f, -0.106f, -0.173f, -0.174f) + curveToRelative(-0.024f, -0.04f, -0.039f, -0.084f, -0.044f, -0.143f) + curveToRelative(-0.008f, -0.051f, -0.007f, -0.103f, -0.001f, -0.157f) + lineToRelative(0.001f, -0.032f) + lineToRelative(0.006f, -0.028f) + curveToRelative(0.024f, -0.13f, 0.073f, -0.253f, 0.115f, -0.344f) + curveToRelative(0.029f, -0.061f, 0.117f, -0.252f, 0.146f, -0.318f) + curveToRelative(0.157f, -0.377f, 0.344f, -0.808f, 0.432f, -1.033f) + curveToRelative(0.084f, -0.213f, 0.293f, -0.702f, 0.345f, -0.901f) + horizontalLineToRelative(0.002f) + curveToRelative(0.006f, -0.017f, 0.01f, -0.036f, 0.01f, -0.055f) + curveToRelative(0.002f, -0.009f, 0.002f, -0.014f, 0f, -0.018f) + curveToRelative(0f, -0.008f, -0.001f, -0.017f, -0.005f, -0.024f) + curveToRelative(-0.012f, -0.053f, -0.046f, -0.104f, -0.097f, -0.147f) + lineToRelative(-0.008f, -0.008f) + curveToRelative(-0.382f, -0.324f, -0.929f, -0.391f, -1.239f, -0.389f) + lineToRelative(-0.198f, 0.01f) + lineToRelative(0.004f, 0.002f) + curveToRelative(-0.213f, 0.027f, -0.267f, 0.195f, -0.267f, 0.195f) + lineToRelative(-0.307f, 0.75f) + reflectiveCurveToRelative(-0.07f, -0.084f, -0.122f, -0.21f) + curveToRelative(-0.013f, -0.032f, -0.024f, -0.07f, -0.034f, -0.111f) + curveToRelative(-0.015f, -0.067f, -0.021f, -0.093f, -0.027f, -0.154f) + curveToRelative(-0.008f, -0.04f, -0.014f, -0.138f, -0.009f, -0.189f) + curveToRelative(0.024f, -0.227f, 0.296f, -0.871f, 1.697f, -0.947f) + curveToRelative(0.12f, -0.006f, 0.287f, -0.001f, 0.36f, -0.002f) + curveToRelative(0f, 0f, 0.201f, 0.011f, 0.357f, 0.04f) + curveToRelative(0.155f, 0.026f, 0.387f, 0.094f, 0.481f, 0.138f) + curveToRelative(0.21f, 0.095f, 0.319f, 0.155f, 0.471f, 0.29f) + curveToRelative(0.076f, 0.068f, 0.15f, 0.147f, 0.22f, 0.236f) + curveToRelative(0.075f, 0.096f, 0.131f, 0.186f, 0.198f, 0.313f) + curveToRelative(0.034f, 0.071f, 0.062f, 0.141f, 0.093f, 0.228f) + curveToRelative(0.047f, 0.13f, 0.088f, 0.298f, 0.113f, 0.526f) + curveToRelative(0.036f, 0.341f, 0.012f, 0.814f, -0.175f, 1.212f) + close() + moveToRelative(10.766f, 3.401f) + curveToRelative(0.057f, 0f, 0.11f, -0.046f, 0.12f, -0.101f) + lineToRelative(0.252f, -1.423f) + curveToRelative(0.008f, -0.057f, -0.029f, -0.103f, -0.084f, -0.103f) + horizontalLineToRelative(-0.236f) + curveToRelative(-0.057f, 0f, -0.11f, 0.046f, -0.12f, 0.103f) + lineToRelative(-0.251f, 1.423f) + curveToRelative(-0.011f, 0.056f, 0.028f, 0.101f, 0.084f, 0.101f) + horizontalLineToRelative(0.235f) + close() + moveToRelative(-8.098f, -1.623f) + horizontalLineToRelative(-0.235f) + curveToRelative(-0.056f, 0f, -0.127f, 0.042f, -0.158f, 0.094f) + lineToRelative(-0.185f, 0.312f) + lineToRelative(-0.075f, -0.312f) + curveToRelative(-0.014f, -0.052f, -0.068f, -0.094f, -0.126f, -0.094f) + horizontalLineToRelative(-0.236f) + curveToRelative(-0.056f, 0f, -0.09f, 0.042f, -0.078f, 0.094f) + lineToRelative(0.182f, 0.731f) + lineToRelative(0.021f, 0.084f) + lineToRelative(-0.108f, 0.612f) + curveToRelative(-0.011f, 0.056f, 0.028f, 0.102f, 0.084f, 0.102f) + horizontalLineToRelative(0.236f) + curveToRelative(0.057f, 0f, 0.109f, -0.046f, 0.119f, -0.102f) + lineToRelative(0.109f, -0.61f) + lineToRelative(0.051f, -0.086f) + lineToRelative(0.445f, -0.731f) + curveToRelative(0.031f, -0.052f, 0.012f, -0.094f, -0.046f, -0.094f) + close() + moveToRelative(2.669f, -0.003f) + horizontalLineToRelative(-0.399f) + curveToRelative(-0.055f, 0f, -0.117f, 0.044f, -0.138f, 0.1f) + lineToRelative(-0.215f, 0.575f) + lineToRelative(-0.01f, -0.575f) + curveToRelative(-0.001f, -0.056f, -0.049f, -0.1f, -0.103f, -0.1f) + horizontalLineToRelative(-0.399f) + curveToRelative(-0.056f, 0f, -0.111f, 0.047f, -0.121f, 0.102f) + lineToRelative(-0.249f, 1.422f) + curveToRelative(-0.011f, 0.055f, 0.027f, 0.101f, 0.083f, 0.101f) + horizontalLineToRelative(0.236f) + curveToRelative(0.055f, 0f, 0.11f, -0.046f, 0.119f, -0.101f) + lineToRelative(0.099f, -0.562f) + lineToRelative(0.011f, 0.563f) + curveToRelative(0.001f, 0.016f, 0.005f, 0.03f, 0.013f, 0.045f) + curveToRelative(0.003f, 0.032f, 0.029f, 0.055f, 0.07f, 0.055f) + horizontalLineToRelative(0.169f) + curveToRelative(0.041f, 0f, 0.075f, -0.023f, 0.091f, -0.055f) + curveToRelative(0.01f, -0.015f, 0.02f, -0.029f, 0.026f, -0.045f) + lineToRelative(0.209f, -0.559f) + lineToRelative(-0.098f, 0.557f) + curveToRelative(-0.011f, 0.056f, 0.027f, 0.101f, 0.084f, 0.101f) + horizontalLineToRelative(0.235f) + curveToRelative(0.055f, 0f, 0.11f, -0.046f, 0.12f, -0.101f) + lineToRelative(0.251f, -1.421f) + curveToRelative(0.01f, -0.055f, -0.029f, -0.102f, -0.084f, -0.102f) + close() + moveToRelative(4.995f, 1.531f) + lineTo(20.389f, 19.1f) + lineToRelative(0.38f, -0.69f) + curveToRelative(0.028f, -0.052f, 0.006f, -0.095f, -0.05f, -0.095f) + horizontalLineToRelative(-0.264f) + curveToRelative(-0.054f, 0f, -0.123f, 0.043f, -0.152f, 0.096f) + lineToRelative(-0.241f, 0.459f) + lineTo(20f, 18.992f) + lineToRelative(0.021f, -0.122f) + lineToRelative(0.079f, -0.456f) + curveToRelative(0.009f, -0.055f, -0.027f, -0.101f, -0.083f, -0.101f) + horizontalLineTo(19.78f) + curveToRelative(-0.055f, 0f, -0.108f, 0.046f, -0.12f, 0.101f) + lineToRelative(-0.249f, 1.422f) + curveToRelative(-0.011f, 0.056f, 0.026f, 0.102f, 0.083f, 0.102f) + horizontalLineToRelative(0.236f) + curveToRelative(0.056f, 0f, 0.11f, -0.046f, 0.119f, -0.102f) + lineToRelative(0.08f, -0.455f) + lineToRelative(0.032f, -0.18f) + lineToRelative(0.035f, 0.18f) + lineToRelative(0.09f, 0.461f) + curveToRelative(0.008f, 0.052f, 0.061f, 0.095f, 0.118f, 0.095f) + horizontalLineToRelative(0.268f) + curveToRelative(0.055f, 0.001f, 0.093f, -0.041f, 0.08f, -0.094f) + close() + moveToRelative(-2.345f, -1.429f) + curveToRelative(0.011f, -0.055f, -0.027f, -0.102f, -0.081f, -0.102f) + horizontalLineToRelative(-0.893f) + curveToRelative(-0.055f, 0f, -0.108f, 0.047f, -0.118f, 0.102f) + lineToRelative(-0.042f, 0.236f) + curveToRelative(-0.01f, 0.056f, 0.028f, 0.101f, 0.084f, 0.101f) + horizontalLineToRelative(0.37f) + lineToRelative(-0.589f, 0.785f) + curveToRelative(-0.015f, 0.019f, -0.028f, 0.042f, -0.033f, 0.065f) + lineToRelative(-0.042f, 0.236f) + curveToRelative(-0.009f, 0.056f, 0.029f, 0.101f, 0.084f, 0.101f) + horizontalLineToRelative(0.89f) + curveToRelative(0.057f, 0f, 0.111f, -0.046f, 0.118f, -0.101f) + lineToRelative(0.041f, -0.236f) + curveToRelative(0.011f, -0.055f, -0.025f, -0.102f, -0.08f, -0.102f) + horizontalLineToRelative(-0.374f) + lineToRelative(0.591f, -0.788f) + curveToRelative(0.009f, -0.007f, 0.011f, -0.012f, 0.016f, -0.023f) + lineToRelative(0.008f, -0.011f) + curveToRelative(0.005f, -0.009f, 0.007f, -0.017f, 0.008f, -0.028f) + lineToRelative(0.042f, -0.235f) + close() + moveToRelative(-4.406f, 1.424f) + lineToRelative(-0.062f, -1.427f) + curveToRelative(-0.003f, -0.054f, -0.05f, -0.099f, -0.105f, -0.099f) + horizontalLineToRelative(-0.352f) + curveToRelative(-0.056f, 0f, -0.12f, 0.045f, -0.142f, 0.099f) + lineToRelative(-0.56f, 1.427f) + curveToRelative(-0.022f, 0.054f, 0.005f, 0.099f, 0.06f, 0.099f) + horizontalLineToRelative(0.26f) + curveToRelative(0.055f, 0f, 0.119f, -0.045f, 0.139f, -0.099f) + lineToRelative(0.04f, -0.104f) + horizontalLineToRelative(0.257f) + lineToRelative(0.003f, 0.104f) + curveToRelative(0.001f, 0.054f, 0.046f, 0.099f, 0.104f, 0.099f) + horizontalLineToRelative(0.258f) + curveToRelative(0.057f, 0f, 0.102f, -0.045f, 0.1f, -0.099f) + close() + moveToRelative(-0.53f, -0.46f) + horizontalLineToRelative(-0.092f) + lineToRelative(0.171f, -0.446f) + lineToRelative(0.012f, 0.446f) + horizontalLineToRelative(-0.091f) + close() + moveToRelative(3.467f, 0.46f) + lineToRelative(-0.061f, -1.427f) + curveToRelative(-0.002f, -0.054f, -0.051f, -0.099f, -0.107f, -0.099f) + horizontalLineToRelative(-0.35f) + curveToRelative(-0.056f, 0f, -0.119f, 0.045f, -0.141f, 0.099f) + lineToRelative(-0.562f, 1.427f) + curveToRelative(-0.022f, 0.054f, 0.006f, 0.099f, 0.062f, 0.099f) + horizontalLineToRelative(0.258f) + curveToRelative(0.057f, 0f, 0.119f, -0.045f, 0.139f, -0.099f) + lineToRelative(0.04f, -0.104f) + horizontalLineToRelative(0.258f) + lineToRelative(0.001f, 0.104f) + curveToRelative(0.003f, 0.054f, 0.049f, 0.099f, 0.105f, 0.099f) + horizontalLineToRelative(0.259f) + curveToRelative(0.056f, 0f, 0.101f, -0.045f, 0.099f, -0.099f) + close() + moveToRelative(-0.53f, -0.46f) + horizontalLineToRelative(-0.093f) + lineToRelative(0.172f, -0.446f) + lineToRelative(0.013f, 0.446f) + horizontalLineToRelative(-0.092f) + close() + moveToRelative(3.085f, 0.46f) + lineToRelative(-0.062f, -1.427f) + curveToRelative(-0.002f, -0.054f, -0.049f, -0.099f, -0.106f, -0.099f) + horizontalLineToRelative(-0.351f) + curveToRelative(-0.055f, 0f, -0.119f, 0.045f, -0.141f, 0.099f) + lineToRelative(-0.561f, 1.427f) + curveToRelative(-0.023f, 0.054f, 0.006f, 0.099f, 0.06f, 0.099f) + horizontalLineToRelative(0.259f) + curveToRelative(0.056f, 0f, 0.119f, -0.045f, 0.14f, -0.099f) + lineToRelative(0.039f, -0.104f) + horizontalLineToRelative(0.258f) + lineToRelative(0.002f, 0.104f) + curveToRelative(0.002f, 0.054f, 0.048f, 0.099f, 0.104f, 0.099f) + horizontalLineToRelative(0.259f) + curveToRelative(0.058f, 0f, 0.101f, -0.045f, 0.1f, -0.099f) + close() + moveToRelative(-0.53f, -0.46f) + horizontalLineToRelative(-0.091f) + lineToRelative(0.17f, -0.446f) + lineToRelative(0.012f, 0.446f) + horizontalLineToRelative(-0.091f) + close() + } + } + }.build() + + return _KomojuIcDailyYamazaki!! + } + +@Suppress("ObjectPropertyName") +private var _KomojuIcDailyYamazaki: ImageVector? = null diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcDiners.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcDiners.kt new file mode 100644 index 0000000..53bdd11 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcDiners.kt @@ -0,0 +1,83 @@ +package com.komoju.mobile.sdk.ui.icon + +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.unit.dp + +val KomojuIcon.Diners: ImageVector + get() { + if (_KomojuIcDiners != null) { + return _KomojuIcDiners!! + } + _KomojuIcDiners = ImageVector.Builder( + name = "KomojuIcDiners", + defaultWidth = 21.dp, + defaultHeight = 16.dp, + viewportWidth = 21f, + viewportHeight = 16f, + ).apply { + path(fill = SolidColor(Color(0xFF0079BE))) { + moveTo(11.783f, 15.906f) + curveToRelative(4.336f, 0.02f, 8.294f, -3.537f, 8.294f, -7.864f) + curveToRelative(0f, -4.732f, -3.958f, -8.003f, -8.294f, -8.001f) + horizontalLineTo(8.051f) + curveToRelative(-4.388f, -0.002f, -8f, 3.27f, -8f, 8.001f) + curveToRelative(0f, 4.328f, 3.612f, 7.884f, 8f, 7.864f) + horizontalLineToRelative(3.732f) + close() + } + path(fill = SolidColor(Color(0xFFFFFFFF))) { + moveTo(8.069f, 0.697f) + curveToRelative(-4.01f, 0.001f, -7.259f, 3.251f, -7.26f, 7.262f) + curveToRelative(0.001f, 4.011f, 3.25f, 7.26f, 7.26f, 7.262f) + curveToRelative(4.01f, -0.002f, 7.26f, -3.251f, 7.261f, -7.262f) + curveToRelative(-0.001f, -4.011f, -3.251f, -7.261f, -7.261f, -7.262f) + close() + moveTo(3.467f, 7.959f) + curveToRelative(0.004f, -1.96f, 1.228f, -3.631f, 2.954f, -4.296f) + verticalLineToRelative(8.591f) + curveTo(4.695f, 11.59f, 3.471f, 9.92f, 3.467f, 7.959f) + close() + moveToRelative(6.249f, 4.297f) + verticalLineTo(3.663f) + curveToRelative(1.727f, 0.663f, 2.953f, 2.335f, 2.956f, 4.296f) + curveToRelative(-0.003f, 1.962f, -1.229f, 3.633f, -2.956f, 4.297f) + close() + } + path(fill = SolidColor(Color(0xFF0079BE))) { + moveTo(11.783f, 15.906f) + curveToRelative(4.336f, 0.02f, 8.294f, -3.537f, 8.294f, -7.864f) + curveToRelative(0f, -4.732f, -3.958f, -8.003f, -8.294f, -8.001f) + horizontalLineTo(8.051f) + curveToRelative(-4.388f, -0.002f, -8f, 3.27f, -8f, 8.001f) + curveToRelative(0f, 4.328f, 3.612f, 7.884f, 8f, 7.864f) + horizontalLineToRelative(3.732f) + close() + } + path(fill = SolidColor(Color(0xFFFFFFFF))) { + moveTo(8.069f, 0.697f) + curveToRelative(-4.01f, 0.001f, -7.259f, 3.251f, -7.26f, 7.262f) + curveToRelative(0.001f, 4.011f, 3.25f, 7.26f, 7.26f, 7.262f) + curveToRelative(4.01f, -0.002f, 7.26f, -3.251f, 7.261f, -7.262f) + curveToRelative(-0.001f, -4.011f, -3.251f, -7.261f, -7.261f, -7.262f) + close() + moveTo(3.467f, 7.959f) + curveToRelative(0.004f, -1.96f, 1.228f, -3.631f, 2.954f, -4.296f) + verticalLineToRelative(8.591f) + curveTo(4.695f, 11.59f, 3.471f, 9.92f, 3.467f, 7.959f) + close() + moveToRelative(6.249f, 4.297f) + verticalLineTo(3.663f) + curveToRelative(1.727f, 0.663f, 2.953f, 2.335f, 2.956f, 4.296f) + curveToRelative(-0.003f, 1.962f, -1.229f, 3.633f, -2.956f, 4.297f) + close() + } + }.build() + + return _KomojuIcDiners!! + } + +@Suppress("ObjectPropertyName") +private var _KomojuIcDiners: ImageVector? = null diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcFamilyMart.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcFamilyMart.kt new file mode 100644 index 0000000..0e38025 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcFamilyMart.kt @@ -0,0 +1,216 @@ +package com.komoju.mobile.sdk.ui.icon + +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.group +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.unit.dp + +val KomojuIcon.FamilyMart: ImageVector + get() { + if (_KomojuIcFamilyMart != null) { + return _KomojuIcFamilyMart!! + } + _KomojuIcFamilyMart = ImageVector.Builder( + name = "KomojuIcFamilyMart", + defaultWidth = 32.dp, + defaultHeight = 32.dp, + viewportWidth = 32f, + viewportHeight = 32f, + ).apply { + path(fill = SolidColor(Color(0xFFF1FAFF))) { + moveTo(5.333f, 0f) + horizontalLineToRelative(21.334f) + arcTo(5.333f, 5.333f, 0f, isMoreThanHalf = false, isPositiveArc = true, 32f, 5.333f) + verticalLineToRelative(21.334f) + arcTo(5.333f, 5.333f, 0f, isMoreThanHalf = false, isPositiveArc = true, 26.667f, 32f) + horizontalLineTo(5.333f) + arcTo(5.333f, 5.333f, 0f, isMoreThanHalf = false, isPositiveArc = true, 0f, 26.667f) + verticalLineTo(5.333f) + arcTo(5.333f, 5.333f, 0f, isMoreThanHalf = false, isPositiveArc = true, 5.333f, 0f) + close() + } + group { + path(fill = SolidColor(Color(0xFFFFFFFF))) { + moveTo(6.478f, 11.611f) + horizontalLineToRelative(19.049f) + verticalLineToRelative(7.999f) + horizontalLineTo(6.478f) + close() + } + path(fill = SolidColor(Color(0xFF00A041))) { + moveTo(25.527f, 11.611f) + horizontalLineTo(6.479f) + verticalLineTo(5.306f) + horizontalLineToRelative(19.048f) + verticalLineToRelative(6.305f) + close() + } + path(fill = SolidColor(Color(0xFF008CD6))) { + moveTo(25.527f, 26.592f) + horizontalLineTo(6.479f) + verticalLineTo(19.61f) + horizontalLineToRelative(19.048f) + verticalLineToRelative(6.982f) + close() + moveTo(7.154f, 13.747f) + verticalLineToRelative(2.813f) + horizontalLineToRelative(0.572f) + verticalLineToRelative(-1.23f) + horizontalLineToRelative(1.191f) + verticalLineToRelative(-0.544f) + horizontalLineTo(7.726f) + verticalLineTo(14.29f) + horizontalLineToRelative(1.211f) + verticalLineToRelative(-0.543f) + horizontalLineTo(7.154f) + close() + moveToRelative(3.446f, 2.409f) + verticalLineToRelative(-0.915f) + curveToRelative(0f, -0.302f, -0.156f, -0.684f, -0.817f, -0.684f) + curveToRelative(-0.26f, 0f, -0.471f, 0.058f, -0.614f, 0.115f) + verticalLineToRelative(0.499f) + curveToRelative(0.163f, -0.102f, 0.344f, -0.156f, 0.541f, -0.156f) + curveToRelative(0.178f, 0f, 0.357f, 0.061f, 0.357f, 0.27f) + verticalLineToRelative(0.013f) + curveToRelative(-0.088f, -0.031f, -0.2f, -0.052f, -0.315f, -0.052f) + curveToRelative(-0.451f, 0f, -0.782f, 0.237f, -0.782f, 0.699f) + curveToRelative(0f, 0.455f, 0.372f, 0.627f, 0.67f, 0.627f) + curveToRelative(0.186f, 0f, 0.346f, -0.06f, 0.45f, -0.144f) + curveToRelative(0.011f, 0.059f, 0.026f, 0.107f, 0.044f, 0.131f) + horizontalLineToRelative(0.588f) + curveToRelative(-0.071f, -0.056f, -0.122f, -0.171f, -0.122f, -0.403f) + close() + moveToRelative(-1.094f, -0.271f) + curveToRelative(0f, -0.155f, 0.134f, -0.26f, 0.325f, -0.26f) + curveToRelative(0.097f, 0f, 0.175f, 0.022f, 0.236f, 0.054f) + verticalLineToRelative(0.336f) + curveToRelative(-0.054f, 0.049f, -0.148f, 0.106f, -0.284f, 0.106f) + curveToRelative(-0.177f, 0f, -0.277f, -0.1f, -0.277f, -0.236f) + close() + moveToRelative(12.706f, 0.271f) + verticalLineToRelative(-0.915f) + curveToRelative(0f, -0.302f, -0.156f, -0.684f, -0.817f, -0.684f) + curveToRelative(-0.26f, 0f, -0.472f, 0.058f, -0.615f, 0.115f) + verticalLineToRelative(0.499f) + curveToRelative(0.164f, -0.102f, 0.345f, -0.156f, 0.542f, -0.156f) + curveToRelative(0.178f, 0f, 0.356f, 0.061f, 0.356f, 0.27f) + verticalLineToRelative(0.013f) + curveToRelative(-0.088f, -0.031f, -0.2f, -0.052f, -0.315f, -0.052f) + curveToRelative(-0.45f, 0f, -0.781f, 0.237f, -0.781f, 0.699f) + curveToRelative(0f, 0.455f, 0.371f, 0.627f, 0.669f, 0.627f) + curveToRelative(0.187f, 0f, 0.347f, -0.06f, 0.45f, -0.144f) + curveToRelative(0.011f, 0.059f, 0.027f, 0.107f, 0.043f, 0.131f) + horizontalLineToRelative(0.589f) + curveToRelative(-0.07f, -0.056f, -0.121f, -0.171f, -0.121f, -0.403f) + close() + moveToRelative(-1.094f, -0.271f) + curveToRelative(0f, -0.155f, 0.133f, -0.26f, 0.324f, -0.26f) + curveToRelative(0.097f, 0f, 0.175f, 0.022f, 0.236f, 0.054f) + verticalLineToRelative(0.336f) + curveToRelative(-0.055f, 0.049f, -0.146f, 0.106f, -0.284f, 0.106f) + curveToRelative(-0.176f, 0f, -0.276f, -0.1f, -0.276f, -0.236f) + close() + moveToRelative(-8.142f, -1.309f) + curveToRelative(-0.232f, 0f, -0.402f, 0.056f, -0.562f, 0.226f) + curveToRelative(-0.112f, -0.142f, -0.289f, -0.226f, -0.503f, -0.226f) + curveToRelative(-0.176f, 0f, -0.34f, 0.051f, -0.489f, 0.182f) + verticalLineToRelative(-0.162f) + horizontalLineToRelative(-0.499f) + verticalLineToRelative(1.963f) + horizontalLineToRelative(0.537f) + verticalLineToRelative(-1.323f) + curveToRelative(0.065f, -0.08f, 0.156f, -0.147f, 0.283f, -0.147f) + curveToRelative(0.162f, 0f, 0.254f, 0.11f, 0.254f, 0.31f) + verticalLineToRelative(1.16f) + horizontalLineToRelative(0.547f) + verticalLineToRelative(-1.337f) + curveToRelative(0.062f, -0.078f, 0.153f, -0.133f, 0.279f, -0.133f) + curveToRelative(0.175f, 0f, 0.255f, 0.123f, 0.255f, 0.31f) + verticalLineToRelative(1.16f) + horizontalLineToRelative(0.547f) + verticalLineToRelative(-1.36f) + curveToRelative(0f, -0.368f, -0.236f, -0.623f, -0.649f, -0.623f) + close() + moveToRelative(1.908f, 1.983f) + horizontalLineToRelative(0.537f) + verticalLineToRelative(-2.812f) + horizontalLineToRelative(-0.537f) + verticalLineToRelative(2.812f) + close() + moveToRelative(4.163f, -1.938f) + lineToRelative(-0.711f, -0.874f) + horizontalLineToRelative(-0.587f) + verticalLineToRelative(2.813f) + horizontalLineToRelative(0.587f) + verticalLineToRelative(-1.939f) + lineToRelative(0.711f, 0.941f) + lineToRelative(0.71f, -0.941f) + verticalLineToRelative(1.939f) + horizontalLineToRelative(0.588f) + verticalLineToRelative(-2.813f) + horizontalLineToRelative(-0.588f) + lineToRelative(-0.71f, 0.874f) + close() + moveToRelative(-5.068f, 1.937f) + horizontalLineToRelative(0.537f) + verticalLineToRelative(-1.963f) + horizontalLineToRelative(-0.537f) + verticalLineToRelative(1.963f) + close() + moveToRelative(0.269f, -2.854f) + curveToRelative(-0.193f, 0f, -0.35f, 0.155f, -0.35f, 0.349f) + curveToRelative(0f, 0.192f, 0.157f, 0.348f, 0.35f, 0.348f) + curveToRelative(0.192f, 0f, 0.348f, -0.156f, 0.348f, -0.348f) + curveToRelative(0f, -0.194f, -0.156f, -0.349f, -0.348f, -0.349f) + close() + moveToRelative(8.776f, 1.097f) + verticalLineToRelative(-0.206f) + horizontalLineTo(22.51f) + verticalLineToRelative(1.964f) + horizontalLineToRelative(0.537f) + verticalLineToRelative(-1.234f) + curveToRelative(0.078f, -0.1f, 0.204f, -0.189f, 0.386f, -0.189f) + curveToRelative(0.141f, 0f, 0.243f, 0.055f, 0.302f, 0.098f) + verticalLineToRelative(-0.591f) + curveToRelative(-0.066f, -0.048f, -0.173f, -0.072f, -0.261f, -0.072f) + curveToRelative(-0.153f, 0f, -0.321f, 0.058f, -0.45f, 0.23f) + close() + moveToRelative(1.865f, 1.256f) + curveToRelative(-0.17f, 0f, -0.235f, -0.132f, -0.235f, -0.277f) + verticalLineToRelative(-0.67f) + horizontalLineToRelative(0.458f) + verticalLineToRelative(-0.515f) + horizontalLineToRelative(-0.458f) + verticalLineToRelative(-0.741f) + lineToRelative(-0.53f, 0.225f) + verticalLineToRelative(0.516f) + horizontalLineToRelative(-0.289f) + verticalLineToRelative(0.515f) + horizontalLineToRelative(0.289f) + verticalLineToRelative(0.748f) + curveToRelative(0f, 0.408f, 0.163f, 0.723f, 0.643f, 0.723f) + curveToRelative(0.143f, 0f, 0.268f, -0.022f, 0.352f, -0.056f) + verticalLineToRelative(-0.542f) + curveToRelative(-0.04f, 0.044f, -0.114f, 0.074f, -0.23f, 0.074f) + close() + moveToRelative(-8.82f, 1.01f) + horizontalLineToRelative(0.604f) + lineToRelative(0.906f, -2.472f) + horizontalLineTo(16.99f) + lineToRelative(-0.373f, 1.061f) + lineToRelative(-0.405f, -1.061f) + horizontalLineToRelative(-0.614f) + lineToRelative(0.74f, 1.78f) + lineToRelative(-0.269f, 0.692f) + close() + } + } + }.build() + + return _KomojuIcFamilyMart!! + } + +@Suppress("ObjectPropertyName") +private var _KomojuIcFamilyMart: ImageVector? = null diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcJcb.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcJcb.kt new file mode 100644 index 0000000..03ac3f1 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcJcb.kt @@ -0,0 +1,178 @@ +package com.komoju.mobile.sdk.ui.icon + +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.graphics.Brush +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.group +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.unit.dp + +val KomojuIcon.Jcb: ImageVector + get() { + if (_KomojuIcJcb != null) { + return _KomojuIcJcb!! + } + _KomojuIcJcb = ImageVector.Builder( + name = "KomojuIcJcb", + defaultWidth = 22.dp, + defaultHeight = 17.dp, + viewportWidth = 22f, + viewportHeight = 17f, + ).apply { + group { + path(fill = SolidColor(Color(0xFFFFFFFF))) { + moveTo(21.063f, 13.63f) + curveTo(21.063f, 15.393f, 19.61f, 16.828f, 17.825f, 16.828f) + horizontalLineTo(0.203f) + verticalLineTo(4.164f) + curveTo(0.203f, 2.401f, 1.657f, 0.966f, 3.442f, 0.966f) + horizontalLineTo(21.063f) + verticalLineTo(13.63f) + close() + } + path( + fill = Brush.linearGradient( + colorStops = arrayOf( + 0f to Color(0xFF007940), + 0.229f to Color(0xFF00873F), + 0.743f to Color(0xFF40A737), + 1f to Color(0xFF5CB531), + ), + start = Offset(14.188f, 9.78f), + end = Offset(19.918f, 9.78f), + ), + ) { + moveTo(15.325f, 10.383f) + horizontalLineTo(16.664f) + curveTo(16.702f, 10.383f, 16.792f, 10.37f, 16.83f, 10.37f) + curveTo(17.085f, 10.32f, 17.302f, 10.093f, 17.302f, 9.778f) + curveTo(17.302f, 9.476f, 17.085f, 9.25f, 16.83f, 9.187f) + curveTo(16.792f, 9.174f, 16.715f, 9.174f, 16.664f, 9.174f) + horizontalLineTo(15.325f) + verticalLineTo(10.383f) + close() + } + path( + fill = Brush.linearGradient( + colorStops = arrayOf( + 0f to Color(0xFF007940), + 0.229f to Color(0xFF00873F), + 0.743f to Color(0xFF40A737), + 1f to Color(0xFF5CB531), + ), + start = Offset(14.188f, 8.898f), + end = Offset(19.918f, 8.898f), + ), + ) { + moveTo(16.511f, 2.036f) + curveTo(15.236f, 2.036f, 14.191f, 3.056f, 14.191f, 4.327f) + verticalLineTo(6.707f) + horizontalLineTo(17.467f) + curveTo(17.544f, 6.707f, 17.633f, 6.707f, 17.697f, 6.719f) + curveTo(18.436f, 6.757f, 18.985f, 7.135f, 18.985f, 7.789f) + curveTo(18.985f, 8.305f, 18.615f, 8.746f, 17.926f, 8.834f) + verticalLineTo(8.859f) + curveTo(18.679f, 8.91f, 19.253f, 9.325f, 19.253f, 9.967f) + curveTo(19.253f, 10.66f, 18.615f, 11.113f, 17.773f, 11.113f) + horizontalLineTo(14.178f) + verticalLineTo(15.771f) + horizontalLineTo(17.582f) + curveTo(18.857f, 15.771f, 19.903f, 14.751f, 19.903f, 13.479f) + verticalLineTo(2.036f) + horizontalLineTo(16.511f) + close() + } + path( + fill = Brush.linearGradient( + colorStops = arrayOf( + 0f to Color(0xFF007940), + 0.229f to Color(0xFF00873F), + 0.743f to Color(0xFF40A737), + 1f to Color(0xFF5CB531), + ), + start = Offset(14.188f, 7.939f), + end = Offset(19.918f, 7.939f), + ), + ) { + moveTo(17.136f, 7.94f) + curveTo(17.136f, 7.638f, 16.919f, 7.437f, 16.664f, 7.399f) + curveTo(16.639f, 7.399f, 16.575f, 7.386f, 16.537f, 7.386f) + horizontalLineTo(15.325f) + verticalLineTo(8.494f) + horizontalLineTo(16.537f) + curveTo(16.575f, 8.494f, 16.651f, 8.494f, 16.664f, 8.482f) + curveTo(16.919f, 8.444f, 17.136f, 8.242f, 17.136f, 7.94f) + close() + } + path( + fill = Brush.linearGradient( + colorStops = arrayOf( + 0f to Color(0xFF1F286F), + 0.475f to Color(0xFF004E94), + 0.826f to Color(0xFF0066B1), + 1f to Color(0xFF006FBC), + ), + start = Offset(1.361f, 8.898f), + end = Offset(7.179f, 8.898f), + ), + ) { + moveTo(3.684f, 2.036f) + curveTo(2.409f, 2.036f, 1.363f, 3.056f, 1.363f, 4.327f) + verticalLineTo(9.98f) + curveTo(2.014f, 10.295f, 2.689f, 10.496f, 3.365f, 10.496f) + curveTo(4.168f, 10.496f, 4.602f, 10.017f, 4.602f, 9.363f) + verticalLineTo(6.694f) + horizontalLineTo(6.591f) + verticalLineTo(9.35f) + curveTo(6.591f, 10.383f, 5.941f, 11.226f, 3.735f, 11.226f) + curveTo(2.396f, 11.226f, 1.351f, 10.936f, 1.351f, 10.936f) + verticalLineTo(15.758f) + horizontalLineTo(4.755f) + curveTo(6.03f, 15.758f, 7.076f, 14.738f, 7.076f, 13.467f) + verticalLineTo(2.036f) + horizontalLineTo(3.684f) + close() + } + path( + fill = Brush.linearGradient( + colorStops = arrayOf( + 0f to Color(0xFF6C2C2F), + 0.173f to Color(0xFF882730), + 0.573f to Color(0xFFBE1833), + 0.859f to Color(0xFFDC0436), + 1f to Color(0xFFE60039), + ), + start = Offset(7.744f, 8.898f), + end = Offset(13.395f, 8.898f), + ), + ) { + moveTo(10.098f, 2.036f) + curveTo(8.823f, 2.036f, 7.777f, 3.056f, 7.777f, 4.327f) + verticalLineTo(7.324f) + curveTo(8.364f, 6.833f, 9.384f, 6.518f, 11.028f, 6.593f) + curveTo(11.908f, 6.631f, 12.852f, 6.87f, 12.852f, 6.87f) + verticalLineTo(7.84f) + curveTo(12.38f, 7.6f, 11.819f, 7.386f, 11.092f, 7.336f) + curveTo(9.843f, 7.248f, 9.09f, 7.852f, 9.09f, 8.91f) + curveTo(9.09f, 9.98f, 9.843f, 10.584f, 11.092f, 10.483f) + curveTo(11.819f, 10.433f, 12.38f, 10.206f, 12.852f, 9.98f) + verticalLineTo(10.949f) + curveTo(12.852f, 10.949f, 11.921f, 11.188f, 11.028f, 11.226f) + curveTo(9.384f, 11.302f, 8.364f, 10.987f, 7.777f, 10.496f) + verticalLineTo(15.783f) + horizontalLineTo(11.182f) + curveTo(12.457f, 15.783f, 13.502f, 14.763f, 13.502f, 13.492f) + verticalLineTo(2.036f) + horizontalLineTo(10.098f) + close() + } + } + }.build() + + return _KomojuIcJcb!! + } + +@Suppress("ObjectPropertyName") +private var _KomojuIcJcb: ImageVector? = null diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcKonbini.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcKonbini.kt new file mode 100644 index 0000000..67244f2 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcKonbini.kt @@ -0,0 +1,91 @@ +package com.komoju.mobile.sdk.ui.icon + +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.StrokeCap +import androidx.compose.ui.graphics.StrokeJoin +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.unit.dp + +val KomojuIcon.Konbini: ImageVector + get() { + if (_KomojuIcKonbini != null) { + return _KomojuIcKonbini!! + } + _KomojuIcKonbini = ImageVector.Builder( + name = "KomojuIcKonbini", + defaultWidth = 33.dp, + defaultHeight = 33.dp, + viewportWidth = 33f, + viewportHeight = 33f, + ).apply { + path( + stroke = SolidColor(Color(0xFF0F1C29)), + strokeLineWidth = 1.5f, + strokeLineCap = StrokeCap.Round, + strokeLineJoin = StrokeJoin.Round, + ) { + moveTo(6.151f, 14.591f) + verticalLineToRelative(11.436f) + curveToRelative(0f, 1.12f, 0f, 1.68f, 0.218f, 2.108f) + curveToRelative(0.192f, 0.376f, 0.498f, 0.682f, 0.874f, 0.874f) + curveToRelative(0.428f, 0.218f, 0.988f, 0.218f, 2.108f, 0.218f) + horizontalLineToRelative(13.964f) + curveToRelative(1.12f, 0f, 1.68f, 0f, 2.108f, -0.218f) + curveToRelative(0.376f, -0.192f, 0.682f, -0.498f, 0.874f, -0.874f) + curveToRelative(0.218f, -0.428f, 0.218f, -0.988f, 0.218f, -2.108f) + verticalLineTo(14.591f) + } + path( + fill = SolidColor(Color(0xFF79C3F8)), + stroke = SolidColor(Color(0xFF0F1C29)), + strokeLineWidth = 1.5f, + strokeLineCap = StrokeCap.Round, + strokeLineJoin = StrokeJoin.Round, + ) { + moveTo(6.151f, 3.773f) + lineToRelative(-3.818f, 6.363f) + curveToRelative(-0.002f, 0.859f, 0.286f, 1.692f, 0.818f, 2.366f) + curveToRelative(0.531f, 0.674f, 1.275f, 1.149f, 2.11f, 1.348f) + curveToRelative(0.835f, 0.198f, 1.712f, 0.109f, 2.49f, -0.254f) + curveToRelative(0.778f, -0.363f, 1.41f, -0.978f, 1.795f, -1.745f) + curveToRelative(0.313f, 0.632f, 0.797f, 1.163f, 1.397f, 1.535f) + curveToRelative(0.6f, 0.372f, 1.291f, 0.569f, 1.996f, 0.569f) + curveToRelative(0.706f, 0f, 1.398f, -0.197f, 1.997f, -0.569f) + curveToRelative(0.6f, -0.372f, 1.084f, -0.903f, 1.397f, -1.535f) + curveToRelative(0.314f, 0.632f, 0.798f, 1.163f, 1.397f, 1.535f) + curveToRelative(0.6f, 0.372f, 1.291f, 0.569f, 1.997f, 0.569f) + curveToRelative(0.706f, 0f, 1.397f, -0.197f, 1.996f, -0.569f) + curveToRelative(0.6f, -0.372f, 1.084f, -0.903f, 1.398f, -1.535f) + curveToRelative(0.384f, 0.767f, 1.017f, 1.382f, 1.794f, 1.745f) + curveToRelative(0.778f, 0.363f, 1.656f, 0.452f, 2.491f, 0.254f) + curveToRelative(0.835f, -0.199f, 1.578f, -0.674f, 2.11f, -1.348f) + curveToRelative(0.531f, -0.674f, 0.819f, -1.507f, 0.817f, -2.366f) + lineToRelative(-3.818f, -6.363f) + horizontalLineTo(6.151f) + close() + } + path( + stroke = SolidColor(Color(0xFF0F1C29)), + strokeLineWidth = 1.5f, + strokeLineCap = StrokeCap.Round, + strokeLineJoin = StrokeJoin.Round, + ) { + moveTo(13.788f, 29.227f) + verticalLineToRelative(-5.091f) + curveToRelative(0f, -0.507f, 0f, -0.76f, 0.045f, -0.97f) + curveToRelative(0.167f, -0.765f, 0.765f, -1.363f, 1.53f, -1.53f) + curveToRelative(0.21f, -0.045f, 0.463f, -0.045f, 0.97f, -0.045f) + curveToRelative(0.507f, 0f, 0.761f, 0f, 0.971f, 0.045f) + curveToRelative(0.765f, 0.167f, 1.363f, 0.765f, 1.529f, 1.53f) + curveToRelative(0.046f, 0.21f, 0.046f, 0.463f, 0.046f, 0.97f) + verticalLineToRelative(5.091f) + } + }.build() + + return _KomojuIcKonbini!! + } + +@Suppress("ObjectPropertyName") +private var _KomojuIcKonbini: ImageVector? = null diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcLawson.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcLawson.kt new file mode 100644 index 0000000..ba370e2 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcLawson.kt @@ -0,0 +1,286 @@ +package com.komoju.mobile.sdk.ui.icon + +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.group +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.unit.dp + +val KomojuIcon.Lawson: ImageVector + get() { + if (_KomojuIcLawson != null) { + return _KomojuIcLawson!! + } + _KomojuIcLawson = ImageVector.Builder( + name = "KomojuIcLawson", + defaultWidth = 32.dp, + defaultHeight = 32.dp, + viewportWidth = 32f, + viewportHeight = 32f, + ).apply { + path(fill = SolidColor(Color(0xFFF1F4FF))) { + moveTo(5.333f, 0f) + lineTo(26.667f, 0f) + arcTo(5.333f, 5.333f, 0f, isMoreThanHalf = false, isPositiveArc = true, 32f, 5.333f) + lineTo(32f, 26.667f) + arcTo(5.333f, 5.333f, 0f, isMoreThanHalf = false, isPositiveArc = true, 26.667f, 32f) + lineTo(5.333f, 32f) + arcTo(5.333f, 5.333f, 0f, isMoreThanHalf = false, isPositiveArc = true, 0f, 26.667f) + lineTo(0f, 5.333f) + arcTo(5.333f, 5.333f, 0f, isMoreThanHalf = false, isPositiveArc = true, 5.333f, 0f) + close() + } + group { + path(fill = SolidColor(Color(0xFF007BC2))) { + moveTo(18.017f, 16.234f) + curveTo(18.528f, 16.234f, 19.674f, 16.234f, 19.758f, 16.234f) + curveTo(19.908f, 16.234f, 19.908f, 16.281f, 19.908f, 16.359f) + curveTo(19.908f, 16.437f, 19.908f, 16.84f, 19.908f, 17.002f) + curveTo(19.908f, 17.164f, 19.882f, 17.219f, 19.646f, 17.219f) + curveTo(19.41f, 17.219f, 18.102f, 17.219f, 18.04f, 17.219f) + curveTo(17.978f, 17.219f, 17.894f, 17.244f, 17.894f, 17.119f) + curveTo(17.894f, 16.993f, 17.894f, 16.708f, 17.894f, 16.622f) + curveTo(17.894f, 16.537f, 17.875f, 16.507f, 17.782f, 16.507f) + curveTo(17.689f, 16.507f, 17.472f, 16.507f, 17.418f, 16.507f) + curveTo(17.364f, 16.507f, 17.31f, 16.507f, 17.31f, 16.622f) + curveTo(17.31f, 16.739f, 17.31f, 17.203f, 17.31f, 17.498f) + curveTo(17.31f, 17.792f, 17.433f, 17.978f, 17.813f, 17.978f) + curveTo(18.192f, 17.978f, 19.602f, 17.978f, 19.912f, 17.978f) + curveTo(20.222f, 17.978f, 20.497f, 17.815f, 20.497f, 17.42f) + curveTo(20.497f, 17.025f, 20.497f, 16.421f, 20.497f, 16.143f) + curveTo(20.497f, 15.863f, 20.287f, 15.646f, 19.908f, 15.646f) + curveTo(19.528f, 15.646f, 18.162f, 15.646f, 18.068f, 15.646f) + curveTo(17.975f, 15.646f, 17.894f, 15.632f, 17.894f, 15.5f) + curveTo(17.894f, 15.368f, 17.894f, 14.981f, 17.894f, 14.91f) + curveTo(17.894f, 14.841f, 17.931f, 14.788f, 18.048f, 14.788f) + curveTo(18.164f, 14.788f, 19.617f, 14.788f, 19.78f, 14.788f) + curveTo(19.943f, 14.788f, 19.908f, 14.825f, 19.908f, 14.942f) + curveTo(19.908f, 15.058f, 19.908f, 15.19f, 19.908f, 15.282f) + curveTo(19.908f, 15.376f, 19.981f, 15.376f, 20.066f, 15.376f) + curveTo(20.151f, 15.376f, 20.299f, 15.376f, 20.391f, 15.376f) + curveTo(20.485f, 15.376f, 20.497f, 15.329f, 20.497f, 15.259f) + curveTo(20.497f, 15.19f, 20.497f, 14.735f, 20.497f, 14.735f) + curveTo(20.497f, 14.217f, 20.314f, 14.028f, 19.88f, 14.028f) + curveTo(19.446f, 14.028f, 18.528f, 14.028f, 18.048f, 14.028f) + curveTo(17.568f, 14.028f, 17.31f, 14.037f, 17.305f, 14.735f) + curveTo(17.305f, 15.095f, 17.305f, 15.18f, 17.305f, 15.198f) + verticalLineTo(15.201f) + curveTo(17.305f, 15.222f, 17.305f, 15.445f, 17.305f, 15.754f) + curveTo(17.305f, 16.081f, 17.506f, 16.234f, 18.017f, 16.234f) + close() + } + path(fill = SolidColor(Color(0xFF007BC2))) { + moveTo(21.705f, 16.073f) + curveTo(21.705f, 16.073f, 21.705f, 15.12f, 21.705f, 14.973f) + curveTo(21.705f, 14.825f, 21.786f, 14.788f, 21.879f, 14.788f) + curveTo(21.925f, 14.788f, 23.451f, 14.788f, 23.567f, 14.788f) + curveTo(23.684f, 14.788f, 23.718f, 14.818f, 23.718f, 14.91f) + curveTo(23.718f, 15.003f, 23.718f, 16.955f, 23.718f, 17.088f) + curveTo(23.718f, 17.219f, 23.645f, 17.219f, 23.567f, 17.219f) + curveTo(23.491f, 17.219f, 21.987f, 17.219f, 21.871f, 17.219f) + curveTo(21.755f, 17.219f, 21.705f, 17.195f, 21.705f, 17.08f) + curveTo(21.705f, 16.963f, 21.705f, 16.073f, 21.705f, 16.073f) + close() + moveTo(21.711f, 17.978f) + curveTo(22.152f, 17.978f, 23.224f, 17.978f, 23.657f, 17.978f) + curveTo(24.091f, 17.978f, 24.307f, 17.833f, 24.307f, 17.321f) + curveTo(24.307f, 16.81f, 24.307f, 15.208f, 24.307f, 14.735f) + curveTo(24.307f, 14.26f, 24.109f, 14.028f, 23.681f, 14.028f) + curveTo(23.277f, 14.028f, 22.158f, 14.028f, 21.755f, 14.028f) + curveTo(21.352f, 14.028f, 21.115f, 14.193f, 21.115f, 14.735f) + curveTo(21.115f, 15.277f, 21.115f, 16.22f, 21.115f, 16.22f) + curveTo(21.115f, 16.22f, 21.115f, 17.074f, 21.115f, 17.406f) + curveTo(21.115f, 17.739f, 21.27f, 17.978f, 21.711f, 17.978f) + close() + } + path(fill = SolidColor(Color(0xFF007BC2))) { + moveTo(3.093f, 14.788f) + horizontalLineTo(3.616f) + verticalLineTo(17.219f) + horizontalLineTo(3.108f) + curveTo(3.059f, 17.219f, 3.02f, 17.258f, 3.02f, 17.307f) + verticalLineTo(17.89f) + curveTo(3.02f, 17.94f, 3.059f, 17.978f, 3.108f, 17.978f) + horizontalLineTo(6.184f) + curveTo(6.233f, 17.978f, 6.272f, 17.94f, 6.272f, 17.89f) + verticalLineTo(16.556f) + curveTo(6.272f, 16.507f, 6.234f, 16.468f, 6.185f, 16.468f) + horizontalLineTo(5.768f) + curveTo(5.72f, 16.468f, 5.68f, 16.507f, 5.68f, 16.556f) + verticalLineTo(17.219f) + horizontalLineTo(4.204f) + verticalLineTo(14.788f) + horizontalLineTo(4.697f) + curveTo(4.747f, 14.788f, 4.786f, 14.748f, 4.786f, 14.699f) + verticalLineTo(14.116f) + curveTo(4.786f, 14.068f, 4.747f, 14.028f, 4.697f, 14.028f) + horizontalLineTo(3.093f) + curveTo(3.044f, 14.028f, 3.004f, 14.068f, 3.004f, 14.116f) + verticalLineTo(14.699f) + curveTo(3.004f, 14.748f, 3.044f, 14.788f, 3.093f, 14.788f) + close() + } + path(fill = SolidColor(Color(0xFF007BC2))) { + moveTo(8.851f, 15.411f) + lineTo(9.3f, 16.22f) + horizontalLineTo(9.305f) + lineTo(9.301f, 16.222f) + lineTo(9.3f, 16.22f) + horizontalLineTo(8.395f) + lineTo(8.391f, 16.219f) + lineTo(8.851f, 15.411f) + close() + moveTo(6.717f, 17.978f) + horizontalLineTo(8.321f) + curveTo(8.37f, 17.978f, 8.41f, 17.94f, 8.41f, 17.89f) + verticalLineTo(17.307f) + curveTo(8.41f, 17.258f, 8.37f, 17.219f, 8.321f, 17.219f) + horizontalLineTo(7.825f) + lineTo(7.822f, 17.217f) + lineTo(8.054f, 16.808f) + horizontalLineTo(9.626f) + lineTo(9.625f, 16.81f) + lineTo(9.852f, 17.22f) + lineTo(9.85f, 17.219f) + horizontalLineTo(9.365f) + curveTo(9.317f, 17.219f, 9.277f, 17.258f, 9.277f, 17.307f) + verticalLineTo(17.89f) + curveTo(9.277f, 17.94f, 9.317f, 17.978f, 9.365f, 17.978f) + horizontalLineTo(10.972f) + curveTo(11.019f, 17.978f, 11.059f, 17.94f, 11.059f, 17.89f) + verticalLineTo(17.307f) + curveTo(11.059f, 17.258f, 11.019f, 17.219f, 10.972f, 17.219f) + horizontalLineTo(10.524f) + verticalLineTo(17.22f) + lineTo(9.181f, 14.788f) + horizontalLineTo(9.685f) + curveTo(9.735f, 14.788f, 9.774f, 14.748f, 9.774f, 14.699f) + verticalLineTo(14.116f) + curveTo(9.774f, 14.068f, 9.735f, 14.028f, 9.685f, 14.028f) + horizontalLineTo(8.08f) + curveTo(8.031f, 14.028f, 7.992f, 14.068f, 7.992f, 14.116f) + verticalLineTo(14.699f) + curveTo(7.992f, 14.748f, 8.031f, 14.788f, 8.08f, 14.788f) + horizontalLineTo(8.527f) + lineTo(7.146f, 17.217f) + lineTo(7.147f, 17.219f) + horizontalLineTo(6.717f) + curveTo(6.668f, 17.219f, 6.628f, 17.258f, 6.628f, 17.307f) + verticalLineTo(17.89f) + curveTo(6.628f, 17.94f, 6.668f, 17.978f, 6.717f, 17.978f) + close() + } + path(fill = SolidColor(Color(0xFF007BC2))) { + moveTo(10.418f, 14.788f) + horizontalLineTo(10.9f) + lineTo(12.104f, 17.219f) + horizontalLineTo(11.612f) + curveTo(11.563f, 17.219f, 11.524f, 17.258f, 11.524f, 17.307f) + verticalLineTo(17.89f) + curveTo(11.524f, 17.94f, 11.563f, 17.978f, 11.612f, 17.978f) + horizontalLineTo(13.218f) + curveTo(13.266f, 17.978f, 13.306f, 17.94f, 13.306f, 17.89f) + verticalLineTo(17.307f) + curveTo(13.306f, 17.258f, 13.266f, 17.219f, 13.218f, 17.219f) + horizontalLineTo(12.771f) + lineTo(13.642f, 15.442f) + lineTo(14.521f, 17.219f) + horizontalLineTo(14.044f) + curveTo(13.995f, 17.219f, 13.956f, 17.258f, 13.956f, 17.307f) + verticalLineTo(17.89f) + curveTo(13.956f, 17.94f, 13.995f, 17.978f, 14.044f, 17.978f) + horizontalLineTo(15.649f) + curveTo(15.698f, 17.978f, 15.737f, 17.94f, 15.737f, 17.89f) + verticalLineTo(17.307f) + curveTo(15.737f, 17.258f, 15.698f, 17.219f, 15.649f, 17.219f) + horizontalLineTo(15.199f) + lineTo(16.387f, 14.788f) + horizontalLineTo(16.858f) + curveTo(16.907f, 14.788f, 16.945f, 14.748f, 16.945f, 14.699f) + verticalLineTo(14.116f) + curveTo(16.945f, 14.068f, 16.907f, 14.028f, 16.858f, 14.028f) + horizontalLineTo(15.252f) + curveTo(15.203f, 14.028f, 15.164f, 14.068f, 15.164f, 14.116f) + verticalLineTo(14.699f) + curveTo(15.164f, 14.748f, 15.203f, 14.788f, 15.252f, 14.788f) + horizontalLineTo(15.733f) + lineTo(14.858f, 16.572f) + lineTo(13.975f, 14.788f) + horizontalLineTo(14.442f) + curveTo(14.49f, 14.788f, 14.529f, 14.748f, 14.529f, 14.699f) + verticalLineTo(14.116f) + curveTo(14.529f, 14.068f, 14.49f, 14.028f, 14.442f, 14.028f) + horizontalLineTo(12.835f) + curveTo(12.787f, 14.028f, 12.748f, 14.068f, 12.748f, 14.116f) + verticalLineTo(14.699f) + curveTo(12.748f, 14.748f, 12.787f, 14.788f, 12.835f, 14.788f) + horizontalLineTo(13.302f) + lineTo(12.436f, 16.556f) + lineTo(11.559f, 14.788f) + horizontalLineTo(12.024f) + curveTo(12.074f, 14.788f, 12.113f, 14.748f, 12.113f, 14.699f) + verticalLineTo(14.116f) + curveTo(12.113f, 14.068f, 12.074f, 14.028f, 12.024f, 14.028f) + horizontalLineTo(10.418f) + curveTo(10.37f, 14.028f, 10.331f, 14.068f, 10.331f, 14.116f) + verticalLineTo(14.699f) + curveTo(10.331f, 14.748f, 10.37f, 14.788f, 10.418f, 14.788f) + close() + } + path(fill = SolidColor(Color(0xFF007BC2))) { + moveTo(24.778f, 17.978f) + horizontalLineTo(26.383f) + curveTo(26.433f, 17.978f, 26.471f, 17.94f, 26.471f, 17.89f) + verticalLineTo(17.307f) + curveTo(26.471f, 17.258f, 26.433f, 17.219f, 26.383f, 17.219f) + horizontalLineTo(25.855f) + verticalLineTo(15.48f) + horizontalLineTo(25.857f) + lineTo(27.718f, 17.219f) + horizontalLineTo(27.302f) + curveTo(27.254f, 17.219f, 27.215f, 17.258f, 27.215f, 17.307f) + verticalLineTo(17.89f) + curveTo(27.215f, 17.94f, 27.254f, 17.978f, 27.302f, 17.978f) + horizontalLineTo(28.908f) + curveTo(28.957f, 17.978f, 28.996f, 17.94f, 28.996f, 17.89f) + verticalLineTo(17.307f) + curveTo(28.996f, 17.258f, 28.957f, 17.219f, 28.908f, 17.219f) + horizontalLineTo(28.397f) + verticalLineTo(14.788f) + horizontalLineTo(28.908f) + curveTo(28.957f, 14.788f, 28.996f, 14.748f, 28.996f, 14.699f) + verticalLineTo(14.116f) + curveTo(28.996f, 14.068f, 28.957f, 14.028f, 28.908f, 14.028f) + horizontalLineTo(27.302f) + curveTo(27.254f, 14.028f, 27.215f, 14.068f, 27.215f, 14.116f) + verticalLineTo(14.699f) + curveTo(27.215f, 14.748f, 27.254f, 14.788f, 27.302f, 14.788f) + horizontalLineTo(27.807f) + verticalLineTo(16.496f) + horizontalLineTo(27.805f) + lineTo(25.979f, 14.788f) + horizontalLineTo(26.383f) + curveTo(26.433f, 14.788f, 26.471f, 14.748f, 26.471f, 14.699f) + verticalLineTo(14.116f) + curveTo(26.471f, 14.068f, 26.433f, 14.028f, 26.383f, 14.028f) + horizontalLineTo(24.778f) + curveTo(24.729f, 14.028f, 24.69f, 14.068f, 24.69f, 14.116f) + verticalLineTo(14.699f) + curveTo(24.69f, 14.748f, 24.729f, 14.788f, 24.778f, 14.788f) + horizontalLineTo(25.267f) + verticalLineTo(17.219f) + horizontalLineTo(24.778f) + curveTo(24.729f, 17.219f, 24.69f, 17.258f, 24.69f, 17.307f) + verticalLineTo(17.89f) + curveTo(24.69f, 17.94f, 24.729f, 17.978f, 24.778f, 17.978f) + close() + } + } + }.build() + + return _KomojuIcLawson!! + } + +@Suppress("ObjectPropertyName") +private var _KomojuIcLawson: ImageVector? = null diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcLinepay.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcLinepay.kt new file mode 100644 index 0000000..af74f75 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcLinepay.kt @@ -0,0 +1,165 @@ +package com.komoju.mobile.sdk.ui.icon + +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.unit.dp + +val KomojuIcon.Linepay: ImageVector + get() { + if (_KomojuIcLinepay != null) { + return _KomojuIcLinepay!! + } + _KomojuIcLinepay = ImageVector.Builder( + name = "KomojuIcLinepay", + defaultWidth = 44.dp, + defaultHeight = 47.dp, + viewportWidth = 44f, + viewportHeight = 47f, + ).apply { + path(fill = SolidColor(Color(0xFF000000))) { + moveTo(15.5f, 0f) + horizontalLineToRelative(-2f) + curveToRelative(-0.4f, 0f, -0.7f, 0.3f, -0.7f, 0.6f) + verticalLineToRelative(13.2f) + curveToRelative(0f, 0.3f, 0.3f, 0.6f, 0.6f, 0.6f) + horizontalLineToRelative(2.1f) + curveToRelative(0.3f, 0f, 0.6f, -0.3f, 0.6f, -0.6f) + verticalLineTo(0.6f) + curveToRelative(0f, -0.3f, -0.3f, -0.6f, -0.6f, -0.6f) + close() + moveToRelative(-5.1f, 11f) + horizontalLineTo(4.8f) + verticalLineTo(0.7f) + curveToRelative(0f, -0.3f, -0.3f, -0.6f, -0.6f, -0.6f) + horizontalLineTo(2f) + curveToRelative(-0.3f, 0f, -0.6f, 0.3f, -0.6f, 0.6f) + verticalLineToRelative(13.2f) + curveToRelative(0f, 0.3f, 0.3f, 0.5f, 0.6f, 0.5f) + horizontalLineToRelative(8.3f) + curveToRelative(0.4f, 0f, 0.6f, -0.2f, 0.6f, -0.5f) + verticalLineToRelative(-2.2f) + curveToRelative(0f, -0.3f, -0.2f, -0.5f, -0.6f, -0.5f) + close() + moveToRelative(31.3f, -7.7f) + curveToRelative(0.3f, 0f, 0.6f, -0.3f, 0.6f, -0.6f) + verticalLineTo(0.6f) + curveTo(42.3f, 0.3f, 42f, 0f, 41.7f, 0f) + horizontalLineToRelative(-8.4f) + curveToRelative(-0.3f, 0f, -0.5f, 0.3f, -0.5f, 0.6f) + verticalLineToRelative(13.2f) + curveToRelative(0f, 0.3f, 0.2f, 0.5f, 0.5f, 0.5f) + horizontalLineToRelative(8.4f) + curveToRelative(0.3f, 0f, 0.6f, -0.2f, 0.6f, -0.5f) + verticalLineToRelative(-2.2f) + curveToRelative(0f, -0.3f, -0.3f, -0.5f, -0.6f, -0.5f) + horizontalLineTo(36f) + verticalLineTo(8.8f) + horizontalLineToRelative(5.7f) + curveToRelative(0.3f, 0f, 0.6f, -0.2f, 0.6f, -0.6f) + verticalLineToRelative(-2f) + curveToRelative(0f, -0.4f, -0.3f, -0.7f, -0.6f, -0.7f) + horizontalLineTo(36f) + verticalLineTo(3.3f) + horizontalLineToRelative(5.7f) + close() + moveTo(30f, 0f) + horizontalLineToRelative(-2.2f) + curveToRelative(-0.3f, 0f, -0.5f, 0.3f, -0.5f, 0.6f) + verticalLineToRelative(7.6f) + lineToRelative(-5.5f, -8f) + lineTo(21f, 0f) + horizontalLineToRelative(-2.2f) + curveToRelative(-0.3f, 0f, -0.6f, 0.3f, -0.6f, 0.6f) + verticalLineToRelative(13.2f) + curveToRelative(0f, 0.3f, 0.3f, 0.5f, 0.6f, 0.5f) + horizontalLineTo(21f) + curveToRelative(0.3f, 0f, 0.6f, -0.2f, 0.6f, -0.5f) + verticalLineToRelative(-8f) + lineToRelative(5.7f, 8.3f) + horizontalLineToRelative(0.1f) + curveToRelative(0.1f, 0.2f, 0.2f, 0.2f, 0.4f, 0.2f) + horizontalLineTo(30f) + curveToRelative(0.4f, 0f, 0.6f, -0.2f, 0.6f, -0.5f) + verticalLineTo(0.6f) + curveTo(30.6f, 0.3f, 30.4f, 0f, 30f, 0f) + close() + } + path(fill = SolidColor(Color(0xFF08BF5B))) { + moveTo(42.4f, 47f) + horizontalLineTo(1.6f) + curveTo(0.7f, 47f, 0f, 46.1f, 0f, 45.2f) + verticalLineTo(20.8f) + curveToRelative(0f, -1f, 0.7f, -1.7f, 1.6f, -1.7f) + horizontalLineToRelative(40.8f) + curveToRelative(0.9f, 0f, 1.6f, 0.8f, 1.6f, 1.7f) + verticalLineToRelative(24.5f) + curveToRelative(0f, 0.9f, -0.7f, 1.6f, -1.6f, 1.6f) + close() + } + path(fill = SolidColor(Color(0xFFFFFFFF))) { + moveTo(15.9f, 30f) + curveToRelative(0f, 2.4f, -2f, 4.4f, -4.5f, 4.4f) + horizontalLineToRelative(-2f) + verticalLineTo(38f) + curveToRelative(0f, 0.2f, -0.1f, 0.4f, -0.3f, 0.4f) + horizontalLineTo(7f) + arcTo(0.4f, 0.4f, 0f, isMoreThanHalf = false, isPositiveArc = true, 6.6f, 38f) + verticalLineTo(26f) + curveToRelative(0f, -0.2f, 0.2f, -0.4f, 0.4f, -0.4f) + horizontalLineToRelative(4.4f) + curveToRelative(2.5f, 0f, 4.5f, 2f, 4.5f, 4.4f) + close() + moveToRelative(-3f, 0f) + curveToRelative(0f, -1f, -0.6f, -1.7f, -1.5f, -1.7f) + horizontalLineToRelative(-2f) + verticalLineToRelative(3.3f) + horizontalLineToRelative(2f) + curveToRelative(0.9f, 0f, 1.5f, -0.7f, 1.5f, -1.6f) + close() + moveToRelative(13.8f, -0.5f) + verticalLineToRelative(8.7f) + lineToRelative(-0.2f, 0.2f) + horizontalLineToRelative(-2.3f) + arcToRelative(0.2f, 0.2f, 0f, isMoreThanHalf = false, isPositiveArc = true, -0.2f, -0.2f) + verticalLineToRelative(-0.6f) + curveToRelative(-0.6f, 0.7f, -1.5f, 1f, -2.8f, 1f) + curveToRelative(-2.3f, 0f, -4.3f, -2f, -4.3f, -4.8f) + curveToRelative(0f, -2.7f, 2f, -4.8f, 4.3f, -4.8f) + curveToRelative(1.3f, 0f, 2.2f, 0.4f, 2.8f, 1.1f) + verticalLineToRelative(-0.6f) + curveToRelative(0f, -0.1f, 0f, -0.2f, 0.2f, -0.2f) + horizontalLineToRelative(2.3f) + reflectiveCurveToRelative(0.2f, 0f, 0.2f, 0.2f) + close() + moveTo(24f, 33.8f) + curveToRelative(0f, -1.3f, -1f, -2.2f, -2.2f, -2.2f) + curveToRelative(-1.3f, 0f, -2.2f, 0.9f, -2.2f, 2.2f) + curveToRelative(0f, 1.4f, 1f, 2.3f, 2.2f, 2.3f) + curveToRelative(1.2f, 0f, 2.2f, -0.9f, 2.2f, -2.3f) + close() + moveToRelative(11.8f, -4.3f) + lineToRelative(-2.1f, 5.3f) + lineToRelative(-2.2f, -5.3f) + curveToRelative(0f, -0.2f, -0.2f, -0.3f, -0.3f, -0.3f) + horizontalLineToRelative(-2.4f) + lineToRelative(-0.2f, 0.4f) + lineToRelative(3.7f, 8.8f) + lineToRelative(-1.4f, 3.4f) + curveToRelative(0f, 0.1f, 0f, 0.3f, 0.2f, 0.3f) + horizontalLineToRelative(2.4f) + lineToRelative(0.3f, -0.2f) + lineToRelative(4.9f, -12.3f) + curveToRelative(0f, -0.2f, 0f, -0.4f, -0.2f, -0.4f) + horizontalLineTo(36f) + curveToRelative(-0.1f, 0f, -0.3f, 0.1f, -0.3f, 0.3f) + close() + } + }.build() + + return _KomojuIcLinepay!! + } + +@Suppress("ObjectPropertyName") +private var _KomojuIcLinepay: ImageVector? = null diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcMaster.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcMaster.kt new file mode 100644 index 0000000..284065b --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcMaster.kt @@ -0,0 +1,70 @@ +package com.komoju.mobile.sdk.ui.icon + +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.PathFillType +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.group +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.unit.dp + +val KomojuIcon.Master: ImageVector + get() { + if (_KomojuIcMaster != null) { + return _KomojuIcMaster!! + } + _KomojuIcMaster = ImageVector.Builder( + name = "KomojuIcMaster", + defaultWidth = 24.dp, + defaultHeight = 17.dp, + viewportWidth = 24f, + viewportHeight = 17f, + ).apply { + group { + path(fill = SolidColor(Color(0xFF252525))) { + moveTo(22f, 0.5f) + horizontalLineTo(2f) + curveToRelative(-1.105f, 0f, -2f, 0.895f, -2f, 2f) + verticalLineToRelative(12f) + curveToRelative(0f, 1.105f, 0.895f, 2f, 2f, 2f) + horizontalLineToRelative(20f) + curveToRelative(1.105f, 0f, 2f, -0.895f, 2f, -2f) + verticalLineToRelative(-12f) + curveToRelative(0f, -1.105f, -0.895f, -2f, -2f, -2f) + close() + } + path(fill = SolidColor(Color(0xFFEB001B))) { + moveTo(9f, 13.5f) + curveToRelative(2.761f, 0f, 5f, -2.239f, 5f, -5f) + reflectiveCurveToRelative(-2.239f, -5f, -5f, -5f) + reflectiveCurveToRelative(-5f, 2.239f, -5f, 5f) + reflectiveCurveToRelative(2.239f, 5f, 5f, 5f) + close() + } + path(fill = SolidColor(Color(0xFFF79E1B))) { + moveTo(15f, 13.5f) + curveToRelative(2.761f, 0f, 5f, -2.239f, 5f, -5f) + reflectiveCurveToRelative(-2.239f, -5f, -5f, -5f) + reflectiveCurveToRelative(-5f, 2.239f, -5f, 5f) + reflectiveCurveToRelative(2.239f, 5f, 5f, 5f) + close() + } + path( + fill = SolidColor(Color(0xFFFF5F00)), + pathFillType = PathFillType.EvenOdd, + ) { + moveTo(12f, 4.5f) + curveToRelative(1.214f, 0.912f, 2f, 2.364f, 2f, 4f) + curveToRelative(0f, 1.636f, -0.786f, 3.088f, -2f, 4f) + curveToRelative(-1.214f, -0.912f, -2f, -2.364f, -2f, -4f) + curveToRelative(0f, -1.636f, 0.786f, -3.088f, 2f, -4f) + close() + } + } + }.build() + + return _KomojuIcMaster!! + } + +@Suppress("ObjectPropertyName") +private var _KomojuIcMaster: ImageVector? = null diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcMerpay.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcMerpay.kt new file mode 100644 index 0000000..4a40841 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcMerpay.kt @@ -0,0 +1,129 @@ +package com.komoju.mobile.sdk.ui.icon + +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.unit.dp + +val KomojuIcon.Merpay: ImageVector + get() { + if (_KomojuIcMerpay != null) { + return _KomojuIcMerpay!! + } + _KomojuIcMerpay = ImageVector.Builder( + name = "KomojuIcMerpay", + defaultWidth = 150.dp, + defaultHeight = 60.dp, + viewportWidth = 150f, + viewportHeight = 60f, + ).apply { + path(fill = SolidColor(Color(0xFF222222))) { + moveTo(143.71f, 22.74f) + lineTo(137.53f, 38.04f) + lineTo(131.27f, 22.74f) + horizontalLineTo(125.07f) + lineTo(134.74f, 44.38f) + lineTo(129.65f, 56.29f) + horizontalLineTo(135f) + lineTo(149.46f, 22.74f) + horizontalLineTo(143.71f) + close() + } + path(fill = SolidColor(Color(0xFF222222))) { + moveTo(85f, 11.3f) + horizontalLineTo(77.4f) + horizontalLineTo(71.9f) + verticalLineTo(46.66f) + horizontalLineTo(77.4f) + verticalLineTo(32.93f) + horizontalLineTo(85f) + curveTo(92.22f, 32.93f, 96.54f, 28.43f, 96.54f, 22.18f) + curveTo(96.56f, 15.85f, 92.24f, 11.3f, 85f, 11.3f) + close() + moveTo(85.93f, 27.74f) + horizontalLineTo(77.5f) + verticalLineTo(16.5f) + horizontalLineTo(85.95f) + curveTo(89.66f, 16.5f, 90.98f, 19.92f, 90.98f, 22.2f) + curveTo(90.98f, 24.48f, 89.66f, 27.74f, 85.95f, 27.74f) + horizontalLineTo(85.93f) + close() + } + path(fill = SolidColor(Color(0xFF222222))) { + moveTo(110.38f, 22.42f) + curveTo(103.25f, 22.42f, 98.07f, 27.55f, 98.07f, 34.62f) + curveTo(98.07f, 41.8f, 102.92f, 46.82f, 109.86f, 46.82f) + curveTo(112.71f, 46.82f, 115.78f, 45.13f, 116.89f, 43.02f) + verticalLineTo(46.67f) + horizontalLineTo(122.46f) + verticalLineTo(34.62f) + curveTo(122.46f, 27.21f, 117.79f, 22.42f, 110.38f, 22.42f) + close() + moveTo(110.32f, 41.92f) + curveTo(106.24f, 41.92f, 103.68f, 39.12f, 103.68f, 34.61f) + curveTo(103.68f, 30.45f, 106.54f, 27.31f, 110.32f, 27.31f) + curveTo(114.36f, 27.31f, 116.82f, 30.18f, 116.82f, 34.61f) + curveTo(116.85f, 38.16f, 114.64f, 41.93f, 110.32f, 41.93f) + verticalLineTo(41.92f) + close() + } + path(fill = SolidColor(Color(0xFFFF0211))) { + moveTo(30.79f, 59.5f) + lineTo(54f, 47.87f) + curveTo(54.8f, 47.47f, 55.48f, 46.85f, 55.95f, 46.09f) + curveTo(56.42f, 45.33f, 56.67f, 44.45f, 56.67f, 43.55f) + verticalLineTo(16.45f) + curveTo(56.67f, 15.55f, 56.42f, 14.67f, 55.95f, 13.91f) + curveTo(55.48f, 13.15f, 54.8f, 12.53f, 54f, 12.13f) + lineTo(30.79f, 0.5f) + curveTo(30.11f, 0.16f, 29.36f, -0.01f, 28.61f, -0.01f) + curveTo(27.85f, -0.01f, 27.1f, 0.16f, 26.42f, 0.5f) + lineTo(3.22f, 12.13f) + curveTo(2.42f, 12.53f, 1.74f, 13.15f, 1.27f, 13.91f) + curveTo(0.8f, 14.67f, 0.55f, 15.55f, 0.54f, 16.45f) + verticalLineTo(43.55f) + curveTo(0.55f, 44.45f, 0.8f, 45.33f, 1.27f, 46.09f) + curveTo(1.74f, 46.85f, 2.42f, 47.47f, 3.22f, 47.87f) + lineTo(26.42f, 59.5f) + curveTo(27.1f, 59.84f, 27.85f, 60.01f, 28.61f, 60.01f) + curveTo(29.36f, 60.01f, 30.11f, 59.84f, 30.79f, 59.5f) + close() + } + path(fill = SolidColor(Color(0xFF4DC9FF))) { + moveTo(47.96f, 29.36f) + curveTo(54.91f, 29.36f, 60.54f, 23.72f, 60.54f, 16.78f) + curveTo(60.54f, 9.83f, 54.91f, 4.2f, 47.96f, 4.2f) + curveTo(41.01f, 4.2f, 35.38f, 9.83f, 35.38f, 16.78f) + curveTo(35.38f, 23.72f, 41.01f, 29.36f, 47.96f, 29.36f) + close() + } + path(fill = SolidColor(Color(0xFFFFFFFF))) { + moveTo(8.27f, 39.76f) + lineTo(5.81f, 38.53f) + verticalLineTo(31.25f) + curveTo(5.81f, 29.12f, 7.01f, 27f, 9.49f, 27.25f) + curveTo(11.8f, 27.5f, 13.59f, 29.56f, 14.14f, 30.9f) + curveTo(14.51f, 30.56f, 14.96f, 30.31f, 15.45f, 30.17f) + curveTo(15.93f, 30.04f, 16.45f, 30.03f, 16.94f, 30.14f) + curveTo(18.21f, 30.31f, 22.98f, 32.14f, 22.98f, 38.59f) + verticalLineTo(47.18f) + lineTo(20.28f, 45.82f) + verticalLineTo(37.79f) + curveTo(20.28f, 35.43f, 18.84f, 33.46f, 16.9f, 33.24f) + curveTo(16.1f, 33.14f, 15.4f, 33.79f, 15.4f, 35.17f) + curveTo(15.4f, 36.56f, 15.4f, 43.34f, 15.4f, 43.34f) + lineTo(12.93f, 42.1f) + verticalLineTo(34.5f) + curveTo(12.93f, 31.15f, 10.76f, 30.09f, 9.81f, 30f) + curveTo(9.28f, 29.94f, 8.28f, 30.26f, 8.28f, 32f) + lineTo(8.27f, 39.76f) + close() + } + }.build() + + return _KomojuIcMerpay!! + } + +@Suppress("ObjectPropertyName") +private var _KomojuIcMerpay: ImageVector? = null diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcMinistop.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcMinistop.kt new file mode 100644 index 0000000..ed1f15a --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcMinistop.kt @@ -0,0 +1,257 @@ +package com.komoju.mobile.sdk.ui.icon + +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.unit.dp +import kotlin.Suppress + +val KomojuIcon.Ministop: ImageVector + get() { + if (_KomojuIcMinistop != null) { + return _KomojuIcMinistop!! + } + _KomojuIcMinistop = ImageVector.Builder( + name = "KomojuIcMinistop", + defaultWidth = 32.dp, + defaultHeight = 32.dp, + viewportWidth = 32f, + viewportHeight = 32f, + ).apply { + path(fill = SolidColor(Color(0xFFEAF2FF))) { + moveTo(5.333f, 0f) + horizontalLineToRelative(21.334f) + arcTo(5.333f, 5.333f, 0f, isMoreThanHalf = false, isPositiveArc = true, 32f, 5.333f) + verticalLineToRelative(21.334f) + arcTo(5.333f, 5.333f, 0f, isMoreThanHalf = false, isPositiveArc = true, 26.667f, 32f) + horizontalLineTo(5.333f) + arcTo(5.333f, 5.333f, 0f, isMoreThanHalf = false, isPositiveArc = true, 0f, 26.667f) + verticalLineTo(5.333f) + arcTo(5.333f, 5.333f, 0f, isMoreThanHalf = false, isPositiveArc = true, 5.333f, 0f) + close() + } + path(fill = SolidColor(Color(0xFFFFFFFF))) { + moveTo(6.375f, 17.196f) + curveToRelative(0f, -0.019f, -0.015f, -0.034f, -0.034f, -0.034f) + horizontalLineTo(5.158f) + curveTo(4.519f, 17.162f, 4f, 16.642f, 4f, 16.004f) + curveToRelative(0f, -0.31f, 0.103f, -0.623f, 0.339f, -0.859f) + lineToRelative(6.462f, -6.722f) + curveToRelative(0.454f, -0.454f, 1.188f, -0.454f, 1.642f, 0f) + lineToRelative(1.505f, 1.463f) + lineToRelative(3.042f, -0.004f) + curveToRelative(0.203f, -1.246f, 1.834f, -1.796f, 2.934f, -1.796f) + curveToRelative(1.855f, 0f, 3.406f, 1.295f, 3.801f, 3.029f) + curveToRelative(0.007f, 0.031f, 0.015f, 0.061f, 0.019f, 0.091f) + curveToRelative(0.004f, 0.016f, 0.013f, 0.03f, 0.026f, 0.037f) + curveToRelative(1.334f, 0.734f, 2.268f, 2.103f, 2.395f, 3.7f) + curveToRelative(0.002f, 0.02f, 0.011f, 0.037f, 0.027f, 0.046f) + lineToRelative(0.03f, 0.018f) + curveTo(27.287f, 15.647f, 28f, 16.813f, 28f, 18.146f) + curveToRelative(0f, 1.527f, -0.934f, 2.835f, -2.262f, 3.384f) + curveToRelative(-0.013f, 0.005f, -0.022f, 0.017f, -0.022f, 0.032f) + verticalLineToRelative(1.197f) + curveToRelative(0f, 0.64f, -0.518f, 1.158f, -1.158f, 1.158f) + horizontalLineTo(7.536f) + curveToRelative(-0.64f, 0f, -1.159f, -0.518f, -1.159f, -1.158f) + lineToRelative(-0.002f, -5.563f) + close() + } + path(fill = SolidColor(Color(0xFF003894))) { + moveTo(15.652f, 16.904f) + curveToRelative(0.411f, 0f, 0.745f, -0.333f, 0.745f, -0.745f) + verticalLineToRelative(-2.712f) + curveToRelative(0f, -0.411f, -0.334f, -0.745f, -0.745f, -0.745f) + curveToRelative(-0.412f, 0f, -0.745f, 0.334f, -0.745f, 0.745f) + verticalLineToRelative(2.712f) + curveToRelative(0f, 0.411f, 0.333f, 0.745f, 0.745f, 0.745f) + close() + moveToRelative(5.865f, 0f) + curveToRelative(0.411f, 0f, 0.745f, -0.333f, 0.745f, -0.745f) + verticalLineToRelative(-2.712f) + curveToRelative(0f, -0.411f, -0.334f, -0.745f, -0.745f, -0.745f) + reflectiveCurveToRelative(-0.745f, 0.334f, -0.745f, 0.745f) + verticalLineToRelative(2.712f) + curveToRelative(0f, 0.411f, 0.334f, 0.745f, 0.745f, 0.745f) + close() + moveToRelative(-8.259f, 1.718f) + curveToRelative(0f, -0.023f, -0.018f, -0.042f, -0.041f, -0.042f) + horizontalLineToRelative(-0.195f) + curveToRelative(-0.344f, 0f, -0.623f, -0.279f, -0.623f, -0.623f) + reflectiveCurveToRelative(0.279f, -0.623f, 0.623f, -0.623f) + horizontalLineToRelative(1.758f) + curveToRelative(0.344f, 0f, 0.623f, 0.279f, 0.623f, 0.623f) + reflectiveCurveToRelative(-0.279f, 0.623f, -0.623f, 0.623f) + horizontalLineToRelative(-0.101f) + curveToRelative(-0.023f, 0f, -0.041f, 0.019f, -0.041f, 0.042f) + lineToRelative(-0.001f, 2.218f) + curveToRelative(0f, 0.381f, -0.309f, 0.689f, -0.689f, 0.689f) + curveToRelative(-0.38f, 0f, -0.689f, -0.308f, -0.689f, -0.689f) + lineToRelative(-0.001f, -2.218f) + close() + moveToRelative(6.317f, -5.92f) + curveToRelative(-0.397f, 0f, -0.719f, 0.322f, -0.719f, 0.718f) + lineToRelative(-0.006f, 0.528f) + lineToRelative(-0.001f, -0.003f) + curveToRelative(0f, 0.008f, -0.006f, 0.015f, -0.015f, 0.015f) + curveToRelative(-0.005f, 0f, -0.01f, -0.003f, -0.012f, -0.007f) + lineToRelative(-0.642f, -0.929f) + curveToRelative(-0.129f, -0.187f, -0.345f, -0.309f, -0.59f, -0.309f) + curveToRelative(-0.397f, 0f, -0.718f, 0.321f, -0.718f, 0.719f) + verticalLineToRelative(2.744f) + curveToRelative(0f, 0.397f, 0.321f, 0.719f, 0.718f, 0.719f) + curveToRelative(0.397f, 0f, 0.719f, -0.322f, 0.719f, -0.719f) + lineToRelative(0.007f, -0.539f) + verticalLineToRelative(0.001f) + curveToRelative(0f, -0.008f, 0.007f, -0.015f, 0.015f, -0.015f) + curveToRelative(0.005f, 0f, 0.009f, 0.003f, 0.012f, 0.007f) + lineToRelative(0.628f, 0.923f) + curveToRelative(0.128f, 0.198f, 0.351f, 0.329f, 0.603f, 0.329f) + curveToRelative(0.397f, 0f, 0.719f, -0.322f, 0.719f, -0.719f) + verticalLineTo(13.42f) + curveToRelative(0f, -0.396f, -0.322f, -0.718f, -0.718f, -0.718f) + close() + moveToRelative(-5.884f, 0f) + curveToRelative(-0.231f, 0f, -0.436f, 0.105f, -0.572f, 0.269f) + verticalLineTo(12.97f) + lineToRelative(-0.799f, 0.905f) + reflectiveCurveToRelative(-0.009f, 0.021f, -0.03f, 0.021f) + curveToRelative(-0.02f, 0f, -0.038f, -0.021f, -0.038f, -0.021f) + lineToRelative(-0.811f, -0.898f) + curveToRelative(-0.136f, -0.168f, -0.344f, -0.275f, -0.577f, -0.275f) + curveToRelative(-0.41f, 0f, -0.743f, 0.333f, -0.743f, 0.743f) + verticalLineToRelative(2.736f) + curveToRelative(0f, 0.397f, 0.322f, 0.718f, 0.719f, 0.718f) + curveToRelative(0.396f, 0f, 0.718f, -0.321f, 0.718f, -0.718f) + lineToRelative(0.018f, -0.985f) + curveToRelative(0.001f, -0.01f, 0.01f, -0.019f, 0.021f, -0.019f) + curveToRelative(0.005f, 0f, 0.011f, 0.003f, 0.015f, 0.006f) + lineToRelative(0.645f, 0.722f) + reflectiveCurveToRelative(0.017f, 0.026f, 0.039f, 0.026f) + curveToRelative(0.023f, 0f, 0.039f, -0.026f, 0.039f, -0.026f) + lineToRelative(0.607f, -0.735f) + curveToRelative(0.004f, -0.003f, 0.009f, -0.006f, 0.015f, -0.006f) + curveToRelative(0.012f, 0f, 0.022f, 0.01f, 0.022f, 0.022f) + lineToRelative(0.018f, 0.995f) + curveToRelative(0f, 0.397f, 0.321f, 0.718f, 0.718f, 0.718f) + curveToRelative(0.397f, 0f, 0.719f, -0.321f, 0.719f, -0.718f) + verticalLineToRelative(-2.736f) + curveToRelative(0f, -0.41f, -0.333f, -0.743f, -0.743f, -0.743f) + close() + moveToRelative(7.913f, 6.345f) + horizontalLineToRelative(-0.371f) + curveToRelative(-0.012f, 0f, -0.021f, -0.009f, -0.021f, -0.021f) + verticalLineToRelative(-0.611f) + curveToRelative(0f, -0.012f, 0.009f, -0.021f, 0.021f, -0.021f) + lineToRelative(0.371f, 0.001f) + curveToRelative(0.181f, 0f, 0.327f, 0.145f, 0.327f, 0.326f) + curveToRelative(0f, 0.18f, -0.146f, 0.326f, -0.327f, 0.326f) + close() + moveToRelative(0.003f, -1.713f) + horizontalLineToRelative(-1.412f) + curveToRelative(-0.237f, 0f, -0.43f, 0.193f, -0.43f, 0.43f) + lineToRelative(0.003f, 3.043f) + curveToRelative(0f, 0.399f, 0.323f, 0.722f, 0.722f, 0.722f) + curveToRelative(0.399f, 0f, 0.722f, -0.323f, 0.722f, -0.722f) + verticalLineToRelative(-0.706f) + curveToRelative(0f, -0.011f, 0.01f, -0.021f, 0.022f, -0.021f) + horizontalLineToRelative(0.326f) + curveToRelative(1.01f, 0f, 1.492f, -0.681f, 1.492f, -1.359f) + curveToRelative(0f, -0.766f, -0.647f, -1.387f, -1.445f, -1.387f) + close() + } + path(fill = SolidColor(Color(0xFF003894))) { + moveTo(24.525f, 16.249f) + horizontalLineToRelative(0.002f) + curveToRelative(0.986f, 0.094f, 1.757f, 0.929f, 1.757f, 1.93f) + curveToRelative(0f, 0.982f, -0.741f, 1.793f, -1.701f, 1.91f) + curveToRelative(-0.333f, 0.041f, -0.591f, 0.314f, -0.591f, 0.655f) + verticalLineToRelative(1.395f) + curveToRelative(0f, 0.03f, -0.024f, 0.054f, -0.054f, 0.054f) + horizontalLineTo(8.156f) + curveToRelative(-0.029f, 0f, -0.053f, -0.024f, -0.053f, -0.054f) + lineTo(8.101f, 16.04f) + curveToRelative(0f, -0.337f, -0.273f, -0.61f, -0.61f, -0.61f) + horizontalLineToRelative(-0.94f) + curveToRelative(-0.006f, 0f, -0.012f, -0.003f, -0.017f, -0.007f) + curveToRelative(-0.009f, -0.009f, -0.009f, -0.024f, 0f, -0.034f) + lineToRelative(5.074f, -5.255f) + curveToRelative(0.009f, -0.01f, 0.024f, -0.01f, 0.034f, 0f) + lineToRelative(1.538f, 1.48f) + curveToRelative(0.211f, 0.211f, 0.604f, 0.231f, 0.834f, 0f) + curveToRelative(0.23f, -0.23f, 0.229f, -0.606f, -0.002f, -0.836f) + lineToRelative(-1.974f, -1.922f) + curveToRelative(-0.231f, -0.23f, -0.604f, -0.23f, -0.834f, 0f) + lineToRelative(-6.516f, 6.757f) + curveToRelative(-0.087f, 0.106f, -0.14f, 0.243f, -0.14f, 0.392f) + curveToRelative(0f, 0.337f, 0.284f, 0.6f, 0.61f, 0.6f) + horizontalLineToRelative(1.714f) + curveToRelative(0.029f, 0f, 0.053f, 0.024f, 0.053f, 0.053f) + verticalLineToRelative(6.101f) + curveToRelative(0f, 0.337f, 0.273f, 0.611f, 0.61f, 0.611f) + horizontalLineTo(24.56f) + curveToRelative(0.337f, 0f, 0.61f, -0.274f, 0.61f, -0.611f) + verticalLineToRelative(-1.563f) + curveToRelative(0f, -0.016f, 0.01f, -0.029f, 0.025f, -0.033f) + curveToRelative(1.298f, -0.371f, 2.248f, -1.566f, 2.248f, -2.984f) + curveToRelative(0f, -1.217f, -0.7f, -2.27f, -1.72f, -2.779f) + lineToRelative(-0.061f, -0.03f) + curveToRelative(-0.022f, -0.01f, -0.037f, -0.032f, -0.037f, -0.057f) + curveToRelative(-0.014f, -1.617f, -0.965f, -3.009f, -2.336f, -3.661f) + curveToRelative(-0.022f, -0.01f, -0.033f, -0.032f, -0.036f, -0.057f) + curveToRelative(-0.208f, -1.654f, -1.619f, -2.933f, -3.329f, -2.933f) + curveToRelative(-0.747f, 0f, -1.438f, 0.243f, -1.996f, 0.657f) + curveToRelative(-0.263f, 0.195f, -0.334f, 0.556f, -0.146f, 0.823f) + curveToRelative(0.187f, 0.268f, 0.564f, 0.345f, 0.823f, 0.147f) + curveToRelative(0.366f, -0.28f, 0.823f, -0.445f, 1.319f, -0.445f) + curveToRelative(0.851f, 0f, 1.587f, 0.489f, 1.944f, 1.201f) + curveToRelative(0.146f, 0.292f, 0.276f, 0.707f, 0.276f, 1.406f) + curveToRelative(0f, 0.025f, 0.018f, 0.047f, 0.042f, 0.051f) + curveToRelative(0.039f, 0.008f, 0.076f, 0.018f, 0.113f, 0.029f) + curveToRelative(1.086f, 0.294f, 1.92f, 1.217f, 2.104f, 2.344f) + curveToRelative(0.025f, 0.154f, 0.075f, 0.565f, 0.075f, 1.322f) + curveToRelative(0f, 0.027f, 0.021f, 0.049f, 0.047f, 0.052f) + close() + } + path(fill = SolidColor(Color(0xFF003894))) { + moveTo(12.347f, 20.209f) + curveToRelative(0f, 0.783f, -0.633f, 1.417f, -1.416f, 1.417f) + curveToRelative(-0.546f, 0f, -0.962f, -0.216f, -1.282f, -0.559f) + curveToRelative(-0.098f, -0.105f, -0.153f, -0.249f, -0.153f, -0.404f) + curveToRelative(0f, -0.332f, 0.269f, -0.602f, 0.602f, -0.602f) + curveToRelative(0.131f, 0f, 0.295f, 0.065f, 0.379f, 0.11f) + curveToRelative(0.042f, 0.023f, 0.256f, 0.169f, 0.344f, 0.169f) + curveToRelative(0.066f, 0f, 0.119f, -0.053f, 0.119f, -0.119f) + curveToRelative(0f, -0.085f, -0.117f, -0.159f, -0.17f, -0.186f) + curveToRelative(-0.605f, -0.302f, -1.161f, -0.714f, -1.161f, -1.466f) + reflectiveCurveToRelative(0.541f, -1.345f, 1.394f, -1.345f) + curveToRelative(0.46f, 0f, 0.863f, 0.207f, 1.15f, 0.52f) + curveToRelative(0.088f, 0.095f, 0.139f, 0.22f, 0.139f, 0.359f) + curveToRelative(0f, 0.294f, -0.239f, 0.532f, -0.533f, 0.532f) + curveToRelative(-0.202f, 0f, -0.47f, -0.166f, -0.495f, -0.179f) + curveToRelative(-0.07f, -0.039f, -0.1f, -0.075f, -0.171f, -0.075f) + curveToRelative(-0.07f, 0f, -0.126f, 0.057f, -0.126f, 0.127f) + curveToRelative(0f, 0.095f, 0.112f, 0.173f, 0.377f, 0.302f) + curveToRelative(0.73f, 0.358f, 1.003f, 0.874f, 1.003f, 1.399f) + close() + moveToRelative(4.947f, 0.065f) + curveToRelative(-0.471f, 0f, -0.852f, -0.382f, -0.852f, -0.852f) + curveToRelative(0f, -0.471f, 0.381f, -0.852f, 0.852f, -0.852f) + curveToRelative(0.47f, 0f, 0.852f, 0.381f, 0.852f, 0.852f) + curveToRelative(0f, 0.47f, -0.382f, 0.852f, -0.852f, 0.852f) + close() + moveToRelative(0.001f, -3.043f) + curveToRelative(-1.195f, 0f, -2.163f, 0.981f, -2.163f, 2.191f) + reflectiveCurveToRelative(0.968f, 2.191f, 2.163f, 2.191f) + curveToRelative(1.194f, 0f, 2.162f, -0.981f, 2.162f, -2.191f) + reflectiveCurveToRelative(-0.968f, -2.191f, -2.162f, -2.191f) + close() + } + }.build() + + return _KomojuIcMinistop!! + } + +@Suppress("ObjectPropertyName") +private var _KomojuIcMinistop: ImageVector? = null diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcNetCash.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcNetCash.kt new file mode 100644 index 0000000..b78f2f1 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcNetCash.kt @@ -0,0 +1,150 @@ +package com.komoju.mobile.sdk.ui.icon + +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.unit.dp +import kotlin.Suppress + +val KomojuIcon.NetCash: ImageVector + get() { + if (_KomojuIcNetCash != null) { + return _KomojuIcNetCash!! + } + _KomojuIcNetCash = ImageVector.Builder( + name = "KomojuIcNetCash", + defaultWidth = 72.dp, + defaultHeight = 17.dp, + viewportWidth = 72f, + viewportHeight = 17f, + ).apply { + path(fill = SolidColor(Color(0xFF000000))) { + moveTo(0.243f, 0.983f) + horizontalLineTo(3.757f) + lineTo(6.707f, 10.129f) + lineTo(6.742f, 10.088f) + curveTo(6.598f, 8.338f, 6.326f, 6.609f, 6.326f, 4.857f) + verticalLineTo(0.983f) + horizontalLineTo(9.867f) + verticalLineTo(16.147f) + horizontalLineTo(6.326f) + lineTo(3.574f, 7.4f) + lineTo(3.538f, 7.441f) + curveTo(3.63f, 8.869f, 3.792f, 10.276f, 3.792f, 11.701f) + verticalLineTo(16.147f) + horizontalLineTo(0.252f) + lineTo(0.243f, 0.983f) + close() + } + path(fill = SolidColor(Color(0xFF000000))) { + moveTo(11.631f, 0.983f) + horizontalLineTo(18.49f) + verticalLineTo(4.565f) + horizontalLineTo(15.322f) + verticalLineTo(6.677f) + horizontalLineTo(18.163f) + verticalLineTo(10.256f) + horizontalLineTo(15.322f) + verticalLineTo(12.569f) + horizontalLineTo(18.49f) + verticalLineTo(16.147f) + horizontalLineTo(11.631f) + verticalLineTo(0.983f) + close() + } + path(fill = SolidColor(Color(0xFF000000))) { + moveTo(22.11f, 16.147f) + verticalLineTo(4.671f) + horizontalLineTo(20.075f) + verticalLineTo(0.983f) + horizontalLineTo(27.911f) + verticalLineTo(4.671f) + horizontalLineTo(25.792f) + verticalLineTo(16.147f) + horizontalLineTo(22.11f) + close() + } + path(fill = SolidColor(Color(0xFF000000))) { + moveTo(41.441f, 5.429f) + curveTo(40.916f, 4.866f, 40.482f, 4.544f, 39.721f, 4.544f) + curveTo(37.803f, 4.544f, 37.331f, 6.904f, 37.331f, 8.565f) + curveTo(37.331f, 10.335f, 37.803f, 12.587f, 39.65f, 12.587f) + curveTo(40.482f, 12.587f, 41.007f, 12.227f, 41.603f, 11.625f) + lineTo(41.385f, 15.882f) + curveTo(40.698f, 16.24f, 39.935f, 16.426f, 39.16f, 16.425f) + curveTo(36.136f, 16.425f, 33.555f, 13.87f, 33.555f, 8.683f) + curveTo(33.555f, 1.898f, 37.756f, 0.738f, 39.547f, 0.738f) + curveTo(40.193f, 0.725f, 40.834f, 0.848f, 41.429f, 1.101f) + lineTo(41.441f, 5.429f) + close() + } + path(fill = SolidColor(Color(0xFF000000))) { + moveTo(47.197f, 10.979f) + lineTo(47.704f, 7.459f) + curveTo(47.849f, 6.515f, 47.94f, 5.55f, 48.046f, 4.603f) + horizontalLineTo(48.085f) + curveTo(48.173f, 5.55f, 48.247f, 6.515f, 48.356f, 7.459f) + lineTo(48.754f, 10.979f) + horizontalLineTo(47.197f) + close() + moveTo(53.28f, 16.147f) + lineTo(50.383f, 0.986f) + horizontalLineTo(45.875f) + lineTo(42.6f, 16.147f) + horizontalLineTo(46.4f) + lineTo(46.695f, 14.197f) + horizontalLineTo(49.176f) + lineTo(49.448f, 16.147f) + horizontalLineTo(53.28f) + close() + } + path(fill = SolidColor(Color(0xFF000000))) { + moveTo(54.236f, 11.04f) + curveTo(54.746f, 11.884f, 55.632f, 12.728f, 56.573f, 12.728f) + curveTo(56.71f, 12.735f, 56.848f, 12.715f, 56.977f, 12.668f) + curveTo(57.107f, 12.621f, 57.226f, 12.549f, 57.327f, 12.455f) + curveTo(57.428f, 12.362f, 57.51f, 12.249f, 57.567f, 12.124f) + curveTo(57.623f, 11.998f, 57.655f, 11.863f, 57.658f, 11.725f) + curveTo(57.666f, 11.416f, 57.561f, 11.115f, 57.363f, 10.878f) + curveTo(57.186f, 10.654f, 56.979f, 10.455f, 56.747f, 10.288f) + curveTo(56.048f, 9.736f, 55.433f, 9.086f, 54.921f, 8.359f) + curveTo(54.414f, 7.567f, 54.155f, 6.643f, 54.177f, 5.703f) + curveTo(54.177f, 3.933f, 55.192f, 0.717f, 58.34f, 0.717f) + curveTo(59.267f, 0.739f, 60.172f, 1.003f, 60.966f, 1.481f) + verticalLineTo(6.093f) + curveTo(60.532f, 5.329f, 59.644f, 4.461f, 58.791f, 4.461f) + curveTo(58.543f, 4.461f, 58.305f, 4.558f, 58.127f, 4.731f) + curveTo(57.949f, 4.904f, 57.845f, 5.14f, 57.838f, 5.388f) + curveTo(57.856f, 5.702f, 57.983f, 6.001f, 58.198f, 6.231f) + curveTo(58.407f, 6.455f, 58.63f, 6.664f, 58.868f, 6.857f) + curveTo(59.581f, 7.357f, 60.195f, 7.984f, 60.68f, 8.707f) + curveTo(61.159f, 9.499f, 61.392f, 10.416f, 61.349f, 11.341f) + curveTo(61.349f, 14.156f, 59.579f, 16.41f, 57.004f, 16.41f) + curveTo(56.046f, 16.403f, 55.101f, 16.191f, 54.233f, 15.788f) + lineTo(54.236f, 11.04f) + close() + } + path(fill = SolidColor(Color(0xFF000000))) { + moveTo(68.303f, 16.147f) + verticalLineTo(9.981f) + horizontalLineTo(66.533f) + verticalLineTo(16.147f) + horizontalLineTo(62.854f) + verticalLineTo(0.986f) + horizontalLineTo(66.548f) + verticalLineTo(6.414f) + horizontalLineTo(68.318f) + verticalLineTo(0.986f) + horizontalLineTo(72f) + verticalLineTo(16.147f) + horizontalLineTo(68.303f) + close() + } + }.build() + + return _KomojuIcNetCash!! + } + +@Suppress("ObjectPropertyName") +private var _KomojuIcNetCash: ImageVector? = null diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcPaidy.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcPaidy.kt new file mode 100644 index 0000000..917d08d --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcPaidy.kt @@ -0,0 +1,215 @@ +package com.komoju.mobile.sdk.ui.icon + +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.graphics.Brush +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.PathFillType +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.unit.dp +import kotlin.Suppress + +val KomojuIcon.Paidy: ImageVector + get() { + if (_KomojuIcPaidy != null) { + return _KomojuIcPaidy!! + } + _KomojuIcPaidy = ImageVector.Builder( + name = "KomojuIcPaidy", + defaultWidth = 81.dp, + defaultHeight = 24.dp, + viewportWidth = 300f, + viewportHeight = 90f, + ).apply { + path( + fill = Brush.linearGradient( + colorStops = arrayOf( + 0f to Color(0xFFA6009C), + 1f to Color(0xFFFF009C), + ), + start = Offset(7f, 78.2f), + end = Offset(79f, 12f), + ), + ) { + moveTo(42.8f, 43.5f) + lineToRelative(0.1f, 20.2f) + curveToRelative(0f, 2.5f, -2.1f, 4.5f, -4.6f, 4.5f) + curveToRelative(-2.5f, 0f, -4.5f, -2f, -4.5f, -4.5f) + verticalLineTo(33.1f) + lineToRelative(4.3f, 5.3f) + curveToRelative(2f, 2.5f, 3.3f, 3.9f, 4.7f, 5.1f) + close() + } + path( + fill = Brush.linearGradient( + colorStops = arrayOf( + 0f to Color(0xFFA6009C), + 1f to Color(0xFFFF009C), + ), + start = Offset(7.4f, 102.2f), + end = Offset(56.3f, 17.4f), + ), + ) { + moveTo(84.5f, 55.2f) + curveToRelative(0.4f, 6.7f, -3.8f, 12.2f, -8.9f, 15.6f) + curveToRelative(-1.1f, 0.7f, -18.6f, 11.9f, -24f, 14.6f) + arcToRelative(22.7f, 22.7f, 0f, isMoreThanHalf = false, isPositiveArc = true, -11.3f, 2.7f) + arcTo(26f, 26f, 0f, isMoreThanHalf = false, isPositiveArc = true, 27.2f, 85f) + arcTo(911f, 911f, 0f, isMoreThanHalf = false, isPositiveArc = true, 9.3f, 74.5f) + curveToRelative(-4.9f, -3f, -7.2f, -5.8f, -8.5f, -10.7f) + curveTo(0f, 60.8f, 0f, 57.6f, 0f, 56.7f) + verticalLineTo(31.2f) + curveToRelative(0f, -11.8f, 6.7f, -20.4f, 14.6f, -23f) + curveToRelative(8f, -2.7f, 13.9f, -1f, 18.2f, 1.9f) + curveToRelative(3.4f, 2.3f, 8.1f, 8f, 8.7f, 8.8f) + curveToRelative(0f, 0f, 6.9f, 9.1f, 9.6f, 11.5f) + curveToRelative(2.8f, 2.5f, 5f, 3.7f, 8.5f, 3.7f) + curveToRelative(5.8f, 0f, 10.6f, -4.8f, 10.6f, -10.8f) + curveToRelative(0f, -5.6f, -4.2f, -10.7f, -10.8f, -10.7f) + curveToRelative(-6.4f, 0f, -10.6f, 6.6f, -11.1f, 7.2f) + lineToRelative(-3.1f, -4.1f) + lineToRelative(-2.7f, -3.1f) + arcToRelative(20.1f, 20.1f, 0f, isMoreThanHalf = false, isPositiveArc = true, 37.1f, 10.7f) + curveToRelative(0f, 8.5f, -5.6f, 20f, -20.2f, 20f) + curveToRelative(-5.4f, 0f, -9.9f, -2f, -14.4f, -5.9f) + arcToRelative(165.7f, 165.7f, 0f, isMoreThanHalf = false, isPositiveArc = true, -11.6f, -13.8f) + curveToRelative(-4f, -4.9f, -8.2f, -9.4f, -15.9f, -6.5f) + curveToRelative(-7.2f, 3.1f, -8.4f, 10.2f, -8.4f, 14.1f) + verticalLineToRelative(25.5f) + reflectiveCurveToRelative(0f, 3f, 0.6f, 4.9f) + curveToRelative(0.7f, 2.2f, 2.7f, 4f, 4f, 4.8f) + arcToRelative(527f, 527f, 0f, isMoreThanHalf = false, isPositiveArc = false, 18.9f, 11.1f) + curveToRelative(3.4f, 1.8f, 9.2f, 2.6f, 14.5f, -0.1f) + curveToRelative(4f, -2f, 23.3f, -14.2f, 23.6f, -14.4f) + curveToRelative(4.8f, -3.5f, 4.4f, -6.6f, 4.5f, -7.5f) + arcToRelative(10.8f, 10.8f, 0f, isMoreThanHalf = false, isPositiveArc = false, 9.3f, -0.3f) + close() + } + path( + fill = Brush.linearGradient( + colorStops = arrayOf( + 0f to Color(0xFFA6009C), + 1f to Color(0xFFFF009C), + ), + start = Offset(23.4f, 97.9f), + end = Offset(98.1f, 29.2f), + ), + ) { + moveTo(79.6f, 51.5f) + arcToRelative(5.3f, 5.3f, 0f, isMoreThanHalf = false, isPositiveArc = true, -5.3f, -5.3f) + arcToRelative(5.4f, 5.4f, 0f, isMoreThanHalf = false, isPositiveArc = true, 10.7f, 0f) + curveToRelative(0f, 3f, -2.4f, 5.3f, -5.4f, 5.3f) + close() + } + path(fill = SolidColor(Color(0xFF1C1C1C))) { + moveTo(300.5f, 35f) + curveToRelative(-0.4f, 0.8f, -1f, 1.4f, -1.2f, 2.1f) + lineToRelative(-11.5f, 37.8f) + curveToRelative(-0.5f, 1.6f, -1.1f, 3.2f, -2f, 4.7f) + curveToRelative(-3f, 4.7f, -8.7f, 6.8f, -14.1f, 5.1f) + curveToRelative(-0.4f, -0.1f, -1.1f, -0.4f, -1.2f, -0.7f) + curveToRelative(-0.4f, -2f, -1.1f, -4.1f, -0.7f, -6f) + curveToRelative(0.2f, -1f, 2.1f, -2.2f, 3.5f, -2.4f) + curveToRelative(3.7f, -0.7f, 4.7f, -1.8f, 3.6f, -5.5f) + lineToRelative(-3.7f, -12.3f) + lineToRelative(-7.1f, -23.2f) + curveToRelative(-1.2f, -3.9f, 0.1f, -6.7f, 3.2f, -7.6f) + curveToRelative(3.8f, -1.1f, 6.6f, 0.5f, 7.8f, 4.5f) + curveToRelative(2f, 6.7f, 4f, 13.3f, 6.5f, 20f) + lineToRelative(2.7f, -9.3f) + curveToRelative(1f, -3.2f, 2.2f, -6.3f, 2.8f, -9.6f) + curveToRelative(1f, -5.6f, 5.9f, -8.5f, 11.2f, -4.4f) + curveToRelative(0.2f, 2.2f, 0.2f, 4.4f, 0.2f, 6.8f) + close() + } + path( + fill = SolidColor(Color(0xFF1C1C1C)), + pathFillType = PathFillType.EvenOdd, + ) { + moveTo(247f, 65.3f) + arcToRelative(27.4f, 27.4f, 0f, isMoreThanHalf = false, isPositiveArc = true, -17f, 0.1f) + curveToRelative(-5.5f, -1.7f, -8.4f, -5.8f, -9.5f, -11f) + arcToRelative(29.1f, 29.1f, 0f, isMoreThanHalf = false, isPositiveArc = true, 2.9f, -22.3f) + curveToRelative(4.4f, -6.9f, 15.8f, -8.2f, 21f, -3.6f) + curveToRelative(0.5f, 0.5f, 1.1f, 0.7f, 1.9f, 1.3f) + lineToRelative(0.2f, -2.5f) + verticalLineTo(13.5f) + curveToRelative(0.1f, -3.7f, 2.3f, -5.9f, 5.7f, -5.9f) + curveToRelative(3.2f, 0.1f, 5.5f, 2.6f, 5.5f, 6f) + curveToRelative(0.1f, 12.3f, 0.2f, 24.5f, 0f, 36.8f) + curveToRelative(-0.1f, 7.2f, -3.3f, 12.5f, -10.7f, 14.9f) + close() + moveToRelative(-13.2f, -28.4f) + curveToRelative(-4.1f, 5f, -4f, 10.5f, -1.6f, 16.2f) + curveToRelative(1.5f, 3.5f, 3.7f, 4.5f, 7.8f, 4.1f) + arcToRelative(6.4f, 6.4f, 0f, isMoreThanHalf = false, isPositiveArc = false, 5.8f, -5.3f) + curveToRelative(0.5f, -2.9f, 0.9f, -5.9f, 0.5f, -8.8f) + curveToRelative(-0.8f, -7.1f, -6.5f, -10f, -12.5f, -6.2f) + close() + moveTo(121.1f, 68f) + verticalLineToRelative(11.5f) + curveToRelative(-0.1f, 3.6f, -2.4f, 5.6f, -5.9f, 5.4f) + curveToRelative(-2.6f, -0.2f, -4.4f, -1.8f, -4.4f, -4.3f) + curveToRelative(0f, -13.1f, -0.2f, -26.2f, 0.1f, -39.3f) + curveToRelative(0.2f, -8.1f, 8.3f, -15.3f, 16.7f, -15.4f) + curveToRelative(3.3f, 0f, 6.8f, 0.3f, 9.9f, 1.3f) + curveToRelative(6.2f, 1.9f, 9f, 6.9f, 10.2f, 12.9f) + curveToRelative(1f, 5.4f, 0.6f, 10.7f, -0.9f, 15.9f) + curveToRelative(-3.4f, 11.9f, -16.8f, 13f, -23.8f, 7.4f) + lineToRelative(-1.9f, -1.3f) + verticalLineTo(68f) + close() + moveToRelative(0.1f, -19.6f) + lineToRelative(0.5f, 2.5f) + arcToRelative(8f, 8f, 0f, isMoreThanHalf = false, isPositiveArc = false, 7.1f, 6.1f) + curveToRelative(2.7f, 0.4f, 5.9f, -1.5f, 7.3f, -4.4f) + curveToRelative(2.3f, -4.5f, 1.8f, -9.1f, 0f, -13.6f) + arcToRelative(7.3f, 7.3f, 0f, isMoreThanHalf = false, isPositiveArc = false, -6.9f, -4.6f) + curveToRelative(-3.5f, 0.2f, -6.3f, 2.1f, -7.1f, 5.5f) + curveToRelative(-0.7f, 2.6f, -0.7f, 5.3f, -0.9f, 8.5f) + close() + moveTo(162f, 27.7f) + curveToRelative(7f, -4.1f, 19.7f, -2.9f, 25f, 3.6f) + arcToRelative(20f, 20f, 0f, isMoreThanHalf = false, isPositiveArc = true, 4.5f, 12.1f) + curveToRelative(0.2f, 5.5f, 0.1f, 11f, 0f, 16.6f) + curveToRelative(0f, 2.1f, -0.4f, 4f, -2.4f, 5.2f) + curveToRelative(-3.4f, 2.1f, -6.5f, 0.7f, -8.1f, -3.7f) + curveToRelative(-1.9f, 1.2f, -3.7f, 2.7f, -5.7f, 3.5f) + curveToRelative(-7.4f, 3f, -17.5f, 0.1f, -20f, -9.4f) + curveToRelative(-2.1f, -8.2f, -2.7f, -16.4f, 2.3f, -23.8f) + curveToRelative(1.1f, -1.6f, 2.8f, -2.7f, 4.4f, -4.1f) + close() + moveToRelative(18.3f, 13f) + curveToRelative(-1f, -4.3f, -3.7f, -6.9f, -7.2f, -6.8f) + curveToRelative(-3.5f, 0.2f, -6.5f, 1.3f, -7.9f, 6.4f) + curveToRelative(-0.9f, 3.3f, -1.1f, 6.5f, -0.2f, 9.9f) + curveToRelative(1.1f, 4f, 3.7f, 6.1f, 7.7f, 6.1f) + curveToRelative(3.8f, 0f, 6.8f, -2.2f, 7.5f, -6.2f) + curveToRelative(0.5f, -3f, 0.2f, -6f, 0.1f, -9.4f) + close() + } + path(fill = SolidColor(Color(0xFF1C1C1C))) { + moveTo(199.5f, 41.8f) + verticalLineToRelative(-9.4f) + curveToRelative(0.1f, -3.5f, 2.4f, -5.7f, 6.1f, -5.6f) + curveToRelative(3.6f, 0.1f, 5.7f, 2f, 5.7f, 5.6f) + verticalLineTo(60f) + curveToRelative(0f, 3.7f, -2.3f, 6.1f, -5.7f, 6.1f) + curveToRelative(-3.5f, 0f, -6f, -2.5f, -6.1f, -6.1f) + verticalLineTo(41.8f) + close() + moveToRelative(2.3f, -31.6f) + curveToRelative(3.1f, -1.9f, 6.2f, -1.5f, 8.4f, 0.8f) + curveToRelative(1.9f, 2f, 2f, 4.9f, 0.4f, 7.3f) + curveToRelative(-2f, 2.8f, -6.5f, 3.3f, -9.2f, 1.1f) + curveToRelative(-2.1f, -1.7f, -3f, -6.7f, 0.4f, -9.2f) + close() + } + }.build() + + return _KomojuIcPaidy!! + } + +@Suppress("ObjectPropertyName") +private var _KomojuIcPaidy: ImageVector? = null diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcPayEasy.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcPayEasy.kt new file mode 100644 index 0000000..40f0189 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcPayEasy.kt @@ -0,0 +1,218 @@ +package com.komoju.mobile.sdk.ui.icon + +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.graphics.Brush +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.unit.dp +import kotlin.Suppress + +val KomojuIcon.PayEasy: ImageVector + get() { + if (_KomojuIcPayEasy != null) { + return _KomojuIcPayEasy!! + } + _KomojuIcPayEasy = ImageVector.Builder( + name = "KomojuIcPayEasy", + defaultWidth = 46.dp, + defaultHeight = 42.dp, + viewportWidth = 23f, + viewportHeight = 21f, + ).apply { + path( + fill = Brush.linearGradient( + colorStops = arrayOf( + 0f to Color(0xFF1965AC), + 0.46f to Color(0xFF166CB2), + 0.6f to Color(0xFF0E7CC1), + 0.84f to Color(0xFF0492D5), + 1f to Color(0xFF009ADC), + ), + start = Offset(12.46f, 17.08f), + end = Offset(4.36f, 1.84f), + ), + ) { + moveTo(6.05f, 20.49f) + lineTo(4.22f, 19.22f) + curveTo(2.712f, 16.622f, 2.045f, 13.622f, 2.31f, 10.63f) + curveTo(2.71f, 4.83f, 4f, 2f, 4f, 2f) + lineTo(5.07f, 1.88f) + curveTo(5.784f, 1.353f, 6.597f, 0.975f, 7.46f, 0.77f) + curveTo(8.46f, 0.69f, 11.36f, 0.77f, 11.36f, 0.77f) + curveTo(12.028f, 0.95f, 12.653f, 1.261f, 13.199f, 1.685f) + curveTo(13.745f, 2.109f, 14.201f, 2.638f, 14.54f, 3.24f) + curveTo(15.333f, 4.84f, 15.613f, 6.645f, 15.34f, 8.41f) + curveTo(15.09f, 9.597f, 14.574f, 10.712f, 13.83f, 11.67f) + curveTo(12.83f, 12.67f, 11.44f, 14.06f, 10.01f, 14.06f) + curveTo(9.228f, 14.077f, 8.448f, 13.969f, 7.7f, 13.74f) + curveTo(7.483f, 16.059f, 6.927f, 18.333f, 6.05f, 20.49f) + close() + } + path(fill = SolidColor(Color(0xFF009ADC))) { + moveTo(4f, 2f) + lineTo(6f, 2.16f) + curveTo(6f, 2.16f, 3.81f, 7.49f, 4f, 10.91f) + curveTo(4.19f, 14.33f, 3.92f, 15.04f, 4.65f, 17.35f) + curveTo(4.935f, 18.453f, 5.402f, 19.5f, 6.03f, 20.45f) + lineTo(4.16f, 19.18f) + curveTo(3.379f, 17.795f, 2.828f, 16.292f, 2.53f, 14.73f) + curveTo(2.37f, 12.9f, 1.97f, 12.9f, 2.2f, 10.2f) + curveTo(2.438f, 8.221f, 2.792f, 6.258f, 3.26f, 4.32f) + curveTo(3.425f, 3.523f, 3.673f, 2.746f, 4f, 2f) + close() + } + path( + fill = Brush.linearGradient( + colorStops = arrayOf( + 0f to Color(0xFF009ADC), + 0.52f to Color(0xFFD4EDFF), + 1f to Color(0xFF1965AC), + ), + start = Offset(11.63f, 11.43f), + end = Offset(11.63f, 2.84f), + ), + ) { + moveTo(14.64f, 7.69f) + curveTo(14.56f, 5.62f, 15.04f, 3.32f, 11.06f, 2.84f) + curveTo(10.847f, 2.873f, 10.64f, 2.931f, 10.44f, 3.01f) + curveTo(10.938f, 3.383f, 11.339f, 3.87f, 11.61f, 4.43f) + curveTo(11.941f, 5.208f, 12.052f, 6.063f, 11.93f, 6.9f) + curveTo(11.794f, 7.786f, 11.409f, 8.615f, 10.82f, 9.29f) + curveTo(10.18f, 9.77f, 10.1f, 9.93f, 9.82f, 10.01f) + curveTo(9.549f, 10.163f, 9.255f, 10.271f, 8.95f, 10.33f) + horizontalLineTo(8.58f) + curveTo(8.889f, 10.672f, 9.265f, 10.948f, 9.684f, 11.139f) + curveTo(10.104f, 11.33f, 10.559f, 11.432f, 11.02f, 11.44f) + curveTo(11.317f, 11.44f, 11.612f, 11.386f, 11.89f, 11.28f) + curveTo(12.25f, 11.11f, 14.72f, 9.76f, 14.64f, 7.69f) + close() + } + path(fill = SolidColor(Color(0xFFFFFFFF))) { + moveTo(9.87f, 10f) + curveTo(10.11f, 9.92f, 10.19f, 9.76f, 10.87f, 9.28f) + curveTo(11.459f, 8.605f, 11.844f, 7.776f, 11.98f, 6.89f) + curveTo(12.102f, 6.053f, 11.991f, 5.198f, 11.66f, 4.42f) + curveTo(11.375f, 3.855f, 10.956f, 3.367f, 10.44f, 3f) + curveTo(9.53f, 3.36f, 7.91f, 4.4f, 7.8f, 7.36f) + curveTo(7.689f, 8.409f, 7.982f, 9.46f, 8.62f, 10.3f) + horizontalLineTo(9f) + curveTo(9.304f, 10.248f, 9.598f, 10.146f, 9.87f, 10f) + close() + } + path( + fill = Brush.radialGradient( + colorStops = arrayOf( + 0f to Color(0xFFC3E400), + 0.3f to Color(0xFFC1E300), + 0.41f to Color(0xFFBAE101), + 0.49f to Color(0xFFAFDE03), + 0.55f to Color(0xFF9ED806), + 0.61f to Color(0xFF88D109), + 0.63f to Color(0xFF7ACD0B), + 0.65f to Color(0xFF70CA11), + 0.77f to Color(0xFF40B931), + 0.87f to Color(0xFF1DAD49), + 0.95f to Color(0xFF08A657), + 1f to Color(0xFF00A35C), + ), + center = Offset(20.01f, 6.7f), + radius = 2.5f, + ), + ) { + moveTo(20.01f, 9.2f) + curveTo(21.391f, 9.2f, 22.51f, 8.081f, 22.51f, 6.7f) + curveTo(22.51f, 5.319f, 21.391f, 4.2f, 20.01f, 4.2f) + curveTo(18.629f, 4.2f, 17.51f, 5.319f, 17.51f, 6.7f) + curveTo(17.51f, 8.081f, 18.629f, 9.2f, 20.01f, 9.2f) + close() + } + path( + fill = Brush.radialGradient( + colorStops = arrayOf( + 0f to Color(0xFFC3E400), + 0.3f to Color(0xFFC1E300), + 0.41f to Color(0xFFBAE101), + 0.49f to Color(0xFFAFDE03), + 0.55f to Color(0xFF9ED806), + 0.61f to Color(0xFF88D109), + 0.63f to Color(0xFF7ACD0B), + 0.65f to Color(0xFF70CA11), + 0.77f to Color(0xFF40B931), + 0.87f to Color(0xFF1DAD49), + 0.95f to Color(0xFF08A657), + 1f to Color(0xFF00A35C), + ), + center = Offset(14.48f, 6.74f), + radius = 1.99f, + ), + ) { + moveTo(14.48f, 8.73f) + curveTo(15.579f, 8.73f, 16.47f, 7.839f, 16.47f, 6.74f) + curveTo(16.47f, 5.641f, 15.579f, 4.75f, 14.48f, 4.75f) + curveTo(13.381f, 4.75f, 12.49f, 5.641f, 12.49f, 6.74f) + curveTo(12.49f, 7.839f, 13.381f, 8.73f, 14.48f, 8.73f) + close() + } + path( + fill = Brush.radialGradient( + colorStops = arrayOf( + 0f to Color(0xFFC3E400), + 0.3f to Color(0xFFC1E300), + 0.41f to Color(0xFFBAE101), + 0.49f to Color(0xFFAFDE03), + 0.55f to Color(0xFF9ED806), + 0.61f to Color(0xFF88D109), + 0.63f to Color(0xFF7ACD0B), + 0.65f to Color(0xFF70CA11), + 0.77f to Color(0xFF40B931), + 0.87f to Color(0xFF1DAD49), + 0.95f to Color(0xFF08A657), + 1f to Color(0xFF00A35C), + ), + center = Offset(9.67f, 6.7f), + radius = 1.55f, + ), + ) { + moveTo(9.67f, 8.25f) + curveTo(10.526f, 8.25f, 11.22f, 7.556f, 11.22f, 6.7f) + curveTo(11.22f, 5.844f, 10.526f, 5.15f, 9.67f, 5.15f) + curveTo(8.814f, 5.15f, 8.12f, 5.844f, 8.12f, 6.7f) + curveTo(8.12f, 7.556f, 8.814f, 8.25f, 9.67f, 8.25f) + close() + } + path( + fill = Brush.radialGradient( + colorStops = arrayOf( + 0f to Color(0xFFC3E400), + 0.3f to Color(0xFFC1E300), + 0.41f to Color(0xFFBAE101), + 0.49f to Color(0xFFAFDE03), + 0.55f to Color(0xFF9ED806), + 0.61f to Color(0xFF88D109), + 0.63f to Color(0xFF7ACD0B), + 0.65f to Color(0xFF70CA11), + 0.77f to Color(0xFF40B931), + 0.87f to Color(0xFF1DAD49), + 0.95f to Color(0xFF08A657), + 1f to Color(0xFF00A35C), + ), + center = Offset(1.32f, 6.7f), + radius = 0.83f, + ), + ) { + moveTo(1.32f, 7.53f) + curveTo(1.778f, 7.53f, 2.15f, 7.158f, 2.15f, 6.7f) + curveTo(2.15f, 6.242f, 1.778f, 5.87f, 1.32f, 5.87f) + curveTo(0.862f, 5.87f, 0.49f, 6.242f, 0.49f, 6.7f) + curveTo(0.49f, 7.158f, 0.862f, 7.53f, 1.32f, 7.53f) + close() + } + }.build() + + return _KomojuIcPayEasy!! + } + +@Suppress("ObjectPropertyName") +private var _KomojuIcPayEasy: ImageVector? = null diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcPaymentStatusCompleted.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcPaymentStatusCompleted.kt new file mode 100644 index 0000000..2d84aa0 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcPaymentStatusCompleted.kt @@ -0,0 +1,48 @@ +package com.komoju.mobile.sdk.ui.icon + +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.unit.dp +import kotlin.Suppress + +val KomojuIcon.PaymentStatusCompleted: ImageVector + get() { + if (_KomojuIcPaymentStatusCompleted != null) { + return _KomojuIcPaymentStatusCompleted!! + } + _KomojuIcPaymentStatusCompleted = ImageVector.Builder( + name = "KomojuIcPaymentStatusCompleted", + defaultWidth = 49.dp, + defaultHeight = 49.dp, + viewportWidth = 49f, + viewportHeight = 49f, + ).apply { + path(fill = SolidColor(Color(0xFF3CC239))) { + moveTo(24.5f, 1.5f) + curveTo(11.8f, 1.5f, 1.5f, 11.8f, 1.5f, 24.5f) + curveTo(1.5f, 37.2f, 11.8f, 47.5f, 24.5f, 47.5f) + curveTo(37.2f, 47.5f, 47.5f, 37.2f, 47.5f, 24.5f) + curveTo(47.5f, 11.8f, 37.2f, 1.5f, 24.5f, 1.5f) + close() + moveTo(37.2f, 17.2f) + lineTo(21.2f, 33.2f) + curveTo(21f, 33.4f, 20.8f, 33.5f, 20.5f, 33.5f) + curveTo(20.2f, 33.5f, 20f, 33.4f, 19.8f, 33.2f) + lineTo(11.8f, 25.2f) + curveTo(11.4f, 24.8f, 11.4f, 24.2f, 11.8f, 23.8f) + curveTo(12.2f, 23.4f, 12.8f, 23.4f, 13.2f, 23.8f) + lineTo(20.5f, 31.1f) + lineTo(35.8f, 15.8f) + curveTo(36.2f, 15.4f, 36.8f, 15.4f, 37.2f, 15.8f) + curveTo(37.6f, 16.2f, 37.6f, 16.8f, 37.2f, 17.2f) + close() + } + }.build() + + return _KomojuIcPaymentStatusCompleted!! + } + +@Suppress("ObjectPropertyName") +private var _KomojuIcPaymentStatusCompleted: ImageVector? = null diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcPaymentStatusFailed.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcPaymentStatusFailed.kt new file mode 100644 index 0000000..f960b74 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcPaymentStatusFailed.kt @@ -0,0 +1,64 @@ +package com.komoju.mobile.sdk.ui.icon + +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.unit.dp +import kotlin.Suppress + +val KomojuIcon.PaymentStatusFailed: ImageVector + get() { + if (_KomojuIcPaymentStatusFailed != null) { + return _KomojuIcPaymentStatusFailed!! + } + _KomojuIcPaymentStatusFailed = ImageVector.Builder( + name = "KomojuIcPaymentStatusFailed", + defaultWidth = 49.dp, + defaultHeight = 49.dp, + viewportWidth = 49f, + viewportHeight = 49f, + ).apply { + path(fill = SolidColor(Color(0xFFF24D49))) { + moveTo(46.207f, 15.1f) + lineTo(33.907f, 2.8f) + curveTo(33.721f, 2.61f, 33.466f, 2.502f, 33.2f, 2.5f) + horizontalLineTo(15.8f) + curveTo(15.535f, 2.5f, 15.28f, 2.605f, 15.093f, 2.793f) + lineTo(2.793f, 15.1f) + curveTo(2.607f, 15.286f, 2.502f, 15.537f, 2.5f, 15.8f) + verticalLineTo(33.2f) + curveTo(2.5f, 33.465f, 2.605f, 33.72f, 2.793f, 33.907f) + lineTo(15.093f, 46.207f) + curveTo(15.28f, 46.395f, 15.535f, 46.5f, 15.8f, 46.5f) + horizontalLineTo(33.2f) + curveTo(33.465f, 46.5f, 33.72f, 46.395f, 33.907f, 46.207f) + lineTo(46.207f, 33.907f) + curveTo(46.395f, 33.72f, 46.5f, 33.465f, 46.5f, 33.2f) + verticalLineTo(15.8f) + curveTo(46.498f, 15.537f, 46.393f, 15.286f, 46.207f, 15.1f) + close() + moveTo(24.5f, 38.5f) + curveTo(23.395f, 38.5f, 22.5f, 37.605f, 22.5f, 36.5f) + curveTo(22.5f, 35.395f, 23.395f, 34.5f, 24.5f, 34.5f) + curveTo(25.605f, 34.5f, 26.5f, 35.395f, 26.5f, 36.5f) + curveTo(26.5f, 37.605f, 25.605f, 38.5f, 24.5f, 38.5f) + close() + moveTo(25.025f, 30.5f) + horizontalLineTo(23.976f) + curveTo(23.433f, 30.5f, 22.99f, 30.067f, 22.976f, 29.525f) + lineTo(22.526f, 11.525f) + curveTo(22.512f, 10.963f, 22.964f, 10.5f, 23.526f, 10.5f) + horizontalLineTo(25.475f) + curveTo(26.037f, 10.5f, 26.489f, 10.963f, 26.475f, 11.525f) + lineTo(26.025f, 29.525f) + curveTo(26.011f, 30.067f, 25.568f, 30.5f, 25.025f, 30.5f) + close() + } + }.build() + + return _KomojuIcPaymentStatusFailed!! + } + +@Suppress("ObjectPropertyName") +private var _KomojuIcPaymentStatusFailed: ImageVector? = null diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcPaymentStatusKonbiniPending.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcPaymentStatusKonbiniPending.kt new file mode 100644 index 0000000..cbb8dc8 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcPaymentStatusKonbiniPending.kt @@ -0,0 +1,80 @@ +package com.komoju.mobile.sdk.ui.icon + +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.group +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.unit.dp + +val KomojuIcon.PaymentStatusKonbiniPending: ImageVector + get() { + if (_KomojuIcPaymentStatusKonbiniPending != null) { + return _KomojuIcPaymentStatusKonbiniPending!! + } + _KomojuIcPaymentStatusKonbiniPending = ImageVector.Builder( + name = "KomojuIcPaymentStatusKonbiniPending", + defaultWidth = 49.dp, + defaultHeight = 49.dp, + viewportWidth = 49f, + viewportHeight = 49f, + ).apply { + group { + path(fill = SolidColor(Color(0xFF0F1C29))) { + moveTo(46.7f, 13.1f) + lineTo(37.7f, 1.1f) + curveTo(37.4f, 0.65f, 36.95f, 0.5f, 36.5f, 0.5f) + horizontalLineTo(12.5f) + curveTo(12.05f, 0.5f, 11.6f, 0.65f, 11.3f, 1.1f) + lineTo(2.3f, 13.1f) + curveTo(2.15f, 13.4f, 2f, 13.7f, 2f, 14f) + curveTo(2f, 19.25f, 5.45f, 21.5f, 8.75f, 21.5f) + curveTo(11f, 21.5f, 12.8f, 20.75f, 14f, 19.4f) + curveTo(15.2f, 20.75f, 17.15f, 21.5f, 19.4f, 21.5f) + curveTo(21.5f, 21.5f, 23.3f, 20.75f, 24.5f, 19.55f) + curveTo(25.7f, 20.75f, 27.5f, 21.5f, 29.6f, 21.5f) + curveTo(31.85f, 21.5f, 33.8f, 20.75f, 35f, 19.4f) + curveTo(36.2f, 20.75f, 38f, 21.5f, 40.25f, 21.5f) + curveTo(43.55f, 21.5f, 47f, 19.25f, 47f, 14f) + curveTo(47f, 13.7f, 46.85f, 13.4f, 46.7f, 13.1f) + close() + } + path(fill = SolidColor(Color(0xFFFF993B))) { + moveTo(39.5f, 24.5f) + curveTo(35.15f, 24.5f, 30.5f, 27.8f, 30.5f, 33.5f) + curveTo(30.5f, 38.6f, 37.7f, 45.95f, 38.45f, 46.7f) + curveTo(38.75f, 47f, 39.2f, 47.15f, 39.5f, 47.15f) + curveTo(39.8f, 47.15f, 40.25f, 47f, 40.55f, 46.7f) + curveTo(41.3f, 45.95f, 48.5f, 38.6f, 48.5f, 33.5f) + curveTo(48.5f, 27.8f, 43.85f, 24.5f, 39.5f, 24.5f) + close() + moveTo(39.5f, 36.5f) + curveTo(37.85f, 36.5f, 36.5f, 35.15f, 36.5f, 33.5f) + curveTo(36.5f, 31.85f, 37.85f, 30.5f, 39.5f, 30.5f) + curveTo(41.15f, 30.5f, 42.5f, 31.85f, 42.5f, 33.5f) + curveTo(42.5f, 35.15f, 41.15f, 36.5f, 39.5f, 36.5f) + close() + } + path(fill = SolidColor(Color(0xFF0F1C29))) { + moveTo(27.5f, 33.5f) + curveTo(27.5f, 29.45f, 29.3f, 26.3f, 31.7f, 24.35f) + curveTo(30.95f, 24.5f, 30.35f, 24.5f, 29.6f, 24.5f) + curveTo(27.65f, 24.5f, 26f, 24.05f, 24.5f, 23.3f) + curveTo(23f, 24.05f, 21.35f, 24.5f, 19.4f, 24.5f) + curveTo(17.45f, 24.5f, 15.65f, 24.05f, 14f, 23.15f) + curveTo(12.5f, 24.05f, 10.7f, 24.5f, 8.75f, 24.5f) + curveTo(8f, 24.5f, 7.25f, 24.35f, 6.5f, 24.2f) + verticalLineTo(44f) + curveTo(6.5f, 44.9f, 7.1f, 45.5f, 8f, 45.5f) + horizontalLineTo(33.35f) + curveTo(30.65f, 42.35f, 27.5f, 37.55f, 27.5f, 33.5f) + close() + } + } + }.build() + + return _KomojuIcPaymentStatusKonbiniPending!! + } + +@Suppress("ObjectPropertyName") +private var _KomojuIcPaymentStatusKonbiniPending: ImageVector? = null diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcPaymentStatusPrenidng.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcPaymentStatusPrenidng.kt new file mode 100644 index 0000000..3324e48 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcPaymentStatusPrenidng.kt @@ -0,0 +1,48 @@ +package com.komoju.mobile.sdk.ui.icon + +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.unit.dp + +val KomojuIcon.PaymentStatusPending: ImageVector + get() { + if (_KomojuIcPaymentStatusPending != null) { + return _KomojuIcPaymentStatusPending!! + } + _KomojuIcPaymentStatusPending = ImageVector.Builder( + name = "KomojuIcPaymentStatusPending", + defaultWidth = 49.dp, + defaultHeight = 49.dp, + viewportWidth = 24f, + viewportHeight = 24f, + ).apply { + path(fill = SolidColor(Color(0xFF000000))) { + moveTo(16.24f, 7.76f) + curveTo(15.07f, 6.59f, 13.54f, 6f, 12f, 6f) + verticalLineToRelative(6f) + lineToRelative(-4.24f, 4.24f) + curveToRelative(2.34f, 2.34f, 6.14f, 2.34f, 8.49f, 0f) + curveToRelative(2.34f, -2.34f, 2.34f, -6.14f, -0.01f, -8.48f) + close() + moveTo(12f, 2f) + curveTo(6.48f, 2f, 2f, 6.48f, 2f, 12f) + reflectiveCurveToRelative(4.48f, 10f, 10f, 10f) + reflectiveCurveToRelative(10f, -4.48f, 10f, -10f) + reflectiveCurveTo(17.52f, 2f, 12f, 2f) + close() + moveTo(12f, 20f) + curveToRelative(-4.42f, 0f, -8f, -3.58f, -8f, -8f) + reflectiveCurveToRelative(3.58f, -8f, 8f, -8f) + reflectiveCurveToRelative(8f, 3.58f, 8f, 8f) + reflectiveCurveToRelative(-3.58f, 8f, -8f, 8f) + close() + } + }.build() + + return _KomojuIcPaymentStatusPending!! + } + +@Suppress("ObjectPropertyName") +private var _KomojuIcPaymentStatusPending: ImageVector? = null diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcPaypay.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcPaypay.kt new file mode 100644 index 0000000..faf296b --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcPaypay.kt @@ -0,0 +1,53 @@ +package com.komoju.mobile.sdk.ui.icon + +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.unit.dp +import kotlin.Suppress + +val KomojuIcon.Paypay: ImageVector + get() { + if (_KomojuIcPaypay != null) { + return _KomojuIcPaypay!! + } + _KomojuIcPaypay = ImageVector.Builder( + name = "KomojuIcPaypay", + defaultWidth = 35.dp, + defaultHeight = 33.dp, + viewportWidth = 35f, + viewportHeight = 33f, + ).apply { + path(fill = SolidColor(Color(0xFFFF0033))) { + moveTo(8.507f, 31.451f) + horizontalLineTo(7.104f) + curveToRelative(-2.441f, 0f, -4.437f, -1.99f, -4.437f, -4.423f) + verticalLineTo(10.902f) + curveToRelative(3.981f, -0.401f, 7.693f, -0.39f, 10.949f, -0.079f) + lineTo(8.507f, 31.451f) + close() + moveToRelative(18.044f, -13.94f) + curveToRelative(0.705f, -2.856f, -3.918f, -5.5f, -11.315f, -6.498f) + lineTo(12.552f, 22.15f) + curveToRelative(6.2f, 0.296f, 13.242f, -1.567f, 13.999f, -4.639f) + close() + moveTo(28.23f, 1.544f) + horizontalLineTo(7.104f) + curveToRelative(-2.362f, 0f, -4.3f, 1.863f, -4.427f, 4.186f) + curveToRelative(17.69f, -0.496f, 26.294f, 5.637f, 24.944f, 11.754f) + curveToRelative(-1.218f, 5.506f, -6.83f, 7.617f, -15.948f, 8.314f) + lineToRelative(-1.366f, 5.658f) + horizontalLineTo(28.23f) + curveToRelative(2.441f, 0f, 4.437f, -1.99f, 4.437f, -4.423f) + verticalLineTo(5.967f) + curveToRelative(0f, -2.433f, -1.996f, -4.423f, -4.437f, -4.423f) + close() + } + }.build() + + return _KomojuIcPaypay!! + } + +@Suppress("ObjectPropertyName") +private var _KomojuIcPaypay: ImageVector? = null diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcRakutenPay.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcRakutenPay.kt new file mode 100644 index 0000000..3e8f5cc --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcRakutenPay.kt @@ -0,0 +1,100 @@ +package com.komoju.mobile.sdk.ui.icon + +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.PathFillType +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.unit.dp +import kotlin.Suppress + +val KomojuIcon.RakutenPay: ImageVector + get() { + if (_KomojuIcRakutenPay != null) { + return _KomojuIcRakutenPay!! + } + _KomojuIcRakutenPay = ImageVector.Builder( + name = "KomojuIcRakutenPay", + defaultWidth = 77.dp, + defaultHeight = 29.dp, + viewportWidth = 572f, + viewportHeight = 215f, + ).apply { + path( + fill = SolidColor(Color(0xFFBF0000)), + pathFillType = PathFillType.EvenOdd, + ) { + moveTo(571.6f, 41.5f) + lineToRelative(-47f, 142.5f) + curveToRelative(-5f, 15.2f, -16f, 23.7f, -30.2f, 23.7f) + curveToRelative(-8.9f, 0f, -17.1f, -3.3f, -23.3f, -9.4f) + lineToRelative(8.7f, -13.5f) + curveToRelative(4.2f, 3.7f, 8.1f, 5.4f, 13.3f, 5.4f) + curveToRelative(7.3f, 0f, 10.8f, -3.1f, 14.4f, -12.9f) + lineToRelative(2.9f, -7.9f) + lineToRelative(-45.4f, -128f) + horizontalLineToRelative(19.4f) + lineToRelative(34.8f, 101.8f) + lineToRelative(32.9f, -101.8f) + horizontalLineToRelative(19.5f) + close() + moveTo(428.4f, 158.2f) + curveToRelative(-10.2f, 12.1f, -21.8f, 17.7f, -37f, 17.7f) + curveToRelative(-34.3f, 0f, -57.8f, -28.1f, -57.8f, -68.9f) + curveToRelative(0f, -40.8f, 23.7f, -68.7f, 58.3f, -68.7f) + curveToRelative(15.6f, 0f, 26.4f, 4.6f, 36.8f, 15.4f) + lineToRelative(2.7f, -12.3f) + horizontalLineToRelative(16.7f) + verticalLineToRelative(131.1f) + horizontalLineToRelative(-16.7f) + close() + moveTo(353.5f, 107f) + curveToRelative(0f, 29.8f, 16.2f, 51.4f, 38.3f, 51.4f) + curveToRelative(22.1f, 0f, 38.1f, -21.4f, 38.1f, -51.2f) + curveToRelative(0f, -30f, -16f, -51.4f, -38.3f, -51.4f) + curveToRelative(-21.9f, 0f, -38.1f, 21.9f, -38.1f, 51.2f) + close() + moveTo(275.6f, 8.8f) + curveToRelative(29.3f, 0f, 50.2f, 20.2f, 50.2f, 49.1f) + curveToRelative(0f, 28.9f, -20.8f, 49.3f, -50.2f, 49.3f) + horizontalLineTo(240f) + verticalLineToRelative(65.3f) + horizontalLineToRelative(-18.7f) + verticalLineTo(8.8f) + close() + moveToRelative(-1.2f, 81f) + curveToRelative(18.3f, 0f, 31.4f, -13.3f, 31.4f, -31.8f) + reflectiveCurveToRelative(-12.9f, -31.6f, -31.4f, -31.6f) + horizontalLineToRelative(-34.3f) + verticalLineToRelative(63.5f) + horizontalLineToRelative(34.3f) + close() + moveToRelative(-245.3f, 125f) + lineTo(0.4f, 190.7f) + horizontalLineTo(202f) + close() + moveToRelative(32.8f, -42.1f) + horizontalLineTo(29.1f) + verticalLineTo(0.3f) + horizontalLineToRelative(54f) + curveToRelative(32.8f, 0f, 59.5f, 26.6f, 59.5f, 59.4f) + curveToRelative(0f, 19.9f, -9.9f, 37.6f, -25f, 48.4f) + lineToRelative(48.5f, 64.5f) + horizontalLineToRelative(-41f) + lineTo(85f, 119.1f) + horizontalLineTo(61.9f) + close() + moveToRelative(0f, -86.4f) + horizontalLineToRelative(21.4f) + curveTo(98f, 86.3f, 110f, 74.4f, 110f, 59.6f) + curveToRelative(0f, -14.7f, -12f, -26.7f, -26.7f, -26.7f) + horizontalLineTo(61.9f) + close() + } + }.build() + + return _KomojuIcRakutenPay!! + } + +@Suppress("ObjectPropertyName") +private var _KomojuIcRakutenPay: ImageVector? = null diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcSeicoMart.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcSeicoMart.kt new file mode 100644 index 0000000..eb9ae1d --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcSeicoMart.kt @@ -0,0 +1,205 @@ +package com.komoju.mobile.sdk.ui.icon + +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.group +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.unit.dp + +val KomojuIcon.SeicoMart: ImageVector + get() { + if (_KomojuIcSeicoMart != null) { + return _KomojuIcSeicoMart!! + } + _KomojuIcSeicoMart = ImageVector.Builder( + name = "KomojuIcSeicoMart", + defaultWidth = 32.dp, + defaultHeight = 32.dp, + viewportWidth = 32f, + viewportHeight = 32f, + ).apply { + path(fill = SolidColor(Color(0xFFFFE9EA))) { + moveTo(5.333f, 0f) + lineTo(26.667f, 0f) + arcTo(5.333f, 5.333f, 0f, isMoreThanHalf = false, isPositiveArc = true, 32f, 5.333f) + lineTo(32f, 26.667f) + arcTo(5.333f, 5.333f, 0f, isMoreThanHalf = false, isPositiveArc = true, 26.667f, 32f) + lineTo(5.333f, 32f) + arcTo(5.333f, 5.333f, 0f, isMoreThanHalf = false, isPositiveArc = true, 0f, 26.667f) + lineTo(0f, 5.333f) + arcTo(5.333f, 5.333f, 0f, isMoreThanHalf = false, isPositiveArc = true, 5.333f, 0f) + close() + } + group { + path(fill = SolidColor(Color(0xFFF08300))) { + moveTo(8.941f, 16.772f) + curveTo(9.006f, 17.241f, 9.365f, 17.424f, 9.94f, 17.424f) + curveTo(10.259f, 17.424f, 10.55f, 17.353f, 10.937f, 17.169f) + lineTo(11.09f, 17.967f) + curveTo(10.679f, 18.133f, 10.168f, 18.206f, 9.731f, 18.206f) + curveTo(8.609f, 18.206f, 7.754f, 17.548f, 7.754f, 16.426f) + curveTo(7.754f, 15.303f, 8.517f, 14.651f, 9.574f, 14.651f) + curveTo(10.833f, 14.651f, 11.29f, 15.545f, 11.29f, 16.556f) + verticalLineTo(16.772f) + horizontalLineTo(8.941f) + moveTo(10.233f, 16.106f) + curveTo(10.233f, 15.715f, 10.05f, 15.395f, 9.58f, 15.395f) + curveTo(9.156f, 15.395f, 8.954f, 15.715f, 8.928f, 16.106f) + horizontalLineTo(10.233f) + close() + } + path(fill = SolidColor(Color(0xFFF08300))) { + moveTo(4.048f, 18.022f) + curveTo(4.483f, 18.151f, 4.944f, 18.207f, 5.565f, 18.207f) + curveTo(6.473f, 18.207f, 7.556f, 17.965f, 7.556f, 16.813f) + curveTo(7.556f, 15.857f, 6.786f, 15.677f, 6.106f, 15.518f) + curveTo(5.659f, 15.413f, 5.237f, 15.315f, 5.237f, 14.953f) + curveTo(5.237f, 14.76f, 5.381f, 14.531f, 6.066f, 14.531f) + curveTo(6.452f, 14.531f, 6.809f, 14.622f, 7.123f, 14.77f) + lineTo(7.278f, 13.936f) + curveTo(6.869f, 13.788f, 6.388f, 13.715f, 5.815f, 13.715f) + curveTo(4.915f, 13.715f, 4.006f, 14.132f, 4.006f, 15.066f) + curveTo(4.006f, 15.945f, 4.714f, 16.13f, 5.338f, 16.292f) + curveTo(5.793f, 16.41f, 6.221f, 16.522f, 6.221f, 16.917f) + curveTo(6.221f, 17.391f, 5.662f, 17.391f, 5.478f, 17.391f) + curveTo(4.964f, 17.391f, 4.501f, 17.265f, 4.205f, 17.161f) + lineTo(4.048f, 18.022f) + close() + } + path(fill = SolidColor(Color(0xFFF08300))) { + moveTo(13.689f, 17.346f) + curveTo(13.187f, 17.346f, 12.799f, 17.003f, 12.789f, 16.429f) + curveTo(12.799f, 15.856f, 13.187f, 15.513f, 13.689f, 15.513f) + curveTo(13.97f, 15.513f, 14.111f, 15.572f, 14.326f, 15.702f) + lineTo(14.485f, 14.84f) + curveTo(14.218f, 14.71f, 13.904f, 14.652f, 13.552f, 14.652f) + curveTo(12.432f, 14.652f, 11.579f, 15.302f, 11.575f, 16.426f) + verticalLineTo(16.433f) + curveTo(11.579f, 17.557f, 12.432f, 18.207f, 13.552f, 18.207f) + curveTo(13.904f, 18.207f, 14.218f, 18.149f, 14.485f, 18.018f) + lineTo(14.326f, 17.157f) + curveTo(14.111f, 17.287f, 13.97f, 17.346f, 13.689f, 17.346f) + close() + } + path(fill = SolidColor(Color(0xFFF08300))) { + moveTo(15.241f, 15.542f) + lineTo(15.192f, 15.594f) + lineTo(15.241f, 15.643f) + lineTo(15.293f, 15.594f) + lineTo(15.241f, 15.542f) + close() + } + path(fill = SolidColor(Color(0xFFF08300))) { + moveTo(17.019f, 17.424f) + lineTo(17.036f, 17.426f) + curveTo(17.148f, 17.454f, 17.254f, 17.474f, 17.349f, 17.474f) + curveTo(17.672f, 17.473f, 17.918f, 17.324f, 18.067f, 17.115f) + lineTo(18.086f, 17.109f) + lineTo(18.091f, 17.127f) + curveTo(17.984f, 17.402f, 17.787f, 17.651f, 17.714f, 17.707f) + curveTo(17.666f, 17.748f, 17.584f, 17.748f, 17.584f, 17.748f) + curveTo(17.316f, 17.748f, 17.144f, 17.638f, 17.004f, 17.489f) + lineTo(16.991f, 17.47f) + lineTo(16.989f, 17.445f) + lineTo(17.019f, 17.424f) + close() + } + path(fill = SolidColor(Color(0xFFF08300))) { + moveTo(17.054f, 16.963f) + curveTo(17.593f, 16.963f, 17.68f, 16.657f, 17.808f, 16.405f) + curveTo(17.808f, 16.405f, 17.946f, 16.11f, 18.177f, 16.05f) + lineTo(18.186f, 16.032f) + curveTo(18.107f, 15.668f, 17.922f, 15.346f, 17.664f, 15.096f) + lineTo(17.652f, 15.091f) + lineTo(17.641f, 15.099f) + curveTo(17.641f, 15.099f, 17.539f, 15.237f, 17.535f, 15.494f) + curveTo(17.532f, 15.681f, 17.589f, 15.846f, 17.588f, 16.032f) + curveTo(17.588f, 16.141f, 17.571f, 16.257f, 17.516f, 16.393f) + curveTo(17.436f, 16.591f, 17.299f, 16.717f, 17.178f, 16.786f) + curveTo(17.178f, 16.786f, 17.102f, 16.837f, 16.934f, 16.877f) + lineTo(16.907f, 16.923f) + lineTo(16.933f, 16.95f) + curveTo(16.933f, 16.95f, 16.969f, 16.963f, 17.054f, 16.963f) + close() + } + path(fill = SolidColor(Color(0xFFF08300))) { + moveTo(15.674f, 15.538f) + lineTo(15.681f, 15.54f) + lineTo(15.679f, 15.548f) + curveTo(15.315f, 15.989f, 15.499f, 16.445f, 15.807f, 16.57f) + curveTo(15.869f, 16.596f, 16.184f, 16.701f, 16.357f, 16.276f) + curveTo(16.452f, 16.042f, 16.429f, 15.828f, 16.529f, 15.582f) + curveTo(16.706f, 15.144f, 17.045f, 14.94f, 17.356f, 14.883f) + lineTo(17.366f, 14.875f) + lineTo(17.359f, 14.856f) + curveTo(17.073f, 14.676f, 16.734f, 14.571f, 16.37f, 14.571f) + curveTo(15.344f, 14.571f, 14.513f, 15.402f, 14.513f, 16.428f) + curveTo(14.513f, 17.454f, 15.344f, 18.286f, 16.37f, 18.286f) + curveTo(16.758f, 18.286f, 17.118f, 18.167f, 17.416f, 17.963f) + lineTo(17.42f, 17.955f) + lineTo(17.411f, 17.952f) + curveTo(17.411f, 17.952f, 16.719f, 18.142f, 16.011f, 17.886f) + curveTo(14.747f, 17.405f, 15.161f, 16.228f, 15.16f, 15.865f) + curveTo(15.159f, 15.744f, 15.111f, 15.681f, 15.069f, 15.638f) + curveTo(15.026f, 15.593f, 14.959f, 15.545f, 14.969f, 15.516f) + curveTo(14.981f, 15.485f, 15.097f, 15.479f, 15.205f, 15.492f) + curveTo(15.331f, 15.505f, 15.409f, 15.533f, 15.48f, 15.544f) + curveTo(15.547f, 15.554f, 15.636f, 15.543f, 15.674f, 15.538f) + close() + } + path(fill = SolidColor(Color(0xFFF08300))) { + moveTo(19.536f, 14.732f) + curveTo(19.238f, 14.72f, 18.467f, 14.769f, 18.467f, 15.62f) + curveTo(18.467f, 16.022f, 18.467f, 18.128f, 18.467f, 18.128f) + horizontalLineTo(19.641f) + verticalLineTo(16.693f) + curveTo(19.641f, 15.962f, 19.889f, 15.63f, 20.307f, 15.63f) + curveTo(20.639f, 15.63f, 20.776f, 15.916f, 20.776f, 16.301f) + verticalLineTo(18.128f) + horizontalLineTo(21.951f) + verticalLineTo(16.693f) + curveTo(21.951f, 15.962f, 22.198f, 15.63f, 22.615f, 15.63f) + curveTo(22.949f, 15.63f, 23.086f, 15.916f, 23.086f, 16.301f) + verticalLineTo(18.128f) + horizontalLineTo(24.26f) + verticalLineTo(16.126f) + curveTo(24.26f, 15.205f, 24.039f, 14.651f, 23.06f, 14.651f) + curveTo(22.577f, 14.651f, 22.126f, 14.847f, 21.853f, 15.303f) + curveTo(21.67f, 14.859f, 21.272f, 14.651f, 20.789f, 14.651f) + curveTo(20.254f, 14.651f, 19.785f, 14.866f, 19.55f, 15.355f) + horizontalLineTo(19.537f) + lineTo(19.536f, 14.732f) + close() + } + path(fill = SolidColor(Color(0xFFF08300))) { + moveTo(27.994f, 18.125f) + curveTo(27.941f, 17.858f, 27.927f, 17.594f, 27.927f, 17.327f) + verticalLineTo(16.061f) + curveTo(27.927f, 15.023f, 27.178f, 14.652f, 26.31f, 14.652f) + curveTo(25.808f, 14.652f, 25.39f, 14.723f, 24.972f, 14.893f) + verticalLineTo(15.689f) + curveTo(25.299f, 15.506f, 25.677f, 15.434f, 26.055f, 15.434f) + curveTo(26.479f, 15.434f, 26.825f, 15.558f, 26.832f, 16.021f) + curveTo(26.681f, 15.995f, 26.473f, 15.976f, 26.283f, 15.976f) + curveTo(25.657f, 15.976f, 24.528f, 16.1f, 24.528f, 17.137f) + curveTo(24.528f, 17.874f, 25.128f, 18.207f, 25.801f, 18.207f) + curveTo(26.283f, 18.207f, 26.609f, 18.018f, 26.877f, 17.594f) + horizontalLineTo(26.889f) + curveTo(27.113f, 18.245f, 27.971f, 18.128f, 27.994f, 18.125f) + close() + moveTo(26.108f, 17.424f) + curveTo(25.834f, 17.424f, 25.625f, 17.288f, 25.625f, 17.053f) + curveTo(25.625f, 16.726f, 25.937f, 16.603f, 26.336f, 16.603f) + curveTo(26.512f, 16.603f, 26.681f, 16.615f, 26.832f, 16.622f) + curveTo(26.832f, 17.02f, 26.551f, 17.424f, 26.108f, 17.424f) + close() + } + } + }.build() + + return _KomojuIcSeicoMart!! + } + +@Suppress("ObjectPropertyName") +private var _KomojuIcSeicoMart: ImageVector? = null diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcSevenEleven.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcSevenEleven.kt new file mode 100644 index 0000000..e3f0555 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcSevenEleven.kt @@ -0,0 +1,165 @@ +package com.komoju.mobile.sdk.ui.icon + +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.unit.dp +import kotlin.Suppress + +val KomojuIcon.SevenEleven: ImageVector + get() { + if (_KomojuIcSevenEleven != null) { + return _KomojuIcSevenEleven!! + } + _KomojuIcSevenEleven = ImageVector.Builder( + name = "KomojuIcSevenEleven", + defaultWidth = 32.dp, + defaultHeight = 32.dp, + viewportWidth = 32f, + viewportHeight = 32f, + ).apply { + path(fill = SolidColor(Color(0xFFDBF0EA))) { + moveTo(5.333f, 0f) + horizontalLineToRelative(21.334f) + arcTo(5.333f, 5.333f, 0f, isMoreThanHalf = false, isPositiveArc = true, 32f, 5.333f) + verticalLineToRelative(21.334f) + arcTo(5.333f, 5.333f, 0f, isMoreThanHalf = false, isPositiveArc = true, 26.667f, 32f) + horizontalLineTo(5.333f) + arcTo(5.333f, 5.333f, 0f, isMoreThanHalf = false, isPositiveArc = true, 0f, 26.667f) + verticalLineTo(5.333f) + arcTo(5.333f, 5.333f, 0f, isMoreThanHalf = false, isPositiveArc = true, 5.333f, 0f) + close() + } + path(fill = SolidColor(Color(0xFF008160))) { + moveTo(16f, 26.667f) + curveToRelative(5.891f, 0f, 10.667f, -4.776f, 10.667f, -10.667f) + reflectiveCurveTo(21.891f, 5.333f, 16f, 5.333f) + reflectiveCurveTo(5.333f, 10.109f, 5.333f, 16f) + reflectiveCurveTo(10.109f, 26.667f, 16f, 26.667f) + close() + } + path(fill = SolidColor(Color(0xFFFFFFFF))) { + moveTo(17.994f, 24.052f) + lineToRelative(0.009f, 0.639f) + horizontalLineToRelative(-4.296f) + lineToRelative(0.01f, -0.628f) + lineToRelative(-3.145f, -0.014f) + curveToRelative(-0.32f, 0f, -0.682f, -0.225f, -0.682f, -0.642f) + lineTo(8.639f, 9.08f) + curveTo(8.631f, 8.609f, 8.85f, 8.374f, 9.378f, 8.382f) + lineTo(22.6f, 8.391f) + curveToRelative(0.488f, 0.016f, 0.812f, 0.17f, 0.771f, 0.893f) + lineToRelative(-1.477f, 14.099f) + curveToRelative(0f, 0.417f, -0.289f, 0.666f, -0.609f, 0.666f) + lineToRelative(-3.291f, 0.003f) + close() + } + path(fill = SolidColor(Color(0xFFFF8300))) { + moveTo(10.986f, 10.519f) + lineToRelative(8.84f, -0.005f) + curveToRelative(-0.88f, 0.33f, -3.35f, 2.198f, -4.021f, 3.414f) + lineToRelative(-4.807f, -0.01f) + lineToRelative(-0.012f, -3.399f) + close() + } + path(fill = SolidColor(Color(0xFFFF142B))) { + moveTo(17.945f, 20.361f) + curveToRelative(-0.128f, 1.221f, -0.128f, 2.614f, -0.128f, 4.176f) + lineToRelative(-3.942f, 0.011f) + curveToRelative(0f, -1.556f, 0.084f, -2.966f, 0.211f, -4.187f) + horizontalLineToRelative(3.859f) + close() + } + path(fill = SolidColor(Color(0xFF008061))) { + moveTo(12.044f, 18.619f) + verticalLineToRelative(0.474f) + horizontalLineToRelative(-0.62f) + verticalLineToRelative(0.472f) + horizontalLineToRelative(0.62f) + verticalLineToRelative(0.539f) + horizontalLineToRelative(-1.419f) + verticalLineToRelative(-2.517f) + horizontalLineToRelative(1.419f) + verticalLineToRelative(0.564f) + horizontalLineToRelative(-0.62f) + verticalLineToRelative(0.468f) + horizontalLineToRelative(0.62f) + close() + moveToRelative(3.134f, 0f) + verticalLineToRelative(0.474f) + horizontalLineToRelative(-0.62f) + verticalLineToRelative(0.472f) + horizontalLineToRelative(0.62f) + verticalLineToRelative(0.539f) + horizontalLineToRelative(-1.414f) + verticalLineToRelative(-2.517f) + horizontalLineToRelative(1.414f) + verticalLineToRelative(0.564f) + horizontalLineToRelative(-0.62f) + verticalLineToRelative(0.468f) + horizontalLineToRelative(0.62f) + close() + moveToRelative(3.754f, -0.017f) + verticalLineToRelative(0.473f) + horizontalLineToRelative(-0.62f) + verticalLineToRelative(0.474f) + horizontalLineToRelative(0.62f) + verticalLineToRelative(0.538f) + horizontalLineToRelative(-1.418f) + verticalLineToRelative(-2.518f) + horizontalLineToRelative(1.418f) + verticalLineToRelative(0.565f) + horizontalLineToRelative(-0.62f) + verticalLineToRelative(0.468f) + horizontalLineToRelative(0.62f) + close() + moveToRelative(-5.856f, -0.998f) + verticalLineToRelative(1.978f) + lineToRelative(0.478f, -0.007f) + lineToRelative(0.006f, 0.546f) + lineToRelative(-1.282f, 0.001f) + verticalLineToRelative(-2.518f) + horizontalLineToRelative(0.798f) + close() + moveToRelative(3.35f, 1.692f) + lineToRelative(-0.292f, -1.71f) + horizontalLineToRelative(-0.815f) + lineToRelative(0.357f, 2.52f) + lineToRelative(1.172f, 0.004f) + lineToRelative(0.479f, -2.529f) + lineToRelative(-0.584f, -0.002f) + lineToRelative(-0.317f, 1.717f) + close() + moveToRelative(2.824f, -1.727f) + horizontalLineToRelative(0.763f) + verticalLineToRelative(2.518f) + horizontalLineTo(19.25f) + verticalLineToRelative(-2.518f) + close() + } + path(fill = SolidColor(Color(0xFF008160))) { + moveTo(20.014f, 18.316f) + curveToRelative(0.04f, -0.274f, 0.433f, -0.203f, 0.433f, -0.045f) + verticalLineToRelative(1.816f) + horizontalLineToRelative(0.768f) + verticalLineToRelative(-2.136f) + curveToRelative(0f, -0.453f, -0.636f, -0.636f, -1.195f, -0.234f) + lineToRelative(-0.006f, 0.599f) + close() + } + path(fill = SolidColor(Color(0xFFFF142B))) { + moveTo(18.247f, 17.347f) + curveToRelative(0.06f, -1.008f, 1.149f, -2.739f, 2.849f, -3.314f) + lineToRelative(0.001f, -3.779f) + curveToRelative(-3.521f, 1.572f, -5.981f, 4.249f, -6.472f, 7.089f) + lineToRelative(3.622f, 0.004f) + close() + } + }.build() + + return _KomojuIcSevenEleven!! + } + +@Suppress("ObjectPropertyName") +private var _KomojuIcSevenEleven: ImageVector? = null diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcVisa.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcVisa.kt new file mode 100644 index 0000000..ce54def --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcVisa.kt @@ -0,0 +1,116 @@ +package com.komoju.mobile.sdk.ui.icon + +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.group +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.unit.dp +import kotlin.Suppress + +val KomojuIcon.Visa: ImageVector + get() { + if (_KomojuIcVisa != null) { + return _KomojuIcVisa!! + } + _KomojuIcVisa = ImageVector.Builder( + name = "KomojuIcVisa", + defaultWidth = 24.dp, + defaultHeight = 17.dp, + viewportWidth = 24f, + viewportHeight = 17f, + ).apply { + group { + path(fill = SolidColor(Color(0xFFFFFFFF))) { + moveTo(21.96f, 0.5f) + horizontalLineTo(2.04f) + curveTo(0.91f, 0.5f, 0f, 1.42f, 0f, 2.56f) + verticalLineToRelative(11.88f) + curveToRelative(0f, 1.14f, 0.91f, 2.06f, 2.04f, 2.06f) + horizontalLineToRelative(19.92f) + curveToRelative(1.13f, 0f, 2.04f, -0.92f, 2.04f, -2.06f) + verticalLineTo(2.56f) + curveToRelative(0f, -1.14f, -0.91f, -2.06f, -2.04f, -2.06f) + close() + } + path( + stroke = SolidColor(Color(0xFF000000)), + strokeAlpha = 0.2f, + strokeLineWidth = 0.5f, + ) { + moveTo(2.04f, 0.75f) + horizontalLineToRelative(19.92f) + curveToRelative(0.98f, 0f, 1.79f, 0.81f, 1.79f, 1.81f) + verticalLineToRelative(11.88f) + curveToRelative(0f, 1f, -0.8f, 1.81f, -1.8f, 1.81f) + horizontalLineTo(2.06f) + arcToRelative(1.8f, 1.8f, 0f, isMoreThanHalf = false, isPositiveArc = true, -1.8f, -1.81f) + verticalLineTo(2.56f) + curveToRelative(0f, -1f, 0.8f, -1.81f, 1.8f, -1.81f) + close() + } + path(fill = SolidColor(Color(0xFF1434CB))) { + moveTo(2.6f, 6.35f) + arcToRelative(7.3f, 7.3f, 0f, isMoreThanHalf = false, isPositiveArc = false, -1.83f, -0.7f) + lineToRelative(0.02f, -0.13f) + horizontalLineToRelative(2.8f) + curveToRelative(0.38f, 0.01f, 0.69f, 0.13f, 0.79f, 0.53f) + lineToRelative(0.6f, 2.93f) + lineToRelative(0.19f, 0.88f) + lineToRelative(1.7f, -4.34f) + horizontalLineToRelative(1.84f) + lineToRelative(-2.73f, 6.36f) + horizontalLineTo(4.14f) + lineTo(2.59f, 6.35f) + close() + moveToRelative(7.46f, 5.54f) + horizontalLineTo(8.32f) + lineToRelative(1.09f, -6.37f) + horizontalLineToRelative(1.74f) + lineToRelative(-1.1f, 6.37f) + close() + moveToRelative(6.3f, -6.22f) + lineToRelative(-0.24f, 1.38f) + lineToRelative(-0.16f, -0.07f) + arcToRelative(3.09f, 3.09f, 0f, isMoreThanHalf = false, isPositiveArc = false, -1.29f, -0.24f) + curveToRelative(-0.69f, 0f, -1f, 0.28f, -1f, 0.55f) + curveToRelative(0f, 0.3f, 0.37f, 0.5f, 0.98f, 0.78f) + curveToRelative(1f, 0.46f, 1.46f, 1.01f, 1.46f, 1.74f) + curveToRelative(-0.02f, 1.32f, -1.2f, 2.17f, -3.03f, 2.17f) + curveToRelative(-0.78f, 0f, -1.53f, -0.16f, -1.93f, -0.33f) + lineToRelative(0.24f, -1.43f) + lineToRelative(0.23f, 0.1f) + curveToRelative(0.56f, 0.23f, 0.93f, 0.34f, 1.63f, 0.34f) + curveToRelative(0.5f, 0f, 1.03f, -0.2f, 1.04f, -0.63f) + curveToRelative(0f, -0.28f, -0.23f, -0.48f, -0.9f, -0.79f) + curveToRelative(-0.66f, -0.3f, -1.54f, -0.81f, -1.52f, -1.73f) + curveToRelative(0f, -1.24f, 1.21f, -2.1f, 2.93f, -2.1f) + curveToRelative(0.67f, 0f, 1.21f, 0.14f, 1.56f, 0.26f) + close() + moveToRelative(2.3f, 3.96f) + horizontalLineToRelative(1.45f) + lineToRelative(-0.4f, -1.84f) + lineToRelative(-0.12f, -0.55f) + lineToRelative(-0.23f, 0.61f) + lineToRelative(-0.7f, 1.78f) + close() + moveToRelative(2.15f, -4.11f) + lineToRelative(1.4f, 6.37f) + horizontalLineToRelative(-1.6f) + lineToRelative(-0.21f, -0.96f) + horizontalLineToRelative(-2.23f) + lineToRelative(-0.37f, 0.96f) + horizontalLineToRelative(-1.82f) + lineToRelative(2.58f, -5.84f) + curveToRelative(0.18f, -0.42f, 0.5f, -0.53f, 0.9f, -0.53f) + horizontalLineToRelative(1.35f) + close() + } + } + }.build() + + return _KomojuIcVisa!! + } + +@Suppress("ObjectPropertyName") +private var _KomojuIcVisa: ImageVector? = null diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcWebMoney.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcWebMoney.kt new file mode 100644 index 0000000..ad85d0e --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcWebMoney.kt @@ -0,0 +1,105 @@ +package com.komoju.mobile.sdk.ui.icon + +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.graphics.Brush +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.unit.dp +import kotlin.Suppress + +val KomojuIcon.WebMoney: ImageVector + get() { + if (_KomojuIcWebMoney != null) { + return _KomojuIcWebMoney!! + } + _KomojuIcWebMoney = ImageVector.Builder( + name = "KomojuIcWebMoney", + defaultWidth = 26.dp, + defaultHeight = 16.dp, + viewportWidth = 26f, + viewportHeight = 16f, + ).apply { + path( + fill = Brush.linearGradient( + colorStops = arrayOf( + 0.14f to Color(0xFF0A3289), + 0.16f to Color(0xFF173B82), + 0.18f to Color(0xFF395170), + 0.22f to Color(0xFF717653), + 0.26f to Color(0xFFBDA82B), + 0.29f to Color(0xFFF3CC0F), + 0.31f to Color(0xFFF1C20F), + 0.36f to Color(0xFFECA911), + 0.42f to Color(0xFFE37F13), + 0.49f to Color(0xFFD74516), + 0.55f to Color(0xFFCD1318), + 0.64f to Color(0xFFCB1319), + 0.67f to Color(0xFFC4141D), + 0.69f to Color(0xFFB81624), + 0.71f to Color(0xFFA7192E), + 0.73f to Color(0xFF911C3B), + 0.75f to Color(0xFF75204C), + 0.76f to Color(0xFF54255F), + 0.77f to Color(0xFF2F2A75), + 0.78f to Color(0xFF09308B), + 0.86f to Color(0xFF2CA53B), + 0.87f to Color(0xFF35A739), + 0.89f to Color(0xFF4FAC34), + 0.91f to Color(0xFF79B32C), + 0.94f to Color(0xFFB2BE21), + 0.97f to Color(0xFFF1CA15), + ), + start = Offset(1.67f, 10.85f), + end = Offset(24.31f, 5.2f), + ), + ) { + moveTo(2.26f, 0.78f) + curveTo(2.26f, 0.78f, 1.16f, 0.6f, 0.71f, 2.37f) + curveTo(0.26f, 4.14f, 1.59f, 11.91f, 2.48f, 13.28f) + curveTo(3.37f, 14.65f, 3.19f, 14.6f, 3.58f, 14.91f) + curveTo(3.837f, 15.147f, 4.153f, 15.309f, 4.495f, 15.38f) + curveTo(4.836f, 15.45f, 5.191f, 15.426f, 5.52f, 15.31f) + curveTo(6.62f, 15.05f, 7.29f, 12.53f, 7.46f, 11.87f) + lineTo(7.56f, 11.69f) + curveTo(7.56f, 11.69f, 9.11f, 15.64f, 10.63f, 15.41f) + curveTo(12.15f, 15.18f, 12.48f, 14.41f, 12.95f, 13.33f) + curveTo(13.42f, 12.25f, 15.2f, 4f, 15.2f, 4f) + curveTo(15.688f, 4.657f, 16.029f, 5.41f, 16.2f, 6.21f) + curveTo(16.55f, 7.65f, 16.38f, 9.21f, 17.2f, 9.21f) + curveTo(18.02f, 9.21f, 18.2f, 9.21f, 18.79f, 8f) + curveTo(19.38f, 6.79f, 20.58f, 4.1f, 20.58f, 4.1f) + curveTo(20.998f, 5.107f, 21.202f, 6.19f, 21.18f, 7.28f) + curveTo(21.36f, 9.82f, 21.73f, 14.21f, 22.62f, 14.81f) + curveTo(22.872f, 15.036f, 23.183f, 15.183f, 23.517f, 15.235f) + curveTo(23.851f, 15.286f, 24.192f, 15.239f, 24.5f, 15.1f) + curveTo(24.96f, 14.9f, 25.74f, 13.97f, 25.21f, 10.2f) + curveTo(24.68f, 6.43f, 24.14f, 4f, 23.48f, 2.71f) + curveTo(22.82f, 1.42f, 22.22f, 0.66f, 21.07f, 0.59f) + curveTo(19.92f, 0.52f, 19.26f, 1.91f, 19f, 2.48f) + curveTo(18.774f, 3.047f, 18.583f, 3.629f, 18.43f, 4.22f) + curveTo(17.972f, 3.139f, 17.363f, 2.129f, 16.62f, 1.22f) + curveTo(16.348f, 0.931f, 15.985f, 0.745f, 15.592f, 0.692f) + curveTo(15.198f, 0.639f, 14.799f, 0.723f, 14.46f, 0.93f) + curveTo(13.756f, 1.438f, 13.242f, 2.166f, 13f, 3f) + curveTo(12.5f, 4.46f, 10.87f, 11.9f, 10.87f, 11.9f) + curveTo(10.87f, 11.9f, 10.05f, 11.44f, 9.87f, 9.74f) + curveTo(9.859f, 8.89f, 9.717f, 8.047f, 9.45f, 7.24f) + curveTo(9.25f, 6.86f, 9.19f, 6.73f, 8.74f, 6.75f) + curveTo(8.489f, 6.739f, 8.24f, 6.81f, 8.033f, 6.953f) + curveTo(7.826f, 7.095f, 7.67f, 7.301f, 7.59f, 7.54f) + curveTo(7.3f, 8.2f, 6.27f, 10.19f, 6.18f, 10.48f) + curveTo(6.09f, 10.77f, 5.48f, 12f, 5.48f, 12f) + curveTo(5.156f, 10.723f, 4.935f, 9.422f, 4.82f, 8.11f) + curveTo(4.699f, 6.092f, 4.424f, 4.086f, 4f, 2.11f) + curveTo(3.67f, 1f, 3.25f, 0.92f, 2.87f, 0.85f) + curveTo(2.669f, 0.811f, 2.465f, 0.787f, 2.26f, 0.78f) + close() + } + }.build() + + return _KomojuIcWebMoney!! + } + +@Suppress("ObjectPropertyName") +private var _KomojuIcWebMoney: ImageVector? = null diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcon.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcon.kt new file mode 100644 index 0000000..3c136d3 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuIcon.kt @@ -0,0 +1,3 @@ +package com.komoju.mobile.sdk.ui.icon + +object KomojuIcon diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuImgPaymentFooter.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuImgPaymentFooter.kt new file mode 100644 index 0000000..ea8f58d --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/icon/KomojuImgPaymentFooter.kt @@ -0,0 +1,637 @@ +package com.komoju.mobile.sdk.ui.icon + +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.graphics.Brush +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.PathFillType +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.unit.dp +import kotlin.Suppress + +val KomojuIcon.KomojuImgPaymentFooter: ImageVector + get() { + if (_KomojuImgPaymentFooter != null) { + return _KomojuImgPaymentFooter!! + } + _KomojuImgPaymentFooter = ImageVector.Builder( + name = "KomojuImgPaymentFooter", + defaultWidth = 364.dp, + defaultHeight = 29.dp, + viewportWidth = 364f, + viewportHeight = 29f, + ).apply { + path( + fill = Brush.linearGradient( + colorStops = arrayOf( + 0f to Color(0xFF172E44), + 1f to Color(0xFF3A73AA), + ), + start = Offset(0f, 14.5f), + end = Offset(159f, 14.5f), + ), + ) { + moveTo(14f, 0.5f) + horizontalLineToRelative(131f) + arcToRelative(14f, 14f, 0f, isMoreThanHalf = false, isPositiveArc = true, 14f, 14f) + arcToRelative(14f, 14f, 0f, isMoreThanHalf = false, isPositiveArc = true, -14f, 14f) + horizontalLineTo(14f) + arcToRelative(14f, 14f, 0f, isMoreThanHalf = false, isPositiveArc = true, -14f, -14f) + arcToRelative(14f, 14f, 0f, isMoreThanHalf = false, isPositiveArc = true, 14f, -14f) + close() + } + path(fill = SolidColor(Color(0xFF7DE5FC))) { + moveTo(20f, 11.5f) + curveToRelative(-0.55f, 0f, -1f, 0.45f, -1f, 1f) + verticalLineTo(14f) + horizontalLineToRelative(2f) + verticalLineToRelative(-1.5f) + curveToRelative(0f, -0.55f, -0.45f, -1f, -1f, -1f) + close() + } + path( + fill = SolidColor(Color(0xFF7DE5FC)), + pathFillType = PathFillType.EvenOdd, + ) { + moveTo(19.71f, 21.9f) + curveToRelative(0.19f, 0.07f, 0.39f, 0.07f, 0.58f, 0f) + curveToRelative(1.26f, -0.45f, 6.21f, -2.47f, 6.21f, -6.4f) + verticalLineTo(9.74f) + curveToRelative(0f, -0.44f, -0.29f, -0.83f, -0.71f, -0.96f) + lineToRelative(-5.5f, -1.69f) + curveToRelative(-0.19f, -0.06f, -0.39f, -0.06f, -0.58f, 0f) + lineToRelative(-5.5f, 1.69f) + curveTo(13.79f, 8.91f, 13.5f, 9.3f, 13.5f, 9.74f) + verticalLineToRelative(5.76f) + curveToRelative(0f, 3.93f, 4.95f, 5.95f, 6.21f, 6.4f) + close() + moveTo(18f, 12.5f) + verticalLineTo(14f) + horizontalLineToRelative(-0.5f) + verticalLineToRelative(3f) + horizontalLineToRelative(5f) + verticalLineToRelative(-3f) + horizontalLineTo(22f) + verticalLineToRelative(-1.5f) + curveToRelative(0f, -1.1f, -0.9f, -2f, -2f, -2f) + reflectiveCurveToRelative(-2f, 0.9f, -2f, 2f) + close() + } + path(fill = SolidColor(Color(0xFFFFFFFF))) { + moveTo(40.34f, 19.61f) + curveToRelative(-2.22f, 0f, -3.68f, -1.34f, -3.78f, -3.4f) + horizontalLineToRelative(1.78f) + curveToRelative(0.1f, 1.09f, 0.83f, 1.79f, 2f, 1.79f) + curveToRelative(1.05f, 0f, 1.78f, -0.42f, 1.78f, -1.29f) + curveToRelative(0f, -2.1f, -5.26f, -0.64f, -5.26f, -4.39f) + curveToRelative(0f, -1.61f, 1.38f, -2.73f, 3.37f, -2.73f) + curveToRelative(2.07f, 0f, 3.47f, 1.19f, 3.56f, 3.02f) + horizontalLineToRelative(-1.77f) + curveToRelative(-0.08f, -0.85f, -0.75f, -1.43f, -1.79f, -1.43f) + curveToRelative(-0.97f, 0f, -1.57f, 0.45f, -1.57f, 1.14f) + curveToRelative(0f, 2.17f, 5.34f, 0.54f, 5.34f, 4.37f) + curveToRelative(0f, 1.82f, -1.5f, 2.92f, -3.66f, 2.92f) + close() + moveToRelative(4.44f, -3.67f) + curveToRelative(0f, -1.86f, 1.15f, -3.61f, 3.46f, -3.61f) + curveToRelative(2.36f, 0f, 3.43f, 1.72f, 3.43f, 3.4f) + curveToRelative(0f, 0.24f, -0.02f, 0.45f, -0.03f, 0.59f) + horizontalLineToRelative(-5.21f) + curveToRelative(0.13f, 1.14f, 0.85f, 1.86f, 1.95f, 1.86f) + curveToRelative(0.88f, 0f, 1.45f, -0.36f, 1.63f, -1.03f) + horizontalLineToRelative(1.68f) + curveToRelative(-0.26f, 1.5f, -1.58f, 2.46f, -3.31f, 2.46f) + curveToRelative(-2.31f, 0f, -3.6f, -1.82f, -3.6f, -3.67f) + close() + moveToRelative(1.69f, -0.75f) + horizontalLineToRelative(3.47f) + curveToRelative(-0.07f, -0.9f, -0.68f, -1.57f, -1.7f, -1.57f) + curveToRelative(-0.97f, 0f, -1.59f, 0.5f, -1.77f, 1.57f) + close() + moveToRelative(9.59f, 4.42f) + curveToRelative(-2.2f, 0f, -3.58f, -1.62f, -3.58f, -3.64f) + curveToRelative(0f, -2.01f, 1.38f, -3.64f, 3.58f, -3.64f) + curveToRelative(1.78f, 0f, 3.22f, 1.07f, 3.37f, 2.69f) + horizontalLineToRelative(-1.7f) + curveToRelative(-0.13f, -0.7f, -0.82f, -1.2f, -1.63f, -1.2f) + curveToRelative(-1.19f, 0f, -1.83f, 0.92f, -1.83f, 2.15f) + reflectiveCurveToRelative(0.66f, 2.16f, 1.86f, 2.16f) + curveToRelative(0.81f, 0f, 1.44f, -0.46f, 1.61f, -1.16f) + horizontalLineToRelative(1.74f) + curveToRelative(-0.23f, 1.54f, -1.6f, 2.64f, -3.42f, 2.64f) + close() + moveToRelative(11.07f, -7.17f) + verticalLineToRelative(7.06f) + horizontalLineToRelative(-1.72f) + verticalLineToRelative(-1.09f) + curveToRelative(-0.39f, 0.77f, -1.19f, 1.2f, -2.2f, 1.2f) + curveToRelative(-1.6f, 0f, -2.63f, -1.15f, -2.63f, -2.8f) + verticalLineToRelative(-4.37f) + horizontalLineToRelative(1.72f) + verticalLineToRelative(4.01f) + curveToRelative(0f, 0.96f, 0.59f, 1.64f, 1.47f, 1.64f) + curveToRelative(0.97f, 0f, 1.64f, -0.76f, 1.64f, -1.8f) + verticalLineToRelative(-3.85f) + horizontalLineToRelative(1.72f) + close() + moveToRelative(4.79f, 1.45f) + curveToRelative(-1.09f, 0f, -1.53f, 0.93f, -1.53f, 2.28f) + verticalLineToRelative(3.33f) + horizontalLineToRelative(-1.72f) + verticalLineToRelative(-7.06f) + horizontalLineToRelative(1.72f) + verticalLineToRelative(1.25f) + curveToRelative(0.35f, -0.9f, 0.9f, -1.25f, 1.81f, -1.25f) + horizontalLineToRelative(0.83f) + verticalLineToRelative(1.45f) + horizontalLineToRelative(-1.11f) + close() + moveToRelative(1.46f, 2.05f) + curveToRelative(0f, -1.86f, 1.15f, -3.61f, 3.46f, -3.61f) + curveToRelative(2.36f, 0f, 3.43f, 1.72f, 3.43f, 3.4f) + curveToRelative(0f, 0.24f, -0.02f, 0.45f, -0.03f, 0.59f) + horizontalLineToRelative(-5.21f) + curveToRelative(0.13f, 1.14f, 0.86f, 1.86f, 1.95f, 1.86f) + curveToRelative(0.88f, 0f, 1.45f, -0.36f, 1.64f, -1.03f) + horizontalLineToRelative(1.68f) + curveToRelative(-0.27f, 1.5f, -1.59f, 2.46f, -3.32f, 2.46f) + curveToRelative(-2.31f, 0f, -3.6f, -1.82f, -3.6f, -3.67f) + close() + moveToRelative(1.69f, -0.75f) + horizontalLineToRelative(3.48f) + curveToRelative(-0.07f, -0.9f, -0.69f, -1.57f, -1.71f, -1.57f) + curveToRelative(-0.97f, 0f, -1.58f, 0.5f, -1.77f, 1.57f) + close() + moveToRelative(14.04f, 4.42f) + curveToRelative(-2.6f, 0f, -4.86f, -1.68f, -4.86f, -5.01f) + reflectiveCurveToRelative(2.3f, -5.01f, 4.86f, -5.01f) + curveToRelative(2.37f, 0f, 4.16f, 1.38f, 4.42f, 3.41f) + horizontalLineTo(91.6f) + curveToRelative(-0.14f, -1.07f, -1.17f, -1.82f, -2.49f, -1.82f) + curveToRelative(-1.71f, 0f, -3f, 1.19f, -3f, 3.42f) + reflectiveCurveToRelative(1.29f, 3.4f, 3f, 3.4f) + curveToRelative(1.34f, 0f, 2.38f, -0.74f, 2.55f, -1.8f) + horizontalLineToRelative(1.85f) + curveToRelative(-0.2f, 2.03f, -1.99f, 3.41f, -4.4f, 3.41f) + close() + moveToRelative(5.68f, -0.11f) + verticalLineTo(9.42f) + horizontalLineToRelative(1.71f) + verticalLineToRelative(4.12f) + curveToRelative(0.39f, -0.77f, 1.2f, -1.21f, 2.21f, -1.21f) + curveToRelative(1.58f, 0f, 2.62f, 1.15f, 2.62f, 2.8f) + verticalLineToRelative(4.37f) + horizontalLineToRelative(-1.71f) + verticalLineToRelative(-4f) + curveToRelative(0f, -0.97f, -0.6f, -1.64f, -1.49f, -1.64f) + curveToRelative(-0.95f, 0f, -1.63f, 0.75f, -1.63f, 1.79f) + verticalLineToRelative(3.85f) + horizontalLineToRelative(-1.71f) + close() + moveToRelative(7.7f, -3.56f) + curveToRelative(0f, -1.86f, 1.15f, -3.61f, 3.46f, -3.61f) + curveToRelative(2.36f, 0f, 3.43f, 1.72f, 3.43f, 3.4f) + curveToRelative(0f, 0.24f, -0.02f, 0.45f, -0.03f, 0.59f) + horizontalLineToRelative(-5.21f) + curveToRelative(0.13f, 1.14f, 0.85f, 1.86f, 1.95f, 1.86f) + curveToRelative(0.88f, 0f, 1.45f, -0.36f, 1.63f, -1.03f) + horizontalLineToRelative(1.68f) + curveToRelative(-0.26f, 1.5f, -1.58f, 2.46f, -3.31f, 2.46f) + curveToRelative(-2.31f, 0f, -3.6f, -1.82f, -3.6f, -3.67f) + close() + moveToRelative(1.69f, -0.75f) + horizontalLineToRelative(3.47f) + curveToRelative(-0.07f, -0.9f, -0.68f, -1.57f, -1.7f, -1.57f) + curveToRelative(-0.97f, 0f, -1.59f, 0.5f, -1.77f, 1.57f) + close() + moveToRelative(9.59f, 4.42f) + curveToRelative(-2.2f, 0f, -3.59f, -1.62f, -3.59f, -3.64f) + curveToRelative(0f, -2.01f, 1.39f, -3.64f, 3.59f, -3.64f) + curveToRelative(1.78f, 0f, 3.22f, 1.07f, 3.37f, 2.69f) + horizontalLineToRelative(-1.71f) + curveToRelative(-0.12f, -0.7f, -0.81f, -1.2f, -1.62f, -1.2f) + curveToRelative(-1.19f, 0f, -1.83f, 0.92f, -1.83f, 2.15f) + reflectiveCurveToRelative(0.66f, 2.16f, 1.86f, 2.16f) + curveToRelative(0.81f, 0f, 1.44f, -0.46f, 1.61f, -1.16f) + horizontalLineToRelative(1.73f) + curveToRelative(-0.22f, 1.54f, -1.59f, 2.64f, -3.41f, 2.64f) + close() + moveToRelative(6.34f, -0.11f) + horizontalLineToRelative(-1.72f) + verticalLineTo(9.42f) + horizontalLineToRelative(1.72f) + verticalLineToRelative(5.6f) + lineToRelative(2.7f, -2.58f) + horizontalLineToRelative(2.18f) + lineToRelative(-2.87f, 2.78f) + lineToRelative(3.11f, 4.28f) + horizontalLineToRelative(-2.08f) + lineToRelative(-2.2f, -3.15f) + lineToRelative(-0.84f, 0.81f) + verticalLineToRelative(2.34f) + close() + moveToRelative(8.89f, 0.11f) + curveToRelative(-2.15f, 0f, -3.69f, -1.54f, -3.69f, -3.64f) + reflectiveCurveToRelative(1.54f, -3.64f, 3.69f, -3.64f) + curveToRelative(2.14f, 0f, 3.68f, 1.54f, 3.68f, 3.64f) + reflectiveCurveToRelative(-1.54f, 3.64f, -3.68f, 3.64f) + close() + moveToRelative(-1.96f, -3.64f) + curveToRelative(0f, 1.28f, 0.79f, 2.16f, 1.96f, 2.16f) + curveToRelative(1.16f, 0f, 1.95f, -0.88f, 1.95f, -2.16f) + curveToRelative(0f, -1.27f, -0.79f, -2.15f, -1.95f, -2.15f) + curveToRelative(-1.17f, 0f, -1.96f, 0.88f, -1.96f, 2.15f) + close() + moveToRelative(13.36f, -3.53f) + verticalLineToRelative(7.06f) + horizontalLineToRelative(-1.72f) + verticalLineToRelative(-1.09f) + curveToRelative(-0.4f, 0.77f, -1.19f, 1.2f, -2.2f, 1.2f) + curveToRelative(-1.6f, 0f, -2.63f, -1.15f, -2.63f, -2.8f) + verticalLineToRelative(-4.37f) + horizontalLineToRelative(1.72f) + verticalLineToRelative(4.01f) + curveToRelative(0f, 0.96f, 0.59f, 1.64f, 1.47f, 1.64f) + curveToRelative(0.96f, 0f, 1.64f, -0.76f, 1.64f, -1.8f) + verticalLineToRelative(-3.85f) + horizontalLineToRelative(1.72f) + close() + moveToRelative(2.41f, -2.12f) + horizontalLineToRelative(1.72f) + verticalLineToRelative(2.12f) + horizontalLineToRelative(1.96f) + verticalLineToRelative(1.45f) + horizontalLineToRelative(-1.96f) + verticalLineToRelative(3.08f) + curveToRelative(0f, 0.71f, 0.38f, 1.07f, 1.02f, 1.07f) + horizontalLineToRelative(0.94f) + verticalLineToRelative(1.46f) + horizontalLineToRelative(-1.13f) + curveToRelative(-1.54f, 0f, -2.55f, -0.9f, -2.55f, -2.46f) + verticalLineToRelative(-3.15f) + horizontalLineToRelative(-1.39f) + verticalLineToRelative(-1.45f) + horizontalLineToRelative(1.39f) + verticalLineToRelative(-2.12f) + close() + } + path( + fill = SolidColor(Color(0xFF0F1C29)), + fillAlpha = 0.5f, + strokeAlpha = 0.5f, + ) { + moveTo(214.99f, 9.7f) + horizontalLineToRelative(3.8f) + curveToRelative(0.64f, 0f, 1.2f, 0.13f, 1.68f, 0.38f) + curveToRelative(0.47f, 0.24f, 0.84f, 0.59f, 1.09f, 1.03f) + curveToRelative(0.26f, 0.45f, 0.39f, 0.97f, 0.39f, 1.54f) + curveToRelative(0f, 0.58f, -0.13f, 1.1f, -0.39f, 1.54f) + curveToRelative(-0.25f, 0.45f, -0.62f, 0.8f, -1.09f, 1.05f) + curveToRelative(-0.48f, 0.25f, -1.04f, 0.37f, -1.68f, 0.37f) + horizontalLineToRelative(-2.34f) + verticalLineToRelative(3.89f) + horizontalLineToRelative(-1.46f) + verticalLineTo(9.7f) + close() + moveToRelative(3.76f, 4.65f) + curveToRelative(0.58f, 0f, 1.02f, -0.16f, 1.31f, -0.48f) + curveToRelative(0.29f, -0.32f, 0.44f, -0.72f, 0.44f, -1.22f) + curveToRelative(0f, -0.49f, -0.15f, -0.9f, -0.44f, -1.21f) + curveToRelative(-0.29f, -0.32f, -0.73f, -0.48f, -1.31f, -0.48f) + horizontalLineToRelative(-2.3f) + verticalLineToRelative(3.39f) + horizontalLineToRelative(2.3f) + close() + moveToRelative(7.36f, 5.26f) + curveToRelative(-0.7f, 0f, -1.32f, -0.15f, -1.87f, -0.46f) + curveToRelative(-0.55f, -0.32f, -0.99f, -0.75f, -1.3f, -1.3f) + curveToRelative(-0.31f, -0.55f, -0.47f, -1.18f, -0.47f, -1.88f) + reflectiveCurveToRelative(0.16f, -1.32f, 0.47f, -1.87f) + curveToRelative(0.31f, -0.55f, 0.75f, -0.98f, 1.3f, -1.29f) + curveToRelative(0.55f, -0.32f, 1.17f, -0.48f, 1.87f, -0.48f) + curveToRelative(0.7f, 0f, 1.33f, 0.16f, 1.88f, 0.48f) + curveToRelative(0.55f, 0.31f, 0.98f, 0.74f, 1.29f, 1.29f) + curveToRelative(0.31f, 0.55f, 0.46f, 1.17f, 0.46f, 1.87f) + curveToRelative(0f, 0.7f, -0.15f, 1.33f, -0.46f, 1.88f) + curveToRelative(-0.31f, 0.55f, -0.74f, 0.98f, -1.29f, 1.3f) + curveToRelative(-0.55f, 0.31f, -1.18f, 0.46f, -1.88f, 0.46f) + close() + moveToRelative(-2.25f, -3.64f) + curveToRelative(0f, 0.72f, 0.21f, 1.31f, 0.62f, 1.77f) + curveToRelative(0.42f, 0.45f, 0.96f, 0.68f, 1.63f, 0.68f) + curveToRelative(0.67f, 0f, 1.2f, -0.23f, 1.61f, -0.68f) + curveToRelative(0.42f, -0.46f, 0.63f, -1.05f, 0.63f, -1.77f) + reflectiveCurveToRelative(-0.21f, -1.3f, -0.63f, -1.76f) + curveToRelative(-0.41f, -0.46f, -0.94f, -0.69f, -1.61f, -0.69f) + curveToRelative(-0.67f, 0f, -1.21f, 0.23f, -1.63f, 0.69f) + curveToRelative(-0.41f, 0.46f, -0.62f, 1.04f, -0.62f, 1.76f) + close() + moveToRelative(6.36f, -3.53f) + horizontalLineToRelative(1.36f) + lineToRelative(1.45f, 5.25f) + lineToRelative(1.6f, -5.25f) + horizontalLineToRelative(1.29f) + lineToRelative(1.58f, 5.25f) + lineToRelative(1.44f, -5.25f) + horizontalLineToRelative(1.37f) + lineToRelative(-2.18f, 7.06f) + horizontalLineToRelative(-1.26f) + lineToRelative(-1.61f, -5.26f) + lineToRelative(-1.6f, 5.26f) + horizontalLineToRelative(-1.26f) + lineToRelative(-2.18f, -7.06f) + close() + moveToRelative(10.57f, 3.49f) + curveToRelative(0f, -0.66f, 0.14f, -1.26f, 0.41f, -1.81f) + curveToRelative(0.27f, -0.55f, 0.66f, -0.98f, 1.18f, -1.3f) + curveToRelative(0.51f, -0.32f, 1.12f, -0.49f, 1.82f, -0.49f) + reflectiveCurveToRelative(1.3f, 0.16f, 1.8f, 0.46f) + curveToRelative(0.51f, 0.3f, 0.89f, 0.71f, 1.15f, 1.22f) + curveToRelative(0.26f, 0.51f, 0.39f, 1.06f, 0.39f, 1.67f) + curveToRelative(0f, 0.18f, -0.01f, 0.36f, -0.03f, 0.53f) + horizontalLineToRelative(-5.39f) + curveToRelative(0.06f, 0.67f, 0.29f, 1.21f, 0.69f, 1.62f) + curveToRelative(0.4f, 0.41f, 0.91f, 0.62f, 1.53f, 0.62f) + curveToRelative(0.51f, 0f, 0.93f, -0.11f, 1.26f, -0.32f) + curveToRelative(0.32f, -0.22f, 0.54f, -0.52f, 0.64f, -0.93f) + horizontalLineToRelative(1.36f) + curveToRelative(-0.13f, 0.73f, -0.49f, 1.32f, -1.08f, 1.75f) + curveToRelative(-0.59f, 0.44f, -1.32f, 0.66f, -2.18f, 0.66f) + curveToRelative(-0.71f, 0f, -1.34f, -0.17f, -1.88f, -0.5f) + curveToRelative(-0.53f, -0.34f, -0.94f, -0.79f, -1.23f, -1.35f) + curveToRelative(-0.29f, -0.56f, -0.44f, -1.17f, -0.44f, -1.83f) + close() + moveToRelative(5.38f, -0.71f) + curveToRelative(-0.05f, -0.55f, -0.24f, -0.98f, -0.59f, -1.31f) + curveToRelative(-0.34f, -0.32f, -0.81f, -0.49f, -1.38f, -0.49f) + curveToRelative(-0.55f, 0f, -1.01f, 0.16f, -1.36f, 0.47f) + curveToRelative(-0.35f, 0.29f, -0.57f, 0.74f, -0.67f, 1.33f) + horizontalLineToRelative(4f) + close() + moveToRelative(5.82f, -1.6f) + curveToRelative(-1.14f, 0f, -1.71f, 0.9f, -1.71f, 2.69f) + verticalLineToRelative(3.19f) + horizontalLineToRelative(-1.35f) + verticalLineToRelative(-7.06f) + horizontalLineToRelative(1.35f) + verticalLineToRelative(1.36f) + curveToRelative(0.16f, -0.47f, 0.39f, -0.82f, 0.69f, -1.03f) + curveToRelative(0.3f, -0.22f, 0.69f, -0.33f, 1.19f, -0.33f) + horizontalLineToRelative(0.85f) + verticalLineToRelative(1.18f) + horizontalLineToRelative(-1.02f) + close() + moveToRelative(1.44f, 2.31f) + curveToRelative(0f, -0.66f, 0.13f, -1.26f, 0.4f, -1.81f) + reflectiveCurveToRelative(0.67f, -0.98f, 1.18f, -1.3f) + curveToRelative(0.51f, -0.32f, 1.12f, -0.49f, 1.82f, -0.49f) + reflectiveCurveToRelative(1.3f, 0.16f, 1.81f, 0.46f) + curveToRelative(0.5f, 0.3f, 0.88f, 0.71f, 1.14f, 1.22f) + curveToRelative(0.26f, 0.51f, 0.39f, 1.06f, 0.39f, 1.67f) + curveToRelative(0f, 0.18f, 0f, 0.36f, -0.02f, 0.53f) + horizontalLineToRelative(-5.39f) + curveToRelative(0.05f, 0.67f, 0.28f, 1.21f, 0.68f, 1.62f) + curveToRelative(0.4f, 0.41f, 0.91f, 0.62f, 1.53f, 0.62f) + curveToRelative(0.51f, 0f, 0.93f, -0.11f, 1.26f, -0.32f) + curveToRelative(0.33f, -0.22f, 0.54f, -0.52f, 0.64f, -0.93f) + horizontalLineToRelative(1.36f) + curveToRelative(-0.13f, 0.73f, -0.49f, 1.32f, -1.08f, 1.75f) + curveToRelative(-0.58f, 0.44f, -1.31f, 0.66f, -2.18f, 0.66f) + curveToRelative(-0.71f, 0f, -1.34f, -0.17f, -1.88f, -0.5f) + curveToRelative(-0.53f, -0.34f, -0.94f, -0.79f, -1.23f, -1.35f) + curveToRelative(-0.29f, -0.56f, -0.43f, -1.17f, -0.43f, -1.83f) + close() + moveToRelative(5.37f, -0.71f) + curveToRelative(-0.04f, -0.55f, -0.24f, -0.98f, -0.59f, -1.31f) + curveToRelative(-0.34f, -0.32f, -0.8f, -0.49f, -1.38f, -0.49f) + curveToRelative(-0.55f, 0f, -1f, 0.16f, -1.36f, 0.47f) + curveToRelative(-0.34f, 0.29f, -0.57f, 0.74f, -0.67f, 1.33f) + horizontalLineToRelative(4f) + close() + moveToRelative(5.74f, 4.39f) + curveToRelative(-0.71f, 0f, -1.32f, -0.15f, -1.84f, -0.46f) + curveToRelative(-0.5f, -0.32f, -0.89f, -0.75f, -1.16f, -1.29f) + curveToRelative(-0.26f, -0.55f, -0.39f, -1.18f, -0.39f, -1.89f) + reflectiveCurveToRelative(0.13f, -1.33f, 0.39f, -1.87f) + curveToRelative(0.27f, -0.55f, 0.66f, -0.98f, 1.16f, -1.29f) + curveToRelative(0.52f, -0.32f, 1.13f, -0.48f, 1.82f, -0.48f) + curveToRelative(0.48f, 0f, 0.92f, 0.11f, 1.32f, 0.32f) + curveToRelative(0.4f, 0.21f, 0.71f, 0.48f, 0.93f, 0.83f) + verticalLineTo(9.49f) + horizontalLineToRelative(1.35f) + verticalLineTo(19.5f) + horizontalLineToRelative(-1.35f) + verticalLineToRelative(-1.05f) + curveToRelative(-0.22f, 0.35f, -0.53f, 0.64f, -0.93f, 0.85f) + curveToRelative(-0.4f, 0.21f, -0.83f, 0.31f, -1.3f, 0.31f) + close() + moveToRelative(-2f, -3.64f) + curveToRelative(0f, 0.74f, 0.19f, 1.33f, 0.59f, 1.78f) + curveToRelative(0.39f, 0.45f, 0.91f, 0.67f, 1.56f, 0.67f) + curveToRelative(0.66f, 0f, 1.18f, -0.22f, 1.57f, -0.67f) + curveToRelative(0.4f, -0.45f, 0.6f, -1.04f, 0.6f, -1.78f) + reflectiveCurveToRelative(-0.2f, -1.33f, -0.6f, -1.78f) + curveToRelative(-0.39f, -0.44f, -0.91f, -0.67f, -1.57f, -0.67f) + curveToRelative(-0.65f, 0f, -1.17f, 0.23f, -1.56f, 0.67f) + curveToRelative(-0.4f, 0.45f, -0.59f, 1.04f, -0.59f, 1.78f) + close() + moveToRelative(14.24f, 3.64f) + curveToRelative(-0.47f, 0f, -0.9f, -0.1f, -1.3f, -0.31f) + curveToRelative(-0.41f, -0.21f, -0.71f, -0.5f, -0.93f, -0.85f) + verticalLineToRelative(1.05f) + horizontalLineToRelative(-1.36f) + verticalLineTo(9.49f) + horizontalLineToRelative(1.36f) + verticalLineToRelative(3.99f) + curveToRelative(0.22f, -0.35f, 0.52f, -0.62f, 0.93f, -0.83f) + curveToRelative(0.4f, -0.21f, 0.84f, -0.32f, 1.31f, -0.32f) + curveToRelative(0.7f, 0f, 1.3f, 0.16f, 1.81f, 0.48f) + curveToRelative(0.51f, 0.31f, 0.9f, 0.74f, 1.16f, 1.29f) + curveToRelative(0.27f, 0.54f, 0.41f, 1.16f, 0.41f, 1.87f) + curveToRelative(0f, 0.71f, -0.14f, 1.34f, -0.41f, 1.89f) + curveToRelative(-0.26f, 0.54f, -0.65f, 0.97f, -1.16f, 1.29f) + curveToRelative(-0.51f, 0.31f, -1.11f, 0.46f, -1.82f, 0.46f) + close() + moveToRelative(-2.33f, -3.64f) + curveToRelative(0f, 0.74f, 0.2f, 1.33f, 0.59f, 1.78f) + curveToRelative(0.4f, 0.45f, 0.93f, 0.67f, 1.58f, 0.67f) + curveToRelative(0.66f, 0f, 1.18f, -0.22f, 1.57f, -0.67f) + curveToRelative(0.39f, -0.45f, 0.59f, -1.04f, 0.59f, -1.78f) + reflectiveCurveToRelative(-0.2f, -1.33f, -0.59f, -1.78f) + curveToRelative(-0.39f, -0.44f, -0.91f, -0.67f, -1.57f, -0.67f) + curveToRelative(-0.65f, 0f, -1.18f, 0.23f, -1.58f, 0.67f) + curveToRelative(-0.39f, 0.45f, -0.59f, 1.04f, -0.59f, 1.78f) + close() + moveToRelative(8.7f, 3.6f) + lineToRelative(-2.62f, -7.13f) + horizontalLineToRelative(1.4f) + lineToRelative(1.85f, 5.3f) + lineToRelative(1.86f, -5.3f) + horizontalLineToRelative(1.4f) + lineToRelative(-2.48f, 6.81f) + lineToRelative(-1.06f, 3.11f) + horizontalLineToRelative(-1.3f) + lineToRelative(0.95f, -2.79f) + close() + } + path( + fill = SolidColor(Color(0xFF0F1C29)), + fillAlpha = 0.5f, + strokeAlpha = 0.5f, + ) { + moveTo(305.25f, 10.57f) + curveToRelative(-1.06f, 1.04f, -1.58f, 2.33f, -1.58f, 3.84f) + curveToRelative(0f, 1.52f, 0.52f, 2.8f, 1.58f, 3.86f) + curveToRelative(1.05f, 1.04f, 2.37f, 1.56f, 3.93f, 1.56f) + reflectiveCurveToRelative(2.86f, -0.52f, 3.91f, -1.56f) + curveToRelative(1.06f, -1.06f, 1.59f, -2.34f, 1.59f, -3.86f) + curveToRelative(0f, -1.51f, -0.53f, -2.8f, -1.59f, -3.84f) + curveToRelative(-1.05f, -1.05f, -2.35f, -1.57f, -3.91f, -1.57f) + reflectiveCurveToRelative(-2.88f, 0.52f, -3.93f, 1.57f) + close() + moveToRelative(1.86f, 5.98f) + curveToRelative(-0.55f, -0.59f, -0.82f, -1.3f, -0.82f, -2.14f) + curveToRelative(0f, -0.84f, 0.27f, -1.54f, 0.82f, -2.12f) + curveToRelative(0.55f, -0.6f, 1.24f, -0.89f, 2.07f, -0.89f) + curveToRelative(0.82f, 0f, 1.51f, 0.29f, 2.06f, 0.89f) + curveToRelative(0.55f, 0.58f, 0.83f, 1.28f, 0.83f, 2.12f) + curveToRelative(0f, 0.84f, -0.28f, 1.55f, -0.83f, 2.14f) + curveToRelative(-0.55f, 0.58f, -1.24f, 0.88f, -2.06f, 0.88f) + curveToRelative(-0.83f, 0f, -1.52f, -0.3f, -2.07f, -0.88f) + close() + moveToRelative(20.38f, -7.34f) + horizontalLineToRelative(-1.93f) + lineToRelative(-3.68f, 5.55f) + lineToRelative(-3.69f, -5.55f) + horizontalLineToRelative(-1.92f) + verticalLineToRelative(10.4f) + horizontalLineToRelative(2.58f) + lineToRelative(-0.02f, -5.24f) + lineToRelative(2.33f, 3.59f) + verticalLineToRelative(0.02f) + horizontalLineToRelative(1.44f) + verticalLineToRelative(-0.02f) + lineToRelative(2.3f, -3.56f) + verticalLineToRelative(5.21f) + horizontalLineToRelative(2.59f) + verticalLineTo(9.21f) + close() + moveToRelative(3.16f, 1.36f) + curveToRelative(-1.06f, 1.04f, -1.58f, 2.33f, -1.58f, 3.84f) + curveToRelative(0f, 1.52f, 0.52f, 2.8f, 1.58f, 3.86f) + curveToRelative(1.05f, 1.04f, 2.37f, 1.56f, 3.93f, 1.56f) + reflectiveCurveToRelative(2.86f, -0.52f, 3.91f, -1.56f) + curveToRelative(1.06f, -1.06f, 1.59f, -2.34f, 1.59f, -3.86f) + curveToRelative(0f, -1.51f, -0.53f, -2.8f, -1.59f, -3.84f) + curveToRelative(-1.05f, -1.05f, -2.35f, -1.57f, -3.91f, -1.57f) + reflectiveCurveToRelative(-2.88f, 0.52f, -3.93f, 1.57f) + close() + moveToRelative(1.86f, 5.98f) + curveToRelative(-0.55f, -0.59f, -0.82f, -1.3f, -0.82f, -2.14f) + curveToRelative(0f, -0.84f, 0.27f, -1.54f, 0.82f, -2.12f) + curveToRelative(0.55f, -0.6f, 1.24f, -0.89f, 2.07f, -0.89f) + curveToRelative(0.82f, 0f, 1.51f, 0.29f, 2.06f, 0.89f) + curveToRelative(0.55f, 0.58f, 0.83f, 1.28f, 0.83f, 2.12f) + curveToRelative(0f, 0.84f, -0.28f, 1.55f, -0.83f, 2.14f) + curveToRelative(-0.55f, 0.58f, -1.24f, 0.88f, -2.06f, 0.88f) + curveToRelative(-0.83f, 0f, -1.52f, -0.3f, -2.07f, -0.88f) + close() + moveToRelative(16.67f, -7.34f) + horizontalLineToRelative(-2.63f) + verticalLineToRelative(6.24f) + curveToRelative(0f, 1.29f, -0.63f, 2.04f, -1.59f, 2.04f) + curveToRelative(-0.98f, 0f, -1.63f, -0.58f, -1.7f, -1.56f) + horizontalLineToRelative(-2.56f) + curveToRelative(0.04f, 1.24f, 0.45f, 2.2f, 1.2f, 2.89f) + curveToRelative(0.75f, 0.68f, 1.75f, 1.02f, 2.99f, 1.02f) + curveToRelative(2.7f, 0f, 4.29f, -1.57f, 4.29f, -4.39f) + verticalLineTo(9.21f) + close() + moveToRelative(11.21f, 0f) + horizontalLineToRelative(-2.6f) + verticalLineToRelative(5.6f) + curveToRelative(0f, 1.59f, -0.89f, 2.62f, -2.25f, 2.62f) + curveToRelative(-1.36f, 0f, -2.23f, -1.03f, -2.23f, -2.62f) + verticalLineToRelative(-5.6f) + horizontalLineToRelative(-2.6f) + verticalLineToRelative(5.55f) + curveToRelative(0f, 1.61f, 0.41f, 2.85f, 1.29f, 3.75f) + curveToRelative(0.85f, 0.89f, 2.05f, 1.33f, 3.54f, 1.33f) + curveToRelative(1.5f, 0f, 2.68f, -0.44f, 3.55f, -1.33f) + curveToRelative(0.87f, -0.9f, 1.3f, -2.14f, 1.3f, -3.75f) + verticalLineTo(9.21f) + close() + moveTo(300.8f, 9.22f) + horizontalLineToRelative(3.04f) + lineToRelative(-4.1f, 5.18f) + horizontalLineToRelative(-3.05f) + lineToRelative(4.11f, -5.18f) + close() + } + path( + fill = SolidColor(Color(0xFF0F1C29)), + fillAlpha = 0.5f, + strokeAlpha = 0.5f, + ) { + moveTo(300.8f, 19.57f) + horizontalLineToRelative(3.04f) + lineToRelative(-4.1f, -5.17f) + horizontalLineToRelative(-3.05f) + lineToRelative(4.11f, 5.17f) + close() + moveToRelative(-4.2f, -10.35f) + horizontalLineToRelative(-2.54f) + verticalLineToRelative(10.35f) + horizontalLineToRelative(2.54f) + verticalLineTo(9.22f) + close() + } + path( + fill = SolidColor(Color(0xFF0F1C29)), + fillAlpha = 0.5f, + strokeAlpha = 0.5f, + ) { + moveTo(362.14f, 9.51f) + curveToRelative(-0.21f, 0.2f, -0.32f, 0.45f, -0.32f, 0.74f) + curveToRelative(0f, 0.3f, 0.11f, 0.55f, 0.32f, 0.74f) + curveToRelative(0.2f, 0.2f, 0.46f, 0.3f, 0.75f, 0.3f) + reflectiveCurveToRelative(0.55f, -0.1f, 0.75f, -0.3f) + curveToRelative(0.21f, -0.19f, 0.32f, -0.44f, 0.32f, -0.74f) + curveToRelative(0f, -0.29f, -0.11f, -0.54f, -0.32f, -0.74f) + curveToRelative(-0.2f, -0.2f, -0.46f, -0.3f, -0.75f, -0.3f) + reflectiveCurveToRelative(-0.55f, 0.1f, -0.75f, 0.3f) + close() + moveToRelative(0.75f, 1.52f) + curveToRelative(-0.22f, 0f, -0.4f, -0.08f, -0.56f, -0.23f) + curveToRelative(-0.15f, -0.15f, -0.23f, -0.33f, -0.23f, -0.55f) + curveToRelative(0f, -0.22f, 0.08f, -0.4f, 0.23f, -0.55f) + curveToRelative(0.16f, -0.15f, 0.34f, -0.23f, 0.56f, -0.23f) + curveToRelative(0.21f, 0f, 0.4f, 0.08f, 0.56f, 0.23f) + curveToRelative(0.15f, 0.15f, 0.23f, 0.33f, 0.23f, 0.55f) + curveToRelative(0f, 0.22f, -0.08f, 0.4f, -0.23f, 0.55f) + curveToRelative(-0.16f, 0.15f, -0.35f, 0.23f, -0.56f, 0.23f) + close() + moveToRelative(0f, -0.97f) + curveToRelative(0.09f, 0f, 0.14f, 0.04f, 0.17f, 0.11f) + horizontalLineToRelative(0.31f) + curveToRelative(-0.03f, -0.23f, -0.22f, -0.39f, -0.48f, -0.39f) + curveToRelative(-0.14f, 0f, -0.26f, 0.04f, -0.35f, 0.13f) + curveToRelative(-0.09f, 0.1f, -0.14f, 0.21f, -0.14f, 0.34f) + curveToRelative(0f, 0.14f, 0.05f, 0.25f, 0.14f, 0.34f) + curveToRelative(0.09f, 0.09f, 0.21f, 0.14f, 0.35f, 0.14f) + curveToRelative(0.13f, 0f, 0.24f, -0.04f, 0.32f, -0.11f) + curveToRelative(0.09f, -0.07f, 0.15f, -0.17f, 0.16f, -0.28f) + horizontalLineToRelative(-0.31f) + curveToRelative(-0.02f, 0.06f, -0.09f, 0.11f, -0.17f, 0.11f) + curveToRelative(-0.11f, 0f, -0.19f, -0.09f, -0.19f, -0.2f) + curveToRelative(0f, -0.1f, 0.08f, -0.19f, 0.19f, -0.19f) + close() + } + }.build() + + return _KomojuImgPaymentFooter!! + } + +@Suppress("ObjectPropertyName") +private var _KomojuImgPaymentFooter: ImageVector? = null diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/awating/KonbiniAwaitingPaymentScreen.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/awating/KonbiniAwaitingPaymentScreen.kt index 9a33383..e099184 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/awating/KonbiniAwaitingPaymentScreen.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/awating/KonbiniAwaitingPaymentScreen.kt @@ -32,39 +32,22 @@ import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.screen.Screen import com.komoju.mobile.sdk.entities.Payment import com.komoju.mobile.sdk.entities.PaymentStatus +import com.komoju.mobile.sdk.i18n.I18nStringKey +import com.komoju.mobile.sdk.i18n.i18nStringResource import com.komoju.mobile.sdk.ui.composables.PrimaryButton import com.komoju.mobile.sdk.ui.composables.TextButton import com.komoju.mobile.sdk.ui.composables.ThemedCircularProgressIndicator +import com.komoju.mobile.sdk.ui.icon.KomojuIcon +import com.komoju.mobile.sdk.ui.icon.PaymentStatusCompleted +import com.komoju.mobile.sdk.ui.icon.PaymentStatusFailed +import com.komoju.mobile.sdk.ui.icon.PaymentStatusKonbiniPending +import com.komoju.mobile.sdk.ui.icon.PaymentStatusPending import com.komoju.mobile.sdk.ui.screens.KomojuPaymentRoute import com.komoju.mobile.sdk.ui.screens.RouterEffect import com.komoju.mobile.sdk.ui.theme.Gray200 import com.komoju.mobile.sdk.ui.theme.Gray50 import com.komoju.mobile.sdk.ui.theme.Gray700 import com.komoju.mobile.sdk.utils.AmountUtils -import komoju_mobile_sdk.shared.generated.resources.Res -import komoju_mobile_sdk.shared.generated.resources.komoju_awaiting_payment -import komoju_mobile_sdk.shared.generated.resources.komoju_awaiting_payment_instruction -import komoju_mobile_sdk.shared.generated.resources.komoju_confirmation_code -import komoju_mobile_sdk.shared.generated.resources.komoju_done -import komoju_mobile_sdk.shared.generated.resources.komoju_error -import komoju_mobile_sdk.shared.generated.resources.komoju_have_a_question_contact_us -import komoju_mobile_sdk.shared.generated.resources.komoju_i_will_do_it_later -import komoju_mobile_sdk.shared.generated.resources.komoju_ic_payment_status_completed -import komoju_mobile_sdk.shared.generated.resources.komoju_ic_payment_status_failed -import komoju_mobile_sdk.shared.generated.resources.komoju_ic_payment_status_konbini_pending -import komoju_mobile_sdk.shared.generated.resources.komoju_ic_payment_status_prenidng -import komoju_mobile_sdk.shared.generated.resources.komoju_okay -import komoju_mobile_sdk.shared.generated.resources.komoju_payment_failed -import komoju_mobile_sdk.shared.generated.resources.komoju_payment_successful -import komoju_mobile_sdk.shared.generated.resources.komoju_receipt_number -import komoju_mobile_sdk.shared.generated.resources.komoju_total_payment -import komoju_mobile_sdk.shared.generated.resources.komoju_update_payment_method -import komoju_mobile_sdk.shared.generated.resources.komoju_view_instructions -import komoju_mobile_sdk.shared.generated.resources.komoju_your_payment_has_been_processed_successfully -import komoju_mobile_sdk.shared.generated.resources.komoju_your_payment_has_failed -import komoju_mobile_sdk.shared.generated.resources.komoju_your_payment_is_awaiting_processing -import org.jetbrains.compose.resources.painterResource -import org.jetbrains.compose.resources.stringResource internal data class KonbiniAwaitingPaymentScreen(val route: KomojuPaymentRoute.KonbiniAwaitingPayment) : Screen { @Composable @@ -108,7 +91,7 @@ private fun ProcessForPaymentStatus(payment: Payment, onPrimaryButtonClicked: () .padding(horizontal = 16.dp, vertical = 32.dp), horizontalAlignment = Alignment.CenterHorizontally, ) { - Image(painterResource(payment.icon), "status_icon") + Image(payment.icon, "status_icon") Spacer(modifier = Modifier.padding(16.dp)) Text(payment.title, fontSize = 32.sp, style = TextStyle(fontWeight = FontWeight.Medium)) Spacer(modifier = Modifier.padding(8.dp)) @@ -124,7 +107,7 @@ private fun ProcessForPaymentStatus(payment: Payment, onPrimaryButtonClicked: () .padding(vertical = 16.dp), ) { Column(modifier = Modifier.background(Gray50, RoundedCornerShape(8.dp))) { - InformationItem(title = stringResource(Res.string.komoju_total_payment), displayPayableAmount) + InformationItem(title = i18nStringResource(I18nStringKey.total_payment), displayPayableAmount) payment.additionalInformation.forEach { HorizontalDivider(color = Gray200, modifier = Modifier.padding(horizontal = 16.dp)) InformationItem(it.first, it.second) @@ -159,37 +142,37 @@ private fun InformationItem(title: String, description: String) { private val Payment.icon get() = when { - status == PaymentStatus.COMPLETED -> Res.drawable.komoju_ic_payment_status_completed - status == PaymentStatus.FAILED -> Res.drawable.komoju_ic_payment_status_failed - this is Payment.Konbini && status == PaymentStatus.AUTHORIZED -> Res.drawable.komoju_ic_payment_status_konbini_pending - else -> Res.drawable.komoju_ic_payment_status_prenidng + status == PaymentStatus.COMPLETED -> KomojuIcon.PaymentStatusCompleted + status == PaymentStatus.FAILED -> KomojuIcon.PaymentStatusFailed + this is Payment.Konbini && status == PaymentStatus.AUTHORIZED -> KomojuIcon.PaymentStatusKonbiniPending + else -> KomojuIcon.PaymentStatusPending } private val Payment.title @Composable get() = when (status) { - PaymentStatus.COMPLETED -> stringResource(Res.string.komoju_payment_successful) - PaymentStatus.FAILED -> stringResource(Res.string.komoju_payment_failed) - else -> stringResource(Res.string.komoju_awaiting_payment) + PaymentStatus.COMPLETED -> i18nStringResource(I18nStringKey.payment_successful) + PaymentStatus.FAILED -> i18nStringResource(I18nStringKey.payment_failed) + else -> i18nStringResource(I18nStringKey.awaiting_payment) } private val Payment.description @Composable get() = when { - status == PaymentStatus.COMPLETED -> stringResource(Res.string.komoju_your_payment_has_been_processed_successfully) - status == PaymentStatus.FAILED -> stringResource(Res.string.komoju_your_payment_has_failed) + status == PaymentStatus.COMPLETED -> i18nStringResource(I18nStringKey.your_payment_has_been_processed_successfully) + status == PaymentStatus.FAILED -> i18nStringResource(I18nStringKey.your_payment_has_failed) this is Payment.Konbini && status == PaymentStatus.AUTHORIZED -> - stringResource(Res.string.komoju_awaiting_payment_instruction, this.konbiniStoreKey) - else -> stringResource(Res.string.komoju_your_payment_is_awaiting_processing) + i18nStringResource(I18nStringKey.awaiting_payment_instruction, this.konbiniStoreKey) + else -> i18nStringResource(I18nStringKey.your_payment_is_awaiting_processing) } private val Payment.additionalInformation @Composable get() = when { - this is Payment.Error -> listOf(stringResource(Res.string.komoju_error) to code + message) + this is Payment.Error -> listOf(i18nStringResource(I18nStringKey.error) to code + message) this is Payment.Konbini && status == PaymentStatus.AUTHORIZED -> listOfNotNull( - receiptNumber?.let { stringResource(Res.string.komoju_receipt_number) to it }, - confirmationCode?.let { stringResource(Res.string.komoju_confirmation_code) to it }, + receiptNumber?.let { i18nStringResource(I18nStringKey.receipt_number) to it }, + confirmationCode?.let { i18nStringResource(I18nStringKey.confirmation_code) to it }, ) else -> emptyList() @@ -198,16 +181,16 @@ private val Payment.additionalInformation private val Payment.primaryButtonText @Composable get() = when { - status == PaymentStatus.COMPLETED -> stringResource(Res.string.komoju_done) - status == PaymentStatus.FAILED -> stringResource(Res.string.komoju_update_payment_method) - this is Payment.Konbini && status == PaymentStatus.AUTHORIZED -> stringResource(Res.string.komoju_view_instructions) - else -> stringResource(Res.string.komoju_okay) + status == PaymentStatus.COMPLETED -> i18nStringResource(I18nStringKey.done) + status == PaymentStatus.FAILED -> i18nStringResource(I18nStringKey.update_payment_method) + this is Payment.Konbini && status == PaymentStatus.AUTHORIZED -> i18nStringResource(I18nStringKey.view_instructions) + else -> i18nStringResource(I18nStringKey.okay) } private val Payment.secondaryButtonText @Composable get() = when { - status == PaymentStatus.FAILED -> stringResource(Res.string.komoju_have_a_question_contact_us) - this is Payment.Konbini && status == PaymentStatus.AUTHORIZED -> stringResource(Res.string.komoju_i_will_do_it_later) + status == PaymentStatus.FAILED -> i18nStringResource(I18nStringKey.have_a_question_contact_us) + this is Payment.Konbini && status == PaymentStatus.AUTHORIZED -> i18nStringResource(I18nStringKey.i_will_do_it_later) else -> null } diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/failed/PaymentFailedScreen.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/failed/PaymentFailedScreen.kt index b0a08a7..fa67861 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/failed/PaymentFailedScreen.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/failed/PaymentFailedScreen.kt @@ -22,18 +22,13 @@ import androidx.compose.ui.unit.sp import androidx.lifecycle.compose.collectAsStateWithLifecycle import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.screen.Screen +import com.komoju.mobile.sdk.i18n.I18nStringKey +import com.komoju.mobile.sdk.i18n.i18nStringResource import com.komoju.mobile.sdk.ui.composables.PrimaryButton +import com.komoju.mobile.sdk.ui.icon.KomojuIcon +import com.komoju.mobile.sdk.ui.icon.PaymentStatusFailed import com.komoju.mobile.sdk.ui.screens.KomojuPaymentRoute import com.komoju.mobile.sdk.ui.screens.RouterEffect -import komoju_mobile_sdk.shared.generated.resources.Res -import komoju_mobile_sdk.shared.generated.resources.komoju_back_to_store -import komoju_mobile_sdk.shared.generated.resources.komoju_credit_card_error -import komoju_mobile_sdk.shared.generated.resources.komoju_error_other -import komoju_mobile_sdk.shared.generated.resources.komoju_error_user_cancel -import komoju_mobile_sdk.shared.generated.resources.komoju_ic_payment_status_failed -import komoju_mobile_sdk.shared.generated.resources.komoju_payment_failed -import org.jetbrains.compose.resources.painterResource -import org.jetbrains.compose.resources.stringResource internal class PaymentFailedScreen(private val route: KomojuPaymentRoute.PaymentFailed) : Screen { @Composable @@ -56,14 +51,14 @@ private fun Screen.PaymentFailedScreenContent(route: KomojuPaymentRoute.PaymentF .clickable(onClick = screenModel::onCloseButtonClicked), ) } - Image(painterResource(Res.drawable.komoju_ic_payment_status_failed), "status_icon") + Image(KomojuIcon.PaymentStatusFailed, "status_icon") Spacer(Modifier.height(16.dp)) - Text(stringResource(Res.string.komoju_payment_failed), fontSize = 24.sp, fontWeight = FontWeight.Bold) + Text(i18nStringResource(I18nStringKey.payment_failed), fontSize = 24.sp, fontWeight = FontWeight.Bold) Text( text = when (route.reason) { - Reason.USER_CANCEL -> stringResource(Res.string.komoju_error_user_cancel) - Reason.OTHER -> stringResource(Res.string.komoju_error_other) - Reason.CREDIT_CARD_ERROR -> stringResource(Res.string.komoju_credit_card_error) + Reason.USER_CANCEL -> i18nStringResource(I18nStringKey.error_user_cancel) + Reason.OTHER -> i18nStringResource(I18nStringKey.error_other) + Reason.CREDIT_CARD_ERROR -> i18nStringResource(I18nStringKey.credit_card_error) }, modifier = Modifier.padding(16.dp), textAlign = TextAlign.Center, @@ -73,7 +68,7 @@ private fun Screen.PaymentFailedScreenContent(route: KomojuPaymentRoute.PaymentF modifier = Modifier .fillMaxWidth() .padding(16.dp), - text = stringResource(Res.string.komoju_back_to_store), + text = i18nStringResource(I18nStringKey.back_to_store), ) { screenModel.onBackToStoreButtonClicked() } diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentScreen.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentScreen.kt index f0c5818..b398475 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentScreen.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentScreen.kt @@ -24,6 +24,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.vector.rememberVectorPainter import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle @@ -31,18 +32,17 @@ import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.screen.Screen import com.komoju.mobile.sdk.KomojuMobileSDKConfiguration import com.komoju.mobile.sdk.entities.PaymentMethod +import com.komoju.mobile.sdk.i18n.I18nStringKey +import com.komoju.mobile.sdk.i18n.i18nStringResource import com.komoju.mobile.sdk.ui.composables.InlinedWebView import com.komoju.mobile.sdk.ui.composables.ThemedCircularProgressIndicator import com.komoju.mobile.sdk.ui.composables.launchCustomTab +import com.komoju.mobile.sdk.ui.icon.KomojuIcon +import com.komoju.mobile.sdk.ui.icon.KomojuImgPaymentFooter import com.komoju.mobile.sdk.ui.screens.RouterEffect import com.komoju.mobile.sdk.ui.screens.payment.composables.PaymentMethodForm import com.komoju.mobile.sdk.ui.screens.payment.composables.PaymentMethodsRow import com.komoju.mobile.sdk.ui.screens.payment.composables.PaymentSheetHandle -import komoju_mobile_sdk.shared.generated.resources.Res -import komoju_mobile_sdk.shared.generated.resources.komoju_img_payment_footer -import komoju_mobile_sdk.shared.generated.resources.komoju_payment_options -import org.jetbrains.compose.resources.painterResource -import org.jetbrains.compose.resources.stringResource internal data class KomojuPaymentScreen(private val sdkConfiguration: KomojuMobileSDKConfiguration) : Screen { @Composable @@ -70,7 +70,7 @@ internal data class KomojuPaymentScreen(private val sdkConfiguration: KomojuMobi if (uiState.session != null) { Column { PaymentSheetHandle( - stringResource(Res.string.komoju_payment_options), + i18nStringResource(I18nStringKey.payment_options), onCloseClicked = { screenViewModel.onCloseClicked() }, @@ -105,7 +105,7 @@ internal data class KomojuPaymentScreen(private val sdkConfiguration: KomojuMobi } Image( modifier = Modifier.fillMaxWidth().height(54.dp).padding(horizontal = 16.dp), - painter = painterResource(Res.drawable.komoju_img_payment_footer), + painter = rememberVectorPainter(KomojuIcon.KomojuImgPaymentFooter), contentDescription = "payment footer", ) } diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentScreenModel.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentScreenModel.kt index bae9824..9c6cdc1 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentScreenModel.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentScreenModel.kt @@ -14,6 +14,7 @@ import com.komoju.mobile.sdk.entities.SecureTokenResponse.Status.NEEDS_VERIFY import com.komoju.mobile.sdk.entities.SecureTokenResponse.Status.OK import com.komoju.mobile.sdk.entities.SecureTokenResponse.Status.SKIPPED import com.komoju.mobile.sdk.entities.SecureTokenResponse.Status.UNKNOWN +import com.komoju.mobile.sdk.i18n.I18nStringKey import com.komoju.mobile.sdk.navigation.RouterStateScreenModel import com.komoju.mobile.sdk.remote.apis.KomojuRemoteApi import com.komoju.mobile.sdk.ui.composables.InlinedPaymentPrimaryButtonState @@ -32,35 +33,12 @@ import com.komoju.mobile.sdk.utils.isDigitsOnly import com.komoju.mobile.sdk.utils.isKanaOnly import com.komoju.mobile.sdk.utils.isValidEmail import com.komoju.mobile.sdk.utils.verifyTokenAndProcessPayment -import komoju_mobile_sdk.shared.generated.resources.Res -import komoju_mobile_sdk.shared.generated.resources.komoju_cadrholder_name_cannot_be_empty -import komoju_mobile_sdk.shared.generated.resources.komoju_please_select_a_konbini_brand -import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_bit_cash_id_cannot_be_empty -import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_bit_cash_id_is_not_valid -import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_card_number_is_not_valid -import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_cardholder_name_is_not_valid -import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_cvv_is_not_valid -import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_email_is_not_valid -import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_expiry_date_is_not_valid -import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_first_name_cannot_be_empty -import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_first_name_phonetic_cannot_be_empty -import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_first_name_phonetic_must_be_a_kana -import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_last_name_cannot_be_empty -import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_last_name_phonetic_cannot_be_empty -import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_last_name_phonetic_must_be_a_kana -import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_name_cannot_be_empty -import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_net_cash_id_cannot_be_empty -import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_net_cash_id_is_not_valid -import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_phone_number_cannot_be_empty -import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_phone_number_is_not_valid -import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_prepaid_number_cannot_be_empty -import komoju_mobile_sdk.shared.generated.resources.komoju_the_entered_prepaid_number_is_not_valid +import kotlin.time.Duration.Companion.milliseconds import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch -import kotlin.time.Duration.Companion.milliseconds internal class KomojuPaymentScreenModel(private val config: KomojuMobileSDKConfiguration) : RouterStateScreenModel(KomojuPaymentUIState()) { @@ -104,8 +82,8 @@ internal class KomojuPaymentScreenModel(private val config: KomojuMobileSDKConfi mutableState.update { it.copy( creditCardDisplayData = creditCardDisplayData.copy( - creditCardErrorStringResource = null, - fullNameOnCardErrorStringResource = null, + creditCardErrorI18nStringKey = null, + fullNameOnCardErrorI18nStringKey = null, ), ) } @@ -281,34 +259,34 @@ internal class KomojuPaymentScreenModel(private val config: KomojuMobileSDKConfi } private fun CommonDisplayData.validate(): Boolean { - val lastNameError = if (lastName.isBlank()) Res.string.komoju_the_entered_last_name_cannot_be_empty else null - val firstNameError = if (firstName.isBlank()) Res.string.komoju_the_entered_first_name_cannot_be_empty else null + val lastNameError = if (lastName.isBlank()) I18nStringKey.the_entered_last_name_cannot_be_empty else null + val firstNameError = if (firstName.isBlank()) I18nStringKey.the_entered_first_name_cannot_be_empty else null val firstNamePhoneticError = when { - firstNamePhonetic.isBlank() -> Res.string.komoju_the_entered_first_name_phonetic_cannot_be_empty - firstNamePhonetic.isKanaOnly.not() -> Res.string.komoju_the_entered_first_name_phonetic_must_be_a_kana + firstNamePhonetic.isBlank() -> I18nStringKey.the_entered_first_name_phonetic_cannot_be_empty + firstNamePhonetic.isKanaOnly.not() -> I18nStringKey.the_entered_first_name_phonetic_must_be_a_kana else -> null } val lastNamePhoneticError = when { - lastNamePhonetic.isBlank() -> Res.string.komoju_the_entered_last_name_phonetic_cannot_be_empty - lastNamePhonetic.isKanaOnly.not() -> Res.string.komoju_the_entered_last_name_phonetic_must_be_a_kana + lastNamePhonetic.isBlank() -> I18nStringKey.the_entered_last_name_phonetic_cannot_be_empty + lastNamePhonetic.isKanaOnly.not() -> I18nStringKey.the_entered_last_name_phonetic_must_be_a_kana else -> null } - val emailError = if (email.isValidEmail.not()) Res.string.komoju_the_entered_email_is_not_valid else null + val emailError = if (email.isValidEmail.not()) I18nStringKey.the_entered_email_is_not_valid else null val phoneNumberError = when { - phoneNumber.isBlank() -> Res.string.komoju_the_entered_phone_number_cannot_be_empty - phoneNumber.length < 7 -> Res.string.komoju_the_entered_phone_number_is_not_valid - phoneNumber.isDigitsOnly.not() -> Res.string.komoju_the_entered_phone_number_is_not_valid + phoneNumber.isBlank() -> I18nStringKey.the_entered_phone_number_cannot_be_empty + phoneNumber.length < 7 -> I18nStringKey.the_entered_phone_number_is_not_valid + phoneNumber.isDigitsOnly.not() -> I18nStringKey.the_entered_phone_number_is_not_valid else -> null } mutableState.update { it.copy( commonDisplayData = it.commonDisplayData.copy( - lastNameErrorStringResource = lastNameError, - firstNameErrorStringResource = firstNameError, - firstNamePhoneticErrorStringResource = firstNamePhoneticError, - lastNamePhoneticErrorStringResource = lastNamePhoneticError, - emailErrorStringResource = emailError, - phoneNumberErrorStringResource = phoneNumberError, + lastNameErrorI18nStringKey = lastNameError, + firstNameErrorI18nStringKey = firstNameError, + firstNamePhoneticErrorI18nStringKey = firstNamePhoneticError, + lastNamePhoneticErrorI18nStringKey = lastNamePhoneticError, + emailErrorI18nStringKey = emailError, + phoneNumberErrorI18nStringKey = phoneNumberError, ), ) } @@ -322,14 +300,14 @@ internal class KomojuPaymentScreenModel(private val config: KomojuMobileSDKConfi private fun WebMoneyDisplayData.validate(): Boolean { val prepaidNumberError = when { - prepaidNumber.isBlank() -> Res.string.komoju_the_entered_prepaid_number_cannot_be_empty - prepaidNumber.length != 16 -> Res.string.komoju_the_entered_prepaid_number_is_not_valid + prepaidNumber.isBlank() -> I18nStringKey.the_entered_prepaid_number_cannot_be_empty + prepaidNumber.length != 16 -> I18nStringKey.the_entered_prepaid_number_is_not_valid else -> null } mutableState.update { it.copy( webMoneyDisplayData = it.webMoneyDisplayData.copy( - prepaidNumberErrorStringResource = prepaidNumberError, + prepaidNumberErrorI18nStringKey = prepaidNumberError, ), ) } @@ -338,14 +316,14 @@ internal class KomojuPaymentScreenModel(private val config: KomojuMobileSDKConfi private fun BitCashDisplayData.validate(): Boolean { val idError = when { - bitCashId.isBlank() -> Res.string.komoju_the_entered_bit_cash_id_cannot_be_empty - bitCashId.length != 16 -> Res.string.komoju_the_entered_bit_cash_id_is_not_valid + bitCashId.isBlank() -> I18nStringKey.the_entered_bit_cash_id_cannot_be_empty + bitCashId.length != 16 -> I18nStringKey.the_entered_bit_cash_id_is_not_valid else -> null } mutableState.update { it.copy( bitCashDisplayData = it.bitCashDisplayData.copy( - bitCashErrorStringResource = idError, + bitCashErrorI18nStringKey = idError, ), ) } @@ -354,14 +332,14 @@ internal class KomojuPaymentScreenModel(private val config: KomojuMobileSDKConfi private fun NetCashDisplayData.validate(): Boolean { val idError = when { - netCashId.isBlank() -> Res.string.komoju_the_entered_net_cash_id_cannot_be_empty - netCashId.length !in 16..20 -> Res.string.komoju_the_entered_net_cash_id_is_not_valid + netCashId.isBlank() -> I18nStringKey.the_entered_net_cash_id_cannot_be_empty + netCashId.length !in 16..20 -> I18nStringKey.the_entered_net_cash_id_is_not_valid else -> null } mutableState.update { it.copy( netCashDisplayData = it.netCashDisplayData.copy( - netCashErrorStringResource = idError, + netCashErrorI18nStringKey = idError, ), ) } @@ -370,20 +348,20 @@ internal class KomojuPaymentScreenModel(private val config: KomojuMobileSDKConfi private fun PaidyDisplayData.validate(): Boolean { val fullNameError = when { - fullName.isBlank() -> Res.string.komoju_the_entered_name_cannot_be_empty + fullName.isBlank() -> I18nStringKey.the_entered_name_cannot_be_empty else -> null } val phoneNumberError = when { - phoneNumber.isBlank() -> Res.string.komoju_the_entered_phone_number_cannot_be_empty - phoneNumber.length < 7 -> Res.string.komoju_the_entered_phone_number_is_not_valid - phoneNumber.isDigitsOnly.not() -> Res.string.komoju_the_entered_phone_number_is_not_valid + phoneNumber.isBlank() -> I18nStringKey.the_entered_phone_number_cannot_be_empty + phoneNumber.length < 7 -> I18nStringKey.the_entered_phone_number_is_not_valid + phoneNumber.isDigitsOnly.not() -> I18nStringKey.the_entered_phone_number_is_not_valid else -> null } mutableState.update { it.copy( paidyDisplayData = it.paidyDisplayData.copy( - fullNameErrorStringResource = fullNameError, - phoneNumberErrorStringResource = phoneNumberError, + fullNameErrorI18nStringKey = fullNameError, + phoneNumberErrorI18nStringKey = phoneNumberError, ), ) } @@ -392,23 +370,23 @@ internal class KomojuPaymentScreenModel(private val config: KomojuMobileSDKConfi private fun CreditCardDisplayData.validate(): Boolean { val fullNameOnCardError = when { - fullNameOnCard.isBlank() -> Res.string.komoju_cadrholder_name_cannot_be_empty + fullNameOnCard.isBlank() -> I18nStringKey.cadrholder_name_cannot_be_empty fullNameOnCard.all { char -> char.isValidCardHolderNameChar() } -> null - else -> Res.string.komoju_the_entered_cardholder_name_is_not_valid + else -> I18nStringKey.the_entered_cardholder_name_is_not_valid } val creditCardError = run { when { - creditCardNumber.isValidCardNumber().not() -> Res.string.komoju_the_entered_card_number_is_not_valid - creditCardExpiryDate.isValidExpiryDate().not() -> Res.string.komoju_the_entered_expiry_date_is_not_valid - creditCardCvv.isValidCVV().not() -> Res.string.komoju_the_entered_cvv_is_not_valid + creditCardNumber.isValidCardNumber().not() -> I18nStringKey.the_entered_card_number_is_not_valid + creditCardExpiryDate.isValidExpiryDate().not() -> I18nStringKey.the_entered_expiry_date_is_not_valid + creditCardCvv.isValidCVV().not() -> I18nStringKey.the_entered_cvv_is_not_valid else -> null } } mutableState.update { it.copy( creditCardDisplayData = it.creditCardDisplayData.copy( - fullNameOnCardErrorStringResource = fullNameOnCardError, - creditCardErrorStringResource = creditCardError, + fullNameOnCardErrorI18nStringKey = fullNameOnCardError, + creditCardErrorI18nStringKey = creditCardError, ), ) } @@ -416,15 +394,15 @@ internal class KomojuPaymentScreenModel(private val config: KomojuMobileSDKConfi } private fun KonbiniDisplayData.validate(commonDisplayData: CommonDisplayData): Boolean { - val nameError = if (receiptName.trim().isEmpty()) Res.string.komoju_the_entered_name_cannot_be_empty else null - val emailError = if (commonDisplayData.email.isValidEmail.not()) Res.string.komoju_the_entered_email_is_not_valid else null - val konbiniBrandNullError = if (selectedKonbiniBrand == null) Res.string.komoju_please_select_a_konbini_brand else null + val nameError = if (receiptName.trim().isEmpty()) I18nStringKey.the_entered_name_cannot_be_empty else null + val emailError = if (commonDisplayData.email.isValidEmail.not()) I18nStringKey.the_entered_email_is_not_valid else null + val konbiniBrandNullError = if (selectedKonbiniBrand == null) I18nStringKey.please_select_a_konbini_brand else null mutableState.update { it.copy( konbiniDisplayData = it.konbiniDisplayData.copy( - receiptNameErrorStringResource = nameError, - receiptEmailErrorStringResource = emailError, - konbiniBrandNullErrorStringResource = konbiniBrandNullError, + receiptNameErrorI18nStringKey = nameError, + receiptEmailErrorI18nStringKey = emailError, + konbiniBrandNullErrorI18nStringKey = konbiniBrandNullError, ), ) } diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentUIState.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentUIState.kt index 2d7d7ec..26679f6 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentUIState.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentUIState.kt @@ -2,9 +2,9 @@ package com.komoju.mobile.sdk.ui.screens.payment import com.komoju.mobile.sdk.entities.PaymentMethod import com.komoju.mobile.sdk.entities.Session +import com.komoju.mobile.sdk.i18n.I18nStringKey import com.komoju.mobile.sdk.ui.composables.InlinedPaymentPrimaryButtonState import com.komoju.mobile.sdk.utils.empty -import org.jetbrains.compose.resources.StringResource internal data class KomojuPaymentUIState( val isLoading: Boolean = true, @@ -29,22 +29,22 @@ internal data class CommonDisplayData( val firstNamePhonetic: String = String.empty, val email: String = String.empty, val phoneNumber: String = String.empty, - val fullNameErrorStringResource: StringResource? = null, - val lastNameErrorStringResource: StringResource? = null, - val firstNameErrorStringResource: StringResource? = null, - val lastNamePhoneticErrorStringResource: StringResource? = null, - val firstNamePhoneticErrorStringResource: StringResource? = null, - val emailErrorStringResource: StringResource? = null, - val phoneNumberErrorStringResource: StringResource? = null, + val fullNameErrorI18nStringKey: I18nStringKey? = null, + val lastNameErrorI18nStringKey: I18nStringKey? = null, + val firstNameErrorI18nStringKey: I18nStringKey? = null, + val lastNamePhoneticErrorI18nStringKey: I18nStringKey? = null, + val firstNamePhoneticErrorI18nStringKey: I18nStringKey? = null, + val emailErrorI18nStringKey: I18nStringKey? = null, + val phoneNumberErrorI18nStringKey: I18nStringKey? = null, ) internal data class CreditCardDisplayData( val fullNameOnCard: String = String.empty, - val fullNameOnCardErrorStringResource: StringResource? = null, + val fullNameOnCardErrorI18nStringKey: I18nStringKey? = null, val creditCardNumber: String = String.empty, val creditCardExpiryDate: String = String.empty, val creditCardCvv: String = String.empty, - val creditCardErrorStringResource: StringResource? = null, + val creditCardErrorI18nStringKey: I18nStringKey? = null, val canSaveCard: Boolean = false, val saveCard: Boolean = false, val inlinePaymentEnabled: Boolean = false, @@ -53,24 +53,24 @@ internal data class CreditCardDisplayData( internal data class KonbiniDisplayData( val receiptName: String = String.empty, - val receiptNameErrorStringResource: StringResource? = null, - val receiptEmailErrorStringResource: StringResource? = null, + val receiptNameErrorI18nStringKey: I18nStringKey? = null, + val receiptEmailErrorI18nStringKey: I18nStringKey? = null, val selectedKonbiniBrand: PaymentMethod.Konbini.KonbiniBrand? = null, - val konbiniBrandNullErrorStringResource: StringResource? = null, + val konbiniBrandNullErrorI18nStringKey: I18nStringKey? = null, ) -internal data class BitCashDisplayData(val bitCashId: String = String.empty, val bitCashErrorStringResource: StringResource? = null) +internal data class BitCashDisplayData(val bitCashId: String = String.empty, val bitCashErrorI18nStringKey: I18nStringKey? = null) -internal data class NetCashDisplayData(val netCashId: String = String.empty, val netCashErrorStringResource: StringResource? = null) +internal data class NetCashDisplayData(val netCashId: String = String.empty, val netCashErrorI18nStringKey: I18nStringKey? = null) internal data class WebMoneyDisplayData( val prepaidNumber: String = String.empty, - val prepaidNumberErrorStringResource: StringResource? = null, + val prepaidNumberErrorI18nStringKey: I18nStringKey? = null, ) internal data class PaidyDisplayData( val fullName: String = String.empty, - val fullNameErrorStringResource: StringResource? = null, + val fullNameErrorI18nStringKey: I18nStringKey? = null, val phoneNumber: String = String.empty, - val phoneNumberErrorStringResource: StringResource? = null, + val phoneNumberErrorI18nStringKey: I18nStringKey? = null, ) diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/BankForm.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/BankForm.kt index fa60137..d591fdd 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/BankForm.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/BankForm.kt @@ -17,21 +17,12 @@ import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.intl.Locale import androidx.compose.ui.unit.dp import com.komoju.mobile.sdk.entities.PaymentMethod +import com.komoju.mobile.sdk.i18n.I18nStringKey +import com.komoju.mobile.sdk.i18n.i18nStringResource import com.komoju.mobile.sdk.ui.composables.PrimaryButton import com.komoju.mobile.sdk.ui.screens.payment.CommonDisplayData import com.komoju.mobile.sdk.ui.theme.KomojuMobileSdkTheme import com.komoju.mobile.sdk.utils.AmountUtils -import komoju_mobile_sdk.shared.generated.resources.Res -import komoju_mobile_sdk.shared.generated.resources.komoju_email -import komoju_mobile_sdk.shared.generated.resources.komoju_enter_your_email_address -import komoju_mobile_sdk.shared.generated.resources.komoju_enter_your_phone_number -import komoju_mobile_sdk.shared.generated.resources.komoju_first_name -import komoju_mobile_sdk.shared.generated.resources.komoju_first_name_phonetic -import komoju_mobile_sdk.shared.generated.resources.komoju_last_name -import komoju_mobile_sdk.shared.generated.resources.komoju_last_name_phonetic -import komoju_mobile_sdk.shared.generated.resources.komoju_pay -import komoju_mobile_sdk.shared.generated.resources.komoju_phone_number -import org.jetbrains.compose.resources.stringResource import org.jetbrains.compose.ui.tooling.preview.Preview internal val JAPANESE_LOCALE = Locale("ja") @@ -54,38 +45,38 @@ internal fun BankForm( .fillMaxWidth() .padding(horizontal = 16.dp), value = commonDisplayData.lastName, - title = stringResource(Res.string.komoju_last_name), - placeholder = stringResource(Res.string.komoju_last_name), + title = i18nStringResource(I18nStringKey.last_name), + placeholder = i18nStringResource(I18nStringKey.last_name), onValueChange = { onCommonDisplayDataChange(commonDisplayData.copy(lastName = it)) }, keyboardType = KeyboardType.Text, imeActions = ImeAction.Next, singleLine = true, - error = commonDisplayData.lastNameErrorStringResource?.let { stringResource(it) }, + error = commonDisplayData.lastNameErrorI18nStringKey, ) CompatTextField( modifier = Modifier .fillMaxWidth() .padding(horizontal = 16.dp), value = commonDisplayData.firstName, - title = stringResource(Res.string.komoju_first_name), - placeholder = stringResource(Res.string.komoju_first_name), + title = i18nStringResource(I18nStringKey.first_name), + placeholder = i18nStringResource(I18nStringKey.first_name), onValueChange = { onCommonDisplayDataChange(commonDisplayData.copy(firstName = it)) }, keyboardType = KeyboardType.Text, imeActions = ImeAction.Next, singleLine = true, - error = commonDisplayData.firstNameErrorStringResource?.let { stringResource(it) }, + error = commonDisplayData.firstNameErrorI18nStringKey, ) CompatTextField( modifier = Modifier .fillMaxWidth() .padding(horizontal = 16.dp), value = commonDisplayData.lastNamePhonetic, - title = stringResource(Res.string.komoju_last_name_phonetic), - placeholder = stringResource(Res.string.komoju_last_name_phonetic), + title = i18nStringResource(I18nStringKey.last_name_phonetic), + placeholder = i18nStringResource(I18nStringKey.last_name_phonetic), onValueChange = { onCommonDisplayDataChange(commonDisplayData.copy(lastNamePhonetic = it)) }, @@ -93,15 +84,15 @@ internal fun BankForm( keyBoardLocale = JAPANESE_LOCALE, imeActions = ImeAction.Next, singleLine = true, - error = commonDisplayData.lastNamePhoneticErrorStringResource?.let { stringResource(it) }, + error = commonDisplayData.lastNamePhoneticErrorI18nStringKey, ) CompatTextField( modifier = Modifier .fillMaxWidth() .padding(horizontal = 16.dp), value = commonDisplayData.firstNamePhonetic, - title = stringResource(Res.string.komoju_first_name_phonetic), - placeholder = stringResource(Res.string.komoju_first_name_phonetic), + title = i18nStringResource(I18nStringKey.first_name_phonetic), + placeholder = i18nStringResource(I18nStringKey.first_name_phonetic), onValueChange = { onCommonDisplayDataChange(commonDisplayData.copy(firstNamePhonetic = it)) }, @@ -109,44 +100,44 @@ internal fun BankForm( keyBoardLocale = JAPANESE_LOCALE, imeActions = ImeAction.Next, singleLine = true, - error = commonDisplayData.firstNamePhoneticErrorStringResource?.let { stringResource(it) }, + error = commonDisplayData.firstNamePhoneticErrorI18nStringKey, ) CompatTextField( modifier = Modifier .fillMaxWidth() .padding(horizontal = 16.dp), value = commonDisplayData.email, - title = stringResource(Res.string.komoju_email), - placeholder = stringResource(Res.string.komoju_enter_your_email_address), + title = i18nStringResource(I18nStringKey.email), + placeholder = i18nStringResource(I18nStringKey.enter_your_email_address), onValueChange = { onCommonDisplayDataChange(commonDisplayData.copy(email = it)) }, keyboardType = KeyboardType.Email, imeActions = ImeAction.Next, singleLine = true, - error = commonDisplayData.emailErrorStringResource?.let { stringResource(it) }, + error = commonDisplayData.emailErrorI18nStringKey, ) CompatTextField( modifier = Modifier .fillMaxWidth() .padding(horizontal = 16.dp), value = commonDisplayData.phoneNumber, - title = stringResource(Res.string.komoju_phone_number), - placeholder = stringResource(Res.string.komoju_enter_your_phone_number), + title = i18nStringResource(I18nStringKey.phone_number), + placeholder = i18nStringResource(I18nStringKey.enter_your_phone_number), onValueChange = { onCommonDisplayDataChange(commonDisplayData.copy(phoneNumber = it)) }, keyboardType = KeyboardType.Number, imeActions = ImeAction.Done, singleLine = true, - error = commonDisplayData.phoneNumberErrorStringResource?.let { stringResource(it) }, + error = commonDisplayData.phoneNumberErrorI18nStringKey, ) Spacer(modifier = Modifier.height(16.dp)) PrimaryButton( modifier = Modifier .padding(16.dp) .fillMaxWidth(), - text = stringResource(Res.string.komoju_pay, displayPayableAmount), + text = i18nStringResource(I18nStringKey.pay, displayPayableAmount), onClick = onPayButtonClicked, ) } diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/BitCashForm.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/BitCashForm.kt index acfa521..8fde537 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/BitCashForm.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/BitCashForm.kt @@ -12,14 +12,11 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import com.komoju.mobile.sdk.entities.PaymentMethod +import com.komoju.mobile.sdk.i18n.I18nStringKey +import com.komoju.mobile.sdk.i18n.i18nStringResource import com.komoju.mobile.sdk.ui.composables.PrimaryButton import com.komoju.mobile.sdk.ui.screens.payment.BitCashDisplayData import com.komoju.mobile.sdk.utils.AmountUtils -import komoju_mobile_sdk.shared.generated.resources.Res -import komoju_mobile_sdk.shared.generated.resources.komoju_bitcash_information -import komoju_mobile_sdk.shared.generated.resources.komoju_hiragana_id -import komoju_mobile_sdk.shared.generated.resources.komoju_pay -import org.jetbrains.compose.resources.stringResource @Composable internal fun BitCashForm( @@ -36,19 +33,19 @@ internal fun BitCashForm( Column { TextField( value = bitCashDisplayData.bitCashId, - title = stringResource(Res.string.komoju_bitcash_information), - placeholder = stringResource(Res.string.komoju_hiragana_id), + title = i18nStringResource(I18nStringKey.bitcash_information), + placeholder = i18nStringResource(I18nStringKey.hiragana_id), onValueChange = { onBitCashDisplayDataChange(bitCashDisplayData.copy(bitCashId = it)) }, - error = bitCashDisplayData.bitCashErrorStringResource?.let { stringResource(it) }, + error = bitCashDisplayData.bitCashErrorI18nStringKey?.let { i18nStringResource(it) }, ) Spacer(modifier = Modifier.height(16.dp)) PrimaryButton( modifier = Modifier .padding(16.dp) .fillMaxWidth(), - text = stringResource(Res.string.komoju_pay, displayPayableAmount), + text = i18nStringResource(I18nStringKey.pay, displayPayableAmount), onClick = onPayButtonClicked, ) } diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/CompatTextField.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/CompatTextField.kt index 112b65f..1c4ec10 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/CompatTextField.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/CompatTextField.kt @@ -13,6 +13,8 @@ import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.intl.Locale import androidx.compose.ui.text.intl.LocaleList import androidx.compose.ui.unit.dp +import com.komoju.mobile.sdk.i18n.I18nStringKey +import com.komoju.mobile.sdk.i18n.i18nStringResource import com.komoju.mobile.sdk.ui.theme.Gray200 import com.komoju.mobile.sdk.ui.theme.LocalConfigurableTheme import com.komoju.mobile.sdk.ui.theme.Red600 @@ -25,7 +27,7 @@ internal fun CompatTextField( title: String, placeholder: String, onValueChange: (String) -> Unit, - error: String? = null, + error: I18nStringKey? = null, keyboardType: KeyboardType = KeyboardType.Unspecified, capitalization: KeyboardCapitalization = KeyboardCapitalization.Unspecified, keyBoardLocale: Locale = Locale.current, @@ -48,7 +50,7 @@ internal fun CompatTextField( singleLine = singleLine, supportingText = { if (error != null) { - Text(text = error, color = Red600) + Text(text = i18nStringResource(error), color = Red600) } }, keyboardOptions = KeyboardOptions( diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/CreditCardForm.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/CreditCardForm.kt index 3de36ac..3c7615b 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/CreditCardForm.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/CreditCardForm.kt @@ -27,6 +27,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.vector.rememberVectorPainter import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.text.TextStyle @@ -37,9 +38,12 @@ import androidx.compose.ui.text.toUpperCase import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.komoju.mobile.sdk.entities.PaymentMethod -import komoju_mobile_sdk.shared.generated.resources.Res +import com.komoju.mobile.sdk.i18n.I18nStringKey +import com.komoju.mobile.sdk.i18n.i18nStringResource import com.komoju.mobile.sdk.ui.composables.InlinedPaymentPrimaryButton import com.komoju.mobile.sdk.ui.composables.PrimaryButton +import com.komoju.mobile.sdk.ui.icon.Cvv +import com.komoju.mobile.sdk.ui.icon.KomojuIcon import com.komoju.mobile.sdk.ui.screens.payment.CreditCardDisplayData import com.komoju.mobile.sdk.ui.theme.Gray200 import com.komoju.mobile.sdk.ui.theme.Gray500 @@ -53,16 +57,6 @@ import com.komoju.mobile.sdk.utils.CreditCardUtils.formatOtherCardNumbers import com.komoju.mobile.sdk.utils.CreditCardUtils.identifyCardScheme import com.komoju.mobile.sdk.utils.CreditCardUtils.makeExpirationFilter import com.komoju.mobile.sdk.utils.testID -import komoju_mobile_sdk.shared.generated.resources.komoju_card_number -import komoju_mobile_sdk.shared.generated.resources.komoju_cardholder_name -import komoju_mobile_sdk.shared.generated.resources.komoju_cvv -import komoju_mobile_sdk.shared.generated.resources.komoju_full_name_on_card -import komoju_mobile_sdk.shared.generated.resources.komoju_ic_cvv -import komoju_mobile_sdk.shared.generated.resources.komoju_mm_yy -import komoju_mobile_sdk.shared.generated.resources.komoju_pay -import komoju_mobile_sdk.shared.generated.resources.komoju_save_this_card_for_future_payments -import org.jetbrains.compose.resources.painterResource -import org.jetbrains.compose.resources.stringResource import org.jetbrains.compose.ui.tooling.preview.Preview @Composable @@ -80,14 +74,14 @@ internal fun CreditCardForm( AmountUtils.formatToDecimal(creditCard.currency, creditCard.amount) } } - val dividerColor = if (creditCardDisplayData.creditCardErrorStringResource == null) Gray200 else Red600 + val dividerColor = if (creditCardDisplayData.creditCardErrorI18nStringKey == null) Gray200 else Red600 Column { TextField( creditCardDisplayData.fullNameOnCard, - title = stringResource(Res.string.komoju_cardholder_name), - placeholder = stringResource(Res.string.komoju_full_name_on_card), + title = i18nStringResource(I18nStringKey.cardholder_name), + placeholder = i18nStringResource(I18nStringKey.full_name_on_card), capitalization = KeyboardCapitalization.Characters, - error = creditCardDisplayData.fullNameOnCardErrorStringResource?.let { stringResource(it) }, + error = creditCardDisplayData.fullNameOnCardErrorI18nStringKey?.let { i18nStringResource(it) }, onValueChange = { onCreditCardDisplayDataChange(creditCardDisplayData.copy(fullNameOnCard = it.toUpperCase(Locale.current))) }, @@ -97,7 +91,7 @@ internal fun CreditCardForm( modifier = Modifier .fillMaxWidth() .padding(horizontal = 16.dp), - text = stringResource(Res.string.komoju_card_number), + text = i18nStringResource(I18nStringKey.card_number), ) Box( @@ -172,7 +166,7 @@ internal fun CreditCardForm( ) if (creditCardDisplayData.creditCardExpiryDate.isEmpty()) { Text( - text = stringResource(Res.string.komoju_mm_yy), + text = i18nStringResource(I18nStringKey.mm_yy), style = TextStyle(fontSize = 16.sp, color = Gray500), ) } @@ -192,14 +186,14 @@ internal fun CreditCardForm( ) if (creditCardDisplayData.creditCardCvv.isEmpty()) { Text( - text = stringResource(Res.string.komoju_cvv), + text = i18nStringResource(I18nStringKey.cvv), style = TextStyle(fontSize = 16.sp, color = Gray500), ) } } Image( - painter = painterResource(Res.drawable.komoju_ic_cvv), + painter = rememberVectorPainter(KomojuIcon.Cvv), contentDescription = null, modifier = Modifier.padding(start = 16.dp), ) @@ -212,7 +206,7 @@ internal fun CreditCardForm( modifier = Modifier .fillMaxWidth() .padding(horizontal = 16.dp), - text = creditCardDisplayData.creditCardErrorStringResource?.let { stringResource(it) }.orEmpty(), + text = creditCardDisplayData.creditCardErrorI18nStringKey?.let { i18nStringResource(it) }.orEmpty(), style = TextStyle(fontSize = 16.sp, color = Red600), ) @@ -223,7 +217,7 @@ internal fun CreditCardForm( .testID("credit_card_pay") .padding(horizontal = 16.dp) .fillMaxWidth(), - text = stringResource(Res.string.komoju_pay, displayPayableAmount), + text = i18nStringResource(I18nStringKey.pay, displayPayableAmount), onClick = onPayButtonClicked, state = creditCardDisplayData.inlinedPaymentPrimaryButtonState, ) @@ -233,7 +227,7 @@ internal fun CreditCardForm( .testID("credit_card_pay") .padding(horizontal = 16.dp) .fillMaxWidth(), - text = stringResource(Res.string.komoju_pay, displayPayableAmount), + text = i18nStringResource(I18nStringKey.pay, displayPayableAmount), onClick = onPayButtonClicked, ) } @@ -247,7 +241,7 @@ internal fun CreditCardForm( }, colors = CheckboxDefaults.colors(checkedColor = Color.Black, uncheckedColor = Color.Black), ) - Text(stringResource(Res.string.komoju_save_this_card_for_future_payments)) + Text(i18nStringResource(I18nStringKey.save_this_card_for_future_payments)) } } } diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/CreditCardSchemeIcons.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/CreditCardSchemeIcons.kt index d8917a8..ec46780 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/CreditCardSchemeIcons.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/CreditCardSchemeIcons.kt @@ -7,15 +7,15 @@ import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.width import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.vector.rememberVectorPainter import androidx.compose.ui.unit.dp -import komoju_mobile_sdk.shared.generated.resources.Res +import com.komoju.mobile.sdk.ui.icon.Amex +import com.komoju.mobile.sdk.ui.icon.Diners +import com.komoju.mobile.sdk.ui.icon.Jcb +import com.komoju.mobile.sdk.ui.icon.KomojuIcon +import com.komoju.mobile.sdk.ui.icon.Master +import com.komoju.mobile.sdk.ui.icon.Visa import com.komoju.mobile.sdk.utils.CardScheme -import komoju_mobile_sdk.shared.generated.resources.komoju_ic_amex -import komoju_mobile_sdk.shared.generated.resources.komoju_ic_diners -import komoju_mobile_sdk.shared.generated.resources.komoju_ic_jcb -import komoju_mobile_sdk.shared.generated.resources.komoju_ic_master -import komoju_mobile_sdk.shared.generated.resources.komoju_ic_visa -import org.jetbrains.compose.resources.painterResource import org.jetbrains.compose.ui.tooling.preview.Preview @Composable @@ -23,27 +23,27 @@ internal fun CreditCardSchemeIcons(cardScheme: CardScheme) { Row { AnimatedVisibility(visible = cardScheme == CardScheme.UNKNOWN) { Row { - Image(painter = painterResource(Res.drawable.komoju_ic_visa), contentDescription = "visa_icon") + Image(painter = rememberVectorPainter(KomojuIcon.Visa), contentDescription = "visa_icon") Spacer(Modifier.width(8.dp)) - Image(painter = painterResource(Res.drawable.komoju_ic_master), contentDescription = "mastercard_icon") + Image(painter = rememberVectorPainter(KomojuIcon.Master), contentDescription = "mastercard_icon") Spacer(Modifier.width(8.dp)) - Image(painter = painterResource(Res.drawable.komoju_ic_amex), contentDescription = "amex_icon") + Image(painter = rememberVectorPainter(KomojuIcon.Amex), contentDescription = "amex_icon") } } AnimatedVisibility(visible = cardScheme == CardScheme.VISA) { - Image(painter = painterResource(Res.drawable.komoju_ic_visa), contentDescription = "visa_icon") + Image(painter = rememberVectorPainter(KomojuIcon.Visa), contentDescription = "visa_icon") } AnimatedVisibility(visible = cardScheme == CardScheme.MASTERCARD) { - Image(painter = painterResource(Res.drawable.komoju_ic_master), contentDescription = "mastercard_icon") + Image(painter = rememberVectorPainter(KomojuIcon.Master), contentDescription = "mastercard_icon") } AnimatedVisibility(visible = cardScheme == CardScheme.AMEX) { - Image(painter = painterResource(Res.drawable.komoju_ic_amex), contentDescription = "amex_icon") + Image(painter = rememberVectorPainter(KomojuIcon.Amex), contentDescription = "amex_icon") } AnimatedVisibility(visible = cardScheme == CardScheme.DINERS_CLUB) { - Image(painter = painterResource(Res.drawable.komoju_ic_diners), contentDescription = "diners_icon") + Image(painter = rememberVectorPainter(KomojuIcon.Diners), contentDescription = "diners_icon") } AnimatedVisibility(visible = cardScheme == CardScheme.JCB) { - Image(painter = painterResource(Res.drawable.komoju_ic_jcb), contentDescription = "jcb_icon") + Image(painter = rememberVectorPainter(KomojuIcon.Jcb), contentDescription = "jcb_icon") } } } diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/KonbiniBrandsRow.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/KonbiniBrandsRow.kt index 5803485..502ea40 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/KonbiniBrandsRow.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/KonbiniBrandsRow.kt @@ -17,27 +17,22 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.vector.rememberVectorPainter import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.komoju.mobile.sdk.entities.PaymentMethod.Konbini.KonbiniBrand -import komoju_mobile_sdk.shared.generated.resources.Res +import com.komoju.mobile.sdk.i18n.I18nStringKey +import com.komoju.mobile.sdk.i18n.i18nStringResource +import com.komoju.mobile.sdk.ui.icon.DailyYamazaki +import com.komoju.mobile.sdk.ui.icon.FamilyMart +import com.komoju.mobile.sdk.ui.icon.KomojuIcon +import com.komoju.mobile.sdk.ui.icon.Lawson +import com.komoju.mobile.sdk.ui.icon.Ministop +import com.komoju.mobile.sdk.ui.icon.SeicoMart +import com.komoju.mobile.sdk.ui.icon.SevenEleven import com.komoju.mobile.sdk.ui.theme.Gray200 import com.komoju.mobile.sdk.ui.theme.KomojuDarkGreen import com.komoju.mobile.sdk.ui.theme.KomojuMobileSdkTheme -import komoju_mobile_sdk.shared.generated.resources.komoju__7_eleven -import komoju_mobile_sdk.shared.generated.resources.komoju_daily_yamazaki -import komoju_mobile_sdk.shared.generated.resources.komoju_family_mart -import komoju_mobile_sdk.shared.generated.resources.komoju_ic_daily_yamazaki -import komoju_mobile_sdk.shared.generated.resources.komoju_ic_family_mart -import komoju_mobile_sdk.shared.generated.resources.komoju_ic_lawson -import komoju_mobile_sdk.shared.generated.resources.komoju_ic_ministop -import komoju_mobile_sdk.shared.generated.resources.komoju_ic_seico_mart -import komoju_mobile_sdk.shared.generated.resources.komoju_ic_seven_eleven -import komoju_mobile_sdk.shared.generated.resources.komoju_lawson -import komoju_mobile_sdk.shared.generated.resources.komoju_ministop -import komoju_mobile_sdk.shared.generated.resources.komoju_seicomart -import org.jetbrains.compose.resources.painterResource -import org.jetbrains.compose.resources.stringResource import org.jetbrains.compose.ui.tooling.preview.Preview @Composable @@ -67,7 +62,7 @@ private fun KonbiniBrand(konbiniBrand: KonbiniBrand, isSelected: Boolean, onSele .padding(8.dp), ) { Image( - painter = painterResource(konbiniBrand.displayIcon), + painter = rememberVectorPainter(konbiniBrand.displayIcon), contentDescription = "${konbiniBrand.key} icon", modifier = Modifier.size(32.dp), ) @@ -79,22 +74,22 @@ private fun KonbiniBrand(konbiniBrand: KonbiniBrand, isSelected: Boolean, onSele private val KonbiniBrand.displayText @Composable get() = when (this) { - is KonbiniBrand.DailyYamazaki -> stringResource(Res.string.komoju_daily_yamazaki) - is KonbiniBrand.FamilyMart -> stringResource(Res.string.komoju_family_mart) - is KonbiniBrand.Lawson -> stringResource(Res.string.komoju_lawson) - is KonbiniBrand.MiniStop -> stringResource(Res.string.komoju_ministop) - is KonbiniBrand.SeicoMart -> stringResource(Res.string.komoju_seicomart) - is KonbiniBrand.SevenEleven -> stringResource(Res.string.komoju__7_eleven) + is KonbiniBrand.DailyYamazaki -> i18nStringResource(I18nStringKey.daily_yamazaki) + is KonbiniBrand.FamilyMart -> i18nStringResource(I18nStringKey.family_mart) + is KonbiniBrand.Lawson -> i18nStringResource(I18nStringKey.lawson) + is KonbiniBrand.MiniStop -> i18nStringResource(I18nStringKey.ministop) + is KonbiniBrand.SeicoMart -> i18nStringResource(I18nStringKey.seicomart) + is KonbiniBrand.SevenEleven -> i18nStringResource(I18nStringKey._7_eleven) } private val KonbiniBrand.displayIcon get() = when (this) { - is KonbiniBrand.DailyYamazaki -> Res.drawable.komoju_ic_daily_yamazaki - is KonbiniBrand.FamilyMart -> Res.drawable.komoju_ic_family_mart - is KonbiniBrand.Lawson -> Res.drawable.komoju_ic_lawson - is KonbiniBrand.MiniStop -> Res.drawable.komoju_ic_ministop - is KonbiniBrand.SeicoMart -> Res.drawable.komoju_ic_seico_mart - is KonbiniBrand.SevenEleven -> Res.drawable.komoju_ic_seven_eleven + is KonbiniBrand.DailyYamazaki -> KomojuIcon.DailyYamazaki + is KonbiniBrand.FamilyMart -> KomojuIcon.FamilyMart + is KonbiniBrand.Lawson -> KomojuIcon.Lawson + is KonbiniBrand.MiniStop -> KomojuIcon.Ministop + is KonbiniBrand.SeicoMart -> KomojuIcon.SeicoMart + is KonbiniBrand.SevenEleven -> KomojuIcon.SevenEleven } @Composable diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/KonbiniForm.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/KonbiniForm.kt index 136f161..001e6e3 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/KonbiniForm.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/KonbiniForm.kt @@ -19,19 +19,14 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.komoju.mobile.sdk.entities.PaymentMethod import com.komoju.mobile.sdk.entities.PaymentMethod.Konbini.KonbiniBrand -import komoju_mobile_sdk.shared.generated.resources.Res +import com.komoju.mobile.sdk.i18n.I18nStringKey +import com.komoju.mobile.sdk.i18n.i18nStringResource import com.komoju.mobile.sdk.ui.composables.PrimaryButton import com.komoju.mobile.sdk.ui.screens.payment.CommonDisplayData import com.komoju.mobile.sdk.ui.screens.payment.KonbiniDisplayData import com.komoju.mobile.sdk.ui.theme.KomojuMobileSdkTheme import com.komoju.mobile.sdk.ui.theme.Red600 import com.komoju.mobile.sdk.utils.AmountUtils -import komoju_mobile_sdk.shared.generated.resources.komoju_email -import komoju_mobile_sdk.shared.generated.resources.komoju_enter_your_email_address -import komoju_mobile_sdk.shared.generated.resources.komoju_full_name_on_receipt -import komoju_mobile_sdk.shared.generated.resources.komoju_name_shown_on_receipt -import komoju_mobile_sdk.shared.generated.resources.komoju_pay -import org.jetbrains.compose.resources.stringResource import org.jetbrains.compose.ui.tooling.preview.Preview @Composable @@ -51,18 +46,18 @@ internal fun KonbiniForm( Column { TextField( konbiniDisplayData.receiptName, - title = stringResource(Res.string.komoju_name_shown_on_receipt), - placeholder = stringResource(Res.string.komoju_full_name_on_receipt), - error = konbiniDisplayData.receiptNameErrorStringResource?.let { stringResource(it) }, + title = i18nStringResource(I18nStringKey.name_shown_on_receipt), + placeholder = i18nStringResource(I18nStringKey.full_name_on_receipt), + error = konbiniDisplayData.receiptNameErrorI18nStringKey?.let { i18nStringResource(it) }, onValueChange = { onKonbiniDisplayDataChange(konbiniDisplayData.copy(receiptName = it)) }, ) TextField( commonDisplayData.email, - title = stringResource(Res.string.komoju_email), - placeholder = stringResource(Res.string.komoju_enter_your_email_address), - error = konbiniDisplayData.receiptEmailErrorStringResource?.let { stringResource(it) }, + title = i18nStringResource(I18nStringKey.email), + placeholder = i18nStringResource(I18nStringKey.enter_your_email_address), + error = konbiniDisplayData.receiptEmailErrorI18nStringKey?.let { i18nStringResource(it) }, onValueChange = { onCommonDisplayDataChange(commonDisplayData.copy(email = it)) }, @@ -80,14 +75,14 @@ internal fun KonbiniForm( modifier = Modifier .fillMaxWidth() .padding(horizontal = 16.dp), - text = konbiniDisplayData.konbiniBrandNullErrorStringResource?.let { stringResource(it) }.orEmpty(), + text = konbiniDisplayData.konbiniBrandNullErrorI18nStringKey?.let { i18nStringResource(it) }.orEmpty(), style = TextStyle(fontSize = 16.sp, color = Red600), ) PrimaryButton( modifier = Modifier .padding(16.dp) .fillMaxWidth(), - text = stringResource(Res.string.komoju_pay, displayPayableAmount), + text = i18nStringResource(I18nStringKey.pay, displayPayableAmount), onClick = onPayButtonClicked, ) } diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/NetCashForm.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/NetCashForm.kt index 7ce6a32..cd0be4c 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/NetCashForm.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/NetCashForm.kt @@ -12,14 +12,11 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import com.komoju.mobile.sdk.entities.PaymentMethod -import komoju_mobile_sdk.shared.generated.resources.Res +import com.komoju.mobile.sdk.i18n.I18nStringKey +import com.komoju.mobile.sdk.i18n.i18nStringResource import com.komoju.mobile.sdk.ui.composables.PrimaryButton import com.komoju.mobile.sdk.ui.screens.payment.NetCashDisplayData import com.komoju.mobile.sdk.utils.AmountUtils -import komoju_mobile_sdk.shared.generated.resources.komoju_net_cash_id -import komoju_mobile_sdk.shared.generated.resources.komoju_net_cash_information -import komoju_mobile_sdk.shared.generated.resources.komoju_pay -import org.jetbrains.compose.resources.stringResource @Composable internal fun NetCashForm( @@ -36,19 +33,19 @@ internal fun NetCashForm( Column { TextField( value = netCashDisplayData.netCashId, - title = stringResource(Res.string.komoju_net_cash_information), - placeholder = stringResource(Res.string.komoju_net_cash_id), + title = i18nStringResource(I18nStringKey.net_cash_information), + placeholder = i18nStringResource(I18nStringKey.net_cash_id), onValueChange = { onNetCashDisplayDataChange(netCashDisplayData.copy(netCashId = it)) }, - error = netCashDisplayData.netCashErrorStringResource?.let { stringResource(it) }, + error = netCashDisplayData.netCashErrorI18nStringKey?.let { i18nStringResource(it) }, ) Spacer(modifier = Modifier.height(16.dp)) PrimaryButton( modifier = Modifier .padding(16.dp) .fillMaxWidth(), - text = stringResource(Res.string.komoju_pay, displayPayableAmount), + text = i18nStringResource(I18nStringKey.pay, displayPayableAmount), onClick = onPayButtonClicked, ) } diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/OffSitePayForm.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/OffSitePayForm.kt index 51da283..8c8a923 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/OffSitePayForm.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/OffSitePayForm.kt @@ -17,82 +17,64 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.vector.rememberVectorPainter import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.komoju.mobile.sdk.entities.PaymentMethod -import komoju_mobile_sdk.shared.generated.resources.Res +import com.komoju.mobile.sdk.i18n.I18nStringKey +import com.komoju.mobile.sdk.i18n.i18nStringResource import com.komoju.mobile.sdk.types.OffSitePaymentType import com.komoju.mobile.sdk.ui.composables.PrimaryButton +import com.komoju.mobile.sdk.ui.icon.AppOpensInfo +import com.komoju.mobile.sdk.ui.icon.KomojuIcon import com.komoju.mobile.sdk.ui.theme.KomojuMobileSdkTheme -import komoju_mobile_sdk.shared.generated.resources.komoju_continue_to_alipay -import komoju_mobile_sdk.shared.generated.resources.komoju_continue_to_aupay -import komoju_mobile_sdk.shared.generated.resources.komoju_continue_to_linepay -import komoju_mobile_sdk.shared.generated.resources.komoju_continue_to_merpay -import komoju_mobile_sdk.shared.generated.resources.komoju_continue_to_paypay -import komoju_mobile_sdk.shared.generated.resources.komoju_continue_to_rakuten -import komoju_mobile_sdk.shared.generated.resources.komoju_ic_app_opens_info -import komoju_mobile_sdk.shared.generated.resources.komoju_payment_via_alipay -import komoju_mobile_sdk.shared.generated.resources.komoju_payment_via_au_pay -import komoju_mobile_sdk.shared.generated.resources.komoju_payment_via_line_pay -import komoju_mobile_sdk.shared.generated.resources.komoju_payment_via_mer_pay -import komoju_mobile_sdk.shared.generated.resources.komoju_payment_via_paypay -import komoju_mobile_sdk.shared.generated.resources.komoju_payment_via_rakuten_pay -import komoju_mobile_sdk.shared.generated.resources.komoju_webview_open_info -import komoju_mobile_sdk.shared.generated.resources.komoju_you_will_be_redirected_to_alipay -import komoju_mobile_sdk.shared.generated.resources.komoju_you_will_be_redirected_to_au_pay -import komoju_mobile_sdk.shared.generated.resources.komoju_you_will_be_redirected_to_line_pay -import komoju_mobile_sdk.shared.generated.resources.komoju_you_will_be_redirected_to_mer_pay -import komoju_mobile_sdk.shared.generated.resources.komoju_you_will_be_redirected_to_paypay -import komoju_mobile_sdk.shared.generated.resources.komoju_you_will_be_redirected_to_rakuten -import org.jetbrains.compose.resources.painterResource -import org.jetbrains.compose.resources.stringResource import org.jetbrains.compose.ui.tooling.preview.Preview @Composable internal fun OffSitePayForm(paymentMethod: PaymentMethod.OffSitePayment, onPayButtonClicked: () -> Unit) { val titleKey = remember(paymentMethod) { when (paymentMethod.type) { - OffSitePaymentType.ALI_PAY -> Res.string.komoju_payment_via_alipay - OffSitePaymentType.AU_PAY -> Res.string.komoju_payment_via_au_pay - OffSitePaymentType.MER_PAY -> Res.string.komoju_payment_via_mer_pay - OffSitePaymentType.PAY_PAY -> Res.string.komoju_payment_via_paypay - OffSitePaymentType.RAKUTEN_PAY -> Res.string.komoju_payment_via_rakuten_pay - OffSitePaymentType.LINE_PAY -> Res.string.komoju_payment_via_line_pay + OffSitePaymentType.ALI_PAY -> I18nStringKey.payment_via_alipay + OffSitePaymentType.AU_PAY -> I18nStringKey.payment_via_au_pay + OffSitePaymentType.MER_PAY -> I18nStringKey.payment_via_mer_pay + OffSitePaymentType.PAY_PAY -> I18nStringKey.payment_via_paypay + OffSitePaymentType.RAKUTEN_PAY -> I18nStringKey.payment_via_rakuten_pay + OffSitePaymentType.LINE_PAY -> I18nStringKey.payment_via_line_pay else -> null } } val messageKey = remember(paymentMethod) { when (paymentMethod.type) { - OffSitePaymentType.ALI_PAY -> Res.string.komoju_you_will_be_redirected_to_alipay - OffSitePaymentType.AU_PAY -> Res.string.komoju_you_will_be_redirected_to_au_pay - OffSitePaymentType.MER_PAY -> Res.string.komoju_you_will_be_redirected_to_mer_pay - OffSitePaymentType.PAY_PAY -> Res.string.komoju_you_will_be_redirected_to_paypay - OffSitePaymentType.RAKUTEN_PAY -> Res.string.komoju_you_will_be_redirected_to_rakuten - OffSitePaymentType.LINE_PAY -> Res.string.komoju_you_will_be_redirected_to_line_pay + OffSitePaymentType.ALI_PAY -> I18nStringKey.you_will_be_redirected_to_alipay + OffSitePaymentType.AU_PAY -> I18nStringKey.you_will_be_redirected_to_au_pay + OffSitePaymentType.MER_PAY -> I18nStringKey.you_will_be_redirected_to_mer_pay + OffSitePaymentType.PAY_PAY -> I18nStringKey.you_will_be_redirected_to_paypay + OffSitePaymentType.RAKUTEN_PAY -> I18nStringKey.you_will_be_redirected_to_rakuten + OffSitePaymentType.LINE_PAY -> I18nStringKey.you_will_be_redirected_to_line_pay else -> null } } val paymentButtonKey = remember(paymentMethod) { when (paymentMethod.type) { - OffSitePaymentType.ALI_PAY -> Res.string.komoju_continue_to_alipay - OffSitePaymentType.AU_PAY -> Res.string.komoju_continue_to_aupay - OffSitePaymentType.MER_PAY -> Res.string.komoju_continue_to_merpay - OffSitePaymentType.PAY_PAY -> Res.string.komoju_continue_to_paypay - OffSitePaymentType.RAKUTEN_PAY -> Res.string.komoju_continue_to_rakuten - OffSitePaymentType.LINE_PAY -> Res.string.komoju_continue_to_linepay + OffSitePaymentType.ALI_PAY -> I18nStringKey.continue_to_alipay + OffSitePaymentType.AU_PAY -> I18nStringKey.continue_to_aupay + OffSitePaymentType.MER_PAY -> I18nStringKey.continue_to_merpay + OffSitePaymentType.PAY_PAY -> I18nStringKey.continue_to_paypay + OffSitePaymentType.RAKUTEN_PAY -> I18nStringKey.continue_to_rakuten + OffSitePaymentType.LINE_PAY -> I18nStringKey.continue_to_linepay else -> null } } if (titleKey != null && messageKey != null && paymentButtonKey != null) { Column(modifier = Modifier.padding(all = 16.dp)) { - Text(text = stringResource(titleKey), style = TextStyle(fontWeight = FontWeight.Bold, fontSize = 24.sp)) + Text(text = i18nStringResource(titleKey), style = TextStyle(fontWeight = FontWeight.Bold, fontSize = 24.sp)) Spacer(modifier = Modifier.height(12.dp)) - Text(text = stringResource(messageKey)) + Text(text = i18nStringResource(messageKey)) Spacer(modifier = Modifier.height(24.dp)) Row( modifier = Modifier @@ -101,15 +83,15 @@ internal fun OffSitePayForm(paymentMethod: PaymentMethod.OffSitePayment, onPayBu verticalAlignment = Alignment.CenterVertically, ) { Image( - painter = painterResource(Res.drawable.komoju_ic_app_opens_info), + painter = rememberVectorPainter(KomojuIcon.AppOpensInfo), contentDescription = "app_opens_info", modifier = Modifier.size(32.dp), ) Spacer(modifier = Modifier.width(16.dp)) - Text(text = stringResource(Res.string.komoju_webview_open_info)) + Text(text = i18nStringResource(I18nStringKey.webview_open_info)) } Spacer(modifier = Modifier.height(32.dp)) - PrimaryButton(stringResource(paymentButtonKey), modifier = Modifier.fillMaxWidth(), onPayButtonClicked) + PrimaryButton(i18nStringResource(paymentButtonKey), modifier = Modifier.fillMaxWidth(), onPayButtonClicked) } } } diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PaidyForm.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PaidyForm.kt index 59fab46..f58fd6b 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PaidyForm.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PaidyForm.kt @@ -13,17 +13,12 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.unit.dp import com.komoju.mobile.sdk.entities.PaymentMethod -import komoju_mobile_sdk.shared.generated.resources.Res +import com.komoju.mobile.sdk.i18n.I18nStringKey +import com.komoju.mobile.sdk.i18n.i18nStringResource import com.komoju.mobile.sdk.ui.composables.PrimaryButton import com.komoju.mobile.sdk.ui.screens.payment.PaidyDisplayData import com.komoju.mobile.sdk.ui.theme.KomojuMobileSdkTheme import com.komoju.mobile.sdk.utils.AmountUtils -import komoju_mobile_sdk.shared.generated.resources.komoju_enter_your_name -import komoju_mobile_sdk.shared.generated.resources.komoju_enter_your_phone_number -import komoju_mobile_sdk.shared.generated.resources.komoju_full_name -import komoju_mobile_sdk.shared.generated.resources.komoju_pay -import komoju_mobile_sdk.shared.generated.resources.komoju_phone_number -import org.jetbrains.compose.resources.stringResource import org.jetbrains.compose.ui.tooling.preview.Preview @Composable @@ -41,28 +36,28 @@ internal fun PaidyForm( Column { TextField( value = paidyDisplayData.fullName, - title = stringResource(Res.string.komoju_full_name), - placeholder = stringResource(Res.string.komoju_enter_your_name), + title = i18nStringResource(I18nStringKey.full_name), + placeholder = i18nStringResource(I18nStringKey.enter_your_name), onValueChange = { onPaidyDisplayDataChange(paidyDisplayData.copy(fullName = it)) }, - error = paidyDisplayData.fullNameErrorStringResource?.let { stringResource(it) }, + error = paidyDisplayData.fullNameErrorI18nStringKey?.let { i18nStringResource(it) }, ) TextField( value = paidyDisplayData.phoneNumber, - title = stringResource(Res.string.komoju_phone_number), - placeholder = stringResource(Res.string.komoju_enter_your_phone_number), + title = i18nStringResource(I18nStringKey.phone_number), + placeholder = i18nStringResource(I18nStringKey.enter_your_phone_number), keyboardType = KeyboardType.Phone, onValueChange = { onPaidyDisplayDataChange(paidyDisplayData.copy(phoneNumber = it)) }, - error = paidyDisplayData.phoneNumberErrorStringResource?.let { stringResource(it) }, + error = paidyDisplayData.phoneNumberErrorI18nStringKey?.let { i18nStringResource(it) }, ) PrimaryButton( modifier = Modifier .padding(16.dp) .fillMaxWidth(), - text = stringResource(Res.string.komoju_pay, displayPayableAmount), + text = i18nStringResource(I18nStringKey.pay, displayPayableAmount), onClick = onPayButtonClicked, ) } diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PayEasyForm.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PayEasyForm.kt index 04338ff..1ace041 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PayEasyForm.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PayEasyForm.kt @@ -14,20 +14,11 @@ import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.unit.dp import com.komoju.mobile.sdk.entities.PaymentMethod -import komoju_mobile_sdk.shared.generated.resources.Res +import com.komoju.mobile.sdk.i18n.I18nStringKey +import com.komoju.mobile.sdk.i18n.i18nStringResource import com.komoju.mobile.sdk.ui.composables.PrimaryButton import com.komoju.mobile.sdk.ui.screens.payment.CommonDisplayData import com.komoju.mobile.sdk.utils.AmountUtils -import komoju_mobile_sdk.shared.generated.resources.komoju_email -import komoju_mobile_sdk.shared.generated.resources.komoju_enter_your_email_address -import komoju_mobile_sdk.shared.generated.resources.komoju_enter_your_phone_number -import komoju_mobile_sdk.shared.generated.resources.komoju_first_name -import komoju_mobile_sdk.shared.generated.resources.komoju_first_name_phonetic -import komoju_mobile_sdk.shared.generated.resources.komoju_last_name -import komoju_mobile_sdk.shared.generated.resources.komoju_last_name_phonetic -import komoju_mobile_sdk.shared.generated.resources.komoju_pay -import komoju_mobile_sdk.shared.generated.resources.komoju_phone_number -import org.jetbrains.compose.resources.stringResource @Composable internal fun PayEasyForm( @@ -47,38 +38,38 @@ internal fun PayEasyForm( .fillMaxWidth() .padding(horizontal = 16.dp), value = commonDisplayData.lastName, - title = stringResource(Res.string.komoju_last_name), - placeholder = stringResource(Res.string.komoju_last_name), + title = i18nStringResource(I18nStringKey.last_name), + placeholder = i18nStringResource(I18nStringKey.last_name), onValueChange = { onCommonDisplayDataChange(commonDisplayData.copy(lastName = it)) }, keyboardType = KeyboardType.Text, imeActions = ImeAction.Next, singleLine = true, - error = commonDisplayData.lastNameErrorStringResource?.let { stringResource(it) }, + error = commonDisplayData.lastNameErrorI18nStringKey, ) CompatTextField( modifier = Modifier .fillMaxWidth() .padding(horizontal = 16.dp), value = commonDisplayData.firstName, - title = stringResource(Res.string.komoju_first_name), - placeholder = stringResource(Res.string.komoju_first_name), + title = i18nStringResource(I18nStringKey.first_name), + placeholder = i18nStringResource(I18nStringKey.first_name), onValueChange = { onCommonDisplayDataChange(commonDisplayData.copy(firstName = it)) }, keyboardType = KeyboardType.Text, imeActions = ImeAction.Next, singleLine = true, - error = commonDisplayData.firstNameErrorStringResource?.let { stringResource(it) }, + error = commonDisplayData.firstNameErrorI18nStringKey, ) CompatTextField( modifier = Modifier .fillMaxWidth() .padding(horizontal = 16.dp), value = commonDisplayData.lastNamePhonetic, - title = stringResource(Res.string.komoju_last_name_phonetic), - placeholder = stringResource(Res.string.komoju_last_name_phonetic), + title = i18nStringResource(I18nStringKey.last_name_phonetic), + placeholder = i18nStringResource(I18nStringKey.last_name_phonetic), onValueChange = { onCommonDisplayDataChange(commonDisplayData.copy(lastNamePhonetic = it)) }, @@ -86,15 +77,15 @@ internal fun PayEasyForm( keyBoardLocale = JAPANESE_LOCALE, imeActions = ImeAction.Next, singleLine = true, - error = commonDisplayData.lastNamePhoneticErrorStringResource?.let { stringResource(it) }, + error = commonDisplayData.lastNamePhoneticErrorI18nStringKey, ) CompatTextField( modifier = Modifier .fillMaxWidth() .padding(horizontal = 16.dp), value = commonDisplayData.firstNamePhonetic, - title = stringResource(Res.string.komoju_first_name_phonetic), - placeholder = stringResource(Res.string.komoju_first_name_phonetic), + title = i18nStringResource(I18nStringKey.first_name_phonetic), + placeholder = i18nStringResource(I18nStringKey.first_name_phonetic), onValueChange = { onCommonDisplayDataChange(commonDisplayData.copy(firstNamePhonetic = it)) }, @@ -102,44 +93,44 @@ internal fun PayEasyForm( keyBoardLocale = JAPANESE_LOCALE, imeActions = ImeAction.Next, singleLine = true, - error = commonDisplayData.firstNamePhoneticErrorStringResource?.let { stringResource(it) }, + error = commonDisplayData.firstNamePhoneticErrorI18nStringKey, ) CompatTextField( modifier = Modifier .fillMaxWidth() .padding(horizontal = 16.dp), value = commonDisplayData.email, - title = stringResource(Res.string.komoju_email), - placeholder = stringResource(Res.string.komoju_enter_your_email_address), + title = i18nStringResource(I18nStringKey.email), + placeholder = i18nStringResource(I18nStringKey.enter_your_email_address), onValueChange = { onCommonDisplayDataChange(commonDisplayData.copy(email = it)) }, keyboardType = KeyboardType.Email, imeActions = ImeAction.Next, singleLine = true, - error = commonDisplayData.emailErrorStringResource?.let { stringResource(it) }, + error = commonDisplayData.emailErrorI18nStringKey, ) CompatTextField( modifier = Modifier .fillMaxWidth() .padding(horizontal = 16.dp), value = commonDisplayData.phoneNumber, - title = stringResource(Res.string.komoju_phone_number), - placeholder = stringResource(Res.string.komoju_enter_your_phone_number), + title = i18nStringResource(I18nStringKey.phone_number), + placeholder = i18nStringResource(I18nStringKey.enter_your_phone_number), onValueChange = { onCommonDisplayDataChange(commonDisplayData.copy(phoneNumber = it)) }, keyboardType = KeyboardType.Number, imeActions = ImeAction.Done, singleLine = true, - error = commonDisplayData.phoneNumberErrorStringResource?.let { stringResource(it) }, + error = commonDisplayData.phoneNumberErrorI18nStringKey, ) Spacer(modifier = Modifier.height(16.dp)) PrimaryButton( modifier = Modifier .padding(16.dp) .fillMaxWidth(), - text = stringResource(Res.string.komoju_pay, displayPayableAmount), + text = i18nStringResource(I18nStringKey.pay, displayPayableAmount), onClick = onPayButtonClicked, ) } diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PaymentMethodsRow.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PaymentMethodsRow.kt index a0b5423..6d4f90b 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PaymentMethodsRow.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PaymentMethodsRow.kt @@ -17,46 +17,31 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.vector.rememberVectorPainter import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.komoju.mobile.sdk.entities.PaymentMethod -import komoju_mobile_sdk.shared.generated.resources.Res +import com.komoju.mobile.sdk.i18n.I18nStringKey +import com.komoju.mobile.sdk.i18n.i18nStringResource import com.komoju.mobile.sdk.types.OffSitePaymentType +import com.komoju.mobile.sdk.ui.icon.Alipay +import com.komoju.mobile.sdk.ui.icon.AuPay +import com.komoju.mobile.sdk.ui.icon.BankTransfer +import com.komoju.mobile.sdk.ui.icon.Bitcash +import com.komoju.mobile.sdk.ui.icon.CreditCard +import com.komoju.mobile.sdk.ui.icon.KomojuIcon +import com.komoju.mobile.sdk.ui.icon.Konbini +import com.komoju.mobile.sdk.ui.icon.Linepay +import com.komoju.mobile.sdk.ui.icon.Merpay +import com.komoju.mobile.sdk.ui.icon.NetCash +import com.komoju.mobile.sdk.ui.icon.Paidy +import com.komoju.mobile.sdk.ui.icon.PayEasy +import com.komoju.mobile.sdk.ui.icon.Paypay +import com.komoju.mobile.sdk.ui.icon.RakutenPay +import com.komoju.mobile.sdk.ui.icon.WebMoney import com.komoju.mobile.sdk.ui.theme.Gray200 import com.komoju.mobile.sdk.ui.theme.KomojuDarkGreen -import komoju_mobile_sdk.shared.generated.resources.komoju_alipay -import komoju_mobile_sdk.shared.generated.resources.komoju_aupay -import komoju_mobile_sdk.shared.generated.resources.komoju_bank_transfer -import komoju_mobile_sdk.shared.generated.resources.komoju_bitcash -import komoju_mobile_sdk.shared.generated.resources.komoju_credit_card -import komoju_mobile_sdk.shared.generated.resources.komoju_ic_alipay -import komoju_mobile_sdk.shared.generated.resources.komoju_ic_au_pay -import komoju_mobile_sdk.shared.generated.resources.komoju_ic_bank_transfer -import komoju_mobile_sdk.shared.generated.resources.komoju_ic_bitcash -import komoju_mobile_sdk.shared.generated.resources.komoju_ic_credit_card -import komoju_mobile_sdk.shared.generated.resources.komoju_ic_konbini -import komoju_mobile_sdk.shared.generated.resources.komoju_ic_linepay -import komoju_mobile_sdk.shared.generated.resources.komoju_ic_merpay -import komoju_mobile_sdk.shared.generated.resources.komoju_ic_net_cash -import komoju_mobile_sdk.shared.generated.resources.komoju_ic_paidy -import komoju_mobile_sdk.shared.generated.resources.komoju_ic_pay_easy -import komoju_mobile_sdk.shared.generated.resources.komoju_ic_paypay -import komoju_mobile_sdk.shared.generated.resources.komoju_ic_rakuten_pay -import komoju_mobile_sdk.shared.generated.resources.komoju_ic_web_money -import komoju_mobile_sdk.shared.generated.resources.komoju_konbini -import komoju_mobile_sdk.shared.generated.resources.komoju_line_pay -import komoju_mobile_sdk.shared.generated.resources.komoju_merpay -import komoju_mobile_sdk.shared.generated.resources.komoju_netcash -import komoju_mobile_sdk.shared.generated.resources.komoju_other -import komoju_mobile_sdk.shared.generated.resources.komoju_paidy -import komoju_mobile_sdk.shared.generated.resources.komoju_payeasy -import komoju_mobile_sdk.shared.generated.resources.komoju_paypay -import komoju_mobile_sdk.shared.generated.resources.komoju_rakuten_pay -import komoju_mobile_sdk.shared.generated.resources.komoju_unknown -import komoju_mobile_sdk.shared.generated.resources.komoju_webmoney -import org.jetbrains.compose.resources.painterResource -import org.jetbrains.compose.resources.stringResource import org.jetbrains.compose.ui.tooling.preview.Preview @Composable @@ -90,7 +75,7 @@ private fun PaymentMethodComposable(paymentMethod: PaymentMethod, isSelected: Bo .padding(start = 12.dp, end = 12.dp, top = 12.dp, bottom = 8.dp), ) { Image( - painter = painterResource(paymentMethod.displayIcon), + painter = rememberVectorPainter(paymentMethod.displayIcon), contentDescription = "${paymentMethod.displayName} icon", modifier = Modifier.height(32.dp), ) @@ -102,47 +87,47 @@ private fun PaymentMethodComposable(paymentMethod: PaymentMethod, isSelected: Bo private val PaymentMethod.displayName @Composable get() = when (this) { - is PaymentMethod.BankTransfer -> stringResource(Res.string.komoju_bank_transfer) - is PaymentMethod.BitCash -> stringResource(Res.string.komoju_bitcash) - is PaymentMethod.CreditCard -> stringResource(Res.string.komoju_credit_card) - is PaymentMethod.Konbini -> stringResource(Res.string.komoju_konbini) - is PaymentMethod.NetCash -> stringResource(Res.string.komoju_netcash) + is PaymentMethod.BankTransfer -> i18nStringResource(I18nStringKey.bank_transfer) + is PaymentMethod.BitCash -> i18nStringResource(I18nStringKey.bitcash) + is PaymentMethod.CreditCard -> i18nStringResource(I18nStringKey.credit_card) + is PaymentMethod.Konbini -> i18nStringResource(I18nStringKey.konbini) + is PaymentMethod.NetCash -> i18nStringResource(I18nStringKey.netcash) is PaymentMethod.OffSitePayment -> when (type) { - OffSitePaymentType.AU_PAY -> stringResource(Res.string.komoju_aupay) - OffSitePaymentType.ALI_PAY -> stringResource(Res.string.komoju_alipay) - OffSitePaymentType.MER_PAY -> stringResource(Res.string.komoju_merpay) - OffSitePaymentType.PAY_PAY -> stringResource(Res.string.komoju_paypay) - OffSitePaymentType.RAKUTEN_PAY -> stringResource(Res.string.komoju_rakuten_pay) - OffSitePaymentType.LINE_PAY -> stringResource(Res.string.komoju_line_pay) - OffSitePaymentType.UNKNOWN -> stringResource(Res.string.komoju_unknown) + OffSitePaymentType.AU_PAY -> i18nStringResource(I18nStringKey.aupay) + OffSitePaymentType.ALI_PAY -> i18nStringResource(I18nStringKey.alipay) + OffSitePaymentType.MER_PAY -> i18nStringResource(I18nStringKey.merpay) + OffSitePaymentType.PAY_PAY -> i18nStringResource(I18nStringKey.paypay) + OffSitePaymentType.RAKUTEN_PAY -> i18nStringResource(I18nStringKey.rakuten_pay) + OffSitePaymentType.LINE_PAY -> i18nStringResource(I18nStringKey.line_pay) + OffSitePaymentType.UNKNOWN -> i18nStringResource(I18nStringKey.unknown) } - is PaymentMethod.Other -> stringResource(Res.string.komoju_other) - is PaymentMethod.Paidy -> stringResource(Res.string.komoju_paidy) - is PaymentMethod.PayEasy -> stringResource(Res.string.komoju_payeasy) - is PaymentMethod.WebMoney -> stringResource(Res.string.komoju_webmoney) + is PaymentMethod.Other -> i18nStringResource(I18nStringKey.other) + is PaymentMethod.Paidy -> i18nStringResource(I18nStringKey.paidy) + is PaymentMethod.PayEasy -> i18nStringResource(I18nStringKey.payeasy) + is PaymentMethod.WebMoney -> i18nStringResource(I18nStringKey.webmoney) } private val PaymentMethod.displayIcon get() = when (this) { is PaymentMethod.OffSitePayment -> when (type) { - OffSitePaymentType.ALI_PAY -> Res.drawable.komoju_ic_alipay - OffSitePaymentType.AU_PAY -> Res.drawable.komoju_ic_au_pay - OffSitePaymentType.MER_PAY -> Res.drawable.komoju_ic_merpay - OffSitePaymentType.PAY_PAY -> Res.drawable.komoju_ic_paypay - OffSitePaymentType.RAKUTEN_PAY -> Res.drawable.komoju_ic_rakuten_pay - OffSitePaymentType.LINE_PAY -> Res.drawable.komoju_ic_linepay - OffSitePaymentType.UNKNOWN -> Res.drawable.komoju_ic_credit_card + OffSitePaymentType.ALI_PAY -> KomojuIcon.Alipay + OffSitePaymentType.AU_PAY -> KomojuIcon.AuPay + OffSitePaymentType.MER_PAY -> KomojuIcon.Merpay + OffSitePaymentType.PAY_PAY -> KomojuIcon.Paypay + OffSitePaymentType.RAKUTEN_PAY -> KomojuIcon.RakutenPay + OffSitePaymentType.LINE_PAY -> KomojuIcon.Linepay + OffSitePaymentType.UNKNOWN -> KomojuIcon.CreditCard } - is PaymentMethod.BankTransfer -> Res.drawable.komoju_ic_bank_transfer - is PaymentMethod.BitCash -> Res.drawable.komoju_ic_bitcash - is PaymentMethod.CreditCard -> Res.drawable.komoju_ic_credit_card - is PaymentMethod.Konbini -> Res.drawable.komoju_ic_konbini - is PaymentMethod.NetCash -> Res.drawable.komoju_ic_net_cash - is PaymentMethod.Paidy -> Res.drawable.komoju_ic_paidy - is PaymentMethod.PayEasy -> Res.drawable.komoju_ic_pay_easy - is PaymentMethod.WebMoney -> Res.drawable.komoju_ic_web_money - is PaymentMethod.Other -> Res.drawable.komoju_ic_credit_card + is PaymentMethod.BankTransfer -> KomojuIcon.BankTransfer + is PaymentMethod.BitCash -> KomojuIcon.Bitcash + is PaymentMethod.CreditCard -> KomojuIcon.CreditCard + is PaymentMethod.Konbini -> KomojuIcon.Konbini + is PaymentMethod.NetCash -> KomojuIcon.NetCash + is PaymentMethod.Paidy -> KomojuIcon.Paidy + is PaymentMethod.PayEasy -> KomojuIcon.PayEasy + is PaymentMethod.WebMoney -> KomojuIcon.WebMoney + is PaymentMethod.Other -> KomojuIcon.CreditCard } @Composable diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/WebMoneyForm.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/WebMoneyForm.kt index ddd3aa7..8e44680 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/WebMoneyForm.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/WebMoneyForm.kt @@ -12,14 +12,11 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import com.komoju.mobile.sdk.entities.PaymentMethod -import komoju_mobile_sdk.shared.generated.resources.Res +import com.komoju.mobile.sdk.i18n.I18nStringKey +import com.komoju.mobile.sdk.i18n.i18nStringResource import com.komoju.mobile.sdk.ui.composables.PrimaryButton import com.komoju.mobile.sdk.ui.screens.payment.WebMoneyDisplayData import com.komoju.mobile.sdk.utils.AmountUtils -import komoju_mobile_sdk.shared.generated.resources.komoju_pay -import komoju_mobile_sdk.shared.generated.resources.komoju_prepaid_number -import komoju_mobile_sdk.shared.generated.resources.komoju_webmoney_information -import org.jetbrains.compose.resources.stringResource @Composable internal fun WebMoneyForm( @@ -36,19 +33,19 @@ internal fun WebMoneyForm( Column { TextField( value = webMoneyDisplayData.prepaidNumber, - title = stringResource(Res.string.komoju_webmoney_information), - placeholder = stringResource(Res.string.komoju_prepaid_number), + title = i18nStringResource(I18nStringKey.webmoney_information), + placeholder = i18nStringResource(I18nStringKey.prepaid_number), onValueChange = { onWebMoneyDisplayDataChange(webMoneyDisplayData.copy(prepaidNumber = it)) }, - error = webMoneyDisplayData.prepaidNumberErrorStringResource?.let { stringResource(it) }, + error = webMoneyDisplayData.prepaidNumberErrorI18nStringKey?.let { i18nStringResource(it) }, ) Spacer(modifier = Modifier.height(16.dp)) PrimaryButton( modifier = Modifier .padding(16.dp) .fillMaxWidth(), - text = stringResource(Res.string.komoju_pay, displayPayableAmount), + text = i18nStringResource(I18nStringKey.pay, displayPayableAmount), onClick = onPayButtonClicked, ) } diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/success/PaymentSuccessScreen.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/success/PaymentSuccessScreen.kt index 85f6c03..2e0515a 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/success/PaymentSuccessScreen.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/success/PaymentSuccessScreen.kt @@ -16,6 +16,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.vector.rememberVectorPainter import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp @@ -25,16 +26,13 @@ import cafe.adriel.voyager.core.screen.Screen import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import com.komoju.mobile.sdk.KomojuMobileSDKPaymentResult +import com.komoju.mobile.sdk.i18n.I18nStringKey +import com.komoju.mobile.sdk.i18n.i18nStringResource import com.komoju.mobile.sdk.navigation.paymentResultScreenModel -import komoju_mobile_sdk.shared.generated.resources.Res import com.komoju.mobile.sdk.ui.composables.PrimaryButton +import com.komoju.mobile.sdk.ui.icon.KomojuIcon +import com.komoju.mobile.sdk.ui.icon.PaymentStatusCompleted import com.komoju.mobile.sdk.ui.screens.RouterEffect -import komoju_mobile_sdk.shared.generated.resources.komoju_back_to_store -import komoju_mobile_sdk.shared.generated.resources.komoju_ic_payment_status_completed -import komoju_mobile_sdk.shared.generated.resources.komoju_payment_success -import komoju_mobile_sdk.shared.generated.resources.komoju_thank_you_for_your_order -import org.jetbrains.compose.resources.painterResource -import org.jetbrains.compose.resources.stringResource internal class PaymentSuccessScreen : Screen { @Composable @@ -64,17 +62,17 @@ private fun Screen.PaymentSuccessScreenContent() { }, ) } - Image(painterResource(Res.drawable.komoju_ic_payment_status_completed), "status_icon") + Image(rememberVectorPainter(KomojuIcon.PaymentStatusCompleted), "status_icon") Spacer(Modifier.height(16.dp)) - Text(stringResource(Res.string.komoju_payment_success), fontSize = 24.sp, fontWeight = FontWeight.Bold) + Text(i18nStringResource(I18nStringKey.payment_success), fontSize = 24.sp, fontWeight = FontWeight.Bold) Spacer(Modifier.height(16.dp)) - Text(stringResource(Res.string.komoju_thank_you_for_your_order)) + Text(i18nStringResource(I18nStringKey.thank_you_for_your_order)) Spacer(Modifier.weight(1f)) PrimaryButton( modifier = Modifier .fillMaxWidth() .padding(16.dp), - text = stringResource(Res.string.komoju_back_to_store), + text = i18nStringResource(I18nStringKey.back_to_store), ) { screenModel.onBackToStoreButtonClicked() } diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/webview/WebViewScreen.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/webview/WebViewScreen.kt index 18b57ee..46891c1 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/webview/WebViewScreen.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/webview/WebViewScreen.kt @@ -30,7 +30,8 @@ import cafe.adriel.voyager.core.annotation.InternalVoyagerApi import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.screen.Screen import cafe.adriel.voyager.navigator.internal.BackHandler -import komoju_mobile_sdk.shared.generated.resources.Res +import com.komoju.mobile.sdk.i18n.I18nStringKey +import com.komoju.mobile.sdk.i18n.i18nStringResource import com.komoju.mobile.sdk.ui.screens.KomojuPaymentRoute import com.komoju.mobile.sdk.ui.screens.RouterEffect import com.komoju.mobile.sdk.ui.theme.LocalConfigurableTheme @@ -39,11 +40,6 @@ import com.multiplatform.webview.web.LoadingState import com.multiplatform.webview.web.WebView import com.multiplatform.webview.web.rememberWebViewNavigator import com.multiplatform.webview.web.rememberWebViewState -import komoju_mobile_sdk.shared.generated.resources.komoju_are_you_sure_you_want_to_cancel_the_payment -import komoju_mobile_sdk.shared.generated.resources.komoju_cancel_payment -import komoju_mobile_sdk.shared.generated.resources.komoju_no -import komoju_mobile_sdk.shared.generated.resources.komoju_yes -import org.jetbrains.compose.resources.stringResource internal data class WebViewScreen(val route: KomojuPaymentRoute.WebView) : Screen { @Composable @@ -131,7 +127,7 @@ private fun Screen.WebViewScreenContent(route: KomojuPaymentRoute.WebView) { }, confirmButton = { Text( - text = stringResource(Res.string.komoju_yes), + text = i18nStringResource(I18nStringKey.yes), modifier = Modifier .clickable { screenModel.onBackPressed() @@ -141,7 +137,7 @@ private fun Screen.WebViewScreenContent(route: KomojuPaymentRoute.WebView) { }, dismissButton = { Text( - text = stringResource(Res.string.komoju_no), + text = i18nStringResource(I18nStringKey.no), modifier = Modifier .clickable { showBackPressDialog = false @@ -151,12 +147,12 @@ private fun Screen.WebViewScreenContent(route: KomojuPaymentRoute.WebView) { }, text = { Text( - text = stringResource(Res.string.komoju_are_you_sure_you_want_to_cancel_the_payment), + text = i18nStringResource(I18nStringKey.are_you_sure_you_want_to_cancel_the_payment), modifier = Modifier.padding(8.dp), ) }, title = { - Text(text = stringResource(Res.string.komoju_cancel_payment)) + Text(text = i18nStringResource(I18nStringKey.cancel_payment)) }, ) } diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/theme/Theme.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/theme/Theme.kt index 8461b53..eb7b961 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/theme/Theme.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/theme/Theme.kt @@ -8,6 +8,7 @@ import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.compositionLocalOf import androidx.compose.ui.graphics.Color import com.komoju.mobile.sdk.KomojuMobileSDKConfiguration +import com.komoju.mobile.sdk.i18n.KomojuLanguage internal val KomojuLightGreen = Color(0xFF3CC239) internal val KomojuDarkGreen = Color(0xFF172E44) @@ -21,6 +22,10 @@ internal val LocalConfigurableTheme = compositionLocalOf { error("Use KomojuMobileSdkTheme to provide ConfigurableTheme") } +internal val LocalKomojuLanguage = compositionLocalOf { + error("Use KomojuMobileSdkTheme to provide ConfigurableTheme") +} + private val LightColorScheme = lightColorScheme( primary = KomojuLightGreen, secondary = KomojuDarkGreen, @@ -34,9 +39,10 @@ internal fun KomojuMobileSdkTheme(configuration: KomojuMobileSDKConfiguration = Surface(color = Color.White) { MaterialTheme( colorScheme = LightColorScheme, - typography = interTypography(), content = { - CompositionLocalProvider(LocalConfigurableTheme provides configuration.configurableTheme, content = content) + CompositionLocalProvider(LocalKomojuLanguage provides KomojuLanguage(configuration.language)) { + CompositionLocalProvider(LocalConfigurableTheme provides configuration.configurableTheme, content = content) + } }, ) } diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/theme/Typography.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/theme/Typography.kt deleted file mode 100644 index 1aa84f5..0000000 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/theme/Typography.kt +++ /dev/null @@ -1,44 +0,0 @@ -package com.komoju.mobile.sdk.ui.theme - -import androidx.compose.material3.Typography -import androidx.compose.runtime.Composable -import androidx.compose.ui.text.font.FontFamily -import androidx.compose.ui.text.font.FontWeight -import komoju_mobile_sdk.shared.generated.resources.Res -import komoju_mobile_sdk.shared.generated.resources.komoju_font_inter_bold -import komoju_mobile_sdk.shared.generated.resources.komoju_font_inter_light -import komoju_mobile_sdk.shared.generated.resources.komoju_font_inter_medium -import komoju_mobile_sdk.shared.generated.resources.komoju_font_inter_regular -import komoju_mobile_sdk.shared.generated.resources.komoju_font_inter_semibold -import org.jetbrains.compose.resources.Font - -@Composable -private fun interFontFamily() = FontFamily( - Font(Res.font.komoju_font_inter_light, weight = FontWeight.Light), - Font(Res.font.komoju_font_inter_regular, weight = FontWeight.Normal), - Font(Res.font.komoju_font_inter_medium, weight = FontWeight.Medium), - Font(Res.font.komoju_font_inter_semibold, weight = FontWeight.SemiBold), - Font(Res.font.komoju_font_inter_bold, weight = FontWeight.Bold), -) - -@Composable -internal fun interTypography() = Typography().run { - val fontFamily = interFontFamily() - copy( - displayLarge = displayLarge.copy(fontFamily = fontFamily), - displayMedium = displayMedium.copy(fontFamily = fontFamily), - displaySmall = displaySmall.copy(fontFamily = fontFamily), - headlineLarge = headlineLarge.copy(fontFamily = fontFamily), - headlineMedium = headlineMedium.copy(fontFamily = fontFamily), - headlineSmall = headlineSmall.copy(fontFamily = fontFamily), - titleLarge = titleLarge.copy(fontFamily = fontFamily), - titleMedium = titleMedium.copy(fontFamily = fontFamily), - titleSmall = titleSmall.copy(fontFamily = fontFamily), - bodyLarge = bodyLarge.copy(fontFamily = fontFamily), - bodyMedium = bodyMedium.copy(fontFamily = fontFamily), - bodySmall = bodySmall.copy(fontFamily = fontFamily), - labelLarge = labelLarge.copy(fontFamily = fontFamily), - labelMedium = labelMedium.copy(fontFamily = fontFamily), - labelSmall = labelSmall.copy(fontFamily = fontFamily), - ) -} From 93946a64b58ce5098d3c354606592657c3de3441 Mon Sep 17 00:00:00 2001 From: amnix Date: Mon, 11 Nov 2024 19:25:01 +0900 Subject: [PATCH 05/11] Added Japanese i18n --- .../komoju/mobile/sdk/i18n/EnglishStrings.kt | 6 +- .../mobile/sdk/i18n/I18nStringResource.kt | 18 +-- .../com/komoju/mobile/sdk/i18n/I18nStrings.kt | 4 - .../komoju/mobile/sdk/i18n/JapaneseStrings.kt | 123 ++++++++++++++++++ 4 files changed, 136 insertions(+), 15 deletions(-) create mode 100644 shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/JapaneseStrings.kt diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/EnglishStrings.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/EnglishStrings.kt index f879d82..89c6c1d 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/EnglishStrings.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/EnglishStrings.kt @@ -12,7 +12,7 @@ object EnglishStrings : I18nStrings { I18nStringKey.awaiting_payment -> "Awaiting payment" I18nStringKey.your_payment_has_been_processed_successfully -> "Your payment has been processed successfully." I18nStringKey.your_payment_has_failed -> "Your payment has failed." - I18nStringKey.awaiting_payment_instruction -> "You need to go to your local %1s and make the payment to proceed." + I18nStringKey.awaiting_payment_instruction -> "You need to go to your local %s and make the payment to proceed." I18nStringKey.your_payment_is_awaiting_processing -> "Your payment is awaiting processing." I18nStringKey.error -> "Error" I18nStringKey.receipt_number -> "Receipt Number" @@ -25,7 +25,7 @@ object EnglishStrings : I18nStrings { I18nStringKey.i_will_do_it_later -> "I will do it later" I18nStringKey.error_user_cancel -> "We noticed that you’ve canceled the payment process. " + - "If this was a mistake you cantry again to complete your purchase." + "If this was a mistake you can try again to complete your purchase." I18nStringKey.error_other -> "We attempted to process your payment but something went wrong. " + "Please update your payment method below to continue." @@ -34,7 +34,7 @@ object EnglishStrings : I18nStrings { "Please update your payment method below to continue" I18nStringKey.back_to_store -> "Back to store" I18nStringKey.payment_options -> "Payment Options" - I18nStringKey.pay -> "Pay %1s" + I18nStringKey.pay -> "Pay %s" I18nStringKey.cardholder_name -> "Cardholder name" I18nStringKey.full_name_on_card -> "Full name on card" I18nStringKey.card_number -> "Card Number" diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/I18nStringResource.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/I18nStringResource.kt index 639b8b7..01bb862 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/I18nStringResource.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/I18nStringResource.kt @@ -7,15 +7,17 @@ import com.komoju.mobile.sdk.ui.theme.LocalKomojuLanguage @Composable fun i18nStringResource(key: I18nStringKey, vararg args: Any): String { val languageCode = LocalKomojuLanguage.current.code - val strings = when (languageCode) { - "en" -> EnglishStrings - else -> EnglishStrings + val string = remember(key, languageCode) { + val strings = when (languageCode.lowercase()) { + "en", "eng", "english" -> EnglishStrings + else -> JapaneseStrings + } + when { + args.isEmpty() -> strings.get(key) + else -> strings.get(key).replaceWithArgs(args.map { it.toString() }) + } } - val string = remember(key, languageCode) { strings.get(key).replaceWithArgs(args.map { it.toString() }) } return string } -private val SimpleStringFormatRegex = Regex("""%(\d)\$[ds]""") -internal fun String.replaceWithArgs(args: List) = SimpleStringFormatRegex.replace(this) { matchResult -> - args[matchResult.groupValues[1].toInt() - 1] -} +internal fun String.replaceWithArgs(args: List) = replace("%s", args.first()) diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/I18nStrings.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/I18nStrings.kt index fb8fd40..7d6a553 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/I18nStrings.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/I18nStrings.kt @@ -2,8 +2,4 @@ package com.komoju.mobile.sdk.i18n interface I18nStrings { fun get(key: I18nStringKey): String - - companion object { - operator fun invoke(key: I18nStringKey) = EnglishStrings.get(key) - } } diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/JapaneseStrings.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/JapaneseStrings.kt new file mode 100644 index 0000000..4dca3cf --- /dev/null +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/JapaneseStrings.kt @@ -0,0 +1,123 @@ +package com.komoju.mobile.sdk.i18n + +object JapaneseStrings : I18nStrings { + override fun get(key: I18nStringKey): String = when (key) { + I18nStringKey.cadrholder_name_cannot_be_empty -> "入力したカード所有者名は空欄にできません" + I18nStringKey.the_entered_cardholder_name_is_not_valid -> "入力したカード所有者名は無効です" + I18nStringKey.the_entered_card_number_is_not_valid -> "入力したカード番号は無効です" + I18nStringKey.the_entered_expiry_date_is_not_valid -> "入力した有効期限は無効です" + I18nStringKey.the_entered_cvv_is_not_valid -> "入力した CVV は無効です" + I18nStringKey.payment_successful -> "支払いは成功しました" + I18nStringKey.payment_failed -> "支払いは失敗しました" + I18nStringKey.awaiting_payment -> "支払いを待機しています" + I18nStringKey.your_payment_has_been_processed_successfully -> "支払いは正常に処理されました。" + I18nStringKey.your_payment_has_failed -> "支払いは失敗しました。" + I18nStringKey.awaiting_payment_instruction -> "続行するには、お近くの %s に行って支払いを行う必要があります。" + I18nStringKey.your_payment_is_awaiting_processing -> "支払いは処理を待機しています。" + I18nStringKey.error -> "エラー" + I18nStringKey.receipt_number -> "領収書番号" + I18nStringKey.confirmation_code -> "確認コード" + I18nStringKey.done -> "完了" + I18nStringKey.update_payment_method -> "お支払い方法を更新" + I18nStringKey.view_instructions -> "手順を表示" + I18nStringKey.okay -> "了解" + I18nStringKey.have_a_question_contact_us -> "ご質問がありますか? お問い合わせください" + I18nStringKey.i_will_do_it_later -> "後で行います" + I18nStringKey.error_user_cancel -> "お支払い処理がキャンセルされたことがわかりました。これが間違いだった場合は、もう一度試して購入を完了してください。" + I18nStringKey.error_other -> "お支払いの処理を試みましたが、問題が発生しました。続行するには、以下のお支払い方法を更新してください。" + I18nStringKey.credit_card_error -> "カードへの請求を試みましたが、問題が発生しました。続行するには、以下のお支払い方法を更新してください" + I18nStringKey.back_to_store -> "ストアに戻る" + I18nStringKey.payment_options -> "お支払いオプション" + I18nStringKey.pay -> "%s を支払う" + I18nStringKey.cardholder_name -> "カード所有者名" + I18nStringKey.full_name_on_card -> "TARO YAMADA" + I18nStringKey.card_number -> "カード番号" + I18nStringKey.mm_yy -> "MM/YY" + I18nStringKey.cvv -> "CVV" + I18nStringKey.save_this_card_for_future_payments -> "今後のお支払いのためにこのカードを保存する" + I18nStringKey.daily_yamazaki -> "デイリーヤマザキ" + I18nStringKey.family_mart -> "ファミリーマート" + I18nStringKey.lawson -> "ローソン" + I18nStringKey.ministop -> "ミニストップ" + I18nStringKey.seicomart -> "セイコーマート" + I18nStringKey._7_eleven -> "セブンイレブン" + I18nStringKey.full_name_on_receipt -> "レシートのフルネーム" + I18nStringKey.name_shown_on_receipt -> "名前(カードに記載)領収書)" + I18nStringKey.email -> "メール" + I18nStringKey.enter_your_email_address -> "メールアドレスを入力してください" + I18nStringKey.net_cash_information -> "NET CASH 情報" + I18nStringKey.net_cash_id -> "NET CASH ID" + I18nStringKey.payment_via_alipay -> "Alipay での支払い" + I18nStringKey.payment_via_au_pay -> "AU Pay での支払い" + I18nStringKey.payment_via_mer_pay -> "Mer Pay での支払い" + I18nStringKey.payment_via_paypay -> "Paypay での支払い" + I18nStringKey.payment_via_rakuten_pay -> "Rakuten Pay での支払い" + I18nStringKey.payment_via_line_pay -> "Line Pay での支払い" + I18nStringKey.you_will_be_redirected_to_alipay -> "支払いを完了するには、Alipay にリダイレクトされます" + I18nStringKey.you_will_be_redirected_to_au_pay -> "支払いを完了するには、AU Pay にリダイレクトされます" + I18nStringKey.you_will_be_redirected_to_mer_pay -> "支払いを完了するには、Mer Pay にリダイレクトされます" + I18nStringKey.you_will_be_redirected_to_paypay -> "支払いを完了するには、Paypay にリダイレクトされます" + I18nStringKey.you_will_be_redirected_to_rakuten -> "支払いを完了するには、Rakuten にリダイレクトされますお支払い" + I18nStringKey.you_will_be_redirected_to_line_pay -> "お支払いを完了するには、Line Pay にリダイレクトされます" + I18nStringKey.continue_to_alipay -> "Alipay に進みます" + I18nStringKey.continue_to_aupay -> "AuPay に進みます" + I18nStringKey.continue_to_merpay -> "MerPay に進みます" + I18nStringKey.continue_to_paypay -> "PayPay に進みます" + I18nStringKey.continue_to_rakuten -> "Rakuten に進みます" + I18nStringKey.continue_to_linepay -> "LinePay に進みます" + I18nStringKey.continue_to_paidy -> "Paidy に進みます" + I18nStringKey.webview_open_info -> "注: Web ウィンドウが開きます。購入後、元のウィンドウに戻ります。" + I18nStringKey.full_name -> "氏名" + I18nStringKey.enter_your_name -> "お名前を入力してください" + I18nStringKey.phone_number -> "電話番号" + I18nStringKey.enter_your_phone_number -> "電話番号を入力してください" + I18nStringKey.last_name -> "姓" + I18nStringKey.first_name -> "名" + I18nStringKey.last_name_phonetic -> "姓(フリガナ)" + I18nStringKey.first_name_phonetic -> "名(フリガナ)" + I18nStringKey.webmoney_information -> "WebMoney情報" + I18nStringKey.prepaid_number -> "プリペイド番号" + I18nStringKey.payment_success -> "お支払い完了" + I18nStringKey.thank_you_for_your_order -> "ご注文ありがとうございます" + I18nStringKey.bitcash_information -> "BitCash情報" + I18nStringKey.hiragana_id -> "ひらがなID" + I18nStringKey.bank_transfer -> "銀行振込" + I18nStringKey.bitcash -> "BitCash" + I18nStringKey.credit_card -> "カード" + I18nStringKey.konbini -> "コンビニ" + I18nStringKey.netcash -> "NetCash" + I18nStringKey.aupay -> "au Pay" + I18nStringKey.alipay -> "AliPay" + I18nStringKey.merpay -> "メルペイ" + I18nStringKey.paypay -> "PayPay" + I18nStringKey.rakuten_pay -> "楽天ペイ" + I18nStringKey.line_pay -> "Line Pay" + I18nStringKey.unknown -> "不明" + I18nStringKey.other -> "その他" + I18nStringKey.paidy -> "Paidy" + I18nStringKey.payeasy -> "PayEasy" + I18nStringKey.webmoney -> "WebMoney" + I18nStringKey.total_payment -> "合計支払額" + I18nStringKey.the_entered_name_cannot_be_empty -> "入力した名前は空欄にできません" + I18nStringKey.the_entered_email_is_not_valid -> "入力したメールアドレスは無効です" + I18nStringKey.please_select_a_konbini_brand -> "コンビニのブランドを選択してください" + I18nStringKey.the_entered_phone_number_cannot_be_empty -> "入力した電話番号は空欄にできません" + I18nStringKey.the_entered_phone_number_is_not_valid -> "入力した電話番号は無効です" + I18nStringKey.the_entered_net_cash_id_cannot_be_empty -> "入力したネットキャッシュIDは空欄にできません" + I18nStringKey.the_entered_net_cash_id_is_not_valid -> "入力したネットキャッシュIDは無効です" + I18nStringKey.the_entered_bit_cash_id_cannot_be_empty -> "入力したビットキャッシュIDは空欄にできません" + I18nStringKey.the_entered_bit_cash_id_is_not_valid -> "入力したビットキャッシュIDは無効です" + I18nStringKey.the_entered_prepaid_number_cannot_be_empty -> "入力したプリペイド番号は空欄にできません" + I18nStringKey.the_entered_prepaid_number_is_not_valid -> "入力したプリペイド番号は無効です" + I18nStringKey.the_entered_last_name_cannot_be_empty -> "入力した姓は空欄にできません" + I18nStringKey.the_entered_first_name_cannot_be_empty -> "入力した名字は空欄にできません" + I18nStringKey.the_entered_first_name_phonetic_cannot_be_empty -> "入力した名のフリガナは空" + I18nStringKey.the_entered_first_name_phonetic_must_be_a_kana -> "入力したファーストネームの読みはカナでなければなりません" + I18nStringKey.the_entered_last_name_phonetic_cannot_be_empty -> "入力したラストネームの読みは空にできません" + I18nStringKey.the_entered_last_name_phonetic_must_be_a_kana -> "入力したラストネームの読みはカナでなければなりません" + I18nStringKey.yes -> "はい" + I18nStringKey.no -> "いいえ" + I18nStringKey.are_you_sure_you_want_to_cancel_the_payment -> "支払いをキャンセルしてもよろしいですか?" + I18nStringKey.cancel_payment -> "支払いをキャンセルしますか?" + } +} From be9add115106974e82f57d79a3c00013b89495dd Mon Sep 17 00:00:00 2001 From: amnix Date: Tue, 12 Nov 2024 12:16:18 +0900 Subject: [PATCH 06/11] Dynamic height fraction --- .../mobile/sdk/ui/screens/KomojuPaymentEntryPoint.android.kt | 3 +++ .../komoju/mobile/sdk/ui/screens/KomojuPaymentEntryPoint.kt | 4 +++- .../mobile/sdk/ui/screens/KomojuPaymentEntryPoint.ios.kt | 3 +++ 3 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 shared/src/androidMain/kotlin/com/komoju/mobile/sdk/ui/screens/KomojuPaymentEntryPoint.android.kt create mode 100644 shared/src/iosMain/kotlin/com/komoju/mobile/sdk/ui/screens/KomojuPaymentEntryPoint.ios.kt diff --git a/shared/src/androidMain/kotlin/com/komoju/mobile/sdk/ui/screens/KomojuPaymentEntryPoint.android.kt b/shared/src/androidMain/kotlin/com/komoju/mobile/sdk/ui/screens/KomojuPaymentEntryPoint.android.kt new file mode 100644 index 0000000..89703da --- /dev/null +++ b/shared/src/androidMain/kotlin/com/komoju/mobile/sdk/ui/screens/KomojuPaymentEntryPoint.android.kt @@ -0,0 +1,3 @@ +package com.komoju.mobile.sdk.ui.screens + +internal actual const val maxHeightFraction: Float = .9f diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/KomojuPaymentEntryPoint.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/KomojuPaymentEntryPoint.kt index eab9a2d..215ee64 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/KomojuPaymentEntryPoint.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/KomojuPaymentEntryPoint.kt @@ -19,7 +19,7 @@ fun KomojuPaymentEntryPoint(configuration: KomojuMobileSDKConfiguration, onCreat Box( modifier = Modifier .fillMaxWidth() - .fillMaxHeight(.9f), + .fillMaxHeight(maxHeightFraction), ) { Navigator( KomojuPaymentScreen(configuration), @@ -30,3 +30,5 @@ fun KomojuPaymentEntryPoint(configuration: KomojuMobileSDKConfiguration, onCreat } } } + +internal expect val maxHeightFraction: Float diff --git a/shared/src/iosMain/kotlin/com/komoju/mobile/sdk/ui/screens/KomojuPaymentEntryPoint.ios.kt b/shared/src/iosMain/kotlin/com/komoju/mobile/sdk/ui/screens/KomojuPaymentEntryPoint.ios.kt new file mode 100644 index 0000000..2770765 --- /dev/null +++ b/shared/src/iosMain/kotlin/com/komoju/mobile/sdk/ui/screens/KomojuPaymentEntryPoint.ios.kt @@ -0,0 +1,3 @@ +package com.komoju.mobile.sdk.ui.screens + +internal actual const val maxHeightFraction: Float = 1f From 5be42ddb1abc37eb9987d256c6fc47cb6e844cd6 Mon Sep 17 00:00:00 2001 From: amnix Date: Tue, 12 Nov 2024 17:51:54 +0900 Subject: [PATCH 07/11] ktlint fixup --- .../mobile/sdk/ui/screens/KomojuPaymentEntryPoint.android.kt | 2 +- .../komoju/mobile/sdk/ui/screens/KomojuPaymentEntryPoint.kt | 4 ++-- .../mobile/sdk/ui/screens/KomojuPaymentEntryPoint.ios.kt | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/shared/src/androidMain/kotlin/com/komoju/mobile/sdk/ui/screens/KomojuPaymentEntryPoint.android.kt b/shared/src/androidMain/kotlin/com/komoju/mobile/sdk/ui/screens/KomojuPaymentEntryPoint.android.kt index 89703da..cbbecc4 100644 --- a/shared/src/androidMain/kotlin/com/komoju/mobile/sdk/ui/screens/KomojuPaymentEntryPoint.android.kt +++ b/shared/src/androidMain/kotlin/com/komoju/mobile/sdk/ui/screens/KomojuPaymentEntryPoint.android.kt @@ -1,3 +1,3 @@ package com.komoju.mobile.sdk.ui.screens -internal actual const val maxHeightFraction: Float = .9f +internal actual const val MAX_HEIGHT_FRACTION: Float = .9f diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/KomojuPaymentEntryPoint.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/KomojuPaymentEntryPoint.kt index 215ee64..63e1aa7 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/KomojuPaymentEntryPoint.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/KomojuPaymentEntryPoint.kt @@ -19,7 +19,7 @@ fun KomojuPaymentEntryPoint(configuration: KomojuMobileSDKConfiguration, onCreat Box( modifier = Modifier .fillMaxWidth() - .fillMaxHeight(maxHeightFraction), + .fillMaxHeight(MAX_HEIGHT_FRACTION), ) { Navigator( KomojuPaymentScreen(configuration), @@ -31,4 +31,4 @@ fun KomojuPaymentEntryPoint(configuration: KomojuMobileSDKConfiguration, onCreat } } -internal expect val maxHeightFraction: Float +internal expect val MAX_HEIGHT_FRACTION: Float diff --git a/shared/src/iosMain/kotlin/com/komoju/mobile/sdk/ui/screens/KomojuPaymentEntryPoint.ios.kt b/shared/src/iosMain/kotlin/com/komoju/mobile/sdk/ui/screens/KomojuPaymentEntryPoint.ios.kt index 2770765..7598c53 100644 --- a/shared/src/iosMain/kotlin/com/komoju/mobile/sdk/ui/screens/KomojuPaymentEntryPoint.ios.kt +++ b/shared/src/iosMain/kotlin/com/komoju/mobile/sdk/ui/screens/KomojuPaymentEntryPoint.ios.kt @@ -1,3 +1,3 @@ package com.komoju.mobile.sdk.ui.screens -internal actual const val maxHeightFraction: Float = 1f +internal actual const val MAX_HEIGHT_FRACTION: Float = 1f From afdaba10614f191b8fe04ac3aa606bf108e2e3ed Mon Sep 17 00:00:00 2001 From: amnix Date: Tue, 12 Nov 2024 18:09:44 +0900 Subject: [PATCH 08/11] added more strings --- .../komoju/android/ui/screens/store/FakeOrderFailedScreen.kt | 4 ++-- example-android/src/main/res/values-ja/strings.xml | 2 ++ example-android/src/main/res/values/strings.xml | 2 ++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/example-android/src/main/java/com/komoju/android/ui/screens/store/FakeOrderFailedScreen.kt b/example-android/src/main/java/com/komoju/android/ui/screens/store/FakeOrderFailedScreen.kt index 1048642..e24349e 100644 --- a/example-android/src/main/java/com/komoju/android/ui/screens/store/FakeOrderFailedScreen.kt +++ b/example-android/src/main/java/com/komoju/android/ui/screens/store/FakeOrderFailedScreen.kt @@ -55,10 +55,10 @@ private fun FakeOrderFailedScreenContent() { contentDescription = null, ) - Text("Payment Failed", fontSize = 24.sp, fontWeight = FontWeight.Bold) + Text(stringResource(R.string.payment_failed), fontSize = 24.sp, fontWeight = FontWeight.Bold) Spacer(modifier = Modifier.padding(16.dp)) Text( - "Oops! Seems like there was an error placing your order because of a failed payment, please try again or report an issue. If any money is deducted then it will be refunded within 7 days", + stringResource(R.string.payment_failed_description), fontSize = 16.sp, textAlign = TextAlign.Center, ) diff --git a/example-android/src/main/res/values-ja/strings.xml b/example-android/src/main/res/values-ja/strings.xml index 62c93bc..f07d5c2 100644 --- a/example-android/src/main/res/values-ja/strings.xml +++ b/example-android/src/main/res/values-ja/strings.xml @@ -25,5 +25,7 @@ 支払いを再試行する ご注文ありがとうございます。ご注文は確認されました。発送の詳細は、ご登録のメールアドレスにすぐに送信されます。 注文確定 + 支払いに失敗しました + 申し訳ありません!お支払いに失敗したため、ご注文の際にエラーが発生したようです。もう一度お試しいただくか、問題を報告してください。差し引かれた金額は 7 日以内に返金されます。 \ No newline at end of file diff --git a/example-android/src/main/res/values/strings.xml b/example-android/src/main/res/values/strings.xml index 1c0068a..cbb49a6 100644 --- a/example-android/src/main/res/values/strings.xml +++ b/example-android/src/main/res/values/strings.xml @@ -24,4 +24,6 @@ Retry Payment Thank you for your Order, it has been confirmed, Shipping Details will be shared on your registered email address soon Order Confirmed + Payment Failed + Oops! Seems like there was an error placing your order because of a failed payment, please try again or report an issue. If any money is deducted then it will be refunded within 7 days \ No newline at end of file From 3ccda29a74b0a40c43ab71f0f41453ff970d9378 Mon Sep 17 00:00:00 2001 From: amnix Date: Tue, 12 Nov 2024 18:13:12 +0900 Subject: [PATCH 09/11] improved docs --- .../komoju/android/sdk/KomojuAndroidSDK.kt | 50 ++++++++++++++++--- 1 file changed, 43 insertions(+), 7 deletions(-) diff --git a/android/src/main/java/com/komoju/android/sdk/KomojuAndroidSDK.kt b/android/src/main/java/com/komoju/android/sdk/KomojuAndroidSDK.kt index f8a370f..c8a333e 100644 --- a/android/src/main/java/com/komoju/android/sdk/KomojuAndroidSDK.kt +++ b/android/src/main/java/com/komoju/android/sdk/KomojuAndroidSDK.kt @@ -9,19 +9,36 @@ import com.komoju.android.sdk.types.Language import com.komoju.mobile.sdk.KomojuMobileSDKConfiguration import com.komoju.mobile.sdk.KomojuMobileSDKPaymentResult import com.komoju.mobile.sdk.canProcessPayment -import com.komoju.mobile.sdk.ui.theme.ConfigurableTheme as CoreConfigurableTheme import com.komoju.mobile.sdk.ui.theme.DefaultConfigurableTheme import com.komoju.mobile.sdk.ui.theme.toColor +import kotlinx.parcelize.Parcelize import kotlin.contracts.ExperimentalContracts import kotlin.contracts.contract -import kotlinx.parcelize.Parcelize +import com.komoju.mobile.sdk.ui.theme.ConfigurableTheme as CoreConfigurableTheme +/** + * Singleton object providing the main SDK functionalities for Komoju Android integration. + */ object KomojuAndroidSDK { + + /** + * An [ActivityResultContract] for starting a payment flow and returning a result asynchronously. + */ val activityResultContract: ActivityResultContract get() = KomojuStartPaymentForResultContract() /** * Configuration class to hold parameters required for payment processing. + * + * @param language The language setting for the payment UI. + * @param currency The currency to be used for the transaction. + * @param publishableKey The public API key for the Komoju integration. + * @param isDebugMode A flag to indicate whether the SDK is in debug mode. + * @param sessionId A unique session ID for the payment transaction. + * @param redirectURL The URL to redirect the user to after payment completion. + * @param appScheme The app scheme for deep linking. + * @param configurableTheme The custom theme for the UI elements of the payment flow. + * @param inlinedProcessing A flag to indicate if inlined processing is enabled. */ @Parcelize data class Configuration( @@ -72,12 +89,13 @@ object KomojuAndroidSDK { * WARNING: Experimental API [Try this only if you are sure] Disabled by Default. * * This API enables or disables inlined processing. - * If this is enabled then The SDK will try to do processing with minimum amount of screens. + * If this is enabled, the SDK will attempt to process payments with fewer UI screens. * - * For e.g. - * * If PayPay Payment id captured, it will close the SDK ASAP it verifies the payment. - * * When you will try to pay with Credit Card and Second step verification is not required, SDK will never show the WebView and will handle the callback itself. + * Example: + * - For PayPay, the SDK will close as soon as the payment is verified. + * - For Credit Card payments, if second-step verification isn't required, the SDK will skip the WebView and handle the callback directly. * + * @param inlinedProcessing Boolean flag to enable inlined processing. */ @ExperimentalKomojuPaymentApi fun setInlinedProcessing(inlinedProcessing: Boolean) = apply { @@ -86,6 +104,8 @@ object KomojuAndroidSDK { /** * Builds the [Configuration] instance with the provided settings. + * + * @return The configured [Configuration] object. */ fun build(): Configuration = Configuration( language = language, @@ -101,6 +121,14 @@ object KomojuAndroidSDK { } } + /** + * Class to define configurable theme options for the payment UI. + * + * @param primaryColorInt The primary color of the UI as an integer. + * @param primaryContentColorInt The color for primary content in the UI. + * @param loaderColorInt The color of the loading indicator. + * @param primaryShapeCornerRadiusInDp The corner radius (in dp) for primary UI elements. + */ @Parcelize data class ConfigurableTheme( val primaryColorInt: Int, @@ -109,10 +137,16 @@ object KomojuAndroidSDK { val primaryShapeCornerRadiusInDp: Int, ) : Parcelable { companion object { + // Default theme used by the SDK. val default: ConfigurableTheme = com.komoju.mobile.sdk.ui.theme.ConfigurableTheme.default.toAndroidSDKConfigurableTheme() } } + /** + * A result of the payment, indicating whether the payment was successful or not. + * + * @param isSuccessFul Boolean flag indicating the payment result. + */ @Parcelize data class PaymentResult(val isSuccessFul: Boolean) : Parcelable } @@ -133,7 +167,9 @@ internal fun CoreConfigurableTheme.toAndroidSDKConfigurableTheme(): KomojuAndroi /** * Extension function to check if the current configuration is valid for processing a payment. - * @return True if the configuration is non-null and contains both publishableKey and sessionId. + * A configuration is valid if it is non-null and contains both a valid publishable key and session ID. + * + * @return True if the configuration is valid for payment processing, false otherwise. */ @OptIn(ExperimentalContracts::class) fun KomojuAndroidSDK.Configuration?.canProcessPayment(): Boolean { From fcb7f28f343732b2f1589628df4544c629a10221 Mon Sep 17 00:00:00 2001 From: amnix Date: Tue, 12 Nov 2024 18:20:17 +0900 Subject: [PATCH 10/11] enum naming changes --- .../komoju/mobile/sdk/i18n/EnglishStrings.kt | 30 +++++++++--------- .../komoju/mobile/sdk/i18n/I18nStringKey.kt | 31 ++++++++++--------- .../komoju/mobile/sdk/i18n/JapaneseStrings.kt | 30 +++++++++--------- .../payment/KomojuPaymentScreenModel.kt | 2 +- .../payment/composables/BitCashForm.kt | 2 +- .../payment/composables/KonbiniBrandsRow.kt | 6 ++-- .../payment/composables/OffSitePayForm.kt | 6 ++-- .../payment/composables/PaymentMethodsRow.kt | 12 +++---- .../payment/composables/WebMoneyForm.kt | 2 +- 9 files changed, 61 insertions(+), 60 deletions(-) diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/EnglishStrings.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/EnglishStrings.kt index 89c6c1d..bcca861 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/EnglishStrings.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/EnglishStrings.kt @@ -2,7 +2,7 @@ package com.komoju.mobile.sdk.i18n object EnglishStrings : I18nStrings { override fun get(key: I18nStringKey): String = when (key) { - I18nStringKey.cadrholder_name_cannot_be_empty -> "The entered cardholder name cannot be empty" + I18nStringKey.cardholder_name_cannot_be_empty -> "The entered cardholder name cannot be empty" I18nStringKey.the_entered_cardholder_name_is_not_valid -> "The entered cardholder name is not valid" I18nStringKey.the_entered_card_number_is_not_valid -> "The entered card number is not valid" I18nStringKey.the_entered_expiry_date_is_not_valid -> "The entered expiry date is not valid" @@ -44,9 +44,9 @@ object EnglishStrings : I18nStrings { I18nStringKey.daily_yamazaki -> "Daily Yamazaki" I18nStringKey.family_mart -> "Family Mart" I18nStringKey.lawson -> "Lawson" - I18nStringKey.ministop -> "MiniStop" - I18nStringKey.seicomart -> "SeicoMart" - I18nStringKey._7_eleven -> "7-Eleven" + I18nStringKey.mini_stop -> "MiniStop" + I18nStringKey.seico_mart -> "SeicoMart" + I18nStringKey.seven_eleven -> "7-Eleven" I18nStringKey.full_name_on_receipt -> "Full name on receipt" I18nStringKey.name_shown_on_receipt -> "Name (shown on receipt)" I18nStringKey.email -> "Email" @@ -66,11 +66,11 @@ object EnglishStrings : I18nStrings { I18nStringKey.you_will_be_redirected_to_rakuten -> "You will be redirected to Rakuten to complete the payment" I18nStringKey.you_will_be_redirected_to_line_pay -> "You will be redirected to Line Pay to complete the payment" I18nStringKey.continue_to_alipay -> "Continue to Alipay" - I18nStringKey.continue_to_aupay -> "Continue to AuPay" - I18nStringKey.continue_to_merpay -> "Continue to MerPay" + I18nStringKey.continue_to_au_pay -> "Continue to AuPay" + I18nStringKey.continue_to_mer_pay -> "Continue to MerPay" I18nStringKey.continue_to_paypay -> "Continue to PayPay" I18nStringKey.continue_to_rakuten -> "Continue to Rakuten" - I18nStringKey.continue_to_linepay -> "Continue to LinePay" + I18nStringKey.continue_to_line_pay -> "Continue to LinePay" I18nStringKey.continue_to_paidy -> "Continue to Paidy" I18nStringKey.webview_open_info -> "Note a web window will be opened.After purchase you will be redirected back." I18nStringKey.full_name -> "Full Name" @@ -81,28 +81,28 @@ object EnglishStrings : I18nStrings { I18nStringKey.first_name -> "First Name" I18nStringKey.last_name_phonetic -> "Last Name (Phonetic)" I18nStringKey.first_name_phonetic -> "First Name (Phonetic)" - I18nStringKey.webmoney_information -> "WebMoney Information" + I18nStringKey.web_money_information -> "WebMoney Information" I18nStringKey.prepaid_number -> "Prepaid number" I18nStringKey.payment_success -> "Payment Success" I18nStringKey.thank_you_for_your_order -> "Thank you for your order" - I18nStringKey.bitcash_information -> "BitCash Information" + I18nStringKey.bit_cash_information -> "BitCash Information" I18nStringKey.hiragana_id -> "Hiragana id" I18nStringKey.bank_transfer -> "Bank Transfer" - I18nStringKey.bitcash -> "BitCash" + I18nStringKey.bit_cash -> "BitCash" I18nStringKey.credit_card -> "Credit card" I18nStringKey.konbini -> "Konbini" - I18nStringKey.netcash -> "NetCash" - I18nStringKey.aupay -> "au Pay" + I18nStringKey.net_cash -> "NetCash" + I18nStringKey.au_pay -> "au Pay" I18nStringKey.alipay -> "AliPay" - I18nStringKey.merpay -> "Mer Pay" + I18nStringKey.mer_pay -> "Mer Pay" I18nStringKey.paypay -> "PayPay" I18nStringKey.rakuten_pay -> "Rakuten Pay" I18nStringKey.line_pay -> "Line Pay" I18nStringKey.unknown -> "Unknown" I18nStringKey.other -> "Other" I18nStringKey.paidy -> "Paidy" - I18nStringKey.payeasy -> "PayEasy" - I18nStringKey.webmoney -> "WebMoney" + I18nStringKey.pay_easy -> "PayEasy" + I18nStringKey.web_money -> "WebMoney" I18nStringKey.total_payment -> "Total Payment" I18nStringKey.the_entered_name_cannot_be_empty -> "The entered name cannot be empty" I18nStringKey.the_entered_email_is_not_valid -> "The entered email is not valid" diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/I18nStringKey.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/I18nStringKey.kt index c6308cf..28c77ce 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/I18nStringKey.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/I18nStringKey.kt @@ -1,7 +1,8 @@ package com.komoju.mobile.sdk.i18n +@Suppress("EnumEntryName") enum class I18nStringKey { - cadrholder_name_cannot_be_empty, + cardholder_name_cannot_be_empty, the_entered_cardholder_name_is_not_valid, the_entered_card_number_is_not_valid, the_entered_expiry_date_is_not_valid, @@ -37,9 +38,9 @@ enum class I18nStringKey { daily_yamazaki, family_mart, lawson, - ministop, - seicomart, - _7_eleven, + mini_stop, + seico_mart, + seven_eleven, full_name_on_receipt, name_shown_on_receipt, email, @@ -59,11 +60,11 @@ enum class I18nStringKey { you_will_be_redirected_to_rakuten, you_will_be_redirected_to_line_pay, continue_to_alipay, - continue_to_aupay, - continue_to_merpay, + continue_to_au_pay, + continue_to_mer_pay, continue_to_paypay, continue_to_rakuten, - continue_to_linepay, + continue_to_line_pay, continue_to_paidy, webview_open_info, full_name, @@ -74,28 +75,28 @@ enum class I18nStringKey { first_name, last_name_phonetic, first_name_phonetic, - webmoney_information, + web_money_information, prepaid_number, payment_success, thank_you_for_your_order, - bitcash_information, + bit_cash_information, hiragana_id, bank_transfer, - bitcash, + bit_cash, credit_card, konbini, - netcash, - aupay, + net_cash, + au_pay, alipay, - merpay, + mer_pay, paypay, rakuten_pay, line_pay, unknown, other, paidy, - payeasy, - webmoney, + pay_easy, + web_money, total_payment, the_entered_name_cannot_be_empty, the_entered_email_is_not_valid, diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/JapaneseStrings.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/JapaneseStrings.kt index 4dca3cf..f00127a 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/JapaneseStrings.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/i18n/JapaneseStrings.kt @@ -2,7 +2,7 @@ package com.komoju.mobile.sdk.i18n object JapaneseStrings : I18nStrings { override fun get(key: I18nStringKey): String = when (key) { - I18nStringKey.cadrholder_name_cannot_be_empty -> "入力したカード所有者名は空欄にできません" + I18nStringKey.cardholder_name_cannot_be_empty -> "入力したカード所有者名は空欄にできません" I18nStringKey.the_entered_cardholder_name_is_not_valid -> "入力したカード所有者名は無効です" I18nStringKey.the_entered_card_number_is_not_valid -> "入力したカード番号は無効です" I18nStringKey.the_entered_expiry_date_is_not_valid -> "入力した有効期限は無効です" @@ -38,9 +38,9 @@ object JapaneseStrings : I18nStrings { I18nStringKey.daily_yamazaki -> "デイリーヤマザキ" I18nStringKey.family_mart -> "ファミリーマート" I18nStringKey.lawson -> "ローソン" - I18nStringKey.ministop -> "ミニストップ" - I18nStringKey.seicomart -> "セイコーマート" - I18nStringKey._7_eleven -> "セブンイレブン" + I18nStringKey.mini_stop -> "ミニストップ" + I18nStringKey.seico_mart -> "セイコーマート" + I18nStringKey.seven_eleven -> "セブンイレブン" I18nStringKey.full_name_on_receipt -> "レシートのフルネーム" I18nStringKey.name_shown_on_receipt -> "名前(カードに記載)領収書)" I18nStringKey.email -> "メール" @@ -60,11 +60,11 @@ object JapaneseStrings : I18nStrings { I18nStringKey.you_will_be_redirected_to_rakuten -> "支払いを完了するには、Rakuten にリダイレクトされますお支払い" I18nStringKey.you_will_be_redirected_to_line_pay -> "お支払いを完了するには、Line Pay にリダイレクトされます" I18nStringKey.continue_to_alipay -> "Alipay に進みます" - I18nStringKey.continue_to_aupay -> "AuPay に進みます" - I18nStringKey.continue_to_merpay -> "MerPay に進みます" + I18nStringKey.continue_to_au_pay -> "AuPay に進みます" + I18nStringKey.continue_to_mer_pay -> "MerPay に進みます" I18nStringKey.continue_to_paypay -> "PayPay に進みます" I18nStringKey.continue_to_rakuten -> "Rakuten に進みます" - I18nStringKey.continue_to_linepay -> "LinePay に進みます" + I18nStringKey.continue_to_line_pay -> "LinePay に進みます" I18nStringKey.continue_to_paidy -> "Paidy に進みます" I18nStringKey.webview_open_info -> "注: Web ウィンドウが開きます。購入後、元のウィンドウに戻ります。" I18nStringKey.full_name -> "氏名" @@ -75,28 +75,28 @@ object JapaneseStrings : I18nStrings { I18nStringKey.first_name -> "名" I18nStringKey.last_name_phonetic -> "姓(フリガナ)" I18nStringKey.first_name_phonetic -> "名(フリガナ)" - I18nStringKey.webmoney_information -> "WebMoney情報" + I18nStringKey.web_money_information -> "WebMoney情報" I18nStringKey.prepaid_number -> "プリペイド番号" I18nStringKey.payment_success -> "お支払い完了" I18nStringKey.thank_you_for_your_order -> "ご注文ありがとうございます" - I18nStringKey.bitcash_information -> "BitCash情報" + I18nStringKey.bit_cash_information -> "BitCash情報" I18nStringKey.hiragana_id -> "ひらがなID" I18nStringKey.bank_transfer -> "銀行振込" - I18nStringKey.bitcash -> "BitCash" + I18nStringKey.bit_cash -> "BitCash" I18nStringKey.credit_card -> "カード" I18nStringKey.konbini -> "コンビニ" - I18nStringKey.netcash -> "NetCash" - I18nStringKey.aupay -> "au Pay" + I18nStringKey.net_cash -> "NetCash" + I18nStringKey.au_pay -> "au Pay" I18nStringKey.alipay -> "AliPay" - I18nStringKey.merpay -> "メルペイ" + I18nStringKey.mer_pay -> "メルペイ" I18nStringKey.paypay -> "PayPay" I18nStringKey.rakuten_pay -> "楽天ペイ" I18nStringKey.line_pay -> "Line Pay" I18nStringKey.unknown -> "不明" I18nStringKey.other -> "その他" I18nStringKey.paidy -> "Paidy" - I18nStringKey.payeasy -> "PayEasy" - I18nStringKey.webmoney -> "WebMoney" + I18nStringKey.pay_easy -> "PayEasy" + I18nStringKey.web_money -> "WebMoney" I18nStringKey.total_payment -> "合計支払額" I18nStringKey.the_entered_name_cannot_be_empty -> "入力した名前は空欄にできません" I18nStringKey.the_entered_email_is_not_valid -> "入力したメールアドレスは無効です" diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentScreenModel.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentScreenModel.kt index 9c6cdc1..6529a51 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentScreenModel.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/KomojuPaymentScreenModel.kt @@ -370,7 +370,7 @@ internal class KomojuPaymentScreenModel(private val config: KomojuMobileSDKConfi private fun CreditCardDisplayData.validate(): Boolean { val fullNameOnCardError = when { - fullNameOnCard.isBlank() -> I18nStringKey.cadrholder_name_cannot_be_empty + fullNameOnCard.isBlank() -> I18nStringKey.cardholder_name_cannot_be_empty fullNameOnCard.all { char -> char.isValidCardHolderNameChar() } -> null else -> I18nStringKey.the_entered_cardholder_name_is_not_valid } diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/BitCashForm.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/BitCashForm.kt index 8fde537..578be78 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/BitCashForm.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/BitCashForm.kt @@ -33,7 +33,7 @@ internal fun BitCashForm( Column { TextField( value = bitCashDisplayData.bitCashId, - title = i18nStringResource(I18nStringKey.bitcash_information), + title = i18nStringResource(I18nStringKey.bit_cash_information), placeholder = i18nStringResource(I18nStringKey.hiragana_id), onValueChange = { onBitCashDisplayDataChange(bitCashDisplayData.copy(bitCashId = it)) diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/KonbiniBrandsRow.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/KonbiniBrandsRow.kt index 502ea40..48fb25f 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/KonbiniBrandsRow.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/KonbiniBrandsRow.kt @@ -77,9 +77,9 @@ private val KonbiniBrand.displayText is KonbiniBrand.DailyYamazaki -> i18nStringResource(I18nStringKey.daily_yamazaki) is KonbiniBrand.FamilyMart -> i18nStringResource(I18nStringKey.family_mart) is KonbiniBrand.Lawson -> i18nStringResource(I18nStringKey.lawson) - is KonbiniBrand.MiniStop -> i18nStringResource(I18nStringKey.ministop) - is KonbiniBrand.SeicoMart -> i18nStringResource(I18nStringKey.seicomart) - is KonbiniBrand.SevenEleven -> i18nStringResource(I18nStringKey._7_eleven) + is KonbiniBrand.MiniStop -> i18nStringResource(I18nStringKey.mini_stop) + is KonbiniBrand.SeicoMart -> i18nStringResource(I18nStringKey.seico_mart) + is KonbiniBrand.SevenEleven -> i18nStringResource(I18nStringKey.seven_eleven) } private val KonbiniBrand.displayIcon diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/OffSitePayForm.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/OffSitePayForm.kt index 8c8a923..6ab12db 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/OffSitePayForm.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/OffSitePayForm.kt @@ -61,11 +61,11 @@ internal fun OffSitePayForm(paymentMethod: PaymentMethod.OffSitePayment, onPayBu val paymentButtonKey = remember(paymentMethod) { when (paymentMethod.type) { OffSitePaymentType.ALI_PAY -> I18nStringKey.continue_to_alipay - OffSitePaymentType.AU_PAY -> I18nStringKey.continue_to_aupay - OffSitePaymentType.MER_PAY -> I18nStringKey.continue_to_merpay + OffSitePaymentType.AU_PAY -> I18nStringKey.continue_to_au_pay + OffSitePaymentType.MER_PAY -> I18nStringKey.continue_to_mer_pay OffSitePaymentType.PAY_PAY -> I18nStringKey.continue_to_paypay OffSitePaymentType.RAKUTEN_PAY -> I18nStringKey.continue_to_rakuten - OffSitePaymentType.LINE_PAY -> I18nStringKey.continue_to_linepay + OffSitePaymentType.LINE_PAY -> I18nStringKey.continue_to_line_pay else -> null } } diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PaymentMethodsRow.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PaymentMethodsRow.kt index 6d4f90b..7728ab6 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PaymentMethodsRow.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/PaymentMethodsRow.kt @@ -88,14 +88,14 @@ private val PaymentMethod.displayName @Composable get() = when (this) { is PaymentMethod.BankTransfer -> i18nStringResource(I18nStringKey.bank_transfer) - is PaymentMethod.BitCash -> i18nStringResource(I18nStringKey.bitcash) + is PaymentMethod.BitCash -> i18nStringResource(I18nStringKey.bit_cash) is PaymentMethod.CreditCard -> i18nStringResource(I18nStringKey.credit_card) is PaymentMethod.Konbini -> i18nStringResource(I18nStringKey.konbini) - is PaymentMethod.NetCash -> i18nStringResource(I18nStringKey.netcash) + is PaymentMethod.NetCash -> i18nStringResource(I18nStringKey.net_cash) is PaymentMethod.OffSitePayment -> when (type) { - OffSitePaymentType.AU_PAY -> i18nStringResource(I18nStringKey.aupay) + OffSitePaymentType.AU_PAY -> i18nStringResource(I18nStringKey.au_pay) OffSitePaymentType.ALI_PAY -> i18nStringResource(I18nStringKey.alipay) - OffSitePaymentType.MER_PAY -> i18nStringResource(I18nStringKey.merpay) + OffSitePaymentType.MER_PAY -> i18nStringResource(I18nStringKey.mer_pay) OffSitePaymentType.PAY_PAY -> i18nStringResource(I18nStringKey.paypay) OffSitePaymentType.RAKUTEN_PAY -> i18nStringResource(I18nStringKey.rakuten_pay) OffSitePaymentType.LINE_PAY -> i18nStringResource(I18nStringKey.line_pay) @@ -103,8 +103,8 @@ private val PaymentMethod.displayName } is PaymentMethod.Other -> i18nStringResource(I18nStringKey.other) is PaymentMethod.Paidy -> i18nStringResource(I18nStringKey.paidy) - is PaymentMethod.PayEasy -> i18nStringResource(I18nStringKey.payeasy) - is PaymentMethod.WebMoney -> i18nStringResource(I18nStringKey.webmoney) + is PaymentMethod.PayEasy -> i18nStringResource(I18nStringKey.pay_easy) + is PaymentMethod.WebMoney -> i18nStringResource(I18nStringKey.web_money) } private val PaymentMethod.displayIcon diff --git a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/WebMoneyForm.kt b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/WebMoneyForm.kt index 8e44680..459e66b 100644 --- a/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/WebMoneyForm.kt +++ b/shared/src/commonMain/kotlin/com/komoju/mobile/sdk/ui/screens/payment/composables/WebMoneyForm.kt @@ -33,7 +33,7 @@ internal fun WebMoneyForm( Column { TextField( value = webMoneyDisplayData.prepaidNumber, - title = i18nStringResource(I18nStringKey.webmoney_information), + title = i18nStringResource(I18nStringKey.web_money_information), placeholder = i18nStringResource(I18nStringKey.prepaid_number), onValueChange = { onWebMoneyDisplayDataChange(webMoneyDisplayData.copy(prepaidNumber = it)) From 67004f62d3206732b9aea7366357cf7ff89f7735 Mon Sep 17 00:00:00 2001 From: amnix Date: Wed, 13 Nov 2024 09:41:46 +0900 Subject: [PATCH 11/11] ktlint fixup --- .../src/main/java/com/komoju/android/sdk/KomojuAndroidSDK.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/android/src/main/java/com/komoju/android/sdk/KomojuAndroidSDK.kt b/android/src/main/java/com/komoju/android/sdk/KomojuAndroidSDK.kt index c8a333e..c0785d3 100644 --- a/android/src/main/java/com/komoju/android/sdk/KomojuAndroidSDK.kt +++ b/android/src/main/java/com/komoju/android/sdk/KomojuAndroidSDK.kt @@ -9,12 +9,12 @@ import com.komoju.android.sdk.types.Language import com.komoju.mobile.sdk.KomojuMobileSDKConfiguration import com.komoju.mobile.sdk.KomojuMobileSDKPaymentResult import com.komoju.mobile.sdk.canProcessPayment +import com.komoju.mobile.sdk.ui.theme.ConfigurableTheme as CoreConfigurableTheme import com.komoju.mobile.sdk.ui.theme.DefaultConfigurableTheme import com.komoju.mobile.sdk.ui.theme.toColor -import kotlinx.parcelize.Parcelize import kotlin.contracts.ExperimentalContracts import kotlin.contracts.contract -import com.komoju.mobile.sdk.ui.theme.ConfigurableTheme as CoreConfigurableTheme +import kotlinx.parcelize.Parcelize /** * Singleton object providing the main SDK functionalities for Komoju Android integration.

4ibl@Ui~a?d!<&$*Y) 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 diff --git a/shared/src/commonMain/composeResources/font/komoju_font_inter_regular.ttf b/shared/src/commonMain/composeResources/font/komoju_font_inter_regular.ttf deleted file mode 100644 index ce097c8256a78e54c70e401c670a7fab0a138621..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 342680 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