├── .github ├── CONTRIBUTING.md ├── ISSUE_TEMPLATE.md └── PULL_REQUEST_TEMPLATE.md ├── .gitignore ├── README.md ├── mvvm ├── SUI Koober.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── SUI Koober │ ├── App │ ├── AppDelegate.swift │ ├── Koober.swift │ ├── KooberDependencyContainer.swift │ ├── Launching │ │ └── LaunchingView.swift │ ├── MainView.swift │ ├── Running │ │ ├── NewRide │ │ │ ├── ConfirmNewRide │ │ │ │ └── EnjoyTheRideView.swift │ │ │ ├── LocateUser │ │ │ │ └── LocatingUserView.swift │ │ │ ├── NewRideView.swift │ │ │ ├── SelectDropoffLocation │ │ │ │ └── SelectDropoffLocationView.swift │ │ │ ├── SelectRideOptionView.swift │ │ │ └── SendNewRideRequest │ │ │ │ └── SendingNewRideRequestView.swift │ │ ├── Onboard │ │ │ ├── OnboardView.swift │ │ │ ├── SignInView.swift │ │ │ ├── SignInViewModel.swift │ │ │ ├── SignUpView.swift │ │ │ └── WelcomeView.swift │ │ ├── RunningView.swift │ │ └── UserProfile │ │ │ └── UserProfileView.swift │ └── SceneDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ ├── Colors │ │ ├── BackgroundColor.colorset │ │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── PlaceholderTextColor.colorset │ │ │ └── Contents.json │ │ ├── SearchBackgroundColor.colorset │ │ │ └── Contents.json │ │ └── SecondaryBackgroundColor.colorset │ │ │ └── Contents.json │ ├── Contents.json │ └── Images │ │ ├── Contents.json │ │ ├── Onboard │ │ ├── Contents.json │ │ ├── email_icon.imageset │ │ │ ├── Contents.json │ │ │ ├── email_icon.png │ │ │ ├── email_icon@2x.png │ │ │ └── email_icon@3x.png │ │ ├── mobile_icon.imageset │ │ │ ├── Contents.json │ │ │ ├── mobile_icon.png │ │ │ ├── mobile_icon@2x.png │ │ │ └── mobile_icon@3x.png │ │ ├── password_icon.imageset │ │ │ ├── Contents.json │ │ │ ├── password_icon.png │ │ │ ├── password_icon@2x.png │ │ │ └── password_icon@3x.png │ │ ├── person_icon.imageset │ │ │ ├── Contents.json │ │ │ ├── person.png │ │ │ ├── person@2x.png │ │ │ └── person@3x.png │ │ ├── roo_logo.imageset │ │ │ ├── Contents.json │ │ │ ├── roo_logo.png │ │ │ ├── roo_logo@2x.png │ │ │ └── roo_logo@3x.png │ │ └── tag_icon.imageset │ │ │ ├── Contents.json │ │ │ ├── tag.png │ │ │ ├── tag@2x.png │ │ │ └── tag@3x.png │ │ ├── RequestRide │ │ ├── CancelButton.imageset │ │ │ ├── CancelButton.png │ │ │ ├── CancelButton@2x.png │ │ │ ├── CancelButton@3x.png │ │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── DriverEnRoute.imageset │ │ │ ├── Contents.json │ │ │ ├── Driver En Route@1x.png │ │ │ ├── Driver En Route@2x.png │ │ │ └── Driver En Route@3x.png │ │ ├── MapMarkerDropoffLocation.imageset │ │ │ ├── Contents.json │ │ │ ├── map_marker_destination_location.png │ │ │ ├── map_marker_destination_location@2x.png │ │ │ └── map_marker_destination_location@3x.png │ │ ├── MapMarkerPickupLocation.imageset │ │ │ ├── Contents.json │ │ │ ├── map_marker_pickup_location.png │ │ │ ├── map_marker_pickup_location@2x.png │ │ │ └── map_marker_pickup_location@3x.png │ │ ├── ProgressKangaroo.imageset │ │ │ ├── Contents.json │ │ │ ├── progress_kangaroo.png │ │ │ ├── progress_kangaroo@2x.png │ │ │ └── progress_kangaroo@3x.png │ │ ├── RideOptionPicker │ │ │ ├── Contents.json │ │ │ ├── available_kangaroo_marker.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── available_kangaroo_marker.png │ │ │ │ ├── available_kangaroo_marker@2x.png │ │ │ │ └── available_kangaroo_marker@3x.png │ │ │ ├── available_wallabe_marker.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── available_wallabe_marker.png │ │ │ │ ├── available_wallabe_marker@2x.png │ │ │ │ └── available_wallabe_marker@3x.png │ │ │ ├── available_wallaroo_marker.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── available_wallaroo_marker.png │ │ │ │ ├── available_wallaroo_marker@2x.png │ │ │ │ └── available_wallaroo_marker@3x.png │ │ │ ├── ride_option_kangaroo.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── ride_option_kangaroo.png │ │ │ │ ├── ride_option_kangaroo@2x.png │ │ │ │ └── ride_option_kangaroo@3x.png │ │ │ ├── ride_option_kangaroo_selected.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── ride_option_kangaroo_selected.png │ │ │ │ ├── ride_option_kangaroo_selected@2x.png │ │ │ │ └── ride_option_kangaroo_selected@3x.png │ │ │ ├── ride_option_wallabee.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── ride_option_wallabee.png │ │ │ │ ├── ride_option_wallabee@2x.png │ │ │ │ └── ride_option_wallabee@3x.png │ │ │ ├── ride_option_wallabee_selected.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── ride_option_wallabee_selected.png │ │ │ │ ├── ride_option_wallabee_selected@2x.png │ │ │ │ └── ride_option_wallabee_selected@3x.png │ │ │ ├── ride_option_wallaroo.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── ride_option_wallaroo.png │ │ │ │ ├── ride_option_wallaroo@2x.png │ │ │ │ └── ride_option_wallaroo@3x.png │ │ │ └── ride_option_wallaroo_selected.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── ride_option_wallaroo_selected.png │ │ │ │ ├── ride_option_wallaroo_selected@2x.png │ │ │ │ └── ride_option_wallaroo_selected@3x.png │ │ ├── SetPickupLocationLoader.imageset │ │ │ ├── Contents.json │ │ │ ├── set_pickup_location_loader.png │ │ │ ├── set_pickup_location_loader@2x.png │ │ │ └── set_pickup_location_loader@3x.png │ │ ├── available_placeholder_marker.imageset │ │ │ ├── Contents.json │ │ │ ├── available_placeholder_marker.png │ │ │ ├── available_placeholder_marker@2x.png │ │ │ └── available_placeholder_marker@3x.png │ │ ├── koober.imageset │ │ │ ├── Contents.json │ │ │ ├── Icon-60@2x.png │ │ │ └── Icon-60@3x.png │ │ ├── requesting_indicator.imageset │ │ │ ├── Contents.json │ │ │ ├── requesting_indicator.png │ │ │ ├── requesting_indicator@2x.png │ │ │ └── requesting_indicator@3x.png │ │ ├── ride_option_placeholder.imageset │ │ │ ├── Contents.json │ │ │ ├── ride_option_placeholder.png │ │ │ ├── ride_option_placeholder@2x.png │ │ │ └── ride_option_placeholder@3x.png │ │ ├── ride_option_placeholder_selected.imageset │ │ │ ├── Contents.json │ │ │ ├── ride_option_wallabee_selected.png │ │ │ ├── ride_option_wallabee_selected@2x.png │ │ │ └── ride_option_wallabee_selected@3x.png │ │ └── success_message.imageset │ │ │ ├── Contents.json │ │ │ ├── success_message.png │ │ │ ├── success_message@2x.png │ │ │ └── success_message@3x.png │ │ ├── SelectPaymentMethod │ │ ├── Contents.json │ │ ├── card_icon.imageset │ │ │ ├── Contents.json │ │ │ ├── card_icon.png │ │ │ ├── card_icon@2x.png │ │ │ └── card_icon@3x.png │ │ └── selected_icon.imageset │ │ │ ├── Contents.json │ │ │ ├── selected_icon.png │ │ │ ├── selected_icon@2x.png │ │ │ └── selected_icon@3x.png │ │ ├── roo-icon.imageset │ │ ├── Contents.json │ │ ├── roo-icon.png │ │ ├── roo-icon@2x.png │ │ └── roo-icon@3x.png │ │ ├── rw-logo.imageset │ │ ├── Contents.json │ │ └── Razewarelogo_1024.png │ │ ├── rwdevcon-bg.imageset │ │ ├── Contents.json │ │ └── rwdevcon-bg.png │ │ └── rwdevcon-logo.imageset │ │ ├── Contents.json │ │ └── rwdevcon-logo.png │ ├── Base.lproj │ └── LaunchScreen.storyboard │ ├── Info.plist │ ├── Preview Content │ └── Preview Assets.xcassets │ │ └── Contents.json │ ├── ReusableModels │ └── ErrorMessage.swift │ ├── ReusableViews │ └── FullscreenView.swift │ ├── Subsystems │ ├── UserAuthenticationRemoteAPI.swift │ └── UserSessionStore.swift │ └── UseCases │ └── SignInUseCase.swift └── swift-state ├── SUI Koober.xcodeproj ├── project.pbxproj └── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ └── IDEWorkspaceChecks.plist └── SUI Koober ├── App ├── AppDelegate.swift ├── Koober.swift ├── KooberDependencyContainer.swift ├── Launching │ └── LaunchingView.swift ├── MainView.swift ├── Running │ ├── NewRide │ │ ├── ConfirmNewRide │ │ │ └── EnjoyTheRideView.swift │ │ ├── LocateUser │ │ │ └── LocatingUserView.swift │ │ ├── NewRideView.swift │ │ ├── SelectDropoffLocation │ │ │ └── SelectDropoffLocationView.swift │ │ ├── SelectRideOptionView.swift │ │ └── SendNewRideRequest │ │ │ └── SendingNewRideRequestView.swift │ ├── Onboard │ │ ├── OnboardView.swift │ │ ├── SignInView.swift │ │ ├── SignInViewModel.swift │ │ ├── SignUpView.swift │ │ └── WelcomeView.swift │ ├── RunningView.swift │ └── UserProfile │ │ └── UserProfileView.swift └── SceneDelegate.swift ├── Assets.xcassets ├── AppIcon.appiconset │ └── Contents.json ├── Colors │ ├── BackgroundColor.colorset │ │ └── Contents.json │ ├── Contents.json │ ├── PlaceholderTextColor.colorset │ │ └── Contents.json │ ├── SearchBackgroundColor.colorset │ │ └── Contents.json │ └── SecondaryBackgroundColor.colorset │ │ └── Contents.json ├── Contents.json └── Images │ ├── Contents.json │ ├── Onboard │ ├── Contents.json │ ├── email_icon.imageset │ │ ├── Contents.json │ │ ├── email_icon.png │ │ ├── email_icon@2x.png │ │ └── email_icon@3x.png │ ├── mobile_icon.imageset │ │ ├── Contents.json │ │ ├── mobile_icon.png │ │ ├── mobile_icon@2x.png │ │ └── mobile_icon@3x.png │ ├── password_icon.imageset │ │ ├── Contents.json │ │ ├── password_icon.png │ │ ├── password_icon@2x.png │ │ └── password_icon@3x.png │ ├── person_icon.imageset │ │ ├── Contents.json │ │ ├── person.png │ │ ├── person@2x.png │ │ └── person@3x.png │ ├── roo_logo.imageset │ │ ├── Contents.json │ │ ├── roo_logo.png │ │ ├── roo_logo@2x.png │ │ └── roo_logo@3x.png │ └── tag_icon.imageset │ │ ├── Contents.json │ │ ├── tag.png │ │ ├── tag@2x.png │ │ └── tag@3x.png │ ├── RequestRide │ ├── CancelButton.imageset │ │ ├── CancelButton.png │ │ ├── CancelButton@2x.png │ │ ├── CancelButton@3x.png │ │ └── Contents.json │ ├── Contents.json │ ├── DriverEnRoute.imageset │ │ ├── Contents.json │ │ ├── Driver En Route@1x.png │ │ ├── Driver En Route@2x.png │ │ └── Driver En Route@3x.png │ ├── MapMarkerDropoffLocation.imageset │ │ ├── Contents.json │ │ ├── map_marker_destination_location.png │ │ ├── map_marker_destination_location@2x.png │ │ └── map_marker_destination_location@3x.png │ ├── MapMarkerPickupLocation.imageset │ │ ├── Contents.json │ │ ├── map_marker_pickup_location.png │ │ ├── map_marker_pickup_location@2x.png │ │ └── map_marker_pickup_location@3x.png │ ├── ProgressKangaroo.imageset │ │ ├── Contents.json │ │ ├── progress_kangaroo.png │ │ ├── progress_kangaroo@2x.png │ │ └── progress_kangaroo@3x.png │ ├── RideOptionPicker │ │ ├── Contents.json │ │ ├── available_kangaroo_marker.imageset │ │ │ ├── Contents.json │ │ │ ├── available_kangaroo_marker.png │ │ │ ├── available_kangaroo_marker@2x.png │ │ │ └── available_kangaroo_marker@3x.png │ │ ├── available_wallabe_marker.imageset │ │ │ ├── Contents.json │ │ │ ├── available_wallabe_marker.png │ │ │ ├── available_wallabe_marker@2x.png │ │ │ └── available_wallabe_marker@3x.png │ │ ├── available_wallaroo_marker.imageset │ │ │ ├── Contents.json │ │ │ ├── available_wallaroo_marker.png │ │ │ ├── available_wallaroo_marker@2x.png │ │ │ └── available_wallaroo_marker@3x.png │ │ ├── ride_option_kangaroo.imageset │ │ │ ├── Contents.json │ │ │ ├── ride_option_kangaroo.png │ │ │ ├── ride_option_kangaroo@2x.png │ │ │ └── ride_option_kangaroo@3x.png │ │ ├── ride_option_kangaroo_selected.imageset │ │ │ ├── Contents.json │ │ │ ├── ride_option_kangaroo_selected.png │ │ │ ├── ride_option_kangaroo_selected@2x.png │ │ │ └── ride_option_kangaroo_selected@3x.png │ │ ├── ride_option_wallabee.imageset │ │ │ ├── Contents.json │ │ │ ├── ride_option_wallabee.png │ │ │ ├── ride_option_wallabee@2x.png │ │ │ └── ride_option_wallabee@3x.png │ │ ├── ride_option_wallabee_selected.imageset │ │ │ ├── Contents.json │ │ │ ├── ride_option_wallabee_selected.png │ │ │ ├── ride_option_wallabee_selected@2x.png │ │ │ └── ride_option_wallabee_selected@3x.png │ │ ├── ride_option_wallaroo.imageset │ │ │ ├── Contents.json │ │ │ ├── ride_option_wallaroo.png │ │ │ ├── ride_option_wallaroo@2x.png │ │ │ └── ride_option_wallaroo@3x.png │ │ └── ride_option_wallaroo_selected.imageset │ │ │ ├── Contents.json │ │ │ ├── ride_option_wallaroo_selected.png │ │ │ ├── ride_option_wallaroo_selected@2x.png │ │ │ └── ride_option_wallaroo_selected@3x.png │ ├── SetPickupLocationLoader.imageset │ │ ├── Contents.json │ │ ├── set_pickup_location_loader.png │ │ ├── set_pickup_location_loader@2x.png │ │ └── set_pickup_location_loader@3x.png │ ├── available_placeholder_marker.imageset │ │ ├── Contents.json │ │ ├── available_placeholder_marker.png │ │ ├── available_placeholder_marker@2x.png │ │ └── available_placeholder_marker@3x.png │ ├── koober.imageset │ │ ├── Contents.json │ │ ├── Icon-60@2x.png │ │ └── Icon-60@3x.png │ ├── requesting_indicator.imageset │ │ ├── Contents.json │ │ ├── requesting_indicator.png │ │ ├── requesting_indicator@2x.png │ │ └── requesting_indicator@3x.png │ ├── ride_option_placeholder.imageset │ │ ├── Contents.json │ │ ├── ride_option_placeholder.png │ │ ├── ride_option_placeholder@2x.png │ │ └── ride_option_placeholder@3x.png │ ├── ride_option_placeholder_selected.imageset │ │ ├── Contents.json │ │ ├── ride_option_wallabee_selected.png │ │ ├── ride_option_wallabee_selected@2x.png │ │ └── ride_option_wallabee_selected@3x.png │ └── success_message.imageset │ │ ├── Contents.json │ │ ├── success_message.png │ │ ├── success_message@2x.png │ │ └── success_message@3x.png │ ├── SelectPaymentMethod │ ├── Contents.json │ ├── card_icon.imageset │ │ ├── Contents.json │ │ ├── card_icon.png │ │ ├── card_icon@2x.png │ │ └── card_icon@3x.png │ └── selected_icon.imageset │ │ ├── Contents.json │ │ ├── selected_icon.png │ │ ├── selected_icon@2x.png │ │ └── selected_icon@3x.png │ ├── roo-icon.imageset │ ├── Contents.json │ ├── roo-icon.png │ ├── roo-icon@2x.png │ └── roo-icon@3x.png │ ├── rw-logo.imageset │ ├── Contents.json │ └── Razewarelogo_1024.png │ ├── rwdevcon-bg.imageset │ ├── Contents.json │ └── rwdevcon-bg.png │ └── rwdevcon-logo.imageset │ ├── Contents.json │ └── rwdevcon-logo.png ├── Base.lproj └── LaunchScreen.storyboard ├── Info.plist ├── Preview Content └── Preview Assets.xcassets │ └── Contents.json ├── ReusableModels └── ErrorMessage.swift ├── ReusableViews └── FullscreenView.swift ├── Subsystems ├── UserAuthenticationRemoteAPI.swift └── UserSessionStore.swift └── UseCases └── SignInUseCase.swift /.github/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # SUI Koober 2 | 3 | The purpose of this project is to experiment with the new frameworks released in WWDC 2019. As such, the main focus of this project is for **learning**. 4 | 5 | Here are the basic guidelines for contribution: 6 | 7 | * Write small, bite-sized PRs with accompanying details to explain the changes. You should write the description as if you are trying to teach a concept. This is really helpful for reviewers to understand how your changes affect the app - especially since we're all tackling a brand new way to iOS development. 8 | * Make sure you adhere to the ![style guide](https://github.com/raywenderlich/swift-style-guide). This really helps with review and keeps the flow of the codebase as consistent as possible. 9 | 10 | Since this app is based on ![Advanced iOS Architecture](https://store.raywenderlich.com/products/advanced-ios-app-architecture), it would be useful to read through the book to get an understanding on the direction of the project 11 | 12 | 13 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ## Brief 2 | 3 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ## Checklist 2 | 3 | - [ ] I've looked at the [contribution guidelines](CONTRIBUTING.md). 4 | 5 | ## Description 6 | 7 | 8 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # General 2 | .DS_Store 3 | .AppleDouble 4 | .LSOverride 5 | 6 | # Icon must end with two \r 7 | Icon 8 | 9 | # Thumbnails 10 | ._* 11 | 12 | # Files that might appear in the root of a volume 13 | .DocumentRevisions-V100 14 | .fseventsd 15 | .Spotlight-V100 16 | .TemporaryItems 17 | .Trashes 18 | .VolumeIcon.icns 19 | .com.apple.timemachine.donotpresent 20 | 21 | # Directories potentially created on remote AFP share 22 | .AppleDB 23 | .AppleDesktop 24 | Network Trash Folder 25 | Temporary Items 26 | .apdisk 27 | 28 | # Xcode 29 | # 30 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 31 | 32 | ## Build generated 33 | build/ 34 | DerivedData/ 35 | 36 | ## Various settings 37 | *.pbxuser 38 | !default.pbxuser 39 | *.mode1v3 40 | !default.mode1v3 41 | *.mode2v3 42 | !default.mode2v3 43 | *.perspectivev3 44 | !default.perspectivev3 45 | xcuserdata/ 46 | 47 | ## Other 48 | *.moved-aside 49 | *.xccheckout 50 | *.xcscmblueprint 51 | 52 | ## Obj-C/Swift specific 53 | *.hmap 54 | *.ipa 55 | *.dSYM.zip 56 | *.dSYM 57 | 58 | ## Playgrounds 59 | timeline.xctimeline 60 | playground.xcworkspace 61 | 62 | # Swift Package Manager 63 | # 64 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 65 | # Packages/ 66 | # Package.pins 67 | # Package.resolved 68 | .build/ 69 | 70 | # CocoaPods 71 | # 72 | # We recommend against adding the Pods directory to your .gitignore. However 73 | # you should judge for yourself, the pros and cons are mentioned at: 74 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 75 | # 76 | # Pods/ 77 | 78 | # Carthage 79 | # 80 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 81 | # Carthage/Checkouts 82 | 83 | Carthage/Build 84 | 85 | # fastlane 86 | # 87 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 88 | # screenshots whenever they are needed. 89 | # For more information about the recommended setup visit: 90 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 91 | 92 | fastlane/report.xml 93 | fastlane/Preview.html 94 | fastlane/screenshots/**/*.png 95 | fastlane/test_output 96 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # SwiftUI example app: Koober 2 | We're porting the example app from our Advanced iOS App Architecture book from UIKit to SwiftUI and we are sharing the code in this repo. 3 | 4 | Please feel free to follow along and/or contribute. This is an experimental codebase we're using to learn how to best architect SwiftUI apps. 5 | 6 | ## Architectures 7 | 8 | This repo holds examples for two architectures, Swift-State and MVVM. The Swift-State example is in the **swift-state** directory and the MVVM example is in the **mvvm** directory. **Note: the examples are a work in progress and may not be complete.** 9 | -------------------------------------------------------------------------------- /mvvm/SUI Koober.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /mvvm/SUI Koober.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /mvvm/SUI Koober/App/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | /// Copyright (c) 2019 Razeware LLC 2 | /// 3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy 4 | /// of this software and associated documentation files (the "Software"), to deal 5 | /// in the Software without restriction, including without limitation the rights 6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | /// copies of the Software, and to permit persons to whom the Software is 8 | /// furnished to do so, subject to the following conditions: 9 | /// 10 | /// The above copyright notice and this permission notice shall be included in 11 | /// all copies or substantial portions of the Software. 12 | /// 13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the 15 | /// Software in any work that is designed, intended, or marketed for pedagogical or 16 | /// instructional purposes related to programming, coding, application development, 17 | /// or information technology. Permission for such use, copying, modification, 18 | /// merger, publication, distribution, sublicensing, creation of derivative works, 19 | /// or sale is expressly withheld. 20 | /// 21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | /// THE SOFTWARE. 28 | 29 | import UIKit 30 | 31 | @UIApplicationMain 32 | class AppDelegate: UIResponder, UIApplicationDelegate { 33 | 34 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 35 | // Override point for customization after application launch. 36 | return true 37 | } 38 | 39 | // MARK: UISceneSession Lifecycle 40 | 41 | func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { 42 | // Called when a new scene session is being created. 43 | // Use this method to select a configuration to create the new scene with. 44 | return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) 45 | } 46 | 47 | func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { 48 | // Called when the user discards a scene session. 49 | // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. 50 | // Use this method to release any resources that were specific to the discarded scenes, as they will not return. 51 | } 52 | } 53 | 54 | -------------------------------------------------------------------------------- /mvvm/SUI Koober/App/KooberDependencyContainer.swift: -------------------------------------------------------------------------------- 1 | /// Copyright (c) 2019 Razeware LLC 2 | /// 3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy 4 | /// of this software and associated documentation files (the "Software"), to deal 5 | /// in the Software without restriction, including without limitation the rights 6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | /// copies of the Software, and to permit persons to whom the Software is 8 | /// furnished to do so, subject to the following conditions: 9 | /// 10 | /// The above copyright notice and this permission notice shall be included in 11 | /// all copies or substantial portions of the Software. 12 | /// 13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the 15 | /// Software in any work that is designed, intended, or marketed for pedagogical or 16 | /// instructional purposes related to programming, coding, application development, 17 | /// or information technology. Permission for such use, copying, modification, 18 | /// merger, publication, distribution, sublicensing, creation of derivative works, 19 | /// or sale is expressly withheld. 20 | /// 21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | /// THE SOFTWARE. 28 | 29 | import Foundation 30 | 31 | /// Root dependency container for Koober which holds objects who live throught the lifetime of Koober's process, i.e. singletons. 32 | final class KooberDependencyContainer { 33 | // MARK: Subsystems 34 | /// Data store that holds the authenticated user's session. This uses a fake implementation to simulate whether a user is signed when the app launches. 35 | let userSessionStore: UserSessionStore = FakeUserSessionStore(userAlreadySignedIn: false) 36 | 37 | // MARK: Factories 38 | /// Factory method for creating a new sign in use case to sign users into Koober. 39 | func makeSignInUseCase(username: String, password: String) -> SignInUseCase { 40 | // Gather dependencies. 41 | let remoteAPI = makeUserAuthenticationRemoteAPI() 42 | let userSessionStore = self.userSessionStore 43 | // Make use case. 44 | return SignInUseCase(username: username, 45 | password: password, 46 | remoteAPI: remoteAPI, 47 | userSessionStore: userSessionStore) 48 | } 49 | 50 | /// Makes a new user authentication remote API for authenticating users using the cloud. 51 | func makeUserAuthenticationRemoteAPI() -> UserAuthenticationRemoteAPI { 52 | return FakeUserAuthenticationRemoteAPI() 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /mvvm/SUI Koober/App/Launching/LaunchingView.swift: -------------------------------------------------------------------------------- 1 | /// Copyright (c) 2019 Razeware LLC 2 | /// 3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy 4 | /// of this software and associated documentation files (the "Software"), to deal 5 | /// in the Software without restriction, including without limitation the rights 6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | /// copies of the Software, and to permit persons to whom the Software is 8 | /// furnished to do so, subject to the following conditions: 9 | /// 10 | /// The above copyright notice and this permission notice shall be included in 11 | /// all copies or substantial portions of the Software. 12 | /// 13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the 15 | /// Software in any work that is designed, intended, or marketed for pedagogical or 16 | /// instructional purposes related to programming, coding, application development, 17 | /// or information technology. Permission for such use, copying, modification, 18 | /// merger, publication, distribution, sublicensing, creation of derivative works, 19 | /// or sale is expressly withheld. 20 | /// 21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | /// THE SOFTWARE. 28 | 29 | import SwiftUI 30 | 31 | /// This view is presented while the app is launching, i.e. determining if a user is signed in. 32 | struct LaunchingView : View { 33 | var body: some View { 34 | FullscreenView(backgroundColor: Color("BackgroundColor")) { 35 | Image("roo_logo") 36 | .background(Color("BackgroundColor")) 37 | .padding() 38 | HStack { 39 | Text("Launching...") 40 | .font(.headline) 41 | .foregroundColor(.white) 42 | .padding() 43 | } 44 | .background(Color("BackgroundColor")) 45 | } 46 | .background(Color("BackgroundColor")) 47 | } 48 | } 49 | 50 | #if DEBUG 51 | struct LaunchingView_Previews : PreviewProvider { 52 | static var previews: some View { 53 | LaunchingView() 54 | } 55 | } 56 | #endif 57 | 58 | -------------------------------------------------------------------------------- /mvvm/SUI Koober/App/MainView.swift: -------------------------------------------------------------------------------- 1 | /// Copyright (c) 2019 Razeware LLC 2 | /// 3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy 4 | /// of this software and associated documentation files (the "Software"), to deal 5 | /// in the Software without restriction, including without limitation the rights 6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | /// copies of the Software, and to permit persons to whom the Software is 8 | /// furnished to do so, subject to the following conditions: 9 | /// 10 | /// The above copyright notice and this permission notice shall be included in 11 | /// all copies or substantial portions of the Software. 12 | /// 13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the 15 | /// Software in any work that is designed, intended, or marketed for pedagogical or 16 | /// instructional purposes related to programming, coding, application development, 17 | /// or information technology. Permission for such use, copying, modification, 18 | /// merger, publication, distribution, sublicensing, creation of derivative works, 19 | /// or sale is expressly withheld. 20 | /// 21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | /// THE SOFTWARE. 28 | 29 | import SwiftUI 30 | 31 | /// The app's root view. 32 | struct MainView : View { 33 | /// This is the app's state store that is threaded down the view hierachy. It's a kind of Redux-like usage of SwiftUI. Anytime any state in `Koober` changes, this view and the entire view hierarchy is recomputed to reflect changes. This is supposed to be cheap because only the views that change are re-rendered. 34 | @ObservedObject var koober: Koober 35 | 36 | var body: some View { 37 | VStack(content: contentView) 38 | } 39 | 40 | func contentView() -> AnyView { 41 | switch koober.appState { 42 | case .launching: 43 | return AnyView(LaunchingView()) 44 | case .running(let userState): 45 | return AnyView(RunningView(userState: userState, koober: koober)) 46 | } 47 | } 48 | } 49 | 50 | #if DEBUG 51 | struct MainView_Previews : PreviewProvider { 52 | static var previews: some View { 53 | MainView(koober: Koober()) 54 | } 55 | } 56 | #endif 57 | -------------------------------------------------------------------------------- /mvvm/SUI Koober/App/Running/NewRide/LocateUser/LocatingUserView.swift: -------------------------------------------------------------------------------- 1 | /// Copyright (c) 2019 Razeware LLC 2 | /// 3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy 4 | /// of this software and associated documentation files (the "Software"), to deal 5 | /// in the Software without restriction, including without limitation the rights 6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | /// copies of the Software, and to permit persons to whom the Software is 8 | /// furnished to do so, subject to the following conditions: 9 | /// 10 | /// The above copyright notice and this permission notice shall be included in 11 | /// all copies or substantial portions of the Software. 12 | /// 13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the 15 | /// Software in any work that is designed, intended, or marketed for pedagogical or 16 | /// instructional purposes related to programming, coding, application development, 17 | /// or information technology. Permission for such use, copying, modification, 18 | /// merger, publication, distribution, sublicensing, creation of derivative works, 19 | /// or sale is expressly withheld. 20 | /// 21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | /// THE SOFTWARE. 28 | 29 | import SwiftUI 30 | 31 | struct LocatingUserView : View { 32 | var body: some View { 33 | ZStack { 34 | Color("BackgroundColor") 35 | VStack(alignment: .center) { 36 | Image("roo_logo") 37 | Text("Finding your location...") 38 | .font(.headline) 39 | .foregroundColor(.white) 40 | .padding(.top) 41 | } 42 | } 43 | } 44 | } 45 | 46 | #if DEBUG 47 | struct LocatingUserView_Previews : PreviewProvider { 48 | static var previews: some View { 49 | LocatingUserView() 50 | } 51 | } 52 | #endif 53 | -------------------------------------------------------------------------------- /mvvm/SUI Koober/App/Running/NewRide/NewRideView.swift: -------------------------------------------------------------------------------- 1 | /// Copyright (c) 2019 Razeware LLC 2 | /// 3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy 4 | /// of this software and associated documentation files (the "Software"), to deal 5 | /// in the Software without restriction, including without limitation the rights 6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | /// copies of the Software, and to permit persons to whom the Software is 8 | /// furnished to do so, subject to the following conditions: 9 | /// 10 | /// The above copyright notice and this permission notice shall be included in 11 | /// all copies or substantial portions of the Software. 12 | /// 13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the 15 | /// Software in any work that is designed, intended, or marketed for pedagogical or 16 | /// instructional purposes related to programming, coding, application development, 17 | /// or information technology. Permission for such use, copying, modification, 18 | /// merger, publication, distribution, sublicensing, creation of derivative works, 19 | /// or sale is expressly withheld. 20 | /// 21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | /// THE SOFTWARE. 28 | 29 | import SwiftUI 30 | 31 | /// This view is presented if a user is signed in and ready to start a new ride. 32 | struct NewRideView : View { 33 | let userSession: UserSession 34 | 35 | var body: some View { 36 | ZStack(alignment: .top) { 37 | MapView() 38 | HStack(alignment: .bottom) { 39 | Spacer() 40 | Image(systemName: "person") 41 | .font(.title) 42 | .padding(.all) 43 | } 44 | WhereToButton(action: goToDropoffLocationSelectionScreen) 45 | .padding(.top, 60) 46 | } 47 | } 48 | 49 | func goToDropoffLocationSelectionScreen() { 50 | // TODO: Navigate to dropoff location selection. 51 | } 52 | } 53 | 54 | struct WhereToButton: View { 55 | let action: () -> Void 56 | 57 | var body: some View { 58 | Button(action: action) { 59 | Text("Where to?") 60 | .foregroundColor(.black) 61 | .padding(EdgeInsets(top: 15, leading: 80, bottom: 15, trailing: 80)) 62 | .background(Color.white) 63 | .shadow(radius: /*@START_MENU_TOKEN@*/10/*@END_MENU_TOKEN@*/) 64 | } 65 | } 66 | } 67 | 68 | struct MapView: View { 69 | var body: some View { 70 | Color.red 71 | } 72 | } 73 | 74 | #if DEBUG 75 | struct NewRideView_Previews : PreviewProvider { 76 | static var previews: some View { 77 | NewRideView(userSession: UserSession.fake) 78 | } 79 | } 80 | #endif 81 | -------------------------------------------------------------------------------- /mvvm/SUI Koober/App/Running/NewRide/SendNewRideRequest/SendingNewRideRequestView.swift: -------------------------------------------------------------------------------- 1 | /// Copyright (c) 2019 Razeware LLC 2 | /// 3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy 4 | /// of this software and associated documentation files (the "Software"), to deal 5 | /// in the Software without restriction, including without limitation the rights 6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | /// copies of the Software, and to permit persons to whom the Software is 8 | /// furnished to do so, subject to the following conditions: 9 | /// 10 | /// The above copyright notice and this permission notice shall be included in 11 | /// all copies or substantial portions of the Software. 12 | /// 13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the 15 | /// Software in any work that is designed, intended, or marketed for pedagogical or 16 | /// instructional purposes related to programming, coding, application development, 17 | /// or information technology. Permission for such use, copying, modification, 18 | /// merger, publication, distribution, sublicensing, creation of derivative works, 19 | /// or sale is expressly withheld. 20 | /// 21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | /// THE SOFTWARE. 28 | 29 | import SwiftUI 30 | 31 | struct SendingNewRideRequestView : View { 32 | var body: some View { 33 | VStack { 34 | Image("requesting_indicator") 35 | Text("Requesting Ride...") 36 | .font(.title) 37 | } 38 | } 39 | } 40 | 41 | #if DEBUG 42 | struct SendingNewRideRequestView_Previews : PreviewProvider { 43 | static var previews: some View { 44 | SendingNewRideRequestView() 45 | } 46 | } 47 | #endif 48 | -------------------------------------------------------------------------------- /mvvm/SUI Koober/App/Running/Onboard/OnboardView.swift: -------------------------------------------------------------------------------- 1 | /// Copyright (c) 2019 Razeware LLC 2 | /// 3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy 4 | /// of this software and associated documentation files (the "Software"), to deal 5 | /// in the Software without restriction, including without limitation the rights 6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | /// copies of the Software, and to permit persons to whom the Software is 8 | /// furnished to do so, subject to the following conditions: 9 | /// 10 | /// The above copyright notice and this permission notice shall be included in 11 | /// all copies or substantial portions of the Software. 12 | /// 13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the 15 | /// Software in any work that is designed, intended, or marketed for pedagogical or 16 | /// instructional purposes related to programming, coding, application development, 17 | /// or information technology. Permission for such use, copying, modification, 18 | /// merger, publication, distribution, sublicensing, creation of derivative works, 19 | /// or sale is expressly withheld. 20 | /// 21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | /// THE SOFTWARE. 28 | 29 | import SwiftUI 30 | 31 | /// This view is presented when a user is not signed in. 32 | struct OnboardView : View { 33 | @ObservedObject var koober: Koober 34 | 35 | var body: some View { 36 | NavigationView { 37 | WelcomeView(koober: koober) 38 | } 39 | } 40 | } 41 | 42 | #if DEBUG 43 | struct OnboardView_Previews : PreviewProvider { 44 | static var previews: some View { 45 | OnboardView(koober: Koober()) 46 | } 47 | } 48 | #endif 49 | -------------------------------------------------------------------------------- /mvvm/SUI Koober/App/Running/Onboard/SignInViewModel.swift: -------------------------------------------------------------------------------- 1 | /// Copyright (c) 2019 Razeware LLC 2 | /// 3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy 4 | /// of this software and associated documentation files (the "Software"), to deal 5 | /// in the Software without restriction, including without limitation the rights 6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | /// copies of the Software, and to permit persons to whom the Software is 8 | /// furnished to do so, subject to the following conditions: 9 | /// 10 | /// The above copyright notice and this permission notice shall be included in 11 | /// all copies or substantial portions of the Software. 12 | /// 13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the 15 | /// Software in any work that is designed, intended, or marketed for pedagogical or 16 | /// instructional purposes related to programming, coding, application development, 17 | /// or information technology. Permission for such use, copying, modification, 18 | /// merger, publication, distribution, sublicensing, creation of derivative works, 19 | /// or sale is expressly withheld. 20 | /// 21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | /// THE SOFTWARE. 28 | 29 | import SwiftUI 30 | 31 | protocol SignInViewModelProtocol { 32 | 33 | var email: Binding { get } 34 | var password: Binding { get } 35 | 36 | func signIn() 37 | } 38 | 39 | 40 | final class SignInViewModel { 41 | 42 | private var _email = "" 43 | private var _password = "" 44 | 45 | private let startSignInUseCase: (String, String) -> Void 46 | 47 | init(startSignInUseCase: @escaping (String, String) -> Void) { 48 | self.startSignInUseCase = startSignInUseCase 49 | } 50 | } 51 | 52 | extension SignInViewModel: SignInViewModelProtocol { 53 | 54 | var email: Binding { 55 | return .init(get: { self._email }, set: { self._email = $0 }) 56 | } 57 | 58 | var password: Binding { 59 | return .init(get: { self._password }, set: { self._password = $0 }) 60 | } 61 | 62 | func signIn() { 63 | startSignInUseCase(_email, _password) 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /mvvm/SUI Koober/App/Running/Onboard/SignUpView.swift: -------------------------------------------------------------------------------- 1 | /// Copyright (c) 2019 Razeware LLC 2 | /// 3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy 4 | /// of this software and associated documentation files (the "Software"), to deal 5 | /// in the Software without restriction, including without limitation the rights 6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | /// copies of the Software, and to permit persons to whom the Software is 8 | /// furnished to do so, subject to the following conditions: 9 | /// 10 | /// The above copyright notice and this permission notice shall be included in 11 | /// all copies or substantial portions of the Software. 12 | /// 13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the 15 | /// Software in any work that is designed, intended, or marketed for pedagogical or 16 | /// instructional purposes related to programming, coding, application development, 17 | /// or information technology. Permission for such use, copying, modification, 18 | /// merger, publication, distribution, sublicensing, creation of derivative works, 19 | /// or sale is expressly withheld. 20 | /// 21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | /// THE SOFTWARE. 28 | 29 | import SwiftUI 30 | 31 | /// To be implemented... 32 | struct SignUpView : View { 33 | var body: some View { 34 | VStack { 35 | Spacer() 36 | HStack { 37 | Spacer() 38 | Text("Sign Up, under construction...") 39 | Spacer() 40 | } 41 | Spacer() 42 | } 43 | .padding() 44 | .background(Color("BackgroundColor")) 45 | .edgesIgnoringSafeArea(.bottom) 46 | .navigationBarTitle(Text("Sign Up")) 47 | } 48 | } 49 | 50 | #if DEBUG 51 | struct SignUpView_Previews : PreviewProvider { 52 | static var previews: some View { 53 | NavigationView { 54 | SignUpView() 55 | } 56 | } 57 | } 58 | #endif 59 | -------------------------------------------------------------------------------- /mvvm/SUI Koober/App/Running/RunningView.swift: -------------------------------------------------------------------------------- 1 | /// Copyright (c) 2019 Razeware LLC 2 | /// 3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy 4 | /// of this software and associated documentation files (the "Software"), to deal 5 | /// in the Software without restriction, including without limitation the rights 6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | /// copies of the Software, and to permit persons to whom the Software is 8 | /// furnished to do so, subject to the following conditions: 9 | /// 10 | /// The above copyright notice and this permission notice shall be included in 11 | /// all copies or substantial portions of the Software. 12 | /// 13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the 15 | /// Software in any work that is designed, intended, or marketed for pedagogical or 16 | /// instructional purposes related to programming, coding, application development, 17 | /// or information technology. Permission for such use, copying, modification, 18 | /// merger, publication, distribution, sublicensing, creation of derivative works, 19 | /// or sale is expressly withheld. 20 | /// 21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | /// THE SOFTWARE. 28 | 29 | import SwiftUI 30 | 31 | /// This view is presented once the app is finished launching and is running. 32 | struct RunningView : View { 33 | let userState: UserState 34 | @ObservedObject var koober: Koober 35 | 36 | var body: some View { 37 | VStack(content: content) 38 | } 39 | 40 | func content() -> AnyView { 41 | switch userState { 42 | case .unauthenticated: 43 | return AnyView(OnboardView(koober: koober)) 44 | case .authenticated(let userSession): 45 | return AnyView(NewRideView(userSession: userSession)) 46 | } 47 | } 48 | } 49 | 50 | #if DEBUG 51 | struct RunningView_Previews : PreviewProvider { 52 | static var previews: some View { 53 | RunningView(userState: .unauthenticated(.idle), koober: Koober()) 54 | } 55 | } 56 | #endif 57 | -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "20x20", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "20x20", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "29x29", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "29x29", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "size" : "40x40", 66 | "scale" : "1x" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "size" : "40x40", 71 | "scale" : "2x" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "size" : "76x76", 76 | "scale" : "1x" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "size" : "76x76", 81 | "scale" : "2x" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "size" : "83.5x83.5", 86 | "scale" : "2x" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "size" : "1024x1024", 91 | "scale" : "1x" 92 | } 93 | ], 94 | "info" : { 95 | "version" : 1, 96 | "author" : "xcode" 97 | } 98 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Colors/BackgroundColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "0.000", 13 | "alpha" : "1.000", 14 | "blue" : "0.737", 15 | "green" : "0.808" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Colors/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Colors/PlaceholderTextColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "0x84", 13 | "alpha" : "1.000", 14 | "blue" : "0x88", 15 | "green" : "0x84" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Colors/SearchBackgroundColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "platform" : "ios", 11 | "reference" : "secondarySystemBackgroundColor" 12 | } 13 | } 14 | ] 15 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Colors/SecondaryBackgroundColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "0xFF", 13 | "alpha" : "1.000", 14 | "blue" : "0x31", 15 | "green" : "0x88" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/Onboard/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/Onboard/email_icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "email_icon.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "email_icon@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "email_icon@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/Onboard/email_icon.imageset/email_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/email_icon.imageset/email_icon.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/Onboard/email_icon.imageset/email_icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/email_icon.imageset/email_icon@2x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/Onboard/email_icon.imageset/email_icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/email_icon.imageset/email_icon@3x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/Onboard/mobile_icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "mobile_icon.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "mobile_icon@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "mobile_icon@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/Onboard/mobile_icon.imageset/mobile_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/mobile_icon.imageset/mobile_icon.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/Onboard/mobile_icon.imageset/mobile_icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/mobile_icon.imageset/mobile_icon@2x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/Onboard/mobile_icon.imageset/mobile_icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/mobile_icon.imageset/mobile_icon@3x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/Onboard/password_icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "password_icon.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "password_icon@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "password_icon@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/Onboard/password_icon.imageset/password_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/password_icon.imageset/password_icon.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/Onboard/password_icon.imageset/password_icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/password_icon.imageset/password_icon@2x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/Onboard/password_icon.imageset/password_icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/password_icon.imageset/password_icon@3x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/Onboard/person_icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "person.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "person@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "person@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/Onboard/person_icon.imageset/person.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/person_icon.imageset/person.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/Onboard/person_icon.imageset/person@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/person_icon.imageset/person@2x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/Onboard/person_icon.imageset/person@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/person_icon.imageset/person@3x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/Onboard/roo_logo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "roo_logo.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "roo_logo@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "roo_logo@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/Onboard/roo_logo.imageset/roo_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/roo_logo.imageset/roo_logo.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/Onboard/roo_logo.imageset/roo_logo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/roo_logo.imageset/roo_logo@2x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/Onboard/roo_logo.imageset/roo_logo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/roo_logo.imageset/roo_logo@3x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/Onboard/tag_icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "tag.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "tag@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "tag@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/Onboard/tag_icon.imageset/tag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/tag_icon.imageset/tag.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/Onboard/tag_icon.imageset/tag@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/tag_icon.imageset/tag@2x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/Onboard/tag_icon.imageset/tag@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/Onboard/tag_icon.imageset/tag@3x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/CancelButton.imageset/CancelButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/CancelButton.imageset/CancelButton.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/CancelButton.imageset/CancelButton@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/CancelButton.imageset/CancelButton@2x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/CancelButton.imageset/CancelButton@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/CancelButton.imageset/CancelButton@3x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/CancelButton.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "CancelButton.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "CancelButton@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "CancelButton@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/DriverEnRoute.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Driver En Route@1x.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Driver En Route@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "Driver En Route@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/DriverEnRoute.imageset/Driver En Route@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/DriverEnRoute.imageset/Driver En Route@1x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/DriverEnRoute.imageset/Driver En Route@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/DriverEnRoute.imageset/Driver En Route@2x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/DriverEnRoute.imageset/Driver En Route@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/DriverEnRoute.imageset/Driver En Route@3x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerDropoffLocation.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "map_marker_destination_location.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "map_marker_destination_location@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "map_marker_destination_location@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerDropoffLocation.imageset/map_marker_destination_location.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerDropoffLocation.imageset/map_marker_destination_location.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerDropoffLocation.imageset/map_marker_destination_location@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerDropoffLocation.imageset/map_marker_destination_location@2x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerDropoffLocation.imageset/map_marker_destination_location@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerDropoffLocation.imageset/map_marker_destination_location@3x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerPickupLocation.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "map_marker_pickup_location.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "map_marker_pickup_location@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "map_marker_pickup_location@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerPickupLocation.imageset/map_marker_pickup_location.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerPickupLocation.imageset/map_marker_pickup_location.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerPickupLocation.imageset/map_marker_pickup_location@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerPickupLocation.imageset/map_marker_pickup_location@2x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerPickupLocation.imageset/map_marker_pickup_location@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerPickupLocation.imageset/map_marker_pickup_location@3x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ProgressKangaroo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "progress_kangaroo.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "progress_kangaroo@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "progress_kangaroo@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ProgressKangaroo.imageset/progress_kangaroo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ProgressKangaroo.imageset/progress_kangaroo.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ProgressKangaroo.imageset/progress_kangaroo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ProgressKangaroo.imageset/progress_kangaroo@2x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ProgressKangaroo.imageset/progress_kangaroo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ProgressKangaroo.imageset/progress_kangaroo@3x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_kangaroo_marker.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "available_kangaroo_marker.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "available_kangaroo_marker@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "available_kangaroo_marker@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_kangaroo_marker.imageset/available_kangaroo_marker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_kangaroo_marker.imageset/available_kangaroo_marker.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_kangaroo_marker.imageset/available_kangaroo_marker@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_kangaroo_marker.imageset/available_kangaroo_marker@2x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_kangaroo_marker.imageset/available_kangaroo_marker@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_kangaroo_marker.imageset/available_kangaroo_marker@3x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallabe_marker.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "available_wallabe_marker.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "available_wallabe_marker@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "available_wallabe_marker@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallabe_marker.imageset/available_wallabe_marker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallabe_marker.imageset/available_wallabe_marker.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallabe_marker.imageset/available_wallabe_marker@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallabe_marker.imageset/available_wallabe_marker@2x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallabe_marker.imageset/available_wallabe_marker@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallabe_marker.imageset/available_wallabe_marker@3x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallaroo_marker.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "available_wallaroo_marker.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "available_wallaroo_marker@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "available_wallaroo_marker@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallaroo_marker.imageset/available_wallaroo_marker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallaroo_marker.imageset/available_wallaroo_marker.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallaroo_marker.imageset/available_wallaroo_marker@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallaroo_marker.imageset/available_wallaroo_marker@2x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallaroo_marker.imageset/available_wallaroo_marker@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallaroo_marker.imageset/available_wallaroo_marker@3x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ride_option_kangaroo.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ride_option_kangaroo@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ride_option_kangaroo@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "original" 25 | } 26 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo.imageset/ride_option_kangaroo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo.imageset/ride_option_kangaroo.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo.imageset/ride_option_kangaroo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo.imageset/ride_option_kangaroo@2x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo.imageset/ride_option_kangaroo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo.imageset/ride_option_kangaroo@3x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ride_option_kangaroo_selected.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ride_option_kangaroo_selected@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ride_option_kangaroo_selected@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "original" 25 | } 26 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo_selected.imageset/ride_option_kangaroo_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo_selected.imageset/ride_option_kangaroo_selected.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo_selected.imageset/ride_option_kangaroo_selected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo_selected.imageset/ride_option_kangaroo_selected@2x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo_selected.imageset/ride_option_kangaroo_selected@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo_selected.imageset/ride_option_kangaroo_selected@3x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ride_option_wallabee.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ride_option_wallabee@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ride_option_wallabee@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "original" 25 | } 26 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee.imageset/ride_option_wallabee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee.imageset/ride_option_wallabee.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee.imageset/ride_option_wallabee@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee.imageset/ride_option_wallabee@2x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee.imageset/ride_option_wallabee@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee.imageset/ride_option_wallabee@3x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ride_option_wallabee_selected.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ride_option_wallabee_selected@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ride_option_wallabee_selected@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "original" 25 | } 26 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee_selected.imageset/ride_option_wallabee_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee_selected.imageset/ride_option_wallabee_selected.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee_selected.imageset/ride_option_wallabee_selected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee_selected.imageset/ride_option_wallabee_selected@2x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee_selected.imageset/ride_option_wallabee_selected@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee_selected.imageset/ride_option_wallabee_selected@3x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ride_option_wallaroo.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ride_option_wallaroo@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ride_option_wallaroo@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "original" 25 | } 26 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo.imageset/ride_option_wallaroo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo.imageset/ride_option_wallaroo.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo.imageset/ride_option_wallaroo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo.imageset/ride_option_wallaroo@2x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo.imageset/ride_option_wallaroo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo.imageset/ride_option_wallaroo@3x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ride_option_wallaroo_selected.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ride_option_wallaroo_selected@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ride_option_wallaroo_selected@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "original" 25 | } 26 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo_selected.imageset/ride_option_wallaroo_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo_selected.imageset/ride_option_wallaroo_selected.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo_selected.imageset/ride_option_wallaroo_selected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo_selected.imageset/ride_option_wallaroo_selected@2x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo_selected.imageset/ride_option_wallaroo_selected@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo_selected.imageset/ride_option_wallaroo_selected@3x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/SetPickupLocationLoader.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "set_pickup_location_loader.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "set_pickup_location_loader@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "set_pickup_location_loader@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/SetPickupLocationLoader.imageset/set_pickup_location_loader.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/SetPickupLocationLoader.imageset/set_pickup_location_loader.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/SetPickupLocationLoader.imageset/set_pickup_location_loader@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/SetPickupLocationLoader.imageset/set_pickup_location_loader@2x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/SetPickupLocationLoader.imageset/set_pickup_location_loader@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/SetPickupLocationLoader.imageset/set_pickup_location_loader@3x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/available_placeholder_marker.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "available_placeholder_marker.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "available_placeholder_marker@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "available_placeholder_marker@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/available_placeholder_marker.imageset/available_placeholder_marker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/available_placeholder_marker.imageset/available_placeholder_marker.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/available_placeholder_marker.imageset/available_placeholder_marker@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/available_placeholder_marker.imageset/available_placeholder_marker@2x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/available_placeholder_marker.imageset/available_placeholder_marker@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/available_placeholder_marker.imageset/available_placeholder_marker@3x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/koober.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "Icon-60@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "Icon-60@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/koober.imageset/Icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/koober.imageset/Icon-60@2x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/koober.imageset/Icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/koober.imageset/Icon-60@3x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/requesting_indicator.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "requesting_indicator.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "requesting_indicator@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "requesting_indicator@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/requesting_indicator.imageset/requesting_indicator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/requesting_indicator.imageset/requesting_indicator.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/requesting_indicator.imageset/requesting_indicator@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/requesting_indicator.imageset/requesting_indicator@2x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/requesting_indicator.imageset/requesting_indicator@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/requesting_indicator.imageset/requesting_indicator@3x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ride_option_placeholder.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ride_option_placeholder@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ride_option_placeholder@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder.imageset/ride_option_placeholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder.imageset/ride_option_placeholder.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder.imageset/ride_option_placeholder@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder.imageset/ride_option_placeholder@2x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder.imageset/ride_option_placeholder@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder.imageset/ride_option_placeholder@3x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ride_option_wallabee_selected.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ride_option_wallabee_selected@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ride_option_wallabee_selected@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder_selected.imageset/ride_option_wallabee_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder_selected.imageset/ride_option_wallabee_selected.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder_selected.imageset/ride_option_wallabee_selected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder_selected.imageset/ride_option_wallabee_selected@2x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder_selected.imageset/ride_option_wallabee_selected@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder_selected.imageset/ride_option_wallabee_selected@3x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/success_message.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "success_message.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "success_message@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "success_message@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/success_message.imageset/success_message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/success_message.imageset/success_message.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/success_message.imageset/success_message@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/success_message.imageset/success_message@2x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/success_message.imageset/success_message@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/RequestRide/success_message.imageset/success_message@3x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/card_icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "card_icon.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "card_icon@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "card_icon@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/card_icon.imageset/card_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/card_icon.imageset/card_icon.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/card_icon.imageset/card_icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/card_icon.imageset/card_icon@2x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/card_icon.imageset/card_icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/card_icon.imageset/card_icon@3x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/selected_icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "selected_icon.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "selected_icon@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "selected_icon@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/selected_icon.imageset/selected_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/selected_icon.imageset/selected_icon.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/selected_icon.imageset/selected_icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/selected_icon.imageset/selected_icon@2x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/selected_icon.imageset/selected_icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/selected_icon.imageset/selected_icon@3x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/roo-icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "roo-icon.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "roo-icon@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "roo-icon@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/roo-icon.imageset/roo-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/roo-icon.imageset/roo-icon.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/roo-icon.imageset/roo-icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/roo-icon.imageset/roo-icon@2x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/roo-icon.imageset/roo-icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/roo-icon.imageset/roo-icon@3x.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/rw-logo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "Razewarelogo_1024.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/rw-logo.imageset/Razewarelogo_1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/rw-logo.imageset/Razewarelogo_1024.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/rwdevcon-bg.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "rwdevcon-bg.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/rwdevcon-bg.imageset/rwdevcon-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/rwdevcon-bg.imageset/rwdevcon-bg.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/rwdevcon-logo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "rwdevcon-logo.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/Assets.xcassets/Images/rwdevcon-logo.imageset/rwdevcon-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/mvvm/SUI Koober/Assets.xcassets/Images/rwdevcon-logo.imageset/rwdevcon-logo.png -------------------------------------------------------------------------------- /mvvm/SUI Koober/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /mvvm/SUI Koober/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UIApplicationSceneManifest 24 | 25 | UIApplicationSupportsMultipleScenes 26 | 27 | UISceneConfigurations 28 | 29 | UIWindowSceneSessionRoleApplication 30 | 31 | 32 | UILaunchStoryboardName 33 | LaunchScreen 34 | UISceneConfigurationName 35 | Default Configuration 36 | UISceneDelegateClassName 37 | $(PRODUCT_MODULE_NAME).SceneDelegate 38 | 39 | 40 | 41 | 42 | UILaunchStoryboardName 43 | LaunchScreen 44 | UIRequiredDeviceCapabilities 45 | 46 | armv7 47 | 48 | UISupportedInterfaceOrientations 49 | 50 | UIInterfaceOrientationPortrait 51 | UIInterfaceOrientationLandscapeLeft 52 | UIInterfaceOrientationLandscapeRight 53 | 54 | UISupportedInterfaceOrientations~ipad 55 | 56 | UIInterfaceOrientationPortrait 57 | UIInterfaceOrientationPortraitUpsideDown 58 | UIInterfaceOrientationLandscapeLeft 59 | UIInterfaceOrientationLandscapeRight 60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /mvvm/SUI Koober/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /mvvm/SUI Koober/ReusableModels/ErrorMessage.swift: -------------------------------------------------------------------------------- 1 | /// Copyright (c) 2019 Razeware LLC 2 | /// 3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy 4 | /// of this software and associated documentation files (the "Software"), to deal 5 | /// in the Software without restriction, including without limitation the rights 6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | /// copies of the Software, and to permit persons to whom the Software is 8 | /// furnished to do so, subject to the following conditions: 9 | /// 10 | /// The above copyright notice and this permission notice shall be included in 11 | /// all copies or substantial portions of the Software. 12 | /// 13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the 15 | /// Software in any work that is designed, intended, or marketed for pedagogical or 16 | /// instructional purposes related to programming, coding, application development, 17 | /// or information technology. Permission for such use, copying, modification, 18 | /// merger, publication, distribution, sublicensing, creation of derivative works, 19 | /// or sale is expressly withheld. 20 | /// 21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | /// THE SOFTWARE. 28 | 29 | import Foundation 30 | 31 | struct ErrorMessage: Error { 32 | let id = UUID() 33 | var message: String 34 | } 35 | 36 | protocol ErrorMessageConvertible { 37 | var errorMessage: ErrorMessage { get } 38 | } 39 | 40 | extension ErrorMessageConvertible { 41 | var errorMessage: ErrorMessage { 42 | ErrorMessage(message: "Unknown error. Please try again.") 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /mvvm/SUI Koober/ReusableViews/FullscreenView.swift: -------------------------------------------------------------------------------- 1 | /// Copyright (c) 2019 Razeware LLC 2 | /// 3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy 4 | /// of this software and associated documentation files (the "Software"), to deal 5 | /// in the Software without restriction, including without limitation the rights 6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | /// copies of the Software, and to permit persons to whom the Software is 8 | /// furnished to do so, subject to the following conditions: 9 | /// 10 | /// The above copyright notice and this permission notice shall be included in 11 | /// all copies or substantial portions of the Software. 12 | /// 13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the 15 | /// Software in any work that is designed, intended, or marketed for pedagogical or 16 | /// instructional purposes related to programming, coding, application development, 17 | /// or information technology. Permission for such use, copying, modification, 18 | /// merger, publication, distribution, sublicensing, creation of derivative works, 19 | /// or sale is expressly withheld. 20 | /// 21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | /// THE SOFTWARE. 28 | 29 | import SwiftUI 30 | 31 | /// Container view that spans the entire screen, ignoring safe areas. 32 | struct FullscreenView : View { 33 | let content: Content 34 | let backgroundColor: Color 35 | 36 | 37 | public init(backgroundColor: Color = Color.white, 38 | @ViewBuilder content: () -> Content) { 39 | self.backgroundColor = backgroundColor 40 | self.content = content() 41 | } 42 | 43 | var body: some View { 44 | HStack { 45 | Spacer() 46 | VStack { 47 | Spacer() 48 | content 49 | Spacer() 50 | } 51 | Spacer() 52 | } 53 | .background(backgroundColor) 54 | .edgesIgnoringSafeArea(.all) 55 | } 56 | } 57 | 58 | #if DEBUG 59 | struct FullscreenView_Previews : PreviewProvider { 60 | static var previews: some View { 61 | FullscreenView { 62 | Text("Content") 63 | } 64 | } 65 | } 66 | #endif 67 | -------------------------------------------------------------------------------- /swift-state/SUI Koober.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /swift-state/SUI Koober.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /swift-state/SUI Koober/App/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | /// Copyright (c) 2019 Razeware LLC 2 | /// 3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy 4 | /// of this software and associated documentation files (the "Software"), to deal 5 | /// in the Software without restriction, including without limitation the rights 6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | /// copies of the Software, and to permit persons to whom the Software is 8 | /// furnished to do so, subject to the following conditions: 9 | /// 10 | /// The above copyright notice and this permission notice shall be included in 11 | /// all copies or substantial portions of the Software. 12 | /// 13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the 15 | /// Software in any work that is designed, intended, or marketed for pedagogical or 16 | /// instructional purposes related to programming, coding, application development, 17 | /// or information technology. Permission for such use, copying, modification, 18 | /// merger, publication, distribution, sublicensing, creation of derivative works, 19 | /// or sale is expressly withheld. 20 | /// 21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | /// THE SOFTWARE. 28 | 29 | import UIKit 30 | 31 | @UIApplicationMain 32 | class AppDelegate: UIResponder, UIApplicationDelegate { 33 | 34 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 35 | // Override point for customization after application launch. 36 | return true 37 | } 38 | 39 | // MARK: UISceneSession Lifecycle 40 | 41 | func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { 42 | // Called when a new scene session is being created. 43 | // Use this method to select a configuration to create the new scene with. 44 | return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) 45 | } 46 | 47 | func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { 48 | // Called when the user discards a scene session. 49 | // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. 50 | // Use this method to release any resources that were specific to the discarded scenes, as they will not return. 51 | } 52 | } 53 | 54 | -------------------------------------------------------------------------------- /swift-state/SUI Koober/App/KooberDependencyContainer.swift: -------------------------------------------------------------------------------- 1 | /// Copyright (c) 2019 Razeware LLC 2 | /// 3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy 4 | /// of this software and associated documentation files (the "Software"), to deal 5 | /// in the Software without restriction, including without limitation the rights 6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | /// copies of the Software, and to permit persons to whom the Software is 8 | /// furnished to do so, subject to the following conditions: 9 | /// 10 | /// The above copyright notice and this permission notice shall be included in 11 | /// all copies or substantial portions of the Software. 12 | /// 13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the 15 | /// Software in any work that is designed, intended, or marketed for pedagogical or 16 | /// instructional purposes related to programming, coding, application development, 17 | /// or information technology. Permission for such use, copying, modification, 18 | /// merger, publication, distribution, sublicensing, creation of derivative works, 19 | /// or sale is expressly withheld. 20 | /// 21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | /// THE SOFTWARE. 28 | 29 | import Foundation 30 | 31 | /// Root dependency container for Koober which holds objects who live throught the lifetime of Koober's process, i.e. singletons. 32 | final class KooberDependencyContainer { 33 | // MARK: Subsystems 34 | /// Data store that holds the authenticated user's session. This uses a fake implementation to simulate whether a user is signed when the app launches. 35 | let userSessionStore: UserSessionStore = FakeUserSessionStore(userAlreadySignedIn: false) 36 | 37 | // MARK: Factories 38 | /// Factory method for creating a new sign in use case to sign users into Koober. 39 | func makeSignInUseCase(username: String, password: String) -> SignInUseCase { 40 | // Gather dependencies. 41 | let remoteAPI = makeUserAuthenticationRemoteAPI() 42 | let userSessionStore = self.userSessionStore 43 | // Make use case. 44 | return SignInUseCase(username: username, 45 | password: password, 46 | remoteAPI: remoteAPI, 47 | userSessionStore: userSessionStore) 48 | } 49 | 50 | /// Makes a new user authentication remote API for authenticating users using the cloud. 51 | func makeUserAuthenticationRemoteAPI() -> UserAuthenticationRemoteAPI { 52 | return FakeUserAuthenticationRemoteAPI() 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /swift-state/SUI Koober/App/Launching/LaunchingView.swift: -------------------------------------------------------------------------------- 1 | /// Copyright (c) 2019 Razeware LLC 2 | /// 3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy 4 | /// of this software and associated documentation files (the "Software"), to deal 5 | /// in the Software without restriction, including without limitation the rights 6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | /// copies of the Software, and to permit persons to whom the Software is 8 | /// furnished to do so, subject to the following conditions: 9 | /// 10 | /// The above copyright notice and this permission notice shall be included in 11 | /// all copies or substantial portions of the Software. 12 | /// 13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the 15 | /// Software in any work that is designed, intended, or marketed for pedagogical or 16 | /// instructional purposes related to programming, coding, application development, 17 | /// or information technology. Permission for such use, copying, modification, 18 | /// merger, publication, distribution, sublicensing, creation of derivative works, 19 | /// or sale is expressly withheld. 20 | /// 21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | /// THE SOFTWARE. 28 | 29 | import SwiftUI 30 | 31 | /// This view is presented while the app is launching, i.e. determining if a user is signed in. 32 | struct LaunchingView : View { 33 | var body: some View { 34 | FullscreenView(backgroundColor: Color("BackgroundColor")) { 35 | Image("roo_logo") 36 | .background(Color("BackgroundColor")) 37 | .padding() 38 | HStack { 39 | Text("Launching...") 40 | .font(.headline) 41 | .foregroundColor(.white) 42 | .padding() 43 | } 44 | .background(Color("BackgroundColor")) 45 | } 46 | .background(Color("BackgroundColor")) 47 | } 48 | } 49 | 50 | #if DEBUG 51 | struct LaunchingView_Previews : PreviewProvider { 52 | static var previews: some View { 53 | LaunchingView() 54 | } 55 | } 56 | #endif 57 | 58 | -------------------------------------------------------------------------------- /swift-state/SUI Koober/App/MainView.swift: -------------------------------------------------------------------------------- 1 | /// Copyright (c) 2019 Razeware LLC 2 | /// 3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy 4 | /// of this software and associated documentation files (the "Software"), to deal 5 | /// in the Software without restriction, including without limitation the rights 6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | /// copies of the Software, and to permit persons to whom the Software is 8 | /// furnished to do so, subject to the following conditions: 9 | /// 10 | /// The above copyright notice and this permission notice shall be included in 11 | /// all copies or substantial portions of the Software. 12 | /// 13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the 15 | /// Software in any work that is designed, intended, or marketed for pedagogical or 16 | /// instructional purposes related to programming, coding, application development, 17 | /// or information technology. Permission for such use, copying, modification, 18 | /// merger, publication, distribution, sublicensing, creation of derivative works, 19 | /// or sale is expressly withheld. 20 | /// 21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | /// THE SOFTWARE. 28 | 29 | import SwiftUI 30 | 31 | /// The app's root view. 32 | struct MainView : View { 33 | /// This is the app's state store that is threaded down the view hierachy. It's a kind of Redux-like usage of SwiftUI. Anytime any state in `Koober` changes, this view and the entire view hierarchy is recomputed to reflect changes. This is supposed to be cheap because only the views that change are re-rendered. 34 | @ObservedObject var koober: Koober 35 | 36 | var body: some View { 37 | VStack(content: contentView) 38 | } 39 | 40 | func contentView() -> AnyView { 41 | switch koober.appState { 42 | case .launching: 43 | return AnyView(LaunchingView()) 44 | case .running(let userState): 45 | return AnyView(RunningView(userState: userState, koober: koober)) 46 | } 47 | } 48 | } 49 | 50 | #if DEBUG 51 | struct MainView_Previews : PreviewProvider { 52 | static var previews: some View { 53 | MainView(koober: Koober()) 54 | } 55 | } 56 | #endif 57 | -------------------------------------------------------------------------------- /swift-state/SUI Koober/App/Running/NewRide/LocateUser/LocatingUserView.swift: -------------------------------------------------------------------------------- 1 | /// Copyright (c) 2019 Razeware LLC 2 | /// 3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy 4 | /// of this software and associated documentation files (the "Software"), to deal 5 | /// in the Software without restriction, including without limitation the rights 6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | /// copies of the Software, and to permit persons to whom the Software is 8 | /// furnished to do so, subject to the following conditions: 9 | /// 10 | /// The above copyright notice and this permission notice shall be included in 11 | /// all copies or substantial portions of the Software. 12 | /// 13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the 15 | /// Software in any work that is designed, intended, or marketed for pedagogical or 16 | /// instructional purposes related to programming, coding, application development, 17 | /// or information technology. Permission for such use, copying, modification, 18 | /// merger, publication, distribution, sublicensing, creation of derivative works, 19 | /// or sale is expressly withheld. 20 | /// 21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | /// THE SOFTWARE. 28 | 29 | import SwiftUI 30 | 31 | struct LocatingUserView : View { 32 | var body: some View { 33 | ZStack { 34 | Color("BackgroundColor") 35 | VStack(alignment: .center) { 36 | Image("roo_logo") 37 | Text("Finding your location...") 38 | .font(.headline) 39 | .foregroundColor(.white) 40 | .padding(.top) 41 | } 42 | } 43 | } 44 | } 45 | 46 | #if DEBUG 47 | struct LocatingUserView_Previews : PreviewProvider { 48 | static var previews: some View { 49 | LocatingUserView() 50 | } 51 | } 52 | #endif 53 | -------------------------------------------------------------------------------- /swift-state/SUI Koober/App/Running/NewRide/SendNewRideRequest/SendingNewRideRequestView.swift: -------------------------------------------------------------------------------- 1 | /// Copyright (c) 2019 Razeware LLC 2 | /// 3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy 4 | /// of this software and associated documentation files (the "Software"), to deal 5 | /// in the Software without restriction, including without limitation the rights 6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | /// copies of the Software, and to permit persons to whom the Software is 8 | /// furnished to do so, subject to the following conditions: 9 | /// 10 | /// The above copyright notice and this permission notice shall be included in 11 | /// all copies or substantial portions of the Software. 12 | /// 13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the 15 | /// Software in any work that is designed, intended, or marketed for pedagogical or 16 | /// instructional purposes related to programming, coding, application development, 17 | /// or information technology. Permission for such use, copying, modification, 18 | /// merger, publication, distribution, sublicensing, creation of derivative works, 19 | /// or sale is expressly withheld. 20 | /// 21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | /// THE SOFTWARE. 28 | 29 | import SwiftUI 30 | 31 | struct SendingNewRideRequestView : View { 32 | var body: some View { 33 | VStack { 34 | Image("requesting_indicator") 35 | Text("Requesting Ride...") 36 | .font(.title) 37 | } 38 | } 39 | } 40 | 41 | #if DEBUG 42 | struct SendingNewRideRequestView_Previews : PreviewProvider { 43 | static var previews: some View { 44 | SendingNewRideRequestView() 45 | } 46 | } 47 | #endif 48 | -------------------------------------------------------------------------------- /swift-state/SUI Koober/App/Running/Onboard/OnboardView.swift: -------------------------------------------------------------------------------- 1 | /// Copyright (c) 2019 Razeware LLC 2 | /// 3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy 4 | /// of this software and associated documentation files (the "Software"), to deal 5 | /// in the Software without restriction, including without limitation the rights 6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | /// copies of the Software, and to permit persons to whom the Software is 8 | /// furnished to do so, subject to the following conditions: 9 | /// 10 | /// The above copyright notice and this permission notice shall be included in 11 | /// all copies or substantial portions of the Software. 12 | /// 13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the 15 | /// Software in any work that is designed, intended, or marketed for pedagogical or 16 | /// instructional purposes related to programming, coding, application development, 17 | /// or information technology. Permission for such use, copying, modification, 18 | /// merger, publication, distribution, sublicensing, creation of derivative works, 19 | /// or sale is expressly withheld. 20 | /// 21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | /// THE SOFTWARE. 28 | 29 | import SwiftUI 30 | 31 | /// This view is presented when a user is not signed in. 32 | struct OnboardView : View { 33 | @ObservedObject var koober: Koober 34 | 35 | var body: some View { 36 | NavigationView { 37 | WelcomeView(koober: koober) 38 | } 39 | } 40 | } 41 | 42 | #if DEBUG 43 | struct OnboardView_Previews : PreviewProvider { 44 | static var previews: some View { 45 | OnboardView(koober: Koober()) 46 | } 47 | } 48 | #endif 49 | -------------------------------------------------------------------------------- /swift-state/SUI Koober/App/Running/Onboard/SignInViewModel.swift: -------------------------------------------------------------------------------- 1 | /// Copyright (c) 2019 Razeware LLC 2 | /// 3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy 4 | /// of this software and associated documentation files (the "Software"), to deal 5 | /// in the Software without restriction, including without limitation the rights 6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | /// copies of the Software, and to permit persons to whom the Software is 8 | /// furnished to do so, subject to the following conditions: 9 | /// 10 | /// The above copyright notice and this permission notice shall be included in 11 | /// all copies or substantial portions of the Software. 12 | /// 13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the 15 | /// Software in any work that is designed, intended, or marketed for pedagogical or 16 | /// instructional purposes related to programming, coding, application development, 17 | /// or information technology. Permission for such use, copying, modification, 18 | /// merger, publication, distribution, sublicensing, creation of derivative works, 19 | /// or sale is expressly withheld. 20 | /// 21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | /// THE SOFTWARE. 28 | 29 | import SwiftUI 30 | 31 | protocol SignInViewModelProtocol { 32 | 33 | var email: Binding { get } 34 | var password: Binding { get } 35 | 36 | func signIn() 37 | } 38 | 39 | 40 | final class SignInViewModel { 41 | 42 | private var _email = "" 43 | private var _password = "" 44 | 45 | private let startSignInUseCase: (String, String) -> Void 46 | 47 | init(startSignInUseCase: @escaping (String, String) -> Void) { 48 | self.startSignInUseCase = startSignInUseCase 49 | } 50 | } 51 | 52 | extension SignInViewModel: SignInViewModelProtocol { 53 | 54 | var email: Binding { 55 | return .init(get: { self._email }, set: { self._email = $0 }) 56 | } 57 | 58 | var password: Binding { 59 | return .init(get: { self._password }, set: { self._password = $0 }) 60 | } 61 | 62 | func signIn() { 63 | startSignInUseCase(_email, _password) 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /swift-state/SUI Koober/App/Running/Onboard/SignUpView.swift: -------------------------------------------------------------------------------- 1 | /// Copyright (c) 2019 Razeware LLC 2 | /// 3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy 4 | /// of this software and associated documentation files (the "Software"), to deal 5 | /// in the Software without restriction, including without limitation the rights 6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | /// copies of the Software, and to permit persons to whom the Software is 8 | /// furnished to do so, subject to the following conditions: 9 | /// 10 | /// The above copyright notice and this permission notice shall be included in 11 | /// all copies or substantial portions of the Software. 12 | /// 13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the 15 | /// Software in any work that is designed, intended, or marketed for pedagogical or 16 | /// instructional purposes related to programming, coding, application development, 17 | /// or information technology. Permission for such use, copying, modification, 18 | /// merger, publication, distribution, sublicensing, creation of derivative works, 19 | /// or sale is expressly withheld. 20 | /// 21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | /// THE SOFTWARE. 28 | 29 | import SwiftUI 30 | 31 | /// To be implemented... 32 | struct SignUpView : View { 33 | var body: some View { 34 | VStack { 35 | Spacer() 36 | HStack { 37 | Spacer() 38 | Text("Sign Up, under construction...") 39 | Spacer() 40 | } 41 | Spacer() 42 | } 43 | .padding() 44 | .background(Color("BackgroundColor")) 45 | .edgesIgnoringSafeArea(.bottom) 46 | .navigationBarTitle(Text("Sign Up")) 47 | } 48 | } 49 | 50 | #if DEBUG 51 | struct SignUpView_Previews : PreviewProvider { 52 | static var previews: some View { 53 | NavigationView { 54 | SignUpView() 55 | } 56 | } 57 | } 58 | #endif 59 | -------------------------------------------------------------------------------- /swift-state/SUI Koober/App/Running/RunningView.swift: -------------------------------------------------------------------------------- 1 | /// Copyright (c) 2019 Razeware LLC 2 | /// 3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy 4 | /// of this software and associated documentation files (the "Software"), to deal 5 | /// in the Software without restriction, including without limitation the rights 6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | /// copies of the Software, and to permit persons to whom the Software is 8 | /// furnished to do so, subject to the following conditions: 9 | /// 10 | /// The above copyright notice and this permission notice shall be included in 11 | /// all copies or substantial portions of the Software. 12 | /// 13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the 15 | /// Software in any work that is designed, intended, or marketed for pedagogical or 16 | /// instructional purposes related to programming, coding, application development, 17 | /// or information technology. Permission for such use, copying, modification, 18 | /// merger, publication, distribution, sublicensing, creation of derivative works, 19 | /// or sale is expressly withheld. 20 | /// 21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | /// THE SOFTWARE. 28 | 29 | import SwiftUI 30 | 31 | /// This view is presented once the app is finished launching and is running. 32 | struct RunningView : View { 33 | let userState: UserState 34 | @ObservedObject var koober: Koober 35 | 36 | var body: some View { 37 | VStack(content: content) 38 | } 39 | 40 | func content() -> AnyView { 41 | switch userState { 42 | case .unauthenticated: 43 | return AnyView(OnboardView(koober: koober)) 44 | case .authenticated(let userSession): 45 | return AnyView(NewRideView(userSession: userSession)) 46 | } 47 | } 48 | } 49 | 50 | #if DEBUG 51 | struct RunningView_Previews : PreviewProvider { 52 | static var previews: some View { 53 | RunningView(userState: .unauthenticated(.idle), koober: Koober()) 54 | } 55 | } 56 | #endif 57 | -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "20x20", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "20x20", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "29x29", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "29x29", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "size" : "40x40", 66 | "scale" : "1x" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "size" : "40x40", 71 | "scale" : "2x" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "size" : "76x76", 76 | "scale" : "1x" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "size" : "76x76", 81 | "scale" : "2x" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "size" : "83.5x83.5", 86 | "scale" : "2x" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "size" : "1024x1024", 91 | "scale" : "1x" 92 | } 93 | ], 94 | "info" : { 95 | "version" : 1, 96 | "author" : "xcode" 97 | } 98 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Colors/BackgroundColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "0.000", 13 | "alpha" : "1.000", 14 | "blue" : "0.737", 15 | "green" : "0.808" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Colors/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Colors/PlaceholderTextColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "0x84", 13 | "alpha" : "1.000", 14 | "blue" : "0x88", 15 | "green" : "0x84" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Colors/SearchBackgroundColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "platform" : "ios", 11 | "reference" : "secondarySystemBackgroundColor" 12 | } 13 | } 14 | ] 15 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Colors/SecondaryBackgroundColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "0xFF", 13 | "alpha" : "1.000", 14 | "blue" : "0x31", 15 | "green" : "0x88" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/Onboard/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/Onboard/email_icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "email_icon.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "email_icon@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "email_icon@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/Onboard/email_icon.imageset/email_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/email_icon.imageset/email_icon.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/Onboard/email_icon.imageset/email_icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/email_icon.imageset/email_icon@2x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/Onboard/email_icon.imageset/email_icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/email_icon.imageset/email_icon@3x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/Onboard/mobile_icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "mobile_icon.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "mobile_icon@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "mobile_icon@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/Onboard/mobile_icon.imageset/mobile_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/mobile_icon.imageset/mobile_icon.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/Onboard/mobile_icon.imageset/mobile_icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/mobile_icon.imageset/mobile_icon@2x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/Onboard/mobile_icon.imageset/mobile_icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/mobile_icon.imageset/mobile_icon@3x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/Onboard/password_icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "password_icon.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "password_icon@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "password_icon@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/Onboard/password_icon.imageset/password_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/password_icon.imageset/password_icon.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/Onboard/password_icon.imageset/password_icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/password_icon.imageset/password_icon@2x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/Onboard/password_icon.imageset/password_icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/password_icon.imageset/password_icon@3x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/Onboard/person_icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "person.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "person@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "person@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/Onboard/person_icon.imageset/person.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/person_icon.imageset/person.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/Onboard/person_icon.imageset/person@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/person_icon.imageset/person@2x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/Onboard/person_icon.imageset/person@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/person_icon.imageset/person@3x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/Onboard/roo_logo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "roo_logo.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "roo_logo@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "roo_logo@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/Onboard/roo_logo.imageset/roo_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/roo_logo.imageset/roo_logo.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/Onboard/roo_logo.imageset/roo_logo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/roo_logo.imageset/roo_logo@2x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/Onboard/roo_logo.imageset/roo_logo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/roo_logo.imageset/roo_logo@3x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/Onboard/tag_icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "tag.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "tag@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "tag@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/Onboard/tag_icon.imageset/tag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/tag_icon.imageset/tag.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/Onboard/tag_icon.imageset/tag@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/tag_icon.imageset/tag@2x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/Onboard/tag_icon.imageset/tag@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/Onboard/tag_icon.imageset/tag@3x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/CancelButton.imageset/CancelButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/CancelButton.imageset/CancelButton.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/CancelButton.imageset/CancelButton@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/CancelButton.imageset/CancelButton@2x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/CancelButton.imageset/CancelButton@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/CancelButton.imageset/CancelButton@3x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/CancelButton.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "CancelButton.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "CancelButton@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "CancelButton@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/DriverEnRoute.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Driver En Route@1x.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Driver En Route@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "Driver En Route@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/DriverEnRoute.imageset/Driver En Route@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/DriverEnRoute.imageset/Driver En Route@1x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/DriverEnRoute.imageset/Driver En Route@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/DriverEnRoute.imageset/Driver En Route@2x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/DriverEnRoute.imageset/Driver En Route@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/DriverEnRoute.imageset/Driver En Route@3x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerDropoffLocation.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "map_marker_destination_location.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "map_marker_destination_location@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "map_marker_destination_location@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerDropoffLocation.imageset/map_marker_destination_location.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerDropoffLocation.imageset/map_marker_destination_location.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerDropoffLocation.imageset/map_marker_destination_location@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerDropoffLocation.imageset/map_marker_destination_location@2x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerDropoffLocation.imageset/map_marker_destination_location@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerDropoffLocation.imageset/map_marker_destination_location@3x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerPickupLocation.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "map_marker_pickup_location.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "map_marker_pickup_location@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "map_marker_pickup_location@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerPickupLocation.imageset/map_marker_pickup_location.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerPickupLocation.imageset/map_marker_pickup_location.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerPickupLocation.imageset/map_marker_pickup_location@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerPickupLocation.imageset/map_marker_pickup_location@2x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerPickupLocation.imageset/map_marker_pickup_location@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/MapMarkerPickupLocation.imageset/map_marker_pickup_location@3x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ProgressKangaroo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "progress_kangaroo.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "progress_kangaroo@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "progress_kangaroo@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ProgressKangaroo.imageset/progress_kangaroo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ProgressKangaroo.imageset/progress_kangaroo.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ProgressKangaroo.imageset/progress_kangaroo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ProgressKangaroo.imageset/progress_kangaroo@2x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ProgressKangaroo.imageset/progress_kangaroo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ProgressKangaroo.imageset/progress_kangaroo@3x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_kangaroo_marker.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "available_kangaroo_marker.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "available_kangaroo_marker@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "available_kangaroo_marker@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_kangaroo_marker.imageset/available_kangaroo_marker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_kangaroo_marker.imageset/available_kangaroo_marker.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_kangaroo_marker.imageset/available_kangaroo_marker@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_kangaroo_marker.imageset/available_kangaroo_marker@2x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_kangaroo_marker.imageset/available_kangaroo_marker@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_kangaroo_marker.imageset/available_kangaroo_marker@3x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallabe_marker.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "available_wallabe_marker.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "available_wallabe_marker@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "available_wallabe_marker@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallabe_marker.imageset/available_wallabe_marker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallabe_marker.imageset/available_wallabe_marker.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallabe_marker.imageset/available_wallabe_marker@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallabe_marker.imageset/available_wallabe_marker@2x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallabe_marker.imageset/available_wallabe_marker@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallabe_marker.imageset/available_wallabe_marker@3x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallaroo_marker.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "available_wallaroo_marker.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "available_wallaroo_marker@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "available_wallaroo_marker@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallaroo_marker.imageset/available_wallaroo_marker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallaroo_marker.imageset/available_wallaroo_marker.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallaroo_marker.imageset/available_wallaroo_marker@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallaroo_marker.imageset/available_wallaroo_marker@2x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallaroo_marker.imageset/available_wallaroo_marker@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/available_wallaroo_marker.imageset/available_wallaroo_marker@3x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ride_option_kangaroo.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ride_option_kangaroo@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ride_option_kangaroo@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "original" 25 | } 26 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo.imageset/ride_option_kangaroo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo.imageset/ride_option_kangaroo.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo.imageset/ride_option_kangaroo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo.imageset/ride_option_kangaroo@2x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo.imageset/ride_option_kangaroo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo.imageset/ride_option_kangaroo@3x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ride_option_kangaroo_selected.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ride_option_kangaroo_selected@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ride_option_kangaroo_selected@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "original" 25 | } 26 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo_selected.imageset/ride_option_kangaroo_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo_selected.imageset/ride_option_kangaroo_selected.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo_selected.imageset/ride_option_kangaroo_selected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo_selected.imageset/ride_option_kangaroo_selected@2x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo_selected.imageset/ride_option_kangaroo_selected@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_kangaroo_selected.imageset/ride_option_kangaroo_selected@3x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ride_option_wallabee.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ride_option_wallabee@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ride_option_wallabee@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "original" 25 | } 26 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee.imageset/ride_option_wallabee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee.imageset/ride_option_wallabee.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee.imageset/ride_option_wallabee@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee.imageset/ride_option_wallabee@2x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee.imageset/ride_option_wallabee@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee.imageset/ride_option_wallabee@3x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ride_option_wallabee_selected.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ride_option_wallabee_selected@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ride_option_wallabee_selected@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "original" 25 | } 26 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee_selected.imageset/ride_option_wallabee_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee_selected.imageset/ride_option_wallabee_selected.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee_selected.imageset/ride_option_wallabee_selected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee_selected.imageset/ride_option_wallabee_selected@2x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee_selected.imageset/ride_option_wallabee_selected@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallabee_selected.imageset/ride_option_wallabee_selected@3x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ride_option_wallaroo.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ride_option_wallaroo@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ride_option_wallaroo@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "original" 25 | } 26 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo.imageset/ride_option_wallaroo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo.imageset/ride_option_wallaroo.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo.imageset/ride_option_wallaroo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo.imageset/ride_option_wallaroo@2x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo.imageset/ride_option_wallaroo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo.imageset/ride_option_wallaroo@3x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ride_option_wallaroo_selected.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ride_option_wallaroo_selected@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ride_option_wallaroo_selected@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "original" 25 | } 26 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo_selected.imageset/ride_option_wallaroo_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo_selected.imageset/ride_option_wallaroo_selected.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo_selected.imageset/ride_option_wallaroo_selected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo_selected.imageset/ride_option_wallaroo_selected@2x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo_selected.imageset/ride_option_wallaroo_selected@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/RideOptionPicker/ride_option_wallaroo_selected.imageset/ride_option_wallaroo_selected@3x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/SetPickupLocationLoader.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "set_pickup_location_loader.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "set_pickup_location_loader@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "set_pickup_location_loader@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/SetPickupLocationLoader.imageset/set_pickup_location_loader.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/SetPickupLocationLoader.imageset/set_pickup_location_loader.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/SetPickupLocationLoader.imageset/set_pickup_location_loader@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/SetPickupLocationLoader.imageset/set_pickup_location_loader@2x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/SetPickupLocationLoader.imageset/set_pickup_location_loader@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/SetPickupLocationLoader.imageset/set_pickup_location_loader@3x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/available_placeholder_marker.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "available_placeholder_marker.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "available_placeholder_marker@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "available_placeholder_marker@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/available_placeholder_marker.imageset/available_placeholder_marker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/available_placeholder_marker.imageset/available_placeholder_marker.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/available_placeholder_marker.imageset/available_placeholder_marker@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/available_placeholder_marker.imageset/available_placeholder_marker@2x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/available_placeholder_marker.imageset/available_placeholder_marker@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/available_placeholder_marker.imageset/available_placeholder_marker@3x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/koober.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "Icon-60@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "Icon-60@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/koober.imageset/Icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/koober.imageset/Icon-60@2x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/koober.imageset/Icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/koober.imageset/Icon-60@3x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/requesting_indicator.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "requesting_indicator.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "requesting_indicator@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "requesting_indicator@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/requesting_indicator.imageset/requesting_indicator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/requesting_indicator.imageset/requesting_indicator.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/requesting_indicator.imageset/requesting_indicator@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/requesting_indicator.imageset/requesting_indicator@2x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/requesting_indicator.imageset/requesting_indicator@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/requesting_indicator.imageset/requesting_indicator@3x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ride_option_placeholder.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ride_option_placeholder@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ride_option_placeholder@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder.imageset/ride_option_placeholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder.imageset/ride_option_placeholder.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder.imageset/ride_option_placeholder@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder.imageset/ride_option_placeholder@2x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder.imageset/ride_option_placeholder@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder.imageset/ride_option_placeholder@3x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ride_option_wallabee_selected.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ride_option_wallabee_selected@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ride_option_wallabee_selected@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder_selected.imageset/ride_option_wallabee_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder_selected.imageset/ride_option_wallabee_selected.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder_selected.imageset/ride_option_wallabee_selected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder_selected.imageset/ride_option_wallabee_selected@2x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder_selected.imageset/ride_option_wallabee_selected@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/ride_option_placeholder_selected.imageset/ride_option_wallabee_selected@3x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/success_message.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "success_message.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "success_message@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "success_message@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/success_message.imageset/success_message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/success_message.imageset/success_message.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/success_message.imageset/success_message@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/success_message.imageset/success_message@2x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/success_message.imageset/success_message@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/RequestRide/success_message.imageset/success_message@3x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/card_icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "card_icon.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "card_icon@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "card_icon@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/card_icon.imageset/card_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/card_icon.imageset/card_icon.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/card_icon.imageset/card_icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/card_icon.imageset/card_icon@2x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/card_icon.imageset/card_icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/card_icon.imageset/card_icon@3x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/selected_icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "selected_icon.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "selected_icon@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "selected_icon@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/selected_icon.imageset/selected_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/selected_icon.imageset/selected_icon.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/selected_icon.imageset/selected_icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/selected_icon.imageset/selected_icon@2x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/selected_icon.imageset/selected_icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/SelectPaymentMethod/selected_icon.imageset/selected_icon@3x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/roo-icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "roo-icon.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "roo-icon@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "roo-icon@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/roo-icon.imageset/roo-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/roo-icon.imageset/roo-icon.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/roo-icon.imageset/roo-icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/roo-icon.imageset/roo-icon@2x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/roo-icon.imageset/roo-icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/roo-icon.imageset/roo-icon@3x.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/rw-logo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "Razewarelogo_1024.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/rw-logo.imageset/Razewarelogo_1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/rw-logo.imageset/Razewarelogo_1024.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/rwdevcon-bg.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "rwdevcon-bg.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/rwdevcon-bg.imageset/rwdevcon-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/rwdevcon-bg.imageset/rwdevcon-bg.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/rwdevcon-logo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "rwdevcon-logo.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/Assets.xcassets/Images/rwdevcon-logo.imageset/rwdevcon-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kodecocodes/swiftui-example-app-koober/8b64661b37aaf34a879d61e2ce46b2565788e6e8/swift-state/SUI Koober/Assets.xcassets/Images/rwdevcon-logo.imageset/rwdevcon-logo.png -------------------------------------------------------------------------------- /swift-state/SUI Koober/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /swift-state/SUI Koober/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UIApplicationSceneManifest 24 | 25 | UIApplicationSupportsMultipleScenes 26 | 27 | UISceneConfigurations 28 | 29 | UIWindowSceneSessionRoleApplication 30 | 31 | 32 | UILaunchStoryboardName 33 | LaunchScreen 34 | UISceneConfigurationName 35 | Default Configuration 36 | UISceneDelegateClassName 37 | $(PRODUCT_MODULE_NAME).SceneDelegate 38 | 39 | 40 | 41 | 42 | UILaunchStoryboardName 43 | LaunchScreen 44 | UIRequiredDeviceCapabilities 45 | 46 | armv7 47 | 48 | UISupportedInterfaceOrientations 49 | 50 | UIInterfaceOrientationPortrait 51 | UIInterfaceOrientationLandscapeLeft 52 | UIInterfaceOrientationLandscapeRight 53 | 54 | UISupportedInterfaceOrientations~ipad 55 | 56 | UIInterfaceOrientationPortrait 57 | UIInterfaceOrientationPortraitUpsideDown 58 | UIInterfaceOrientationLandscapeLeft 59 | UIInterfaceOrientationLandscapeRight 60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /swift-state/SUI Koober/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /swift-state/SUI Koober/ReusableModels/ErrorMessage.swift: -------------------------------------------------------------------------------- 1 | /// Copyright (c) 2019 Razeware LLC 2 | /// 3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy 4 | /// of this software and associated documentation files (the "Software"), to deal 5 | /// in the Software without restriction, including without limitation the rights 6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | /// copies of the Software, and to permit persons to whom the Software is 8 | /// furnished to do so, subject to the following conditions: 9 | /// 10 | /// The above copyright notice and this permission notice shall be included in 11 | /// all copies or substantial portions of the Software. 12 | /// 13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the 15 | /// Software in any work that is designed, intended, or marketed for pedagogical or 16 | /// instructional purposes related to programming, coding, application development, 17 | /// or information technology. Permission for such use, copying, modification, 18 | /// merger, publication, distribution, sublicensing, creation of derivative works, 19 | /// or sale is expressly withheld. 20 | /// 21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | /// THE SOFTWARE. 28 | 29 | import Foundation 30 | 31 | struct ErrorMessage: Error { 32 | let id = UUID() 33 | var message: String 34 | } 35 | 36 | protocol ErrorMessageConvertible { 37 | var errorMessage: ErrorMessage { get } 38 | } 39 | 40 | extension ErrorMessageConvertible { 41 | var errorMessage: ErrorMessage { 42 | ErrorMessage(message: "Unknown error. Please try again.") 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /swift-state/SUI Koober/ReusableViews/FullscreenView.swift: -------------------------------------------------------------------------------- 1 | /// Copyright (c) 2019 Razeware LLC 2 | /// 3 | /// Permission is hereby granted, free of charge, to any person obtaining a copy 4 | /// of this software and associated documentation files (the "Software"), to deal 5 | /// in the Software without restriction, including without limitation the rights 6 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | /// copies of the Software, and to permit persons to whom the Software is 8 | /// furnished to do so, subject to the following conditions: 9 | /// 10 | /// The above copyright notice and this permission notice shall be included in 11 | /// all copies or substantial portions of the Software. 12 | /// 13 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 14 | /// distribute, sublicense, create a derivative work, and/or sell copies of the 15 | /// Software in any work that is designed, intended, or marketed for pedagogical or 16 | /// instructional purposes related to programming, coding, application development, 17 | /// or information technology. Permission for such use, copying, modification, 18 | /// merger, publication, distribution, sublicensing, creation of derivative works, 19 | /// or sale is expressly withheld. 20 | /// 21 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | /// THE SOFTWARE. 28 | 29 | import SwiftUI 30 | 31 | /// Container view that spans the entire screen, ignoring safe areas. 32 | struct FullscreenView : View { 33 | let content: Content 34 | let backgroundColor: Color 35 | 36 | 37 | public init(backgroundColor: Color = Color.white, 38 | @ViewBuilder content: () -> Content) { 39 | self.backgroundColor = backgroundColor 40 | self.content = content() 41 | } 42 | 43 | var body: some View { 44 | HStack { 45 | Spacer() 46 | VStack { 47 | Spacer() 48 | content 49 | Spacer() 50 | } 51 | Spacer() 52 | } 53 | .background(backgroundColor) 54 | .edgesIgnoringSafeArea(.all) 55 | } 56 | } 57 | 58 | #if DEBUG 59 | struct FullscreenView_Previews : PreviewProvider { 60 | static var previews: some View { 61 | FullscreenView { 62 | Text("Content") 63 | } 64 | } 65 | } 66 | #endif 67 | --------------------------------------------------------------------------------