├── saloon_mobile ├── ios │ ├── Flutter │ │ ├── Debug.xcconfig │ │ ├── Release.xcconfig │ │ └── AppFrameworkInfo.plist │ ├── Runner │ │ ├── Runner-Bridging-Header.h │ │ ├── Assets.xcassets │ │ │ ├── LaunchImage.imageset │ │ │ │ ├── LaunchImage.png │ │ │ │ ├── LaunchImage@2x.png │ │ │ │ ├── LaunchImage@3x.png │ │ │ │ ├── README.md │ │ │ │ └── Contents.json │ │ │ └── AppIcon.appiconset │ │ │ │ ├── Icon-App-20x20@1x.png │ │ │ │ ├── Icon-App-20x20@2x.png │ │ │ │ ├── Icon-App-20x20@3x.png │ │ │ │ ├── Icon-App-29x29@1x.png │ │ │ │ ├── Icon-App-29x29@2x.png │ │ │ │ ├── Icon-App-29x29@3x.png │ │ │ │ ├── Icon-App-40x40@1x.png │ │ │ │ ├── Icon-App-40x40@2x.png │ │ │ │ ├── Icon-App-40x40@3x.png │ │ │ │ ├── Icon-App-60x60@2x.png │ │ │ │ ├── Icon-App-60x60@3x.png │ │ │ │ ├── Icon-App-76x76@1x.png │ │ │ │ ├── Icon-App-76x76@2x.png │ │ │ │ ├── Icon-App-1024x1024@1x.png │ │ │ │ ├── Icon-App-83.5x83.5@2x.png │ │ │ │ └── Contents.json │ │ ├── AppDelegate.swift │ │ ├── Base.lproj │ │ │ ├── Main.storyboard │ │ │ └── LaunchScreen.storyboard │ │ └── Info.plist │ ├── Runner.xcodeproj │ │ ├── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ │ ├── WorkspaceSettings.xcsettings │ │ │ │ └── IDEWorkspaceChecks.plist │ │ ├── xcshareddata │ │ │ └── xcschemes │ │ │ │ └── Runner.xcscheme │ │ └── project.pbxproj │ ├── Runner.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── WorkspaceSettings.xcsettings │ │ │ └── IDEWorkspaceChecks.plist │ └── .gitignore ├── android │ ├── gradle.properties │ ├── app │ │ ├── src │ │ │ ├── main │ │ │ │ ├── res │ │ │ │ │ ├── mipmap-hdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-mdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-xhdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── drawable │ │ │ │ │ │ └── launch_background.xml │ │ │ │ │ ├── drawable-v21 │ │ │ │ │ │ └── launch_background.xml │ │ │ │ │ ├── values │ │ │ │ │ │ └── styles.xml │ │ │ │ │ └── values-night │ │ │ │ │ │ └── styles.xml │ │ │ │ ├── kotlin │ │ │ │ │ └── com │ │ │ │ │ │ └── example │ │ │ │ │ │ └── saloon_mobile │ │ │ │ │ │ └── MainActivity.kt │ │ │ │ └── AndroidManifest.xml │ │ │ └── profile │ │ │ │ └── AndroidManifest.xml │ │ └── build.gradle │ ├── gradle │ │ └── wrapper │ │ │ └── gradle-wrapper.properties │ ├── .gitignore │ ├── settings.gradle │ └── build.gradle ├── web │ ├── favicon.png │ ├── icons │ │ ├── Icon-192.png │ │ └── Icon-512.png │ ├── manifest.json │ └── index.html ├── .metadata ├── README.md ├── .gitignore ├── test │ └── widget_test.dart ├── pubspec.yaml ├── pubspec.lock └── lib │ └── main.dart ├── SPA ├── Portal │ ├── Sales │ │ └── Sales.razor │ ├── Analytics │ │ ├── Analytics.scss │ │ └── Analytics.razor │ ├── Services │ │ └── Services.razor │ ├── Vouchers │ │ └── Vouchers.razor │ ├── Customers │ │ └── Customers.razor │ ├── Inventory │ │ └── Inventory.razor │ ├── Users │ │ ├── UsersDTO.cs │ │ └── Users.razor │ ├── Calendar │ │ ├── Appointment.cs │ │ ├── Calendar.razor │ │ └── AppointmentCollection .cs │ └── Theme │ │ └── ThemeSwitcher.razor ├── wwwroot │ ├── favicon.ico │ ├── images │ │ └── banner.png │ ├── css │ │ ├── open-iconic │ │ │ ├── font │ │ │ │ ├── fonts │ │ │ │ │ ├── open-iconic.eot │ │ │ │ │ ├── open-iconic.otf │ │ │ │ │ ├── open-iconic.ttf │ │ │ │ │ └── open-iconic.woff │ │ │ │ └── css │ │ │ │ │ └── open-iconic-bootstrap.min.css │ │ │ ├── ICON-LICENSE.txt │ │ │ ├── README.md │ │ │ └── FONT-LICENSE.txt │ │ ├── switcher-resources │ │ │ ├── themes.css │ │ │ └── theme-switcher.css │ │ ├── app.css │ │ └── site.css │ ├── sample-data │ │ └── weather.json │ ├── site.js │ └── index.html ├── Pages │ ├── Index.razor │ ├── Error.razor │ └── DataGrid.razor ├── App.razor ├── _Imports.razor ├── Program.cs ├── Properties │ └── launchSettings.json ├── SPA.csproj ├── readme.html └── Shared │ ├── NavMenu.razor │ ├── MainLayout.razor │ └── Header.razor ├── Screenshots ├── Mobile │ ├── LoginMobile.JPG │ ├── ClientsMobile.JPG │ ├── Calendar-Mobile.jpg │ ├── Calendar-Mobile.png │ ├── DashboardMobile.JPG │ ├── Register Mobile.JPG │ ├── Services-Mobile.JPG │ ├── Vocuhers Mobile.JPG │ ├── BlockedTime-Mobile.JPG │ ├── DashboardMenuMobile.JPG │ ├── NewAppointment-Mobile.JPG │ ├── UserPermissions-Mobile.JPG │ └── Notification-Message-Mobile.JPG └── Desktop │ ├── ClientDesktop.jpg │ ├── Desktop-Theme.JPG │ ├── DesktopLogin.JPG │ ├── Sales-Desktop.JPG │ ├── Calendar-Desktop.JPG │ ├── DashboardDesktop.JPG │ ├── DesktopRegister.JPG │ ├── Services-Desktop.JPG │ ├── Voucher-Desktop.JPG │ ├── Suppliers-Desktop.JPG │ ├── BlockedTime-Desktop.JPG │ ├── ExportExcel-Desktop.JPG │ ├── NewProduct- Desktop.JPG │ ├── NewAppointment-Desktop.JPG │ ├── UserPermissions-Desktop.JPG │ └── WorkingHours-staff-Desktop.JPG ├── SPA.sln ├── .gitignore ├── README.html └── README.md /saloon_mobile/ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /saloon_mobile/ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /SPA/Portal/Sales/Sales.razor: -------------------------------------------------------------------------------- 1 | @page "/sales" 2 |

Sales

3 | @code { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /saloon_mobile/ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /SPA/Portal/Analytics/Analytics.scss: -------------------------------------------------------------------------------- 1 | body { 2 | } 3 | .Tabs{ 4 | width:50% !important; 5 | } 6 | -------------------------------------------------------------------------------- /SPA/Portal/Services/Services.razor: -------------------------------------------------------------------------------- 1 | @page "/services" 2 |

Services

3 | @code { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /SPA/Portal/Vouchers/Vouchers.razor: -------------------------------------------------------------------------------- 1 | @page "/vouchers" 2 |

Vouchers

3 | @code { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /SPA/Portal/Customers/Customers.razor: -------------------------------------------------------------------------------- 1 | @page "/customers" 2 |

Customers

3 | @code { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /SPA/Portal/Inventory/Inventory.razor: -------------------------------------------------------------------------------- 1 | @page "/inventory" 2 |

Inventory

3 | @code { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /SPA/wwwroot/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/SPA/wwwroot/favicon.ico -------------------------------------------------------------------------------- /saloon_mobile/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | -------------------------------------------------------------------------------- /SPA/wwwroot/images/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/SPA/wwwroot/images/banner.png -------------------------------------------------------------------------------- /saloon_mobile/web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/saloon_mobile/web/favicon.png -------------------------------------------------------------------------------- /SPA/Pages/Index.razor: -------------------------------------------------------------------------------- 1 | @page "/" 2 | 3 |

Appointments

4 |

5 | Select something from analytics 6 |

7 | -------------------------------------------------------------------------------- /Screenshots/Mobile/LoginMobile.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/Screenshots/Mobile/LoginMobile.JPG -------------------------------------------------------------------------------- /Screenshots/Desktop/ClientDesktop.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/Screenshots/Desktop/ClientDesktop.jpg -------------------------------------------------------------------------------- /Screenshots/Desktop/Desktop-Theme.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/Screenshots/Desktop/Desktop-Theme.JPG -------------------------------------------------------------------------------- /Screenshots/Desktop/DesktopLogin.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/Screenshots/Desktop/DesktopLogin.JPG -------------------------------------------------------------------------------- /Screenshots/Desktop/Sales-Desktop.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/Screenshots/Desktop/Sales-Desktop.JPG -------------------------------------------------------------------------------- /Screenshots/Mobile/ClientsMobile.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/Screenshots/Mobile/ClientsMobile.JPG -------------------------------------------------------------------------------- /saloon_mobile/web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/saloon_mobile/web/icons/Icon-192.png -------------------------------------------------------------------------------- /saloon_mobile/web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/saloon_mobile/web/icons/Icon-512.png -------------------------------------------------------------------------------- /Screenshots/Desktop/Calendar-Desktop.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/Screenshots/Desktop/Calendar-Desktop.JPG -------------------------------------------------------------------------------- /Screenshots/Desktop/DashboardDesktop.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/Screenshots/Desktop/DashboardDesktop.JPG -------------------------------------------------------------------------------- /Screenshots/Desktop/DesktopRegister.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/Screenshots/Desktop/DesktopRegister.JPG -------------------------------------------------------------------------------- /Screenshots/Desktop/Services-Desktop.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/Screenshots/Desktop/Services-Desktop.JPG -------------------------------------------------------------------------------- /Screenshots/Desktop/Voucher-Desktop.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/Screenshots/Desktop/Voucher-Desktop.JPG -------------------------------------------------------------------------------- /Screenshots/Mobile/Calendar-Mobile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/Screenshots/Mobile/Calendar-Mobile.jpg -------------------------------------------------------------------------------- /Screenshots/Mobile/Calendar-Mobile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/Screenshots/Mobile/Calendar-Mobile.png -------------------------------------------------------------------------------- /Screenshots/Mobile/DashboardMobile.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/Screenshots/Mobile/DashboardMobile.JPG -------------------------------------------------------------------------------- /Screenshots/Mobile/Register Mobile.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/Screenshots/Mobile/Register Mobile.JPG -------------------------------------------------------------------------------- /Screenshots/Mobile/Services-Mobile.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/Screenshots/Mobile/Services-Mobile.JPG -------------------------------------------------------------------------------- /Screenshots/Mobile/Vocuhers Mobile.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/Screenshots/Mobile/Vocuhers Mobile.JPG -------------------------------------------------------------------------------- /Screenshots/Desktop/Suppliers-Desktop.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/Screenshots/Desktop/Suppliers-Desktop.JPG -------------------------------------------------------------------------------- /Screenshots/Mobile/BlockedTime-Mobile.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/Screenshots/Mobile/BlockedTime-Mobile.JPG -------------------------------------------------------------------------------- /Screenshots/Mobile/DashboardMenuMobile.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/Screenshots/Mobile/DashboardMenuMobile.JPG -------------------------------------------------------------------------------- /Screenshots/Desktop/BlockedTime-Desktop.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/Screenshots/Desktop/BlockedTime-Desktop.JPG -------------------------------------------------------------------------------- /Screenshots/Desktop/ExportExcel-Desktop.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/Screenshots/Desktop/ExportExcel-Desktop.JPG -------------------------------------------------------------------------------- /Screenshots/Desktop/NewProduct- Desktop.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/Screenshots/Desktop/NewProduct- Desktop.JPG -------------------------------------------------------------------------------- /Screenshots/Mobile/NewAppointment-Mobile.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/Screenshots/Mobile/NewAppointment-Mobile.JPG -------------------------------------------------------------------------------- /Screenshots/Mobile/UserPermissions-Mobile.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/Screenshots/Mobile/UserPermissions-Mobile.JPG -------------------------------------------------------------------------------- /Screenshots/Desktop/NewAppointment-Desktop.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/Screenshots/Desktop/NewAppointment-Desktop.JPG -------------------------------------------------------------------------------- /Screenshots/Desktop/UserPermissions-Desktop.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/Screenshots/Desktop/UserPermissions-Desktop.JPG -------------------------------------------------------------------------------- /Screenshots/Desktop/WorkingHours-staff-Desktop.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/Screenshots/Desktop/WorkingHours-staff-Desktop.JPG -------------------------------------------------------------------------------- /Screenshots/Mobile/Notification-Message-Mobile.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/Screenshots/Mobile/Notification-Message-Mobile.JPG -------------------------------------------------------------------------------- /SPA/wwwroot/css/open-iconic/font/fonts/open-iconic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/SPA/wwwroot/css/open-iconic/font/fonts/open-iconic.eot -------------------------------------------------------------------------------- /SPA/wwwroot/css/open-iconic/font/fonts/open-iconic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/SPA/wwwroot/css/open-iconic/font/fonts/open-iconic.otf -------------------------------------------------------------------------------- /SPA/wwwroot/css/open-iconic/font/fonts/open-iconic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/SPA/wwwroot/css/open-iconic/font/fonts/open-iconic.ttf -------------------------------------------------------------------------------- /SPA/wwwroot/css/open-iconic/font/fonts/open-iconic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/SPA/wwwroot/css/open-iconic/font/fonts/open-iconic.woff -------------------------------------------------------------------------------- /saloon_mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/saloon_mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /saloon_mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/saloon_mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /saloon_mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/saloon_mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /saloon_mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/saloon_mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /saloon_mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/saloon_mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /saloon_mobile/android/app/src/main/kotlin/com/example/saloon_mobile/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.example.saloon_mobile 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /saloon_mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/saloon_mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /saloon_mobile/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /saloon_mobile/ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /saloon_mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/saloon_mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /saloon_mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/saloon_mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /saloon_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/saloon_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /saloon_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/saloon_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /saloon_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/saloon_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /saloon_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/saloon_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /saloon_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/saloon_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /saloon_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/saloon_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /saloon_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/saloon_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /saloon_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/saloon_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /saloon_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/saloon_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /saloon_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/saloon_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /saloon_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/saloon_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /saloon_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/saloon_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /saloon_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/saloon_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /saloon_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/saloon_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /saloon_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunilvijayan7/Saloon-Manager-Flutter-DotNetCore/HEAD/saloon_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /saloon_mobile/android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Fri Jun 23 08:50:38 CEST 2017 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip 7 | -------------------------------------------------------------------------------- /saloon_mobile/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /saloon_mobile/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /saloon_mobile/android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | 9 | # Remember to never publicly share your keystore. 10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app 11 | key.properties 12 | -------------------------------------------------------------------------------- /saloon_mobile/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /saloon_mobile/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /saloon_mobile/.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled and should not be manually edited. 5 | 6 | version: 7 | revision: adc687823a831bbebe28bdccfac1a628ca621513 8 | channel: stable 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /SPA/App.razor: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |

Sorry, there's nothing at this address.

8 |
9 |
10 |
11 | -------------------------------------------------------------------------------- /saloon_mobile/android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /saloon_mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md: -------------------------------------------------------------------------------- 1 | # Launch Screen Assets 2 | 3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory. 4 | 5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. -------------------------------------------------------------------------------- /saloon_mobile/ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Flutter 3 | 4 | @UIApplicationMain 5 | @objc class AppDelegate: FlutterAppDelegate { 6 | override func application( 7 | _ application: UIApplication, 8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 9 | ) -> Bool { 10 | GeneratedPluginRegistrant.register(with: self) 11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /saloon_mobile/android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties") 4 | def properties = new Properties() 5 | 6 | assert localPropertiesFile.exists() 7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } 8 | 9 | def flutterSdkPath = properties.getProperty("flutter.sdk") 10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" 12 | -------------------------------------------------------------------------------- /saloon_mobile/android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /saloon_mobile/android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /saloon_mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchImage.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchImage@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "LaunchImage@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /SPA/wwwroot/sample-data/weather.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "date": "2018-05-06", 4 | "temperatureC": 1, 5 | "summary": "Freezing" 6 | }, 7 | { 8 | "date": "2018-05-07", 9 | "temperatureC": 14, 10 | "summary": "Bracing" 11 | }, 12 | { 13 | "date": "2018-05-08", 14 | "temperatureC": -13, 15 | "summary": "Freezing" 16 | }, 17 | { 18 | "date": "2018-05-09", 19 | "temperatureC": -16, 20 | "summary": "Balmy" 21 | }, 22 | { 23 | "date": "2018-05-10", 24 | "temperatureC": -2, 25 | "summary": "Chilly" 26 | } 27 | ] 28 | -------------------------------------------------------------------------------- /saloon_mobile/README.md: -------------------------------------------------------------------------------- 1 | # saloon_mobile 2 | 3 | A new Flutter project. 4 | 5 | ## Getting Started 6 | 7 | This project is a starting point for a Flutter application. 8 | 9 | A few resources to get you started if this is your first Flutter project: 10 | 11 | - [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab) 12 | - [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook) 13 | 14 | For help getting started with Flutter, view our 15 | [online documentation](https://flutter.dev/docs), which offers tutorials, 16 | samples, guidance on mobile development, and a full API reference. 17 | -------------------------------------------------------------------------------- /SPA/Portal/Users/UsersDTO.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | 6 | namespace SPA.Portal.Users 7 | { 8 | public class UsersDTO 9 | { 10 | public string Title { get; set; } 11 | public string FirstName { get; set; } 12 | public string LastName { get; set; } 13 | public string Position { get; set; } 14 | public DateTime BirthDate { get; set; } 15 | public DateTime HireDate { get; set; } 16 | public string Notes { get; set; } 17 | public string FileName { get; set; } 18 | 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /SPA/_Imports.razor: -------------------------------------------------------------------------------- 1 | @using System.Net.Http 2 | @using System.Net.Http.Json 3 | @using Microsoft.AspNetCore.Components.Forms 4 | @using Microsoft.AspNetCore.Components.Routing 5 | @using Microsoft.AspNetCore.Components.Web 6 | @using Microsoft.AspNetCore.Components.WebAssembly.Http 7 | @using Microsoft.JSInterop 8 | @using SPA 9 | @using SPA.Shared 10 | @using SPA.Portal 11 | @using SPA.Portal.Theme 12 | @using SPA.Portal.Users 13 | @using SPA.Portal.Calendar 14 | @using SPA.Portal.Analytics 15 | @using SPA.Portal.Inventory 16 | @using SPA.Portal.Sales 17 | @using SPA.Portal.Vouchers 18 | @using SPA.Portal.Customers 19 | @using SPA.Portal.Services 20 | 21 | @using DevExpress.Blazor -------------------------------------------------------------------------------- /SPA/wwwroot/site.js: -------------------------------------------------------------------------------- 1 | function windowMinWidthMatchesQuery(dotNetHelper) { 2 | var pendingCall; 3 | var match = window.matchMedia("(min-width: 1200px)") 4 | handleMinWidthQuery(match).then(function () { match.addListener(handleMinWidthQuery) }); 5 | function handleMinWidthQuery(queryMatch) { 6 | return (pendingCall || Promise.resolve(true)) 7 | .then(function () { 8 | return pendingCall = new Promise(function (resolve, reject) { 9 | dotNetHelper.invokeMethodAsync('OnWindowMinWidthQueryChanged', queryMatch.matches).then(resolve).catch(reject); 10 | }); 11 | }); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /saloon_mobile/ios/.gitignore: -------------------------------------------------------------------------------- 1 | *.mode1v3 2 | *.mode2v3 3 | *.moved-aside 4 | *.pbxuser 5 | *.perspectivev3 6 | **/*sync/ 7 | .sconsign.dblite 8 | .tags* 9 | **/.vagrant/ 10 | **/DerivedData/ 11 | Icon? 12 | **/Pods/ 13 | **/.symlinks/ 14 | profile 15 | xcuserdata 16 | **/.generated/ 17 | Flutter/App.framework 18 | Flutter/Flutter.framework 19 | Flutter/Flutter.podspec 20 | Flutter/Generated.xcconfig 21 | Flutter/app.flx 22 | Flutter/app.zip 23 | Flutter/flutter_assets/ 24 | Flutter/flutter_export_environment.sh 25 | ServiceDefinitions.json 26 | Runner/GeneratedPluginRegistrant.* 27 | 28 | # Exceptions to above rules. 29 | !default.mode1v3 30 | !default.mode2v3 31 | !default.pbxuser 32 | !default.perspectivev3 33 | -------------------------------------------------------------------------------- /saloon_mobile/web/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "saloon_mobile", 3 | "short_name": "saloon_mobile", 4 | "start_url": ".", 5 | "display": "standalone", 6 | "background_color": "#0175C2", 7 | "theme_color": "#0175C2", 8 | "description": "A new Flutter project.", 9 | "orientation": "portrait-primary", 10 | "prefer_related_applications": false, 11 | "icons": [ 12 | { 13 | "src": "icons/Icon-192.png", 14 | "sizes": "192x192", 15 | "type": "image/png" 16 | }, 17 | { 18 | "src": "icons/Icon-512.png", 19 | "sizes": "512x512", 20 | "type": "image/png" 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /SPA/Program.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Components.WebAssembly.Hosting; 2 | using Microsoft.Extensions.DependencyInjection; 3 | using System; 4 | using System.Net.Http; 5 | using System.Threading.Tasks; 6 | 7 | namespace SPA 8 | { 9 | public class Program 10 | { 11 | public static async Task Main(string[] args) 12 | { 13 | var builder = WebAssemblyHostBuilder.CreateDefault(args); 14 | builder.RootComponents.Add("app"); 15 | builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); 16 | 17 | builder.Services.AddDevExpressBlazor(); 18 | await builder.Build().RunAsync(); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /saloon_mobile/android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.3.50' 3 | repositories { 4 | google() 5 | jcenter() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:4.1.0' 10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 11 | } 12 | } 13 | 14 | allprojects { 15 | repositories { 16 | google() 17 | jcenter() 18 | } 19 | } 20 | 21 | rootProject.buildDir = '../build' 22 | subprojects { 23 | project.buildDir = "${rootProject.buildDir}/${project.name}" 24 | } 25 | subprojects { 26 | project.evaluationDependsOn(':app') 27 | } 28 | 29 | task clean(type: Delete) { 30 | delete rootProject.buildDir 31 | } 32 | -------------------------------------------------------------------------------- /SPA/Pages/Error.razor: -------------------------------------------------------------------------------- 1 | @page "/error" 2 | 3 | 4 |

Error.

5 |

An error occurred while processing your request.

6 | 7 |

Development Mode

8 |

9 | Swapping to Development environment will display more detailed information about the error that occurred. 10 |

11 |

12 | The Development environment shouldn't be enabled for deployed applications. 13 | It can result in displaying sensitive information from exceptions to end users. 14 | For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development 15 | and restarting the app. 16 |

-------------------------------------------------------------------------------- /SPA/Portal/Calendar/Appointment.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | 6 | namespace SPA.Portal.Calendar 7 | { 8 | public class Appointment 9 | { 10 | public Appointment() { } 11 | 12 | public int AppointmentType { get; set; } 13 | public DateTime StartDate { get; set; } 14 | public DateTime EndDate { get; set; } 15 | public string Caption { get; set; } 16 | public string Description { get; set; } 17 | public string Location { get; set; } 18 | public int Label { get; set; } 19 | public int Status { get; set; } 20 | public bool AllDay { get; set; } 21 | public string Recurrence { get; set; } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /SPA/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "iisSettings": { 3 | "windowsAuthentication": false, 4 | "anonymousAuthentication": true, 5 | "iisExpress": { 6 | "applicationUrl": "http://localhost:53802/", 7 | "sslPort": 44302 8 | } 9 | }, 10 | "profiles": { 11 | "IIS Express": { 12 | "commandName": "IISExpress", 13 | "launchBrowser": true, 14 | "environmentVariables": { 15 | "ASPNETCORE_ENVIRONMENT": "Development" 16 | } 17 | }, 18 | "SPA": { 19 | "commandName": "Project", 20 | "launchBrowser": true, 21 | "environmentVariables": { 22 | "ASPNETCORE_ENVIRONMENT": "Development" 23 | }, 24 | "applicationUrl": "https://localhost:5001;http://localhost:5000" 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /SPA/SPA.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.1 5 | 3.0 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /saloon_mobile/ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 8.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /saloon_mobile/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | 12 | # IntelliJ related 13 | *.iml 14 | *.ipr 15 | *.iws 16 | .idea/ 17 | 18 | # The .vscode folder contains launch configuration and tasks you configure in 19 | # VS Code which you may wish to be included in version control, so this line 20 | # is commented out by default. 21 | #.vscode/ 22 | 23 | # Flutter/Dart/Pub related 24 | **/doc/api/ 25 | **/ios/Flutter/.last_build_id 26 | .dart_tool/ 27 | .flutter-plugins 28 | .flutter-plugins-dependencies 29 | .packages 30 | .pub-cache/ 31 | .pub/ 32 | /build/ 33 | 34 | # Web related 35 | lib/generated_plugin_registrant.dart 36 | 37 | # Symbolication related 38 | app.*.symbols 39 | 40 | # Obfuscation related 41 | app.*.map.json 42 | 43 | # Android Studio will place build artifacts here 44 | /android/app/debug 45 | /android/app/profile 46 | /android/app/release 47 | -------------------------------------------------------------------------------- /SPA/readme.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |
7 |

Before you build this project, make sure that:

8 | 12 |
13 | 14 | 15 | -------------------------------------------------------------------------------- /SPA/Portal/Calendar/Calendar.razor: -------------------------------------------------------------------------------- 1 | @page "/calendar" 2 | @inject HttpClient Http 3 | @using DevExpress.Blazor 4 | 5 | 6 | 7 | 8 | 9 | @code { 10 | DxSchedulerDataStorage DataStorage = new DxSchedulerDataStorage() 11 | { 12 | AppointmentsSource = AppointmentCollection.GetAppointments(), 13 | AppointmentMappings = new DxSchedulerAppointmentMappings() 14 | { 15 | Type = "AppointmentType", 16 | Start = "StartDate", 17 | End = "EndDate", 18 | Subject = "Caption", 19 | AllDay = "AllDay", 20 | Location = "Location", 21 | Description = "Description", 22 | LabelId = "Label", 23 | StatusId = "Status", 24 | RecurrenceInfo = "Recurrence" 25 | } 26 | }; 27 | } -------------------------------------------------------------------------------- /SPA/Pages/DataGrid.razor: -------------------------------------------------------------------------------- 1 | @page "/datagrid" 2 | @inject HttpClient Http 3 | @using DevExpress.Blazor 4 | @using System.Threading 5 | 6 |

Users

7 | 8 | @if (forecasts == null) 9 | { 10 |

Loading...

11 | } 12 | else 13 | { 14 | 15 | 16 | 17 | 18 | 19 | } 20 | 21 | @code { 22 | private WeatherForecast[] forecasts; 23 | 24 | 25 | protected override async Task OnInitializedAsync() 26 | { 27 | forecasts = await Http.GetFromJsonAsync("sample-data/weather.json"); 28 | 29 | } 30 | 31 | public class WeatherForecast 32 | { 33 | public DateTime Date { get; set; } 34 | 35 | public int TemperatureC { get; set; } 36 | 37 | public string Summary { get; set; } 38 | 39 | public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /saloon_mobile/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /saloon_mobile/android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /SPA/Shared/NavMenu.razor: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /SPA/wwwroot/css/open-iconic/ICON-LICENSE.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Waybury 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. -------------------------------------------------------------------------------- /SPA.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 16 4 | VisualStudioVersion = 16.0.30413.136 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SPA", "SPA\SPA.csproj", "{BFEF60AD-0226-497F-9952-7D15F6610C98}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {BFEF60AD-0226-497F-9952-7D15F6610C98}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {BFEF60AD-0226-497F-9952-7D15F6610C98}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {BFEF60AD-0226-497F-9952-7D15F6610C98}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {BFEF60AD-0226-497F-9952-7D15F6610C98}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | GlobalSection(ExtensibilityGlobals) = postSolution 23 | SolutionGuid = {675703D4-FD6F-4530-B5EE-1E9A46140641} 24 | EndGlobalSection 25 | EndGlobal 26 | -------------------------------------------------------------------------------- /saloon_mobile/test/widget_test.dart: -------------------------------------------------------------------------------- 1 | // This is a basic Flutter widget test. 2 | // 3 | // To perform an interaction with a widget in your test, use the WidgetTester 4 | // utility that Flutter provides. For example, you can send tap and scroll 5 | // gestures. You can also use WidgetTester to find child widgets in the widget 6 | // tree, read text, and verify that the values of widget properties are correct. 7 | 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter_test/flutter_test.dart'; 10 | 11 | import 'package:saloon_mobile/main.dart'; 12 | 13 | void main() { 14 | testWidgets('Counter increments smoke test', (WidgetTester tester) async { 15 | // Build our app and trigger a frame. 16 | await tester.pumpWidget(MyApp()); 17 | 18 | // Verify that our counter starts at 0. 19 | expect(find.text('0'), findsOneWidget); 20 | expect(find.text('1'), findsNothing); 21 | 22 | // Tap the '+' icon and trigger a frame. 23 | await tester.tap(find.byIcon(Icons.add)); 24 | await tester.pump(); 25 | 26 | // Verify that our counter has incremented. 27 | expect(find.text('0'), findsNothing); 28 | expect(find.text('1'), findsOneWidget); 29 | }); 30 | } 31 | -------------------------------------------------------------------------------- /SPA/Shared/MainLayout.razor: -------------------------------------------------------------------------------- 1 | @inherits LayoutComponentBase 2 | @using SPA.Portal.Theme 3 | 4 |
5 | 6 |
7 | 10 |
11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 |
19 | @Body 20 |
21 |
22 | @code{ 23 | string NavMenuCssClass { get; set; } 24 | } 25 | @code { bool themeSwitcherShown = false; 26 | bool ThemeSwitcherShown 27 | { 28 | get => themeSwitcherShown; 29 | set 30 | { 31 | themeSwitcherShown = value; 32 | InvokeAsync(StateHasChanged); 33 | } 34 | } 35 | 36 | void ToggleThemeSwitcherPanel() 37 | { 38 | ThemeSwitcherShown = !ThemeSwitcherShown; 39 | } } 40 | 41 | -------------------------------------------------------------------------------- /SPA/Portal/Calendar/AppointmentCollection .cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | 6 | namespace SPA.Portal.Calendar 7 | { 8 | public class AppointmentCollection 9 | { 10 | public static List GetAppointments() 11 | { 12 | DateTime date = DateTime.Today; 13 | var dataSource = new List() { 14 | new Appointment { 15 | Caption = "Install New Router in Dev Room", 16 | StartDate = date + (new TimeSpan(0, 10, 0, 0)), 17 | EndDate = date + (new TimeSpan(0, 12, 0, 0)), 18 | Label = 6, 19 | Status = 1 20 | }, 21 | new Appointment { 22 | Caption = "Upgrade Personal Computers", 23 | StartDate = date + (new TimeSpan(0, 13, 0, 0)), 24 | EndDate = date + (new TimeSpan(0, 14, 30, 0)), 25 | Label = 1, 26 | Status = 1 27 | }, 28 | new Appointment { 29 | Caption = "Website Re-Design Plan", 30 | StartDate = date + (new TimeSpan(1, 9, 30, 0)), 31 | EndDate = date + (new TimeSpan(1, 11, 30, 0)), 32 | Label = 1, 33 | Status = 1 34 | }, 35 | // ... 36 | }; 37 | return dataSource; 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /saloon_mobile/web/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | saloon_mobile 30 | 31 | 32 | 33 | 36 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /saloon_mobile/ios/Runner/Base.lproj/Main.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 | 27 | -------------------------------------------------------------------------------- /saloon_mobile/ios/Runner/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 | saloon_mobile 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | $(FLUTTER_BUILD_NAME) 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(FLUTTER_BUILD_NUMBER) 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UISupportedInterfaceOrientations 30 | 31 | UIInterfaceOrientationPortrait 32 | UIInterfaceOrientationLandscapeLeft 33 | UIInterfaceOrientationLandscapeRight 34 | 35 | UISupportedInterfaceOrientations~ipad 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationPortraitUpsideDown 39 | UIInterfaceOrientationLandscapeLeft 40 | UIInterfaceOrientationLandscapeRight 41 | 42 | UIViewControllerBasedStatusBarAppearance 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /saloon_mobile/android/app/build.gradle: -------------------------------------------------------------------------------- 1 | def localProperties = new Properties() 2 | def localPropertiesFile = rootProject.file('local.properties') 3 | if (localPropertiesFile.exists()) { 4 | localPropertiesFile.withReader('UTF-8') { reader -> 5 | localProperties.load(reader) 6 | } 7 | } 8 | 9 | def flutterRoot = localProperties.getProperty('flutter.sdk') 10 | if (flutterRoot == null) { 11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") 12 | } 13 | 14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode') 15 | if (flutterVersionCode == null) { 16 | flutterVersionCode = '1' 17 | } 18 | 19 | def flutterVersionName = localProperties.getProperty('flutter.versionName') 20 | if (flutterVersionName == null) { 21 | flutterVersionName = '1.0' 22 | } 23 | 24 | apply plugin: 'com.android.application' 25 | apply plugin: 'kotlin-android' 26 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" 27 | 28 | android { 29 | compileSdkVersion 30 30 | 31 | sourceSets { 32 | main.java.srcDirs += 'src/main/kotlin' 33 | } 34 | 35 | defaultConfig { 36 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 37 | applicationId "com.example.saloon_mobile" 38 | minSdkVersion 16 39 | targetSdkVersion 30 40 | versionCode flutterVersionCode.toInteger() 41 | versionName flutterVersionName 42 | } 43 | 44 | buildTypes { 45 | release { 46 | // TODO: Add your own signing config for the release build. 47 | // Signing with the debug keys for now, so `flutter run --release` works. 48 | signingConfig signingConfigs.debug 49 | } 50 | } 51 | } 52 | 53 | flutter { 54 | source '../..' 55 | } 56 | 57 | dependencies { 58 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" 59 | } 60 | -------------------------------------------------------------------------------- /SPA/Portal/Users/Users.razor: -------------------------------------------------------------------------------- 1 | 2 | @page "/users" 3 | @inject HttpClient Http 4 | @using DevExpress.Blazor 5 | @using System.Threading 6 | 7 |

Users

8 | 9 | 10 | 11 |
12 | Total Users 13 |
14 |
15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 |
26 |
27 | 28 | @code { 29 | public class WeatherForecasts 30 | { 31 | public DateTime Date { get; set; } 32 | public int TemperatureC { get; set; } 33 | public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); 34 | public string CloudCover { get; set; } 35 | public bool Precipitation { get; set; } 36 | } 37 | 38 | 39 | String[] CloudCover = { "Sunny", "Partly cloudy", "Cloudy", "Storm" }; 40 | 41 | public Task> GetForecastAsync(CancellationToken ct = default) 42 | { 43 | var rng = new Random(); 44 | DateTime startDate = DateTime.Now; 45 | return Task.FromResult(Enumerable.Range(1, 7).Select(index => new WeatherForecasts 46 | { 47 | Date = startDate.AddDays(index), 48 | TemperatureC = rng.Next(-15, 20), 49 | CloudCover = CloudCover[rng.Next(0, CloudCover.Length)], 50 | Precipitation = Convert.ToBoolean(rng.Next(0, 2)) 51 | }).AsEnumerable()); 52 | } 53 | 54 | } 55 | -------------------------------------------------------------------------------- /SPA/Shared/Header.razor: -------------------------------------------------------------------------------- 1 | @inject IJSRuntime JSRuntime 2 | @inject NavigationManager NavigationManager 3 | 9 | 10 | @code { 11 | bool isDesktop = true, isToggled = true, isInitialized; 12 | 13 | [Parameter] public string StateCssClass { get; set; } 14 | [Parameter] public EventCallback StateCssClassChanged { get; set; } 15 | 16 | protected override void OnInitialized() 17 | { 18 | NavigationManager.LocationChanged += OnLocationChanged; 19 | } 20 | protected override async Task OnAfterRenderAsync(bool firstRender) 21 | { 22 | if (firstRender) 23 | await JSRuntime.InvokeVoidAsync("windowMinWidthMatchesQuery", DotNetObjectReference.Create(this)); 24 | isInitialized = true; 25 | await base.OnAfterRenderAsync(firstRender); 26 | } 27 | 28 | [JSInvokable] 29 | public async Task OnWindowMinWidthQueryChanged(bool matchesDesktop) 30 | { 31 | 32 | if (!isInitialized || isDesktop != matchesDesktop) 33 | { 34 | isDesktop = matchesDesktop; 35 | if (isInitialized || !isDesktop) 36 | await ToggleNavMenu(matchesDesktop); 37 | } 38 | } 39 | async Task OnToggleClick() => await ToggleNavMenu(); 40 | 41 | async void OnLocationChanged(object sender, LocationChangedEventArgs args) 42 | { 43 | if (!isDesktop) 44 | await ToggleNavMenu(false); 45 | } 46 | 47 | async Task ToggleNavMenu(bool? value = null) 48 | { 49 | var newValue = value ?? !isToggled; 50 | isToggled = value ?? !isToggled; 51 | string stateCssClass = isToggled ? "expand" : "collapse"; 52 | if (StateCssClass != stateCssClass) 53 | { 54 | StateCssClass = stateCssClass; 55 | await StateCssClassChanged.InvokeAsync(StateCssClass); 56 | } 57 | } 58 | public void Dispose() 59 | { 60 | NavigationManager.LocationChanged -= OnLocationChanged; 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /SPA/wwwroot/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | SPA 8 | 9 | 10 | 11 | 12 | 13 | 14 | 46 | 47 | 48 | 49 | 50 |
51 |
52 |
SPA
53 |
Loading...
54 |
55 |
56 | 57 |
58 | An unhandled error has occurred. 59 | Reload 60 | 🗙 61 |
62 | 63 | 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /SPA/Portal/Theme/ThemeSwitcher.razor: -------------------------------------------------------------------------------- 1 | @if (!string.IsNullOrWhiteSpace(CurrentTheme)) 2 | { 3 | 4 | } 5 | 6 |
7 | 25 |
26 | 27 | @code { [Parameter] public bool Shown { get; set; } 28 | [Parameter] public Action ShownChanged { get; set; } 29 | 30 | string CurrentTheme = "byDefault"; 31 | 32 | public class ThemeSetModel 33 | { 34 | public string Title { get; } 35 | public string[] Themes { get; } 36 | public ThemeSetModel(string title, params string[] themes) 37 | { 38 | Title = title; 39 | Themes = themes; 40 | } 41 | } 42 | 43 | List themeData = new List() { 44 | new ThemeSetModel("Color Themes", "default"), 45 | new ThemeSetModel("DevExpress Themes", "blazing berry", "purple", "office white"), 46 | new ThemeSetModel("Bootswatch Themes", "cerulean", "cosmo", "cyborg", "darkly", "flatly", "journal", "litera", 47 | "lumen", "lux", "materia", "minty", "pulse", "sandstone", "simplex", "sketchy", "slate", 48 | "solar", "spacelab", "superhero", "united", "yeti") 49 | }; 50 | 51 | 52 | void OnItemClick(string theme) 53 | { 54 | CurrentTheme = theme; 55 | Shown = !Shown; 56 | ShownChanged?.Invoke(Shown); 57 | } } 58 | -------------------------------------------------------------------------------- /saloon_mobile/android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 13 | 17 | 21 | 26 | 30 | 31 | 32 | 33 | 34 | 35 | 37 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /saloon_mobile/ios/Runner/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 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /SPA/wwwroot/css/switcher-resources/themes.css: -------------------------------------------------------------------------------- 1 | #settingsbar #themesMenu li > a > .image.default { 2 | background: #007bff; 3 | } 4 | 5 | #settingsbar #themesMenu li > a > .image.blazing-berry { 6 | background: #5c2d91; 7 | } 8 | 9 | #settingsbar #themesMenu li > a > .image.cerulean { 10 | background: #2fa4e7; 11 | } 12 | 13 | #settingsbar #themesMenu li > a > .image.cosmo { 14 | background: #2780e3; 15 | } 16 | 17 | #settingsbar #themesMenu li > a > .image.cyborg { 18 | background: #060606; 19 | } 20 | 21 | #settingsbar #themesMenu li > a > .image.darkly { 22 | background: #00bc8c; 23 | } 24 | 25 | #settingsbar #themesMenu li > a > .image.flatly { 26 | background: #dce4ec; 27 | } 28 | 29 | #settingsbar #themesMenu li > a > .image.journal { 30 | background: #eb6864; 31 | } 32 | 33 | #settingsbar #themesMenu li > a > .image.litera { 34 | background: #4582ec; 35 | } 36 | 37 | #settingsbar #themesMenu li > a > .image.lumen { 38 | background: #158cba; 39 | } 40 | 41 | #settingsbar #themesMenu li > a > .image.lux { 42 | background: #1a1a1a; 43 | } 44 | 45 | #settingsbar #themesMenu li > a > .image.materia { 46 | background: #2196f3; 47 | } 48 | 49 | #settingsbar #themesMenu li > a > .image.minty { 50 | background: #78c2ad; 51 | } 52 | 53 | #settingsbar #themesMenu li > a > .image.pulse { 54 | background: #593196; 55 | } 56 | 57 | #settingsbar #themesMenu li > a > .image.sandstone { 58 | background: #93c54b; 59 | } 60 | 61 | #settingsbar #themesMenu li > a > .image.simplex { 62 | background: #d9230f; 63 | } 64 | 65 | #settingsbar #themesMenu li > a > .image.sketchy { 66 | background-color: transparent; 67 | border: 2px solid #333; 68 | border-radius: 2px 8px 2px 4px/5px 3px 5px 3px; 69 | } 70 | 71 | #settingsbar #themesMenu li > a.active .image.sketchy { 72 | border-color: #fff; 73 | } 74 | 75 | #settingsbar #themesMenu li > a > .image.slate { 76 | background: #484e55; 77 | } 78 | 79 | #settingsbar #themesMenu li > a > .image.solar { 80 | background: #b58900; 81 | } 82 | 83 | #settingsbar #themesMenu li > a > .image.spacelab { 84 | background: #446e9b; 85 | } 86 | 87 | #settingsbar #themesMenu li > a > .image.superhero { 88 | background: #df691a; 89 | } 90 | 91 | #settingsbar #themesMenu li > a > .image.united { 92 | background: #e95420; 93 | } 94 | 95 | #settingsbar #themesMenu li > a > .image.yeti { 96 | background: #008cba; 97 | } 98 | 99 | #settingsbar #themesMenu li > a > .image.purple { 100 | background: #7989ff; 101 | } 102 | 103 | #settingsbar #themesMenu li > a > .image.office-white { 104 | background: #fe7109; 105 | } 106 | -------------------------------------------------------------------------------- /saloon_mobile/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: saloon_mobile 2 | description: A new Flutter project. 3 | 4 | # The following line prevents the package from being accidentally published to 5 | # pub.dev using `pub publish`. This is preferred for private packages. 6 | publish_to: 'none' # Remove this line if you wish to publish to pub.dev 7 | 8 | # The following defines the version and build number for your application. 9 | # A version number is three numbers separated by dots, like 1.2.43 10 | # followed by an optional build number separated by a +. 11 | # Both the version and the builder number may be overridden in flutter 12 | # build by specifying --build-name and --build-number, respectively. 13 | # In Android, build-name is used as versionName while build-number used as versionCode. 14 | # Read more about Android versioning at https://developer.android.com/studio/publish/versioning 15 | # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. 16 | # Read more about iOS versioning at 17 | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html 18 | version: 1.0.0+1 19 | 20 | environment: 21 | sdk: ">=2.7.0 <3.0.0" 22 | 23 | dependencies: 24 | flutter: 25 | sdk: flutter 26 | 27 | 28 | # The following adds the Cupertino Icons font to your application. 29 | # Use with the CupertinoIcons class for iOS style icons. 30 | cupertino_icons: ^1.0.2 31 | 32 | dev_dependencies: 33 | flutter_test: 34 | sdk: flutter 35 | 36 | # For information on the generic Dart part of this file, see the 37 | # following page: https://dart.dev/tools/pub/pubspec 38 | 39 | # The following section is specific to Flutter. 40 | flutter: 41 | 42 | # The following line ensures that the Material Icons font is 43 | # included with your application, so that you can use the icons in 44 | # the material Icons class. 45 | uses-material-design: true 46 | 47 | # To add assets to your application, add an assets section, like this: 48 | # assets: 49 | # - images/a_dot_burr.jpeg 50 | # - images/a_dot_ham.jpeg 51 | 52 | # An image asset can refer to one or more resolution-specific "variants", see 53 | # https://flutter.dev/assets-and-images/#resolution-aware. 54 | 55 | # For details regarding adding assets from package dependencies, see 56 | # https://flutter.dev/assets-and-images/#from-packages 57 | 58 | # To add custom fonts to your application, add a fonts section here, 59 | # in this "flutter" section. Each entry in this list should have a 60 | # "family" key with the font family name, and a "fonts" key with a 61 | # list giving the asset and other descriptors for the font. For 62 | # example: 63 | # fonts: 64 | # - family: Schyler 65 | # fonts: 66 | # - asset: fonts/Schyler-Regular.ttf 67 | # - asset: fonts/Schyler-Italic.ttf 68 | # style: italic 69 | # - family: Trajan Pro 70 | # fonts: 71 | # - asset: fonts/TrajanPro.ttf 72 | # - asset: fonts/TrajanPro_Bold.ttf 73 | # weight: 700 74 | # 75 | # For details regarding fonts from package dependencies, 76 | # see https://flutter.dev/custom-fonts/#from-packages 77 | -------------------------------------------------------------------------------- /saloon_mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon-App-20x20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon-App-20x20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-App-29x29@1x.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-App-29x29@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "29x29", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-App-29x29@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-App-40x40@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "40x40", 41 | "idiom" : "iphone", 42 | "filename" : "Icon-App-40x40@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "Icon-App-60x60@2x.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "60x60", 53 | "idiom" : "iphone", 54 | "filename" : "Icon-App-60x60@3x.png", 55 | "scale" : "3x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "Icon-App-20x20@1x.png", 61 | "scale" : "1x" 62 | }, 63 | { 64 | "size" : "20x20", 65 | "idiom" : "ipad", 66 | "filename" : "Icon-App-20x20@2x.png", 67 | "scale" : "2x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "Icon-App-29x29@1x.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "29x29", 77 | "idiom" : "ipad", 78 | "filename" : "Icon-App-29x29@2x.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "Icon-App-40x40@1x.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "40x40", 89 | "idiom" : "ipad", 90 | "filename" : "Icon-App-40x40@2x.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "Icon-App-76x76@1x.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "76x76", 101 | "idiom" : "ipad", 102 | "filename" : "Icon-App-76x76@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "83.5x83.5", 107 | "idiom" : "ipad", 108 | "filename" : "Icon-App-83.5x83.5@2x.png", 109 | "scale" : "2x" 110 | }, 111 | { 112 | "size" : "1024x1024", 113 | "idiom" : "ios-marketing", 114 | "filename" : "Icon-App-1024x1024@1x.png", 115 | "scale" : "1x" 116 | } 117 | ], 118 | "info" : { 119 | "version" : 1, 120 | "author" : "xcode" 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /saloon_mobile/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /SPA/wwwroot/css/open-iconic/README.md: -------------------------------------------------------------------------------- 1 | [Open Iconic v1.1.1](http://useiconic.com/open) 2 | =========== 3 | 4 | ### Open Iconic is the open source sibling of [Iconic](http://useiconic.com). It is a hyper-legible collection of 223 icons with a tiny footprint—ready to use with Bootstrap and Foundation. [View the collection](http://useiconic.com/open#icons) 5 | 6 | 7 | 8 | ## What's in Open Iconic? 9 | 10 | * 223 icons designed to be legible down to 8 pixels 11 | * Super-light SVG files - 61.8 for the entire set 12 | * SVG sprite—the modern replacement for icon fonts 13 | * Webfont (EOT, OTF, SVG, TTF, WOFF), PNG and WebP formats 14 | * Webfont stylesheets (including versions for Bootstrap and Foundation) in CSS, LESS, SCSS and Stylus formats 15 | * PNG and WebP raster images in 8px, 16px, 24px, 32px, 48px and 64px. 16 | 17 | 18 | ## Getting Started 19 | 20 | #### For code samples and everything else you need to get started with Open Iconic, check out our [Icons](http://useiconic.com/open#icons) and [Reference](http://useiconic.com/open#reference) sections. 21 | 22 | ### General Usage 23 | 24 | #### Using Open Iconic's SVGs 25 | 26 | We like SVGs and we think they're the way to display icons on the web. Since Open Iconic are just basic SVGs, we suggest you display them like you would any other image (don't forget the `alt` attribute). 27 | 28 | ``` 29 | icon name 30 | ``` 31 | 32 | #### Using Open Iconic's SVG Sprite 33 | 34 | Open Iconic also comes in a SVG sprite which allows you to display all the icons in the set with a single request. It's like an icon font, without being a hack. 35 | 36 | Adding an icon from an SVG sprite is a little different than what you're used to, but it's still a piece of cake. *Tip: To make your icons easily style able, we suggest adding a general class to the* `` *tag and a unique class name for each different icon in the* `` *tag.* 37 | 38 | ``` 39 | 40 | 41 | 42 | ``` 43 | 44 | Sizing icons only needs basic CSS. All the icons are in a square format, so just set the `` tag with equal width and height dimensions. 45 | 46 | ``` 47 | .icon { 48 | width: 16px; 49 | height: 16px; 50 | } 51 | ``` 52 | 53 | Coloring icons is even easier. All you need to do is set the `fill` rule on the `` tag. 54 | 55 | ``` 56 | .icon-account-login { 57 | fill: #f00; 58 | } 59 | ``` 60 | 61 | To learn more about SVG Sprites, read [Chris Coyier's guide](http://css-tricks.com/svg-sprites-use-better-icon-fonts/). 62 | 63 | #### Using Open Iconic's Icon Font... 64 | 65 | 66 | ##### …with Bootstrap 67 | 68 | You can find our Bootstrap stylesheets in `font/css/open-iconic-bootstrap.{css, less, scss, styl}` 69 | 70 | 71 | ``` 72 | 73 | ``` 74 | 75 | 76 | ``` 77 | 78 | ``` 79 | 80 | ##### …with Foundation 81 | 82 | You can find our Foundation stylesheets in `font/css/open-iconic-foundation.{css, less, scss, styl}` 83 | 84 | ``` 85 | 86 | ``` 87 | 88 | 89 | ``` 90 | 91 | ``` 92 | 93 | ##### …on its own 94 | 95 | You can find our default stylesheets in `font/css/open-iconic.{css, less, scss, styl}` 96 | 97 | ``` 98 | 99 | ``` 100 | 101 | ``` 102 | 103 | ``` 104 | 105 | 106 | ## License 107 | 108 | ### Icons 109 | 110 | All code (including SVG markup) is under the [MIT License](http://opensource.org/licenses/MIT). 111 | 112 | ### Fonts 113 | 114 | All fonts are under the [SIL Licensed](http://scripts.sil.org/cms/scripts/page.php?item_id=OFL_web). 115 | -------------------------------------------------------------------------------- /saloon_mobile/pubspec.lock: -------------------------------------------------------------------------------- 1 | # Generated by pub 2 | # See https://dart.dev/tools/pub/glossary#lockfile 3 | packages: 4 | async: 5 | dependency: transitive 6 | description: 7 | name: async 8 | url: "https://pub.dartlang.org" 9 | source: hosted 10 | version: "2.5.0" 11 | boolean_selector: 12 | dependency: transitive 13 | description: 14 | name: boolean_selector 15 | url: "https://pub.dartlang.org" 16 | source: hosted 17 | version: "2.1.0" 18 | characters: 19 | dependency: transitive 20 | description: 21 | name: characters 22 | url: "https://pub.dartlang.org" 23 | source: hosted 24 | version: "1.1.0" 25 | charcode: 26 | dependency: transitive 27 | description: 28 | name: charcode 29 | url: "https://pub.dartlang.org" 30 | source: hosted 31 | version: "1.2.0" 32 | clock: 33 | dependency: transitive 34 | description: 35 | name: clock 36 | url: "https://pub.dartlang.org" 37 | source: hosted 38 | version: "1.1.0" 39 | collection: 40 | dependency: transitive 41 | description: 42 | name: collection 43 | url: "https://pub.dartlang.org" 44 | source: hosted 45 | version: "1.15.0" 46 | cupertino_icons: 47 | dependency: "direct main" 48 | description: 49 | name: cupertino_icons 50 | url: "https://pub.dartlang.org" 51 | source: hosted 52 | version: "1.0.2" 53 | fake_async: 54 | dependency: transitive 55 | description: 56 | name: fake_async 57 | url: "https://pub.dartlang.org" 58 | source: hosted 59 | version: "1.2.0" 60 | flutter: 61 | dependency: "direct main" 62 | description: flutter 63 | source: sdk 64 | version: "0.0.0" 65 | flutter_test: 66 | dependency: "direct dev" 67 | description: flutter 68 | source: sdk 69 | version: "0.0.0" 70 | matcher: 71 | dependency: transitive 72 | description: 73 | name: matcher 74 | url: "https://pub.dartlang.org" 75 | source: hosted 76 | version: "0.12.10" 77 | meta: 78 | dependency: transitive 79 | description: 80 | name: meta 81 | url: "https://pub.dartlang.org" 82 | source: hosted 83 | version: "1.3.0" 84 | path: 85 | dependency: transitive 86 | description: 87 | name: path 88 | url: "https://pub.dartlang.org" 89 | source: hosted 90 | version: "1.8.0" 91 | sky_engine: 92 | dependency: transitive 93 | description: flutter 94 | source: sdk 95 | version: "0.0.99" 96 | source_span: 97 | dependency: transitive 98 | description: 99 | name: source_span 100 | url: "https://pub.dartlang.org" 101 | source: hosted 102 | version: "1.8.0" 103 | stack_trace: 104 | dependency: transitive 105 | description: 106 | name: stack_trace 107 | url: "https://pub.dartlang.org" 108 | source: hosted 109 | version: "1.10.0" 110 | stream_channel: 111 | dependency: transitive 112 | description: 113 | name: stream_channel 114 | url: "https://pub.dartlang.org" 115 | source: hosted 116 | version: "2.1.0" 117 | string_scanner: 118 | dependency: transitive 119 | description: 120 | name: string_scanner 121 | url: "https://pub.dartlang.org" 122 | source: hosted 123 | version: "1.1.0" 124 | term_glyph: 125 | dependency: transitive 126 | description: 127 | name: term_glyph 128 | url: "https://pub.dartlang.org" 129 | source: hosted 130 | version: "1.2.0" 131 | test_api: 132 | dependency: transitive 133 | description: 134 | name: test_api 135 | url: "https://pub.dartlang.org" 136 | source: hosted 137 | version: "0.2.19" 138 | typed_data: 139 | dependency: transitive 140 | description: 141 | name: typed_data 142 | url: "https://pub.dartlang.org" 143 | source: hosted 144 | version: "1.3.0" 145 | vector_math: 146 | dependency: transitive 147 | description: 148 | name: vector_math 149 | url: "https://pub.dartlang.org" 150 | source: hosted 151 | version: "2.1.0" 152 | sdks: 153 | dart: ">=2.12.0-0.0 <3.0.0" 154 | -------------------------------------------------------------------------------- /SPA/wwwroot/css/open-iconic/FONT-LICENSE.txt: -------------------------------------------------------------------------------- 1 | SIL OPEN FONT LICENSE Version 1.1 2 | 3 | Copyright (c) 2014 Waybury 4 | 5 | PREAMBLE 6 | The goals of the Open Font License (OFL) are to stimulate worldwide 7 | development of collaborative font projects, to support the font creation 8 | efforts of academic and linguistic communities, and to provide a free and 9 | open framework in which fonts may be shared and improved in partnership 10 | with others. 11 | 12 | The OFL allows the licensed fonts to be used, studied, modified and 13 | redistributed freely as long as they are not sold by themselves. The 14 | fonts, including any derivative works, can be bundled, embedded, 15 | redistributed and/or sold with any software provided that any reserved 16 | names are not used by derivative works. The fonts and derivatives, 17 | however, cannot be released under any other type of license. The 18 | requirement for fonts to remain under this license does not apply 19 | to any document created using the fonts or their derivatives. 20 | 21 | DEFINITIONS 22 | "Font Software" refers to the set of files released by the Copyright 23 | Holder(s) under this license and clearly marked as such. This may 24 | include source files, build scripts and documentation. 25 | 26 | "Reserved Font Name" refers to any names specified as such after the 27 | copyright statement(s). 28 | 29 | "Original Version" refers to the collection of Font Software components as 30 | distributed by the Copyright Holder(s). 31 | 32 | "Modified Version" refers to any derivative made by adding to, deleting, 33 | or substituting -- in part or in whole -- any of the components of the 34 | Original Version, by changing formats or by porting the Font Software to a 35 | new environment. 36 | 37 | "Author" refers to any designer, engineer, programmer, technical 38 | writer or other person who contributed to the Font Software. 39 | 40 | PERMISSION & CONDITIONS 41 | Permission is hereby granted, free of charge, to any person obtaining 42 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 43 | redistribute, and sell modified and unmodified copies of the Font 44 | Software, subject to the following conditions: 45 | 46 | 1) Neither the Font Software nor any of its individual components, 47 | in Original or Modified Versions, may be sold by itself. 48 | 49 | 2) Original or Modified Versions of the Font Software may be bundled, 50 | redistributed and/or sold with any software, provided that each copy 51 | contains the above copyright notice and this license. These can be 52 | included either as stand-alone text files, human-readable headers or 53 | in the appropriate machine-readable metadata fields within text or 54 | binary files as long as those fields can be easily viewed by the user. 55 | 56 | 3) No Modified Version of the Font Software may use the Reserved Font 57 | Name(s) unless explicit written permission is granted by the corresponding 58 | Copyright Holder. This restriction only applies to the primary font name as 59 | presented to the users. 60 | 61 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font 62 | Software shall not be used to promote, endorse or advertise any 63 | Modified Version, except to acknowledge the contribution(s) of the 64 | Copyright Holder(s) and the Author(s) or with their explicit written 65 | permission. 66 | 67 | 5) The Font Software, modified or unmodified, in part or in whole, 68 | must be distributed entirely under this license, and must not be 69 | distributed under any other license. The requirement for fonts to 70 | remain under this license does not apply to any document created 71 | using the Font Software. 72 | 73 | TERMINATION 74 | This license becomes null and void if any of the above conditions are 75 | not met. 76 | 77 | DISCLAIMER 78 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 79 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 80 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 81 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 82 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 83 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 84 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 85 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 86 | OTHER DEALINGS IN THE FONT SOFTWARE. 87 | -------------------------------------------------------------------------------- /SPA/wwwroot/css/app.css: -------------------------------------------------------------------------------- 1 | @import url('open-iconic/font/css/open-iconic-bootstrap.min.css'); 2 | @import url('purple/bootstrap.min.css'); 3 | 4 | html, body { 5 | font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; 6 | } 7 | 8 | app { 9 | display: flex; 10 | flex-flow: column nowrap; 11 | height: 100vh; 12 | } 13 | 14 | .navbar.header-navbar { 15 | flex-grow: 0; 16 | flex-wrap: nowrap; 17 | border: none; 18 | background-color: inherit; 19 | border-radius: 0; 20 | height: 3.5rem; 21 | min-height: 3.5rem; 22 | box-shadow: 0px 2px 6px 0px rgba(0, 0, 0, 0.12); 23 | justify-content: flex-start; 24 | } 25 | 26 | .header-navbar .navbar-toggler { 27 | outline: none; 28 | border-radius: 0; 29 | padding-left: .75rem; 30 | padding-right: .75rem; 31 | align-self: stretch; 32 | } 33 | 34 | .header-navbar .navbar-toggler .navbar-toggler-icon { 35 | background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255,255,255, 1)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E"); 36 | background-color: transparent !important; 37 | height: 2rem; 38 | width: 2rem; 39 | } 40 | 41 | .main { 42 | display: flex; 43 | flex-flow: row nowrap; 44 | flex-grow: 1; 45 | overflow: auto; 46 | } 47 | 48 | .sidebar { 49 | min-width: 300px; 50 | max-width: 300px; 51 | box-shadow: 0px 2px 8px 0px rgba(0, 0, 0, 0.16); 52 | transition: transform 0.1s ease-out; 53 | max-height: calc(100vh - 3.5rem); 54 | overflow: auto; 55 | } 56 | 57 | .content { 58 | max-width: 1100px; 59 | padding: 1.1rem 2rem 0 2rem; 60 | flex: 1 1 auto; 61 | } 62 | 63 | .sidebar.collapse { 64 | display: none; 65 | } 66 | 67 | .sidebar.expand { 68 | display: block; 69 | } 70 | 71 | .valid.modified:not([type=checkbox]) { 72 | outline: 1px solid #26b050; 73 | } 74 | 75 | .invalid { 76 | outline: 1px solid red; 77 | } 78 | 79 | .validation-message { 80 | color: red; 81 | } 82 | 83 | .title { 84 | font-size: 1.1rem; 85 | text-overflow: ellipsis; 86 | overflow: hidden; 87 | } 88 | 89 | #blazor-error-ui { 90 | background: lightyellow; 91 | bottom: 0; 92 | box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); 93 | display: none; 94 | left: 0; 95 | padding: 0.6rem 1.25rem 0.7rem 1.25rem; 96 | position: fixed; 97 | width: 100%; 98 | z-index: 1000; 99 | } 100 | 101 | #blazor-error-ui .dismiss { 102 | cursor: pointer; 103 | position: absolute; 104 | right: 0.75rem; 105 | top: 0.5rem; 106 | } 107 | 108 | .app-sidebar > .nav-pills > .nav-item:first-of-type { 109 | padding-top: 1rem; 110 | } 111 | 112 | .app-sidebar > .nav-pills > .nav-item:last-of-type { 113 | padding-bottom: 1rem; 114 | } 115 | 116 | .app-sidebar .nav-pills > .nav-item a { 117 | border-radius: 0px; 118 | display: flex; 119 | align-items: center; 120 | } 121 | 122 | .app-sidebar > .nav-pills > .nav-item > a { 123 | font-size: 1rem !important; 124 | font-weight: 600 !important; 125 | padding: .25rem 1rem .25rem .125rem; 126 | } 127 | 128 | .fit-width { 129 | max-width: 100%; 130 | } 131 | .icon { 132 | background-size: contain; 133 | mask-repeat: no-repeat; 134 | -webkit-mask-repeat: no-repeat; 135 | background-position: center center; 136 | background-color: currentColor; 137 | height: 16px; 138 | width: 16px; 139 | } 140 | 141 | .icon-home { 142 | -webkit-mask-image: url("../images/Home.svg"); 143 | mask-image: url("../images/Home.svg"); 144 | } 145 | 146 | .icon-phone { 147 | -webkit-mask-image: url("../images/Phone.svg"); 148 | mask-image: url("../images/Phone.svg"); 149 | } 150 | 151 | .icon-calendar { 152 | -webkit-mask-image: url("../images/Calendar.svg"); 153 | mask-image: url("../images/Calendar.svg"); 154 | } 155 | 156 | @media (max-width: 1199.98px) { 157 | .main { 158 | min-width: 100vw; 159 | display: flex; 160 | flex-flow: column nowrap; 161 | } 162 | 163 | .sidebar { 164 | display: none; 165 | } 166 | 167 | .sidebar.expand { 168 | position: fixed; 169 | top: 3.5rem; 170 | left: 0; 171 | min-width: 100vw; 172 | background-color: #fff; 173 | z-index: 1050; 174 | } 175 | 176 | .app-sidebar > .nav-pills > .nav-item:last-of-type { 177 | padding-bottom: 0; 178 | } 179 | } 180 | 181 | @media (max-width: 350px) { 182 | .title { 183 | font-size: inherit; 184 | } 185 | } 186 | -------------------------------------------------------------------------------- /saloon_mobile/lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | void main() { 4 | runApp(MyApp()); 5 | } 6 | 7 | class MyApp extends StatelessWidget { 8 | // This widget is the root of your application. 9 | @override 10 | Widget build(BuildContext context) { 11 | return MaterialApp( 12 | title: 'Flutter Demo', 13 | theme: ThemeData( 14 | // This is the theme of your application. 15 | // 16 | // Try running your application with "flutter run". You'll see the 17 | // application has a blue toolbar. Then, without quitting the app, try 18 | // changing the primarySwatch below to Colors.green and then invoke 19 | // "hot reload" (press "r" in the console where you ran "flutter run", 20 | // or simply save your changes to "hot reload" in a Flutter IDE). 21 | // Notice that the counter didn't reset back to zero; the application 22 | // is not restarted. 23 | primarySwatch: Colors.blue, 24 | ), 25 | home: MyHomePage(title: 'Flutter Demo Home Page'), 26 | ); 27 | } 28 | } 29 | 30 | class MyHomePage extends StatefulWidget { 31 | MyHomePage({Key key, this.title}) : super(key: key); 32 | 33 | // This widget is the home page of your application. It is stateful, meaning 34 | // that it has a State object (defined below) that contains fields that affect 35 | // how it looks. 36 | 37 | // This class is the configuration for the state. It holds the values (in this 38 | // case the title) provided by the parent (in this case the App widget) and 39 | // used by the build method of the State. Fields in a Widget subclass are 40 | // always marked "final". 41 | 42 | final String title; 43 | 44 | @override 45 | _MyHomePageState createState() => _MyHomePageState(); 46 | } 47 | 48 | class _MyHomePageState extends State { 49 | int _counter = 0; 50 | 51 | void _incrementCounter() { 52 | setState(() { 53 | // This call to setState tells the Flutter framework that something has 54 | // changed in this State, which causes it to rerun the build method below 55 | // so that the display can reflect the updated values. If we changed 56 | // _counter without calling setState(), then the build method would not be 57 | // called again, and so nothing would appear to happen. 58 | _counter++; 59 | }); 60 | } 61 | 62 | @override 63 | Widget build(BuildContext context) { 64 | // This method is rerun every time setState is called, for instance as done 65 | // by the _incrementCounter method above. 66 | // 67 | // The Flutter framework has been optimized to make rerunning build methods 68 | // fast, so that you can just rebuild anything that needs updating rather 69 | // than having to individually change instances of widgets. 70 | return Scaffold( 71 | appBar: AppBar( 72 | // Here we take the value from the MyHomePage object that was created by 73 | // the App.build method, and use it to set our appbar title. 74 | title: Text(widget.title), 75 | ), 76 | body: Center( 77 | // Center is a layout widget. It takes a single child and positions it 78 | // in the middle of the parent. 79 | child: Column( 80 | // Column is also a layout widget. It takes a list of children and 81 | // arranges them vertically. By default, it sizes itself to fit its 82 | // children horizontally, and tries to be as tall as its parent. 83 | // 84 | // Invoke "debug painting" (press "p" in the console, choose the 85 | // "Toggle Debug Paint" action from the Flutter Inspector in Android 86 | // Studio, or the "Toggle Debug Paint" command in Visual Studio Code) 87 | // to see the wireframe for each widget. 88 | // 89 | // Column has various properties to control how it sizes itself and 90 | // how it positions its children. Here we use mainAxisAlignment to 91 | // center the children vertically; the main axis here is the vertical 92 | // axis because Columns are vertical (the cross axis would be 93 | // horizontal). 94 | mainAxisAlignment: MainAxisAlignment.center, 95 | children: [ 96 | Text( 97 | 'You have pushed the button this many times:', 98 | ), 99 | Text( 100 | '$_counter', 101 | style: Theme.of(context).textTheme.headline4, 102 | ), 103 | ], 104 | ), 105 | ), 106 | floatingActionButton: FloatingActionButton( 107 | onPressed: _incrementCounter, 108 | tooltip: 'Increment', 109 | child: Icon(Icons.add), 110 | ), // This trailing comma makes auto-formatting nicer for build methods. 111 | ); 112 | } 113 | } 114 | -------------------------------------------------------------------------------- /SPA/wwwroot/css/site.css: -------------------------------------------------------------------------------- 1 | @import url('open-iconic/font/css/open-iconic-bootstrap.min.css'); 2 | @import url('switcher-resources/themes.css'); 3 | @import url('switcher-resources/theme-switcher.css'); 4 | 5 | html, body { 6 | font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; 7 | } 8 | 9 | a, .btn-link { 10 | color: #0366d6; 11 | } 12 | 13 | .btn-primary { 14 | color: #fff; 15 | background-color: #1b6ec2; 16 | border-color: #1861ac; 17 | } 18 | .dxbs-tree ul.nav > li > a > span.image:not(:last-child), .dxbs-tree ul.nav > li > a > .badge > span.image:not(:last-child), .dxbs-tree ul.nav > li > a > span.node-lp:not(:last-child) { 19 | padding: 0.7em; 20 | margin: -2px 4px 0px 0px !important; 21 | } 22 | .infobox { 23 | display: flex; 24 | flex-direction: column; 25 | align-items: center; 26 | background-color: grey; 27 | border-radius: 20px; 28 | width: 200px; 29 | height: 100%; 30 | } 31 | 32 | .image img { 33 | width: 200px; 34 | border-top-left-radius: 20px; 35 | border-top-right-radius: 20px; 36 | } 37 | 38 | .cardtitle { 39 | text-align: center; 40 | } 41 | 42 | .btn { 43 | display: flex; 44 | margin-left: auto; 45 | margin-right: auto; 46 | } 47 | /*app { 48 | position: relative; 49 | display: flex; 50 | flex-direction: column; 51 | } 52 | 53 | .top-row { 54 | height: 3.5rem; 55 | display: flex; 56 | align-items: center; 57 | }*/ 58 | 59 | /*.main { 60 | flex: 1; 61 | } 62 | 63 | .main .top-row { 64 | background-color: #f7f7f7; 65 | border-bottom: 1px solid #d6d5d5; 66 | justify-content: flex-end; 67 | } 68 | 69 | .main .top-row > a, .main .top-row .btn-link { 70 | white-space: nowrap; 71 | margin-left: 1.5rem; 72 | } 73 | 74 | .main .top-row a:first-child { 75 | overflow: hidden; 76 | text-overflow: ellipsis; 77 | }*/ 78 | 79 | ./*sidebar { 80 | background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%); 81 | } 82 | 83 | .sidebar .top-row { 84 | background-color: rgba(0,0,0,0.4); 85 | } 86 | 87 | .sidebar .navbar-brand { 88 | font-size: 1.1rem; 89 | } 90 | 91 | .sidebar .oi { 92 | width: 2rem; 93 | font-size: 1.1rem; 94 | vertical-align: text-top; 95 | top: -2px; 96 | } 97 | 98 | .sidebar .nav-item { 99 | font-size: 0.9rem; 100 | padding-bottom: 0.5rem; 101 | } 102 | 103 | .sidebar .nav-item:first-of-type { 104 | padding-top: 1rem; 105 | } 106 | 107 | .sidebar .nav-item:last-of-type { 108 | padding-bottom: 1rem; 109 | } 110 | 111 | .sidebar .nav-item a { 112 | color: #d7d7d7; 113 | border-radius: 4px; 114 | height: 3rem; 115 | display: flex; 116 | align-items: center; 117 | line-height: 3rem; 118 | } 119 | 120 | .sidebar .nav-item a.active { 121 | background-color: rgba(255,255,255,0.25); 122 | color: white; 123 | } 124 | 125 | .sidebar .nav-item a:hover { 126 | background-color: rgba(255,255,255,0.1); 127 | color: white; 128 | }*/ 129 | 130 | /*.content { 131 | padding-top: 1.1rem; 132 | } 133 | 134 | .navbar-toggler { 135 | background-color: rgba(255, 255, 255, 0.1); 136 | } 137 | 138 | .valid.modified:not([type=checkbox]) { 139 | outline: 1px solid #26b050; 140 | } 141 | 142 | .invalid { 143 | outline: 1px solid red; 144 | } 145 | 146 | .validation-message { 147 | color: red; 148 | } 149 | 150 | #blazor-error-ui { 151 | background: lightyellow; 152 | bottom: 0; 153 | box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); 154 | display: none; 155 | left: 0; 156 | padding: 0.6rem 1.25rem 0.7rem 1.25rem; 157 | position: fixed; 158 | width: 100%; 159 | z-index: 1000; 160 | } 161 | 162 | #blazor-error-ui .dismiss { 163 | cursor: pointer; 164 | position: absolute; 165 | right: 0.75rem; 166 | top: 0.5rem; 167 | } 168 | */ 169 | /*@media (max-width: 767.98px) { 170 | .main .top-row:not(.auth) { 171 | display: none; 172 | } 173 | 174 | .main .top-row.auth { 175 | justify-content: space-between; 176 | } 177 | 178 | .main .top-row a, .main .top-row .btn-link { 179 | margin-left: 0; 180 | } 181 | } 182 | 183 | @media (min-width: 768px) { 184 | app { 185 | flex-direction: row; 186 | } 187 | 188 | .sidebar { 189 | width: 250px; 190 | height: 100vh; 191 | position: sticky; 192 | top: 0; 193 | } 194 | 195 | .main .top-row { 196 | position: sticky; 197 | top: 0; 198 | } 199 | 200 | .main > div { 201 | padding-left: 2rem !important; 202 | padding-right: 1.5rem !important; 203 | } 204 | 205 | .navbar-toggler { 206 | display: none; 207 | } 208 | 209 | .sidebar .collapse {*/ 210 | /* Never collapse the sidebar for wide screens */ 211 | /*display: block; 212 | } 213 | }*/ 214 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | 4 | # User-specific files 5 | *.suo 6 | *.user 7 | *.userosscache 8 | *.sln.docstates 9 | 10 | # File generated by NuGet package AspNetCore.HealthChecks.UI 11 | healthchecksdb 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | 16 | # Build results 17 | [Dd]ebug/ 18 | [Dd]ebugPublic/ 19 | [Rr]elease/ 20 | [Rr]eleases/ 21 | x64/ 22 | x86/ 23 | bld/ 24 | [Bb]in/ 25 | [Oo]bj/ 26 | [Ll]og/ 27 | 28 | # Visual Studio 2015 cache/options directory 29 | .vs/ 30 | /wwwroot/dist/ 31 | /ClientApp/dist/ 32 | /ClientApp/build/ 33 | /GhostUI/wwwroot/dist 34 | /GhostUI/ClientApp/dist 35 | 36 | # MSTest test Results 37 | [Tt]est[Rr]esult*/ 38 | [Bb]uild[Ll]og.* 39 | 40 | # NUNIT 41 | *.VisualState.xml 42 | TestResult.xml 43 | 44 | # Build Results of an ATL Project 45 | [Dd]ebugPS/ 46 | [Rr]eleasePS/ 47 | dlldata.c 48 | 49 | # DNX 50 | project.lock.json 51 | project.fragment.lock.json 52 | artifacts/ 53 | 54 | *_i.c 55 | *_p.c 56 | *_i.h 57 | *.ilk 58 | *.meta 59 | *.obj 60 | *.pch 61 | *.pdb 62 | *.pgc 63 | *.pgd 64 | *.rsp 65 | *.sbr 66 | *.tlb 67 | *.tli 68 | *.tlh 69 | *.tmp 70 | *.tmp_proj 71 | *.log 72 | *.vspscc 73 | *.vssscc 74 | .builds 75 | *.pidb 76 | *.svclog 77 | *.scc 78 | 79 | # Chutzpah Test files 80 | _Chutzpah* 81 | 82 | # Visual C++ cache files 83 | ipch/ 84 | *.aps 85 | *.ncb 86 | *.opendb 87 | *.opensdf 88 | *.sdf 89 | *.cachefile 90 | *.VC.db 91 | *.VC.VC.opendb 92 | 93 | # Visual Studio profiler 94 | *.psess 95 | *.vsp 96 | *.vspx 97 | *.sap 98 | 99 | # TFS 2012 Local Workspace 100 | $tf/ 101 | 102 | # Guidance Automation Toolkit 103 | *.gpState 104 | 105 | # ReSharper is a .NET coding add-in 106 | _ReSharper*/ 107 | *.[Rr]e[Ss]harper 108 | *.DotSettings.user 109 | 110 | # JustCode is a .NET coding add-in 111 | .JustCode 112 | 113 | # TeamCity is a build add-in 114 | _TeamCity* 115 | 116 | # DotCover is a Code Coverage Tool 117 | *.dotCover 118 | 119 | # NCrunch 120 | _NCrunch_* 121 | .*crunch*.local.xml 122 | nCrunchTemp_* 123 | 124 | # MightyMoose 125 | *.mm.* 126 | AutoTest.Net/ 127 | 128 | # Web workbench (sass) 129 | .sass-cache/ 130 | 131 | # Installshield output folder 132 | [Ee]xpress/ 133 | 134 | # DocProject is a documentation generator add-in 135 | DocProject/buildhelp/ 136 | DocProject/Help/*.HxT 137 | DocProject/Help/*.HxC 138 | DocProject/Help/*.hhc 139 | DocProject/Help/*.hhk 140 | DocProject/Help/*.hhp 141 | DocProject/Help/Html2 142 | DocProject/Help/html 143 | 144 | # Click-Once directory 145 | publish/ 146 | 147 | # Publish Web Output 148 | *.[Pp]ublish.xml 149 | *.azurePubxml 150 | # TODO: Comment the next line if you want to checkin your web deploy settings 151 | # but database connection strings (with potential passwords) will be unencrypted 152 | #*.pubxml 153 | *.publishproj 154 | 155 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 156 | # checkin your Azure Web App publish settings, but sensitive information contained 157 | # in these scripts will be unencrypted 158 | PublishScripts/ 159 | 160 | # NuGet Packages 161 | *.nupkg 162 | # The packages folder can be ignored because of Package Restore 163 | **/packages/* 164 | # except build/, which is used as an MSBuild target. 165 | !**/packages/build/ 166 | # Uncomment if necessary however generally it will be regenerated when needed 167 | #!**/packages/repositories.config 168 | # NuGet v3's project.json files produces more ignoreable files 169 | *.nuget.props 170 | *.nuget.targets 171 | 172 | # Microsoft Azure Build Output 173 | csx/ 174 | *.build.csdef 175 | 176 | # Microsoft Azure Emulator 177 | ecf/ 178 | rcf/ 179 | 180 | # Windows Store app package directories and files 181 | AppPackages/ 182 | BundleArtifacts/ 183 | Package.StoreAssociation.xml 184 | _pkginfo.txt 185 | 186 | # Visual Studio cache files 187 | # files ending in .cache can be ignored 188 | *.[Cc]ache 189 | # but keep track of directories ending in .cache 190 | !*.[Cc]ache/ 191 | 192 | # Others 193 | ClientBin/ 194 | ~$* 195 | *~ 196 | *.dbmdl 197 | *.dbproj.schemaview 198 | *.jfm 199 | *.pfx 200 | *.publishsettings 201 | node_modules/ 202 | orleans.codegen.cs 203 | 204 | # Since there are multiple workflows, uncomment next line to ignore bower_components 205 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 206 | #bower_components/ 207 | 208 | # RIA/Silverlight projects 209 | Generated_Code/ 210 | 211 | # Backup & report files from converting an old project file 212 | # to a newer Visual Studio version. Backup files are not needed, 213 | # because we have git ;-) 214 | _UpgradeReport_Files/ 215 | Backup*/ 216 | UpgradeLog*.XML 217 | UpgradeLog*.htm 218 | 219 | # SQL Server files 220 | *.mdf 221 | *.ldf 222 | 223 | # Business Intelligence projects 224 | *.rdl.data 225 | *.bim.layout 226 | *.bim_*.settings 227 | 228 | # Microsoft Fakes 229 | FakesAssemblies/ 230 | 231 | # GhostDoc plugin setting file 232 | *.GhostDoc.xml 233 | 234 | # Node.js Tools for Visual Studio 235 | .ntvs_analysis.dat 236 | 237 | # Visual Studio 6 build log 238 | *.plg 239 | 240 | # Visual Studio 6 workspace options file 241 | *.opt 242 | 243 | # Visual Studio LightSwitch build output 244 | **/*.HTMLClient/GeneratedArtifacts 245 | **/*.DesktopClient/GeneratedArtifacts 246 | **/*.DesktopClient/ModelManifest.xml 247 | **/*.Server/GeneratedArtifacts 248 | **/*.Server/ModelManifest.xml 249 | _Pvt_Extensions 250 | 251 | # Paket dependency manager 252 | .paket/paket.exe 253 | paket-files/ 254 | 255 | # FAKE - F# Make 256 | .fake/ 257 | 258 | # JetBrains Rider 259 | .idea/ 260 | *.sln.iml 261 | 262 | # CodeRush 263 | .cr/ 264 | 265 | # Python Tools for Visual Studio (PTVS) 266 | __pycache__/ 267 | *.pyc 268 | -------------------------------------------------------------------------------- /SPA/wwwroot/css/switcher-resources/theme-switcher.css: -------------------------------------------------------------------------------- 1 | /* Theme switch button*/ 2 | .theme-settings:not(.True) { 3 | border-width: 0px !important; 4 | } 5 | 6 | .theme-settings.True, 7 | .theme-settings-collapsed.True { 8 | background-color: #fff!important; 9 | color: #222!important; 10 | } 11 | 12 | .theme-settings a { 13 | position: relative; 14 | transform: scale(1); 15 | height: 3.5rem; 16 | display: inline-block; 17 | } 18 | 19 | .theme-settings.True a { 20 | color: inherit !important; 21 | background-color: transparent!important; 22 | } 23 | 24 | .theme-settings a::before { 25 | content: ""; 26 | position: absolute; 27 | top: 0; 28 | left: 0; 29 | height: 100%; 30 | width: 1px; 31 | background-color: currentColor; 32 | opacity: .2; 33 | } 34 | 35 | .theme-settings a, 36 | .theme-settings a:hover, 37 | .theme-settings a:active, 38 | .theme-settings a:focus { 39 | color: inherit!important; 40 | background: transparent!important; 41 | } 42 | .theme-settings a:hover:before { 43 | opacity: 1; 44 | } 45 | .theme-settings a:hover:after { 46 | content: ""; 47 | position: absolute; 48 | top: 0; 49 | left: 1px; 50 | height: 100%; 51 | width: calc(100% - 1px); 52 | z-index: -1; 53 | background-color: currentColor; 54 | opacity: 1; 55 | } 56 | .theme-settings a:hover > span { 57 | opacity: .9; 58 | color: #fff; 59 | } 60 | 61 | #settingsbar { 62 | transition: width 200ms; 63 | position: absolute; 64 | right: 0; 65 | background-color: #fff; /*var(--light);*/ 66 | box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.24); 67 | color: #666; 68 | border-left: 1px solid #e3e3e3; 69 | border-bottom: 1px solid #e3e3e3; 70 | padding: 0 !important; 71 | width: 310px; 72 | height: 1000px; 73 | z-index: 30; 74 | overflow-y: visible; 75 | top: 3.5rem; 76 | } 77 | 78 | #themesMenu { 79 | } 80 | 81 | @media (min-width: 1200px) { 82 | #themesMenu { 83 | } 84 | } 85 | 86 | #themesMenu ul { 87 | columns: 2; 88 | margin-bottom: 1rem; 89 | } 90 | 91 | #themesMenu li { 92 | width: 50%; 93 | } 94 | 95 | #themesMenu li > a { 96 | white-space: nowrap; 97 | font-weight: 500; 98 | border-radius: 0; 99 | border: 0; 100 | padding: 12px 12px 8px 22px; 101 | } 102 | 103 | #themesMenu li > a:not(.active) { 104 | background-image: none; 105 | } 106 | 107 | #themesMenu li > a:not(.active):hover { 108 | background: #e8e8e8; 109 | } 110 | 111 | #themesMenu .nav-item { 112 | margin-right: 0; 113 | padding-bottom: 0; 114 | } 115 | 116 | #themesMenu { 117 | font-size: 14px; 118 | min-width: 300px; 119 | } 120 | 121 | #themesMenu .nav { 122 | font-size: 14px; 123 | } 124 | 125 | #themesMenu li > a:not(.active) { 126 | color: #a9a9a9; 127 | } 128 | 129 | #themesMenu li.theme-group { 130 | font-weight: 600; 131 | font-size: 15px; 132 | padding: 7px 12px 8px; 133 | white-space: nowrap; 134 | width: 100% !important; 135 | border-color: #E9E9EA; 136 | border-style: solid; 137 | border-width: 1px 0; 138 | } 139 | 140 | #themesMenu li.theme-group:first-child { 141 | border-top-width: 0; 142 | padding-top: 11px; 143 | padding-bottom: 8px; 144 | } 145 | 146 | #settingsbar * { 147 | text-shadow: none; 148 | letter-spacing: 0; 149 | font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; 150 | } 151 | 152 | #settingsbar h5 { 153 | color: #666; 154 | padding-left: 1em; 155 | } 156 | 157 | #settingsbar #themesMenu li > a > .image { 158 | width: 18px; 159 | height: 18px; 160 | display: inline-block; 161 | vertical-align: -3px; 162 | margin-right: 16px; 163 | border: 1px solid #fff; 164 | } 165 | 166 | .theme-slate #themesMenu .nav-item > .nav-link.active { 167 | background: #484e55; 168 | } 169 | 170 | .theme-settings-collapsed > a, 171 | .theme-settings > a { 172 | padding: 15px 16px 9px 16px; 173 | line-height: 24px; 174 | margin: 0; 175 | } 176 | 177 | .theme-settings .oi.oi-cog, 178 | .theme-settings-collapsed .oi.oi-cog { 179 | font-size: 1.5rem; 180 | width: auto; 181 | } 182 | 183 | .theme-settings .oi.oi-cog { 184 | letter-spacing: 0; 185 | } 186 | 187 | .theme-settings > a, 188 | .theme-settings-collapsed > a { 189 | color: inherit !important; 190 | } 191 | 192 | .theme-settings-collapsed { 193 | height: 100%; 194 | } 195 | .theme-settings-collapsed > a { 196 | margin: 0 !important; 197 | background: none !important; 198 | } 199 | 200 | @media (min-width: 1200px) { 201 | .theme-settings-collapsed { 202 | display: none; 203 | } 204 | } 205 | 206 | #settingsbar::-webkit-scrollbar-track { 207 | -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); 208 | border-radius: 10px; 209 | background-color: #F5F5F5; 210 | } 211 | 212 | #settingsbar::-webkit-scrollbar { 213 | width: 12px; 214 | background-color: #F5F5F5; 215 | } 216 | 217 | #settingsbar::-webkit-scrollbar-thumb { 218 | border-radius: 10px; 219 | -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3); 220 | background-color: #555; 221 | } 222 | 223 | /*Theme reset*/ 224 | .logo > h5 { 225 | font-size: 20px; 226 | font-weight: 500; 227 | letter-spacing: 0; 228 | text-transform: initial; 229 | font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; 230 | text-shadow: inherit; 231 | } 232 | 233 | .sidebar .nav-pills .nav-item { 234 | margin: 0; 235 | } 236 | 237 | .sidebar .app-sidebar span.badge { 238 | font-weight: 400; 239 | } 240 | 241 | .sidebar .nav-pills .nav-item .nav-link { 242 | padding: .5rem 1rem; 243 | } 244 | 245 | .app-sidebar .nav-pills > .nav-item > a:not(.active) { 246 | background-image: none !important; 247 | } 248 | 249 | .app-sidebar .nav-pills > .nav-item > a { 250 | border: none !important; 251 | } 252 | 253 | .app-sidebar .badge { 254 | margin: 0; 255 | border: 0 !important; 256 | padding: 3px 4px; 257 | color: #fff !important; 258 | background-color: #6c757d !important; 259 | font-size: 0.75rem; 260 | } 261 | 262 | .sidebar { 263 | font-size: 1rem !important; 264 | } 265 | 266 | .sidebar .logo-container { 267 | font-size: 16px !important; 268 | font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; 269 | font-weight: 400 !important; 270 | line-height: 24px; 271 | box-shadow: none; 272 | text-shadow: none; 273 | } 274 | 275 | #themesMenu .nav-link { 276 | font-size: 14px; 277 | } 278 | 279 | #themesMenu .nav-link span { 280 | line-height: 22px; 281 | } 282 | 283 | .sidebar *, #themesMenu * { 284 | text-transform: none; 285 | letter-spacing: 0; 286 | } 287 | 288 | #settingsbar.hidden-settings-bar { 289 | width: 0px; 290 | height: 0px; 291 | overflow: hidden; 292 | } 293 | 294 | #themesMenu .theme-name { 295 | text-transform: capitalize; 296 | } 297 | -------------------------------------------------------------------------------- /README.html: -------------------------------------------------------------------------------- 1 | 2 |

:blush: :blush: :blush: Saloon Manager / Administrator Application

3 |

Saloon Manager is a complete wellness appointment booking application, powered by Blazor,Flutter and Microsoft DotNet Core and SQL Server. It helps to run a beauty or wellness business with industry-leading, free-to-use-software for managing appointment bookings,Clients Management, point-of-sale, customer records, staffing, inventory, financial reporting and much more. 4 |

5 |

Technologies Used

6 | 7 | 8 | 9 | 10 | 11 | 12 | 25 | 38 | 39 |
Core TechnologiesOther Features
13 |
    14 |
  • Blazor
  • 15 |
  • Flutter for Mobile Apps
  • 16 |
  • DotNet Core
  • 17 |
  • Azure Bots
  • 18 |
  • SignalR
  • 19 |
  • Firebase
  • 20 |
  • Radzen
  • 21 |
  • SCSS
  • 22 |
  • HTML5
  • 23 |
24 |
26 |
    27 |
  • Twilio Whatsapp API
  • 28 |
  • Stripe
  • 29 |
  • Nuxemo SMS
  • 30 |
  • Font Icons
  • 31 |
  • Google Fonts
  • 32 |
  • Easy to Customize
  • 33 |
  • Cross Browser Optimization
  • 34 |
  • Clean code
  • 35 |
  • Modern Design
  • 36 |
37 |
40 | 41 |

The app will serve in Mobile mode compact features.

42 | 43 |

:blush: :blush: :blush: Mobile App Screens

44 |

45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 |

59 | 60 |

The app will serve in Desktop mode with all features.

61 | 62 |

:blush: :blush: :blush: Desktop Screens

63 |

64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 |

80 | 81 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 |

:blush: :blush: :blush: Saloon Manager / Administrator Application

3 |

Saloon Manager is a complete wellness appointment booking application, powered by Blazor,Flutter and Microsoft DotNet Core and SQL Server. It helps to run a beauty or wellness business with industry-leading, free-to-use-software for managing appointment bookings,Clients Management, point-of-sale, customer records, staffing, inventory, financial reporting and much more. 4 |

5 |

Technologies Used

6 | 7 | 8 | 9 | 10 | 11 | 12 | 25 | 38 | 39 |
Core TechnologiesOther Features
13 |
    14 |
  • Blazor
  • 15 |
  • Flutter for Mobile Apps
  • 16 |
  • DotNet Core
  • 17 |
  • Azure Bots
  • 18 |
  • SignalR
  • 19 |
  • Firebase
  • 20 |
  • Radzen
  • 21 |
  • SCSS
  • 22 |
  • HTML5
  • 23 |
24 |
26 |
    27 |
  • Twilio Whatsapp API
  • 28 |
  • Stripe
  • 29 |
  • Nuxemo SMS
  • 30 |
  • Font Icons
  • 31 |
  • Google Fonts
  • 32 |
  • Easy to Customize
  • 33 |
  • Cross Browser Optimization
  • 34 |
  • Clean code
  • 35 |
  • Modern Design
  • 36 |
37 |
40 | 41 |

The app will serve in Mobile mode compact features.

42 | 43 |

:blush: :blush: :blush: Mobile App Screens

44 |

45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 |

59 | 60 |

The app will serve in Desktop mode with all features.

61 | 62 |

:blush: :blush: :blush: Desktop Screens

63 |

64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 |

80 | 81 | 82 | - 💻 All of my projects are available at [http://www.sunilvijayan.com/](http://www.sunilvijayan.com/) 83 | 84 | - 📫 How to reach me **hi@sunilvijayan.com/** 85 | -------------------------------------------------------------------------------- /SPA/wwwroot/css/open-iconic/font/css/open-iconic-bootstrap.min.css: -------------------------------------------------------------------------------- 1 | @font-face{font-family:Icons;src:url(../fonts/open-iconic.eot);src:url(../fonts/open-iconic.eot?#iconic-sm) format('embedded-opentype'),url(../fonts/open-iconic.woff) format('woff'),url(../fonts/open-iconic.ttf) format('truetype'),url(../fonts/open-iconic.otf) format('opentype'),url(../fonts/open-iconic.svg#iconic-sm) format('svg');font-weight:400;font-style:normal}.oi{position:relative;top:1px;display:inline-block;speak:none;font-family:Icons;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.oi:empty:before{width:1em;text-align:center;box-sizing:content-box}.oi.oi-align-center:before{text-align:center}.oi.oi-align-left:before{text-align:left}.oi.oi-align-right:before{text-align:right}.oi.oi-flip-horizontal:before{-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.oi.oi-flip-vertical:before{-webkit-transform:scale(1,-1);-ms-transform:scale(-1,1);transform:scale(1,-1)}.oi.oi-flip-horizontal-vertical:before{-webkit-transform:scale(-1,-1);-ms-transform:scale(-1,1);transform:scale(-1,-1)}.oi-account-login:before{content:'\e000'}.oi-account-logout:before{content:'\e001'}.oi-action-redo:before{content:'\e002'}.oi-action-undo:before{content:'\e003'}.oi-align-center:before{content:'\e004'}.oi-align-left:before{content:'\e005'}.oi-align-right:before{content:'\e006'}.oi-aperture:before{content:'\e007'}.oi-arrow-bottom:before{content:'\e008'}.oi-arrow-circle-bottom:before{content:'\e009'}.oi-arrow-circle-left:before{content:'\e00a'}.oi-arrow-circle-right:before{content:'\e00b'}.oi-arrow-circle-top:before{content:'\e00c'}.oi-arrow-left:before{content:'\e00d'}.oi-arrow-right:before{content:'\e00e'}.oi-arrow-thick-bottom:before{content:'\e00f'}.oi-arrow-thick-left:before{content:'\e010'}.oi-arrow-thick-right:before{content:'\e011'}.oi-arrow-thick-top:before{content:'\e012'}.oi-arrow-top:before{content:'\e013'}.oi-audio-spectrum:before{content:'\e014'}.oi-audio:before{content:'\e015'}.oi-badge:before{content:'\e016'}.oi-ban:before{content:'\e017'}.oi-bar-chart:before{content:'\e018'}.oi-basket:before{content:'\e019'}.oi-battery-empty:before{content:'\e01a'}.oi-battery-full:before{content:'\e01b'}.oi-beaker:before{content:'\e01c'}.oi-bell:before{content:'\e01d'}.oi-bluetooth:before{content:'\e01e'}.oi-bold:before{content:'\e01f'}.oi-bolt:before{content:'\e020'}.oi-book:before{content:'\e021'}.oi-bookmark:before{content:'\e022'}.oi-box:before{content:'\e023'}.oi-briefcase:before{content:'\e024'}.oi-british-pound:before{content:'\e025'}.oi-browser:before{content:'\e026'}.oi-brush:before{content:'\e027'}.oi-bug:before{content:'\e028'}.oi-bullhorn:before{content:'\e029'}.oi-calculator:before{content:'\e02a'}.oi-calendar:before{content:'\e02b'}.oi-camera-slr:before{content:'\e02c'}.oi-caret-bottom:before{content:'\e02d'}.oi-caret-left:before{content:'\e02e'}.oi-caret-right:before{content:'\e02f'}.oi-caret-top:before{content:'\e030'}.oi-cart:before{content:'\e031'}.oi-chat:before{content:'\e032'}.oi-check:before{content:'\e033'}.oi-chevron-bottom:before{content:'\e034'}.oi-chevron-left:before{content:'\e035'}.oi-chevron-right:before{content:'\e036'}.oi-chevron-top:before{content:'\e037'}.oi-circle-check:before{content:'\e038'}.oi-circle-x:before{content:'\e039'}.oi-clipboard:before{content:'\e03a'}.oi-clock:before{content:'\e03b'}.oi-cloud-download:before{content:'\e03c'}.oi-cloud-upload:before{content:'\e03d'}.oi-cloud:before{content:'\e03e'}.oi-cloudy:before{content:'\e03f'}.oi-code:before{content:'\e040'}.oi-cog:before{content:'\e041'}.oi-collapse-down:before{content:'\e042'}.oi-collapse-left:before{content:'\e043'}.oi-collapse-right:before{content:'\e044'}.oi-collapse-up:before{content:'\e045'}.oi-command:before{content:'\e046'}.oi-comment-square:before{content:'\e047'}.oi-compass:before{content:'\e048'}.oi-contrast:before{content:'\e049'}.oi-copywriting:before{content:'\e04a'}.oi-credit-card:before{content:'\e04b'}.oi-crop:before{content:'\e04c'}.oi-dashboard:before{content:'\e04d'}.oi-data-transfer-download:before{content:'\e04e'}.oi-data-transfer-upload:before{content:'\e04f'}.oi-delete:before{content:'\e050'}.oi-dial:before{content:'\e051'}.oi-document:before{content:'\e052'}.oi-dollar:before{content:'\e053'}.oi-double-quote-sans-left:before{content:'\e054'}.oi-double-quote-sans-right:before{content:'\e055'}.oi-double-quote-serif-left:before{content:'\e056'}.oi-double-quote-serif-right:before{content:'\e057'}.oi-droplet:before{content:'\e058'}.oi-eject:before{content:'\e059'}.oi-elevator:before{content:'\e05a'}.oi-ellipses:before{content:'\e05b'}.oi-envelope-closed:before{content:'\e05c'}.oi-envelope-open:before{content:'\e05d'}.oi-euro:before{content:'\e05e'}.oi-excerpt:before{content:'\e05f'}.oi-expand-down:before{content:'\e060'}.oi-expand-left:before{content:'\e061'}.oi-expand-right:before{content:'\e062'}.oi-expand-up:before{content:'\e063'}.oi-external-link:before{content:'\e064'}.oi-eye:before{content:'\e065'}.oi-eyedropper:before{content:'\e066'}.oi-file:before{content:'\e067'}.oi-fire:before{content:'\e068'}.oi-flag:before{content:'\e069'}.oi-flash:before{content:'\e06a'}.oi-folder:before{content:'\e06b'}.oi-fork:before{content:'\e06c'}.oi-fullscreen-enter:before{content:'\e06d'}.oi-fullscreen-exit:before{content:'\e06e'}.oi-globe:before{content:'\e06f'}.oi-graph:before{content:'\e070'}.oi-grid-four-up:before{content:'\e071'}.oi-grid-three-up:before{content:'\e072'}.oi-grid-two-up:before{content:'\e073'}.oi-hard-drive:before{content:'\e074'}.oi-header:before{content:'\e075'}.oi-headphones:before{content:'\e076'}.oi-heart:before{content:'\e077'}.oi-home:before{content:'\e078'}.oi-image:before{content:'\e079'}.oi-inbox:before{content:'\e07a'}.oi-infinity:before{content:'\e07b'}.oi-info:before{content:'\e07c'}.oi-italic:before{content:'\e07d'}.oi-justify-center:before{content:'\e07e'}.oi-justify-left:before{content:'\e07f'}.oi-justify-right:before{content:'\e080'}.oi-key:before{content:'\e081'}.oi-laptop:before{content:'\e082'}.oi-layers:before{content:'\e083'}.oi-lightbulb:before{content:'\e084'}.oi-link-broken:before{content:'\e085'}.oi-link-intact:before{content:'\e086'}.oi-list-rich:before{content:'\e087'}.oi-list:before{content:'\e088'}.oi-location:before{content:'\e089'}.oi-lock-locked:before{content:'\e08a'}.oi-lock-unlocked:before{content:'\e08b'}.oi-loop-circular:before{content:'\e08c'}.oi-loop-square:before{content:'\e08d'}.oi-loop:before{content:'\e08e'}.oi-magnifying-glass:before{content:'\e08f'}.oi-map-marker:before{content:'\e090'}.oi-map:before{content:'\e091'}.oi-media-pause:before{content:'\e092'}.oi-media-play:before{content:'\e093'}.oi-media-record:before{content:'\e094'}.oi-media-skip-backward:before{content:'\e095'}.oi-media-skip-forward:before{content:'\e096'}.oi-media-step-backward:before{content:'\e097'}.oi-media-step-forward:before{content:'\e098'}.oi-media-stop:before{content:'\e099'}.oi-medical-cross:before{content:'\e09a'}.oi-menu:before{content:'\e09b'}.oi-microphone:before{content:'\e09c'}.oi-minus:before{content:'\e09d'}.oi-monitor:before{content:'\e09e'}.oi-moon:before{content:'\e09f'}.oi-move:before{content:'\e0a0'}.oi-musical-note:before{content:'\e0a1'}.oi-paperclip:before{content:'\e0a2'}.oi-pencil:before{content:'\e0a3'}.oi-people:before{content:'\e0a4'}.oi-person:before{content:'\e0a5'}.oi-phone:before{content:'\e0a6'}.oi-pie-chart:before{content:'\e0a7'}.oi-pin:before{content:'\e0a8'}.oi-play-circle:before{content:'\e0a9'}.oi-plus:before{content:'\e0aa'}.oi-power-standby:before{content:'\e0ab'}.oi-print:before{content:'\e0ac'}.oi-project:before{content:'\e0ad'}.oi-pulse:before{content:'\e0ae'}.oi-puzzle-piece:before{content:'\e0af'}.oi-question-mark:before{content:'\e0b0'}.oi-rain:before{content:'\e0b1'}.oi-random:before{content:'\e0b2'}.oi-reload:before{content:'\e0b3'}.oi-resize-both:before{content:'\e0b4'}.oi-resize-height:before{content:'\e0b5'}.oi-resize-width:before{content:'\e0b6'}.oi-rss-alt:before{content:'\e0b7'}.oi-rss:before{content:'\e0b8'}.oi-script:before{content:'\e0b9'}.oi-share-boxed:before{content:'\e0ba'}.oi-share:before{content:'\e0bb'}.oi-shield:before{content:'\e0bc'}.oi-signal:before{content:'\e0bd'}.oi-signpost:before{content:'\e0be'}.oi-sort-ascending:before{content:'\e0bf'}.oi-sort-descending:before{content:'\e0c0'}.oi-spreadsheet:before{content:'\e0c1'}.oi-star:before{content:'\e0c2'}.oi-sun:before{content:'\e0c3'}.oi-tablet:before{content:'\e0c4'}.oi-tag:before{content:'\e0c5'}.oi-tags:before{content:'\e0c6'}.oi-target:before{content:'\e0c7'}.oi-task:before{content:'\e0c8'}.oi-terminal:before{content:'\e0c9'}.oi-text:before{content:'\e0ca'}.oi-thumb-down:before{content:'\e0cb'}.oi-thumb-up:before{content:'\e0cc'}.oi-timer:before{content:'\e0cd'}.oi-transfer:before{content:'\e0ce'}.oi-trash:before{content:'\e0cf'}.oi-underline:before{content:'\e0d0'}.oi-vertical-align-bottom:before{content:'\e0d1'}.oi-vertical-align-center:before{content:'\e0d2'}.oi-vertical-align-top:before{content:'\e0d3'}.oi-video:before{content:'\e0d4'}.oi-volume-high:before{content:'\e0d5'}.oi-volume-low:before{content:'\e0d6'}.oi-volume-off:before{content:'\e0d7'}.oi-warning:before{content:'\e0d8'}.oi-wifi:before{content:'\e0d9'}.oi-wrench:before{content:'\e0da'}.oi-x:before{content:'\e0db'}.oi-yen:before{content:'\e0dc'}.oi-zoom-in:before{content:'\e0dd'}.oi-zoom-out:before{content:'\e0de'} -------------------------------------------------------------------------------- /SPA/Portal/Analytics/Analytics.razor: -------------------------------------------------------------------------------- 1 | 2 | @page "/analytics" 3 | @inject HttpClient Http 4 | @using DevExpress.Blazor 5 | @using System.Threading 6 | 7 | 8 | 9 | 10 |
11 |
12 |
13 |
14 |

Total Appointments

15 | 16 | 17 | 20 | 21 | 22 | 23 | 26 | 27 | 28 | 29 | 32 | 33 | 34 | 35 | 38 | 39 | 40 |
41 |
42 |
43 |
44 |

Staff Appointments

45 | 46 | 47 | 50 | 51 | 52 | 53 | 56 | 57 | 58 | 59 | 62 | 63 | 64 | 65 | 68 | 69 | 70 | 71 | 74 | 75 | 76 | 77 | 78 |
79 |
80 |
81 |
82 | 83 |
84 |
85 |
86 |
87 |

Total Appointments

88 |
89 |
Test
90 |
91 | 92 | 93 | 96 | 97 | 98 | 101 | 102 | 103 | 104 |
105 |
106 | @code{ 107 | string questionName; 108 | string QuestionName { get => questionName; set { questionName = value;} } 109 | string questionText; 110 | string QuestionText { get => questionText; set { questionText = value;} } 111 | } 112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
Header
120 |
121 |
Primary card title
122 |

Some quick example text to build on the card title and make up the bulk of the card's content.

123 |
124 |
125 |
126 |
Header
127 |
128 |
Secondary card title
129 |

Some quick example text to build on the card title and make up the bulk of the card's content.

130 |
131 |
132 |
133 |
Header
134 |
135 |
Success card title
136 |

Some quick example text to build on the card title and make up the bulk of the card's content.

137 |
138 |
139 |
140 |
141 |
142 |
Header
143 |
144 |
Danger card title
145 |

Some quick example text to build on the card title and make up the bulk of the card's content.

146 |
147 |
148 |
149 |
Header
150 |
151 |
Warning card title
152 |

Some quick example text to build on the card title and make up the bulk of the card's content.

153 |
154 |
155 |
156 |
Header
157 |
158 |
Info card title
159 |

Some quick example text to build on the card title and make up the bulk of the card's content.

160 |
161 |
162 |
163 |
164 |
Header
165 |
166 |
Light card title
167 |

Some quick example text to build on the card title and make up the bulk of the card's content.

168 |
169 |
170 |
171 |
Header
172 |
173 |
Dark card title
174 |

Some quick example text to build on the card title and make up the bulk of the card's content.

175 |
176 |
177 |
178 | 179 |
180 | 181 |
182 | Total Users 183 |
184 |
185 |
186 | 187 | @code { 188 | 189 | string Name { get; set; } = "Nancy Davolio"; 190 | string Email { get; set; } = "NancyDavolio@sample.com"; 191 | DateTime BirthDate { get; set; } = DateTime.Now.AddYears(-20); 192 | int YearsWorked { get; set; } = 3; 193 | bool OnVacation { get; set; } = true; 194 | SizeMode SizeMode { get; set; } 195 | 196 | string Name2 { get; set; } = "Nancy Davolio"; 197 | string Email2 { get; set; } = "NancyDavolio@sample.com"; 198 | DateTime BirthDate2 { get; set; } = DateTime.Now.AddYears(-20); 199 | int YearsWorked2 { get; set; } = 3; 200 | bool OnVacation2 { get; set; } = true; 201 | SizeMode SizeMode2 { get; set; } 202 | 203 | 204 | } -------------------------------------------------------------------------------- /saloon_mobile/ios/Runner.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 11 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 12 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 13 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 14 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 15 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; 16 | /* End PBXBuildFile section */ 17 | 18 | /* Begin PBXCopyFilesBuildPhase section */ 19 | 9705A1C41CF9048500538489 /* Embed Frameworks */ = { 20 | isa = PBXCopyFilesBuildPhase; 21 | buildActionMask = 2147483647; 22 | dstPath = ""; 23 | dstSubfolderSpec = 10; 24 | files = ( 25 | ); 26 | name = "Embed Frameworks"; 27 | runOnlyForDeploymentPostprocessing = 0; 28 | }; 29 | /* End PBXCopyFilesBuildPhase section */ 30 | 31 | /* Begin PBXFileReference section */ 32 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 33 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 34 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 35 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 36 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 37 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 38 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 39 | 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 40 | 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 41 | 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 42 | 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 43 | 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 44 | 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 45 | /* End PBXFileReference section */ 46 | 47 | /* Begin PBXFrameworksBuildPhase section */ 48 | 97C146EB1CF9000F007C117D /* Frameworks */ = { 49 | isa = PBXFrameworksBuildPhase; 50 | buildActionMask = 2147483647; 51 | files = ( 52 | ); 53 | runOnlyForDeploymentPostprocessing = 0; 54 | }; 55 | /* End PBXFrameworksBuildPhase section */ 56 | 57 | /* Begin PBXGroup section */ 58 | 9740EEB11CF90186004384FC /* Flutter */ = { 59 | isa = PBXGroup; 60 | children = ( 61 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, 62 | 9740EEB21CF90195004384FC /* Debug.xcconfig */, 63 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 64 | 9740EEB31CF90195004384FC /* Generated.xcconfig */, 65 | ); 66 | name = Flutter; 67 | sourceTree = ""; 68 | }; 69 | 97C146E51CF9000F007C117D = { 70 | isa = PBXGroup; 71 | children = ( 72 | 9740EEB11CF90186004384FC /* Flutter */, 73 | 97C146F01CF9000F007C117D /* Runner */, 74 | 97C146EF1CF9000F007C117D /* Products */, 75 | ); 76 | sourceTree = ""; 77 | }; 78 | 97C146EF1CF9000F007C117D /* Products */ = { 79 | isa = PBXGroup; 80 | children = ( 81 | 97C146EE1CF9000F007C117D /* Runner.app */, 82 | ); 83 | name = Products; 84 | sourceTree = ""; 85 | }; 86 | 97C146F01CF9000F007C117D /* Runner */ = { 87 | isa = PBXGroup; 88 | children = ( 89 | 97C146FA1CF9000F007C117D /* Main.storyboard */, 90 | 97C146FD1CF9000F007C117D /* Assets.xcassets */, 91 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 92 | 97C147021CF9000F007C117D /* Info.plist */, 93 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 94 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 95 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, 96 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, 97 | ); 98 | path = Runner; 99 | sourceTree = ""; 100 | }; 101 | /* End PBXGroup section */ 102 | 103 | /* Begin PBXNativeTarget section */ 104 | 97C146ED1CF9000F007C117D /* Runner */ = { 105 | isa = PBXNativeTarget; 106 | buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; 107 | buildPhases = ( 108 | 9740EEB61CF901F6004384FC /* Run Script */, 109 | 97C146EA1CF9000F007C117D /* Sources */, 110 | 97C146EB1CF9000F007C117D /* Frameworks */, 111 | 97C146EC1CF9000F007C117D /* Resources */, 112 | 9705A1C41CF9048500538489 /* Embed Frameworks */, 113 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */, 114 | ); 115 | buildRules = ( 116 | ); 117 | dependencies = ( 118 | ); 119 | name = Runner; 120 | productName = Runner; 121 | productReference = 97C146EE1CF9000F007C117D /* Runner.app */; 122 | productType = "com.apple.product-type.application"; 123 | }; 124 | /* End PBXNativeTarget section */ 125 | 126 | /* Begin PBXProject section */ 127 | 97C146E61CF9000F007C117D /* Project object */ = { 128 | isa = PBXProject; 129 | attributes = { 130 | LastUpgradeCheck = 1020; 131 | ORGANIZATIONNAME = ""; 132 | TargetAttributes = { 133 | 97C146ED1CF9000F007C117D = { 134 | CreatedOnToolsVersion = 7.3.1; 135 | LastSwiftMigration = 1100; 136 | }; 137 | }; 138 | }; 139 | buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; 140 | compatibilityVersion = "Xcode 9.3"; 141 | developmentRegion = en; 142 | hasScannedForEncodings = 0; 143 | knownRegions = ( 144 | en, 145 | Base, 146 | ); 147 | mainGroup = 97C146E51CF9000F007C117D; 148 | productRefGroup = 97C146EF1CF9000F007C117D /* Products */; 149 | projectDirPath = ""; 150 | projectRoot = ""; 151 | targets = ( 152 | 97C146ED1CF9000F007C117D /* Runner */, 153 | ); 154 | }; 155 | /* End PBXProject section */ 156 | 157 | /* Begin PBXResourcesBuildPhase section */ 158 | 97C146EC1CF9000F007C117D /* Resources */ = { 159 | isa = PBXResourcesBuildPhase; 160 | buildActionMask = 2147483647; 161 | files = ( 162 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 163 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, 164 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 165 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, 166 | ); 167 | runOnlyForDeploymentPostprocessing = 0; 168 | }; 169 | /* End PBXResourcesBuildPhase section */ 170 | 171 | /* Begin PBXShellScriptBuildPhase section */ 172 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { 173 | isa = PBXShellScriptBuildPhase; 174 | buildActionMask = 2147483647; 175 | files = ( 176 | ); 177 | inputPaths = ( 178 | ); 179 | name = "Thin Binary"; 180 | outputPaths = ( 181 | ); 182 | runOnlyForDeploymentPostprocessing = 0; 183 | shellPath = /bin/sh; 184 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; 185 | }; 186 | 9740EEB61CF901F6004384FC /* Run Script */ = { 187 | isa = PBXShellScriptBuildPhase; 188 | buildActionMask = 2147483647; 189 | files = ( 190 | ); 191 | inputPaths = ( 192 | ); 193 | name = "Run Script"; 194 | outputPaths = ( 195 | ); 196 | runOnlyForDeploymentPostprocessing = 0; 197 | shellPath = /bin/sh; 198 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; 199 | }; 200 | /* End PBXShellScriptBuildPhase section */ 201 | 202 | /* Begin PBXSourcesBuildPhase section */ 203 | 97C146EA1CF9000F007C117D /* Sources */ = { 204 | isa = PBXSourcesBuildPhase; 205 | buildActionMask = 2147483647; 206 | files = ( 207 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, 208 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, 209 | ); 210 | runOnlyForDeploymentPostprocessing = 0; 211 | }; 212 | /* End PBXSourcesBuildPhase section */ 213 | 214 | /* Begin PBXVariantGroup section */ 215 | 97C146FA1CF9000F007C117D /* Main.storyboard */ = { 216 | isa = PBXVariantGroup; 217 | children = ( 218 | 97C146FB1CF9000F007C117D /* Base */, 219 | ); 220 | name = Main.storyboard; 221 | sourceTree = ""; 222 | }; 223 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { 224 | isa = PBXVariantGroup; 225 | children = ( 226 | 97C147001CF9000F007C117D /* Base */, 227 | ); 228 | name = LaunchScreen.storyboard; 229 | sourceTree = ""; 230 | }; 231 | /* End PBXVariantGroup section */ 232 | 233 | /* Begin XCBuildConfiguration section */ 234 | 249021D3217E4FDB00AE95B9 /* Profile */ = { 235 | isa = XCBuildConfiguration; 236 | buildSettings = { 237 | ALWAYS_SEARCH_USER_PATHS = NO; 238 | CLANG_ANALYZER_NONNULL = YES; 239 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 240 | CLANG_CXX_LIBRARY = "libc++"; 241 | CLANG_ENABLE_MODULES = YES; 242 | CLANG_ENABLE_OBJC_ARC = YES; 243 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 244 | CLANG_WARN_BOOL_CONVERSION = YES; 245 | CLANG_WARN_COMMA = YES; 246 | CLANG_WARN_CONSTANT_CONVERSION = YES; 247 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 248 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 249 | CLANG_WARN_EMPTY_BODY = YES; 250 | CLANG_WARN_ENUM_CONVERSION = YES; 251 | CLANG_WARN_INFINITE_RECURSION = YES; 252 | CLANG_WARN_INT_CONVERSION = YES; 253 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 254 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 255 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 256 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 257 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 258 | CLANG_WARN_STRICT_PROTOTYPES = YES; 259 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 260 | CLANG_WARN_UNREACHABLE_CODE = YES; 261 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 262 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 263 | COPY_PHASE_STRIP = NO; 264 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 265 | ENABLE_NS_ASSERTIONS = NO; 266 | ENABLE_STRICT_OBJC_MSGSEND = YES; 267 | GCC_C_LANGUAGE_STANDARD = gnu99; 268 | GCC_NO_COMMON_BLOCKS = YES; 269 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 270 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 271 | GCC_WARN_UNDECLARED_SELECTOR = YES; 272 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 273 | GCC_WARN_UNUSED_FUNCTION = YES; 274 | GCC_WARN_UNUSED_VARIABLE = YES; 275 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 276 | MTL_ENABLE_DEBUG_INFO = NO; 277 | SDKROOT = iphoneos; 278 | SUPPORTED_PLATFORMS = iphoneos; 279 | TARGETED_DEVICE_FAMILY = "1,2"; 280 | VALIDATE_PRODUCT = YES; 281 | }; 282 | name = Profile; 283 | }; 284 | 249021D4217E4FDB00AE95B9 /* Profile */ = { 285 | isa = XCBuildConfiguration; 286 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 287 | buildSettings = { 288 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 289 | CLANG_ENABLE_MODULES = YES; 290 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 291 | ENABLE_BITCODE = NO; 292 | INFOPLIST_FILE = Runner/Info.plist; 293 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 294 | PRODUCT_BUNDLE_IDENTIFIER = com.example.saloonMobile; 295 | PRODUCT_NAME = "$(TARGET_NAME)"; 296 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 297 | SWIFT_VERSION = 5.0; 298 | VERSIONING_SYSTEM = "apple-generic"; 299 | }; 300 | name = Profile; 301 | }; 302 | 97C147031CF9000F007C117D /* Debug */ = { 303 | isa = XCBuildConfiguration; 304 | buildSettings = { 305 | ALWAYS_SEARCH_USER_PATHS = NO; 306 | CLANG_ANALYZER_NONNULL = YES; 307 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 308 | CLANG_CXX_LIBRARY = "libc++"; 309 | CLANG_ENABLE_MODULES = YES; 310 | CLANG_ENABLE_OBJC_ARC = YES; 311 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 312 | CLANG_WARN_BOOL_CONVERSION = YES; 313 | CLANG_WARN_COMMA = YES; 314 | CLANG_WARN_CONSTANT_CONVERSION = YES; 315 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 316 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 317 | CLANG_WARN_EMPTY_BODY = YES; 318 | CLANG_WARN_ENUM_CONVERSION = YES; 319 | CLANG_WARN_INFINITE_RECURSION = YES; 320 | CLANG_WARN_INT_CONVERSION = YES; 321 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 322 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 323 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 324 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 325 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 326 | CLANG_WARN_STRICT_PROTOTYPES = YES; 327 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 328 | CLANG_WARN_UNREACHABLE_CODE = YES; 329 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 330 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 331 | COPY_PHASE_STRIP = NO; 332 | DEBUG_INFORMATION_FORMAT = dwarf; 333 | ENABLE_STRICT_OBJC_MSGSEND = YES; 334 | ENABLE_TESTABILITY = YES; 335 | GCC_C_LANGUAGE_STANDARD = gnu99; 336 | GCC_DYNAMIC_NO_PIC = NO; 337 | GCC_NO_COMMON_BLOCKS = YES; 338 | GCC_OPTIMIZATION_LEVEL = 0; 339 | GCC_PREPROCESSOR_DEFINITIONS = ( 340 | "DEBUG=1", 341 | "$(inherited)", 342 | ); 343 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 344 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 345 | GCC_WARN_UNDECLARED_SELECTOR = YES; 346 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 347 | GCC_WARN_UNUSED_FUNCTION = YES; 348 | GCC_WARN_UNUSED_VARIABLE = YES; 349 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 350 | MTL_ENABLE_DEBUG_INFO = YES; 351 | ONLY_ACTIVE_ARCH = YES; 352 | SDKROOT = iphoneos; 353 | TARGETED_DEVICE_FAMILY = "1,2"; 354 | }; 355 | name = Debug; 356 | }; 357 | 97C147041CF9000F007C117D /* Release */ = { 358 | isa = XCBuildConfiguration; 359 | buildSettings = { 360 | ALWAYS_SEARCH_USER_PATHS = NO; 361 | CLANG_ANALYZER_NONNULL = YES; 362 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 363 | CLANG_CXX_LIBRARY = "libc++"; 364 | CLANG_ENABLE_MODULES = YES; 365 | CLANG_ENABLE_OBJC_ARC = YES; 366 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 367 | CLANG_WARN_BOOL_CONVERSION = YES; 368 | CLANG_WARN_COMMA = YES; 369 | CLANG_WARN_CONSTANT_CONVERSION = YES; 370 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 371 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 372 | CLANG_WARN_EMPTY_BODY = YES; 373 | CLANG_WARN_ENUM_CONVERSION = YES; 374 | CLANG_WARN_INFINITE_RECURSION = YES; 375 | CLANG_WARN_INT_CONVERSION = YES; 376 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 377 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 378 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 379 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 380 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 381 | CLANG_WARN_STRICT_PROTOTYPES = YES; 382 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 383 | CLANG_WARN_UNREACHABLE_CODE = YES; 384 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 385 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 386 | COPY_PHASE_STRIP = NO; 387 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 388 | ENABLE_NS_ASSERTIONS = NO; 389 | ENABLE_STRICT_OBJC_MSGSEND = YES; 390 | GCC_C_LANGUAGE_STANDARD = gnu99; 391 | GCC_NO_COMMON_BLOCKS = YES; 392 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 393 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 394 | GCC_WARN_UNDECLARED_SELECTOR = YES; 395 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 396 | GCC_WARN_UNUSED_FUNCTION = YES; 397 | GCC_WARN_UNUSED_VARIABLE = YES; 398 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 399 | MTL_ENABLE_DEBUG_INFO = NO; 400 | SDKROOT = iphoneos; 401 | SUPPORTED_PLATFORMS = iphoneos; 402 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 403 | TARGETED_DEVICE_FAMILY = "1,2"; 404 | VALIDATE_PRODUCT = YES; 405 | }; 406 | name = Release; 407 | }; 408 | 97C147061CF9000F007C117D /* Debug */ = { 409 | isa = XCBuildConfiguration; 410 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; 411 | buildSettings = { 412 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 413 | CLANG_ENABLE_MODULES = YES; 414 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 415 | ENABLE_BITCODE = NO; 416 | INFOPLIST_FILE = Runner/Info.plist; 417 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 418 | PRODUCT_BUNDLE_IDENTIFIER = com.example.saloonMobile; 419 | PRODUCT_NAME = "$(TARGET_NAME)"; 420 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 421 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 422 | SWIFT_VERSION = 5.0; 423 | VERSIONING_SYSTEM = "apple-generic"; 424 | }; 425 | name = Debug; 426 | }; 427 | 97C147071CF9000F007C117D /* Release */ = { 428 | isa = XCBuildConfiguration; 429 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 430 | buildSettings = { 431 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 432 | CLANG_ENABLE_MODULES = YES; 433 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 434 | ENABLE_BITCODE = NO; 435 | INFOPLIST_FILE = Runner/Info.plist; 436 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 437 | PRODUCT_BUNDLE_IDENTIFIER = com.example.saloonMobile; 438 | PRODUCT_NAME = "$(TARGET_NAME)"; 439 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 440 | SWIFT_VERSION = 5.0; 441 | VERSIONING_SYSTEM = "apple-generic"; 442 | }; 443 | name = Release; 444 | }; 445 | /* End XCBuildConfiguration section */ 446 | 447 | /* Begin XCConfigurationList section */ 448 | 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { 449 | isa = XCConfigurationList; 450 | buildConfigurations = ( 451 | 97C147031CF9000F007C117D /* Debug */, 452 | 97C147041CF9000F007C117D /* Release */, 453 | 249021D3217E4FDB00AE95B9 /* Profile */, 454 | ); 455 | defaultConfigurationIsVisible = 0; 456 | defaultConfigurationName = Release; 457 | }; 458 | 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { 459 | isa = XCConfigurationList; 460 | buildConfigurations = ( 461 | 97C147061CF9000F007C117D /* Debug */, 462 | 97C147071CF9000F007C117D /* Release */, 463 | 249021D4217E4FDB00AE95B9 /* Profile */, 464 | ); 465 | defaultConfigurationIsVisible = 0; 466 | defaultConfigurationName = Release; 467 | }; 468 | /* End XCConfigurationList section */ 469 | }; 470 | rootObject = 97C146E61CF9000F007C117D /* Project object */; 471 | } 472 | --------------------------------------------------------------------------------