create-du-app 0.1.3 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -9
- package/package.json +6 -5
- package/src/generate.js +15 -2
- package/src/index.js +15 -9
- package/src/prompts.js +1 -1
- package/templates/mobile/expo/.env.example +5 -0
- package/templates/mobile/expo/.eslintrc.js +7 -0
- package/templates/mobile/expo/.prettierrc.js +7 -0
- package/templates/mobile/expo/.svgrrc.js +9 -0
- package/templates/mobile/expo/README.md +70 -7
- package/templates/mobile/expo/_gitignore +20 -0
- package/templates/mobile/expo/_package.json +60 -1
- package/templates/mobile/expo/app.json +26 -0
- package/templates/mobile/expo/babel.config.js +21 -0
- package/templates/mobile/expo/index.js +7 -0
- package/templates/mobile/expo/metro.config.js +31 -0
- package/templates/mobile/expo/src/app/App.tsx +24 -0
- package/templates/mobile/expo/src/app/app-provider.tsx +40 -0
- package/templates/mobile/expo/src/app/config/translation.ts +30 -0
- package/templates/mobile/expo/src/app/index.ts +1 -0
- package/templates/mobile/expo/src/app/navigation/app-route-type.ts +27 -0
- package/templates/mobile/expo/src/app/navigation/bottom-tabs.tsx +34 -0
- package/templates/mobile/expo/src/app/navigation/index.tsx +14 -0
- package/templates/mobile/expo/src/app/stores/auth.store.ts +33 -0
- package/templates/mobile/expo/src/app/stores/common.store.ts +19 -0
- package/templates/mobile/expo/src/app/stores/index.ts +3 -0
- package/templates/mobile/expo/src/app/stores/loading.store.ts +22 -0
- package/templates/mobile/expo/src/assets/Images/empty-list.png +0 -0
- package/templates/mobile/expo/src/assets/Images/index.ts +5 -0
- package/templates/mobile/expo/src/assets/Images/screen-bg-gradian.png +0 -0
- package/templates/mobile/expo/src/assets/i18n/en.json +28 -0
- package/templates/mobile/expo/src/assets/i18n/fr.json +28 -0
- package/templates/mobile/expo/src/assets/lotties/index.ts +3 -0
- package/templates/mobile/expo/src/assets/lotties/loading.json +1 -0
- package/templates/mobile/expo/src/assets/svgs/arrow-left.svg +3 -0
- package/templates/mobile/expo/src/assets/svgs/arrow-right.svg +3 -0
- package/templates/mobile/expo/src/assets/svgs/calendar.svg +12 -0
- package/templates/mobile/expo/src/assets/svgs/check.svg +3 -0
- package/templates/mobile/expo/src/assets/svgs/close.svg +3 -0
- package/templates/mobile/expo/src/assets/svgs/eye-hide.svg +3 -0
- package/templates/mobile/expo/src/assets/svgs/eye.svg +4 -0
- package/templates/mobile/expo/src/assets/svgs/index.ts +29 -0
- package/templates/mobile/expo/src/assets/svgs/minus.svg +3 -0
- package/templates/mobile/expo/src/assets/svgs/plus.svg +3 -0
- package/templates/mobile/expo/src/assets/svgs/search.svg +3 -0
- package/templates/mobile/expo/src/assets/svgs/toast-error.svg +5 -0
- package/templates/mobile/expo/src/assets/svgs/toast-success.svg +4 -0
- package/templates/mobile/expo/src/core/api/endpoints.ts +8 -0
- package/templates/mobile/expo/src/core/api/example.api.ts +53 -0
- package/templates/mobile/expo/src/core/api/index.ts +4 -0
- package/templates/mobile/expo/src/core/components/common/index.ts +1 -0
- package/templates/mobile/expo/src/core/components/common/list-empty/index.ts +2 -0
- package/templates/mobile/expo/src/core/components/common/list-empty/list-empty.tsx +30 -0
- package/templates/mobile/expo/src/core/components/common/list-empty/list-empty.type.ts +5 -0
- package/templates/mobile/expo/src/core/components/forms/date-time-picker.modal.tsx +116 -0
- package/templates/mobile/expo/src/core/components/forms/hf-date-time.tsx +293 -0
- package/templates/mobile/expo/src/core/components/forms/hf-password-input.tsx +153 -0
- package/templates/mobile/expo/src/core/components/forms/hf-text-input.tsx +59 -0
- package/templates/mobile/expo/src/core/components/forms/hf-time-picker.tsx +116 -0
- package/templates/mobile/expo/src/core/components/forms/index.ts +4 -0
- package/templates/mobile/expo/src/core/components/index.ts +5 -0
- package/templates/mobile/expo/src/core/components/loading/index.ts +1 -0
- package/templates/mobile/expo/src/core/components/loading/loading-app/index.ts +1 -0
- package/templates/mobile/expo/src/core/components/loading/loading-app/loading-app.tsx +50 -0
- package/templates/mobile/expo/src/core/components/offline/index.ts +1 -0
- package/templates/mobile/expo/src/core/components/offline/offline-banner.tsx +186 -0
- package/templates/mobile/expo/src/core/components/screen/index.ts +1 -0
- package/templates/mobile/expo/src/core/components/screen/screen-container/index.ts +1 -0
- package/templates/mobile/expo/src/core/components/screen/screen-container/screen-container.tsx +248 -0
- package/templates/mobile/expo/src/core/components/splash/index.ts +1 -0
- package/templates/mobile/expo/src/core/components/splash/splash-overlay/index.ts +1 -0
- package/templates/mobile/expo/src/core/components/splash/splash-overlay/splash-overlay.tsx +93 -0
- package/templates/mobile/expo/src/core/components/ui/animated-list-item/animated-list-item.tsx +48 -0
- package/templates/mobile/expo/src/core/components/ui/animated-list-item/animated-list-item.type.ts +10 -0
- package/templates/mobile/expo/src/core/components/ui/animated-list-item/index.ts +2 -0
- package/templates/mobile/expo/src/core/components/ui/app-image/app-image.tsx +101 -0
- package/templates/mobile/expo/src/core/components/ui/app-image/app-image.type.ts +19 -0
- package/templates/mobile/expo/src/core/components/ui/app-image/index.ts +2 -0
- package/templates/mobile/expo/src/core/components/ui/asset-placeholder/asset-placeholder.tsx +76 -0
- package/templates/mobile/expo/src/core/components/ui/asset-placeholder/index.ts +1 -0
- package/templates/mobile/expo/src/core/components/ui/avatar-image/avatar-image.tsx +90 -0
- package/templates/mobile/expo/src/core/components/ui/avatar-image/index.ts +1 -0
- package/templates/mobile/expo/src/core/components/ui/bottom-sheet/bottom-sheet.tsx +145 -0
- package/templates/mobile/expo/src/core/components/ui/bottom-sheet/bottom-sheet.type.ts +10 -0
- package/templates/mobile/expo/src/core/components/ui/bottom-sheet/index.ts +2 -0
- package/templates/mobile/expo/src/core/components/ui/button/button.style.ts +146 -0
- package/templates/mobile/expo/src/core/components/ui/button/button.tsx +97 -0
- package/templates/mobile/expo/src/core/components/ui/button/button.type.ts +47 -0
- package/templates/mobile/expo/src/core/components/ui/button/index.ts +4 -0
- package/templates/mobile/expo/src/core/components/ui/checkbox/checkbox.tsx +127 -0
- package/templates/mobile/expo/src/core/components/ui/checkbox/checkbox.type.ts +24 -0
- package/templates/mobile/expo/src/core/components/ui/checkbox/index.ts +2 -0
- package/templates/mobile/expo/src/core/components/ui/collapsible-section/collapsible-section.tsx +141 -0
- package/templates/mobile/expo/src/core/components/ui/collapsible-section/collapsible-section.type.ts +10 -0
- package/templates/mobile/expo/src/core/components/ui/collapsible-section/index.ts +2 -0
- package/templates/mobile/expo/src/core/components/ui/components.registry.json +313 -0
- package/templates/mobile/expo/src/core/components/ui/field/field-frame.tsx +62 -0
- package/templates/mobile/expo/src/core/components/ui/field/field.shared.ts +31 -0
- package/templates/mobile/expo/src/core/components/ui/header/header.tsx +196 -0
- package/templates/mobile/expo/src/core/components/ui/header/header.type.ts +30 -0
- package/templates/mobile/expo/src/core/components/ui/header/index.ts +2 -0
- package/templates/mobile/expo/src/core/components/ui/icon-button/icon-button.style.ts +23 -0
- package/templates/mobile/expo/src/core/components/ui/icon-button/icon-button.tsx +66 -0
- package/templates/mobile/expo/src/core/components/ui/icon-button/icon-button.type.ts +25 -0
- package/templates/mobile/expo/src/core/components/ui/icon-button/index.ts +2 -0
- package/templates/mobile/expo/src/core/components/ui/image-slider/image-slider.tsx +107 -0
- package/templates/mobile/expo/src/core/components/ui/image-slider/image-slider.type.ts +10 -0
- package/templates/mobile/expo/src/core/components/ui/image-slider/index.ts +2 -0
- package/templates/mobile/expo/src/core/components/ui/index.ts +25 -0
- package/templates/mobile/expo/src/core/components/ui/label/index.ts +2 -0
- package/templates/mobile/expo/src/core/components/ui/label/label.tsx +36 -0
- package/templates/mobile/expo/src/core/components/ui/label/label.type.ts +12 -0
- package/templates/mobile/expo/src/core/components/ui/modal/index.ts +2 -0
- package/templates/mobile/expo/src/core/components/ui/modal/modal.tsx +62 -0
- package/templates/mobile/expo/src/core/components/ui/modal/modal.type.ts +11 -0
- package/templates/mobile/expo/src/core/components/ui/otp-input/index.ts +2 -0
- package/templates/mobile/expo/src/core/components/ui/otp-input/otp-input.tsx +129 -0
- package/templates/mobile/expo/src/core/components/ui/otp-input/otp-input.type.ts +20 -0
- package/templates/mobile/expo/src/core/components/ui/page-dots/index.ts +1 -0
- package/templates/mobile/expo/src/core/components/ui/page-dots/page-dots.tsx +60 -0
- package/templates/mobile/expo/src/core/components/ui/radio/index.ts +2 -0
- package/templates/mobile/expo/src/core/components/ui/radio/radio.tsx +121 -0
- package/templates/mobile/expo/src/core/components/ui/radio/radio.type.ts +20 -0
- package/templates/mobile/expo/src/core/components/ui/screen/index.ts +1 -0
- package/templates/mobile/expo/src/core/components/ui/screen/screen-gradient.tsx +33 -0
- package/templates/mobile/expo/src/core/components/ui/search-box/index.ts +2 -0
- package/templates/mobile/expo/src/core/components/ui/search-box/search-box.tsx +162 -0
- package/templates/mobile/expo/src/core/components/ui/search-box/search-box.type.ts +26 -0
- package/templates/mobile/expo/src/core/components/ui/segmented-control/index.ts +2 -0
- package/templates/mobile/expo/src/core/components/ui/segmented-control/segmented-control.tsx +86 -0
- package/templates/mobile/expo/src/core/components/ui/segmented-control/segmented-control.type.ts +22 -0
- package/templates/mobile/expo/src/core/components/ui/skeleton/index.ts +2 -0
- package/templates/mobile/expo/src/core/components/ui/skeleton/skeleton.tsx +106 -0
- package/templates/mobile/expo/src/core/components/ui/skeleton/skeleton.type.ts +8 -0
- package/templates/mobile/expo/src/core/components/ui/success-state/index.ts +1 -0
- package/templates/mobile/expo/src/core/components/ui/success-state/success-state.tsx +68 -0
- package/templates/mobile/expo/src/core/components/ui/tabs/index.ts +2 -0
- package/templates/mobile/expo/src/core/components/ui/tabs/tabs.tsx +273 -0
- package/templates/mobile/expo/src/core/components/ui/tabs/tabs.type.ts +21 -0
- package/templates/mobile/expo/src/core/components/ui/tag-input/index.ts +2 -0
- package/templates/mobile/expo/src/core/components/ui/tag-input/tag-input.tsx +146 -0
- package/templates/mobile/expo/src/core/components/ui/tag-input/tag-input.type.ts +22 -0
- package/templates/mobile/expo/src/core/components/ui/text-area/index.ts +2 -0
- package/templates/mobile/expo/src/core/components/ui/text-area/text-area.tsx +90 -0
- package/templates/mobile/expo/src/core/components/ui/text-area/text-area.type.ts +20 -0
- package/templates/mobile/expo/src/core/components/ui/text-field/index.ts +2 -0
- package/templates/mobile/expo/src/core/components/ui/text-field/text-field.tsx +116 -0
- package/templates/mobile/expo/src/core/components/ui/text-field/text-field.type.ts +21 -0
- package/templates/mobile/expo/src/core/components/ui/toggle/index.ts +2 -0
- package/templates/mobile/expo/src/core/components/ui/toggle/toggle.tsx +110 -0
- package/templates/mobile/expo/src/core/components/ui/toggle/toggle.type.ts +19 -0
- package/templates/mobile/expo/src/core/constants/external-urls.constant.ts +5 -0
- package/templates/mobile/expo/src/core/constants/hard-data.constant.ts +0 -0
- package/templates/mobile/expo/src/core/constants/index.ts +2 -0
- package/templates/mobile/expo/src/core/constants/type.constant.ts +3 -0
- package/templates/mobile/expo/src/core/context/index.ts +1 -0
- package/templates/mobile/expo/src/core/context/shared-transition-context.tsx +35 -0
- package/templates/mobile/expo/src/core/hook/index.ts +8 -0
- package/templates/mobile/expo/src/core/hook/useActiveRouteName.ts +63 -0
- package/templates/mobile/expo/src/core/hook/useAppNavigation.tsx +7 -0
- package/templates/mobile/expo/src/core/hook/useBottomInset.tsx +26 -0
- package/templates/mobile/expo/src/core/hook/useDebounce.tsx +16 -0
- package/templates/mobile/expo/src/core/hook/useEndReached.tsx +46 -0
- package/templates/mobile/expo/src/core/hook/useManualRefetch.ts +56 -0
- package/templates/mobile/expo/src/core/hook/useNetworkStatus.ts +68 -0
- package/templates/mobile/expo/src/core/hook/useTimeout.tsx +30 -0
- package/templates/mobile/expo/src/core/index.ts +7 -0
- package/templates/mobile/expo/src/core/services/api.service.ts +230 -0
- package/templates/mobile/expo/src/core/services/device-id.service.ts +37 -0
- package/templates/mobile/expo/src/core/services/index.ts +3 -0
- package/templates/mobile/expo/src/core/services/session-end.bridge.ts +26 -0
- package/templates/mobile/expo/src/core/theme/dark.theme.ts +10 -0
- package/templates/mobile/expo/src/core/theme/index.ts +5 -0
- package/templates/mobile/expo/src/core/theme/light.theme.ts +44 -0
- package/templates/mobile/expo/src/core/theme/theme-context.tsx +82 -0
- package/templates/mobile/expo/src/core/theme/theme.types.ts +26 -0
- package/templates/mobile/expo/src/core/theme/use-themed-styles.ts +25 -0
- package/templates/mobile/expo/src/core/utils/color.util.tsx +198 -0
- package/templates/mobile/expo/src/core/utils/date.util.ts +97 -0
- package/templates/mobile/expo/src/core/utils/device-locale.util.ts +24 -0
- package/templates/mobile/expo/src/core/utils/emitter/index.ts +161 -0
- package/templates/mobile/expo/src/core/utils/emitter/type.ts +40 -0
- package/templates/mobile/expo/src/core/utils/enum.util.tsx +15 -0
- package/templates/mobile/expo/src/core/utils/font.util.tsx +42 -0
- package/templates/mobile/expo/src/core/utils/func.util.ts +48 -0
- package/templates/mobile/expo/src/core/utils/greeting.util.ts +20 -0
- package/templates/mobile/expo/src/core/utils/image-format.util.ts +117 -0
- package/templates/mobile/expo/src/core/utils/image-picker.util.ts +63 -0
- package/templates/mobile/expo/src/core/utils/index.ts +18 -0
- package/templates/mobile/expo/src/core/utils/linking.util.ts +16 -0
- package/templates/mobile/expo/src/core/utils/navigation.util.tsx +100 -0
- package/templates/mobile/expo/src/core/utils/number-format.ts +28 -0
- package/templates/mobile/expo/src/core/utils/query-client.util.ts +35 -0
- package/templates/mobile/expo/src/core/utils/query-persister.util.ts +31 -0
- package/templates/mobile/expo/src/core/utils/schema.util.tsx +2713 -0
- package/templates/mobile/expo/src/core/utils/size.util.tsx +74 -0
- package/templates/mobile/expo/src/core/utils/storage.util.tsx +53 -0
- package/templates/mobile/expo/src/core/utils/toast.util.tsx +151 -0
- package/templates/mobile/expo/src/core/utils/translator.util.tsx +23 -0
- package/templates/mobile/expo/src/core/utils/typography.util.tsx +69 -0
- package/templates/mobile/expo/src/core/utils/validate.util.tsx +13 -0
- package/templates/mobile/expo/src/declarations.d.ts +54 -0
- package/templates/mobile/expo/src/modules/home/home.screen.tsx +110 -0
- package/templates/mobile/expo/src/modules/profile/profile.screen.tsx +29 -0
- package/templates/mobile/expo/src/scripts/link-fonts.js +60 -0
- package/templates/mobile/expo/src/scripts/sync-images.js +56 -0
- package/templates/mobile/expo/src/scripts/sync-svgs.js +50 -0
- package/templates/mobile/expo/src/types/models.d.ts +24 -0
- package/templates/mobile/expo/tsconfig.json +19 -0
- package/templates/mobile/rn/.bundle/config +2 -0
- package/templates/mobile/rn/.env.example +5 -0
- package/templates/mobile/rn/.eslintrc.js +7 -0
- package/templates/mobile/rn/.prettierrc.js +7 -0
- package/templates/mobile/rn/.svgrrc.js +9 -0
- package/templates/mobile/rn/.watchmanconfig +1 -0
- package/templates/mobile/rn/Gemfile +17 -0
- package/templates/mobile/rn/README.md +72 -7
- package/templates/mobile/rn/_gitignore +24 -0
- package/templates/mobile/rn/_package.json +69 -1
- package/templates/mobile/rn/android/app/build.gradle +126 -0
- package/templates/mobile/rn/android/app/debug.keystore +0 -0
- package/templates/mobile/rn/android/app/proguard-rules.pro +10 -0
- package/templates/mobile/rn/android/app/src/main/AndroidManifest.xml +27 -0
- package/templates/mobile/rn/android/app/src/main/java/com/dumobile/MainActivity.kt +22 -0
- package/templates/mobile/rn/android/app/src/main/java/com/dumobile/MainApplication.kt +27 -0
- package/templates/mobile/rn/android/app/src/main/res/drawable/rn_edit_text_material.xml +37 -0
- package/templates/mobile/rn/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
- package/templates/mobile/rn/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
- package/templates/mobile/rn/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
- package/templates/mobile/rn/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
- package/templates/mobile/rn/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
- package/templates/mobile/rn/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
- package/templates/mobile/rn/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
- package/templates/mobile/rn/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
- package/templates/mobile/rn/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
- package/templates/mobile/rn/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
- package/templates/mobile/rn/android/app/src/main/res/values/strings.xml +3 -0
- package/templates/mobile/rn/android/app/src/main/res/values/styles.xml +9 -0
- package/templates/mobile/rn/android/build.gradle +21 -0
- package/templates/mobile/rn/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/templates/mobile/rn/android/gradle/wrapper/gradle-wrapper.properties +7 -0
- package/templates/mobile/rn/android/gradle.properties +44 -0
- package/templates/mobile/rn/android/gradlew +248 -0
- package/templates/mobile/rn/android/gradlew.bat +98 -0
- package/templates/mobile/rn/android/settings.gradle +21 -0
- package/templates/mobile/rn/app.json +4 -0
- package/templates/mobile/rn/babel.config.js +18 -0
- package/templates/mobile/rn/index.js +10 -0
- package/templates/mobile/rn/ios/.xcode.env +11 -0
- package/templates/mobile/rn/ios/DuMobile/AppDelegate.swift +48 -0
- package/templates/mobile/rn/ios/DuMobile/Images.xcassets/AppIcon.appiconset/Contents.json +53 -0
- package/templates/mobile/rn/ios/DuMobile/Images.xcassets/Contents.json +6 -0
- package/templates/mobile/rn/ios/DuMobile/Info.plist +59 -0
- package/templates/mobile/rn/ios/DuMobile/LaunchScreen.storyboard +47 -0
- package/templates/mobile/rn/ios/DuMobile/PrivacyInfo.xcprivacy +37 -0
- package/templates/mobile/rn/ios/DuMobile.xcodeproj/project.pbxproj +475 -0
- package/templates/mobile/rn/ios/DuMobile.xcodeproj/xcshareddata/xcschemes/DuMobile.xcscheme +88 -0
- package/templates/mobile/rn/ios/Podfile +34 -0
- package/templates/mobile/rn/metro.config.js +33 -0
- package/templates/mobile/rn/src/app/App.tsx +24 -0
- package/templates/mobile/rn/src/app/app-provider.tsx +41 -0
- package/templates/mobile/rn/src/app/config/translation.ts +29 -0
- package/templates/mobile/rn/src/app/index.ts +1 -0
- package/templates/mobile/rn/src/app/navigation/app-route-type.ts +27 -0
- package/templates/mobile/rn/src/app/navigation/bottom-tabs.tsx +34 -0
- package/templates/mobile/rn/src/app/navigation/index.tsx +14 -0
- package/templates/mobile/rn/src/app/stores/auth.store.ts +33 -0
- package/templates/mobile/rn/src/app/stores/common.store.ts +19 -0
- package/templates/mobile/rn/src/app/stores/index.ts +3 -0
- package/templates/mobile/rn/src/app/stores/loading.store.ts +22 -0
- package/templates/mobile/rn/src/assets/Images/empty-list.png +0 -0
- package/templates/mobile/rn/src/assets/Images/index.ts +5 -0
- package/templates/mobile/rn/src/assets/Images/screen-bg-gradian.png +0 -0
- package/templates/mobile/rn/src/assets/i18n/en.json +22 -0
- package/templates/mobile/rn/src/assets/i18n/fr.json +22 -0
- package/templates/mobile/rn/src/assets/lotties/index.ts +3 -0
- package/templates/mobile/rn/src/assets/lotties/loading.json +1 -0
- package/templates/mobile/rn/src/assets/svgs/arrow-left.svg +3 -0
- package/templates/mobile/rn/src/assets/svgs/arrow-right.svg +3 -0
- package/templates/mobile/rn/src/assets/svgs/calendar.svg +12 -0
- package/templates/mobile/rn/src/assets/svgs/check.svg +3 -0
- package/templates/mobile/rn/src/assets/svgs/close.svg +3 -0
- package/templates/mobile/rn/src/assets/svgs/eye-hide.svg +3 -0
- package/templates/mobile/rn/src/assets/svgs/eye.svg +4 -0
- package/templates/mobile/rn/src/assets/svgs/index.ts +29 -0
- package/templates/mobile/rn/src/assets/svgs/minus.svg +3 -0
- package/templates/mobile/rn/src/assets/svgs/plus.svg +3 -0
- package/templates/mobile/rn/src/assets/svgs/search.svg +3 -0
- package/templates/mobile/rn/src/assets/svgs/toast-error.svg +5 -0
- package/templates/mobile/rn/src/assets/svgs/toast-success.svg +4 -0
- package/templates/mobile/rn/src/core/api/endpoints.ts +8 -0
- package/templates/mobile/rn/src/core/api/example.api.ts +53 -0
- package/templates/mobile/rn/src/core/api/index.ts +4 -0
- package/templates/mobile/rn/src/core/components/common/index.ts +1 -0
- package/templates/mobile/rn/src/core/components/common/list-empty/index.ts +2 -0
- package/templates/mobile/rn/src/core/components/common/list-empty/list-empty.tsx +30 -0
- package/templates/mobile/rn/src/core/components/common/list-empty/list-empty.type.ts +5 -0
- package/templates/mobile/rn/src/core/components/forms/hf-date-time.tsx +301 -0
- package/templates/mobile/rn/src/core/components/forms/hf-password-input.tsx +153 -0
- package/templates/mobile/rn/src/core/components/forms/hf-text-input.tsx +59 -0
- package/templates/mobile/rn/src/core/components/forms/hf-time-picker.tsx +117 -0
- package/templates/mobile/rn/src/core/components/forms/index.ts +4 -0
- package/templates/mobile/rn/src/core/components/index.ts +5 -0
- package/templates/mobile/rn/src/core/components/loading/index.ts +1 -0
- package/templates/mobile/rn/src/core/components/loading/loading-app/index.ts +1 -0
- package/templates/mobile/rn/src/core/components/loading/loading-app/loading-app.tsx +50 -0
- package/templates/mobile/rn/src/core/components/offline/index.ts +1 -0
- package/templates/mobile/rn/src/core/components/offline/offline-banner.tsx +186 -0
- package/templates/mobile/rn/src/core/components/screen/index.ts +1 -0
- package/templates/mobile/rn/src/core/components/screen/screen-container/index.ts +1 -0
- package/templates/mobile/rn/src/core/components/screen/screen-container/screen-container.tsx +252 -0
- package/templates/mobile/rn/src/core/components/splash/index.ts +1 -0
- package/templates/mobile/rn/src/core/components/splash/splash-overlay/index.ts +1 -0
- package/templates/mobile/rn/src/core/components/splash/splash-overlay/splash-overlay.tsx +93 -0
- package/templates/mobile/rn/src/core/components/ui/animated-list-item/animated-list-item.tsx +48 -0
- package/templates/mobile/rn/src/core/components/ui/animated-list-item/animated-list-item.type.ts +10 -0
- package/templates/mobile/rn/src/core/components/ui/animated-list-item/index.ts +2 -0
- package/templates/mobile/rn/src/core/components/ui/app-image/app-image.tsx +104 -0
- package/templates/mobile/rn/src/core/components/ui/app-image/app-image.type.ts +19 -0
- package/templates/mobile/rn/src/core/components/ui/app-image/index.ts +2 -0
- package/templates/mobile/rn/src/core/components/ui/asset-placeholder/asset-placeholder.tsx +76 -0
- package/templates/mobile/rn/src/core/components/ui/asset-placeholder/index.ts +1 -0
- package/templates/mobile/rn/src/core/components/ui/avatar-image/avatar-image.tsx +90 -0
- package/templates/mobile/rn/src/core/components/ui/avatar-image/index.ts +1 -0
- package/templates/mobile/rn/src/core/components/ui/bottom-sheet/bottom-sheet.tsx +145 -0
- package/templates/mobile/rn/src/core/components/ui/bottom-sheet/bottom-sheet.type.ts +10 -0
- package/templates/mobile/rn/src/core/components/ui/bottom-sheet/index.ts +2 -0
- package/templates/mobile/rn/src/core/components/ui/button/button.style.ts +146 -0
- package/templates/mobile/rn/src/core/components/ui/button/button.tsx +97 -0
- package/templates/mobile/rn/src/core/components/ui/button/button.type.ts +47 -0
- package/templates/mobile/rn/src/core/components/ui/button/index.ts +4 -0
- package/templates/mobile/rn/src/core/components/ui/checkbox/checkbox.tsx +127 -0
- package/templates/mobile/rn/src/core/components/ui/checkbox/checkbox.type.ts +24 -0
- package/templates/mobile/rn/src/core/components/ui/checkbox/index.ts +2 -0
- package/templates/mobile/rn/src/core/components/ui/collapsible-section/collapsible-section.tsx +141 -0
- package/templates/mobile/rn/src/core/components/ui/collapsible-section/collapsible-section.type.ts +10 -0
- package/templates/mobile/rn/src/core/components/ui/collapsible-section/index.ts +2 -0
- package/templates/mobile/rn/src/core/components/ui/components.registry.json +313 -0
- package/templates/mobile/rn/src/core/components/ui/field/field-frame.tsx +62 -0
- package/templates/mobile/rn/src/core/components/ui/field/field.shared.ts +31 -0
- package/templates/mobile/rn/src/core/components/ui/header/header.tsx +196 -0
- package/templates/mobile/rn/src/core/components/ui/header/header.type.ts +30 -0
- package/templates/mobile/rn/src/core/components/ui/header/index.ts +2 -0
- package/templates/mobile/rn/src/core/components/ui/icon-button/icon-button.style.ts +23 -0
- package/templates/mobile/rn/src/core/components/ui/icon-button/icon-button.tsx +66 -0
- package/templates/mobile/rn/src/core/components/ui/icon-button/icon-button.type.ts +25 -0
- package/templates/mobile/rn/src/core/components/ui/icon-button/index.ts +2 -0
- package/templates/mobile/rn/src/core/components/ui/image-slider/image-slider.tsx +107 -0
- package/templates/mobile/rn/src/core/components/ui/image-slider/image-slider.type.ts +10 -0
- package/templates/mobile/rn/src/core/components/ui/image-slider/index.ts +2 -0
- package/templates/mobile/rn/src/core/components/ui/index.ts +25 -0
- package/templates/mobile/rn/src/core/components/ui/label/index.ts +2 -0
- package/templates/mobile/rn/src/core/components/ui/label/label.tsx +36 -0
- package/templates/mobile/rn/src/core/components/ui/label/label.type.ts +12 -0
- package/templates/mobile/rn/src/core/components/ui/modal/index.ts +2 -0
- package/templates/mobile/rn/src/core/components/ui/modal/modal.tsx +62 -0
- package/templates/mobile/rn/src/core/components/ui/modal/modal.type.ts +11 -0
- package/templates/mobile/rn/src/core/components/ui/otp-input/index.ts +2 -0
- package/templates/mobile/rn/src/core/components/ui/otp-input/otp-input.tsx +129 -0
- package/templates/mobile/rn/src/core/components/ui/otp-input/otp-input.type.ts +20 -0
- package/templates/mobile/rn/src/core/components/ui/page-dots/index.ts +1 -0
- package/templates/mobile/rn/src/core/components/ui/page-dots/page-dots.tsx +60 -0
- package/templates/mobile/rn/src/core/components/ui/radio/index.ts +2 -0
- package/templates/mobile/rn/src/core/components/ui/radio/radio.tsx +121 -0
- package/templates/mobile/rn/src/core/components/ui/radio/radio.type.ts +20 -0
- package/templates/mobile/rn/src/core/components/ui/screen/index.ts +1 -0
- package/templates/mobile/rn/src/core/components/ui/screen/screen-gradient.tsx +33 -0
- package/templates/mobile/rn/src/core/components/ui/search-box/index.ts +2 -0
- package/templates/mobile/rn/src/core/components/ui/search-box/search-box.tsx +162 -0
- package/templates/mobile/rn/src/core/components/ui/search-box/search-box.type.ts +26 -0
- package/templates/mobile/rn/src/core/components/ui/segmented-control/index.ts +2 -0
- package/templates/mobile/rn/src/core/components/ui/segmented-control/segmented-control.tsx +86 -0
- package/templates/mobile/rn/src/core/components/ui/segmented-control/segmented-control.type.ts +22 -0
- package/templates/mobile/rn/src/core/components/ui/skeleton/index.ts +2 -0
- package/templates/mobile/rn/src/core/components/ui/skeleton/skeleton.tsx +106 -0
- package/templates/mobile/rn/src/core/components/ui/skeleton/skeleton.type.ts +8 -0
- package/templates/mobile/rn/src/core/components/ui/success-state/index.ts +1 -0
- package/templates/mobile/rn/src/core/components/ui/success-state/success-state.tsx +68 -0
- package/templates/mobile/rn/src/core/components/ui/tabs/index.ts +2 -0
- package/templates/mobile/rn/src/core/components/ui/tabs/tabs.tsx +273 -0
- package/templates/mobile/rn/src/core/components/ui/tabs/tabs.type.ts +21 -0
- package/templates/mobile/rn/src/core/components/ui/tag-input/index.ts +2 -0
- package/templates/mobile/rn/src/core/components/ui/tag-input/tag-input.tsx +146 -0
- package/templates/mobile/rn/src/core/components/ui/tag-input/tag-input.type.ts +22 -0
- package/templates/mobile/rn/src/core/components/ui/text-area/index.ts +2 -0
- package/templates/mobile/rn/src/core/components/ui/text-area/text-area.tsx +90 -0
- package/templates/mobile/rn/src/core/components/ui/text-area/text-area.type.ts +20 -0
- package/templates/mobile/rn/src/core/components/ui/text-field/index.ts +2 -0
- package/templates/mobile/rn/src/core/components/ui/text-field/text-field.tsx +116 -0
- package/templates/mobile/rn/src/core/components/ui/text-field/text-field.type.ts +21 -0
- package/templates/mobile/rn/src/core/components/ui/toggle/index.ts +2 -0
- package/templates/mobile/rn/src/core/components/ui/toggle/toggle.tsx +110 -0
- package/templates/mobile/rn/src/core/components/ui/toggle/toggle.type.ts +19 -0
- package/templates/mobile/rn/src/core/constants/external-urls.constant.ts +5 -0
- package/templates/mobile/rn/src/core/constants/hard-data.constant.ts +0 -0
- package/templates/mobile/rn/src/core/constants/index.ts +2 -0
- package/templates/mobile/rn/src/core/constants/type.constant.ts +3 -0
- package/templates/mobile/rn/src/core/context/index.ts +1 -0
- package/templates/mobile/rn/src/core/context/shared-transition-context.tsx +35 -0
- package/templates/mobile/rn/src/core/hook/index.ts +8 -0
- package/templates/mobile/rn/src/core/hook/useActiveRouteName.ts +63 -0
- package/templates/mobile/rn/src/core/hook/useAppNavigation.tsx +7 -0
- package/templates/mobile/rn/src/core/hook/useBottomInset.tsx +26 -0
- package/templates/mobile/rn/src/core/hook/useDebounce.tsx +16 -0
- package/templates/mobile/rn/src/core/hook/useEndReached.tsx +46 -0
- package/templates/mobile/rn/src/core/hook/useManualRefetch.ts +56 -0
- package/templates/mobile/rn/src/core/hook/useNetworkStatus.ts +68 -0
- package/templates/mobile/rn/src/core/hook/useTimeout.tsx +30 -0
- package/templates/mobile/rn/src/core/index.ts +7 -0
- package/templates/mobile/rn/src/core/services/api.service.ts +230 -0
- package/templates/mobile/rn/src/core/services/device-id.service.ts +23 -0
- package/templates/mobile/rn/src/core/services/index.ts +3 -0
- package/templates/mobile/rn/src/core/services/session-end.bridge.ts +26 -0
- package/templates/mobile/rn/src/core/theme/dark.theme.ts +10 -0
- package/templates/mobile/rn/src/core/theme/index.ts +5 -0
- package/templates/mobile/rn/src/core/theme/light.theme.ts +44 -0
- package/templates/mobile/rn/src/core/theme/theme-context.tsx +82 -0
- package/templates/mobile/rn/src/core/theme/theme.types.ts +26 -0
- package/templates/mobile/rn/src/core/theme/use-themed-styles.ts +25 -0
- package/templates/mobile/rn/src/core/utils/color.util.tsx +198 -0
- package/templates/mobile/rn/src/core/utils/date.util.ts +97 -0
- package/templates/mobile/rn/src/core/utils/device-locale.util.ts +22 -0
- package/templates/mobile/rn/src/core/utils/emitter/index.ts +161 -0
- package/templates/mobile/rn/src/core/utils/emitter/type.ts +40 -0
- package/templates/mobile/rn/src/core/utils/enum.util.tsx +15 -0
- package/templates/mobile/rn/src/core/utils/font.util.tsx +42 -0
- package/templates/mobile/rn/src/core/utils/func.util.ts +48 -0
- package/templates/mobile/rn/src/core/utils/greeting.util.ts +20 -0
- package/templates/mobile/rn/src/core/utils/image-format.util.ts +117 -0
- package/templates/mobile/rn/src/core/utils/image-picker.util.ts +84 -0
- package/templates/mobile/rn/src/core/utils/index.ts +18 -0
- package/templates/mobile/rn/src/core/utils/linking.util.ts +16 -0
- package/templates/mobile/rn/src/core/utils/navigation.util.tsx +100 -0
- package/templates/mobile/rn/src/core/utils/number-format.ts +28 -0
- package/templates/mobile/rn/src/core/utils/query-client.util.ts +35 -0
- package/templates/mobile/rn/src/core/utils/query-persister.util.ts +36 -0
- package/templates/mobile/rn/src/core/utils/schema.util.tsx +2713 -0
- package/templates/mobile/rn/src/core/utils/size.util.tsx +74 -0
- package/templates/mobile/rn/src/core/utils/storage.util.tsx +53 -0
- package/templates/mobile/rn/src/core/utils/toast.util.tsx +151 -0
- package/templates/mobile/rn/src/core/utils/translator.util.tsx +23 -0
- package/templates/mobile/rn/src/core/utils/typography.util.tsx +69 -0
- package/templates/mobile/rn/src/core/utils/validate.util.tsx +13 -0
- package/templates/mobile/rn/src/declarations.d.ts +54 -0
- package/templates/mobile/rn/src/modules/home/home.screen.tsx +67 -0
- package/templates/mobile/rn/src/modules/profile/profile.screen.tsx +29 -0
- package/templates/mobile/rn/src/scripts/link-fonts.js +60 -0
- package/templates/mobile/rn/src/scripts/sync-images.js +56 -0
- package/templates/mobile/rn/src/scripts/sync-svgs.js +50 -0
- package/templates/mobile/rn/src/types/models.d.ts +24 -0
- package/templates/mobile/rn/tsconfig.json +21 -0
- package/templates/shared/src/api-endpoints.ts +8 -0
- package/templates/shared/src/enums.ts +34 -0
- package/templates/shared/src/external-urls.ts +5 -0
- package/templates/shared/src/index.ts +6 -3
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<Scheme
|
|
3
|
+
LastUpgradeVersion = "1210"
|
|
4
|
+
version = "1.3">
|
|
5
|
+
<BuildAction
|
|
6
|
+
parallelizeBuildables = "YES"
|
|
7
|
+
buildImplicitDependencies = "YES">
|
|
8
|
+
<BuildActionEntries>
|
|
9
|
+
<BuildActionEntry
|
|
10
|
+
buildForTesting = "YES"
|
|
11
|
+
buildForRunning = "YES"
|
|
12
|
+
buildForProfiling = "YES"
|
|
13
|
+
buildForArchiving = "YES"
|
|
14
|
+
buildForAnalyzing = "YES">
|
|
15
|
+
<BuildableReference
|
|
16
|
+
BuildableIdentifier = "primary"
|
|
17
|
+
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
|
|
18
|
+
BuildableName = "DuMobile.app"
|
|
19
|
+
BlueprintName = "DuMobile"
|
|
20
|
+
ReferencedContainer = "container:DuMobile.xcodeproj">
|
|
21
|
+
</BuildableReference>
|
|
22
|
+
</BuildActionEntry>
|
|
23
|
+
</BuildActionEntries>
|
|
24
|
+
</BuildAction>
|
|
25
|
+
<TestAction
|
|
26
|
+
buildConfiguration = "Debug"
|
|
27
|
+
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
|
28
|
+
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
|
29
|
+
shouldUseLaunchSchemeArgsEnv = "YES">
|
|
30
|
+
<Testables>
|
|
31
|
+
<TestableReference
|
|
32
|
+
skipped = "NO">
|
|
33
|
+
<BuildableReference
|
|
34
|
+
BuildableIdentifier = "primary"
|
|
35
|
+
BlueprintIdentifier = "00E356ED1AD99517003FC87E"
|
|
36
|
+
BuildableName = "DuMobileTests.xctest"
|
|
37
|
+
BlueprintName = "DuMobileTests"
|
|
38
|
+
ReferencedContainer = "container:DuMobile.xcodeproj">
|
|
39
|
+
</BuildableReference>
|
|
40
|
+
</TestableReference>
|
|
41
|
+
</Testables>
|
|
42
|
+
</TestAction>
|
|
43
|
+
<LaunchAction
|
|
44
|
+
buildConfiguration = "Debug"
|
|
45
|
+
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
|
46
|
+
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
|
47
|
+
launchStyle = "0"
|
|
48
|
+
useCustomWorkingDirectory = "NO"
|
|
49
|
+
ignoresPersistentStateOnLaunch = "NO"
|
|
50
|
+
debugDocumentVersioning = "YES"
|
|
51
|
+
debugServiceExtension = "internal"
|
|
52
|
+
allowLocationSimulation = "YES">
|
|
53
|
+
<BuildableProductRunnable
|
|
54
|
+
runnableDebuggingMode = "0">
|
|
55
|
+
<BuildableReference
|
|
56
|
+
BuildableIdentifier = "primary"
|
|
57
|
+
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
|
|
58
|
+
BuildableName = "DuMobile.app"
|
|
59
|
+
BlueprintName = "DuMobile"
|
|
60
|
+
ReferencedContainer = "container:DuMobile.xcodeproj">
|
|
61
|
+
</BuildableReference>
|
|
62
|
+
</BuildableProductRunnable>
|
|
63
|
+
</LaunchAction>
|
|
64
|
+
<ProfileAction
|
|
65
|
+
buildConfiguration = "Release"
|
|
66
|
+
shouldUseLaunchSchemeArgsEnv = "YES"
|
|
67
|
+
savedToolIdentifier = ""
|
|
68
|
+
useCustomWorkingDirectory = "NO"
|
|
69
|
+
debugDocumentVersioning = "YES">
|
|
70
|
+
<BuildableProductRunnable
|
|
71
|
+
runnableDebuggingMode = "0">
|
|
72
|
+
<BuildableReference
|
|
73
|
+
BuildableIdentifier = "primary"
|
|
74
|
+
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
|
|
75
|
+
BuildableName = "DuMobile.app"
|
|
76
|
+
BlueprintName = "DuMobile"
|
|
77
|
+
ReferencedContainer = "container:DuMobile.xcodeproj">
|
|
78
|
+
</BuildableReference>
|
|
79
|
+
</BuildableProductRunnable>
|
|
80
|
+
</ProfileAction>
|
|
81
|
+
<AnalyzeAction
|
|
82
|
+
buildConfiguration = "Debug">
|
|
83
|
+
</AnalyzeAction>
|
|
84
|
+
<ArchiveAction
|
|
85
|
+
buildConfiguration = "Release"
|
|
86
|
+
revealArchiveInOrganizer = "YES">
|
|
87
|
+
</ArchiveAction>
|
|
88
|
+
</Scheme>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Resolve react_native_pods.rb with node to allow for hoisting
|
|
2
|
+
require Pod::Executable.execute_command('node', ['-p',
|
|
3
|
+
'require.resolve(
|
|
4
|
+
"react-native/scripts/react_native_pods.rb",
|
|
5
|
+
{paths: [process.argv[1]]},
|
|
6
|
+
)', __dir__]).strip
|
|
7
|
+
|
|
8
|
+
platform :ios, min_ios_version_supported
|
|
9
|
+
prepare_react_native_project!
|
|
10
|
+
|
|
11
|
+
linkage = ENV['USE_FRAMEWORKS']
|
|
12
|
+
if linkage != nil
|
|
13
|
+
Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green
|
|
14
|
+
use_frameworks! :linkage => linkage.to_sym
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
target 'DuMobile' do
|
|
18
|
+
config = use_native_modules!
|
|
19
|
+
|
|
20
|
+
use_react_native!(
|
|
21
|
+
:path => config[:reactNativePath],
|
|
22
|
+
# An absolute path to your application root.
|
|
23
|
+
:app_path => "#{Pod::Config.instance.installation_root}/.."
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
post_install do |installer|
|
|
27
|
+
react_native_post_install(
|
|
28
|
+
installer,
|
|
29
|
+
config[:reactNativePath],
|
|
30
|
+
:mac_catalyst_enabled => false,
|
|
31
|
+
# :ccache_enabled => true
|
|
32
|
+
)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
const path = require('path');
|
|
2
|
+
const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config');
|
|
3
|
+
const { wrapWithReanimatedMetroConfig } = require('react-native-reanimated/metro-config');
|
|
4
|
+
|
|
5
|
+
// --- Monorepo paths ---
|
|
6
|
+
const projectRoot = __dirname;
|
|
7
|
+
const monorepoRoot = path.resolve(projectRoot, '../..');
|
|
8
|
+
|
|
9
|
+
const defaultConfig = getDefaultConfig(projectRoot);
|
|
10
|
+
const { assetExts, sourceExts } = defaultConfig.resolver;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Metro configuration (monorepo-aware, with SVG support)
|
|
14
|
+
* https://reactnative.dev/docs/metro
|
|
15
|
+
*
|
|
16
|
+
* @type {import('@react-native/metro-config').MetroConfig}
|
|
17
|
+
*/
|
|
18
|
+
const config = {
|
|
19
|
+
watchFolders: [monorepoRoot],
|
|
20
|
+
transformer: {
|
|
21
|
+
babelTransformerPath: require.resolve('react-native-svg-transformer/react-native'),
|
|
22
|
+
},
|
|
23
|
+
resolver: {
|
|
24
|
+
nodeModulesPaths: [
|
|
25
|
+
path.resolve(projectRoot, 'node_modules'),
|
|
26
|
+
path.resolve(monorepoRoot, 'node_modules'),
|
|
27
|
+
],
|
|
28
|
+
assetExts: assetExts.filter(ext => ext !== 'svg'),
|
|
29
|
+
sourceExts: [...sourceExts, 'svg'],
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
module.exports = wrapWithReanimatedMetroConfig(mergeConfig(defaultConfig, config));
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import React, { useEffect } from 'react';
|
|
2
|
+
import { StatusBar } from 'react-native';
|
|
3
|
+
import { useTheme } from '@src/core/theme';
|
|
4
|
+
import { RootNavigator } from './navigation';
|
|
5
|
+
import { useAuthStore } from './stores';
|
|
6
|
+
import { bootstrapLanguage } from './config/translation';
|
|
7
|
+
|
|
8
|
+
// Root UI component. Restores the persisted session + language, then mounts navigation.
|
|
9
|
+
export function App() {
|
|
10
|
+
const { resolved } = useTheme();
|
|
11
|
+
const hydrate = useAuthStore(s => s.hydrate);
|
|
12
|
+
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
void bootstrapLanguage();
|
|
15
|
+
void hydrate();
|
|
16
|
+
}, [hydrate]);
|
|
17
|
+
|
|
18
|
+
return (
|
|
19
|
+
<>
|
|
20
|
+
<StatusBar barStyle={resolved === 'dark' ? 'light-content' : 'dark-content'} />
|
|
21
|
+
<RootNavigator />
|
|
22
|
+
</>
|
|
23
|
+
);
|
|
24
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { GestureHandlerRootView } from 'react-native-gesture-handler';
|
|
3
|
+
import { KeyboardProvider } from 'react-native-keyboard-controller';
|
|
4
|
+
import { SafeAreaProvider } from 'react-native-safe-area-context';
|
|
5
|
+
import { I18nextProvider } from 'react-i18next';
|
|
6
|
+
import { onlineManager } from '@tanstack/react-query';
|
|
7
|
+
import { PersistQueryClientProvider } from '@tanstack/react-query-persist-client';
|
|
8
|
+
import NetInfo from '@react-native-community/netinfo';
|
|
9
|
+
import Toast from 'react-native-toast-message';
|
|
10
|
+
import { queryClient, mmkvQueryPersister, toastConfig } from '@src/core/utils';
|
|
11
|
+
import { ThemeProvider } from '@src/core/theme';
|
|
12
|
+
import { i18n } from './config/translation';
|
|
13
|
+
import { App } from './App';
|
|
14
|
+
|
|
15
|
+
// Pause/resume React Query based on connectivity (offline-first).
|
|
16
|
+
onlineManager.setEventListener(setOnline =>
|
|
17
|
+
NetInfo.addEventListener(state => setOnline(Boolean(state.isConnected))),
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
// The provider tree. Order: gesture root → keyboard → persisted query cache →
|
|
21
|
+
// i18n → safe-area → theme → app UI. <Toast> is mounted last so it overlays all.
|
|
22
|
+
export default function AppProvider() {
|
|
23
|
+
return (
|
|
24
|
+
<GestureHandlerRootView style={{ flex: 1 }}>
|
|
25
|
+
<KeyboardProvider>
|
|
26
|
+
<PersistQueryClientProvider
|
|
27
|
+
client={queryClient}
|
|
28
|
+
persistOptions={{ persister: mmkvQueryPersister }}>
|
|
29
|
+
<I18nextProvider i18n={i18n}>
|
|
30
|
+
<SafeAreaProvider>
|
|
31
|
+
<ThemeProvider>
|
|
32
|
+
<App />
|
|
33
|
+
<Toast config={toastConfig} />
|
|
34
|
+
</ThemeProvider>
|
|
35
|
+
</SafeAreaProvider>
|
|
36
|
+
</I18nextProvider>
|
|
37
|
+
</PersistQueryClientProvider>
|
|
38
|
+
</KeyboardProvider>
|
|
39
|
+
</GestureHandlerRootView>
|
|
40
|
+
);
|
|
41
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { findBestLanguageTag } from 'react-native-localize';
|
|
2
|
+
import { Translator } from '@src/core/utils';
|
|
3
|
+
import en from '@src/assets/i18n/en.json';
|
|
4
|
+
import fr from '@src/assets/i18n/fr.json';
|
|
5
|
+
|
|
6
|
+
const resources = {
|
|
7
|
+
en: { translation: en },
|
|
8
|
+
fr: { translation: fr },
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
const fallbackLng = 'en';
|
|
12
|
+
const best = findBestLanguageTag(Object.keys(resources));
|
|
13
|
+
|
|
14
|
+
// Initialize i18next once and expose the instance. The provider mounts it in
|
|
15
|
+
// app-provider.tsx; the active language can be changed via Translator.changeLanguages.
|
|
16
|
+
export const i18n = Translator.setup({
|
|
17
|
+
resources,
|
|
18
|
+
lng: best?.languageTag?.split('-')[0] ?? fallbackLng,
|
|
19
|
+
fallbackLng,
|
|
20
|
+
interpolation: { escapeValue: false },
|
|
21
|
+
// RN's JS engine lacks full Intl.PluralRules — use i18next's v3 plural format
|
|
22
|
+
// so it doesn't warn and fall back at runtime.
|
|
23
|
+
compatibilityJSON: 'v3',
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
// Hook persisted-language restore here if you store a user preference.
|
|
27
|
+
export async function bootstrapLanguage(): Promise<void> {
|
|
28
|
+
// no-op for the starter; wire AppStorageUtil + Translator.changeLanguages here.
|
|
29
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './stores';
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// Central screen registry + typed param list. Add a screen here and every
|
|
2
|
+
// navigation call to it (via NavigationUtil / useNavigation) is type-checked.
|
|
3
|
+
export enum Screen {
|
|
4
|
+
Home = 'Home',
|
|
5
|
+
Profile = 'Profile',
|
|
6
|
+
// Auth / feature screens the core references (e.g. session-expired reset).
|
|
7
|
+
// Wire real screens for these as you build the app.
|
|
8
|
+
SignIn = 'SignIn',
|
|
9
|
+
OtpVerification = 'OtpVerification',
|
|
10
|
+
PlayerFull = 'PlayerFull',
|
|
11
|
+
LibraryMain = 'LibraryMain',
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export type NavigatorParamList = {
|
|
15
|
+
[Screen.Home]: undefined;
|
|
16
|
+
[Screen.Profile]: undefined;
|
|
17
|
+
[Screen.SignIn]: undefined;
|
|
18
|
+
[Screen.OtpVerification]: undefined;
|
|
19
|
+
[Screen.PlayerFull]: undefined;
|
|
20
|
+
[Screen.LibraryMain]: undefined;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
declare global {
|
|
24
|
+
namespace ReactNavigation {
|
|
25
|
+
interface RootParamList extends NavigatorParamList {}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
|
|
3
|
+
import { useTranslation } from 'react-i18next';
|
|
4
|
+
import { useTheme } from '@src/core/theme';
|
|
5
|
+
import { Screen } from './app-route-type';
|
|
6
|
+
import { HomeScreen } from '@src/modules/home/home.screen';
|
|
7
|
+
import { ProfileScreen } from '@src/modules/profile/profile.screen';
|
|
8
|
+
|
|
9
|
+
const Tab = createBottomTabNavigator();
|
|
10
|
+
|
|
11
|
+
export function BottomTabs() {
|
|
12
|
+
const { t } = useTranslation();
|
|
13
|
+
const { colors } = useTheme();
|
|
14
|
+
return (
|
|
15
|
+
<Tab.Navigator
|
|
16
|
+
screenOptions={{
|
|
17
|
+
headerStyle: { backgroundColor: colors.bg_elevation_level_1_normal },
|
|
18
|
+
headerTintColor: colors.fg_neutral_normal,
|
|
19
|
+
tabBarStyle: {
|
|
20
|
+
backgroundColor: colors.bg_elevation_level_1_normal,
|
|
21
|
+
borderTopColor: colors.bd_neutral_faded,
|
|
22
|
+
},
|
|
23
|
+
tabBarActiveTintColor: colors.fg_primary_normal,
|
|
24
|
+
tabBarInactiveTintColor: colors.fg_neutral_faded,
|
|
25
|
+
}}>
|
|
26
|
+
<Tab.Screen name={Screen.Home} component={HomeScreen} options={{ title: t('home.title') }} />
|
|
27
|
+
<Tab.Screen
|
|
28
|
+
name={Screen.Profile}
|
|
29
|
+
component={ProfileScreen}
|
|
30
|
+
options={{ title: t('profile.title') }}
|
|
31
|
+
/>
|
|
32
|
+
</Tab.Navigator>
|
|
33
|
+
);
|
|
34
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { NavigationContainer } from '@react-navigation/native';
|
|
3
|
+
import { navigationRef } from '@src/core/utils';
|
|
4
|
+
import { BottomTabs } from './bottom-tabs';
|
|
5
|
+
|
|
6
|
+
// Mounts the navigation tree and wires the global navigationRef so the API
|
|
7
|
+
// layer (and any non-component code) can navigate / reset on session expiry.
|
|
8
|
+
export function RootNavigator() {
|
|
9
|
+
return (
|
|
10
|
+
<NavigationContainer ref={navigationRef}>
|
|
11
|
+
<BottomTabs />
|
|
12
|
+
</NavigationContainer>
|
|
13
|
+
);
|
|
14
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { create } from 'zustand';
|
|
2
|
+
import { AppStorageUtil, StorageKeys } from '@src/core/utils';
|
|
3
|
+
|
|
4
|
+
interface AuthState {
|
|
5
|
+
token: string | null;
|
|
6
|
+
isAuthenticated: boolean;
|
|
7
|
+
setToken: (token: string | null) => void;
|
|
8
|
+
clearTokens: () => void;
|
|
9
|
+
hydrate: () => Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
// Global auth store (Zustand). The API layer reads `token` for the auth header
|
|
13
|
+
// and calls `clearTokens()` on a 401 (see core/services/api.service.ts).
|
|
14
|
+
export const useAuthStore = create<AuthState>()(set => ({
|
|
15
|
+
token: null,
|
|
16
|
+
isAuthenticated: false,
|
|
17
|
+
setToken: token => {
|
|
18
|
+
if (token) {
|
|
19
|
+
AppStorageUtil.setItem(StorageKeys.APP_ACCESS_TOKEN, token);
|
|
20
|
+
} else {
|
|
21
|
+
AppStorageUtil.removeItem(StorageKeys.APP_ACCESS_TOKEN);
|
|
22
|
+
}
|
|
23
|
+
set({ token, isAuthenticated: Boolean(token) });
|
|
24
|
+
},
|
|
25
|
+
clearTokens: () => {
|
|
26
|
+
AppStorageUtil.removeItem(StorageKeys.APP_ACCESS_TOKEN);
|
|
27
|
+
set({ token: null, isAuthenticated: false });
|
|
28
|
+
},
|
|
29
|
+
hydrate: async () => {
|
|
30
|
+
const token = (await AppStorageUtil.getItem(StorageKeys.APP_ACCESS_TOKEN)) as string | null;
|
|
31
|
+
set({ token: token ?? null, isAuthenticated: Boolean(token) });
|
|
32
|
+
},
|
|
33
|
+
}));
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { create } from 'zustand';
|
|
2
|
+
|
|
3
|
+
export interface EnumValue {
|
|
4
|
+
key: string;
|
|
5
|
+
value: string;
|
|
6
|
+
label?: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
interface CommonState {
|
|
10
|
+
/** Server-provided enum/lookup values (seeded after login/bootstrap). */
|
|
11
|
+
enumValues: EnumValue[];
|
|
12
|
+
setEnumValues: (values: EnumValue[]) => void;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// App-wide misc state (enum lookups, etc.). Used by core/utils/func.util.
|
|
16
|
+
export const useCommonStore = create<CommonState>()(set => ({
|
|
17
|
+
enumValues: [],
|
|
18
|
+
setEnumValues: enumValues => set({ enumValues }),
|
|
19
|
+
}));
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { create } from 'zustand';
|
|
2
|
+
|
|
3
|
+
interface LoadingState {
|
|
4
|
+
/** True while at least one non-silent request is in flight. */
|
|
5
|
+
isLoading: boolean;
|
|
6
|
+
count: number;
|
|
7
|
+
showLoading: () => void;
|
|
8
|
+
hideLoading: () => void;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
// Ref-counted global loading flag. The API layer toggles it around non-silent
|
|
12
|
+
// requests; <LoadingApp> renders the overlay when `isLoading` is true.
|
|
13
|
+
export const useLoadingStore = create<LoadingState>()(set => ({
|
|
14
|
+
isLoading: false,
|
|
15
|
+
count: 0,
|
|
16
|
+
showLoading: () => set(s => ({ count: s.count + 1, isLoading: true })),
|
|
17
|
+
hideLoading: () =>
|
|
18
|
+
set(s => {
|
|
19
|
+
const count = Math.max(0, s.count - 1);
|
|
20
|
+
return { count, isLoading: count > 0 };
|
|
21
|
+
}),
|
|
22
|
+
}));
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"home": {
|
|
3
|
+
"title": "Home",
|
|
4
|
+
"subtitle": "Your company mobile starter — built on the shared monorepo core.",
|
|
5
|
+
"features": {
|
|
6
|
+
"nav": { "title": "Navigation", "desc": "React Navigation — typed native-stack + bottom tabs." },
|
|
7
|
+
"data": { "title": "Networking", "desc": "Axios client + React Query, offline cache via MMKV." },
|
|
8
|
+
"i18n": { "title": "i18n", "desc": "react-i18next with device locale (en / fr)." },
|
|
9
|
+
"theme": { "title": "Theming", "desc": "Theme context + design tokens (dark / light)." },
|
|
10
|
+
"forms": { "title": "Forms", "desc": "react-hook-form bindings over the design-system fields." },
|
|
11
|
+
"ui": { "title": "UI kit", "desc": "Buttons, inputs, modals, tabs, skeletons and more." },
|
|
12
|
+
"state": { "title": "State", "desc": "Zustand stores (auth, loading) + AsyncStorage." },
|
|
13
|
+
"shared": { "title": "@repo/shared", "desc": "Types, enums and API contracts shared across apps." }
|
|
14
|
+
},
|
|
15
|
+
"footer": "Edit src/modules/home to make it yours.",
|
|
16
|
+
"loadError": "Failed to load."
|
|
17
|
+
},
|
|
18
|
+
"profile": {
|
|
19
|
+
"title": "Profile",
|
|
20
|
+
"signOut": "Sign out"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"home": {
|
|
3
|
+
"title": "Accueil",
|
|
4
|
+
"subtitle": "Votre starter mobile d'entreprise — basé sur le cœur partagé du monorepo.",
|
|
5
|
+
"features": {
|
|
6
|
+
"nav": { "title": "Navigation", "desc": "React Navigation — native-stack + onglets typés." },
|
|
7
|
+
"data": { "title": "Réseau", "desc": "Client Axios + React Query, cache hors-ligne via MMKV." },
|
|
8
|
+
"i18n": { "title": "i18n", "desc": "react-i18next avec la langue de l'appareil (en / fr)." },
|
|
9
|
+
"theme": { "title": "Thème", "desc": "Contexte de thème + design tokens (sombre / clair)." },
|
|
10
|
+
"forms": { "title": "Formulaires", "desc": "react-hook-form sur les champs du design-system." },
|
|
11
|
+
"ui": { "title": "Kit UI", "desc": "Boutons, champs, modales, onglets, skeletons, etc." },
|
|
12
|
+
"state": { "title": "State", "desc": "Stores Zustand (auth, loading) + AsyncStorage." },
|
|
13
|
+
"shared": { "title": "@repo/shared", "desc": "Types, enums et contrats d'API partagés entre apps." }
|
|
14
|
+
},
|
|
15
|
+
"footer": "Modifiez src/modules/home pour l'adapter.",
|
|
16
|
+
"loadError": "Échec du chargement."
|
|
17
|
+
},
|
|
18
|
+
"profile": {
|
|
19
|
+
"title": "Profil",
|
|
20
|
+
"signOut": "Se déconnecter"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"nm":"Main Scene","ddd":0,"h":500,"w":500,"meta":{"g":"@lottiefiles/creator 1.74.0"},"layers":[{"ty":4,"nm":"Rectangle_1","sr":1,"st":0,"op":90.0000036657751,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[-125,-107,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[250,156.235],"ix":2},"r":{"a":0,"k":135,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Rectangle 1","ix":1,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[57,-57],[57,57],[-57,57],[-57,-57]]}],"t":0},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[{"c":true,"i":[[-31.437,0],[0,-31.437],[31.437,0],[0,31.437]],"o":[[31.437,0],[0,31.437],[-31.437,0],[0,-31.437]],"v":[[0.718,-187.388],[57.64,-130.466],[0.718,-73.544],[-56.204,-130.466]]}],"t":15},{"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[188.6,-188.5],[188.6,-74.5],[74.6,-74.5],[74.6,-188.5]]}],"t":30.0000012219251}],"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"c":{"a":0,"k":[1,1,1],"ix":3}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.4078,0.3059,1],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[-125,-107],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":1},{"ty":4,"nm":"Rectangle_2","sr":1,"st":0,"op":90.0000036657751,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[-125,-107,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[343,250],"ix":2},"r":{"a":0,"k":585,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Rectangle 1","ix":1,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[57,-57],[57,57],[-57,57],[-57,-57]]}],"t":0},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[{"c":true,"i":[[-31.437,0],[0,-31.437],[31.437,0],[0,31.437]],"o":[[31.437,0],[0,31.437],[-31.437,0],[0,-31.437]],"v":[[0.718,-187.388],[57.64,-130.466],[0.718,-73.544],[-56.204,-130.466]]}],"t":15},{"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[188.6,-188.5],[188.6,-74.5],[74.6,-74.5],[74.6,-188.5]]}],"t":30.0000012219251}],"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"c":{"a":0,"k":[1,1,1],"ix":3}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.2118,0.0863,0.6118],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[-125,-107],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":2},{"ty":4,"nm":"Rectangle_3","sr":1,"st":0,"op":90.0000036657751,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[-125,-107,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[250,342.86],"ix":2},"r":{"a":0,"k":315,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Rectangle 1","ix":1,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[57,-57],[57,57],[-57,57],[-57,-57]]}],"t":0},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[{"c":true,"i":[[-31.437,0],[0,-31.437],[31.437,0],[0,31.437]],"o":[[31.437,0],[0,31.437],[-31.437,0],[0,-31.437]],"v":[[0.718,-187.388],[57.64,-130.466],[0.718,-73.544],[-56.204,-130.466]]}],"t":15},{"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[188.6,-188.5],[188.6,-74.5],[74.6,-74.5],[74.6,-188.5]]}],"t":30.0000012219251}],"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"c":{"a":0,"k":[1,1,1],"ix":3}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.4078,0.3059,1],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[-125,-107],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":3},{"ty":4,"nm":"Rectangle_4","sr":1,"st":0,"op":90.0000036657751,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[-125,-107,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[157.156,250],"ix":2},"r":{"a":0,"k":45,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Rectangle 1","ix":1,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[57,-57],[57,57],[-57,57],[-57,-57]]}],"t":0},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[{"c":true,"i":[[-31.437,0],[0,-31.437],[31.437,0],[0,31.437]],"o":[[31.437,0],[0,31.437],[-31.437,0],[0,-31.437]],"v":[[0.718,-187.388],[57.64,-130.466],[0.718,-73.544],[-56.204,-130.466]]}],"t":15},{"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[188.6,-188.5],[188.6,-74.5],[74.6,-74.5],[74.6,-188.5]]}],"t":30.0000012219251}],"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"c":{"a":0,"k":[1,1,1],"ix":3}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.2118,0.0863,0.6118],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[-125,-107],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":4}],"v":"5.7.0","fr":29.9700012207031,"op":31.0000012626559,"ip":0,"assets":[]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M10.0001 4L6.47152 7.5286C6.24929 7.75082 6.13818 7.86193 6.13818 8C6.13818 8.13807 6.24929 8.24918 6.47152 8.4714L10.0001 12" stroke="#F5F5F5" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M9 18L14.2929 12.7071C14.6262 12.3738 14.7929 12.2071 14.7929 12C14.7929 11.7929 14.6262 11.6262 14.2929 11.2929L9 6" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M1.66406 9.99992C1.66406 6.85722 1.66406 5.28587 2.64037 4.30956C3.61668 3.33325 5.18803 3.33325 8.33073 3.33325H11.6641C14.8068 3.33325 16.3781 3.33325 17.3544 4.30956C18.3307 5.28587 18.3307 6.85722 18.3307 9.99992V11.6666C18.3307 14.8093 18.3307 16.3806 17.3544 17.3569C16.3781 18.3333 14.8068 18.3333 11.6641 18.3333H8.33073C5.18803 18.3333 3.61668 18.3333 2.64037 17.3569C1.66406 16.3806 1.66406 14.8093 1.66406 11.6666V9.99992Z" stroke="{currentColor}" stroke-width="1.5"/>
|
|
3
|
+
<path d="M5.83594 3.33325V2.08325" stroke="{currentColor}" stroke-width="1.5" stroke-linecap="round"/>
|
|
4
|
+
<path d="M14.1641 3.33325V2.08325" stroke="{currentColor}" stroke-width="1.5" stroke-linecap="round"/>
|
|
5
|
+
<path d="M2.08594 7.5H17.9193" stroke="{currentColor}" stroke-width="1.5" stroke-linecap="round"/>
|
|
6
|
+
<path d="M15.0026 14.1667C15.0026 14.6269 14.6295 15 14.1693 15C13.709 15 13.3359 14.6269 13.3359 14.1667C13.3359 13.7064 13.709 13.3333 14.1693 13.3333C14.6295 13.3333 15.0026 13.7064 15.0026 14.1667Z" fill="{currentColor}"/>
|
|
7
|
+
<path d="M15.0026 10.8333C15.0026 11.2936 14.6295 11.6667 14.1693 11.6667C13.709 11.6667 13.3359 11.2936 13.3359 10.8333C13.3359 10.3731 13.709 10 14.1693 10C14.6295 10 15.0026 10.3731 15.0026 10.8333Z" fill="{currentColor}"/>
|
|
8
|
+
<path d="M10.8307 14.1667C10.8307 14.6269 10.4576 15 9.9974 15C9.53716 15 9.16406 14.6269 9.16406 14.1667C9.16406 13.7064 9.53716 13.3333 9.9974 13.3333C10.4576 13.3333 10.8307 13.7064 10.8307 14.1667Z" fill="{currentColor}"/>
|
|
9
|
+
<path d="M10.8307 10.8333C10.8307 11.2936 10.4576 11.6667 9.9974 11.6667C9.53716 11.6667 9.16406 11.2936 9.16406 10.8333C9.16406 10.3731 9.53716 10 9.9974 10C10.4576 10 10.8307 10.3731 10.8307 10.8333Z" fill="{currentColor}"/>
|
|
10
|
+
<path d="M6.66667 14.1667C6.66667 14.6269 6.29357 15 5.83333 15C5.3731 15 5 14.6269 5 14.1667C5 13.7064 5.3731 13.3333 5.83333 13.3333C6.29357 13.3333 6.66667 13.7064 6.66667 14.1667Z" fill="{currentColor}"/>
|
|
11
|
+
<path d="M6.66667 10.8333C6.66667 11.2936 6.29357 11.6667 5.83333 11.6667C5.3731 11.6667 5 11.2936 5 10.8333C5 10.3731 5.3731 10 5.83333 10C6.29357 10 6.66667 10.3731 6.66667 10.8333Z" fill="{currentColor}"/>
|
|
12
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M1.67574 1.67574C1.44142 1.91005 1.44142 2.28995 1.67574 2.52426L4.85772 5.70624C4.97487 5.8234 4.97487 6.01335 4.85772 6.13051L1.67574 9.31249C1.44142 9.5468 1.44142 9.9267 1.67574 10.161C1.91005 10.3953 2.28995 10.3953 2.52426 10.161L5.70624 6.97904C5.8234 6.86188 6.01335 6.86188 6.13051 6.97904L9.31249 10.161C9.5468 10.3953 9.9267 10.3953 10.161 10.161C10.3953 9.9267 10.3953 9.5468 10.161 9.31249L6.97904 6.13051C6.86188 6.01335 6.86188 5.8234 6.97904 5.70624L10.161 2.52426C10.3953 2.28995 10.3953 1.91005 10.161 1.67574C9.9267 1.44142 9.5468 1.44142 9.31249 1.67574L6.13051 4.85772C6.01335 4.97487 5.8234 4.97487 5.70624 4.85772L2.52426 1.67574C2.28995 1.44142 1.91005 1.44142 1.67574 1.67574Z" fill="{292929}"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M17.2907 7.7494C17.5204 7.40475 17.4273 6.9391 17.0827 6.70934C16.738 6.47957 16.2724 6.5727 16.0426 6.91735L16.6666 7.33337L17.2907 7.7494ZM3.95735 6.91735C3.72759 6.5727 3.26193 6.47957 2.91729 6.70934C2.57264 6.9391 2.47951 7.40475 2.70928 7.7494L3.33331 7.33337L3.95735 6.91735ZM12.6431 10.6142C12.43 10.259 11.9693 10.1438 11.6141 10.3569C11.2589 10.57 11.1437 11.0307 11.3569 11.3859L12 11L12.6431 10.6142ZM12.3569 13.0526C12.57 13.4078 13.0307 13.5229 13.3859 13.3098C13.741 13.0967 13.8562 12.636 13.6431 12.2808L13 12.6667L12.3569 13.0526ZM15.8636 8.80304C15.5707 8.51015 15.0959 8.51015 14.803 8.80304C14.5101 9.09594 14.5101 9.57081 14.803 9.8637L15.3333 9.33337L15.8636 8.80304ZM16.1363 11.197C16.4292 11.4899 16.9041 11.4899 17.197 11.197C17.4899 10.9041 17.4899 10.4293 17.197 10.1364L16.6666 10.6667L16.1363 11.197ZM2.80298 10.1364C2.51009 10.4293 2.51009 10.9041 2.80298 11.197C3.09588 11.4899 3.57075 11.4899 3.86364 11.197L3.33331 10.6667L2.80298 10.1364ZM5.19698 9.8637C5.48987 9.57081 5.48987 9.09594 5.19698 8.80304C4.90408 8.51015 4.42921 8.51015 4.13632 8.80304L4.66665 9.33337L5.19698 9.8637ZM8.6431 11.3859C8.85621 11.0307 8.74104 10.57 8.38585 10.3569C8.03067 10.1438 7.56997 10.259 7.35686 10.6142L7.99998 11L8.6431 11.3859ZM6.35686 12.2808C6.14375 12.636 6.25892 13.0967 6.61411 13.3098C6.96929 13.5229 7.42999 13.4078 7.6431 13.0526L6.99998 12.6667L6.35686 12.2808ZM16.6666 7.33337C16.0426 6.91735 16.0427 6.91715 16.0429 6.91697C16.0429 6.91693 16.043 6.91677 16.0431 6.91669C16.0432 6.91652 16.0432 6.91642 16.0433 6.91638C16.0433 6.9163 16.0432 6.91645 16.0429 6.91684C16.0424 6.91761 16.0413 6.91932 16.0395 6.92193C16.0359 6.92716 16.0298 6.93599 16.0213 6.9482C16.0042 6.97262 15.9773 7.01048 15.9408 7.05986C15.8679 7.1587 15.7571 7.30324 15.6113 7.47824C15.3188 7.82923 14.8896 8.29733 14.3452 8.76393C13.2447 9.70727 11.7465 10.5834 9.99998 10.5834V11.3334V12.0834C12.2534 12.0834 14.0886 10.9595 15.3214 9.90282C15.9437 9.36942 16.4311 8.83752 16.7636 8.43851C16.9303 8.23851 17.0592 8.07055 17.1477 7.95064C17.192 7.89065 17.2262 7.84257 17.2501 7.80839C17.2621 7.7913 17.2715 7.77768 17.2783 7.76776C17.2816 7.76281 17.2844 7.75878 17.2864 7.75571C17.2875 7.75417 17.2884 7.75288 17.2891 7.75182C17.2894 7.7513 17.2897 7.75083 17.29 7.75043C17.2901 7.75023 17.2903 7.74997 17.2904 7.74987C17.2905 7.74963 17.2907 7.7494 16.6666 7.33337ZM9.99998 11.3334V10.5834C8.25341 10.5834 6.7553 9.70727 5.65474 8.76393C5.11037 8.29733 4.68114 7.82923 4.38865 7.47824C4.24281 7.30324 4.13209 7.1587 4.05914 7.05986C4.02269 7.01048 3.99575 6.97262 3.97866 6.9482C3.97012 6.93599 3.96404 6.92716 3.96047 6.92193C3.95869 6.91932 3.95753 6.91761 3.95701 6.91684C3.95675 6.91645 3.95665 6.9163 3.9567 6.91638C3.95673 6.91642 3.9568 6.91652 3.95691 6.91669C3.95696 6.91677 3.95707 6.91693 3.9571 6.91697C3.95722 6.91715 3.95735 6.91735 3.33331 7.33337C2.70928 7.7494 2.70943 7.74963 2.70959 7.74987C2.70966 7.74997 2.70983 7.75023 2.70996 7.75043C2.71023 7.75083 2.71054 7.7513 2.7109 7.75182C2.7116 7.75288 2.71247 7.75417 2.71351 7.75571C2.71558 7.75878 2.71831 7.76281 2.7217 7.76776C2.72846 7.77768 2.73785 7.7913 2.74981 7.80839C2.77374 7.84257 2.808 7.89065 2.85228 7.95064C2.94078 8.07055 3.06965 8.23851 3.23631 8.43851C3.56882 8.83752 4.05625 9.36942 4.67855 9.90282C5.91133 10.9595 7.74655 12.0834 9.99998 12.0834V11.3334ZM12 11L11.3569 11.3859L12.3569 13.0526L13 12.6667L13.6431 12.2808L12.6431 10.6142L12 11ZM15.3333 9.33337L14.803 9.8637L16.1363 11.197L16.6666 10.6667L17.197 10.1364L15.8636 8.80304L15.3333 9.33337ZM3.33331 10.6667L3.86364 11.197L5.19698 9.8637L4.66665 9.33337L4.13632 8.80304L2.80298 10.1364L3.33331 10.6667ZM7.99998 11L7.35686 10.6142L6.35686 12.2808L6.99998 12.6667L7.6431 13.0526L8.6431 11.3859L7.99998 11Z" fill="#F5F5F5"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M16.3627 9.36336C16.5654 9.64758 16.6667 9.78968 16.6667 10C16.6667 10.2104 16.5654 10.3525 16.3627 10.6367C15.452 11.9137 13.1262 14.6667 10 14.6667C6.87389 14.6667 4.54811 11.9137 3.6374 10.6367C3.43472 10.3525 3.33337 10.2104 3.33337 10C3.33337 9.78968 3.43472 9.64758 3.6374 9.36336C4.5481 8.08634 6.87389 5.33337 10 5.33337C13.1262 5.33337 15.452 8.08633 16.3627 9.36336Z" stroke="#F5F5F5" stroke-width="1.5" stroke-linecap="round"/>
|
|
3
|
+
<path d="M12 10C12 8.89547 11.1046 8.00004 10 8.00004C8.89547 8.00004 8.00004 8.89547 8.00004 10C8.00004 11.1046 8.89547 12 10 12C11.1046 12 12 11.1046 12 10Z" stroke="#F5F5F5" stroke-width="1.5" stroke-linecap="round"/>
|
|
4
|
+
</svg>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// AUTO-GENERATED by `pnpm sync-svgs` (kebab-case.svg -> IconKebabCase).
|
|
2
|
+
// Add an .svg here and re-run the script to regenerate this barrel.
|
|
3
|
+
import IconArrowLeft from './arrow-left.svg';
|
|
4
|
+
import IconArrowRight from './arrow-right.svg';
|
|
5
|
+
import IconCalendar from './calendar.svg';
|
|
6
|
+
import IconCheck from './check.svg';
|
|
7
|
+
import IconClose from './close.svg';
|
|
8
|
+
import IconEyeHide from './eye-hide.svg';
|
|
9
|
+
import IconEye from './eye.svg';
|
|
10
|
+
import IconMinus from './minus.svg';
|
|
11
|
+
import IconPlus from './plus.svg';
|
|
12
|
+
import IconSearch from './search.svg';
|
|
13
|
+
import IconToastError from './toast-error.svg';
|
|
14
|
+
import IconToastSuccess from './toast-success.svg';
|
|
15
|
+
|
|
16
|
+
export {
|
|
17
|
+
IconArrowLeft,
|
|
18
|
+
IconArrowRight,
|
|
19
|
+
IconCalendar,
|
|
20
|
+
IconCheck,
|
|
21
|
+
IconClose,
|
|
22
|
+
IconEyeHide,
|
|
23
|
+
IconEye,
|
|
24
|
+
IconMinus,
|
|
25
|
+
IconPlus,
|
|
26
|
+
IconSearch,
|
|
27
|
+
IconToastError,
|
|
28
|
+
IconToastSuccess,
|
|
29
|
+
};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M21 21L16.65 16.65M19 11C19 15.4183 15.4183 19 11 19C6.58172 19 3 15.4183 3 11C3 6.58172 6.58172 3 11 3C15.4183 3 19 6.58172 19 11Z" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<rect width="24" height="24" rx="12" fill="#FFE0E0"/>
|
|
3
|
+
<path d="M12 8V14" stroke="#FD3936" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
4
|
+
<circle cx="12" cy="17" r="1.5" fill="#FD3936"/>
|
|
5
|
+
</svg>
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<rect width="24" height="24" rx="12" fill="#B9F3E4"/>
|
|
3
|
+
<path d="M12 2.25C10.0716 2.25 8.18657 2.82183 6.58319 3.89317C4.97982 4.96451 3.73013 6.48726 2.99218 8.26884C2.25422 10.0504 2.06114 12.0108 2.43735 13.9021C2.81355 15.7934 3.74215 17.5307 5.10571 18.8943C6.46928 20.2579 8.20656 21.1865 10.0979 21.5627C11.9892 21.9389 13.9496 21.7458 15.7312 21.0078C17.5127 20.2699 19.0355 19.0202 20.1068 17.4168C21.1782 15.8134 21.75 13.9284 21.75 12C21.7473 9.41498 20.7192 6.93661 18.8913 5.10872C17.0634 3.28084 14.585 2.25273 12 2.25ZM16.2806 10.2806L11.0306 15.5306C10.961 15.6004 10.8783 15.6557 10.7872 15.6934C10.6962 15.7312 10.5986 15.7506 10.5 15.7506C10.4014 15.7506 10.3038 15.7312 10.2128 15.6934C10.1218 15.6557 10.039 15.6004 9.96938 15.5306L7.71938 13.2806C7.57865 13.1399 7.49959 12.949 7.49959 12.75C7.49959 12.551 7.57865 12.3601 7.71938 12.2194C7.86011 12.0786 8.05098 11.9996 8.25 11.9996C8.44903 11.9996 8.6399 12.0786 8.78063 12.2194L10.5 13.9397L15.2194 9.21937C15.2891 9.14969 15.3718 9.09442 15.4628 9.0567C15.5539 9.01899 15.6515 8.99958 15.75 8.99958C15.8486 8.99958 15.9461 9.01899 16.0372 9.0567C16.1282 9.09442 16.2109 9.14969 16.2806 9.21937C16.3503 9.28906 16.4056 9.37178 16.4433 9.46283C16.481 9.55387 16.5004 9.65145 16.5004 9.75C16.5004 9.84855 16.481 9.94613 16.4433 10.0372C16.4056 10.1282 16.3503 10.2109 16.2806 10.2806Z" fill="#1FC86E"/>
|
|
4
|
+
</svg>
|