commit 83775bdc72582b8003846f7ee517f298ae449f01 Author: Yas Opisso Date: Fri Dec 12 14:31:36 2025 -0500 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3820a95 --- /dev/null +++ b/.gitignore @@ -0,0 +1,45 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.build/ +.buildlog/ +.history +.svn/ +.swiftpm/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins-dependencies +.pub-cache/ +.pub/ +/build/ +/coverage/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/.metadata b/.metadata new file mode 100644 index 0000000..84f56b1 --- /dev/null +++ b/.metadata @@ -0,0 +1,45 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: "d693b4b9dbac2acd4477aea4555ca6dcbea44ba2" + channel: "stable" + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: d693b4b9dbac2acd4477aea4555ca6dcbea44ba2 + base_revision: d693b4b9dbac2acd4477aea4555ca6dcbea44ba2 + - platform: android + create_revision: d693b4b9dbac2acd4477aea4555ca6dcbea44ba2 + base_revision: d693b4b9dbac2acd4477aea4555ca6dcbea44ba2 + - platform: ios + create_revision: d693b4b9dbac2acd4477aea4555ca6dcbea44ba2 + base_revision: d693b4b9dbac2acd4477aea4555ca6dcbea44ba2 + - platform: linux + create_revision: d693b4b9dbac2acd4477aea4555ca6dcbea44ba2 + base_revision: d693b4b9dbac2acd4477aea4555ca6dcbea44ba2 + - platform: macos + create_revision: d693b4b9dbac2acd4477aea4555ca6dcbea44ba2 + base_revision: d693b4b9dbac2acd4477aea4555ca6dcbea44ba2 + - platform: web + create_revision: d693b4b9dbac2acd4477aea4555ca6dcbea44ba2 + base_revision: d693b4b9dbac2acd4477aea4555ca6dcbea44ba2 + - platform: windows + create_revision: d693b4b9dbac2acd4477aea4555ca6dcbea44ba2 + base_revision: d693b4b9dbac2acd4477aea4555ca6dcbea44ba2 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..074f589 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "dart.lineLength": 100 +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..d2cd0e4 --- /dev/null +++ b/README.md @@ -0,0 +1,16 @@ +# hum + +A new Flutter project. + +## Getting Started + +This project is a starting point for a Flutter application. + +A few resources to get you started if this is your first Flutter project: + +- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) +- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) + +For help getting started with Flutter development, view the +[online documentation](https://docs.flutter.dev/), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/analysis_options.yaml b/analysis_options.yaml new file mode 100644 index 0000000..2645a2e --- /dev/null +++ b/analysis_options.yaml @@ -0,0 +1,32 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +analyzer: + errors: + use_build_context_synchronously: ignore + avoid_print: ignore +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at https://dart.dev/lints. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/android/.gitignore b/android/.gitignore new file mode 100644 index 0000000..be3943c --- /dev/null +++ b/android/.gitignore @@ -0,0 +1,14 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java +.cxx/ + +# Remember to never publicly share your keystore. +# See https://flutter.dev/to/reference-keystore +key.properties +**/*.keystore +**/*.jks diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts new file mode 100644 index 0000000..eb657c0 --- /dev/null +++ b/android/app/build.gradle.kts @@ -0,0 +1,47 @@ +plugins { + id("com.android.application") + // START: FlutterFire Configuration + id("com.google.gms.google-services") + // END: FlutterFire Configuration + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.hum" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_11.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.hum" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/android/app/google-services.json b/android/app/google-services.json new file mode 100644 index 0000000..685f9fa --- /dev/null +++ b/android/app/google-services.json @@ -0,0 +1,142 @@ +{ + "project_info": { + "project_number": "441447288850", + "project_id": "hum-app-d68e3", + "storage_bucket": "hum-app-d68e3.firebasestorage.app" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:441447288850:android:d4fa96431de80947edc8cb", + "android_client_info": { + "package_name": "cm.hum.humApp" + } + }, + "oauth_client": [ + { + "client_id": "441447288850-nufcv2v4sh1hfur92u04ckn276l5h6ua.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "cm.hum.humApp", + "certificate_hash": "9bbb3186b2189ef16d8f272bdab59362c395cbb4" + } + }, + { + "client_id": "441447288850-1gub8qcibg1buto65ko6ee9o0oh10mog.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyAzvzcZWKsqtoh3D2eifjMJvCuLOK8w3qc" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "441447288850-1gub8qcibg1buto65ko6ee9o0oh10mog.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "441447288850-18f878hgb36l255qktjieu68qpt1v5hq.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "com.hum.humApp" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:441447288850:android:75d41340d538f941edc8cb", + "android_client_info": { + "package_name": "com.example.hum" + } + }, + "oauth_client": [ + { + "client_id": "441447288850-1gub8qcibg1buto65ko6ee9o0oh10mog.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyAzvzcZWKsqtoh3D2eifjMJvCuLOK8w3qc" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "441447288850-1gub8qcibg1buto65ko6ee9o0oh10mog.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "441447288850-18f878hgb36l255qktjieu68qpt1v5hq.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "com.hum.humApp" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:441447288850:android:22381e00e0df1c5bedc8cb", + "android_client_info": { + "package_name": "com.hum.hum_app" + } + }, + "oauth_client": [ + { + "client_id": "441447288850-2dj30aok9mn0gi8n09pshbo2odt6u643.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.hum.hum_app", + "certificate_hash": "9bbb3186b2189ef16d8f272bdab59362c395cbb4" + } + }, + { + "client_id": "441447288850-h318t8hjr5h96qvlpjmt4t6j8htefe9i.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.hum.hum_app", + "certificate_hash": "379559ee31b0722bd54e5f3808a846ef04f70fa8" + } + }, + { + "client_id": "441447288850-1gub8qcibg1buto65ko6ee9o0oh10mog.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyAzvzcZWKsqtoh3D2eifjMJvCuLOK8w3qc" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "441447288850-1gub8qcibg1buto65ko6ee9o0oh10mog.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "441447288850-18f878hgb36l255qktjieu68qpt1v5hq.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "com.hum.humApp" + } + } + ] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..399f698 --- /dev/null +++ b/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..76480ae --- /dev/null +++ b/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/android/app/src/main/kotlin/com/example/hum/MainActivity.kt b/android/app/src/main/kotlin/com/example/hum/MainActivity.kt new file mode 100644 index 0000000..d0d9fa5 --- /dev/null +++ b/android/app/src/main/kotlin/com/example/hum/MainActivity.kt @@ -0,0 +1,5 @@ +package com.example.hum + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity : FlutterActivity() diff --git a/android/app/src/main/res/drawable-v21/launch_background.xml b/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000..f74085f --- /dev/null +++ b/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/android/app/src/main/res/drawable/launch_background.xml b/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000..304732f --- /dev/null +++ b/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000..db77bb4 Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000..17987b7 Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000..09d4391 Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000..d5f1c8d Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000..4d6372e Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/values-night/styles.xml b/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000..06952be --- /dev/null +++ b/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..cb1ef88 --- /dev/null +++ b/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/android/app/src/profile/AndroidManifest.xml b/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000..399f698 --- /dev/null +++ b/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/android/build.gradle.kts b/android/build.gradle.kts new file mode 100644 index 0000000..dbee657 --- /dev/null +++ b/android/build.gradle.kts @@ -0,0 +1,24 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = + rootProject.layout.buildDirectory + .dir("../../build") + .get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/android/gradle.properties b/android/gradle.properties new file mode 100644 index 0000000..f018a61 --- /dev/null +++ b/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +android.useAndroidX=true +android.enableJetifier=true diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..ac3b479 --- /dev/null +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip diff --git a/android/settings.gradle.kts b/android/settings.gradle.kts new file mode 100644 index 0000000..ff284ff --- /dev/null +++ b/android/settings.gradle.kts @@ -0,0 +1,29 @@ +pluginManagement { + val flutterSdkPath = + run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.9.1" apply false + // START: FlutterFire Configuration + id("com.google.gms.google-services") version("4.3.15") apply false + // END: FlutterFire Configuration + id("org.jetbrains.kotlin.android") version "2.1.0" apply false +} + +include(":app") diff --git a/assets/images/logo_app_large.png b/assets/images/logo_app_large.png new file mode 100644 index 0000000..9208dbc Binary files /dev/null and b/assets/images/logo_app_large.png differ diff --git a/assets/images/logo_large_green.png b/assets/images/logo_large_green.png new file mode 100644 index 0000000..f6738d9 Binary files /dev/null and b/assets/images/logo_large_green.png differ diff --git a/assets/images/logo_launcher.png b/assets/images/logo_launcher.png new file mode 100644 index 0000000..16bfb00 Binary files /dev/null and b/assets/images/logo_launcher.png differ diff --git a/assets/images/profile_test_001.jpg b/assets/images/profile_test_001.jpg new file mode 100644 index 0000000..802eab6 Binary files /dev/null and b/assets/images/profile_test_001.jpg differ diff --git a/assets/images/profile_test_002.jpg b/assets/images/profile_test_002.jpg new file mode 100644 index 0000000..881fdd6 Binary files /dev/null and b/assets/images/profile_test_002.jpg differ diff --git a/firebase.json b/firebase.json new file mode 100644 index 0000000..7673ab1 --- /dev/null +++ b/firebase.json @@ -0,0 +1 @@ +{"flutter":{"platforms":{"android":{"default":{"projectId":"hum-app-d68e3","appId":"1:441447288850:android:75d41340d538f941edc8cb","fileOutput":"android/app/google-services.json"}},"ios":{"default":{"projectId":"hum-app-d68e3","appId":"1:441447288850:ios:4abcac611c190b72edc8cb","uploadDebugSymbols":false,"fileOutput":"ios/Runner/GoogleService-Info.plist"}},"dart":{"lib/firebase_options.dart":{"projectId":"hum-app-d68e3","configurations":{"android":"1:441447288850:android:75d41340d538f941edc8cb","ios":"1:441447288850:ios:4abcac611c190b72edc8cb"}}}}}} \ No newline at end of file diff --git a/ios/.gitignore b/ios/.gitignore new file mode 100644 index 0000000..7a7f987 --- /dev/null +++ b/ios/.gitignore @@ -0,0 +1,34 @@ +**/dgph +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/ephemeral/ +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/ios/.vscode/settings.json b/ios/.vscode/settings.json new file mode 100644 index 0000000..dd0ec4f --- /dev/null +++ b/ios/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "dart.flutterSdkPath": "/Users/yopisso/flutter", + "dart.debugExternalPackageLibraries": false, + "dart.debugSdkLibraries": false, + "dart.flutterAdditionalArgs": [ + "--verbose" + ] +} diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 0000000..1dc6cf7 --- /dev/null +++ b/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 13.0 + + diff --git a/ios/Flutter/Debug.xcconfig b/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000..ec97fc6 --- /dev/null +++ b/ios/Flutter/Debug.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "Generated.xcconfig" diff --git a/ios/Flutter/Release.xcconfig b/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000..c4855bf --- /dev/null +++ b/ios/Flutter/Release.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "Generated.xcconfig" diff --git a/ios/GoogleService-Info.plist b/ios/GoogleService-Info.plist new file mode 100644 index 0000000..da65570 --- /dev/null +++ b/ios/GoogleService-Info.plist @@ -0,0 +1,36 @@ + + + + + CLIENT_ID + 441447288850-m7pld8j4gv8k1guc5l0jpk1auqi93mna.apps.googleusercontent.com + REVERSED_CLIENT_ID + com.googleusercontent.apps.441447288850-m7pld8j4gv8k1guc5l0jpk1auqi93mna + ANDROID_CLIENT_ID + 441447288850-2dj30aok9mn0gi8n09pshbo2odt6u643.apps.googleusercontent.com + API_KEY + AIzaSyCLcT0zGwqlsKEhlfYEScuvZJ4FJXfeOGM + GCM_SENDER_ID + 441447288850 + PLIST_VERSION + 1 + BUNDLE_ID + cm.hum.humApp + PROJECT_ID + hum-app-d68e3 + STORAGE_BUCKET + hum-app-d68e3.firebasestorage.app + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:441447288850:ios:ad92e9d3f3108173edc8cb + + \ No newline at end of file diff --git a/ios/Podfile b/ios/Podfile new file mode 100644 index 0000000..51369b9 --- /dev/null +++ b/ios/Podfile @@ -0,0 +1,43 @@ +# Uncomment this line to define a global platform for your project +platform :ios, '26.0' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_ios_podfile_setup + +target 'Runner' do + use_frameworks! + + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_ios_build_settings(target) + end +end diff --git a/ios/Podfile.lock b/ios/Podfile.lock new file mode 100644 index 0000000..e4db205 --- /dev/null +++ b/ios/Podfile.lock @@ -0,0 +1,1632 @@ +PODS: + - abseil/algorithm (1.20240722.0): + - abseil/algorithm/algorithm (= 1.20240722.0) + - abseil/algorithm/container (= 1.20240722.0) + - abseil/algorithm/algorithm (1.20240722.0): + - abseil/base/config + - abseil/xcprivacy + - abseil/algorithm/container (1.20240722.0): + - abseil/algorithm/algorithm + - abseil/base/config + - abseil/base/core_headers + - abseil/base/nullability + - abseil/meta/type_traits + - abseil/xcprivacy + - abseil/base (1.20240722.0): + - abseil/base/atomic_hook (= 1.20240722.0) + - abseil/base/base (= 1.20240722.0) + - abseil/base/base_internal (= 1.20240722.0) + - abseil/base/config (= 1.20240722.0) + - abseil/base/core_headers (= 1.20240722.0) + - abseil/base/cycleclock_internal (= 1.20240722.0) + - abseil/base/dynamic_annotations (= 1.20240722.0) + - abseil/base/endian (= 1.20240722.0) + - abseil/base/errno_saver (= 1.20240722.0) + - abseil/base/fast_type_id (= 1.20240722.0) + - abseil/base/log_severity (= 1.20240722.0) + - abseil/base/malloc_internal (= 1.20240722.0) + - abseil/base/no_destructor (= 1.20240722.0) + - abseil/base/nullability (= 1.20240722.0) + - abseil/base/poison (= 1.20240722.0) + - abseil/base/prefetch (= 1.20240722.0) + - abseil/base/pretty_function (= 1.20240722.0) + - abseil/base/raw_logging_internal (= 1.20240722.0) + - abseil/base/spinlock_wait (= 1.20240722.0) + - abseil/base/strerror (= 1.20240722.0) + - abseil/base/throw_delegate (= 1.20240722.0) + - abseil/base/atomic_hook (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/xcprivacy + - abseil/base/base (1.20240722.0): + - abseil/base/atomic_hook + - abseil/base/base_internal + - abseil/base/config + - abseil/base/core_headers + - abseil/base/cycleclock_internal + - abseil/base/dynamic_annotations + - abseil/base/log_severity + - abseil/base/nullability + - abseil/base/raw_logging_internal + - abseil/base/spinlock_wait + - abseil/meta/type_traits + - abseil/xcprivacy + - abseil/base/base_internal (1.20240722.0): + - abseil/base/config + - abseil/meta/type_traits + - abseil/xcprivacy + - abseil/base/config (1.20240722.0): + - abseil/xcprivacy + - abseil/base/core_headers (1.20240722.0): + - abseil/base/config + - abseil/xcprivacy + - abseil/base/cycleclock_internal (1.20240722.0): + - abseil/base/base_internal + - abseil/base/config + - abseil/xcprivacy + - abseil/base/dynamic_annotations (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/xcprivacy + - abseil/base/endian (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/nullability + - abseil/xcprivacy + - abseil/base/errno_saver (1.20240722.0): + - abseil/base/config + - abseil/xcprivacy + - abseil/base/fast_type_id (1.20240722.0): + - abseil/base/config + - abseil/xcprivacy + - abseil/base/log_severity (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/xcprivacy + - abseil/base/malloc_internal (1.20240722.0): + - abseil/base/base + - abseil/base/base_internal + - abseil/base/config + - abseil/base/core_headers + - abseil/base/dynamic_annotations + - abseil/base/raw_logging_internal + - abseil/xcprivacy + - abseil/base/no_destructor (1.20240722.0): + - abseil/base/config + - abseil/base/nullability + - abseil/xcprivacy + - abseil/base/nullability (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/meta/type_traits + - abseil/xcprivacy + - abseil/base/poison (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/malloc_internal + - abseil/xcprivacy + - abseil/base/prefetch (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/xcprivacy + - abseil/base/pretty_function (1.20240722.0): + - abseil/xcprivacy + - abseil/base/raw_logging_internal (1.20240722.0): + - abseil/base/atomic_hook + - abseil/base/config + - abseil/base/core_headers + - abseil/base/errno_saver + - abseil/base/log_severity + - abseil/xcprivacy + - abseil/base/spinlock_wait (1.20240722.0): + - abseil/base/base_internal + - abseil/base/core_headers + - abseil/base/errno_saver + - abseil/xcprivacy + - abseil/base/strerror (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/errno_saver + - abseil/xcprivacy + - abseil/base/throw_delegate (1.20240722.0): + - abseil/base/config + - abseil/base/raw_logging_internal + - abseil/xcprivacy + - abseil/cleanup/cleanup (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/cleanup/cleanup_internal + - abseil/xcprivacy + - abseil/cleanup/cleanup_internal (1.20240722.0): + - abseil/base/base_internal + - abseil/base/core_headers + - abseil/utility/utility + - abseil/xcprivacy + - abseil/container/common (1.20240722.0): + - abseil/meta/type_traits + - abseil/types/optional + - abseil/xcprivacy + - abseil/container/common_policy_traits (1.20240722.0): + - abseil/meta/type_traits + - abseil/xcprivacy + - abseil/container/compressed_tuple (1.20240722.0): + - abseil/utility/utility + - abseil/xcprivacy + - abseil/container/container_memory (1.20240722.0): + - abseil/base/config + - abseil/memory/memory + - abseil/meta/type_traits + - abseil/utility/utility + - abseil/xcprivacy + - abseil/container/fixed_array (1.20240722.0): + - abseil/algorithm/algorithm + - abseil/base/config + - abseil/base/core_headers + - abseil/base/dynamic_annotations + - abseil/base/throw_delegate + - abseil/container/compressed_tuple + - abseil/memory/memory + - abseil/xcprivacy + - abseil/container/flat_hash_map (1.20240722.0): + - abseil/algorithm/container + - abseil/base/core_headers + - abseil/container/container_memory + - abseil/container/hash_container_defaults + - abseil/container/raw_hash_map + - abseil/meta/type_traits + - abseil/xcprivacy + - abseil/container/flat_hash_set (1.20240722.0): + - abseil/algorithm/container + - abseil/base/core_headers + - abseil/container/container_memory + - abseil/container/hash_container_defaults + - abseil/container/raw_hash_set + - abseil/memory/memory + - abseil/meta/type_traits + - abseil/xcprivacy + - abseil/container/hash_container_defaults (1.20240722.0): + - abseil/base/config + - abseil/container/hash_function_defaults + - abseil/xcprivacy + - abseil/container/hash_function_defaults (1.20240722.0): + - abseil/base/config + - abseil/container/common + - abseil/hash/hash + - abseil/meta/type_traits + - abseil/strings/cord + - abseil/strings/strings + - abseil/xcprivacy + - abseil/container/hash_policy_traits (1.20240722.0): + - abseil/container/common_policy_traits + - abseil/meta/type_traits + - abseil/xcprivacy + - abseil/container/hashtable_debug_hooks (1.20240722.0): + - abseil/base/config + - abseil/xcprivacy + - abseil/container/hashtablez_sampler (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/no_destructor + - abseil/base/raw_logging_internal + - abseil/debugging/stacktrace + - abseil/memory/memory + - abseil/profiling/exponential_biased + - abseil/profiling/sample_recorder + - abseil/synchronization/synchronization + - abseil/time/time + - abseil/utility/utility + - abseil/xcprivacy + - abseil/container/inlined_vector (1.20240722.0): + - abseil/algorithm/algorithm + - abseil/base/core_headers + - abseil/base/throw_delegate + - abseil/container/inlined_vector_internal + - abseil/memory/memory + - abseil/meta/type_traits + - abseil/xcprivacy + - abseil/container/inlined_vector_internal (1.20240722.0): + - abseil/base/base_internal + - abseil/base/config + - abseil/base/core_headers + - abseil/container/compressed_tuple + - abseil/memory/memory + - abseil/meta/type_traits + - abseil/types/span + - abseil/xcprivacy + - abseil/container/layout (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/debugging/demangle_internal + - abseil/meta/type_traits + - abseil/strings/strings + - abseil/types/span + - abseil/utility/utility + - abseil/xcprivacy + - abseil/container/raw_hash_map (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/throw_delegate + - abseil/container/container_memory + - abseil/container/raw_hash_set + - abseil/xcprivacy + - abseil/container/raw_hash_set (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/dynamic_annotations + - abseil/base/endian + - abseil/base/prefetch + - abseil/base/raw_logging_internal + - abseil/container/common + - abseil/container/compressed_tuple + - abseil/container/container_memory + - abseil/container/hash_policy_traits + - abseil/container/hashtable_debug_hooks + - abseil/container/hashtablez_sampler + - abseil/hash/hash + - abseil/memory/memory + - abseil/meta/type_traits + - abseil/numeric/bits + - abseil/utility/utility + - abseil/xcprivacy + - abseil/crc/cpu_detect (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/xcprivacy + - abseil/crc/crc32c (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/endian + - abseil/base/prefetch + - abseil/crc/cpu_detect + - abseil/crc/crc_internal + - abseil/crc/non_temporal_memcpy + - abseil/strings/str_format + - abseil/strings/strings + - abseil/xcprivacy + - abseil/crc/crc_cord_state (1.20240722.0): + - abseil/base/config + - abseil/base/no_destructor + - abseil/crc/crc32c + - abseil/numeric/bits + - abseil/xcprivacy + - abseil/crc/crc_internal (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/endian + - abseil/base/prefetch + - abseil/base/raw_logging_internal + - abseil/crc/cpu_detect + - abseil/memory/memory + - abseil/numeric/bits + - abseil/xcprivacy + - abseil/crc/non_temporal_arm_intrinsics (1.20240722.0): + - abseil/base/config + - abseil/xcprivacy + - abseil/crc/non_temporal_memcpy (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/crc/non_temporal_arm_intrinsics + - abseil/xcprivacy + - abseil/debugging/bounded_utf8_length_sequence (1.20240722.0): + - abseil/base/config + - abseil/numeric/bits + - abseil/xcprivacy + - abseil/debugging/debugging_internal (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/dynamic_annotations + - abseil/base/errno_saver + - abseil/base/raw_logging_internal + - abseil/xcprivacy + - abseil/debugging/decode_rust_punycode (1.20240722.0): + - abseil/base/config + - abseil/base/nullability + - abseil/debugging/bounded_utf8_length_sequence + - abseil/debugging/utf8_for_code_point + - abseil/xcprivacy + - abseil/debugging/demangle_internal (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/nullability + - abseil/debugging/demangle_rust + - abseil/numeric/bits + - abseil/xcprivacy + - abseil/debugging/demangle_rust (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/debugging/decode_rust_punycode + - abseil/xcprivacy + - abseil/debugging/examine_stack (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/raw_logging_internal + - abseil/debugging/stacktrace + - abseil/debugging/symbolize + - abseil/xcprivacy + - abseil/debugging/stacktrace (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/dynamic_annotations + - abseil/base/raw_logging_internal + - abseil/debugging/debugging_internal + - abseil/xcprivacy + - abseil/debugging/symbolize (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/dynamic_annotations + - abseil/base/malloc_internal + - abseil/base/raw_logging_internal + - abseil/debugging/debugging_internal + - abseil/debugging/demangle_internal + - abseil/strings/strings + - abseil/xcprivacy + - abseil/debugging/utf8_for_code_point (1.20240722.0): + - abseil/base/config + - abseil/xcprivacy + - abseil/flags/commandlineflag (1.20240722.0): + - abseil/base/config + - abseil/base/fast_type_id + - abseil/flags/commandlineflag_internal + - abseil/strings/strings + - abseil/types/optional + - abseil/xcprivacy + - abseil/flags/commandlineflag_internal (1.20240722.0): + - abseil/base/config + - abseil/base/fast_type_id + - abseil/xcprivacy + - abseil/flags/config (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/flags/path_util + - abseil/flags/program_name + - abseil/strings/strings + - abseil/synchronization/synchronization + - abseil/xcprivacy + - abseil/flags/flag (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/flags/commandlineflag + - abseil/flags/config + - abseil/flags/flag_internal + - abseil/flags/reflection + - abseil/strings/strings + - abseil/xcprivacy + - abseil/flags/flag_internal (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/dynamic_annotations + - abseil/flags/commandlineflag + - abseil/flags/commandlineflag_internal + - abseil/flags/config + - abseil/flags/marshalling + - abseil/flags/reflection + - abseil/memory/memory + - abseil/meta/type_traits + - abseil/strings/strings + - abseil/synchronization/synchronization + - abseil/utility/utility + - abseil/xcprivacy + - abseil/flags/marshalling (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/log_severity + - abseil/numeric/int128 + - abseil/strings/str_format + - abseil/strings/strings + - abseil/types/optional + - abseil/xcprivacy + - abseil/flags/path_util (1.20240722.0): + - abseil/base/config + - abseil/strings/strings + - abseil/xcprivacy + - abseil/flags/private_handle_accessor (1.20240722.0): + - abseil/base/config + - abseil/flags/commandlineflag + - abseil/flags/commandlineflag_internal + - abseil/strings/strings + - abseil/xcprivacy + - abseil/flags/program_name (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/flags/path_util + - abseil/strings/strings + - abseil/synchronization/synchronization + - abseil/xcprivacy + - abseil/flags/reflection (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/no_destructor + - abseil/container/flat_hash_map + - abseil/flags/commandlineflag + - abseil/flags/commandlineflag_internal + - abseil/flags/config + - abseil/flags/private_handle_accessor + - abseil/strings/strings + - abseil/synchronization/synchronization + - abseil/xcprivacy + - abseil/functional/any_invocable (1.20240722.0): + - abseil/base/base_internal + - abseil/base/config + - abseil/base/core_headers + - abseil/meta/type_traits + - abseil/utility/utility + - abseil/xcprivacy + - abseil/functional/bind_front (1.20240722.0): + - abseil/base/base_internal + - abseil/container/compressed_tuple + - abseil/meta/type_traits + - abseil/utility/utility + - abseil/xcprivacy + - abseil/functional/function_ref (1.20240722.0): + - abseil/base/base_internal + - abseil/base/core_headers + - abseil/functional/any_invocable + - abseil/meta/type_traits + - abseil/xcprivacy + - abseil/hash/city (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/endian + - abseil/xcprivacy + - abseil/hash/hash (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/endian + - abseil/container/fixed_array + - abseil/functional/function_ref + - abseil/hash/city + - abseil/hash/low_level_hash + - abseil/meta/type_traits + - abseil/numeric/bits + - abseil/numeric/int128 + - abseil/strings/strings + - abseil/types/optional + - abseil/types/variant + - abseil/utility/utility + - abseil/xcprivacy + - abseil/hash/low_level_hash (1.20240722.0): + - abseil/base/config + - abseil/base/endian + - abseil/base/prefetch + - abseil/numeric/int128 + - abseil/xcprivacy + - abseil/log/absl_check (1.20240722.0): + - abseil/log/internal/check_impl + - abseil/xcprivacy + - abseil/log/absl_log (1.20240722.0): + - abseil/log/internal/log_impl + - abseil/xcprivacy + - abseil/log/absl_vlog_is_on (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/log/internal/vlog_config + - abseil/strings/strings + - abseil/xcprivacy + - abseil/log/check (1.20240722.0): + - abseil/log/internal/check_impl + - abseil/log/internal/check_op + - abseil/log/internal/conditions + - abseil/log/internal/log_message + - abseil/log/internal/strip + - abseil/xcprivacy + - abseil/log/globals (1.20240722.0): + - abseil/base/atomic_hook + - abseil/base/config + - abseil/base/core_headers + - abseil/base/log_severity + - abseil/base/raw_logging_internal + - abseil/hash/hash + - abseil/log/internal/vlog_config + - abseil/strings/strings + - abseil/xcprivacy + - abseil/log/internal/append_truncated (1.20240722.0): + - abseil/base/config + - abseil/strings/strings + - abseil/types/span + - abseil/xcprivacy + - abseil/log/internal/check_impl (1.20240722.0): + - abseil/base/core_headers + - abseil/log/internal/check_op + - abseil/log/internal/conditions + - abseil/log/internal/log_message + - abseil/log/internal/strip + - abseil/xcprivacy + - abseil/log/internal/check_op (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/log/internal/nullguard + - abseil/log/internal/nullstream + - abseil/log/internal/strip + - abseil/strings/strings + - abseil/xcprivacy + - abseil/log/internal/conditions (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/log/internal/voidify + - abseil/xcprivacy + - abseil/log/internal/config (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/xcprivacy + - abseil/log/internal/fnmatch (1.20240722.0): + - abseil/base/config + - abseil/strings/strings + - abseil/xcprivacy + - abseil/log/internal/format (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/log_severity + - abseil/log/internal/append_truncated + - abseil/log/internal/config + - abseil/log/internal/globals + - abseil/strings/str_format + - abseil/strings/strings + - abseil/time/time + - abseil/types/span + - abseil/xcprivacy + - abseil/log/internal/globals (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/log_severity + - abseil/base/raw_logging_internal + - abseil/strings/strings + - abseil/time/time + - abseil/xcprivacy + - abseil/log/internal/log_impl (1.20240722.0): + - abseil/log/absl_vlog_is_on + - abseil/log/internal/conditions + - abseil/log/internal/log_message + - abseil/log/internal/strip + - abseil/xcprivacy + - abseil/log/internal/log_message (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/errno_saver + - abseil/base/log_severity + - abseil/base/raw_logging_internal + - abseil/base/strerror + - abseil/container/inlined_vector + - abseil/debugging/examine_stack + - abseil/log/globals + - abseil/log/internal/append_truncated + - abseil/log/internal/format + - abseil/log/internal/globals + - abseil/log/internal/log_sink_set + - abseil/log/internal/nullguard + - abseil/log/internal/proto + - abseil/log/log_entry + - abseil/log/log_sink + - abseil/log/log_sink_registry + - abseil/memory/memory + - abseil/strings/strings + - abseil/time/time + - abseil/types/span + - abseil/xcprivacy + - abseil/log/internal/log_sink_set (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/log_severity + - abseil/base/no_destructor + - abseil/base/raw_logging_internal + - abseil/cleanup/cleanup + - abseil/log/globals + - abseil/log/internal/config + - abseil/log/internal/globals + - abseil/log/log_entry + - abseil/log/log_sink + - abseil/strings/strings + - abseil/synchronization/synchronization + - abseil/types/span + - abseil/xcprivacy + - abseil/log/internal/nullguard (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/xcprivacy + - abseil/log/internal/nullstream (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/log_severity + - abseil/strings/strings + - abseil/xcprivacy + - abseil/log/internal/proto (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/strings/strings + - abseil/types/span + - abseil/xcprivacy + - abseil/log/internal/strip (1.20240722.0): + - abseil/base/core_headers + - abseil/base/log_severity + - abseil/log/internal/log_message + - abseil/log/internal/nullstream + - abseil/xcprivacy + - abseil/log/internal/vlog_config (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/no_destructor + - abseil/log/internal/fnmatch + - abseil/memory/memory + - abseil/strings/strings + - abseil/synchronization/synchronization + - abseil/types/optional + - abseil/xcprivacy + - abseil/log/internal/voidify (1.20240722.0): + - abseil/base/config + - abseil/xcprivacy + - abseil/log/log (1.20240722.0): + - abseil/log/internal/log_impl + - abseil/log/vlog_is_on + - abseil/xcprivacy + - abseil/log/log_entry (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/log_severity + - abseil/log/internal/config + - abseil/strings/strings + - abseil/time/time + - abseil/types/span + - abseil/xcprivacy + - abseil/log/log_sink (1.20240722.0): + - abseil/base/config + - abseil/log/log_entry + - abseil/xcprivacy + - abseil/log/log_sink_registry (1.20240722.0): + - abseil/base/config + - abseil/log/internal/log_sink_set + - abseil/log/log_sink + - abseil/xcprivacy + - abseil/log/vlog_is_on (1.20240722.0): + - abseil/log/absl_vlog_is_on + - abseil/xcprivacy + - abseil/memory (1.20240722.0): + - abseil/memory/memory (= 1.20240722.0) + - abseil/memory/memory (1.20240722.0): + - abseil/base/core_headers + - abseil/meta/type_traits + - abseil/xcprivacy + - abseil/meta (1.20240722.0): + - abseil/meta/type_traits (= 1.20240722.0) + - abseil/meta/type_traits (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/xcprivacy + - abseil/numeric/bits (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/xcprivacy + - abseil/numeric/int128 (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/numeric/bits + - abseil/types/compare + - abseil/xcprivacy + - abseil/numeric/representation (1.20240722.0): + - abseil/base/config + - abseil/xcprivacy + - abseil/profiling/exponential_biased (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/xcprivacy + - abseil/profiling/sample_recorder (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/synchronization/synchronization + - abseil/time/time + - abseil/xcprivacy + - abseil/random/bit_gen_ref (1.20240722.0): + - abseil/base/core_headers + - abseil/base/fast_type_id + - abseil/meta/type_traits + - abseil/random/internal/distribution_caller + - abseil/random/internal/fast_uniform_bits + - abseil/random/random + - abseil/xcprivacy + - abseil/random/distributions (1.20240722.0): + - abseil/base/base_internal + - abseil/base/config + - abseil/base/core_headers + - abseil/meta/type_traits + - abseil/numeric/bits + - abseil/random/internal/distribution_caller + - abseil/random/internal/fast_uniform_bits + - abseil/random/internal/fastmath + - abseil/random/internal/generate_real + - abseil/random/internal/iostream_state_saver + - abseil/random/internal/traits + - abseil/random/internal/uniform_helper + - abseil/random/internal/wide_multiply + - abseil/strings/strings + - abseil/xcprivacy + - abseil/random/internal/distribution_caller (1.20240722.0): + - abseil/base/config + - abseil/base/fast_type_id + - abseil/utility/utility + - abseil/xcprivacy + - abseil/random/internal/fast_uniform_bits (1.20240722.0): + - abseil/base/config + - abseil/meta/type_traits + - abseil/random/internal/traits + - abseil/xcprivacy + - abseil/random/internal/fastmath (1.20240722.0): + - abseil/numeric/bits + - abseil/xcprivacy + - abseil/random/internal/generate_real (1.20240722.0): + - abseil/meta/type_traits + - abseil/numeric/bits + - abseil/random/internal/fastmath + - abseil/random/internal/traits + - abseil/xcprivacy + - abseil/random/internal/iostream_state_saver (1.20240722.0): + - abseil/meta/type_traits + - abseil/numeric/int128 + - abseil/xcprivacy + - abseil/random/internal/nonsecure_base (1.20240722.0): + - abseil/base/core_headers + - abseil/container/inlined_vector + - abseil/meta/type_traits + - abseil/random/internal/pool_urbg + - abseil/random/internal/salted_seed_seq + - abseil/random/internal/seed_material + - abseil/types/span + - abseil/xcprivacy + - abseil/random/internal/pcg_engine (1.20240722.0): + - abseil/base/config + - abseil/meta/type_traits + - abseil/numeric/bits + - abseil/numeric/int128 + - abseil/random/internal/fastmath + - abseil/random/internal/iostream_state_saver + - abseil/xcprivacy + - abseil/random/internal/platform (1.20240722.0): + - abseil/base/config + - abseil/xcprivacy + - abseil/random/internal/pool_urbg (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/endian + - abseil/base/raw_logging_internal + - abseil/random/internal/randen + - abseil/random/internal/seed_material + - abseil/random/internal/traits + - abseil/random/seed_gen_exception + - abseil/types/span + - abseil/xcprivacy + - abseil/random/internal/randen (1.20240722.0): + - abseil/base/raw_logging_internal + - abseil/random/internal/platform + - abseil/random/internal/randen_hwaes + - abseil/random/internal/randen_slow + - abseil/xcprivacy + - abseil/random/internal/randen_engine (1.20240722.0): + - abseil/base/endian + - abseil/meta/type_traits + - abseil/random/internal/iostream_state_saver + - abseil/random/internal/randen + - abseil/xcprivacy + - abseil/random/internal/randen_hwaes (1.20240722.0): + - abseil/base/config + - abseil/random/internal/platform + - abseil/random/internal/randen_hwaes_impl + - abseil/xcprivacy + - abseil/random/internal/randen_hwaes_impl (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/numeric/int128 + - abseil/random/internal/platform + - abseil/xcprivacy + - abseil/random/internal/randen_slow (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/endian + - abseil/numeric/int128 + - abseil/random/internal/platform + - abseil/xcprivacy + - abseil/random/internal/salted_seed_seq (1.20240722.0): + - abseil/container/inlined_vector + - abseil/meta/type_traits + - abseil/random/internal/seed_material + - abseil/types/optional + - abseil/types/span + - abseil/xcprivacy + - abseil/random/internal/seed_material (1.20240722.0): + - abseil/base/core_headers + - abseil/base/dynamic_annotations + - abseil/base/raw_logging_internal + - abseil/random/internal/fast_uniform_bits + - abseil/strings/strings + - abseil/types/optional + - abseil/types/span + - abseil/xcprivacy + - abseil/random/internal/traits (1.20240722.0): + - abseil/base/config + - abseil/numeric/bits + - abseil/numeric/int128 + - abseil/xcprivacy + - abseil/random/internal/uniform_helper (1.20240722.0): + - abseil/base/config + - abseil/meta/type_traits + - abseil/random/internal/traits + - abseil/xcprivacy + - abseil/random/internal/wide_multiply (1.20240722.0): + - abseil/base/config + - abseil/numeric/bits + - abseil/numeric/int128 + - abseil/random/internal/traits + - abseil/xcprivacy + - abseil/random/random (1.20240722.0): + - abseil/random/distributions + - abseil/random/internal/nonsecure_base + - abseil/random/internal/pcg_engine + - abseil/random/internal/pool_urbg + - abseil/random/internal/randen_engine + - abseil/random/seed_sequences + - abseil/xcprivacy + - abseil/random/seed_gen_exception (1.20240722.0): + - abseil/base/config + - abseil/xcprivacy + - abseil/random/seed_sequences (1.20240722.0): + - abseil/base/config + - abseil/base/nullability + - abseil/random/internal/pool_urbg + - abseil/random/internal/salted_seed_seq + - abseil/random/internal/seed_material + - abseil/random/seed_gen_exception + - abseil/strings/string_view + - abseil/types/span + - abseil/xcprivacy + - abseil/status/status (1.20240722.0): + - abseil/base/atomic_hook + - abseil/base/config + - abseil/base/core_headers + - abseil/base/no_destructor + - abseil/base/nullability + - abseil/base/raw_logging_internal + - abseil/base/strerror + - abseil/container/inlined_vector + - abseil/debugging/stacktrace + - abseil/debugging/symbolize + - abseil/functional/function_ref + - abseil/memory/memory + - abseil/strings/cord + - abseil/strings/str_format + - abseil/strings/strings + - abseil/types/optional + - abseil/types/span + - abseil/xcprivacy + - abseil/status/statusor (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/nullability + - abseil/base/raw_logging_internal + - abseil/meta/type_traits + - abseil/status/status + - abseil/strings/has_ostream_operator + - abseil/strings/str_format + - abseil/strings/strings + - abseil/types/variant + - abseil/utility/utility + - abseil/xcprivacy + - abseil/strings/charset (1.20240722.0): + - abseil/base/core_headers + - abseil/strings/string_view + - abseil/xcprivacy + - abseil/strings/cord (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/endian + - abseil/base/nullability + - abseil/base/raw_logging_internal + - abseil/container/inlined_vector + - abseil/crc/crc32c + - abseil/crc/crc_cord_state + - abseil/functional/function_ref + - abseil/meta/type_traits + - abseil/numeric/bits + - abseil/strings/cord_internal + - abseil/strings/cordz_functions + - abseil/strings/cordz_info + - abseil/strings/cordz_statistics + - abseil/strings/cordz_update_scope + - abseil/strings/cordz_update_tracker + - abseil/strings/internal + - abseil/strings/strings + - abseil/types/compare + - abseil/types/optional + - abseil/types/span + - abseil/xcprivacy + - abseil/strings/cord_internal (1.20240722.0): + - abseil/base/base_internal + - abseil/base/config + - abseil/base/core_headers + - abseil/base/endian + - abseil/base/raw_logging_internal + - abseil/base/throw_delegate + - abseil/container/compressed_tuple + - abseil/container/container_memory + - abseil/container/inlined_vector + - abseil/container/layout + - abseil/crc/crc_cord_state + - abseil/functional/function_ref + - abseil/meta/type_traits + - abseil/strings/strings + - abseil/types/span + - abseil/xcprivacy + - abseil/strings/cordz_functions (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/raw_logging_internal + - abseil/profiling/exponential_biased + - abseil/xcprivacy + - abseil/strings/cordz_handle (1.20240722.0): + - abseil/base/config + - abseil/base/no_destructor + - abseil/base/raw_logging_internal + - abseil/synchronization/synchronization + - abseil/xcprivacy + - abseil/strings/cordz_info (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/raw_logging_internal + - abseil/container/inlined_vector + - abseil/debugging/stacktrace + - abseil/strings/cord_internal + - abseil/strings/cordz_functions + - abseil/strings/cordz_handle + - abseil/strings/cordz_statistics + - abseil/strings/cordz_update_tracker + - abseil/synchronization/synchronization + - abseil/time/time + - abseil/types/span + - abseil/xcprivacy + - abseil/strings/cordz_statistics (1.20240722.0): + - abseil/base/config + - abseil/strings/cordz_update_tracker + - abseil/xcprivacy + - abseil/strings/cordz_update_scope (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/strings/cord_internal + - abseil/strings/cordz_info + - abseil/strings/cordz_update_tracker + - abseil/xcprivacy + - abseil/strings/cordz_update_tracker (1.20240722.0): + - abseil/base/config + - abseil/xcprivacy + - abseil/strings/has_ostream_operator (1.20240722.0): + - abseil/base/config + - abseil/xcprivacy + - abseil/strings/internal (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/endian + - abseil/base/raw_logging_internal + - abseil/meta/type_traits + - abseil/xcprivacy + - abseil/strings/str_format (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/nullability + - abseil/strings/str_format_internal + - abseil/strings/string_view + - abseil/types/span + - abseil/xcprivacy + - abseil/strings/str_format_internal (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/container/fixed_array + - abseil/container/inlined_vector + - abseil/functional/function_ref + - abseil/meta/type_traits + - abseil/numeric/bits + - abseil/numeric/int128 + - abseil/numeric/representation + - abseil/strings/strings + - abseil/types/optional + - abseil/types/span + - abseil/utility/utility + - abseil/xcprivacy + - abseil/strings/string_view (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/nullability + - abseil/base/throw_delegate + - abseil/xcprivacy + - abseil/strings/strings (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/endian + - abseil/base/nullability + - abseil/base/raw_logging_internal + - abseil/base/throw_delegate + - abseil/memory/memory + - abseil/meta/type_traits + - abseil/numeric/bits + - abseil/numeric/int128 + - abseil/strings/charset + - abseil/strings/internal + - abseil/strings/string_view + - abseil/xcprivacy + - abseil/synchronization/graphcycles_internal (1.20240722.0): + - abseil/base/base + - abseil/base/base_internal + - abseil/base/config + - abseil/base/core_headers + - abseil/base/malloc_internal + - abseil/base/raw_logging_internal + - abseil/xcprivacy + - abseil/synchronization/kernel_timeout_internal (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/raw_logging_internal + - abseil/time/time + - abseil/xcprivacy + - abseil/synchronization/synchronization (1.20240722.0): + - abseil/base/atomic_hook + - abseil/base/base + - abseil/base/base_internal + - abseil/base/config + - abseil/base/core_headers + - abseil/base/dynamic_annotations + - abseil/base/malloc_internal + - abseil/base/raw_logging_internal + - abseil/debugging/stacktrace + - abseil/debugging/symbolize + - abseil/synchronization/graphcycles_internal + - abseil/synchronization/kernel_timeout_internal + - abseil/time/time + - abseil/xcprivacy + - abseil/time (1.20240722.0): + - abseil/time/internal (= 1.20240722.0) + - abseil/time/time (= 1.20240722.0) + - abseil/time/internal (1.20240722.0): + - abseil/time/internal/cctz (= 1.20240722.0) + - abseil/time/internal/cctz (1.20240722.0): + - abseil/time/internal/cctz/civil_time (= 1.20240722.0) + - abseil/time/internal/cctz/time_zone (= 1.20240722.0) + - abseil/time/internal/cctz/civil_time (1.20240722.0): + - abseil/base/config + - abseil/xcprivacy + - abseil/time/internal/cctz/time_zone (1.20240722.0): + - abseil/base/config + - abseil/time/internal/cctz/civil_time + - abseil/xcprivacy + - abseil/time/time (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/raw_logging_internal + - abseil/numeric/int128 + - abseil/strings/strings + - abseil/time/internal/cctz/civil_time + - abseil/time/internal/cctz/time_zone + - abseil/types/optional + - abseil/xcprivacy + - abseil/types (1.20240722.0): + - abseil/types/any (= 1.20240722.0) + - abseil/types/bad_any_cast (= 1.20240722.0) + - abseil/types/bad_any_cast_impl (= 1.20240722.0) + - abseil/types/bad_optional_access (= 1.20240722.0) + - abseil/types/bad_variant_access (= 1.20240722.0) + - abseil/types/compare (= 1.20240722.0) + - abseil/types/optional (= 1.20240722.0) + - abseil/types/span (= 1.20240722.0) + - abseil/types/variant (= 1.20240722.0) + - abseil/types/any (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/fast_type_id + - abseil/meta/type_traits + - abseil/types/bad_any_cast + - abseil/utility/utility + - abseil/xcprivacy + - abseil/types/bad_any_cast (1.20240722.0): + - abseil/base/config + - abseil/types/bad_any_cast_impl + - abseil/xcprivacy + - abseil/types/bad_any_cast_impl (1.20240722.0): + - abseil/base/config + - abseil/base/raw_logging_internal + - abseil/xcprivacy + - abseil/types/bad_optional_access (1.20240722.0): + - abseil/base/config + - abseil/base/raw_logging_internal + - abseil/xcprivacy + - abseil/types/bad_variant_access (1.20240722.0): + - abseil/base/config + - abseil/base/raw_logging_internal + - abseil/xcprivacy + - abseil/types/compare (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/meta/type_traits + - abseil/xcprivacy + - abseil/types/optional (1.20240722.0): + - abseil/base/base_internal + - abseil/base/config + - abseil/base/core_headers + - abseil/base/nullability + - abseil/memory/memory + - abseil/meta/type_traits + - abseil/types/bad_optional_access + - abseil/utility/utility + - abseil/xcprivacy + - abseil/types/span (1.20240722.0): + - abseil/algorithm/algorithm + - abseil/base/core_headers + - abseil/base/nullability + - abseil/base/throw_delegate + - abseil/meta/type_traits + - abseil/xcprivacy + - abseil/types/variant (1.20240722.0): + - abseil/base/base_internal + - abseil/base/config + - abseil/base/core_headers + - abseil/meta/type_traits + - abseil/types/bad_variant_access + - abseil/utility/utility + - abseil/xcprivacy + - abseil/utility/utility (1.20240722.0): + - abseil/base/base_internal + - abseil/base/config + - abseil/meta/type_traits + - abseil/xcprivacy + - abseil/xcprivacy (1.20240722.0) + - AppAuth (2.0.0): + - AppAuth/Core (= 2.0.0) + - AppAuth/ExternalUserAgent (= 2.0.0) + - AppAuth/Core (2.0.0) + - AppAuth/ExternalUserAgent (2.0.0): + - AppAuth/Core + - AppCheckCore (11.2.0): + - GoogleUtilities/Environment (~> 8.0) + - GoogleUtilities/UserDefaults (~> 8.0) + - PromisesObjC (~> 2.4) + - BoringSSL-GRPC (0.0.37): + - BoringSSL-GRPC/Implementation (= 0.0.37) + - BoringSSL-GRPC/Interface (= 0.0.37) + - BoringSSL-GRPC/Implementation (0.0.37): + - BoringSSL-GRPC/Interface (= 0.0.37) + - BoringSSL-GRPC/Interface (0.0.37) + - cloud_firestore (6.0.3): + - Firebase/Firestore (= 12.4.0) + - firebase_core + - Flutter + - Firebase/Auth (12.4.0): + - Firebase/CoreOnly + - FirebaseAuth (~> 12.4.0) + - Firebase/CoreOnly (12.4.0): + - FirebaseCore (~> 12.4.0) + - Firebase/Firestore (12.4.0): + - Firebase/CoreOnly + - FirebaseFirestore (~> 12.4.0) + - Firebase/RemoteConfig (12.4.0): + - Firebase/CoreOnly + - FirebaseRemoteConfig (~> 12.4.0) + - Firebase/Storage (12.4.0): + - Firebase/CoreOnly + - FirebaseStorage (~> 12.4.0) + - firebase_analytics (12.0.3): + - firebase_core + - FirebaseAnalytics (= 12.4.0) + - Flutter + - firebase_auth (6.1.1): + - Firebase/Auth (= 12.4.0) + - firebase_core + - Flutter + - firebase_core (4.2.1): + - Firebase/CoreOnly (= 12.4.0) + - Flutter + - firebase_remote_config (6.1.2): + - Firebase/RemoteConfig (= 12.4.0) + - firebase_core + - Flutter + - firebase_storage (13.0.3): + - Firebase/Storage (= 12.4.0) + - firebase_core + - Flutter + - FirebaseABTesting (12.4.0): + - FirebaseCore (~> 12.4.0) + - FirebaseAnalytics (12.4.0): + - FirebaseAnalytics/Default (= 12.4.0) + - FirebaseCore (~> 12.4.0) + - FirebaseInstallations (~> 12.4.0) + - GoogleUtilities/AppDelegateSwizzler (~> 8.1) + - GoogleUtilities/MethodSwizzler (~> 8.1) + - GoogleUtilities/Network (~> 8.1) + - "GoogleUtilities/NSData+zlib (~> 8.1)" + - nanopb (~> 3.30910.0) + - FirebaseAnalytics/Default (12.4.0): + - FirebaseCore (~> 12.4.0) + - FirebaseInstallations (~> 12.4.0) + - GoogleAppMeasurement/Default (= 12.4.0) + - GoogleUtilities/AppDelegateSwizzler (~> 8.1) + - GoogleUtilities/MethodSwizzler (~> 8.1) + - GoogleUtilities/Network (~> 8.1) + - "GoogleUtilities/NSData+zlib (~> 8.1)" + - nanopb (~> 3.30910.0) + - FirebaseAppCheckInterop (12.4.0) + - FirebaseAuth (12.4.0): + - FirebaseAppCheckInterop (~> 12.4.0) + - FirebaseAuthInterop (~> 12.4.0) + - FirebaseCore (~> 12.4.0) + - FirebaseCoreExtension (~> 12.4.0) + - GoogleUtilities/AppDelegateSwizzler (~> 8.1) + - GoogleUtilities/Environment (~> 8.1) + - GTMSessionFetcher/Core (< 6.0, >= 3.4) + - RecaptchaInterop (~> 101.0) + - FirebaseAuthInterop (12.4.0) + - FirebaseCore (12.4.0): + - FirebaseCoreInternal (~> 12.4.0) + - GoogleUtilities/Environment (~> 8.1) + - GoogleUtilities/Logger (~> 8.1) + - FirebaseCoreExtension (12.4.0): + - FirebaseCore (~> 12.4.0) + - FirebaseCoreInternal (12.4.0): + - "GoogleUtilities/NSData+zlib (~> 8.1)" + - FirebaseFirestore (12.4.0): + - FirebaseCore (~> 12.4.0) + - FirebaseCoreExtension (~> 12.4.0) + - FirebaseFirestoreInternal (~> 12.4.0) + - FirebaseSharedSwift (~> 12.4.0) + - FirebaseFirestoreInternal (12.4.0): + - abseil/algorithm (~> 1.20240722.0) + - abseil/base (~> 1.20240722.0) + - abseil/container/flat_hash_map (~> 1.20240722.0) + - abseil/memory (~> 1.20240722.0) + - abseil/meta (~> 1.20240722.0) + - abseil/strings/strings (~> 1.20240722.0) + - abseil/time (~> 1.20240722.0) + - abseil/types (~> 1.20240722.0) + - FirebaseAppCheckInterop (~> 12.4.0) + - FirebaseCore (~> 12.4.0) + - "gRPC-C++ (~> 1.69.0)" + - gRPC-Core (~> 1.69.0) + - leveldb-library (~> 1.22) + - nanopb (~> 3.30910.0) + - FirebaseInstallations (12.4.0): + - FirebaseCore (~> 12.4.0) + - GoogleUtilities/Environment (~> 8.1) + - GoogleUtilities/UserDefaults (~> 8.1) + - PromisesObjC (~> 2.4) + - FirebaseRemoteConfig (12.4.0): + - FirebaseABTesting (~> 12.4.0) + - FirebaseCore (~> 12.4.0) + - FirebaseInstallations (~> 12.4.0) + - FirebaseRemoteConfigInterop (~> 12.4.0) + - FirebaseSharedSwift (~> 12.4.0) + - GoogleUtilities/Environment (~> 8.1) + - "GoogleUtilities/NSData+zlib (~> 8.1)" + - FirebaseRemoteConfigInterop (12.4.0) + - FirebaseSharedSwift (12.4.0) + - FirebaseStorage (12.4.0): + - FirebaseAppCheckInterop (~> 12.4.0) + - FirebaseAuthInterop (~> 12.4.0) + - FirebaseCore (~> 12.4.0) + - FirebaseCoreExtension (~> 12.4.0) + - GoogleUtilities/Environment (~> 8.1) + - GTMSessionFetcher/Core (< 6.0, >= 3.4) + - Flutter (1.0.0) + - google_sign_in_ios (0.0.1): + - Flutter + - FlutterMacOS + - GoogleSignIn (~> 9.0) + - GTMSessionFetcher (>= 3.4.0) + - GoogleAdsOnDeviceConversion (3.1.0): + - GoogleUtilities/Environment (~> 8.1) + - GoogleUtilities/Logger (~> 8.1) + - GoogleUtilities/Network (~> 8.1) + - nanopb (~> 3.30910.0) + - GoogleAppMeasurement/Core (12.4.0): + - GoogleUtilities/AppDelegateSwizzler (~> 8.1) + - GoogleUtilities/MethodSwizzler (~> 8.1) + - GoogleUtilities/Network (~> 8.1) + - "GoogleUtilities/NSData+zlib (~> 8.1)" + - nanopb (~> 3.30910.0) + - GoogleAppMeasurement/Default (12.4.0): + - GoogleAdsOnDeviceConversion (~> 3.1.0) + - GoogleAppMeasurement/Core (= 12.4.0) + - GoogleAppMeasurement/IdentitySupport (= 12.4.0) + - GoogleUtilities/AppDelegateSwizzler (~> 8.1) + - GoogleUtilities/MethodSwizzler (~> 8.1) + - GoogleUtilities/Network (~> 8.1) + - "GoogleUtilities/NSData+zlib (~> 8.1)" + - nanopb (~> 3.30910.0) + - GoogleAppMeasurement/IdentitySupport (12.4.0): + - GoogleAppMeasurement/Core (= 12.4.0) + - GoogleUtilities/AppDelegateSwizzler (~> 8.1) + - GoogleUtilities/MethodSwizzler (~> 8.1) + - GoogleUtilities/Network (~> 8.1) + - "GoogleUtilities/NSData+zlib (~> 8.1)" + - nanopb (~> 3.30910.0) + - GoogleSignIn (9.0.0): + - AppAuth (~> 2.0) + - AppCheckCore (~> 11.0) + - GTMAppAuth (~> 5.0) + - GTMSessionFetcher/Core (~> 3.3) + - GoogleUtilities/AppDelegateSwizzler (8.1.0): + - GoogleUtilities/Environment + - GoogleUtilities/Logger + - GoogleUtilities/Network + - GoogleUtilities/Privacy + - GoogleUtilities/Environment (8.1.0): + - GoogleUtilities/Privacy + - GoogleUtilities/Logger (8.1.0): + - GoogleUtilities/Environment + - GoogleUtilities/Privacy + - GoogleUtilities/MethodSwizzler (8.1.0): + - GoogleUtilities/Logger + - GoogleUtilities/Privacy + - GoogleUtilities/Network (8.1.0): + - GoogleUtilities/Logger + - "GoogleUtilities/NSData+zlib" + - GoogleUtilities/Privacy + - GoogleUtilities/Reachability + - "GoogleUtilities/NSData+zlib (8.1.0)": + - GoogleUtilities/Privacy + - GoogleUtilities/Privacy (8.1.0) + - GoogleUtilities/Reachability (8.1.0): + - GoogleUtilities/Logger + - GoogleUtilities/Privacy + - GoogleUtilities/UserDefaults (8.1.0): + - GoogleUtilities/Logger + - GoogleUtilities/Privacy + - "gRPC-C++ (1.69.0)": + - "gRPC-C++/Implementation (= 1.69.0)" + - "gRPC-C++/Interface (= 1.69.0)" + - "gRPC-C++/Implementation (1.69.0)": + - abseil/algorithm/container (~> 1.20240722.0) + - abseil/base/base (~> 1.20240722.0) + - abseil/base/config (~> 1.20240722.0) + - abseil/base/core_headers (~> 1.20240722.0) + - abseil/base/log_severity (~> 1.20240722.0) + - abseil/base/no_destructor (~> 1.20240722.0) + - abseil/cleanup/cleanup (~> 1.20240722.0) + - abseil/container/flat_hash_map (~> 1.20240722.0) + - abseil/container/flat_hash_set (~> 1.20240722.0) + - abseil/container/inlined_vector (~> 1.20240722.0) + - abseil/flags/flag (~> 1.20240722.0) + - abseil/flags/marshalling (~> 1.20240722.0) + - abseil/functional/any_invocable (~> 1.20240722.0) + - abseil/functional/bind_front (~> 1.20240722.0) + - abseil/functional/function_ref (~> 1.20240722.0) + - abseil/hash/hash (~> 1.20240722.0) + - abseil/log/absl_check (~> 1.20240722.0) + - abseil/log/absl_log (~> 1.20240722.0) + - abseil/log/check (~> 1.20240722.0) + - abseil/log/globals (~> 1.20240722.0) + - abseil/log/log (~> 1.20240722.0) + - abseil/memory/memory (~> 1.20240722.0) + - abseil/meta/type_traits (~> 1.20240722.0) + - abseil/numeric/bits (~> 1.20240722.0) + - abseil/random/bit_gen_ref (~> 1.20240722.0) + - abseil/random/distributions (~> 1.20240722.0) + - abseil/random/random (~> 1.20240722.0) + - abseil/status/status (~> 1.20240722.0) + - abseil/status/statusor (~> 1.20240722.0) + - abseil/strings/cord (~> 1.20240722.0) + - abseil/strings/str_format (~> 1.20240722.0) + - abseil/strings/strings (~> 1.20240722.0) + - abseil/synchronization/synchronization (~> 1.20240722.0) + - abseil/time/time (~> 1.20240722.0) + - abseil/types/optional (~> 1.20240722.0) + - abseil/types/span (~> 1.20240722.0) + - abseil/types/variant (~> 1.20240722.0) + - abseil/utility/utility (~> 1.20240722.0) + - "gRPC-C++/Interface (= 1.69.0)" + - "gRPC-C++/Privacy (= 1.69.0)" + - gRPC-Core (= 1.69.0) + - "gRPC-C++/Interface (1.69.0)" + - "gRPC-C++/Privacy (1.69.0)" + - gRPC-Core (1.69.0): + - gRPC-Core/Implementation (= 1.69.0) + - gRPC-Core/Interface (= 1.69.0) + - gRPC-Core/Implementation (1.69.0): + - abseil/algorithm/container (~> 1.20240722.0) + - abseil/base/base (~> 1.20240722.0) + - abseil/base/config (~> 1.20240722.0) + - abseil/base/core_headers (~> 1.20240722.0) + - abseil/base/log_severity (~> 1.20240722.0) + - abseil/base/no_destructor (~> 1.20240722.0) + - abseil/cleanup/cleanup (~> 1.20240722.0) + - abseil/container/flat_hash_map (~> 1.20240722.0) + - abseil/container/flat_hash_set (~> 1.20240722.0) + - abseil/container/inlined_vector (~> 1.20240722.0) + - abseil/flags/flag (~> 1.20240722.0) + - abseil/flags/marshalling (~> 1.20240722.0) + - abseil/functional/any_invocable (~> 1.20240722.0) + - abseil/functional/bind_front (~> 1.20240722.0) + - abseil/functional/function_ref (~> 1.20240722.0) + - abseil/hash/hash (~> 1.20240722.0) + - abseil/log/check (~> 1.20240722.0) + - abseil/log/globals (~> 1.20240722.0) + - abseil/log/log (~> 1.20240722.0) + - abseil/memory/memory (~> 1.20240722.0) + - abseil/meta/type_traits (~> 1.20240722.0) + - abseil/numeric/bits (~> 1.20240722.0) + - abseil/random/bit_gen_ref (~> 1.20240722.0) + - abseil/random/distributions (~> 1.20240722.0) + - abseil/random/random (~> 1.20240722.0) + - abseil/status/status (~> 1.20240722.0) + - abseil/status/statusor (~> 1.20240722.0) + - abseil/strings/cord (~> 1.20240722.0) + - abseil/strings/str_format (~> 1.20240722.0) + - abseil/strings/strings (~> 1.20240722.0) + - abseil/synchronization/synchronization (~> 1.20240722.0) + - abseil/time/time (~> 1.20240722.0) + - abseil/types/optional (~> 1.20240722.0) + - abseil/types/span (~> 1.20240722.0) + - abseil/types/variant (~> 1.20240722.0) + - abseil/utility/utility (~> 1.20240722.0) + - BoringSSL-GRPC (= 0.0.37) + - gRPC-Core/Interface (= 1.69.0) + - gRPC-Core/Privacy (= 1.69.0) + - gRPC-Core/Interface (1.69.0) + - gRPC-Core/Privacy (1.69.0) + - GTMAppAuth (5.0.0): + - AppAuth/Core (~> 2.0) + - GTMSessionFetcher/Core (< 4.0, >= 3.3) + - GTMSessionFetcher (3.5.0): + - GTMSessionFetcher/Full (= 3.5.0) + - GTMSessionFetcher/Core (3.5.0) + - GTMSessionFetcher/Full (3.5.0): + - GTMSessionFetcher/Core + - image_picker_ios (0.0.1): + - Flutter + - leveldb-library (1.22.6) + - nanopb (3.30910.0): + - nanopb/decode (= 3.30910.0) + - nanopb/encode (= 3.30910.0) + - nanopb/decode (3.30910.0) + - nanopb/encode (3.30910.0) + - path_provider_foundation (0.0.1): + - Flutter + - FlutterMacOS + - PromisesObjC (2.4.0) + - RecaptchaInterop (101.0.0) + - sign_in_with_apple (0.0.1): + - Flutter + - sqflite_darwin (0.0.4): + - Flutter + - FlutterMacOS + +DEPENDENCIES: + - cloud_firestore (from `.symlinks/plugins/cloud_firestore/ios`) + - firebase_analytics (from `.symlinks/plugins/firebase_analytics/ios`) + - firebase_auth (from `.symlinks/plugins/firebase_auth/ios`) + - firebase_core (from `.symlinks/plugins/firebase_core/ios`) + - firebase_remote_config (from `.symlinks/plugins/firebase_remote_config/ios`) + - firebase_storage (from `.symlinks/plugins/firebase_storage/ios`) + - Flutter (from `Flutter`) + - google_sign_in_ios (from `.symlinks/plugins/google_sign_in_ios/darwin`) + - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) + - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) + - sign_in_with_apple (from `.symlinks/plugins/sign_in_with_apple/ios`) + - sqflite_darwin (from `.symlinks/plugins/sqflite_darwin/darwin`) + +SPEC REPOS: + trunk: + - abseil + - AppAuth + - AppCheckCore + - BoringSSL-GRPC + - Firebase + - FirebaseABTesting + - FirebaseAnalytics + - FirebaseAppCheckInterop + - FirebaseAuth + - FirebaseAuthInterop + - FirebaseCore + - FirebaseCoreExtension + - FirebaseCoreInternal + - FirebaseFirestore + - FirebaseFirestoreInternal + - FirebaseInstallations + - FirebaseRemoteConfig + - FirebaseRemoteConfigInterop + - FirebaseSharedSwift + - FirebaseStorage + - GoogleAdsOnDeviceConversion + - GoogleAppMeasurement + - GoogleSignIn + - GoogleUtilities + - "gRPC-C++" + - gRPC-Core + - GTMAppAuth + - GTMSessionFetcher + - leveldb-library + - nanopb + - PromisesObjC + - RecaptchaInterop + +EXTERNAL SOURCES: + cloud_firestore: + :path: ".symlinks/plugins/cloud_firestore/ios" + firebase_analytics: + :path: ".symlinks/plugins/firebase_analytics/ios" + firebase_auth: + :path: ".symlinks/plugins/firebase_auth/ios" + firebase_core: + :path: ".symlinks/plugins/firebase_core/ios" + firebase_remote_config: + :path: ".symlinks/plugins/firebase_remote_config/ios" + firebase_storage: + :path: ".symlinks/plugins/firebase_storage/ios" + Flutter: + :path: Flutter + google_sign_in_ios: + :path: ".symlinks/plugins/google_sign_in_ios/darwin" + image_picker_ios: + :path: ".symlinks/plugins/image_picker_ios/ios" + path_provider_foundation: + :path: ".symlinks/plugins/path_provider_foundation/darwin" + sign_in_with_apple: + :path: ".symlinks/plugins/sign_in_with_apple/ios" + sqflite_darwin: + :path: ".symlinks/plugins/sqflite_darwin/darwin" + +SPEC CHECKSUMS: + abseil: a05cc83bf02079535e17169a73c5be5ba47f714b + AppAuth: 1c1a8afa7e12f2ec3a294d9882dfa5ab7d3cb063 + AppCheckCore: cc8fd0a3a230ddd401f326489c99990b013f0c4f + BoringSSL-GRPC: dded2a44897e45f28f08ae87a55ee4bcd19bc508 + cloud_firestore: 79014bb3b303d451717ed5fe69fded8a2b2e8dc2 + Firebase: f07b15ae5a6ec0f93713e30b923d9970d144af3e + firebase_analytics: 1d024068b1d4707d5ba7a42a12976ddf3316d835 + firebase_auth: c2b8be95d602d4e8a9148fae72333ef78e69cc20 + firebase_core: f1aafb21c14f497e5498f7ffc4dc63cbb52b2594 + firebase_remote_config: c1540fb5adfca6165116fafecf6fcb956b547fb8 + firebase_storage: 0ba617a05b24aec050395e4d5d3773c0d7518a15 + FirebaseABTesting: c05b5ec9f1d9f21a65909525de301d375032d9a4 + FirebaseAnalytics: 0fc2b20091f0ddd21bf73397cf8f0eb5346dc24f + FirebaseAppCheckInterop: f734c802f21fe1da0837708f0f9a27218c8a4ed0 + FirebaseAuth: 4a2aed737c84114a9d9b33d11ae1b147d6b94889 + FirebaseAuthInterop: 858e6b754966e70740a4370dd1503dfffe6dbb49 + FirebaseCore: bb595f3114953664e3c1dc032f008a244147cfd3 + FirebaseCoreExtension: 7e1f7118ee970e001a8013719fb90950ee5e0018 + FirebaseCoreInternal: d7f5a043c2cd01a08103ab586587c1468047bca6 + FirebaseFirestore: 2a6183381cf7679b1bb000eb76a8e3178e25dee2 + FirebaseFirestoreInternal: 6577a27cd5dc3722b900042527f86d4ea1626134 + FirebaseInstallations: ae9f4902cb5bf1d0c5eaa31ec1f4e5495a0714e2 + FirebaseRemoteConfig: 28e071a214ec66cdb113ed9ff4ce63e9abe018db + FirebaseRemoteConfigInterop: 1e31ec72b89c9924367c59bfb5ec9ab60d1d6766 + FirebaseSharedSwift: 93426a1de92f19e1199fac5295a4f8df16458daa + FirebaseStorage: 20d6b56fb8a40ebaa03d6a2889fe33dac64adb73 + Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467 + google_sign_in_ios: 205742c688aea0e64db9da03c33121694a365109 + GoogleAdsOnDeviceConversion: e03a386840803ea7eef3fd22a061930142c039c1 + GoogleAppMeasurement: 1e718274b7e015cefd846ac1fcf7820c70dc017d + GoogleSignIn: c7f09cfbc85a1abf69187be091997c317cc33b77 + GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1 + "gRPC-C++": cc207623316fb041a7a3e774c252cf68a058b9e8 + gRPC-Core: 860978b7db482de8b4f5e10677216309b5ff6330 + GTMAppAuth: 217a876b249c3c585a54fd6f73e6b58c4f5c4238 + GTMSessionFetcher: 5aea5ba6bd522a239e236100971f10cb71b96ab6 + image_picker_ios: e0ece4aa2a75771a7de3fa735d26d90817041326 + leveldb-library: cc8b8f8e013647a295ad3f8cd2ddf49a6f19be19 + nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 + path_provider_foundation: bb55f6dbba17d0dccd6737fe6f7f34fbd0376880 + PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 + RecaptchaInterop: 11e0b637842dfb48308d242afc3f448062325aba + sign_in_with_apple: c5dcc141574c8c54d5ac99dd2163c0c72ad22418 + sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0 + +PODFILE CHECKSUM: 915e58fd71f05ae99fabdd8ac2991c68108b3464 + +COCOAPODS: 1.16.2 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..d715dd5 --- /dev/null +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,755 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; + 3A7A308AC5D7E8841F2956D0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5ECBE55D087E1C3E7D8302DC /* Pods_Runner.framework */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 67C2C0802E994D4B00C94A89 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 67C2C07F2E994D4B00C94A89 /* GoogleService-Info.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 855C11C2E7DFD25C1EE0EE37 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DF90438496E50B768BCC8F0 /* Pods_RunnerTests.framework */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 0B0071B16C42D9B6BA219199 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 0D5A7CA75ACF027A29662228 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 23E45A984681A72E65B37337 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 4098173EEE98E242C77E84B6 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 5ECBE55D087E1C3E7D8302DC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 67C2C07F2E994D4B00C94A89 /* GoogleService-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 7C60C939125F4D63E66C6466 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 7DF90438496E50B768BCC8F0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + DC893AE4ABDFA26CC69A1FF5 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 57A6CE6795CBA1C9BFCD58AD /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 855C11C2E7DFD25C1EE0EE37 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 3A7A308AC5D7E8841F2956D0 /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 0A315A6D14E23E06A593CBEB /* Pods */ = { + isa = PBXGroup; + children = ( + DC893AE4ABDFA26CC69A1FF5 /* Pods-Runner.debug.xcconfig */, + 0D5A7CA75ACF027A29662228 /* Pods-Runner.release.xcconfig */, + 4098173EEE98E242C77E84B6 /* Pods-Runner.profile.xcconfig */, + 0B0071B16C42D9B6BA219199 /* Pods-RunnerTests.debug.xcconfig */, + 7C60C939125F4D63E66C6466 /* Pods-RunnerTests.release.xcconfig */, + 23E45A984681A72E65B37337 /* Pods-RunnerTests.profile.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 83426D98E3381ED1AC978481 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 5ECBE55D087E1C3E7D8302DC /* Pods_Runner.framework */, + 7DF90438496E50B768BCC8F0 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, + 67C2C07F2E994D4B00C94A89 /* GoogleService-Info.plist */, + 0A315A6D14E23E06A593CBEB /* Pods */, + 83426D98E3381ED1AC978481 /* Frameworks */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 48D08FC17036C363C488DE39 /* [CP] Check Pods Manifest.lock */, + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, + 57A6CE6795CBA1C9BFCD58AD /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 4C3B2B4393B4CCA3D7E20D3A /* [CP] Check Pods Manifest.lock */, + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + C51C0A42444A8C7176271492 /* [CP] Embed Pods Frameworks */, + 38886C61649E4E769866F3A7 /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 67C2C0802E994D4B00C94A89 /* GoogleService-Info.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 38886C61649E4E769866F3A7 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 48D08FC17036C363C488DE39 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 4C3B2B4393B4CCA3D7E20D3A /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; + C51C0A42444A8C7176271492 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = J23CSW7JYR; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 26.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.rentals.hum; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 0B0071B16C42D9B6BA219199 /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.hum.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7C60C939125F4D63E66C6466 /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.hum.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 23E45A984681A72E65B37337 /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.hum.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = J23CSW7JYR; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 26.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.latonas.hum; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = J23CSW7JYR; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 26.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.latonas.hum; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..e3773d4 --- /dev/null +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..21a3cc1 --- /dev/null +++ b/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift new file mode 100644 index 0000000..6266644 --- /dev/null +++ b/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Flutter +import UIKit + +@main +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d36b1fa --- /dev/null +++ b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000..dc9ada4 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png new file mode 100644 index 0000000..7353c41 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 0000000..797d452 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000..6ed2d93 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 0000000..4cd7b00 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000..fe73094 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png new file mode 100644 index 0000000..321773c Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png new file mode 100644 index 0000000..797d452 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000..502f463 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 0000000..0ec3034 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000..0ec3034 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000..e9f5fea Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 0000000..84ac32a Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png new file mode 100644 index 0000000..8953cba Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 0000000..0467bf1 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 0000000..0bedcf2 --- /dev/null +++ b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 0000000..9da19ea Binary files /dev/null and b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000..9da19ea Binary files /dev/null and b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000..9da19ea Binary files /dev/null and b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 0000000..89c2725 --- /dev/null +++ b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +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. \ No newline at end of file diff --git a/ios/Runner/Base.lproj/LaunchScreen.storyboard b/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..f2e259c --- /dev/null +++ b/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner/Base.lproj/Main.storyboard b/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f3c2851 --- /dev/null +++ b/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner/GoogleService-Info.plist b/ios/Runner/GoogleService-Info.plist new file mode 100644 index 0000000..8220943 --- /dev/null +++ b/ios/Runner/GoogleService-Info.plist @@ -0,0 +1,36 @@ + + + + + CLIENT_ID + 441447288850-05msfa5br1q2f5144qtp128l4fp1rd22.apps.googleusercontent.com + REVERSED_CLIENT_ID + com.googleusercontent.apps.441447288850-05msfa5br1q2f5144qtp128l4fp1rd22 + ANDROID_CLIENT_ID + 441447288850-2dj30aok9mn0gi8n09pshbo2odt6u643.apps.googleusercontent.com + API_KEY + AIzaSyCLcT0zGwqlsKEhlfYEScuvZJ4FJXfeOGM + GCM_SENDER_ID + 441447288850 + PLIST_VERSION + 1 + BUNDLE_ID + com.latonas.hum + PROJECT_ID + hum-app-d68e3 + STORAGE_BUCKET + hum-app-d68e3.firebasestorage.app + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:441447288850:ios:4abcac611c190b72edc8cb + + \ No newline at end of file diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist new file mode 100644 index 0000000..332a742 --- /dev/null +++ b/ios/Runner/Info.plist @@ -0,0 +1,62 @@ + + + + + CADisableMinimumFrameDurationOnPhone + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Hum + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + hum + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleURLTypes + + + CFBundleTypeRole + Editor + CFBundleURLSchemes + + com.googleusercontent.apps.441447288850-05msfa5br1q2f5144qtp128l4fp1rd22 + + + + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + GIDClientID + 441447288850-05msfa5br1q2f5144qtp128l4fp1rd22.apps.googleusercontent.com + LSRequiresIPhoneOS + + UIApplicationSupportsIndirectInputEvents + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/ios/Runner/Runner-Bridging-Header.h b/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000..308a2a5 --- /dev/null +++ b/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/ios/RunnerTests/RunnerTests.swift b/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000..86a7c3b --- /dev/null +++ b/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/lib/core/constants/app_icons.dart b/lib/core/constants/app_icons.dart new file mode 100644 index 0000000..3b92166 --- /dev/null +++ b/lib/core/constants/app_icons.dart @@ -0,0 +1,39 @@ +import 'package:flutter/cupertino.dart'; + +class CupertinoIconHelper { + static const Map< + String, + IconData + > + _iconMap = { + 'add': CupertinoIcons.add, + 'add_circled': CupertinoIcons.add_circled, + 'bell': CupertinoIcons.bell, + 'bell_fill': CupertinoIcons.bell_fill, + 'camera': CupertinoIcons.camera, + 'camera_fill': CupertinoIcons.camera_fill, + 'car': CupertinoIcons.car, + 'house': CupertinoIcons.house, + 'house_fill': CupertinoIcons.house_fill, + 'leaf': CupertinoIcons.leaf_arrow_circlepath, + 'person': CupertinoIcons.person, + 'person_fill': CupertinoIcons.person_fill, + 'search': CupertinoIcons.search, + 'sportscourt': CupertinoIcons.sportscourt, + 'sportscourt_fill': CupertinoIcons.sportscourt_fill, + 'wrench': CupertinoIcons.wrench, + 'wrench_fill': CupertinoIcons.wrench_fill, + 'square_grid_2x2': CupertinoIcons.square_grid_2x2, + 'square_grid_2x2_fill': CupertinoIcons.square_grid_2x2_fill, + 'desktopcomputer': CupertinoIcons.desktopcomputer, + 'tree': CupertinoIcons.tree, + // extend with more CupertinoIcons as needed + }; + + static IconData fromString( + String key, + ) { + return _iconMap[key] ?? + CupertinoIcons.question; // 👈 default fallback + } +} diff --git a/lib/core/constants/app_text.dart b/lib/core/constants/app_text.dart new file mode 100644 index 0000000..ae28b46 --- /dev/null +++ b/lib/core/constants/app_text.dart @@ -0,0 +1,65 @@ +const appTitle = 'HUM'; + +// GENERAL +const doneLabel = 'Done'; +const doneCancel = 'Cancel'; +const doneBack = 'Back'; + +// HOME PAGE +const homeViewSearchPlaceholder = 'Ask me anything...'; +const homeViewVoiceTitle = 'Tap the image, chat with HUM AI'; +const homeViewVoiceMessage = 'Your intelligent rental marketplace'; +const homeBTNBrowse = 'Show Listings'; +const homeViewAI = 'HUM AI'; +const homeViewGrid = 'GRID'; +const homeViewMap = 'SHOW MAP'; +const homeViewIdeas = [ + '💡 Ask: "Find gaming gear near me"', + '💡 Ask: "What is trending in electronics"', + '💡 Try: "Show me constructions tools."', + '💡 Try: "I need camera gear for a wedding"', +]; + +// HOME FILTERS +const filterLocation = 'Location'; +const filterLocationPlaceholder = 'Type a city or location...'; +const filterDates = 'Dates'; +const filterLabelStartDate = 'Start Date'; +const filterLabelEndDate = 'End Date'; +const filterPricing = 'Price'; + +// LISTINGS +const listingAddTitle = 'Add Your Item'; +const listingAddMessage = + "Snatch a photo, we'll fill in the details for you. You can edit before posting."; +const listingTakePhoto = 'Take a photo'; +const listingTakePhotoDescription = 'Use your camera'; +const listingChoosePhoto = 'Choose from Library'; +const listingChoosePhotoDescription = 'Select existing photo'; +const listingLabelFeatures = 'Features'; +const listingLabelOwner = 'Owner'; +const listingLabelCondition = 'Condition: '; +const listingConditionGood = 'Good'; +const listingActionMessage = 'Message'; +const listingActionRent = 'Rent'; + +// AUTH +const authTitleSignIn = 'Welcome Back'; +const authTitleSignUp = 'Create Account'; +const authPlaceholderDisplayName = 'Display Name'; +const authPlaceholderEmail = 'Email'; +const authPlaceholderPassword = 'Password'; +const authSignIn = 'Sign In'; +const authSignUp = 'Sign Up'; +const authModeSignUp = 'Need an account? Sign Up'; +const authModeSignIn = 'Got an account? Sign In'; +const authSignGoogle = 'Sign in with Google'; +const authSignApple = 'Sign in with Apple'; + +// PROFILE +const profileTitle = 'Profile'; +const profileBtnSignOut = 'Sign Out'; +const profileStatRental = 'Rentals'; +const profileStatListings = 'Listings'; +const profileStatEarnings = 'Earnings'; +const profileStatFavorites = 'Favorites'; diff --git a/lib/core/constants/app_theme.dart b/lib/core/constants/app_theme.dart new file mode 100644 index 0000000..326d067 --- /dev/null +++ b/lib/core/constants/app_theme.dart @@ -0,0 +1,33 @@ +import 'package:flutter/cupertino.dart'; + +// SIZES +const searchBarHeight = 40.0; +const categoryHeight = 30.0; +const roundLarge = 12.0; +const radiusCards = 26.0; + +// COLORS +const colorAccentPrimary = CupertinoDynamicColor.withBrightness( + color: Color(0xFF00CC00), + darkColor: Color(0xFF67ce67), +); + +const colorAccentSecondary = CupertinoDynamicColor.withBrightness( + color: Color(0xFF283CD7), + darkColor: Color(0xFF369DF7), +); + +const colorBackground = CupertinoDynamicColor.withBrightness( + color: Color(0xFFF8F8F8), + darkColor: Color(0xFF0a0a0a), +); + +const colorBarBackground = CupertinoColors.systemGrey6; +const colorBarControl = CupertinoColors.systemGrey5; +const colorBarControlBordeer = CupertinoColors.systemGrey4; +const colorBarButton = CupertinoColors.systemGrey5; +const colorCategoryButtonBG = CupertinoColors.systemGrey3; +const colorCategoryButtonFG = CupertinoDynamicColor.withBrightness( + color: Color(0xFFFFFFFF), + darkColor: Color(0xFFDFDFE5), +); diff --git a/lib/core/utils/dialogs.dart b/lib/core/utils/dialogs.dart new file mode 100644 index 0000000..296670c --- /dev/null +++ b/lib/core/utils/dialogs.dart @@ -0,0 +1,59 @@ +import 'package:flutter/cupertino.dart'; + +Future< + bool +> +showYesNoDialog( + BuildContext context, { + String close = 'Close', + String accept = 'Accept', + String title = '', + String message = '', + VoidCallback? actionClose, + VoidCallback? actionOk, +}) async { + final result = + await showCupertinoDialog< + bool + >( + context: context, + builder: + ( + BuildContext context, + ) { + return CupertinoAlertDialog( + title: Text( + title, + ), + content: Text( + message, + ), + actions: [ + CupertinoDialogAction( + isDefaultAction: true, + onPressed: () => Navigator.pop( + context, + false, + ), + child: Text( + close, + ), + ), + CupertinoDialogAction( + isDestructiveAction: true, + onPressed: () => Navigator.pop( + context, + true, + ), + child: Text( + accept, + ), + ), + ], + ); + }, + ); + + return result ?? + false; // false if dismissed +} diff --git a/lib/core/utils/icon_mapper.dart b/lib/core/utils/icon_mapper.dart new file mode 100644 index 0000000..0c090a8 --- /dev/null +++ b/lib/core/utils/icon_mapper.dart @@ -0,0 +1,6073 @@ +import 'package:flutter/cupertino.dart'; +import 'package:phosphor_flutter/phosphor_flutter.dart'; + +class PhosphorIconHelper { + static IconData fromString(String name, {String style = 'regular'}) { + if (style == 'regular') { + return _iconMapRegular[name] ?? PhosphorIconsRegular.house; + } else if (style == 'bold') { + return _iconMapBold[name] ?? PhosphorIconsRegular.house; + } else if (style == 'fill') { + return _iconMapFill[name] ?? PhosphorIconsRegular.house; + } else if (style == 'duotone') { + return _iconMapDuotone[name] ?? PhosphorIconsRegular.house; + } + return PhosphorIconsRegular.house; + } + + static final Map _iconMapDuotone = { + 'acorn': PhosphorIconsDuotone.acorn, + 'addressBook': PhosphorIconsDuotone.addressBook, + 'addressBookTabs': PhosphorIconsDuotone.addressBookTabs, + 'airTrafficControl': PhosphorIconsDuotone.airTrafficControl, + 'airplane': PhosphorIconsDuotone.airplane, + 'airplaneInFlight': PhosphorIconsDuotone.airplaneInFlight, + 'airplaneLanding': PhosphorIconsDuotone.airplaneLanding, + 'airplaneTakeoff': PhosphorIconsDuotone.airplaneTakeoff, + 'airplaneTaxiing': PhosphorIconsDuotone.airplaneTaxiing, + 'airplaneTilt': PhosphorIconsDuotone.airplaneTilt, + 'airplay': PhosphorIconsDuotone.airplay, + 'alarm': PhosphorIconsDuotone.alarm, + 'alien': PhosphorIconsDuotone.alien, + 'alignBottom': PhosphorIconsDuotone.alignBottom, + 'alignBottomSimple': PhosphorIconsDuotone.alignBottomSimple, + 'alignCenterHorizontal': PhosphorIconsDuotone.alignCenterHorizontal, + 'alignCenterHorizontalSimple': PhosphorIconsDuotone.alignCenterHorizontalSimple, + 'alignCenterVertical': PhosphorIconsDuotone.alignCenterVertical, + 'alignCenterVerticalSimple': PhosphorIconsDuotone.alignCenterVerticalSimple, + 'alignLeft': PhosphorIconsDuotone.alignLeft, + 'alignLeftSimple': PhosphorIconsDuotone.alignLeftSimple, + 'alignRight': PhosphorIconsDuotone.alignRight, + 'alignRightSimple': PhosphorIconsDuotone.alignRightSimple, + 'alignTop': PhosphorIconsDuotone.alignTop, + 'alignTopSimple': PhosphorIconsDuotone.alignTopSimple, + 'amazonLogo': PhosphorIconsDuotone.amazonLogo, + 'ambulance': PhosphorIconsDuotone.ambulance, + 'anchor': PhosphorIconsDuotone.anchor, + 'anchorSimple': PhosphorIconsDuotone.anchorSimple, + 'androidLogo': PhosphorIconsDuotone.androidLogo, + 'angle': PhosphorIconsDuotone.angle, + 'angularLogo': PhosphorIconsDuotone.angularLogo, + 'aperture': PhosphorIconsDuotone.aperture, + 'appStoreLogo': PhosphorIconsDuotone.appStoreLogo, + 'appWindow': PhosphorIconsDuotone.appWindow, + 'appleLogo': PhosphorIconsDuotone.appleLogo, + 'applePodcastsLogo': PhosphorIconsDuotone.applePodcastsLogo, + 'approximateEquals': PhosphorIconsDuotone.approximateEquals, + 'archive': PhosphorIconsDuotone.archive, + 'armchair': PhosphorIconsDuotone.armchair, + 'arrowArcLeft': PhosphorIconsDuotone.arrowArcLeft, + 'arrowArcRight': PhosphorIconsDuotone.arrowArcRight, + 'arrowBendDoubleUpLeft': PhosphorIconsDuotone.arrowBendDoubleUpLeft, + 'arrowBendDoubleUpRight': PhosphorIconsDuotone.arrowBendDoubleUpRight, + 'arrowBendDownLeft': PhosphorIconsDuotone.arrowBendDownLeft, + 'arrowBendDownRight': PhosphorIconsDuotone.arrowBendDownRight, + 'arrowBendLeftDown': PhosphorIconsDuotone.arrowBendLeftDown, + 'arrowBendLeftUp': PhosphorIconsDuotone.arrowBendLeftUp, + 'arrowBendRightDown': PhosphorIconsDuotone.arrowBendRightDown, + 'arrowBendRightUp': PhosphorIconsDuotone.arrowBendRightUp, + 'arrowBendUpLeft': PhosphorIconsDuotone.arrowBendUpLeft, + 'arrowBendUpRight': PhosphorIconsDuotone.arrowBendUpRight, + 'arrowCircleDown': PhosphorIconsDuotone.arrowCircleDown, + 'arrowCircleDownLeft': PhosphorIconsDuotone.arrowCircleDownLeft, + 'arrowCircleDownRight': PhosphorIconsDuotone.arrowCircleDownRight, + 'arrowCircleLeft': PhosphorIconsDuotone.arrowCircleLeft, + 'arrowCircleRight': PhosphorIconsDuotone.arrowCircleRight, + 'arrowCircleUp': PhosphorIconsDuotone.arrowCircleUp, + 'arrowCircleUpLeft': PhosphorIconsDuotone.arrowCircleUpLeft, + 'arrowCircleUpRight': PhosphorIconsDuotone.arrowCircleUpRight, + 'arrowClockwise': PhosphorIconsDuotone.arrowClockwise, + 'arrowCounterClockwise': PhosphorIconsDuotone.arrowCounterClockwise, + 'arrowDown': PhosphorIconsDuotone.arrowDown, + 'arrowDownLeft': PhosphorIconsDuotone.arrowDownLeft, + 'arrowDownRight': PhosphorIconsDuotone.arrowDownRight, + 'arrowElbowDownLeft': PhosphorIconsDuotone.arrowElbowDownLeft, + 'arrowElbowDownRight': PhosphorIconsDuotone.arrowElbowDownRight, + 'arrowElbowLeft': PhosphorIconsDuotone.arrowElbowLeft, + 'arrowElbowLeftDown': PhosphorIconsDuotone.arrowElbowLeftDown, + 'arrowElbowLeftUp': PhosphorIconsDuotone.arrowElbowLeftUp, + 'arrowElbowRight': PhosphorIconsDuotone.arrowElbowRight, + 'arrowElbowRightDown': PhosphorIconsDuotone.arrowElbowRightDown, + 'arrowElbowRightUp': PhosphorIconsDuotone.arrowElbowRightUp, + 'arrowElbowUpLeft': PhosphorIconsDuotone.arrowElbowUpLeft, + 'arrowElbowUpRight': PhosphorIconsDuotone.arrowElbowUpRight, + 'arrowFatDown': PhosphorIconsDuotone.arrowFatDown, + 'arrowFatLeft': PhosphorIconsDuotone.arrowFatLeft, + 'arrowFatLineDown': PhosphorIconsDuotone.arrowFatLineDown, + 'arrowFatLineLeft': PhosphorIconsDuotone.arrowFatLineLeft, + 'arrowFatLineRight': PhosphorIconsDuotone.arrowFatLineRight, + 'arrowFatLineUp': PhosphorIconsDuotone.arrowFatLineUp, + 'arrowFatLinesDown': PhosphorIconsDuotone.arrowFatLinesDown, + 'arrowFatLinesLeft': PhosphorIconsDuotone.arrowFatLinesLeft, + 'arrowFatLinesRight': PhosphorIconsDuotone.arrowFatLinesRight, + 'arrowFatLinesUp': PhosphorIconsDuotone.arrowFatLinesUp, + 'arrowFatRight': PhosphorIconsDuotone.arrowFatRight, + 'arrowFatUp': PhosphorIconsDuotone.arrowFatUp, + 'arrowLeft': PhosphorIconsDuotone.arrowLeft, + 'arrowLineDown': PhosphorIconsDuotone.arrowLineDown, + 'arrowLineDownLeft': PhosphorIconsDuotone.arrowLineDownLeft, + 'arrowLineDownRight': PhosphorIconsDuotone.arrowLineDownRight, + 'arrowLineLeft': PhosphorIconsDuotone.arrowLineLeft, + 'arrowLineRight': PhosphorIconsDuotone.arrowLineRight, + 'arrowLineUp': PhosphorIconsDuotone.arrowLineUp, + 'arrowLineUpLeft': PhosphorIconsDuotone.arrowLineUpLeft, + 'arrowLineUpRight': PhosphorIconsDuotone.arrowLineUpRight, + 'arrowRight': PhosphorIconsDuotone.arrowRight, + 'arrowSquareDown': PhosphorIconsDuotone.arrowSquareDown, + 'arrowSquareDownLeft': PhosphorIconsDuotone.arrowSquareDownLeft, + 'arrowSquareDownRight': PhosphorIconsDuotone.arrowSquareDownRight, + 'arrowSquareIn': PhosphorIconsDuotone.arrowSquareIn, + 'arrowSquareLeft': PhosphorIconsDuotone.arrowSquareLeft, + 'arrowSquareOut': PhosphorIconsDuotone.arrowSquareOut, + 'arrowSquareRight': PhosphorIconsDuotone.arrowSquareRight, + 'arrowSquareUp': PhosphorIconsDuotone.arrowSquareUp, + 'arrowSquareUpLeft': PhosphorIconsDuotone.arrowSquareUpLeft, + 'arrowSquareUpRight': PhosphorIconsDuotone.arrowSquareUpRight, + 'arrowUDownLeft': PhosphorIconsDuotone.arrowUDownLeft, + 'arrowUDownRight': PhosphorIconsDuotone.arrowUDownRight, + 'arrowULeftDown': PhosphorIconsDuotone.arrowULeftDown, + 'arrowULeftUp': PhosphorIconsDuotone.arrowULeftUp, + 'arrowURightDown': PhosphorIconsDuotone.arrowURightDown, + 'arrowURightUp': PhosphorIconsDuotone.arrowURightUp, + 'arrowUUpLeft': PhosphorIconsDuotone.arrowUUpLeft, + 'arrowUUpRight': PhosphorIconsDuotone.arrowUUpRight, + 'arrowUp': PhosphorIconsDuotone.arrowUp, + 'arrowUpLeft': PhosphorIconsDuotone.arrowUpLeft, + 'arrowUpRight': PhosphorIconsDuotone.arrowUpRight, + 'arrowsClockwise': PhosphorIconsDuotone.arrowsClockwise, + 'arrowsCounterClockwise': PhosphorIconsDuotone.arrowsCounterClockwise, + 'arrowsDownUp': PhosphorIconsDuotone.arrowsDownUp, + 'arrowsHorizontal': PhosphorIconsDuotone.arrowsHorizontal, + 'arrowsIn': PhosphorIconsDuotone.arrowsIn, + 'arrowsInCardinal': PhosphorIconsDuotone.arrowsInCardinal, + 'arrowsInLineHorizontal': PhosphorIconsDuotone.arrowsInLineHorizontal, + 'arrowsInLineVertical': PhosphorIconsDuotone.arrowsInLineVertical, + 'arrowsInSimple': PhosphorIconsDuotone.arrowsInSimple, + 'arrowsLeftRight': PhosphorIconsDuotone.arrowsLeftRight, + 'arrowsMerge': PhosphorIconsDuotone.arrowsMerge, + 'arrowsOut': PhosphorIconsDuotone.arrowsOut, + 'arrowsOutCardinal': PhosphorIconsDuotone.arrowsOutCardinal, + 'arrowsOutLineHorizontal': PhosphorIconsDuotone.arrowsOutLineHorizontal, + 'arrowsOutLineVertical': PhosphorIconsDuotone.arrowsOutLineVertical, + 'arrowsOutSimple': PhosphorIconsDuotone.arrowsOutSimple, + 'arrowsSplit': PhosphorIconsDuotone.arrowsSplit, + 'arrowsVertical': PhosphorIconsDuotone.arrowsVertical, + 'article': PhosphorIconsDuotone.article, + 'articleMedium': PhosphorIconsDuotone.articleMedium, + 'articleNyTimes': PhosphorIconsDuotone.articleNyTimes, + 'asclepius': PhosphorIconsDuotone.asclepius, + 'asterisk': PhosphorIconsDuotone.asterisk, + 'asteriskSimple': PhosphorIconsDuotone.asteriskSimple, + 'at': PhosphorIconsDuotone.at, + 'atom': PhosphorIconsDuotone.atom, + 'avocado': PhosphorIconsDuotone.avocado, + 'axe': PhosphorIconsDuotone.axe, + 'baby': PhosphorIconsDuotone.baby, + 'babyCarriage': PhosphorIconsDuotone.babyCarriage, + 'backpack': PhosphorIconsDuotone.backpack, + 'backspace': PhosphorIconsDuotone.backspace, + 'bag': PhosphorIconsDuotone.bag, + 'bagSimple': PhosphorIconsDuotone.bagSimple, + 'balloon': PhosphorIconsDuotone.balloon, + 'bandaids': PhosphorIconsDuotone.bandaids, + 'bank': PhosphorIconsDuotone.bank, + 'barbell': PhosphorIconsDuotone.barbell, + 'barcode': PhosphorIconsDuotone.barcode, + 'barn': PhosphorIconsDuotone.barn, + 'barricade': PhosphorIconsDuotone.barricade, + 'baseball': PhosphorIconsDuotone.baseball, + 'baseballCap': PhosphorIconsDuotone.baseballCap, + 'baseballHelmet': PhosphorIconsDuotone.baseballHelmet, + 'basket': PhosphorIconsDuotone.basket, + 'basketball': PhosphorIconsDuotone.basketball, + 'bathtub': PhosphorIconsDuotone.bathtub, + 'batteryCharging': PhosphorIconsDuotone.batteryCharging, + 'batteryChargingVertical': PhosphorIconsDuotone.batteryChargingVertical, + 'batteryEmpty': PhosphorIconsDuotone.batteryEmpty, + 'batteryFull': PhosphorIconsDuotone.batteryFull, + 'batteryHigh': PhosphorIconsDuotone.batteryHigh, + 'batteryLow': PhosphorIconsDuotone.batteryLow, + 'batteryMedium': PhosphorIconsDuotone.batteryMedium, + 'batteryPlus': PhosphorIconsDuotone.batteryPlus, + 'batteryPlusVertical': PhosphorIconsDuotone.batteryPlusVertical, + 'batteryVerticalEmpty': PhosphorIconsDuotone.batteryVerticalEmpty, + 'batteryVerticalFull': PhosphorIconsDuotone.batteryVerticalFull, + 'batteryVerticalHigh': PhosphorIconsDuotone.batteryVerticalHigh, + 'batteryVerticalLow': PhosphorIconsDuotone.batteryVerticalLow, + 'batteryVerticalMedium': PhosphorIconsDuotone.batteryVerticalMedium, + 'batteryWarning': PhosphorIconsDuotone.batteryWarning, + 'batteryWarningVertical': PhosphorIconsDuotone.batteryWarningVertical, + 'beachBall': PhosphorIconsDuotone.beachBall, + 'beanie': PhosphorIconsDuotone.beanie, + 'bed': PhosphorIconsDuotone.bed, + 'beerBottle': PhosphorIconsDuotone.beerBottle, + 'beerStein': PhosphorIconsDuotone.beerStein, + 'behanceLogo': PhosphorIconsDuotone.behanceLogo, + 'bell': PhosphorIconsDuotone.bell, + 'bellRinging': PhosphorIconsDuotone.bellRinging, + 'bellSimple': PhosphorIconsDuotone.bellSimple, + 'bellSimpleRinging': PhosphorIconsDuotone.bellSimpleRinging, + 'bellSimpleSlash': PhosphorIconsDuotone.bellSimpleSlash, + 'bellSimpleZ': PhosphorIconsDuotone.bellSimpleZ, + 'bellSlash': PhosphorIconsDuotone.bellSlash, + 'bellZ': PhosphorIconsDuotone.bellZ, + 'belt': PhosphorIconsDuotone.belt, + 'bezierCurve': PhosphorIconsDuotone.bezierCurve, + 'bicycle': PhosphorIconsDuotone.bicycle, + 'binary': PhosphorIconsDuotone.binary, + 'binoculars': PhosphorIconsDuotone.binoculars, + 'biohazard': PhosphorIconsDuotone.biohazard, + 'bird': PhosphorIconsDuotone.bird, + 'blueprint': PhosphorIconsDuotone.blueprint, + 'bluetooth': PhosphorIconsDuotone.bluetooth, + 'bluetoothConnected': PhosphorIconsDuotone.bluetoothConnected, + 'bluetoothSlash': PhosphorIconsDuotone.bluetoothSlash, + 'bluetoothX': PhosphorIconsDuotone.bluetoothX, + 'boat': PhosphorIconsDuotone.boat, + 'bomb': PhosphorIconsDuotone.bomb, + 'bone': PhosphorIconsDuotone.bone, + 'book': PhosphorIconsDuotone.book, + 'bookBookmark': PhosphorIconsDuotone.bookBookmark, + 'bookOpen': PhosphorIconsDuotone.bookOpen, + 'bookOpenText': PhosphorIconsDuotone.bookOpenText, + 'bookOpenUser': PhosphorIconsDuotone.bookOpenUser, + 'bookmark': PhosphorIconsDuotone.bookmark, + 'bookmarkSimple': PhosphorIconsDuotone.bookmarkSimple, + 'bookmarks': PhosphorIconsDuotone.bookmarks, + 'bookmarksSimple': PhosphorIconsDuotone.bookmarksSimple, + 'books': PhosphorIconsDuotone.books, + 'boot': PhosphorIconsDuotone.boot, + 'boules': PhosphorIconsDuotone.boules, + 'boundingBox': PhosphorIconsDuotone.boundingBox, + 'bowlFood': PhosphorIconsDuotone.bowlFood, + 'bowlSteam': PhosphorIconsDuotone.bowlSteam, + 'bowlingBall': PhosphorIconsDuotone.bowlingBall, + 'boxArrowDown': PhosphorIconsDuotone.boxArrowDown, + 'boxArrowUp': PhosphorIconsDuotone.boxArrowUp, + 'boxingGlove': PhosphorIconsDuotone.boxingGlove, + 'bracketsAngle': PhosphorIconsDuotone.bracketsAngle, + 'bracketsCurly': PhosphorIconsDuotone.bracketsCurly, + 'bracketsRound': PhosphorIconsDuotone.bracketsRound, + 'bracketsSquare': PhosphorIconsDuotone.bracketsSquare, + 'brain': PhosphorIconsDuotone.brain, + 'brandy': PhosphorIconsDuotone.brandy, + 'bread': PhosphorIconsDuotone.bread, + 'bridge': PhosphorIconsDuotone.bridge, + 'briefcase': PhosphorIconsDuotone.briefcase, + 'briefcaseMetal': PhosphorIconsDuotone.briefcaseMetal, + 'broadcast': PhosphorIconsDuotone.broadcast, + 'broom': PhosphorIconsDuotone.broom, + 'browser': PhosphorIconsDuotone.browser, + 'browsers': PhosphorIconsDuotone.browsers, + 'bug': PhosphorIconsDuotone.bug, + 'bugBeetle': PhosphorIconsDuotone.bugBeetle, + 'bugDroid': PhosphorIconsDuotone.bugDroid, + 'building': PhosphorIconsDuotone.building, + 'buildingApartment': PhosphorIconsDuotone.buildingApartment, + 'buildingOffice': PhosphorIconsDuotone.buildingOffice, + 'buildings': PhosphorIconsDuotone.buildings, + 'bulldozer': PhosphorIconsDuotone.bulldozer, + 'bus': PhosphorIconsDuotone.bus, + 'butterfly': PhosphorIconsDuotone.butterfly, + 'cableCar': PhosphorIconsDuotone.cableCar, + 'cactus': PhosphorIconsDuotone.cactus, + 'cake': PhosphorIconsDuotone.cake, + 'calculator': PhosphorIconsDuotone.calculator, + 'calendar': PhosphorIconsDuotone.calendar, + 'calendarBlank': PhosphorIconsDuotone.calendarBlank, + 'calendarCheck': PhosphorIconsDuotone.calendarCheck, + 'calendarDot': PhosphorIconsDuotone.calendarDot, + 'calendarDots': PhosphorIconsDuotone.calendarDots, + 'calendarHeart': PhosphorIconsDuotone.calendarHeart, + 'calendarMinus': PhosphorIconsDuotone.calendarMinus, + 'calendarPlus': PhosphorIconsDuotone.calendarPlus, + 'calendarSlash': PhosphorIconsDuotone.calendarSlash, + 'calendarStar': PhosphorIconsDuotone.calendarStar, + 'calendarX': PhosphorIconsDuotone.calendarX, + 'callBell': PhosphorIconsDuotone.callBell, + 'camera': PhosphorIconsDuotone.camera, + 'cameraPlus': PhosphorIconsDuotone.cameraPlus, + 'cameraRotate': PhosphorIconsDuotone.cameraRotate, + 'cameraSlash': PhosphorIconsDuotone.cameraSlash, + 'campfire': PhosphorIconsDuotone.campfire, + 'car': PhosphorIconsDuotone.car, + 'carBattery': PhosphorIconsDuotone.carBattery, + 'carProfile': PhosphorIconsDuotone.carProfile, + 'carSimple': PhosphorIconsDuotone.carSimple, + 'cardholder': PhosphorIconsDuotone.cardholder, + 'cards': PhosphorIconsDuotone.cards, + 'cardsThree': PhosphorIconsDuotone.cardsThree, + 'caretCircleDoubleDown': PhosphorIconsDuotone.caretCircleDoubleDown, + 'caretCircleDoubleLeft': PhosphorIconsDuotone.caretCircleDoubleLeft, + 'caretCircleDoubleRight': PhosphorIconsDuotone.caretCircleDoubleRight, + 'caretCircleDoubleUp': PhosphorIconsDuotone.caretCircleDoubleUp, + 'caretCircleDown': PhosphorIconsDuotone.caretCircleDown, + 'caretCircleLeft': PhosphorIconsDuotone.caretCircleLeft, + 'caretCircleRight': PhosphorIconsDuotone.caretCircleRight, + 'caretCircleUp': PhosphorIconsDuotone.caretCircleUp, + 'caretCircleUpDown': PhosphorIconsDuotone.caretCircleUpDown, + 'caretDoubleDown': PhosphorIconsDuotone.caretDoubleDown, + 'caretDoubleLeft': PhosphorIconsDuotone.caretDoubleLeft, + 'caretDoubleRight': PhosphorIconsDuotone.caretDoubleRight, + 'caretDoubleUp': PhosphorIconsDuotone.caretDoubleUp, + 'caretDown': PhosphorIconsDuotone.caretDown, + 'caretLeft': PhosphorIconsDuotone.caretLeft, + 'caretLineDown': PhosphorIconsDuotone.caretLineDown, + 'caretLineLeft': PhosphorIconsDuotone.caretLineLeft, + 'caretLineRight': PhosphorIconsDuotone.caretLineRight, + 'caretLineUp': PhosphorIconsDuotone.caretLineUp, + 'caretRight': PhosphorIconsDuotone.caretRight, + 'caretUp': PhosphorIconsDuotone.caretUp, + 'caretUpDown': PhosphorIconsDuotone.caretUpDown, + 'carrot': PhosphorIconsDuotone.carrot, + 'cashRegister': PhosphorIconsDuotone.cashRegister, + 'cassetteTape': PhosphorIconsDuotone.cassetteTape, + 'castleTurret': PhosphorIconsDuotone.castleTurret, + 'cat': PhosphorIconsDuotone.cat, + 'cellSignalFull': PhosphorIconsDuotone.cellSignalFull, + 'cellSignalHigh': PhosphorIconsDuotone.cellSignalHigh, + 'cellSignalLow': PhosphorIconsDuotone.cellSignalLow, + 'cellSignalMedium': PhosphorIconsDuotone.cellSignalMedium, + 'cellSignalNone': PhosphorIconsDuotone.cellSignalNone, + 'cellSignalSlash': PhosphorIconsDuotone.cellSignalSlash, + 'cellSignalX': PhosphorIconsDuotone.cellSignalX, + 'cellTower': PhosphorIconsDuotone.cellTower, + 'certificate': PhosphorIconsDuotone.certificate, + 'chair': PhosphorIconsDuotone.chair, + 'chalkboard': PhosphorIconsDuotone.chalkboard, + 'chalkboardSimple': PhosphorIconsDuotone.chalkboardSimple, + 'chalkboardTeacher': PhosphorIconsDuotone.chalkboardTeacher, + 'champagne': PhosphorIconsDuotone.champagne, + 'chargingStation': PhosphorIconsDuotone.chargingStation, + 'chartBar': PhosphorIconsDuotone.chartBar, + 'chartBarHorizontal': PhosphorIconsDuotone.chartBarHorizontal, + 'chartDonut': PhosphorIconsDuotone.chartDonut, + 'chartLine': PhosphorIconsDuotone.chartLine, + 'chartLineDown': PhosphorIconsDuotone.chartLineDown, + 'chartLineUp': PhosphorIconsDuotone.chartLineUp, + 'chartPie': PhosphorIconsDuotone.chartPie, + 'chartPieSlice': PhosphorIconsDuotone.chartPieSlice, + 'chartPolar': PhosphorIconsDuotone.chartPolar, + 'chartScatter': PhosphorIconsDuotone.chartScatter, + 'chat': PhosphorIconsDuotone.chat, + 'chatCentered': PhosphorIconsDuotone.chatCentered, + 'chatCenteredDots': PhosphorIconsDuotone.chatCenteredDots, + 'chatCenteredSlash': PhosphorIconsDuotone.chatCenteredSlash, + 'chatCenteredText': PhosphorIconsDuotone.chatCenteredText, + 'chatCircle': PhosphorIconsDuotone.chatCircle, + 'chatCircleDots': PhosphorIconsDuotone.chatCircleDots, + 'chatCircleSlash': PhosphorIconsDuotone.chatCircleSlash, + 'chatCircleText': PhosphorIconsDuotone.chatCircleText, + 'chatDots': PhosphorIconsDuotone.chatDots, + 'chatSlash': PhosphorIconsDuotone.chatSlash, + 'chatTeardrop': PhosphorIconsDuotone.chatTeardrop, + 'chatTeardropDots': PhosphorIconsDuotone.chatTeardropDots, + 'chatTeardropSlash': PhosphorIconsDuotone.chatTeardropSlash, + 'chatTeardropText': PhosphorIconsDuotone.chatTeardropText, + 'chatText': PhosphorIconsDuotone.chatText, + 'chats': PhosphorIconsDuotone.chats, + 'chatsCircle': PhosphorIconsDuotone.chatsCircle, + 'chatsTeardrop': PhosphorIconsDuotone.chatsTeardrop, + 'check': PhosphorIconsDuotone.check, + 'checkCircle': PhosphorIconsDuotone.checkCircle, + 'checkFat': PhosphorIconsDuotone.checkFat, + 'checkSquare': PhosphorIconsDuotone.checkSquare, + 'checkSquareOffset': PhosphorIconsDuotone.checkSquareOffset, + 'checkerboard': PhosphorIconsDuotone.checkerboard, + 'checks': PhosphorIconsDuotone.checks, + 'cheers': PhosphorIconsDuotone.cheers, + 'cheese': PhosphorIconsDuotone.cheese, + 'chefHat': PhosphorIconsDuotone.chefHat, + 'cherries': PhosphorIconsDuotone.cherries, + 'church': PhosphorIconsDuotone.church, + 'cigarette': PhosphorIconsDuotone.cigarette, + 'cigaretteSlash': PhosphorIconsDuotone.cigaretteSlash, + 'circle': PhosphorIconsDuotone.circle, + 'circleDashed': PhosphorIconsDuotone.circleDashed, + 'circleHalf': PhosphorIconsDuotone.circleHalf, + 'circleHalfTilt': PhosphorIconsDuotone.circleHalfTilt, + 'circleNotch': PhosphorIconsDuotone.circleNotch, + 'circlesFour': PhosphorIconsDuotone.circlesFour, + 'circlesThree': PhosphorIconsDuotone.circlesThree, + 'circlesThreePlus': PhosphorIconsDuotone.circlesThreePlus, + 'circuitry': PhosphorIconsDuotone.circuitry, + 'city': PhosphorIconsDuotone.city, + 'clipboard': PhosphorIconsDuotone.clipboard, + 'clipboardText': PhosphorIconsDuotone.clipboardText, + 'clock': PhosphorIconsDuotone.clock, + 'clockAfternoon': PhosphorIconsDuotone.clockAfternoon, + 'clockClockwise': PhosphorIconsDuotone.clockClockwise, + 'clockCountdown': PhosphorIconsDuotone.clockCountdown, + 'clockCounterClockwise': PhosphorIconsDuotone.clockCounterClockwise, + 'clockUser': PhosphorIconsDuotone.clockUser, + 'closedCaptioning': PhosphorIconsDuotone.closedCaptioning, + 'cloud': PhosphorIconsDuotone.cloud, + 'cloudArrowDown': PhosphorIconsDuotone.cloudArrowDown, + 'cloudArrowUp': PhosphorIconsDuotone.cloudArrowUp, + 'cloudCheck': PhosphorIconsDuotone.cloudCheck, + 'cloudFog': PhosphorIconsDuotone.cloudFog, + 'cloudLightning': PhosphorIconsDuotone.cloudLightning, + 'cloudMoon': PhosphorIconsDuotone.cloudMoon, + 'cloudRain': PhosphorIconsDuotone.cloudRain, + 'cloudSlash': PhosphorIconsDuotone.cloudSlash, + 'cloudSun': PhosphorIconsDuotone.cloudSun, + 'cloudWarning': PhosphorIconsDuotone.cloudWarning, + 'cloudX': PhosphorIconsDuotone.cloudX, + 'clover': PhosphorIconsDuotone.clover, + 'club': PhosphorIconsDuotone.club, + 'coatHanger': PhosphorIconsDuotone.coatHanger, + 'codaLogo': PhosphorIconsDuotone.codaLogo, + 'code': PhosphorIconsDuotone.code, + 'codeBlock': PhosphorIconsDuotone.codeBlock, + 'codeSimple': PhosphorIconsDuotone.codeSimple, + 'codepenLogo': PhosphorIconsDuotone.codepenLogo, + 'codesandboxLogo': PhosphorIconsDuotone.codesandboxLogo, + 'coffee': PhosphorIconsDuotone.coffee, + 'coffeeBean': PhosphorIconsDuotone.coffeeBean, + 'coin': PhosphorIconsDuotone.coin, + 'coinVertical': PhosphorIconsDuotone.coinVertical, + 'coins': PhosphorIconsDuotone.coins, + 'columns': PhosphorIconsDuotone.columns, + 'columnsPlusLeft': PhosphorIconsDuotone.columnsPlusLeft, + 'columnsPlusRight': PhosphorIconsDuotone.columnsPlusRight, + 'command': PhosphorIconsDuotone.command, + 'compass': PhosphorIconsDuotone.compass, + 'compassRose': PhosphorIconsDuotone.compassRose, + 'compassTool': PhosphorIconsDuotone.compassTool, + 'computerTower': PhosphorIconsDuotone.computerTower, + 'confetti': PhosphorIconsDuotone.confetti, + 'contactlessPayment': PhosphorIconsDuotone.contactlessPayment, + 'control': PhosphorIconsDuotone.control, + 'cookie': PhosphorIconsDuotone.cookie, + 'cookingPot': PhosphorIconsDuotone.cookingPot, + 'copy': PhosphorIconsDuotone.copy, + 'copySimple': PhosphorIconsDuotone.copySimple, + 'copyleft': PhosphorIconsDuotone.copyleft, + 'copyright': PhosphorIconsDuotone.copyright, + 'cornersIn': PhosphorIconsDuotone.cornersIn, + 'cornersOut': PhosphorIconsDuotone.cornersOut, + 'couch': PhosphorIconsDuotone.couch, + 'courtBasketball': PhosphorIconsDuotone.courtBasketball, + 'cow': PhosphorIconsDuotone.cow, + 'cowboyHat': PhosphorIconsDuotone.cowboyHat, + 'cpu': PhosphorIconsDuotone.cpu, + 'crane': PhosphorIconsDuotone.crane, + 'craneTower': PhosphorIconsDuotone.craneTower, + 'creditCard': PhosphorIconsDuotone.creditCard, + 'cricket': PhosphorIconsDuotone.cricket, + 'crop': PhosphorIconsDuotone.crop, + 'cross': PhosphorIconsDuotone.cross, + 'crosshair': PhosphorIconsDuotone.crosshair, + 'crosshairSimple': PhosphorIconsDuotone.crosshairSimple, + 'crown': PhosphorIconsDuotone.crown, + 'crownCross': PhosphorIconsDuotone.crownCross, + 'crownSimple': PhosphorIconsDuotone.crownSimple, + 'cube': PhosphorIconsDuotone.cube, + 'cubeFocus': PhosphorIconsDuotone.cubeFocus, + 'cubeTransparent': PhosphorIconsDuotone.cubeTransparent, + 'currencyBtc': PhosphorIconsDuotone.currencyBtc, + 'currencyCircleDollar': PhosphorIconsDuotone.currencyCircleDollar, + 'currencyCny': PhosphorIconsDuotone.currencyCny, + 'currencyDollar': PhosphorIconsDuotone.currencyDollar, + 'currencyDollarSimple': PhosphorIconsDuotone.currencyDollarSimple, + 'currencyEth': PhosphorIconsDuotone.currencyEth, + 'currencyEur': PhosphorIconsDuotone.currencyEur, + 'currencyGbp': PhosphorIconsDuotone.currencyGbp, + 'currencyInr': PhosphorIconsDuotone.currencyInr, + 'currencyJpy': PhosphorIconsDuotone.currencyJpy, + 'currencyKrw': PhosphorIconsDuotone.currencyKrw, + 'currencyKzt': PhosphorIconsDuotone.currencyKzt, + 'currencyNgn': PhosphorIconsDuotone.currencyNgn, + 'currencyRub': PhosphorIconsDuotone.currencyRub, + 'cursor': PhosphorIconsDuotone.cursor, + 'cursorClick': PhosphorIconsDuotone.cursorClick, + 'cursorText': PhosphorIconsDuotone.cursorText, + 'cylinder': PhosphorIconsDuotone.cylinder, + 'database': PhosphorIconsDuotone.database, + 'desk': PhosphorIconsDuotone.desk, + 'desktop': PhosphorIconsDuotone.desktop, + 'desktopTower': PhosphorIconsDuotone.desktopTower, + 'detective': PhosphorIconsDuotone.detective, + 'devToLogo': PhosphorIconsDuotone.devToLogo, + 'deviceMobile': PhosphorIconsDuotone.deviceMobile, + 'deviceMobileCamera': PhosphorIconsDuotone.deviceMobileCamera, + 'deviceMobileSlash': PhosphorIconsDuotone.deviceMobileSlash, + 'deviceMobileSpeaker': PhosphorIconsDuotone.deviceMobileSpeaker, + 'deviceRotate': PhosphorIconsDuotone.deviceRotate, + 'deviceTablet': PhosphorIconsDuotone.deviceTablet, + 'deviceTabletCamera': PhosphorIconsDuotone.deviceTabletCamera, + 'deviceTabletSpeaker': PhosphorIconsDuotone.deviceTabletSpeaker, + 'devices': PhosphorIconsDuotone.devices, + 'diamond': PhosphorIconsDuotone.diamond, + 'diamondsFour': PhosphorIconsDuotone.diamondsFour, + 'diceFive': PhosphorIconsDuotone.diceFive, + 'diceFour': PhosphorIconsDuotone.diceFour, + 'diceOne': PhosphorIconsDuotone.diceOne, + 'diceSix': PhosphorIconsDuotone.diceSix, + 'diceThree': PhosphorIconsDuotone.diceThree, + 'diceTwo': PhosphorIconsDuotone.diceTwo, + 'disc': PhosphorIconsDuotone.disc, + 'discoBall': PhosphorIconsDuotone.discoBall, + 'discordLogo': PhosphorIconsDuotone.discordLogo, + 'divide': PhosphorIconsDuotone.divide, + 'dna': PhosphorIconsDuotone.dna, + 'dog': PhosphorIconsDuotone.dog, + 'door': PhosphorIconsDuotone.door, + 'doorOpen': PhosphorIconsDuotone.doorOpen, + 'dot': PhosphorIconsDuotone.dot, + 'dotOutline': PhosphorIconsDuotone.dotOutline, + 'dotsNine': PhosphorIconsDuotone.dotsNine, + 'dotsSix': PhosphorIconsDuotone.dotsSix, + 'dotsSixVertical': PhosphorIconsDuotone.dotsSixVertical, + 'dotsThree': PhosphorIconsDuotone.dotsThree, + 'dotsThreeCircle': PhosphorIconsDuotone.dotsThreeCircle, + 'dotsThreeCircleVertical': PhosphorIconsDuotone.dotsThreeCircleVertical, + 'dotsThreeOutline': PhosphorIconsDuotone.dotsThreeOutline, + 'dotsThreeOutlineVertical': PhosphorIconsDuotone.dotsThreeOutlineVertical, + 'dotsThreeVertical': PhosphorIconsDuotone.dotsThreeVertical, + 'download': PhosphorIconsDuotone.download, + 'downloadSimple': PhosphorIconsDuotone.downloadSimple, + 'dress': PhosphorIconsDuotone.dress, + 'dresser': PhosphorIconsDuotone.dresser, + 'dribbbleLogo': PhosphorIconsDuotone.dribbbleLogo, + 'drone': PhosphorIconsDuotone.drone, + 'drop': PhosphorIconsDuotone.drop, + 'dropHalf': PhosphorIconsDuotone.dropHalf, + 'dropHalfBottom': PhosphorIconsDuotone.dropHalfBottom, + 'dropSimple': PhosphorIconsDuotone.dropSimple, + 'dropSlash': PhosphorIconsDuotone.dropSlash, + 'dropboxLogo': PhosphorIconsDuotone.dropboxLogo, + 'ear': PhosphorIconsDuotone.ear, + 'earSlash': PhosphorIconsDuotone.earSlash, + 'egg': PhosphorIconsDuotone.egg, + 'eggCrack': PhosphorIconsDuotone.eggCrack, + 'eject': PhosphorIconsDuotone.eject, + 'ejectSimple': PhosphorIconsDuotone.ejectSimple, + 'elevator': PhosphorIconsDuotone.elevator, + 'empty': PhosphorIconsDuotone.empty, + 'engine': PhosphorIconsDuotone.engine, + 'envelope': PhosphorIconsDuotone.envelope, + 'envelopeOpen': PhosphorIconsDuotone.envelopeOpen, + 'envelopeSimple': PhosphorIconsDuotone.envelopeSimple, + 'envelopeSimpleOpen': PhosphorIconsDuotone.envelopeSimpleOpen, + 'equalizer': PhosphorIconsDuotone.equalizer, + 'equals': PhosphorIconsDuotone.equals, + 'eraser': PhosphorIconsDuotone.eraser, + 'escalatorDown': PhosphorIconsDuotone.escalatorDown, + 'escalatorUp': PhosphorIconsDuotone.escalatorUp, + 'exam': PhosphorIconsDuotone.exam, + 'exclamationMark': PhosphorIconsDuotone.exclamationMark, + 'exclude': PhosphorIconsDuotone.exclude, + 'excludeSquare': PhosphorIconsDuotone.excludeSquare, + 'export': PhosphorIconsDuotone.export, + 'eye': PhosphorIconsDuotone.eye, + 'eyeClosed': PhosphorIconsDuotone.eyeClosed, + 'eyeSlash': PhosphorIconsDuotone.eyeSlash, + 'eyedropper': PhosphorIconsDuotone.eyedropper, + 'eyedropperSample': PhosphorIconsDuotone.eyedropperSample, + 'eyeglasses': PhosphorIconsDuotone.eyeglasses, + 'eyes': PhosphorIconsDuotone.eyes, + 'faceMask': PhosphorIconsDuotone.faceMask, + 'facebookLogo': PhosphorIconsDuotone.facebookLogo, + 'factory': PhosphorIconsDuotone.factory, + 'faders': PhosphorIconsDuotone.faders, + 'fadersHorizontal': PhosphorIconsDuotone.fadersHorizontal, + 'falloutShelter': PhosphorIconsDuotone.falloutShelter, + 'fan': PhosphorIconsDuotone.fan, + 'farm': PhosphorIconsDuotone.farm, + 'fastForward': PhosphorIconsDuotone.fastForward, + 'fastForwardCircle': PhosphorIconsDuotone.fastForwardCircle, + 'feather': PhosphorIconsDuotone.feather, + 'fediverseLogo': PhosphorIconsDuotone.fediverseLogo, + 'figmaLogo': PhosphorIconsDuotone.figmaLogo, + 'file': PhosphorIconsDuotone.file, + 'fileArchive': PhosphorIconsDuotone.fileArchive, + 'fileArrowDown': PhosphorIconsDuotone.fileArrowDown, + 'fileArrowUp': PhosphorIconsDuotone.fileArrowUp, + 'fileAudio': PhosphorIconsDuotone.fileAudio, + 'fileC': PhosphorIconsDuotone.fileC, + 'fileCSharp': PhosphorIconsDuotone.fileCSharp, + 'fileCloud': PhosphorIconsDuotone.fileCloud, + 'fileCode': PhosphorIconsDuotone.fileCode, + 'fileCpp': PhosphorIconsDuotone.fileCpp, + 'fileCss': PhosphorIconsDuotone.fileCss, + 'fileCsv': PhosphorIconsDuotone.fileCsv, + 'fileDashed': PhosphorIconsDuotone.fileDashed, + 'fileDoc': PhosphorIconsDuotone.fileDoc, + 'fileHtml': PhosphorIconsDuotone.fileHtml, + 'fileImage': PhosphorIconsDuotone.fileImage, + 'fileIni': PhosphorIconsDuotone.fileIni, + 'fileJpg': PhosphorIconsDuotone.fileJpg, + 'fileJs': PhosphorIconsDuotone.fileJs, + 'fileJsx': PhosphorIconsDuotone.fileJsx, + 'fileLock': PhosphorIconsDuotone.fileLock, + 'fileMagnifyingGlass': PhosphorIconsDuotone.fileMagnifyingGlass, + 'fileMd': PhosphorIconsDuotone.fileMd, + 'fileMinus': PhosphorIconsDuotone.fileMinus, + 'filePdf': PhosphorIconsDuotone.filePdf, + 'filePlus': PhosphorIconsDuotone.filePlus, + 'filePng': PhosphorIconsDuotone.filePng, + 'filePpt': PhosphorIconsDuotone.filePpt, + 'filePy': PhosphorIconsDuotone.filePy, + 'fileRs': PhosphorIconsDuotone.fileRs, + 'fileSql': PhosphorIconsDuotone.fileSql, + 'fileSvg': PhosphorIconsDuotone.fileSvg, + 'fileText': PhosphorIconsDuotone.fileText, + 'fileTs': PhosphorIconsDuotone.fileTs, + 'fileTsx': PhosphorIconsDuotone.fileTsx, + 'fileTxt': PhosphorIconsDuotone.fileTxt, + 'fileVideo': PhosphorIconsDuotone.fileVideo, + 'fileVue': PhosphorIconsDuotone.fileVue, + 'fileX': PhosphorIconsDuotone.fileX, + 'fileXls': PhosphorIconsDuotone.fileXls, + 'fileZip': PhosphorIconsDuotone.fileZip, + 'files': PhosphorIconsDuotone.files, + 'filmReel': PhosphorIconsDuotone.filmReel, + 'filmScript': PhosphorIconsDuotone.filmScript, + 'filmSlate': PhosphorIconsDuotone.filmSlate, + 'filmStrip': PhosphorIconsDuotone.filmStrip, + 'fingerprint': PhosphorIconsDuotone.fingerprint, + 'fingerprintSimple': PhosphorIconsDuotone.fingerprintSimple, + 'finnTheHuman': PhosphorIconsDuotone.finnTheHuman, + 'fire': PhosphorIconsDuotone.fire, + 'fireExtinguisher': PhosphorIconsDuotone.fireExtinguisher, + 'fireSimple': PhosphorIconsDuotone.fireSimple, + 'fireTruck': PhosphorIconsDuotone.fireTruck, + 'firstAid': PhosphorIconsDuotone.firstAid, + 'firstAidKit': PhosphorIconsDuotone.firstAidKit, + 'fish': PhosphorIconsDuotone.fish, + 'fishSimple': PhosphorIconsDuotone.fishSimple, + 'flag': PhosphorIconsDuotone.flag, + 'flagBanner': PhosphorIconsDuotone.flagBanner, + 'flagBannerFold': PhosphorIconsDuotone.flagBannerFold, + 'flagCheckered': PhosphorIconsDuotone.flagCheckered, + 'flagPennant': PhosphorIconsDuotone.flagPennant, + 'flame': PhosphorIconsDuotone.flame, + 'flashlight': PhosphorIconsDuotone.flashlight, + 'flask': PhosphorIconsDuotone.flask, + 'flipHorizontal': PhosphorIconsDuotone.flipHorizontal, + 'flipVertical': PhosphorIconsDuotone.flipVertical, + 'floppyDisk': PhosphorIconsDuotone.floppyDisk, + 'floppyDiskBack': PhosphorIconsDuotone.floppyDiskBack, + 'flowArrow': PhosphorIconsDuotone.flowArrow, + 'flower': PhosphorIconsDuotone.flower, + 'flowerLotus': PhosphorIconsDuotone.flowerLotus, + 'flowerTulip': PhosphorIconsDuotone.flowerTulip, + 'flyingSaucer': PhosphorIconsDuotone.flyingSaucer, + 'folder': PhosphorIconsDuotone.folder, + 'folderDashed': PhosphorIconsDuotone.folderDashed, + 'folderLock': PhosphorIconsDuotone.folderLock, + 'folderMinus': PhosphorIconsDuotone.folderMinus, + 'folderOpen': PhosphorIconsDuotone.folderOpen, + 'folderPlus': PhosphorIconsDuotone.folderPlus, + 'folderSimple': PhosphorIconsDuotone.folderSimple, + 'folderSimpleDashed': PhosphorIconsDuotone.folderSimpleDashed, + 'folderSimpleLock': PhosphorIconsDuotone.folderSimpleLock, + 'folderSimpleMinus': PhosphorIconsDuotone.folderSimpleMinus, + 'folderSimplePlus': PhosphorIconsDuotone.folderSimplePlus, + 'folderSimpleStar': PhosphorIconsDuotone.folderSimpleStar, + 'folderSimpleUser': PhosphorIconsDuotone.folderSimpleUser, + 'folderStar': PhosphorIconsDuotone.folderStar, + 'folderUser': PhosphorIconsDuotone.folderUser, + 'folders': PhosphorIconsDuotone.folders, + 'football': PhosphorIconsDuotone.football, + 'footballHelmet': PhosphorIconsDuotone.footballHelmet, + 'footprints': PhosphorIconsDuotone.footprints, + 'forkKnife': PhosphorIconsDuotone.forkKnife, + 'fourK': PhosphorIconsDuotone.fourK, + 'frameCorners': PhosphorIconsDuotone.frameCorners, + 'framerLogo': PhosphorIconsDuotone.framerLogo, + 'function': PhosphorIconsDuotone.function, + 'funnel': PhosphorIconsDuotone.funnel, + 'funnelSimple': PhosphorIconsDuotone.funnelSimple, + 'funnelSimpleX': PhosphorIconsDuotone.funnelSimpleX, + 'funnelX': PhosphorIconsDuotone.funnelX, + 'gameController': PhosphorIconsDuotone.gameController, + 'garage': PhosphorIconsDuotone.garage, + 'gasCan': PhosphorIconsDuotone.gasCan, + 'gasPump': PhosphorIconsDuotone.gasPump, + 'gauge': PhosphorIconsDuotone.gauge, + 'gavel': PhosphorIconsDuotone.gavel, + 'gear': PhosphorIconsDuotone.gear, + 'gearFine': PhosphorIconsDuotone.gearFine, + 'gearSix': PhosphorIconsDuotone.gearSix, + 'genderFemale': PhosphorIconsDuotone.genderFemale, + 'genderIntersex': PhosphorIconsDuotone.genderIntersex, + 'genderMale': PhosphorIconsDuotone.genderMale, + 'genderNeuter': PhosphorIconsDuotone.genderNeuter, + 'genderNonbinary': PhosphorIconsDuotone.genderNonbinary, + 'genderTransgender': PhosphorIconsDuotone.genderTransgender, + 'ghost': PhosphorIconsDuotone.ghost, + 'gif': PhosphorIconsDuotone.gif, + 'gift': PhosphorIconsDuotone.gift, + 'gitBranch': PhosphorIconsDuotone.gitBranch, + 'gitCommit': PhosphorIconsDuotone.gitCommit, + 'gitDiff': PhosphorIconsDuotone.gitDiff, + 'gitFork': PhosphorIconsDuotone.gitFork, + 'gitMerge': PhosphorIconsDuotone.gitMerge, + 'gitPullRequest': PhosphorIconsDuotone.gitPullRequest, + 'githubLogo': PhosphorIconsDuotone.githubLogo, + 'gitlabLogo': PhosphorIconsDuotone.gitlabLogo, + 'gitlabLogoSimple': PhosphorIconsDuotone.gitlabLogoSimple, + 'globe': PhosphorIconsDuotone.globe, + 'globeHemisphereEast': PhosphorIconsDuotone.globeHemisphereEast, + 'globeHemisphereWest': PhosphorIconsDuotone.globeHemisphereWest, + 'globeSimple': PhosphorIconsDuotone.globeSimple, + 'globeSimpleX': PhosphorIconsDuotone.globeSimpleX, + 'globeStand': PhosphorIconsDuotone.globeStand, + 'globeX': PhosphorIconsDuotone.globeX, + 'goggles': PhosphorIconsDuotone.goggles, + 'golf': PhosphorIconsDuotone.golf, + 'goodreadsLogo': PhosphorIconsDuotone.goodreadsLogo, + 'googleCardboardLogo': PhosphorIconsDuotone.googleCardboardLogo, + 'googleChromeLogo': PhosphorIconsDuotone.googleChromeLogo, + 'googleDriveLogo': PhosphorIconsDuotone.googleDriveLogo, + 'googleLogo': PhosphorIconsDuotone.googleLogo, + 'googlePhotosLogo': PhosphorIconsDuotone.googlePhotosLogo, + 'googlePlayLogo': PhosphorIconsDuotone.googlePlayLogo, + 'googlePodcastsLogo': PhosphorIconsDuotone.googlePodcastsLogo, + 'gps': PhosphorIconsDuotone.gps, + 'gpsFix': PhosphorIconsDuotone.gpsFix, + 'gpsSlash': PhosphorIconsDuotone.gpsSlash, + 'gradient': PhosphorIconsDuotone.gradient, + 'graduationCap': PhosphorIconsDuotone.graduationCap, + 'grains': PhosphorIconsDuotone.grains, + 'grainsSlash': PhosphorIconsDuotone.grainsSlash, + 'graph': PhosphorIconsDuotone.graph, + 'graphicsCard': PhosphorIconsDuotone.graphicsCard, + 'greaterThan': PhosphorIconsDuotone.greaterThan, + 'greaterThanOrEqual': PhosphorIconsDuotone.greaterThanOrEqual, + 'gridFour': PhosphorIconsDuotone.gridFour, + 'gridNine': PhosphorIconsDuotone.gridNine, + 'guitar': PhosphorIconsDuotone.guitar, + 'hairDryer': PhosphorIconsDuotone.hairDryer, + 'hamburger': PhosphorIconsDuotone.hamburger, + 'hammer': PhosphorIconsDuotone.hammer, + 'hand': PhosphorIconsDuotone.hand, + 'handArrowDown': PhosphorIconsDuotone.handArrowDown, + 'handArrowUp': PhosphorIconsDuotone.handArrowUp, + 'handCoins': PhosphorIconsDuotone.handCoins, + 'handDeposit': PhosphorIconsDuotone.handDeposit, + 'handEye': PhosphorIconsDuotone.handEye, + 'handFist': PhosphorIconsDuotone.handFist, + 'handGrabbing': PhosphorIconsDuotone.handGrabbing, + 'handHeart': PhosphorIconsDuotone.handHeart, + 'handPalm': PhosphorIconsDuotone.handPalm, + 'handPeace': PhosphorIconsDuotone.handPeace, + 'handPointing': PhosphorIconsDuotone.handPointing, + 'handSoap': PhosphorIconsDuotone.handSoap, + 'handSwipeLeft': PhosphorIconsDuotone.handSwipeLeft, + 'handSwipeRight': PhosphorIconsDuotone.handSwipeRight, + 'handTap': PhosphorIconsDuotone.handTap, + 'handWaving': PhosphorIconsDuotone.handWaving, + 'handWithdraw': PhosphorIconsDuotone.handWithdraw, + 'handbag': PhosphorIconsDuotone.handbag, + 'handbagSimple': PhosphorIconsDuotone.handbagSimple, + 'handsClapping': PhosphorIconsDuotone.handsClapping, + 'handsPraying': PhosphorIconsDuotone.handsPraying, + 'handshake': PhosphorIconsDuotone.handshake, + 'hardDrive': PhosphorIconsDuotone.hardDrive, + 'hardDrives': PhosphorIconsDuotone.hardDrives, + 'hardHat': PhosphorIconsDuotone.hardHat, + 'hash': PhosphorIconsDuotone.hash, + 'hashStraight': PhosphorIconsDuotone.hashStraight, + 'headCircuit': PhosphorIconsDuotone.headCircuit, + 'headlights': PhosphorIconsDuotone.headlights, + 'headphones': PhosphorIconsDuotone.headphones, + 'headset': PhosphorIconsDuotone.headset, + 'heart': PhosphorIconsDuotone.heart, + 'heartBreak': PhosphorIconsDuotone.heartBreak, + 'heartHalf': PhosphorIconsDuotone.heartHalf, + 'heartStraight': PhosphorIconsDuotone.heartStraight, + 'heartStraightBreak': PhosphorIconsDuotone.heartStraightBreak, + 'heartbeat': PhosphorIconsDuotone.heartbeat, + 'hexagon': PhosphorIconsDuotone.hexagon, + 'highDefinition': PhosphorIconsDuotone.highDefinition, + 'highHeel': PhosphorIconsDuotone.highHeel, + 'highlighter': PhosphorIconsDuotone.highlighter, + 'highlighterCircle': PhosphorIconsDuotone.highlighterCircle, + 'hockey': PhosphorIconsDuotone.hockey, + 'hoodie': PhosphorIconsDuotone.hoodie, + 'horse': PhosphorIconsDuotone.horse, + 'hospital': PhosphorIconsDuotone.hospital, + 'hourglass': PhosphorIconsDuotone.hourglass, + 'hourglassHigh': PhosphorIconsDuotone.hourglassHigh, + 'hourglassLow': PhosphorIconsDuotone.hourglassLow, + 'hourglassMedium': PhosphorIconsDuotone.hourglassMedium, + 'hourglassSimple': PhosphorIconsDuotone.hourglassSimple, + 'hourglassSimpleHigh': PhosphorIconsDuotone.hourglassSimpleHigh, + 'hourglassSimpleLow': PhosphorIconsDuotone.hourglassSimpleLow, + 'hourglassSimpleMedium': PhosphorIconsDuotone.hourglassSimpleMedium, + 'house': PhosphorIconsDuotone.house, + 'houseLine': PhosphorIconsDuotone.houseLine, + 'houseSimple': PhosphorIconsDuotone.houseSimple, + 'hurricane': PhosphorIconsDuotone.hurricane, + 'iceCream': PhosphorIconsDuotone.iceCream, + 'identificationBadge': PhosphorIconsDuotone.identificationBadge, + 'identificationCard': PhosphorIconsDuotone.identificationCard, + 'image': PhosphorIconsDuotone.image, + 'imageBroken': PhosphorIconsDuotone.imageBroken, + 'imageSquare': PhosphorIconsDuotone.imageSquare, + 'images': PhosphorIconsDuotone.images, + 'imagesSquare': PhosphorIconsDuotone.imagesSquare, + 'infinity': PhosphorIconsDuotone.infinity, + 'info': PhosphorIconsDuotone.info, + 'instagramLogo': PhosphorIconsDuotone.instagramLogo, + 'intersect': PhosphorIconsDuotone.intersect, + 'intersectSquare': PhosphorIconsDuotone.intersectSquare, + 'intersectThree': PhosphorIconsDuotone.intersectThree, + 'intersection': PhosphorIconsDuotone.intersection, + 'invoice': PhosphorIconsDuotone.invoice, + 'island': PhosphorIconsDuotone.island, + 'jar': PhosphorIconsDuotone.jar, + 'jarLabel': PhosphorIconsDuotone.jarLabel, + 'jeep': PhosphorIconsDuotone.jeep, + 'joystick': PhosphorIconsDuotone.joystick, + 'kanban': PhosphorIconsDuotone.kanban, + 'key': PhosphorIconsDuotone.key, + 'keyReturn': PhosphorIconsDuotone.keyReturn, + 'keyboard': PhosphorIconsDuotone.keyboard, + 'keyhole': PhosphorIconsDuotone.keyhole, + 'knife': PhosphorIconsDuotone.knife, + 'ladder': PhosphorIconsDuotone.ladder, + 'ladderSimple': PhosphorIconsDuotone.ladderSimple, + 'lamp': PhosphorIconsDuotone.lamp, + 'lampPendant': PhosphorIconsDuotone.lampPendant, + 'laptop': PhosphorIconsDuotone.laptop, + 'lasso': PhosphorIconsDuotone.lasso, + 'lastfmLogo': PhosphorIconsDuotone.lastfmLogo, + 'layout': PhosphorIconsDuotone.layout, + 'leaf': PhosphorIconsDuotone.leaf, + 'lectern': PhosphorIconsDuotone.lectern, + 'lego': PhosphorIconsDuotone.lego, + 'legoSmiley': PhosphorIconsDuotone.legoSmiley, + 'lessThan': PhosphorIconsDuotone.lessThan, + 'lessThanOrEqual': PhosphorIconsDuotone.lessThanOrEqual, + 'letterCircleH': PhosphorIconsDuotone.letterCircleH, + 'letterCircleP': PhosphorIconsDuotone.letterCircleP, + 'letterCircleV': PhosphorIconsDuotone.letterCircleV, + 'lifebuoy': PhosphorIconsDuotone.lifebuoy, + 'lightbulb': PhosphorIconsDuotone.lightbulb, + 'lightbulbFilament': PhosphorIconsDuotone.lightbulbFilament, + 'lighthouse': PhosphorIconsDuotone.lighthouse, + 'lightning': PhosphorIconsDuotone.lightning, + 'lightningA': PhosphorIconsDuotone.lightningA, + 'lightningSlash': PhosphorIconsDuotone.lightningSlash, + 'lineSegment': PhosphorIconsDuotone.lineSegment, + 'lineSegments': PhosphorIconsDuotone.lineSegments, + 'lineVertical': PhosphorIconsDuotone.lineVertical, + 'link': PhosphorIconsDuotone.link, + 'linkBreak': PhosphorIconsDuotone.linkBreak, + 'linkSimple': PhosphorIconsDuotone.linkSimple, + 'linkSimpleBreak': PhosphorIconsDuotone.linkSimpleBreak, + 'linkSimpleHorizontal': PhosphorIconsDuotone.linkSimpleHorizontal, + 'linkSimpleHorizontalBreak': PhosphorIconsDuotone.linkSimpleHorizontalBreak, + 'linkedinLogo': PhosphorIconsDuotone.linkedinLogo, + 'linktreeLogo': PhosphorIconsDuotone.linktreeLogo, + 'linuxLogo': PhosphorIconsDuotone.linuxLogo, + 'list': PhosphorIconsDuotone.list, + 'listBullets': PhosphorIconsDuotone.listBullets, + 'listChecks': PhosphorIconsDuotone.listChecks, + 'listDashes': PhosphorIconsDuotone.listDashes, + 'listHeart': PhosphorIconsDuotone.listHeart, + 'listMagnifyingGlass': PhosphorIconsDuotone.listMagnifyingGlass, + 'listNumbers': PhosphorIconsDuotone.listNumbers, + 'listPlus': PhosphorIconsDuotone.listPlus, + 'listStar': PhosphorIconsDuotone.listStar, + 'lock': PhosphorIconsDuotone.lock, + 'lockKey': PhosphorIconsDuotone.lockKey, + 'lockKeyOpen': PhosphorIconsDuotone.lockKeyOpen, + 'lockLaminated': PhosphorIconsDuotone.lockLaminated, + 'lockLaminatedOpen': PhosphorIconsDuotone.lockLaminatedOpen, + 'lockOpen': PhosphorIconsDuotone.lockOpen, + 'lockSimple': PhosphorIconsDuotone.lockSimple, + 'lockSimpleOpen': PhosphorIconsDuotone.lockSimpleOpen, + 'lockers': PhosphorIconsDuotone.lockers, + 'log': PhosphorIconsDuotone.log, + 'magicWand': PhosphorIconsDuotone.magicWand, + 'magnet': PhosphorIconsDuotone.magnet, + 'magnetStraight': PhosphorIconsDuotone.magnetStraight, + 'magnifyingGlass': PhosphorIconsDuotone.magnifyingGlass, + 'magnifyingGlassMinus': PhosphorIconsDuotone.magnifyingGlassMinus, + 'magnifyingGlassPlus': PhosphorIconsDuotone.magnifyingGlassPlus, + 'mailbox': PhosphorIconsDuotone.mailbox, + 'mapPin': PhosphorIconsDuotone.mapPin, + 'mapPinArea': PhosphorIconsDuotone.mapPinArea, + 'mapPinLine': PhosphorIconsDuotone.mapPinLine, + 'mapPinPlus': PhosphorIconsDuotone.mapPinPlus, + 'mapPinSimple': PhosphorIconsDuotone.mapPinSimple, + 'mapPinSimpleArea': PhosphorIconsDuotone.mapPinSimpleArea, + 'mapPinSimpleLine': PhosphorIconsDuotone.mapPinSimpleLine, + 'mapTrifold': PhosphorIconsDuotone.mapTrifold, + 'markdownLogo': PhosphorIconsDuotone.markdownLogo, + 'markerCircle': PhosphorIconsDuotone.markerCircle, + 'martini': PhosphorIconsDuotone.martini, + 'maskHappy': PhosphorIconsDuotone.maskHappy, + 'maskSad': PhosphorIconsDuotone.maskSad, + 'mastodonLogo': PhosphorIconsDuotone.mastodonLogo, + 'mathOperations': PhosphorIconsDuotone.mathOperations, + 'matrixLogo': PhosphorIconsDuotone.matrixLogo, + 'medal': PhosphorIconsDuotone.medal, + 'medalMilitary': PhosphorIconsDuotone.medalMilitary, + 'mediumLogo': PhosphorIconsDuotone.mediumLogo, + 'megaphone': PhosphorIconsDuotone.megaphone, + 'megaphoneSimple': PhosphorIconsDuotone.megaphoneSimple, + 'memberOf': PhosphorIconsDuotone.memberOf, + 'memory': PhosphorIconsDuotone.memory, + 'messengerLogo': PhosphorIconsDuotone.messengerLogo, + 'metaLogo': PhosphorIconsDuotone.metaLogo, + 'meteor': PhosphorIconsDuotone.meteor, + 'metronome': PhosphorIconsDuotone.metronome, + 'microphone': PhosphorIconsDuotone.microphone, + 'microphoneSlash': PhosphorIconsDuotone.microphoneSlash, + 'microphoneStage': PhosphorIconsDuotone.microphoneStage, + 'microscope': PhosphorIconsDuotone.microscope, + 'microsoftExcelLogo': PhosphorIconsDuotone.microsoftExcelLogo, + 'microsoftOutlookLogo': PhosphorIconsDuotone.microsoftOutlookLogo, + 'microsoftPowerpointLogo': PhosphorIconsDuotone.microsoftPowerpointLogo, + 'microsoftTeamsLogo': PhosphorIconsDuotone.microsoftTeamsLogo, + 'microsoftWordLogo': PhosphorIconsDuotone.microsoftWordLogo, + 'minus': PhosphorIconsDuotone.minus, + 'minusCircle': PhosphorIconsDuotone.minusCircle, + 'minusSquare': PhosphorIconsDuotone.minusSquare, + 'money': PhosphorIconsDuotone.money, + 'moneyWavy': PhosphorIconsDuotone.moneyWavy, + 'monitor': PhosphorIconsDuotone.monitor, + 'monitorArrowUp': PhosphorIconsDuotone.monitorArrowUp, + 'monitorPlay': PhosphorIconsDuotone.monitorPlay, + 'moon': PhosphorIconsDuotone.moon, + 'moonStars': PhosphorIconsDuotone.moonStars, + 'moped': PhosphorIconsDuotone.moped, + 'mopedFront': PhosphorIconsDuotone.mopedFront, + 'mosque': PhosphorIconsDuotone.mosque, + 'motorcycle': PhosphorIconsDuotone.motorcycle, + 'mountains': PhosphorIconsDuotone.mountains, + 'mouse': PhosphorIconsDuotone.mouse, + 'mouseLeftClick': PhosphorIconsDuotone.mouseLeftClick, + 'mouseMiddleClick': PhosphorIconsDuotone.mouseMiddleClick, + 'mouseRightClick': PhosphorIconsDuotone.mouseRightClick, + 'mouseScroll': PhosphorIconsDuotone.mouseScroll, + 'mouseSimple': PhosphorIconsDuotone.mouseSimple, + 'musicNote': PhosphorIconsDuotone.musicNote, + 'musicNoteSimple': PhosphorIconsDuotone.musicNoteSimple, + 'musicNotes': PhosphorIconsDuotone.musicNotes, + 'musicNotesMinus': PhosphorIconsDuotone.musicNotesMinus, + 'musicNotesPlus': PhosphorIconsDuotone.musicNotesPlus, + 'musicNotesSimple': PhosphorIconsDuotone.musicNotesSimple, + 'navigationArrow': PhosphorIconsDuotone.navigationArrow, + 'needle': PhosphorIconsDuotone.needle, + 'network': PhosphorIconsDuotone.network, + 'networkSlash': PhosphorIconsDuotone.networkSlash, + 'networkX': PhosphorIconsDuotone.networkX, + 'newspaper': PhosphorIconsDuotone.newspaper, + 'newspaperClipping': PhosphorIconsDuotone.newspaperClipping, + 'notEquals': PhosphorIconsDuotone.notEquals, + 'notMemberOf': PhosphorIconsDuotone.notMemberOf, + 'notSubsetOf': PhosphorIconsDuotone.notSubsetOf, + 'notSupersetOf': PhosphorIconsDuotone.notSupersetOf, + 'notches': PhosphorIconsDuotone.notches, + 'note': PhosphorIconsDuotone.note, + 'noteBlank': PhosphorIconsDuotone.noteBlank, + 'notePencil': PhosphorIconsDuotone.notePencil, + 'notebook': PhosphorIconsDuotone.notebook, + 'notepad': PhosphorIconsDuotone.notepad, + 'notification': PhosphorIconsDuotone.notification, + 'notionLogo': PhosphorIconsDuotone.notionLogo, + 'nuclearPlant': PhosphorIconsDuotone.nuclearPlant, + 'numberCircleEight': PhosphorIconsDuotone.numberCircleEight, + 'numberCircleFive': PhosphorIconsDuotone.numberCircleFive, + 'numberCircleFour': PhosphorIconsDuotone.numberCircleFour, + 'numberCircleNine': PhosphorIconsDuotone.numberCircleNine, + 'numberCircleOne': PhosphorIconsDuotone.numberCircleOne, + 'numberCircleSeven': PhosphorIconsDuotone.numberCircleSeven, + 'numberCircleSix': PhosphorIconsDuotone.numberCircleSix, + 'numberCircleThree': PhosphorIconsDuotone.numberCircleThree, + 'numberCircleTwo': PhosphorIconsDuotone.numberCircleTwo, + 'numberCircleZero': PhosphorIconsDuotone.numberCircleZero, + 'numberEight': PhosphorIconsDuotone.numberEight, + 'numberFive': PhosphorIconsDuotone.numberFive, + 'numberFour': PhosphorIconsDuotone.numberFour, + 'numberNine': PhosphorIconsDuotone.numberNine, + 'numberOne': PhosphorIconsDuotone.numberOne, + 'numberSeven': PhosphorIconsDuotone.numberSeven, + 'numberSix': PhosphorIconsDuotone.numberSix, + 'numberSquareEight': PhosphorIconsDuotone.numberSquareEight, + 'numberSquareFive': PhosphorIconsDuotone.numberSquareFive, + 'numberSquareFour': PhosphorIconsDuotone.numberSquareFour, + 'numberSquareNine': PhosphorIconsDuotone.numberSquareNine, + 'numberSquareOne': PhosphorIconsDuotone.numberSquareOne, + 'numberSquareSeven': PhosphorIconsDuotone.numberSquareSeven, + 'numberSquareSix': PhosphorIconsDuotone.numberSquareSix, + 'numberSquareThree': PhosphorIconsDuotone.numberSquareThree, + 'numberSquareTwo': PhosphorIconsDuotone.numberSquareTwo, + 'numberSquareZero': PhosphorIconsDuotone.numberSquareZero, + 'numberThree': PhosphorIconsDuotone.numberThree, + 'numberTwo': PhosphorIconsDuotone.numberTwo, + 'numberZero': PhosphorIconsDuotone.numberZero, + 'numpad': PhosphorIconsDuotone.numpad, + 'nut': PhosphorIconsDuotone.nut, + 'nyTimesLogo': PhosphorIconsDuotone.nyTimesLogo, + 'octagon': PhosphorIconsDuotone.octagon, + 'officeChair': PhosphorIconsDuotone.officeChair, + 'onigiri': PhosphorIconsDuotone.onigiri, + 'openAiLogo': PhosphorIconsDuotone.openAiLogo, + 'option': PhosphorIconsDuotone.option, + 'orange': PhosphorIconsDuotone.orange, + 'orangeSlice': PhosphorIconsDuotone.orangeSlice, + 'oven': PhosphorIconsDuotone.oven, + 'package': PhosphorIconsDuotone.package, + 'paintBrush': PhosphorIconsDuotone.paintBrush, + 'paintBrushBroad': PhosphorIconsDuotone.paintBrushBroad, + 'paintBrushHousehold': PhosphorIconsDuotone.paintBrushHousehold, + 'paintBucket': PhosphorIconsDuotone.paintBucket, + 'paintRoller': PhosphorIconsDuotone.paintRoller, + 'palette': PhosphorIconsDuotone.palette, + 'panorama': PhosphorIconsDuotone.panorama, + 'pants': PhosphorIconsDuotone.pants, + 'paperPlane': PhosphorIconsDuotone.paperPlane, + 'paperPlaneRight': PhosphorIconsDuotone.paperPlaneRight, + 'paperPlaneTilt': PhosphorIconsDuotone.paperPlaneTilt, + 'paperclip': PhosphorIconsDuotone.paperclip, + 'paperclipHorizontal': PhosphorIconsDuotone.paperclipHorizontal, + 'parachute': PhosphorIconsDuotone.parachute, + 'paragraph': PhosphorIconsDuotone.paragraph, + 'parallelogram': PhosphorIconsDuotone.parallelogram, + 'park': PhosphorIconsDuotone.park, + 'password': PhosphorIconsDuotone.password, + 'path': PhosphorIconsDuotone.path, + 'patreonLogo': PhosphorIconsDuotone.patreonLogo, + 'pause': PhosphorIconsDuotone.pause, + 'pauseCircle': PhosphorIconsDuotone.pauseCircle, + 'pawPrint': PhosphorIconsDuotone.pawPrint, + 'paypalLogo': PhosphorIconsDuotone.paypalLogo, + 'peace': PhosphorIconsDuotone.peace, + 'pen': PhosphorIconsDuotone.pen, + 'penNib': PhosphorIconsDuotone.penNib, + 'penNibStraight': PhosphorIconsDuotone.penNibStraight, + 'pencil': PhosphorIconsDuotone.pencil, + 'pencilCircle': PhosphorIconsDuotone.pencilCircle, + 'pencilLine': PhosphorIconsDuotone.pencilLine, + 'pencilRuler': PhosphorIconsDuotone.pencilRuler, + 'pencilSimple': PhosphorIconsDuotone.pencilSimple, + 'pencilSimpleLine': PhosphorIconsDuotone.pencilSimpleLine, + 'pencilSimpleSlash': PhosphorIconsDuotone.pencilSimpleSlash, + 'pencilSlash': PhosphorIconsDuotone.pencilSlash, + 'pentagon': PhosphorIconsDuotone.pentagon, + 'pentagram': PhosphorIconsDuotone.pentagram, + 'pepper': PhosphorIconsDuotone.pepper, + 'percent': PhosphorIconsDuotone.percent, + 'person': PhosphorIconsDuotone.person, + 'personArmsSpread': PhosphorIconsDuotone.personArmsSpread, + 'personSimple': PhosphorIconsDuotone.personSimple, + 'personSimpleBike': PhosphorIconsDuotone.personSimpleBike, + 'personSimpleCircle': PhosphorIconsDuotone.personSimpleCircle, + 'personSimpleHike': PhosphorIconsDuotone.personSimpleHike, + 'personSimpleRun': PhosphorIconsDuotone.personSimpleRun, + 'personSimpleSki': PhosphorIconsDuotone.personSimpleSki, + 'personSimpleSnowboard': PhosphorIconsDuotone.personSimpleSnowboard, + 'personSimpleSwim': PhosphorIconsDuotone.personSimpleSwim, + 'personSimpleTaiChi': PhosphorIconsDuotone.personSimpleTaiChi, + 'personSimpleThrow': PhosphorIconsDuotone.personSimpleThrow, + 'personSimpleWalk': PhosphorIconsDuotone.personSimpleWalk, + 'perspective': PhosphorIconsDuotone.perspective, + 'phone': PhosphorIconsDuotone.phone, + 'phoneCall': PhosphorIconsDuotone.phoneCall, + 'phoneDisconnect': PhosphorIconsDuotone.phoneDisconnect, + 'phoneIncoming': PhosphorIconsDuotone.phoneIncoming, + 'phoneList': PhosphorIconsDuotone.phoneList, + 'phoneOutgoing': PhosphorIconsDuotone.phoneOutgoing, + 'phonePause': PhosphorIconsDuotone.phonePause, + 'phonePlus': PhosphorIconsDuotone.phonePlus, + 'phoneSlash': PhosphorIconsDuotone.phoneSlash, + 'phoneTransfer': PhosphorIconsDuotone.phoneTransfer, + 'phoneX': PhosphorIconsDuotone.phoneX, + 'phosphorLogo': PhosphorIconsDuotone.phosphorLogo, + 'pi': PhosphorIconsDuotone.pi, + 'pianoKeys': PhosphorIconsDuotone.pianoKeys, + 'picnicTable': PhosphorIconsDuotone.picnicTable, + 'pictureInpicture': PhosphorIconsDuotone.pictureInpicture, + 'piggyBank': PhosphorIconsDuotone.piggyBank, + 'pill': PhosphorIconsDuotone.pill, + 'pingPong': PhosphorIconsDuotone.pingPong, + 'pintGlass': PhosphorIconsDuotone.pintGlass, + 'pinterestLogo': PhosphorIconsDuotone.pinterestLogo, + 'pinwheel': PhosphorIconsDuotone.pinwheel, + 'pipe': PhosphorIconsDuotone.pipe, + 'pipeWrench': PhosphorIconsDuotone.pipeWrench, + 'pixLogo': PhosphorIconsDuotone.pixLogo, + 'pizza': PhosphorIconsDuotone.pizza, + 'placeholder': PhosphorIconsDuotone.placeholder, + 'planet': PhosphorIconsDuotone.planet, + 'plant': PhosphorIconsDuotone.plant, + 'play': PhosphorIconsDuotone.play, + 'playCircle': PhosphorIconsDuotone.playCircle, + 'playPause': PhosphorIconsDuotone.playPause, + 'playlist': PhosphorIconsDuotone.playlist, + 'plug': PhosphorIconsDuotone.plug, + 'plugCharging': PhosphorIconsDuotone.plugCharging, + 'plugs': PhosphorIconsDuotone.plugs, + 'plugsConnected': PhosphorIconsDuotone.plugsConnected, + 'plus': PhosphorIconsDuotone.plus, + 'plusCircle': PhosphorIconsDuotone.plusCircle, + 'plusMinus': PhosphorIconsDuotone.plusMinus, + 'plusSquare': PhosphorIconsDuotone.plusSquare, + 'pokerChip': PhosphorIconsDuotone.pokerChip, + 'policeCar': PhosphorIconsDuotone.policeCar, + 'polygon': PhosphorIconsDuotone.polygon, + 'popcorn': PhosphorIconsDuotone.popcorn, + 'popsicle': PhosphorIconsDuotone.popsicle, + 'pottedPlant': PhosphorIconsDuotone.pottedPlant, + 'power': PhosphorIconsDuotone.power, + 'prescription': PhosphorIconsDuotone.prescription, + 'presentation': PhosphorIconsDuotone.presentation, + 'presentationChart': PhosphorIconsDuotone.presentationChart, + 'printer': PhosphorIconsDuotone.printer, + 'prohibit': PhosphorIconsDuotone.prohibit, + 'prohibitInset': PhosphorIconsDuotone.prohibitInset, + 'projectorScreen': PhosphorIconsDuotone.projectorScreen, + 'projectorScreenChart': PhosphorIconsDuotone.projectorScreenChart, + 'pulse': PhosphorIconsDuotone.pulse, + 'pushPin': PhosphorIconsDuotone.pushPin, + 'pushPinSimple': PhosphorIconsDuotone.pushPinSimple, + 'pushPinSimpleSlash': PhosphorIconsDuotone.pushPinSimpleSlash, + 'pushPinSlash': PhosphorIconsDuotone.pushPinSlash, + 'puzzlePiece': PhosphorIconsDuotone.puzzlePiece, + 'qrCode': PhosphorIconsDuotone.qrCode, + 'question': PhosphorIconsDuotone.question, + 'questionMark': PhosphorIconsDuotone.questionMark, + 'queue': PhosphorIconsDuotone.queue, + 'quotes': PhosphorIconsDuotone.quotes, + 'rabbit': PhosphorIconsDuotone.rabbit, + 'racquet': PhosphorIconsDuotone.racquet, + 'radical': PhosphorIconsDuotone.radical, + 'radio': PhosphorIconsDuotone.radio, + 'radioButton': PhosphorIconsDuotone.radioButton, + 'radioactive': PhosphorIconsDuotone.radioactive, + 'rainbow': PhosphorIconsDuotone.rainbow, + 'rainbowCloud': PhosphorIconsDuotone.rainbowCloud, + 'ranking': PhosphorIconsDuotone.ranking, + 'readCvLogo': PhosphorIconsDuotone.readCvLogo, + 'receipt': PhosphorIconsDuotone.receipt, + 'receiptX': PhosphorIconsDuotone.receiptX, + 'record': PhosphorIconsDuotone.record, + 'rectangle': PhosphorIconsDuotone.rectangle, + 'rectangleDashed': PhosphorIconsDuotone.rectangleDashed, + 'recycle': PhosphorIconsDuotone.recycle, + 'redditLogo': PhosphorIconsDuotone.redditLogo, + 'repeat': PhosphorIconsDuotone.repeat, + 'repeatOnce': PhosphorIconsDuotone.repeatOnce, + 'replitLogo': PhosphorIconsDuotone.replitLogo, + 'resize': PhosphorIconsDuotone.resize, + 'rewind': PhosphorIconsDuotone.rewind, + 'rewindCircle': PhosphorIconsDuotone.rewindCircle, + 'roadHorizon': PhosphorIconsDuotone.roadHorizon, + 'robot': PhosphorIconsDuotone.robot, + 'rocket': PhosphorIconsDuotone.rocket, + 'rocketLaunch': PhosphorIconsDuotone.rocketLaunch, + 'rows': PhosphorIconsDuotone.rows, + 'rowsPlusBottom': PhosphorIconsDuotone.rowsPlusBottom, + 'rowsPlusTop': PhosphorIconsDuotone.rowsPlusTop, + 'rss': PhosphorIconsDuotone.rss, + 'rssSimple': PhosphorIconsDuotone.rssSimple, + 'rug': PhosphorIconsDuotone.rug, + 'ruler': PhosphorIconsDuotone.ruler, + 'sailboat': PhosphorIconsDuotone.sailboat, + 'scales': PhosphorIconsDuotone.scales, + 'scan': PhosphorIconsDuotone.scan, + 'scanSmiley': PhosphorIconsDuotone.scanSmiley, + 'scissors': PhosphorIconsDuotone.scissors, + 'scooter': PhosphorIconsDuotone.scooter, + 'screencast': PhosphorIconsDuotone.screencast, + 'screwdriver': PhosphorIconsDuotone.screwdriver, + 'scribble': PhosphorIconsDuotone.scribble, + 'scribbleLoop': PhosphorIconsDuotone.scribbleLoop, + 'scroll': PhosphorIconsDuotone.scroll, + 'seal': PhosphorIconsDuotone.seal, + 'sealCheck': PhosphorIconsDuotone.sealCheck, + 'sealPercent': PhosphorIconsDuotone.sealPercent, + 'sealQuestion': PhosphorIconsDuotone.sealQuestion, + 'sealWarning': PhosphorIconsDuotone.sealWarning, + 'seat': PhosphorIconsDuotone.seat, + 'seatbelt': PhosphorIconsDuotone.seatbelt, + 'securityCamera': PhosphorIconsDuotone.securityCamera, + 'selection': PhosphorIconsDuotone.selection, + 'selectionAll': PhosphorIconsDuotone.selectionAll, + 'selectionBackground': PhosphorIconsDuotone.selectionBackground, + 'selectionForeground': PhosphorIconsDuotone.selectionForeground, + 'selectionInverse': PhosphorIconsDuotone.selectionInverse, + 'selectionPlus': PhosphorIconsDuotone.selectionPlus, + 'selectionSlash': PhosphorIconsDuotone.selectionSlash, + 'shapes': PhosphorIconsDuotone.shapes, + 'share': PhosphorIconsDuotone.share, + 'shareFat': PhosphorIconsDuotone.shareFat, + 'shareNetwork': PhosphorIconsDuotone.shareNetwork, + 'shield': PhosphorIconsDuotone.shield, + 'shieldCheck': PhosphorIconsDuotone.shieldCheck, + 'shieldCheckered': PhosphorIconsDuotone.shieldCheckered, + 'shieldChevron': PhosphorIconsDuotone.shieldChevron, + 'shieldPlus': PhosphorIconsDuotone.shieldPlus, + 'shieldSlash': PhosphorIconsDuotone.shieldSlash, + 'shieldStar': PhosphorIconsDuotone.shieldStar, + 'shieldWarning': PhosphorIconsDuotone.shieldWarning, + 'shippingContainer': PhosphorIconsDuotone.shippingContainer, + 'shirtFolded': PhosphorIconsDuotone.shirtFolded, + 'shootingStar': PhosphorIconsDuotone.shootingStar, + 'shoppingBag': PhosphorIconsDuotone.shoppingBag, + 'shoppingBagOpen': PhosphorIconsDuotone.shoppingBagOpen, + 'shoppingCart': PhosphorIconsDuotone.shoppingCart, + 'shoppingCartSimple': PhosphorIconsDuotone.shoppingCartSimple, + 'shovel': PhosphorIconsDuotone.shovel, + 'shower': PhosphorIconsDuotone.shower, + 'shrimp': PhosphorIconsDuotone.shrimp, + 'shuffle': PhosphorIconsDuotone.shuffle, + 'shuffleAngular': PhosphorIconsDuotone.shuffleAngular, + 'shuffleSimple': PhosphorIconsDuotone.shuffleSimple, + 'sidebar': PhosphorIconsDuotone.sidebar, + 'sidebarSimple': PhosphorIconsDuotone.sidebarSimple, + 'sigma': PhosphorIconsDuotone.sigma, + 'signIn': PhosphorIconsDuotone.signIn, + 'signOut': PhosphorIconsDuotone.signOut, + 'signature': PhosphorIconsDuotone.signature, + 'signpost': PhosphorIconsDuotone.signpost, + 'simCard': PhosphorIconsDuotone.simCard, + 'siren': PhosphorIconsDuotone.siren, + 'sketchLogo': PhosphorIconsDuotone.sketchLogo, + 'skipBack': PhosphorIconsDuotone.skipBack, + 'skipBackCircle': PhosphorIconsDuotone.skipBackCircle, + 'skipForward': PhosphorIconsDuotone.skipForward, + 'skipForwardCircle': PhosphorIconsDuotone.skipForwardCircle, + 'skull': PhosphorIconsDuotone.skull, + 'skypeLogo': PhosphorIconsDuotone.skypeLogo, + 'slackLogo': PhosphorIconsDuotone.slackLogo, + 'sliders': PhosphorIconsDuotone.sliders, + 'slidersHorizontal': PhosphorIconsDuotone.slidersHorizontal, + 'slideshow': PhosphorIconsDuotone.slideshow, + 'smiley': PhosphorIconsDuotone.smiley, + 'smileyAngry': PhosphorIconsDuotone.smileyAngry, + 'smileyBlank': PhosphorIconsDuotone.smileyBlank, + 'smileyMeh': PhosphorIconsDuotone.smileyMeh, + 'smileyMelting': PhosphorIconsDuotone.smileyMelting, + 'smileyNervous': PhosphorIconsDuotone.smileyNervous, + 'smileySad': PhosphorIconsDuotone.smileySad, + 'smileySticker': PhosphorIconsDuotone.smileySticker, + 'smileyWink': PhosphorIconsDuotone.smileyWink, + 'smileyXEyes': PhosphorIconsDuotone.smileyXEyes, + 'snapchatLogo': PhosphorIconsDuotone.snapchatLogo, + 'sneaker': PhosphorIconsDuotone.sneaker, + 'sneakerMove': PhosphorIconsDuotone.sneakerMove, + 'snowflake': PhosphorIconsDuotone.snowflake, + 'soccerBall': PhosphorIconsDuotone.soccerBall, + 'sock': PhosphorIconsDuotone.sock, + 'solarPanel': PhosphorIconsDuotone.solarPanel, + 'solarRoof': PhosphorIconsDuotone.solarRoof, + 'sortAscending': PhosphorIconsDuotone.sortAscending, + 'sortDescending': PhosphorIconsDuotone.sortDescending, + 'soundcloudLogo': PhosphorIconsDuotone.soundcloudLogo, + 'spade': PhosphorIconsDuotone.spade, + 'sparkle': PhosphorIconsDuotone.sparkle, + 'speakerHifi': PhosphorIconsDuotone.speakerHifi, + 'speakerHigh': PhosphorIconsDuotone.speakerHigh, + 'speakerLow': PhosphorIconsDuotone.speakerLow, + 'speakerNone': PhosphorIconsDuotone.speakerNone, + 'speakerSimpleHigh': PhosphorIconsDuotone.speakerSimpleHigh, + 'speakerSimpleLow': PhosphorIconsDuotone.speakerSimpleLow, + 'speakerSimpleNone': PhosphorIconsDuotone.speakerSimpleNone, + 'speakerSimpleSlash': PhosphorIconsDuotone.speakerSimpleSlash, + 'speakerSimpleX': PhosphorIconsDuotone.speakerSimpleX, + 'speakerSlash': PhosphorIconsDuotone.speakerSlash, + 'speakerX': PhosphorIconsDuotone.speakerX, + 'speedometer': PhosphorIconsDuotone.speedometer, + 'sphere': PhosphorIconsDuotone.sphere, + 'spinner': PhosphorIconsDuotone.spinner, + 'spinnerBall': PhosphorIconsDuotone.spinnerBall, + 'spinnerGap': PhosphorIconsDuotone.spinnerGap, + 'spiral': PhosphorIconsDuotone.spiral, + 'splitHorizontal': PhosphorIconsDuotone.splitHorizontal, + 'splitVertical': PhosphorIconsDuotone.splitVertical, + 'spotifyLogo': PhosphorIconsDuotone.spotifyLogo, + 'sprayBottle': PhosphorIconsDuotone.sprayBottle, + 'square': PhosphorIconsDuotone.square, + 'squareHalf': PhosphorIconsDuotone.squareHalf, + 'squareHalfBottom': PhosphorIconsDuotone.squareHalfBottom, + 'squareLogo': PhosphorIconsDuotone.squareLogo, + 'squareSplitHorizontal': PhosphorIconsDuotone.squareSplitHorizontal, + 'squareSplitVertical': PhosphorIconsDuotone.squareSplitVertical, + 'squaresFour': PhosphorIconsDuotone.squaresFour, + 'stack': PhosphorIconsDuotone.stack, + 'stackMinus': PhosphorIconsDuotone.stackMinus, + 'stackOverflowLogo': PhosphorIconsDuotone.stackOverflowLogo, + 'stackPlus': PhosphorIconsDuotone.stackPlus, + 'stackSimple': PhosphorIconsDuotone.stackSimple, + 'stairs': PhosphorIconsDuotone.stairs, + 'stamp': PhosphorIconsDuotone.stamp, + 'standardDefinition': PhosphorIconsDuotone.standardDefinition, + 'star': PhosphorIconsDuotone.star, + 'starAndCrescent': PhosphorIconsDuotone.starAndCrescent, + 'starFour': PhosphorIconsDuotone.starFour, + 'starHalf': PhosphorIconsDuotone.starHalf, + 'starOfDavid': PhosphorIconsDuotone.starOfDavid, + 'steamLogo': PhosphorIconsDuotone.steamLogo, + 'steeringWheel': PhosphorIconsDuotone.steeringWheel, + 'steps': PhosphorIconsDuotone.steps, + 'stethoscope': PhosphorIconsDuotone.stethoscope, + 'sticker': PhosphorIconsDuotone.sticker, + 'stool': PhosphorIconsDuotone.stool, + 'stop': PhosphorIconsDuotone.stop, + 'stopCircle': PhosphorIconsDuotone.stopCircle, + 'storefront': PhosphorIconsDuotone.storefront, + 'strategy': PhosphorIconsDuotone.strategy, + 'stripeLogo': PhosphorIconsDuotone.stripeLogo, + 'student': PhosphorIconsDuotone.student, + 'subsetOf': PhosphorIconsDuotone.subsetOf, + 'subsetProperOf': PhosphorIconsDuotone.subsetProperOf, + 'subtitles': PhosphorIconsDuotone.subtitles, + 'subtitlesSlash': PhosphorIconsDuotone.subtitlesSlash, + 'subtract': PhosphorIconsDuotone.subtract, + 'subtractSquare': PhosphorIconsDuotone.subtractSquare, + 'subway': PhosphorIconsDuotone.subway, + 'suitcase': PhosphorIconsDuotone.suitcase, + 'suitcaseRolling': PhosphorIconsDuotone.suitcaseRolling, + 'suitcaseSimple': PhosphorIconsDuotone.suitcaseSimple, + 'sun': PhosphorIconsDuotone.sun, + 'sunDim': PhosphorIconsDuotone.sunDim, + 'sunHorizon': PhosphorIconsDuotone.sunHorizon, + 'sunglasses': PhosphorIconsDuotone.sunglasses, + 'supersetOf': PhosphorIconsDuotone.supersetOf, + 'supersetProperOf': PhosphorIconsDuotone.supersetProperOf, + 'swap': PhosphorIconsDuotone.swap, + 'swatches': PhosphorIconsDuotone.swatches, + 'swimmingPool': PhosphorIconsDuotone.swimmingPool, + 'sword': PhosphorIconsDuotone.sword, + 'synagogue': PhosphorIconsDuotone.synagogue, + 'syringe': PhosphorIconsDuotone.syringe, + 'tShirt': PhosphorIconsDuotone.tShirt, + 'table': PhosphorIconsDuotone.table, + 'tabs': PhosphorIconsDuotone.tabs, + 'tag': PhosphorIconsDuotone.tag, + 'tagChevron': PhosphorIconsDuotone.tagChevron, + 'tagSimple': PhosphorIconsDuotone.tagSimple, + 'target': PhosphorIconsDuotone.target, + 'taxi': PhosphorIconsDuotone.taxi, + 'teaBag': PhosphorIconsDuotone.teaBag, + 'telegramLogo': PhosphorIconsDuotone.telegramLogo, + 'television': PhosphorIconsDuotone.television, + 'televisionSimple': PhosphorIconsDuotone.televisionSimple, + 'tennisBall': PhosphorIconsDuotone.tennisBall, + 'tent': PhosphorIconsDuotone.tent, + 'terminal': PhosphorIconsDuotone.terminal, + 'terminalWindow': PhosphorIconsDuotone.terminalWindow, + 'testTube': PhosphorIconsDuotone.testTube, + 'textAUnderline': PhosphorIconsDuotone.textAUnderline, + 'textAa': PhosphorIconsDuotone.textAa, + 'textAlignCenter': PhosphorIconsDuotone.textAlignCenter, + 'textAlignJustify': PhosphorIconsDuotone.textAlignJustify, + 'textAlignLeft': PhosphorIconsDuotone.textAlignLeft, + 'textAlignRight': PhosphorIconsDuotone.textAlignRight, + 'textB': PhosphorIconsDuotone.textB, + 'textColumns': PhosphorIconsDuotone.textColumns, + 'textH': PhosphorIconsDuotone.textH, + 'textHFive': PhosphorIconsDuotone.textHFive, + 'textHFour': PhosphorIconsDuotone.textHFour, + 'textHOne': PhosphorIconsDuotone.textHOne, + 'textHSix': PhosphorIconsDuotone.textHSix, + 'textHThree': PhosphorIconsDuotone.textHThree, + 'textHTwo': PhosphorIconsDuotone.textHTwo, + 'textIndent': PhosphorIconsDuotone.textIndent, + 'textItalic': PhosphorIconsDuotone.textItalic, + 'textOutdent': PhosphorIconsDuotone.textOutdent, + 'textStrikethrough': PhosphorIconsDuotone.textStrikethrough, + 'textSubscript': PhosphorIconsDuotone.textSubscript, + 'textSuperscript': PhosphorIconsDuotone.textSuperscript, + 'textT': PhosphorIconsDuotone.textT, + 'textTSlash': PhosphorIconsDuotone.textTSlash, + 'textUnderline': PhosphorIconsDuotone.textUnderline, + 'textbox': PhosphorIconsDuotone.textbox, + 'thermometer': PhosphorIconsDuotone.thermometer, + 'thermometerCold': PhosphorIconsDuotone.thermometerCold, + 'thermometerHot': PhosphorIconsDuotone.thermometerHot, + 'thermometerSimple': PhosphorIconsDuotone.thermometerSimple, + 'threadsLogo': PhosphorIconsDuotone.threadsLogo, + 'threeD': PhosphorIconsDuotone.threeD, + 'thumbsDown': PhosphorIconsDuotone.thumbsDown, + 'thumbsUp': PhosphorIconsDuotone.thumbsUp, + 'ticket': PhosphorIconsDuotone.ticket, + 'tidalLogo': PhosphorIconsDuotone.tidalLogo, + 'tiktokLogo': PhosphorIconsDuotone.tiktokLogo, + 'tilde': PhosphorIconsDuotone.tilde, + 'timer': PhosphorIconsDuotone.timer, + 'tipJar': PhosphorIconsDuotone.tipJar, + 'tipi': PhosphorIconsDuotone.tipi, + 'tire': PhosphorIconsDuotone.tire, + 'toggleLeft': PhosphorIconsDuotone.toggleLeft, + 'toggleRight': PhosphorIconsDuotone.toggleRight, + 'toilet': PhosphorIconsDuotone.toilet, + 'toiletPaper': PhosphorIconsDuotone.toiletPaper, + 'toolbox': PhosphorIconsDuotone.toolbox, + 'tooth': PhosphorIconsDuotone.tooth, + 'tornado': PhosphorIconsDuotone.tornado, + 'tote': PhosphorIconsDuotone.tote, + 'toteSimple': PhosphorIconsDuotone.toteSimple, + 'towel': PhosphorIconsDuotone.towel, + 'tractor': PhosphorIconsDuotone.tractor, + 'trademark': PhosphorIconsDuotone.trademark, + 'trademarkRegistered': PhosphorIconsDuotone.trademarkRegistered, + 'trafficCone': PhosphorIconsDuotone.trafficCone, + 'trafficSign': PhosphorIconsDuotone.trafficSign, + 'trafficSignal': PhosphorIconsDuotone.trafficSignal, + 'train': PhosphorIconsDuotone.train, + 'trainRegional': PhosphorIconsDuotone.trainRegional, + 'trainSimple': PhosphorIconsDuotone.trainSimple, + 'tram': PhosphorIconsDuotone.tram, + 'translate': PhosphorIconsDuotone.translate, + 'trash': PhosphorIconsDuotone.trash, + 'trashSimple': PhosphorIconsDuotone.trashSimple, + 'tray': PhosphorIconsDuotone.tray, + 'trayArrowDown': PhosphorIconsDuotone.trayArrowDown, + 'trayArrowUp': PhosphorIconsDuotone.trayArrowUp, + 'treasureChest': PhosphorIconsDuotone.treasureChest, + 'tree': PhosphorIconsDuotone.tree, + 'treeEvergreen': PhosphorIconsDuotone.treeEvergreen, + 'treePalm': PhosphorIconsDuotone.treePalm, + 'treeStructure': PhosphorIconsDuotone.treeStructure, + 'treeView': PhosphorIconsDuotone.treeView, + 'trendDown': PhosphorIconsDuotone.trendDown, + 'trendUp': PhosphorIconsDuotone.trendUp, + 'triangle': PhosphorIconsDuotone.triangle, + 'triangleDashed': PhosphorIconsDuotone.triangleDashed, + 'trolley': PhosphorIconsDuotone.trolley, + 'trolleySuitcase': PhosphorIconsDuotone.trolleySuitcase, + 'trophy': PhosphorIconsDuotone.trophy, + 'truck': PhosphorIconsDuotone.truck, + 'truckTrailer': PhosphorIconsDuotone.truckTrailer, + 'tumblrLogo': PhosphorIconsDuotone.tumblrLogo, + 'twitchLogo': PhosphorIconsDuotone.twitchLogo, + 'twitterLogo': PhosphorIconsDuotone.twitterLogo, + 'umbrella': PhosphorIconsDuotone.umbrella, + 'umbrellaSimple': PhosphorIconsDuotone.umbrellaSimple, + 'union': PhosphorIconsDuotone.union, + 'unite': PhosphorIconsDuotone.unite, + 'uniteSquare': PhosphorIconsDuotone.uniteSquare, + 'upload': PhosphorIconsDuotone.upload, + 'uploadSimple': PhosphorIconsDuotone.uploadSimple, + 'usb': PhosphorIconsDuotone.usb, + 'user': PhosphorIconsDuotone.user, + 'userCheck': PhosphorIconsDuotone.userCheck, + 'userCircle': PhosphorIconsDuotone.userCircle, + 'userCircleCheck': PhosphorIconsDuotone.userCircleCheck, + 'userCircleDashed': PhosphorIconsDuotone.userCircleDashed, + 'userCircleGear': PhosphorIconsDuotone.userCircleGear, + 'userCircleMinus': PhosphorIconsDuotone.userCircleMinus, + 'userCirclePlus': PhosphorIconsDuotone.userCirclePlus, + 'userFocus': PhosphorIconsDuotone.userFocus, + 'userGear': PhosphorIconsDuotone.userGear, + 'userList': PhosphorIconsDuotone.userList, + 'userMinus': PhosphorIconsDuotone.userMinus, + 'userPlus': PhosphorIconsDuotone.userPlus, + 'userRectangle': PhosphorIconsDuotone.userRectangle, + 'userSound': PhosphorIconsDuotone.userSound, + 'userSquare': PhosphorIconsDuotone.userSquare, + 'userSwitch': PhosphorIconsDuotone.userSwitch, + 'users': PhosphorIconsDuotone.users, + 'usersFour': PhosphorIconsDuotone.usersFour, + 'usersThree': PhosphorIconsDuotone.usersThree, + 'van': PhosphorIconsDuotone.van, + 'vault': PhosphorIconsDuotone.vault, + 'vectorThree': PhosphorIconsDuotone.vectorThree, + 'vectorTwo': PhosphorIconsDuotone.vectorTwo, + 'vibrate': PhosphorIconsDuotone.vibrate, + 'video': PhosphorIconsDuotone.video, + 'videoCamera': PhosphorIconsDuotone.videoCamera, + 'videoCameraSlash': PhosphorIconsDuotone.videoCameraSlash, + 'videoConference': PhosphorIconsDuotone.videoConference, + 'vignette': PhosphorIconsDuotone.vignette, + 'vinylRecord': PhosphorIconsDuotone.vinylRecord, + 'virtualReality': PhosphorIconsDuotone.virtualReality, + 'virus': PhosphorIconsDuotone.virus, + 'visor': PhosphorIconsDuotone.visor, + 'voicemail': PhosphorIconsDuotone.voicemail, + 'volleyball': PhosphorIconsDuotone.volleyball, + 'wall': PhosphorIconsDuotone.wall, + 'wallet': PhosphorIconsDuotone.wallet, + 'warehouse': PhosphorIconsDuotone.warehouse, + 'warning': PhosphorIconsDuotone.warning, + 'warningCircle': PhosphorIconsDuotone.warningCircle, + 'warningDiamond': PhosphorIconsDuotone.warningDiamond, + 'warningOctagon': PhosphorIconsDuotone.warningOctagon, + 'washingMachine': PhosphorIconsDuotone.washingMachine, + 'watch': PhosphorIconsDuotone.watch, + 'waveSawtooth': PhosphorIconsDuotone.waveSawtooth, + 'waveSine': PhosphorIconsDuotone.waveSine, + 'waveSquare': PhosphorIconsDuotone.waveSquare, + 'waveTriangle': PhosphorIconsDuotone.waveTriangle, + 'waveform': PhosphorIconsDuotone.waveform, + 'waveformSlash': PhosphorIconsDuotone.waveformSlash, + 'waves': PhosphorIconsDuotone.waves, + 'webcam': PhosphorIconsDuotone.webcam, + 'webcamSlash': PhosphorIconsDuotone.webcamSlash, + 'webhooksLogo': PhosphorIconsDuotone.webhooksLogo, + 'wechatLogo': PhosphorIconsDuotone.wechatLogo, + 'whatsappLogo': PhosphorIconsDuotone.whatsappLogo, + 'wheelchair': PhosphorIconsDuotone.wheelchair, + 'wheelchairMotion': PhosphorIconsDuotone.wheelchairMotion, + 'wifiHigh': PhosphorIconsDuotone.wifiHigh, + 'wifiLow': PhosphorIconsDuotone.wifiLow, + 'wifiMedium': PhosphorIconsDuotone.wifiMedium, + 'wifiNone': PhosphorIconsDuotone.wifiNone, + 'wifiSlash': PhosphorIconsDuotone.wifiSlash, + 'wifiX': PhosphorIconsDuotone.wifiX, + 'wind': PhosphorIconsDuotone.wind, + 'windmill': PhosphorIconsDuotone.windmill, + 'windowsLogo': PhosphorIconsDuotone.windowsLogo, + 'wine': PhosphorIconsDuotone.wine, + 'wrench': PhosphorIconsDuotone.wrench, + 'x': PhosphorIconsDuotone.x, + 'xCircle': PhosphorIconsDuotone.xCircle, + 'xLogo': PhosphorIconsDuotone.xLogo, + 'xSquare': PhosphorIconsDuotone.xSquare, + 'yarn': PhosphorIconsDuotone.yarn, + 'yinYang': PhosphorIconsDuotone.yinYang, + 'youtubeLogo': PhosphorIconsDuotone.youtubeLogo, + }; + + static final Map _iconMapFill = { + 'acorn': PhosphorIconsFill.acorn, + 'addressBook': PhosphorIconsFill.addressBook, + 'addressBookTabs': PhosphorIconsFill.addressBookTabs, + 'airTrafficControl': PhosphorIconsFill.airTrafficControl, + 'airplane': PhosphorIconsFill.airplane, + 'airplaneInFlight': PhosphorIconsFill.airplaneInFlight, + 'airplaneLanding': PhosphorIconsFill.airplaneLanding, + 'airplaneTakeoff': PhosphorIconsFill.airplaneTakeoff, + 'airplaneTaxiing': PhosphorIconsFill.airplaneTaxiing, + 'airplaneTilt': PhosphorIconsFill.airplaneTilt, + 'airplay': PhosphorIconsFill.airplay, + 'alarm': PhosphorIconsFill.alarm, + 'alien': PhosphorIconsFill.alien, + 'alignBottom': PhosphorIconsFill.alignBottom, + 'alignBottomSimple': PhosphorIconsFill.alignBottomSimple, + 'alignCenterHorizontal': PhosphorIconsFill.alignCenterHorizontal, + 'alignCenterHorizontalSimple': PhosphorIconsFill.alignCenterHorizontalSimple, + 'alignCenterVertical': PhosphorIconsFill.alignCenterVertical, + 'alignCenterVerticalSimple': PhosphorIconsFill.alignCenterVerticalSimple, + 'alignLeft': PhosphorIconsFill.alignLeft, + 'alignLeftSimple': PhosphorIconsFill.alignLeftSimple, + 'alignRight': PhosphorIconsFill.alignRight, + 'alignRightSimple': PhosphorIconsFill.alignRightSimple, + 'alignTop': PhosphorIconsFill.alignTop, + 'alignTopSimple': PhosphorIconsFill.alignTopSimple, + 'amazonLogo': PhosphorIconsFill.amazonLogo, + 'ambulance': PhosphorIconsFill.ambulance, + 'anchor': PhosphorIconsFill.anchor, + 'anchorSimple': PhosphorIconsFill.anchorSimple, + 'androidLogo': PhosphorIconsFill.androidLogo, + 'angle': PhosphorIconsFill.angle, + 'angularLogo': PhosphorIconsFill.angularLogo, + 'aperture': PhosphorIconsFill.aperture, + 'appStoreLogo': PhosphorIconsFill.appStoreLogo, + 'appWindow': PhosphorIconsFill.appWindow, + 'appleLogo': PhosphorIconsFill.appleLogo, + 'applePodcastsLogo': PhosphorIconsFill.applePodcastsLogo, + 'approximateEquals': PhosphorIconsFill.approximateEquals, + 'archive': PhosphorIconsFill.archive, + 'armchair': PhosphorIconsFill.armchair, + 'arrowArcLeft': PhosphorIconsFill.arrowArcLeft, + 'arrowArcRight': PhosphorIconsFill.arrowArcRight, + 'arrowBendDoubleUpLeft': PhosphorIconsFill.arrowBendDoubleUpLeft, + 'arrowBendDoubleUpRight': PhosphorIconsFill.arrowBendDoubleUpRight, + 'arrowBendDownLeft': PhosphorIconsFill.arrowBendDownLeft, + 'arrowBendDownRight': PhosphorIconsFill.arrowBendDownRight, + 'arrowBendLeftDown': PhosphorIconsFill.arrowBendLeftDown, + 'arrowBendLeftUp': PhosphorIconsFill.arrowBendLeftUp, + 'arrowBendRightDown': PhosphorIconsFill.arrowBendRightDown, + 'arrowBendRightUp': PhosphorIconsFill.arrowBendRightUp, + 'arrowBendUpLeft': PhosphorIconsFill.arrowBendUpLeft, + 'arrowBendUpRight': PhosphorIconsFill.arrowBendUpRight, + 'arrowCircleDown': PhosphorIconsFill.arrowCircleDown, + 'arrowCircleDownLeft': PhosphorIconsFill.arrowCircleDownLeft, + 'arrowCircleDownRight': PhosphorIconsFill.arrowCircleDownRight, + 'arrowCircleLeft': PhosphorIconsFill.arrowCircleLeft, + 'arrowCircleRight': PhosphorIconsFill.arrowCircleRight, + 'arrowCircleUp': PhosphorIconsFill.arrowCircleUp, + 'arrowCircleUpLeft': PhosphorIconsFill.arrowCircleUpLeft, + 'arrowCircleUpRight': PhosphorIconsFill.arrowCircleUpRight, + 'arrowClockwise': PhosphorIconsFill.arrowClockwise, + 'arrowCounterClockwise': PhosphorIconsFill.arrowCounterClockwise, + 'arrowDown': PhosphorIconsFill.arrowDown, + 'arrowDownLeft': PhosphorIconsFill.arrowDownLeft, + 'arrowDownRight': PhosphorIconsFill.arrowDownRight, + 'arrowElbowDownLeft': PhosphorIconsFill.arrowElbowDownLeft, + 'arrowElbowDownRight': PhosphorIconsFill.arrowElbowDownRight, + 'arrowElbowLeft': PhosphorIconsFill.arrowElbowLeft, + 'arrowElbowLeftDown': PhosphorIconsFill.arrowElbowLeftDown, + 'arrowElbowLeftUp': PhosphorIconsFill.arrowElbowLeftUp, + 'arrowElbowRight': PhosphorIconsFill.arrowElbowRight, + 'arrowElbowRightDown': PhosphorIconsFill.arrowElbowRightDown, + 'arrowElbowRightUp': PhosphorIconsFill.arrowElbowRightUp, + 'arrowElbowUpLeft': PhosphorIconsFill.arrowElbowUpLeft, + 'arrowElbowUpRight': PhosphorIconsFill.arrowElbowUpRight, + 'arrowFatDown': PhosphorIconsFill.arrowFatDown, + 'arrowFatLeft': PhosphorIconsFill.arrowFatLeft, + 'arrowFatLineDown': PhosphorIconsFill.arrowFatLineDown, + 'arrowFatLineLeft': PhosphorIconsFill.arrowFatLineLeft, + 'arrowFatLineRight': PhosphorIconsFill.arrowFatLineRight, + 'arrowFatLineUp': PhosphorIconsFill.arrowFatLineUp, + 'arrowFatLinesDown': PhosphorIconsFill.arrowFatLinesDown, + 'arrowFatLinesLeft': PhosphorIconsFill.arrowFatLinesLeft, + 'arrowFatLinesRight': PhosphorIconsFill.arrowFatLinesRight, + 'arrowFatLinesUp': PhosphorIconsFill.arrowFatLinesUp, + 'arrowFatRight': PhosphorIconsFill.arrowFatRight, + 'arrowFatUp': PhosphorIconsFill.arrowFatUp, + 'arrowLeft': PhosphorIconsFill.arrowLeft, + 'arrowLineDown': PhosphorIconsFill.arrowLineDown, + 'arrowLineDownLeft': PhosphorIconsFill.arrowLineDownLeft, + 'arrowLineDownRight': PhosphorIconsFill.arrowLineDownRight, + 'arrowLineLeft': PhosphorIconsFill.arrowLineLeft, + 'arrowLineRight': PhosphorIconsFill.arrowLineRight, + 'arrowLineUp': PhosphorIconsFill.arrowLineUp, + 'arrowLineUpLeft': PhosphorIconsFill.arrowLineUpLeft, + 'arrowLineUpRight': PhosphorIconsFill.arrowLineUpRight, + 'arrowRight': PhosphorIconsFill.arrowRight, + 'arrowSquareDown': PhosphorIconsFill.arrowSquareDown, + 'arrowSquareDownLeft': PhosphorIconsFill.arrowSquareDownLeft, + 'arrowSquareDownRight': PhosphorIconsFill.arrowSquareDownRight, + 'arrowSquareIn': PhosphorIconsFill.arrowSquareIn, + 'arrowSquareLeft': PhosphorIconsFill.arrowSquareLeft, + 'arrowSquareOut': PhosphorIconsFill.arrowSquareOut, + 'arrowSquareRight': PhosphorIconsFill.arrowSquareRight, + 'arrowSquareUp': PhosphorIconsFill.arrowSquareUp, + 'arrowSquareUpLeft': PhosphorIconsFill.arrowSquareUpLeft, + 'arrowSquareUpRight': PhosphorIconsFill.arrowSquareUpRight, + 'arrowUDownLeft': PhosphorIconsFill.arrowUDownLeft, + 'arrowUDownRight': PhosphorIconsFill.arrowUDownRight, + 'arrowULeftDown': PhosphorIconsFill.arrowULeftDown, + 'arrowULeftUp': PhosphorIconsFill.arrowULeftUp, + 'arrowURightDown': PhosphorIconsFill.arrowURightDown, + 'arrowURightUp': PhosphorIconsFill.arrowURightUp, + 'arrowUUpLeft': PhosphorIconsFill.arrowUUpLeft, + 'arrowUUpRight': PhosphorIconsFill.arrowUUpRight, + 'arrowUp': PhosphorIconsFill.arrowUp, + 'arrowUpLeft': PhosphorIconsFill.arrowUpLeft, + 'arrowUpRight': PhosphorIconsFill.arrowUpRight, + 'arrowsClockwise': PhosphorIconsFill.arrowsClockwise, + 'arrowsCounterClockwise': PhosphorIconsFill.arrowsCounterClockwise, + 'arrowsDownUp': PhosphorIconsFill.arrowsDownUp, + 'arrowsHorizontal': PhosphorIconsFill.arrowsHorizontal, + 'arrowsIn': PhosphorIconsFill.arrowsIn, + 'arrowsInCardinal': PhosphorIconsFill.arrowsInCardinal, + 'arrowsInLineHorizontal': PhosphorIconsFill.arrowsInLineHorizontal, + 'arrowsInLineVertical': PhosphorIconsFill.arrowsInLineVertical, + 'arrowsInSimple': PhosphorIconsFill.arrowsInSimple, + 'arrowsLeftRight': PhosphorIconsFill.arrowsLeftRight, + 'arrowsMerge': PhosphorIconsFill.arrowsMerge, + 'arrowsOut': PhosphorIconsFill.arrowsOut, + 'arrowsOutCardinal': PhosphorIconsFill.arrowsOutCardinal, + 'arrowsOutLineHorizontal': PhosphorIconsFill.arrowsOutLineHorizontal, + 'arrowsOutLineVertical': PhosphorIconsFill.arrowsOutLineVertical, + 'arrowsOutSimple': PhosphorIconsFill.arrowsOutSimple, + 'arrowsSplit': PhosphorIconsFill.arrowsSplit, + 'arrowsVertical': PhosphorIconsFill.arrowsVertical, + 'article': PhosphorIconsFill.article, + 'articleMedium': PhosphorIconsFill.articleMedium, + 'articleNyTimes': PhosphorIconsFill.articleNyTimes, + 'asclepius': PhosphorIconsFill.asclepius, + 'asterisk': PhosphorIconsFill.asterisk, + 'asteriskSimple': PhosphorIconsFill.asteriskSimple, + 'at': PhosphorIconsFill.at, + 'atom': PhosphorIconsFill.atom, + 'avocado': PhosphorIconsFill.avocado, + 'axe': PhosphorIconsFill.axe, + 'baby': PhosphorIconsFill.baby, + 'babyCarriage': PhosphorIconsFill.babyCarriage, + 'backpack': PhosphorIconsFill.backpack, + 'backspace': PhosphorIconsFill.backspace, + 'bag': PhosphorIconsFill.bag, + 'bagSimple': PhosphorIconsFill.bagSimple, + 'balloon': PhosphorIconsFill.balloon, + 'bandaids': PhosphorIconsFill.bandaids, + 'bank': PhosphorIconsFill.bank, + 'barbell': PhosphorIconsFill.barbell, + 'barcode': PhosphorIconsFill.barcode, + 'barn': PhosphorIconsFill.barn, + 'barricade': PhosphorIconsFill.barricade, + 'baseball': PhosphorIconsFill.baseball, + 'baseballCap': PhosphorIconsFill.baseballCap, + 'baseballHelmet': PhosphorIconsFill.baseballHelmet, + 'basket': PhosphorIconsFill.basket, + 'basketball': PhosphorIconsFill.basketball, + 'bathtub': PhosphorIconsFill.bathtub, + 'batteryCharging': PhosphorIconsFill.batteryCharging, + 'batteryChargingVertical': PhosphorIconsFill.batteryChargingVertical, + 'batteryEmpty': PhosphorIconsFill.batteryEmpty, + 'batteryFull': PhosphorIconsFill.batteryFull, + 'batteryHigh': PhosphorIconsFill.batteryHigh, + 'batteryLow': PhosphorIconsFill.batteryLow, + 'batteryMedium': PhosphorIconsFill.batteryMedium, + 'batteryPlus': PhosphorIconsFill.batteryPlus, + 'batteryPlusVertical': PhosphorIconsFill.batteryPlusVertical, + 'batteryVerticalEmpty': PhosphorIconsFill.batteryVerticalEmpty, + 'batteryVerticalFull': PhosphorIconsFill.batteryVerticalFull, + 'batteryVerticalHigh': PhosphorIconsFill.batteryVerticalHigh, + 'batteryVerticalLow': PhosphorIconsFill.batteryVerticalLow, + 'batteryVerticalMedium': PhosphorIconsFill.batteryVerticalMedium, + 'batteryWarning': PhosphorIconsFill.batteryWarning, + 'batteryWarningVertical': PhosphorIconsFill.batteryWarningVertical, + 'beachBall': PhosphorIconsFill.beachBall, + 'beanie': PhosphorIconsFill.beanie, + 'bed': PhosphorIconsFill.bed, + 'beerBottle': PhosphorIconsFill.beerBottle, + 'beerStein': PhosphorIconsFill.beerStein, + 'behanceLogo': PhosphorIconsFill.behanceLogo, + 'bell': PhosphorIconsFill.bell, + 'bellRinging': PhosphorIconsFill.bellRinging, + 'bellSimple': PhosphorIconsFill.bellSimple, + 'bellSimpleRinging': PhosphorIconsFill.bellSimpleRinging, + 'bellSimpleSlash': PhosphorIconsFill.bellSimpleSlash, + 'bellSimpleZ': PhosphorIconsFill.bellSimpleZ, + 'bellSlash': PhosphorIconsFill.bellSlash, + 'bellZ': PhosphorIconsFill.bellZ, + 'belt': PhosphorIconsFill.belt, + 'bezierCurve': PhosphorIconsFill.bezierCurve, + 'bicycle': PhosphorIconsFill.bicycle, + 'binary': PhosphorIconsFill.binary, + 'binoculars': PhosphorIconsFill.binoculars, + 'biohazard': PhosphorIconsFill.biohazard, + 'bird': PhosphorIconsFill.bird, + 'blueprint': PhosphorIconsFill.blueprint, + 'bluetooth': PhosphorIconsFill.bluetooth, + 'bluetoothConnected': PhosphorIconsFill.bluetoothConnected, + 'bluetoothSlash': PhosphorIconsFill.bluetoothSlash, + 'bluetoothX': PhosphorIconsFill.bluetoothX, + 'boat': PhosphorIconsFill.boat, + 'bomb': PhosphorIconsFill.bomb, + 'bone': PhosphorIconsFill.bone, + 'book': PhosphorIconsFill.book, + 'bookBookmark': PhosphorIconsFill.bookBookmark, + 'bookOpen': PhosphorIconsFill.bookOpen, + 'bookOpenText': PhosphorIconsFill.bookOpenText, + 'bookOpenUser': PhosphorIconsFill.bookOpenUser, + 'bookmark': PhosphorIconsFill.bookmark, + 'bookmarkSimple': PhosphorIconsFill.bookmarkSimple, + 'bookmarks': PhosphorIconsFill.bookmarks, + 'bookmarksSimple': PhosphorIconsFill.bookmarksSimple, + 'books': PhosphorIconsFill.books, + 'boot': PhosphorIconsFill.boot, + 'boules': PhosphorIconsFill.boules, + 'boundingBox': PhosphorIconsFill.boundingBox, + 'bowlFood': PhosphorIconsFill.bowlFood, + 'bowlSteam': PhosphorIconsFill.bowlSteam, + 'bowlingBall': PhosphorIconsFill.bowlingBall, + 'boxArrowDown': PhosphorIconsFill.boxArrowDown, + 'boxArrowUp': PhosphorIconsFill.boxArrowUp, + 'boxingGlove': PhosphorIconsFill.boxingGlove, + 'bracketsAngle': PhosphorIconsFill.bracketsAngle, + 'bracketsCurly': PhosphorIconsFill.bracketsCurly, + 'bracketsRound': PhosphorIconsFill.bracketsRound, + 'bracketsSquare': PhosphorIconsFill.bracketsSquare, + 'brain': PhosphorIconsFill.brain, + 'brandy': PhosphorIconsFill.brandy, + 'bread': PhosphorIconsFill.bread, + 'bridge': PhosphorIconsFill.bridge, + 'briefcase': PhosphorIconsFill.briefcase, + 'briefcaseMetal': PhosphorIconsFill.briefcaseMetal, + 'broadcast': PhosphorIconsFill.broadcast, + 'broom': PhosphorIconsFill.broom, + 'browser': PhosphorIconsFill.browser, + 'browsers': PhosphorIconsFill.browsers, + 'bug': PhosphorIconsFill.bug, + 'bugBeetle': PhosphorIconsFill.bugBeetle, + 'bugDroid': PhosphorIconsFill.bugDroid, + 'building': PhosphorIconsFill.building, + 'buildingApartment': PhosphorIconsFill.buildingApartment, + 'buildingOffice': PhosphorIconsFill.buildingOffice, + 'buildings': PhosphorIconsFill.buildings, + 'bulldozer': PhosphorIconsFill.bulldozer, + 'bus': PhosphorIconsFill.bus, + 'butterfly': PhosphorIconsFill.butterfly, + 'cableCar': PhosphorIconsFill.cableCar, + 'cactus': PhosphorIconsFill.cactus, + 'cake': PhosphorIconsFill.cake, + 'calculator': PhosphorIconsFill.calculator, + 'calendar': PhosphorIconsFill.calendar, + 'calendarBlank': PhosphorIconsFill.calendarBlank, + 'calendarCheck': PhosphorIconsFill.calendarCheck, + 'calendarDot': PhosphorIconsFill.calendarDot, + 'calendarDots': PhosphorIconsFill.calendarDots, + 'calendarHeart': PhosphorIconsFill.calendarHeart, + 'calendarMinus': PhosphorIconsFill.calendarMinus, + 'calendarPlus': PhosphorIconsFill.calendarPlus, + 'calendarSlash': PhosphorIconsFill.calendarSlash, + 'calendarStar': PhosphorIconsFill.calendarStar, + 'calendarX': PhosphorIconsFill.calendarX, + 'callBell': PhosphorIconsFill.callBell, + 'camera': PhosphorIconsFill.camera, + 'cameraPlus': PhosphorIconsFill.cameraPlus, + 'cameraRotate': PhosphorIconsFill.cameraRotate, + 'cameraSlash': PhosphorIconsFill.cameraSlash, + 'campfire': PhosphorIconsFill.campfire, + 'car': PhosphorIconsFill.car, + 'carBattery': PhosphorIconsFill.carBattery, + 'carProfile': PhosphorIconsFill.carProfile, + 'carSimple': PhosphorIconsFill.carSimple, + 'cardholder': PhosphorIconsFill.cardholder, + 'cards': PhosphorIconsFill.cards, + 'cardsThree': PhosphorIconsFill.cardsThree, + 'caretCircleDoubleDown': PhosphorIconsFill.caretCircleDoubleDown, + 'caretCircleDoubleLeft': PhosphorIconsFill.caretCircleDoubleLeft, + 'caretCircleDoubleRight': PhosphorIconsFill.caretCircleDoubleRight, + 'caretCircleDoubleUp': PhosphorIconsFill.caretCircleDoubleUp, + 'caretCircleDown': PhosphorIconsFill.caretCircleDown, + 'caretCircleLeft': PhosphorIconsFill.caretCircleLeft, + 'caretCircleRight': PhosphorIconsFill.caretCircleRight, + 'caretCircleUp': PhosphorIconsFill.caretCircleUp, + 'caretCircleUpDown': PhosphorIconsFill.caretCircleUpDown, + 'caretDoubleDown': PhosphorIconsFill.caretDoubleDown, + 'caretDoubleLeft': PhosphorIconsFill.caretDoubleLeft, + 'caretDoubleRight': PhosphorIconsFill.caretDoubleRight, + 'caretDoubleUp': PhosphorIconsFill.caretDoubleUp, + 'caretDown': PhosphorIconsFill.caretDown, + 'caretLeft': PhosphorIconsFill.caretLeft, + 'caretLineDown': PhosphorIconsFill.caretLineDown, + 'caretLineLeft': PhosphorIconsFill.caretLineLeft, + 'caretLineRight': PhosphorIconsFill.caretLineRight, + 'caretLineUp': PhosphorIconsFill.caretLineUp, + 'caretRight': PhosphorIconsFill.caretRight, + 'caretUp': PhosphorIconsFill.caretUp, + 'caretUpDown': PhosphorIconsFill.caretUpDown, + 'carrot': PhosphorIconsFill.carrot, + 'cashRegister': PhosphorIconsFill.cashRegister, + 'cassetteTape': PhosphorIconsFill.cassetteTape, + 'castleTurret': PhosphorIconsFill.castleTurret, + 'cat': PhosphorIconsFill.cat, + 'cellSignalFull': PhosphorIconsFill.cellSignalFull, + 'cellSignalHigh': PhosphorIconsFill.cellSignalHigh, + 'cellSignalLow': PhosphorIconsFill.cellSignalLow, + 'cellSignalMedium': PhosphorIconsFill.cellSignalMedium, + 'cellSignalNone': PhosphorIconsFill.cellSignalNone, + 'cellSignalSlash': PhosphorIconsFill.cellSignalSlash, + 'cellSignalX': PhosphorIconsFill.cellSignalX, + 'cellTower': PhosphorIconsFill.cellTower, + 'certificate': PhosphorIconsFill.certificate, + 'chair': PhosphorIconsFill.chair, + 'chalkboard': PhosphorIconsFill.chalkboard, + 'chalkboardSimple': PhosphorIconsFill.chalkboardSimple, + 'chalkboardTeacher': PhosphorIconsFill.chalkboardTeacher, + 'champagne': PhosphorIconsFill.champagne, + 'chargingStation': PhosphorIconsFill.chargingStation, + 'chartBar': PhosphorIconsFill.chartBar, + 'chartBarHorizontal': PhosphorIconsFill.chartBarHorizontal, + 'chartDonut': PhosphorIconsFill.chartDonut, + 'chartLine': PhosphorIconsFill.chartLine, + 'chartLineDown': PhosphorIconsFill.chartLineDown, + 'chartLineUp': PhosphorIconsFill.chartLineUp, + 'chartPie': PhosphorIconsFill.chartPie, + 'chartPieSlice': PhosphorIconsFill.chartPieSlice, + 'chartPolar': PhosphorIconsFill.chartPolar, + 'chartScatter': PhosphorIconsFill.chartScatter, + 'chat': PhosphorIconsFill.chat, + 'chatCentered': PhosphorIconsFill.chatCentered, + 'chatCenteredDots': PhosphorIconsFill.chatCenteredDots, + 'chatCenteredSlash': PhosphorIconsFill.chatCenteredSlash, + 'chatCenteredText': PhosphorIconsFill.chatCenteredText, + 'chatCircle': PhosphorIconsFill.chatCircle, + 'chatCircleDots': PhosphorIconsFill.chatCircleDots, + 'chatCircleSlash': PhosphorIconsFill.chatCircleSlash, + 'chatCircleText': PhosphorIconsFill.chatCircleText, + 'chatDots': PhosphorIconsFill.chatDots, + 'chatSlash': PhosphorIconsFill.chatSlash, + 'chatTeardrop': PhosphorIconsFill.chatTeardrop, + 'chatTeardropDots': PhosphorIconsFill.chatTeardropDots, + 'chatTeardropSlash': PhosphorIconsFill.chatTeardropSlash, + 'chatTeardropText': PhosphorIconsFill.chatTeardropText, + 'chatText': PhosphorIconsFill.chatText, + 'chats': PhosphorIconsFill.chats, + 'chatsCircle': PhosphorIconsFill.chatsCircle, + 'chatsTeardrop': PhosphorIconsFill.chatsTeardrop, + 'check': PhosphorIconsFill.check, + 'checkCircle': PhosphorIconsFill.checkCircle, + 'checkFat': PhosphorIconsFill.checkFat, + 'checkSquare': PhosphorIconsFill.checkSquare, + 'checkSquareOffset': PhosphorIconsFill.checkSquareOffset, + 'checkerboard': PhosphorIconsFill.checkerboard, + 'checks': PhosphorIconsFill.checks, + 'cheers': PhosphorIconsFill.cheers, + 'cheese': PhosphorIconsFill.cheese, + 'chefHat': PhosphorIconsFill.chefHat, + 'cherries': PhosphorIconsFill.cherries, + 'church': PhosphorIconsFill.church, + 'cigarette': PhosphorIconsFill.cigarette, + 'cigaretteSlash': PhosphorIconsFill.cigaretteSlash, + 'circle': PhosphorIconsFill.circle, + 'circleDashed': PhosphorIconsFill.circleDashed, + 'circleHalf': PhosphorIconsFill.circleHalf, + 'circleHalfTilt': PhosphorIconsFill.circleHalfTilt, + 'circleNotch': PhosphorIconsFill.circleNotch, + 'circlesFour': PhosphorIconsFill.circlesFour, + 'circlesThree': PhosphorIconsFill.circlesThree, + 'circlesThreePlus': PhosphorIconsFill.circlesThreePlus, + 'circuitry': PhosphorIconsFill.circuitry, + 'city': PhosphorIconsFill.city, + 'clipboard': PhosphorIconsFill.clipboard, + 'clipboardText': PhosphorIconsFill.clipboardText, + 'clock': PhosphorIconsFill.clock, + 'clockAfternoon': PhosphorIconsFill.clockAfternoon, + 'clockClockwise': PhosphorIconsFill.clockClockwise, + 'clockCountdown': PhosphorIconsFill.clockCountdown, + 'clockCounterClockwise': PhosphorIconsFill.clockCounterClockwise, + 'clockUser': PhosphorIconsFill.clockUser, + 'closedCaptioning': PhosphorIconsFill.closedCaptioning, + 'cloud': PhosphorIconsFill.cloud, + 'cloudArrowDown': PhosphorIconsFill.cloudArrowDown, + 'cloudArrowUp': PhosphorIconsFill.cloudArrowUp, + 'cloudCheck': PhosphorIconsFill.cloudCheck, + 'cloudFog': PhosphorIconsFill.cloudFog, + 'cloudLightning': PhosphorIconsFill.cloudLightning, + 'cloudMoon': PhosphorIconsFill.cloudMoon, + 'cloudRain': PhosphorIconsFill.cloudRain, + 'cloudSlash': PhosphorIconsFill.cloudSlash, + 'cloudSun': PhosphorIconsFill.cloudSun, + 'cloudWarning': PhosphorIconsFill.cloudWarning, + 'cloudX': PhosphorIconsFill.cloudX, + 'clover': PhosphorIconsFill.clover, + 'club': PhosphorIconsFill.club, + 'coatHanger': PhosphorIconsFill.coatHanger, + 'codaLogo': PhosphorIconsFill.codaLogo, + 'code': PhosphorIconsFill.code, + 'codeBlock': PhosphorIconsFill.codeBlock, + 'codeSimple': PhosphorIconsFill.codeSimple, + 'codepenLogo': PhosphorIconsFill.codepenLogo, + 'codesandboxLogo': PhosphorIconsFill.codesandboxLogo, + 'coffee': PhosphorIconsFill.coffee, + 'coffeeBean': PhosphorIconsFill.coffeeBean, + 'coin': PhosphorIconsFill.coin, + 'coinVertical': PhosphorIconsFill.coinVertical, + 'coins': PhosphorIconsFill.coins, + 'columns': PhosphorIconsFill.columns, + 'columnsPlusLeft': PhosphorIconsFill.columnsPlusLeft, + 'columnsPlusRight': PhosphorIconsFill.columnsPlusRight, + 'command': PhosphorIconsFill.command, + 'compass': PhosphorIconsFill.compass, + 'compassRose': PhosphorIconsFill.compassRose, + 'compassTool': PhosphorIconsFill.compassTool, + 'computerTower': PhosphorIconsFill.computerTower, + 'confetti': PhosphorIconsFill.confetti, + 'contactlessPayment': PhosphorIconsFill.contactlessPayment, + 'control': PhosphorIconsFill.control, + 'cookie': PhosphorIconsFill.cookie, + 'cookingPot': PhosphorIconsFill.cookingPot, + 'copy': PhosphorIconsFill.copy, + 'copySimple': PhosphorIconsFill.copySimple, + 'copyleft': PhosphorIconsFill.copyleft, + 'copyright': PhosphorIconsFill.copyright, + 'cornersIn': PhosphorIconsFill.cornersIn, + 'cornersOut': PhosphorIconsFill.cornersOut, + 'couch': PhosphorIconsFill.couch, + 'courtBasketball': PhosphorIconsFill.courtBasketball, + 'cow': PhosphorIconsFill.cow, + 'cowboyHat': PhosphorIconsFill.cowboyHat, + 'cpu': PhosphorIconsFill.cpu, + 'crane': PhosphorIconsFill.crane, + 'craneTower': PhosphorIconsFill.craneTower, + 'creditCard': PhosphorIconsFill.creditCard, + 'cricket': PhosphorIconsFill.cricket, + 'crop': PhosphorIconsFill.crop, + 'cross': PhosphorIconsFill.cross, + 'crosshair': PhosphorIconsFill.crosshair, + 'crosshairSimple': PhosphorIconsFill.crosshairSimple, + 'crown': PhosphorIconsFill.crown, + 'crownCross': PhosphorIconsFill.crownCross, + 'crownSimple': PhosphorIconsFill.crownSimple, + 'cube': PhosphorIconsFill.cube, + 'cubeFocus': PhosphorIconsFill.cubeFocus, + 'cubeTransparent': PhosphorIconsFill.cubeTransparent, + 'currencyBtc': PhosphorIconsFill.currencyBtc, + 'currencyCircleDollar': PhosphorIconsFill.currencyCircleDollar, + 'currencyCny': PhosphorIconsFill.currencyCny, + 'currencyDollar': PhosphorIconsFill.currencyDollar, + 'currencyDollarSimple': PhosphorIconsFill.currencyDollarSimple, + 'currencyEth': PhosphorIconsFill.currencyEth, + 'currencyEur': PhosphorIconsFill.currencyEur, + 'currencyGbp': PhosphorIconsFill.currencyGbp, + 'currencyInr': PhosphorIconsFill.currencyInr, + 'currencyJpy': PhosphorIconsFill.currencyJpy, + 'currencyKrw': PhosphorIconsFill.currencyKrw, + 'currencyKzt': PhosphorIconsFill.currencyKzt, + 'currencyNgn': PhosphorIconsFill.currencyNgn, + 'currencyRub': PhosphorIconsFill.currencyRub, + 'cursor': PhosphorIconsFill.cursor, + 'cursorClick': PhosphorIconsFill.cursorClick, + 'cursorText': PhosphorIconsFill.cursorText, + 'cylinder': PhosphorIconsFill.cylinder, + 'database': PhosphorIconsFill.database, + 'desk': PhosphorIconsFill.desk, + 'desktop': PhosphorIconsFill.desktop, + 'desktopTower': PhosphorIconsFill.desktopTower, + 'detective': PhosphorIconsFill.detective, + 'devToLogo': PhosphorIconsFill.devToLogo, + 'deviceMobile': PhosphorIconsFill.deviceMobile, + 'deviceMobileCamera': PhosphorIconsFill.deviceMobileCamera, + 'deviceMobileSlash': PhosphorIconsFill.deviceMobileSlash, + 'deviceMobileSpeaker': PhosphorIconsFill.deviceMobileSpeaker, + 'deviceRotate': PhosphorIconsFill.deviceRotate, + 'deviceTablet': PhosphorIconsFill.deviceTablet, + 'deviceTabletCamera': PhosphorIconsFill.deviceTabletCamera, + 'deviceTabletSpeaker': PhosphorIconsFill.deviceTabletSpeaker, + 'devices': PhosphorIconsFill.devices, + 'diamond': PhosphorIconsFill.diamond, + 'diamondsFour': PhosphorIconsFill.diamondsFour, + 'diceFive': PhosphorIconsFill.diceFive, + 'diceFour': PhosphorIconsFill.diceFour, + 'diceOne': PhosphorIconsFill.diceOne, + 'diceSix': PhosphorIconsFill.diceSix, + 'diceThree': PhosphorIconsFill.diceThree, + 'diceTwo': PhosphorIconsFill.diceTwo, + 'disc': PhosphorIconsFill.disc, + 'discoBall': PhosphorIconsFill.discoBall, + 'discordLogo': PhosphorIconsFill.discordLogo, + 'divide': PhosphorIconsFill.divide, + 'dna': PhosphorIconsFill.dna, + 'dog': PhosphorIconsFill.dog, + 'door': PhosphorIconsFill.door, + 'doorOpen': PhosphorIconsFill.doorOpen, + 'dot': PhosphorIconsFill.dot, + 'dotOutline': PhosphorIconsFill.dotOutline, + 'dotsNine': PhosphorIconsFill.dotsNine, + 'dotsSix': PhosphorIconsFill.dotsSix, + 'dotsSixVertical': PhosphorIconsFill.dotsSixVertical, + 'dotsThree': PhosphorIconsFill.dotsThree, + 'dotsThreeCircle': PhosphorIconsFill.dotsThreeCircle, + 'dotsThreeCircleVertical': PhosphorIconsFill.dotsThreeCircleVertical, + 'dotsThreeOutline': PhosphorIconsFill.dotsThreeOutline, + 'dotsThreeOutlineVertical': PhosphorIconsFill.dotsThreeOutlineVertical, + 'dotsThreeVertical': PhosphorIconsFill.dotsThreeVertical, + 'download': PhosphorIconsFill.download, + 'downloadSimple': PhosphorIconsFill.downloadSimple, + 'dress': PhosphorIconsFill.dress, + 'dresser': PhosphorIconsFill.dresser, + 'dribbbleLogo': PhosphorIconsFill.dribbbleLogo, + 'drone': PhosphorIconsFill.drone, + 'drop': PhosphorIconsFill.drop, + 'dropHalf': PhosphorIconsFill.dropHalf, + 'dropHalfBottom': PhosphorIconsFill.dropHalfBottom, + 'dropSimple': PhosphorIconsFill.dropSimple, + 'dropSlash': PhosphorIconsFill.dropSlash, + 'dropboxLogo': PhosphorIconsFill.dropboxLogo, + 'ear': PhosphorIconsFill.ear, + 'earSlash': PhosphorIconsFill.earSlash, + 'egg': PhosphorIconsFill.egg, + 'eggCrack': PhosphorIconsFill.eggCrack, + 'eject': PhosphorIconsFill.eject, + 'ejectSimple': PhosphorIconsFill.ejectSimple, + 'elevator': PhosphorIconsFill.elevator, + 'empty': PhosphorIconsFill.empty, + 'engine': PhosphorIconsFill.engine, + 'envelope': PhosphorIconsFill.envelope, + 'envelopeOpen': PhosphorIconsFill.envelopeOpen, + 'envelopeSimple': PhosphorIconsFill.envelopeSimple, + 'envelopeSimpleOpen': PhosphorIconsFill.envelopeSimpleOpen, + 'equalizer': PhosphorIconsFill.equalizer, + 'equals': PhosphorIconsFill.equals, + 'eraser': PhosphorIconsFill.eraser, + 'escalatorDown': PhosphorIconsFill.escalatorDown, + 'escalatorUp': PhosphorIconsFill.escalatorUp, + 'exam': PhosphorIconsFill.exam, + 'exclamationMark': PhosphorIconsFill.exclamationMark, + 'exclude': PhosphorIconsFill.exclude, + 'excludeSquare': PhosphorIconsFill.excludeSquare, + 'export': PhosphorIconsFill.export, + 'eye': PhosphorIconsFill.eye, + 'eyeClosed': PhosphorIconsFill.eyeClosed, + 'eyeSlash': PhosphorIconsFill.eyeSlash, + 'eyedropper': PhosphorIconsFill.eyedropper, + 'eyedropperSample': PhosphorIconsFill.eyedropperSample, + 'eyeglasses': PhosphorIconsFill.eyeglasses, + 'eyes': PhosphorIconsFill.eyes, + 'faceMask': PhosphorIconsFill.faceMask, + 'facebookLogo': PhosphorIconsFill.facebookLogo, + 'factory': PhosphorIconsFill.factory, + 'faders': PhosphorIconsFill.faders, + 'fadersHorizontal': PhosphorIconsFill.fadersHorizontal, + 'falloutShelter': PhosphorIconsFill.falloutShelter, + 'fan': PhosphorIconsFill.fan, + 'farm': PhosphorIconsFill.farm, + 'fastForward': PhosphorIconsFill.fastForward, + 'fastForwardCircle': PhosphorIconsFill.fastForwardCircle, + 'feather': PhosphorIconsFill.feather, + 'fediverseLogo': PhosphorIconsFill.fediverseLogo, + 'figmaLogo': PhosphorIconsFill.figmaLogo, + 'file': PhosphorIconsFill.file, + 'fileArchive': PhosphorIconsFill.fileArchive, + 'fileArrowDown': PhosphorIconsFill.fileArrowDown, + 'fileArrowUp': PhosphorIconsFill.fileArrowUp, + 'fileAudio': PhosphorIconsFill.fileAudio, + 'fileC': PhosphorIconsFill.fileC, + 'fileCSharp': PhosphorIconsFill.fileCSharp, + 'fileCloud': PhosphorIconsFill.fileCloud, + 'fileCode': PhosphorIconsFill.fileCode, + 'fileCpp': PhosphorIconsFill.fileCpp, + 'fileCss': PhosphorIconsFill.fileCss, + 'fileCsv': PhosphorIconsFill.fileCsv, + 'fileDashed': PhosphorIconsFill.fileDashed, + 'fileDoc': PhosphorIconsFill.fileDoc, + 'fileHtml': PhosphorIconsFill.fileHtml, + 'fileImage': PhosphorIconsFill.fileImage, + 'fileIni': PhosphorIconsFill.fileIni, + 'fileJpg': PhosphorIconsFill.fileJpg, + 'fileJs': PhosphorIconsFill.fileJs, + 'fileJsx': PhosphorIconsFill.fileJsx, + 'fileLock': PhosphorIconsFill.fileLock, + 'fileMagnifyingGlass': PhosphorIconsFill.fileMagnifyingGlass, + 'fileMd': PhosphorIconsFill.fileMd, + 'fileMinus': PhosphorIconsFill.fileMinus, + 'filePdf': PhosphorIconsFill.filePdf, + 'filePlus': PhosphorIconsFill.filePlus, + 'filePng': PhosphorIconsFill.filePng, + 'filePpt': PhosphorIconsFill.filePpt, + 'filePy': PhosphorIconsFill.filePy, + 'fileRs': PhosphorIconsFill.fileRs, + 'fileSql': PhosphorIconsFill.fileSql, + 'fileSvg': PhosphorIconsFill.fileSvg, + 'fileText': PhosphorIconsFill.fileText, + 'fileTs': PhosphorIconsFill.fileTs, + 'fileTsx': PhosphorIconsFill.fileTsx, + 'fileTxt': PhosphorIconsFill.fileTxt, + 'fileVideo': PhosphorIconsFill.fileVideo, + 'fileVue': PhosphorIconsFill.fileVue, + 'fileX': PhosphorIconsFill.fileX, + 'fileXls': PhosphorIconsFill.fileXls, + 'fileZip': PhosphorIconsFill.fileZip, + 'files': PhosphorIconsFill.files, + 'filmReel': PhosphorIconsFill.filmReel, + 'filmScript': PhosphorIconsFill.filmScript, + 'filmSlate': PhosphorIconsFill.filmSlate, + 'filmStrip': PhosphorIconsFill.filmStrip, + 'fingerprint': PhosphorIconsFill.fingerprint, + 'fingerprintSimple': PhosphorIconsFill.fingerprintSimple, + 'finnTheHuman': PhosphorIconsFill.finnTheHuman, + 'fire': PhosphorIconsFill.fire, + 'fireExtinguisher': PhosphorIconsFill.fireExtinguisher, + 'fireSimple': PhosphorIconsFill.fireSimple, + 'fireTruck': PhosphorIconsFill.fireTruck, + 'firstAid': PhosphorIconsFill.firstAid, + 'firstAidKit': PhosphorIconsFill.firstAidKit, + 'fish': PhosphorIconsFill.fish, + 'fishSimple': PhosphorIconsFill.fishSimple, + 'flag': PhosphorIconsFill.flag, + 'flagBanner': PhosphorIconsFill.flagBanner, + 'flagBannerFold': PhosphorIconsFill.flagBannerFold, + 'flagCheckered': PhosphorIconsFill.flagCheckered, + 'flagPennant': PhosphorIconsFill.flagPennant, + 'flame': PhosphorIconsFill.flame, + 'flashlight': PhosphorIconsFill.flashlight, + 'flask': PhosphorIconsFill.flask, + 'flipHorizontal': PhosphorIconsFill.flipHorizontal, + 'flipVertical': PhosphorIconsFill.flipVertical, + 'floppyDisk': PhosphorIconsFill.floppyDisk, + 'floppyDiskBack': PhosphorIconsFill.floppyDiskBack, + 'flowArrow': PhosphorIconsFill.flowArrow, + 'flower': PhosphorIconsFill.flower, + 'flowerLotus': PhosphorIconsFill.flowerLotus, + 'flowerTulip': PhosphorIconsFill.flowerTulip, + 'flyingSaucer': PhosphorIconsFill.flyingSaucer, + 'folder': PhosphorIconsFill.folder, + 'folderDashed': PhosphorIconsFill.folderDashed, + 'folderLock': PhosphorIconsFill.folderLock, + 'folderMinus': PhosphorIconsFill.folderMinus, + 'folderOpen': PhosphorIconsFill.folderOpen, + 'folderPlus': PhosphorIconsFill.folderPlus, + 'folderSimple': PhosphorIconsFill.folderSimple, + 'folderSimpleDashed': PhosphorIconsFill.folderSimpleDashed, + 'folderSimpleLock': PhosphorIconsFill.folderSimpleLock, + 'folderSimpleMinus': PhosphorIconsFill.folderSimpleMinus, + 'folderSimplePlus': PhosphorIconsFill.folderSimplePlus, + 'folderSimpleStar': PhosphorIconsFill.folderSimpleStar, + 'folderSimpleUser': PhosphorIconsFill.folderSimpleUser, + 'folderStar': PhosphorIconsFill.folderStar, + 'folderUser': PhosphorIconsFill.folderUser, + 'folders': PhosphorIconsFill.folders, + 'football': PhosphorIconsFill.football, + 'footballHelmet': PhosphorIconsFill.footballHelmet, + 'footprints': PhosphorIconsFill.footprints, + 'forkKnife': PhosphorIconsFill.forkKnife, + 'fourK': PhosphorIconsFill.fourK, + 'frameCorners': PhosphorIconsFill.frameCorners, + 'framerLogo': PhosphorIconsFill.framerLogo, + 'function': PhosphorIconsFill.function, + 'funnel': PhosphorIconsFill.funnel, + 'funnelSimple': PhosphorIconsFill.funnelSimple, + 'funnelSimpleX': PhosphorIconsFill.funnelSimpleX, + 'funnelX': PhosphorIconsFill.funnelX, + 'gameController': PhosphorIconsFill.gameController, + 'garage': PhosphorIconsFill.garage, + 'gasCan': PhosphorIconsFill.gasCan, + 'gasPump': PhosphorIconsFill.gasPump, + 'gauge': PhosphorIconsFill.gauge, + 'gavel': PhosphorIconsFill.gavel, + 'gear': PhosphorIconsFill.gear, + 'gearFine': PhosphorIconsFill.gearFine, + 'gearSix': PhosphorIconsFill.gearSix, + 'genderFemale': PhosphorIconsFill.genderFemale, + 'genderIntersex': PhosphorIconsFill.genderIntersex, + 'genderMale': PhosphorIconsFill.genderMale, + 'genderNeuter': PhosphorIconsFill.genderNeuter, + 'genderNonbinary': PhosphorIconsFill.genderNonbinary, + 'genderTransgender': PhosphorIconsFill.genderTransgender, + 'ghost': PhosphorIconsFill.ghost, + 'gif': PhosphorIconsFill.gif, + 'gift': PhosphorIconsFill.gift, + 'gitBranch': PhosphorIconsFill.gitBranch, + 'gitCommit': PhosphorIconsFill.gitCommit, + 'gitDiff': PhosphorIconsFill.gitDiff, + 'gitFork': PhosphorIconsFill.gitFork, + 'gitMerge': PhosphorIconsFill.gitMerge, + 'gitPullRequest': PhosphorIconsFill.gitPullRequest, + 'githubLogo': PhosphorIconsFill.githubLogo, + 'gitlabLogo': PhosphorIconsFill.gitlabLogo, + 'gitlabLogoSimple': PhosphorIconsFill.gitlabLogoSimple, + 'globe': PhosphorIconsFill.globe, + 'globeHemisphereEast': PhosphorIconsFill.globeHemisphereEast, + 'globeHemisphereWest': PhosphorIconsFill.globeHemisphereWest, + 'globeSimple': PhosphorIconsFill.globeSimple, + 'globeSimpleX': PhosphorIconsFill.globeSimpleX, + 'globeStand': PhosphorIconsFill.globeStand, + 'globeX': PhosphorIconsFill.globeX, + 'goggles': PhosphorIconsFill.goggles, + 'golf': PhosphorIconsFill.golf, + 'goodreadsLogo': PhosphorIconsFill.goodreadsLogo, + 'googleCardboardLogo': PhosphorIconsFill.googleCardboardLogo, + 'googleChromeLogo': PhosphorIconsFill.googleChromeLogo, + 'googleDriveLogo': PhosphorIconsFill.googleDriveLogo, + 'googleLogo': PhosphorIconsFill.googleLogo, + 'googlePhotosLogo': PhosphorIconsFill.googlePhotosLogo, + 'googlePlayLogo': PhosphorIconsFill.googlePlayLogo, + 'googlePodcastsLogo': PhosphorIconsFill.googlePodcastsLogo, + 'gps': PhosphorIconsFill.gps, + 'gpsFix': PhosphorIconsFill.gpsFix, + 'gpsSlash': PhosphorIconsFill.gpsSlash, + 'gradient': PhosphorIconsFill.gradient, + 'graduationCap': PhosphorIconsFill.graduationCap, + 'grains': PhosphorIconsFill.grains, + 'grainsSlash': PhosphorIconsFill.grainsSlash, + 'graph': PhosphorIconsFill.graph, + 'graphicsCard': PhosphorIconsFill.graphicsCard, + 'greaterThan': PhosphorIconsFill.greaterThan, + 'greaterThanOrEqual': PhosphorIconsFill.greaterThanOrEqual, + 'gridFour': PhosphorIconsFill.gridFour, + 'gridNine': PhosphorIconsFill.gridNine, + 'guitar': PhosphorIconsFill.guitar, + 'hairDryer': PhosphorIconsFill.hairDryer, + 'hamburger': PhosphorIconsFill.hamburger, + 'hammer': PhosphorIconsFill.hammer, + 'hand': PhosphorIconsFill.hand, + 'handArrowDown': PhosphorIconsFill.handArrowDown, + 'handArrowUp': PhosphorIconsFill.handArrowUp, + 'handCoins': PhosphorIconsFill.handCoins, + 'handDeposit': PhosphorIconsFill.handDeposit, + 'handEye': PhosphorIconsFill.handEye, + 'handFist': PhosphorIconsFill.handFist, + 'handGrabbing': PhosphorIconsFill.handGrabbing, + 'handHeart': PhosphorIconsFill.handHeart, + 'handPalm': PhosphorIconsFill.handPalm, + 'handPeace': PhosphorIconsFill.handPeace, + 'handPointing': PhosphorIconsFill.handPointing, + 'handSoap': PhosphorIconsFill.handSoap, + 'handSwipeLeft': PhosphorIconsFill.handSwipeLeft, + 'handSwipeRight': PhosphorIconsFill.handSwipeRight, + 'handTap': PhosphorIconsFill.handTap, + 'handWaving': PhosphorIconsFill.handWaving, + 'handWithdraw': PhosphorIconsFill.handWithdraw, + 'handbag': PhosphorIconsFill.handbag, + 'handbagSimple': PhosphorIconsFill.handbagSimple, + 'handsClapping': PhosphorIconsFill.handsClapping, + 'handsPraying': PhosphorIconsFill.handsPraying, + 'handshake': PhosphorIconsFill.handshake, + 'hardDrive': PhosphorIconsFill.hardDrive, + 'hardDrives': PhosphorIconsFill.hardDrives, + 'hardHat': PhosphorIconsFill.hardHat, + 'hash': PhosphorIconsFill.hash, + 'hashStraight': PhosphorIconsFill.hashStraight, + 'headCircuit': PhosphorIconsFill.headCircuit, + 'headlights': PhosphorIconsFill.headlights, + 'headphones': PhosphorIconsFill.headphones, + 'headset': PhosphorIconsFill.headset, + 'heart': PhosphorIconsFill.heart, + 'heartBreak': PhosphorIconsFill.heartBreak, + 'heartHalf': PhosphorIconsFill.heartHalf, + 'heartStraight': PhosphorIconsFill.heartStraight, + 'heartStraightBreak': PhosphorIconsFill.heartStraightBreak, + 'heartbeat': PhosphorIconsFill.heartbeat, + 'hexagon': PhosphorIconsFill.hexagon, + 'highDefinition': PhosphorIconsFill.highDefinition, + 'highHeel': PhosphorIconsFill.highHeel, + 'highlighter': PhosphorIconsFill.highlighter, + 'highlighterCircle': PhosphorIconsFill.highlighterCircle, + 'hockey': PhosphorIconsFill.hockey, + 'hoodie': PhosphorIconsFill.hoodie, + 'horse': PhosphorIconsFill.horse, + 'hospital': PhosphorIconsFill.hospital, + 'hourglass': PhosphorIconsFill.hourglass, + 'hourglassHigh': PhosphorIconsFill.hourglassHigh, + 'hourglassLow': PhosphorIconsFill.hourglassLow, + 'hourglassMedium': PhosphorIconsFill.hourglassMedium, + 'hourglassSimple': PhosphorIconsFill.hourglassSimple, + 'hourglassSimpleHigh': PhosphorIconsFill.hourglassSimpleHigh, + 'hourglassSimpleLow': PhosphorIconsFill.hourglassSimpleLow, + 'hourglassSimpleMedium': PhosphorIconsFill.hourglassSimpleMedium, + 'house': PhosphorIconsFill.house, + 'houseLine': PhosphorIconsFill.houseLine, + 'houseSimple': PhosphorIconsFill.houseSimple, + 'hurricane': PhosphorIconsFill.hurricane, + 'iceCream': PhosphorIconsFill.iceCream, + 'identificationBadge': PhosphorIconsFill.identificationBadge, + 'identificationCard': PhosphorIconsFill.identificationCard, + 'image': PhosphorIconsFill.image, + 'imageBroken': PhosphorIconsFill.imageBroken, + 'imageSquare': PhosphorIconsFill.imageSquare, + 'images': PhosphorIconsFill.images, + 'imagesSquare': PhosphorIconsFill.imagesSquare, + 'infinity': PhosphorIconsFill.infinity, + 'info': PhosphorIconsFill.info, + 'instagramLogo': PhosphorIconsFill.instagramLogo, + 'intersect': PhosphorIconsFill.intersect, + 'intersectSquare': PhosphorIconsFill.intersectSquare, + 'intersectThree': PhosphorIconsFill.intersectThree, + 'intersection': PhosphorIconsFill.intersection, + 'invoice': PhosphorIconsFill.invoice, + 'island': PhosphorIconsFill.island, + 'jar': PhosphorIconsFill.jar, + 'jarLabel': PhosphorIconsFill.jarLabel, + 'jeep': PhosphorIconsFill.jeep, + 'joystick': PhosphorIconsFill.joystick, + 'kanban': PhosphorIconsFill.kanban, + 'key': PhosphorIconsFill.key, + 'keyReturn': PhosphorIconsFill.keyReturn, + 'keyboard': PhosphorIconsFill.keyboard, + 'keyhole': PhosphorIconsFill.keyhole, + 'knife': PhosphorIconsFill.knife, + 'ladder': PhosphorIconsFill.ladder, + 'ladderSimple': PhosphorIconsFill.ladderSimple, + 'lamp': PhosphorIconsFill.lamp, + 'lampPendant': PhosphorIconsFill.lampPendant, + 'laptop': PhosphorIconsFill.laptop, + 'lasso': PhosphorIconsFill.lasso, + 'lastfmLogo': PhosphorIconsFill.lastfmLogo, + 'layout': PhosphorIconsFill.layout, + 'leaf': PhosphorIconsFill.leaf, + 'lectern': PhosphorIconsFill.lectern, + 'lego': PhosphorIconsFill.lego, + 'legoSmiley': PhosphorIconsFill.legoSmiley, + 'lessThan': PhosphorIconsFill.lessThan, + 'lessThanOrEqual': PhosphorIconsFill.lessThanOrEqual, + 'letterCircleH': PhosphorIconsFill.letterCircleH, + 'letterCircleP': PhosphorIconsFill.letterCircleP, + 'letterCircleV': PhosphorIconsFill.letterCircleV, + 'lifebuoy': PhosphorIconsFill.lifebuoy, + 'lightbulb': PhosphorIconsFill.lightbulb, + 'lightbulbFilament': PhosphorIconsFill.lightbulbFilament, + 'lighthouse': PhosphorIconsFill.lighthouse, + 'lightning': PhosphorIconsFill.lightning, + 'lightningA': PhosphorIconsFill.lightningA, + 'lightningSlash': PhosphorIconsFill.lightningSlash, + 'lineSegment': PhosphorIconsFill.lineSegment, + 'lineSegments': PhosphorIconsFill.lineSegments, + 'lineVertical': PhosphorIconsFill.lineVertical, + 'link': PhosphorIconsFill.link, + 'linkBreak': PhosphorIconsFill.linkBreak, + 'linkSimple': PhosphorIconsFill.linkSimple, + 'linkSimpleBreak': PhosphorIconsFill.linkSimpleBreak, + 'linkSimpleHorizontal': PhosphorIconsFill.linkSimpleHorizontal, + 'linkSimpleHorizontalBreak': PhosphorIconsFill.linkSimpleHorizontalBreak, + 'linkedinLogo': PhosphorIconsFill.linkedinLogo, + 'linktreeLogo': PhosphorIconsFill.linktreeLogo, + 'linuxLogo': PhosphorIconsFill.linuxLogo, + 'list': PhosphorIconsFill.list, + 'listBullets': PhosphorIconsFill.listBullets, + 'listChecks': PhosphorIconsFill.listChecks, + 'listDashes': PhosphorIconsFill.listDashes, + 'listHeart': PhosphorIconsFill.listHeart, + 'listMagnifyingGlass': PhosphorIconsFill.listMagnifyingGlass, + 'listNumbers': PhosphorIconsFill.listNumbers, + 'listPlus': PhosphorIconsFill.listPlus, + 'listStar': PhosphorIconsFill.listStar, + 'lock': PhosphorIconsFill.lock, + 'lockKey': PhosphorIconsFill.lockKey, + 'lockKeyOpen': PhosphorIconsFill.lockKeyOpen, + 'lockLaminated': PhosphorIconsFill.lockLaminated, + 'lockLaminatedOpen': PhosphorIconsFill.lockLaminatedOpen, + 'lockOpen': PhosphorIconsFill.lockOpen, + 'lockSimple': PhosphorIconsFill.lockSimple, + 'lockSimpleOpen': PhosphorIconsFill.lockSimpleOpen, + 'lockers': PhosphorIconsFill.lockers, + 'log': PhosphorIconsFill.log, + 'magicWand': PhosphorIconsFill.magicWand, + 'magnet': PhosphorIconsFill.magnet, + 'magnetStraight': PhosphorIconsFill.magnetStraight, + 'magnifyingGlass': PhosphorIconsFill.magnifyingGlass, + 'magnifyingGlassMinus': PhosphorIconsFill.magnifyingGlassMinus, + 'magnifyingGlassPlus': PhosphorIconsFill.magnifyingGlassPlus, + 'mailbox': PhosphorIconsFill.mailbox, + 'mapPin': PhosphorIconsFill.mapPin, + 'mapPinArea': PhosphorIconsFill.mapPinArea, + 'mapPinLine': PhosphorIconsFill.mapPinLine, + 'mapPinPlus': PhosphorIconsFill.mapPinPlus, + 'mapPinSimple': PhosphorIconsFill.mapPinSimple, + 'mapPinSimpleArea': PhosphorIconsFill.mapPinSimpleArea, + 'mapPinSimpleLine': PhosphorIconsFill.mapPinSimpleLine, + 'mapTrifold': PhosphorIconsFill.mapTrifold, + 'markdownLogo': PhosphorIconsFill.markdownLogo, + 'markerCircle': PhosphorIconsFill.markerCircle, + 'martini': PhosphorIconsFill.martini, + 'maskHappy': PhosphorIconsFill.maskHappy, + 'maskSad': PhosphorIconsFill.maskSad, + 'mastodonLogo': PhosphorIconsFill.mastodonLogo, + 'mathOperations': PhosphorIconsFill.mathOperations, + 'matrixLogo': PhosphorIconsFill.matrixLogo, + 'medal': PhosphorIconsFill.medal, + 'medalMilitary': PhosphorIconsFill.medalMilitary, + 'mediumLogo': PhosphorIconsFill.mediumLogo, + 'megaphone': PhosphorIconsFill.megaphone, + 'megaphoneSimple': PhosphorIconsFill.megaphoneSimple, + 'memberOf': PhosphorIconsFill.memberOf, + 'memory': PhosphorIconsFill.memory, + 'messengerLogo': PhosphorIconsFill.messengerLogo, + 'metaLogo': PhosphorIconsFill.metaLogo, + 'meteor': PhosphorIconsFill.meteor, + 'metronome': PhosphorIconsFill.metronome, + 'microphone': PhosphorIconsFill.microphone, + 'microphoneSlash': PhosphorIconsFill.microphoneSlash, + 'microphoneStage': PhosphorIconsFill.microphoneStage, + 'microscope': PhosphorIconsFill.microscope, + 'microsoftExcelLogo': PhosphorIconsFill.microsoftExcelLogo, + 'microsoftOutlookLogo': PhosphorIconsFill.microsoftOutlookLogo, + 'microsoftPowerpointLogo': PhosphorIconsFill.microsoftPowerpointLogo, + 'microsoftTeamsLogo': PhosphorIconsFill.microsoftTeamsLogo, + 'microsoftWordLogo': PhosphorIconsFill.microsoftWordLogo, + 'minus': PhosphorIconsFill.minus, + 'minusCircle': PhosphorIconsFill.minusCircle, + 'minusSquare': PhosphorIconsFill.minusSquare, + 'money': PhosphorIconsFill.money, + 'moneyWavy': PhosphorIconsFill.moneyWavy, + 'monitor': PhosphorIconsFill.monitor, + 'monitorArrowUp': PhosphorIconsFill.monitorArrowUp, + 'monitorPlay': PhosphorIconsFill.monitorPlay, + 'moon': PhosphorIconsFill.moon, + 'moonStars': PhosphorIconsFill.moonStars, + 'moped': PhosphorIconsFill.moped, + 'mopedFront': PhosphorIconsFill.mopedFront, + 'mosque': PhosphorIconsFill.mosque, + 'motorcycle': PhosphorIconsFill.motorcycle, + 'mountains': PhosphorIconsFill.mountains, + 'mouse': PhosphorIconsFill.mouse, + 'mouseLeftClick': PhosphorIconsFill.mouseLeftClick, + 'mouseMiddleClick': PhosphorIconsFill.mouseMiddleClick, + 'mouseRightClick': PhosphorIconsFill.mouseRightClick, + 'mouseScroll': PhosphorIconsFill.mouseScroll, + 'mouseSimple': PhosphorIconsFill.mouseSimple, + 'musicNote': PhosphorIconsFill.musicNote, + 'musicNoteSimple': PhosphorIconsFill.musicNoteSimple, + 'musicNotes': PhosphorIconsFill.musicNotes, + 'musicNotesMinus': PhosphorIconsFill.musicNotesMinus, + 'musicNotesPlus': PhosphorIconsFill.musicNotesPlus, + 'musicNotesSimple': PhosphorIconsFill.musicNotesSimple, + 'navigationArrow': PhosphorIconsFill.navigationArrow, + 'needle': PhosphorIconsFill.needle, + 'network': PhosphorIconsFill.network, + 'networkSlash': PhosphorIconsFill.networkSlash, + 'networkX': PhosphorIconsFill.networkX, + 'newspaper': PhosphorIconsFill.newspaper, + 'newspaperClipping': PhosphorIconsFill.newspaperClipping, + 'notEquals': PhosphorIconsFill.notEquals, + 'notMemberOf': PhosphorIconsFill.notMemberOf, + 'notSubsetOf': PhosphorIconsFill.notSubsetOf, + 'notSupersetOf': PhosphorIconsFill.notSupersetOf, + 'notches': PhosphorIconsFill.notches, + 'note': PhosphorIconsFill.note, + 'noteBlank': PhosphorIconsFill.noteBlank, + 'notePencil': PhosphorIconsFill.notePencil, + 'notebook': PhosphorIconsFill.notebook, + 'notepad': PhosphorIconsFill.notepad, + 'notification': PhosphorIconsFill.notification, + 'notionLogo': PhosphorIconsFill.notionLogo, + 'nuclearPlant': PhosphorIconsFill.nuclearPlant, + 'numberCircleEight': PhosphorIconsFill.numberCircleEight, + 'numberCircleFive': PhosphorIconsFill.numberCircleFive, + 'numberCircleFour': PhosphorIconsFill.numberCircleFour, + 'numberCircleNine': PhosphorIconsFill.numberCircleNine, + 'numberCircleOne': PhosphorIconsFill.numberCircleOne, + 'numberCircleSeven': PhosphorIconsFill.numberCircleSeven, + 'numberCircleSix': PhosphorIconsFill.numberCircleSix, + 'numberCircleThree': PhosphorIconsFill.numberCircleThree, + 'numberCircleTwo': PhosphorIconsFill.numberCircleTwo, + 'numberCircleZero': PhosphorIconsFill.numberCircleZero, + 'numberEight': PhosphorIconsFill.numberEight, + 'numberFive': PhosphorIconsFill.numberFive, + 'numberFour': PhosphorIconsFill.numberFour, + 'numberNine': PhosphorIconsFill.numberNine, + 'numberOne': PhosphorIconsFill.numberOne, + 'numberSeven': PhosphorIconsFill.numberSeven, + 'numberSix': PhosphorIconsFill.numberSix, + 'numberSquareEight': PhosphorIconsFill.numberSquareEight, + 'numberSquareFive': PhosphorIconsFill.numberSquareFive, + 'numberSquareFour': PhosphorIconsFill.numberSquareFour, + 'numberSquareNine': PhosphorIconsFill.numberSquareNine, + 'numberSquareOne': PhosphorIconsFill.numberSquareOne, + 'numberSquareSeven': PhosphorIconsFill.numberSquareSeven, + 'numberSquareSix': PhosphorIconsFill.numberSquareSix, + 'numberSquareThree': PhosphorIconsFill.numberSquareThree, + 'numberSquareTwo': PhosphorIconsFill.numberSquareTwo, + 'numberSquareZero': PhosphorIconsFill.numberSquareZero, + 'numberThree': PhosphorIconsFill.numberThree, + 'numberTwo': PhosphorIconsFill.numberTwo, + 'numberZero': PhosphorIconsFill.numberZero, + 'numpad': PhosphorIconsFill.numpad, + 'nut': PhosphorIconsFill.nut, + 'nyTimesLogo': PhosphorIconsFill.nyTimesLogo, + 'octagon': PhosphorIconsFill.octagon, + 'officeChair': PhosphorIconsFill.officeChair, + 'onigiri': PhosphorIconsFill.onigiri, + 'openAiLogo': PhosphorIconsFill.openAiLogo, + 'option': PhosphorIconsFill.option, + 'orange': PhosphorIconsFill.orange, + 'orangeSlice': PhosphorIconsFill.orangeSlice, + 'oven': PhosphorIconsFill.oven, + 'package': PhosphorIconsFill.package, + 'paintBrush': PhosphorIconsFill.paintBrush, + 'paintBrushBroad': PhosphorIconsFill.paintBrushBroad, + 'paintBrushHousehold': PhosphorIconsFill.paintBrushHousehold, + 'paintBucket': PhosphorIconsFill.paintBucket, + 'paintRoller': PhosphorIconsFill.paintRoller, + 'palette': PhosphorIconsFill.palette, + 'panorama': PhosphorIconsFill.panorama, + 'pants': PhosphorIconsFill.pants, + 'paperPlane': PhosphorIconsFill.paperPlane, + 'paperPlaneRight': PhosphorIconsFill.paperPlaneRight, + 'paperPlaneTilt': PhosphorIconsFill.paperPlaneTilt, + 'paperclip': PhosphorIconsFill.paperclip, + 'paperclipHorizontal': PhosphorIconsFill.paperclipHorizontal, + 'parachute': PhosphorIconsFill.parachute, + 'paragraph': PhosphorIconsFill.paragraph, + 'parallelogram': PhosphorIconsFill.parallelogram, + 'park': PhosphorIconsFill.park, + 'password': PhosphorIconsFill.password, + 'path': PhosphorIconsFill.path, + 'patreonLogo': PhosphorIconsFill.patreonLogo, + 'pause': PhosphorIconsFill.pause, + 'pauseCircle': PhosphorIconsFill.pauseCircle, + 'pawPrint': PhosphorIconsFill.pawPrint, + 'paypalLogo': PhosphorIconsFill.paypalLogo, + 'peace': PhosphorIconsFill.peace, + 'pen': PhosphorIconsFill.pen, + 'penNib': PhosphorIconsFill.penNib, + 'penNibStraight': PhosphorIconsFill.penNibStraight, + 'pencil': PhosphorIconsFill.pencil, + 'pencilCircle': PhosphorIconsFill.pencilCircle, + 'pencilLine': PhosphorIconsFill.pencilLine, + 'pencilRuler': PhosphorIconsFill.pencilRuler, + 'pencilSimple': PhosphorIconsFill.pencilSimple, + 'pencilSimpleLine': PhosphorIconsFill.pencilSimpleLine, + 'pencilSimpleSlash': PhosphorIconsFill.pencilSimpleSlash, + 'pencilSlash': PhosphorIconsFill.pencilSlash, + 'pentagon': PhosphorIconsFill.pentagon, + 'pentagram': PhosphorIconsFill.pentagram, + 'pepper': PhosphorIconsFill.pepper, + 'percent': PhosphorIconsFill.percent, + 'person': PhosphorIconsFill.person, + 'personArmsSpread': PhosphorIconsFill.personArmsSpread, + 'personSimple': PhosphorIconsFill.personSimple, + 'personSimpleBike': PhosphorIconsFill.personSimpleBike, + 'personSimpleCircle': PhosphorIconsFill.personSimpleCircle, + 'personSimpleHike': PhosphorIconsFill.personSimpleHike, + 'personSimpleRun': PhosphorIconsFill.personSimpleRun, + 'personSimpleSki': PhosphorIconsFill.personSimpleSki, + 'personSimpleSnowboard': PhosphorIconsFill.personSimpleSnowboard, + 'personSimpleSwim': PhosphorIconsFill.personSimpleSwim, + 'personSimpleTaiChi': PhosphorIconsFill.personSimpleTaiChi, + 'personSimpleThrow': PhosphorIconsFill.personSimpleThrow, + 'personSimpleWalk': PhosphorIconsFill.personSimpleWalk, + 'perspective': PhosphorIconsFill.perspective, + 'phone': PhosphorIconsFill.phone, + 'phoneCall': PhosphorIconsFill.phoneCall, + 'phoneDisconnect': PhosphorIconsFill.phoneDisconnect, + 'phoneIncoming': PhosphorIconsFill.phoneIncoming, + 'phoneList': PhosphorIconsFill.phoneList, + 'phoneOutgoing': PhosphorIconsFill.phoneOutgoing, + 'phonePause': PhosphorIconsFill.phonePause, + 'phonePlus': PhosphorIconsFill.phonePlus, + 'phoneSlash': PhosphorIconsFill.phoneSlash, + 'phoneTransfer': PhosphorIconsFill.phoneTransfer, + 'phoneX': PhosphorIconsFill.phoneX, + 'phosphorLogo': PhosphorIconsFill.phosphorLogo, + 'pi': PhosphorIconsFill.pi, + 'pianoKeys': PhosphorIconsFill.pianoKeys, + 'picnicTable': PhosphorIconsFill.picnicTable, + 'pictureInpicture': PhosphorIconsFill.pictureInpicture, + 'piggyBank': PhosphorIconsFill.piggyBank, + 'pill': PhosphorIconsFill.pill, + 'pingPong': PhosphorIconsFill.pingPong, + 'pintGlass': PhosphorIconsFill.pintGlass, + 'pinterestLogo': PhosphorIconsFill.pinterestLogo, + 'pinwheel': PhosphorIconsFill.pinwheel, + 'pipe': PhosphorIconsFill.pipe, + 'pipeWrench': PhosphorIconsFill.pipeWrench, + 'pixLogo': PhosphorIconsFill.pixLogo, + 'pizza': PhosphorIconsFill.pizza, + 'placeholder': PhosphorIconsFill.placeholder, + 'planet': PhosphorIconsFill.planet, + 'plant': PhosphorIconsFill.plant, + 'play': PhosphorIconsFill.play, + 'playCircle': PhosphorIconsFill.playCircle, + 'playPause': PhosphorIconsFill.playPause, + 'playlist': PhosphorIconsFill.playlist, + 'plug': PhosphorIconsFill.plug, + 'plugCharging': PhosphorIconsFill.plugCharging, + 'plugs': PhosphorIconsFill.plugs, + 'plugsConnected': PhosphorIconsFill.plugsConnected, + 'plus': PhosphorIconsFill.plus, + 'plusCircle': PhosphorIconsFill.plusCircle, + 'plusMinus': PhosphorIconsFill.plusMinus, + 'plusSquare': PhosphorIconsFill.plusSquare, + 'pokerChip': PhosphorIconsFill.pokerChip, + 'policeCar': PhosphorIconsFill.policeCar, + 'polygon': PhosphorIconsFill.polygon, + 'popcorn': PhosphorIconsFill.popcorn, + 'popsicle': PhosphorIconsFill.popsicle, + 'pottedPlant': PhosphorIconsFill.pottedPlant, + 'power': PhosphorIconsFill.power, + 'prescription': PhosphorIconsFill.prescription, + 'presentation': PhosphorIconsFill.presentation, + 'presentationChart': PhosphorIconsFill.presentationChart, + 'printer': PhosphorIconsFill.printer, + 'prohibit': PhosphorIconsFill.prohibit, + 'prohibitInset': PhosphorIconsFill.prohibitInset, + 'projectorScreen': PhosphorIconsFill.projectorScreen, + 'projectorScreenChart': PhosphorIconsFill.projectorScreenChart, + 'pulse': PhosphorIconsFill.pulse, + 'pushPin': PhosphorIconsFill.pushPin, + 'pushPinSimple': PhosphorIconsFill.pushPinSimple, + 'pushPinSimpleSlash': PhosphorIconsFill.pushPinSimpleSlash, + 'pushPinSlash': PhosphorIconsFill.pushPinSlash, + 'puzzlePiece': PhosphorIconsFill.puzzlePiece, + 'qrCode': PhosphorIconsFill.qrCode, + 'question': PhosphorIconsFill.question, + 'questionMark': PhosphorIconsFill.questionMark, + 'queue': PhosphorIconsFill.queue, + 'quotes': PhosphorIconsFill.quotes, + 'rabbit': PhosphorIconsFill.rabbit, + 'racquet': PhosphorIconsFill.racquet, + 'radical': PhosphorIconsFill.radical, + 'radio': PhosphorIconsFill.radio, + 'radioButton': PhosphorIconsFill.radioButton, + 'radioactive': PhosphorIconsFill.radioactive, + 'rainbow': PhosphorIconsFill.rainbow, + 'rainbowCloud': PhosphorIconsFill.rainbowCloud, + 'ranking': PhosphorIconsFill.ranking, + 'readCvLogo': PhosphorIconsFill.readCvLogo, + 'receipt': PhosphorIconsFill.receipt, + 'receiptX': PhosphorIconsFill.receiptX, + 'record': PhosphorIconsFill.record, + 'rectangle': PhosphorIconsFill.rectangle, + 'rectangleDashed': PhosphorIconsFill.rectangleDashed, + 'recycle': PhosphorIconsFill.recycle, + 'redditLogo': PhosphorIconsFill.redditLogo, + 'repeat': PhosphorIconsFill.repeat, + 'repeatOnce': PhosphorIconsFill.repeatOnce, + 'replitLogo': PhosphorIconsFill.replitLogo, + 'resize': PhosphorIconsFill.resize, + 'rewind': PhosphorIconsFill.rewind, + 'rewindCircle': PhosphorIconsFill.rewindCircle, + 'roadHorizon': PhosphorIconsFill.roadHorizon, + 'robot': PhosphorIconsFill.robot, + 'rocket': PhosphorIconsFill.rocket, + 'rocketLaunch': PhosphorIconsFill.rocketLaunch, + 'rows': PhosphorIconsFill.rows, + 'rowsPlusBottom': PhosphorIconsFill.rowsPlusBottom, + 'rowsPlusTop': PhosphorIconsFill.rowsPlusTop, + 'rss': PhosphorIconsFill.rss, + 'rssSimple': PhosphorIconsFill.rssSimple, + 'rug': PhosphorIconsFill.rug, + 'ruler': PhosphorIconsFill.ruler, + 'sailboat': PhosphorIconsFill.sailboat, + 'scales': PhosphorIconsFill.scales, + 'scan': PhosphorIconsFill.scan, + 'scanSmiley': PhosphorIconsFill.scanSmiley, + 'scissors': PhosphorIconsFill.scissors, + 'scooter': PhosphorIconsFill.scooter, + 'screencast': PhosphorIconsFill.screencast, + 'screwdriver': PhosphorIconsFill.screwdriver, + 'scribble': PhosphorIconsFill.scribble, + 'scribbleLoop': PhosphorIconsFill.scribbleLoop, + 'scroll': PhosphorIconsFill.scroll, + 'seal': PhosphorIconsFill.seal, + 'sealCheck': PhosphorIconsFill.sealCheck, + 'sealPercent': PhosphorIconsFill.sealPercent, + 'sealQuestion': PhosphorIconsFill.sealQuestion, + 'sealWarning': PhosphorIconsFill.sealWarning, + 'seat': PhosphorIconsFill.seat, + 'seatbelt': PhosphorIconsFill.seatbelt, + 'securityCamera': PhosphorIconsFill.securityCamera, + 'selection': PhosphorIconsFill.selection, + 'selectionAll': PhosphorIconsFill.selectionAll, + 'selectionBackground': PhosphorIconsFill.selectionBackground, + 'selectionForeground': PhosphorIconsFill.selectionForeground, + 'selectionInverse': PhosphorIconsFill.selectionInverse, + 'selectionPlus': PhosphorIconsFill.selectionPlus, + 'selectionSlash': PhosphorIconsFill.selectionSlash, + 'shapes': PhosphorIconsFill.shapes, + 'share': PhosphorIconsFill.share, + 'shareFat': PhosphorIconsFill.shareFat, + 'shareNetwork': PhosphorIconsFill.shareNetwork, + 'shield': PhosphorIconsFill.shield, + 'shieldCheck': PhosphorIconsFill.shieldCheck, + 'shieldCheckered': PhosphorIconsFill.shieldCheckered, + 'shieldChevron': PhosphorIconsFill.shieldChevron, + 'shieldPlus': PhosphorIconsFill.shieldPlus, + 'shieldSlash': PhosphorIconsFill.shieldSlash, + 'shieldStar': PhosphorIconsFill.shieldStar, + 'shieldWarning': PhosphorIconsFill.shieldWarning, + 'shippingContainer': PhosphorIconsFill.shippingContainer, + 'shirtFolded': PhosphorIconsFill.shirtFolded, + 'shootingStar': PhosphorIconsFill.shootingStar, + 'shoppingBag': PhosphorIconsFill.shoppingBag, + 'shoppingBagOpen': PhosphorIconsFill.shoppingBagOpen, + 'shoppingCart': PhosphorIconsFill.shoppingCart, + 'shoppingCartSimple': PhosphorIconsFill.shoppingCartSimple, + 'shovel': PhosphorIconsFill.shovel, + 'shower': PhosphorIconsFill.shower, + 'shrimp': PhosphorIconsFill.shrimp, + 'shuffle': PhosphorIconsFill.shuffle, + 'shuffleAngular': PhosphorIconsFill.shuffleAngular, + 'shuffleSimple': PhosphorIconsFill.shuffleSimple, + 'sidebar': PhosphorIconsFill.sidebar, + 'sidebarSimple': PhosphorIconsFill.sidebarSimple, + 'sigma': PhosphorIconsFill.sigma, + 'signIn': PhosphorIconsFill.signIn, + 'signOut': PhosphorIconsFill.signOut, + 'signature': PhosphorIconsFill.signature, + 'signpost': PhosphorIconsFill.signpost, + 'simCard': PhosphorIconsFill.simCard, + 'siren': PhosphorIconsFill.siren, + 'sketchLogo': PhosphorIconsFill.sketchLogo, + 'skipBack': PhosphorIconsFill.skipBack, + 'skipBackCircle': PhosphorIconsFill.skipBackCircle, + 'skipForward': PhosphorIconsFill.skipForward, + 'skipForwardCircle': PhosphorIconsFill.skipForwardCircle, + 'skull': PhosphorIconsFill.skull, + 'skypeLogo': PhosphorIconsFill.skypeLogo, + 'slackLogo': PhosphorIconsFill.slackLogo, + 'sliders': PhosphorIconsFill.sliders, + 'slidersHorizontal': PhosphorIconsFill.slidersHorizontal, + 'slideshow': PhosphorIconsFill.slideshow, + 'smiley': PhosphorIconsFill.smiley, + 'smileyAngry': PhosphorIconsFill.smileyAngry, + 'smileyBlank': PhosphorIconsFill.smileyBlank, + 'smileyMeh': PhosphorIconsFill.smileyMeh, + 'smileyMelting': PhosphorIconsFill.smileyMelting, + 'smileyNervous': PhosphorIconsFill.smileyNervous, + 'smileySad': PhosphorIconsFill.smileySad, + 'smileySticker': PhosphorIconsFill.smileySticker, + 'smileyWink': PhosphorIconsFill.smileyWink, + 'smileyXEyes': PhosphorIconsFill.smileyXEyes, + 'snapchatLogo': PhosphorIconsFill.snapchatLogo, + 'sneaker': PhosphorIconsFill.sneaker, + 'sneakerMove': PhosphorIconsFill.sneakerMove, + 'snowflake': PhosphorIconsFill.snowflake, + 'soccerBall': PhosphorIconsFill.soccerBall, + 'sock': PhosphorIconsFill.sock, + 'solarPanel': PhosphorIconsFill.solarPanel, + 'solarRoof': PhosphorIconsFill.solarRoof, + 'sortAscending': PhosphorIconsFill.sortAscending, + 'sortDescending': PhosphorIconsFill.sortDescending, + 'soundcloudLogo': PhosphorIconsFill.soundcloudLogo, + 'spade': PhosphorIconsFill.spade, + 'sparkle': PhosphorIconsFill.sparkle, + 'speakerHifi': PhosphorIconsFill.speakerHifi, + 'speakerHigh': PhosphorIconsFill.speakerHigh, + 'speakerLow': PhosphorIconsFill.speakerLow, + 'speakerNone': PhosphorIconsFill.speakerNone, + 'speakerSimpleHigh': PhosphorIconsFill.speakerSimpleHigh, + 'speakerSimpleLow': PhosphorIconsFill.speakerSimpleLow, + 'speakerSimpleNone': PhosphorIconsFill.speakerSimpleNone, + 'speakerSimpleSlash': PhosphorIconsFill.speakerSimpleSlash, + 'speakerSimpleX': PhosphorIconsFill.speakerSimpleX, + 'speakerSlash': PhosphorIconsFill.speakerSlash, + 'speakerX': PhosphorIconsFill.speakerX, + 'speedometer': PhosphorIconsFill.speedometer, + 'sphere': PhosphorIconsFill.sphere, + 'spinner': PhosphorIconsFill.spinner, + 'spinnerBall': PhosphorIconsFill.spinnerBall, + 'spinnerGap': PhosphorIconsFill.spinnerGap, + 'spiral': PhosphorIconsFill.spiral, + 'splitHorizontal': PhosphorIconsFill.splitHorizontal, + 'splitVertical': PhosphorIconsFill.splitVertical, + 'spotifyLogo': PhosphorIconsFill.spotifyLogo, + 'sprayBottle': PhosphorIconsFill.sprayBottle, + 'square': PhosphorIconsFill.square, + 'squareHalf': PhosphorIconsFill.squareHalf, + 'squareHalfBottom': PhosphorIconsFill.squareHalfBottom, + 'squareLogo': PhosphorIconsFill.squareLogo, + 'squareSplitHorizontal': PhosphorIconsFill.squareSplitHorizontal, + 'squareSplitVertical': PhosphorIconsFill.squareSplitVertical, + 'squaresFour': PhosphorIconsFill.squaresFour, + 'stack': PhosphorIconsFill.stack, + 'stackMinus': PhosphorIconsFill.stackMinus, + 'stackOverflowLogo': PhosphorIconsFill.stackOverflowLogo, + 'stackPlus': PhosphorIconsFill.stackPlus, + 'stackSimple': PhosphorIconsFill.stackSimple, + 'stairs': PhosphorIconsFill.stairs, + 'stamp': PhosphorIconsFill.stamp, + 'standardDefinition': PhosphorIconsFill.standardDefinition, + 'star': PhosphorIconsFill.star, + 'starAndCrescent': PhosphorIconsFill.starAndCrescent, + 'starFour': PhosphorIconsFill.starFour, + 'starHalf': PhosphorIconsFill.starHalf, + 'starOfDavid': PhosphorIconsFill.starOfDavid, + 'steamLogo': PhosphorIconsFill.steamLogo, + 'steeringWheel': PhosphorIconsFill.steeringWheel, + 'steps': PhosphorIconsFill.steps, + 'stethoscope': PhosphorIconsFill.stethoscope, + 'sticker': PhosphorIconsFill.sticker, + 'stool': PhosphorIconsFill.stool, + 'stop': PhosphorIconsFill.stop, + 'stopCircle': PhosphorIconsFill.stopCircle, + 'storefront': PhosphorIconsFill.storefront, + 'strategy': PhosphorIconsFill.strategy, + 'stripeLogo': PhosphorIconsFill.stripeLogo, + 'student': PhosphorIconsFill.student, + 'subsetOf': PhosphorIconsFill.subsetOf, + 'subsetProperOf': PhosphorIconsFill.subsetProperOf, + 'subtitles': PhosphorIconsFill.subtitles, + 'subtitlesSlash': PhosphorIconsFill.subtitlesSlash, + 'subtract': PhosphorIconsFill.subtract, + 'subtractSquare': PhosphorIconsFill.subtractSquare, + 'subway': PhosphorIconsFill.subway, + 'suitcase': PhosphorIconsFill.suitcase, + 'suitcaseRolling': PhosphorIconsFill.suitcaseRolling, + 'suitcaseSimple': PhosphorIconsFill.suitcaseSimple, + 'sun': PhosphorIconsFill.sun, + 'sunDim': PhosphorIconsFill.sunDim, + 'sunHorizon': PhosphorIconsFill.sunHorizon, + 'sunglasses': PhosphorIconsFill.sunglasses, + 'supersetOf': PhosphorIconsFill.supersetOf, + 'supersetProperOf': PhosphorIconsFill.supersetProperOf, + 'swap': PhosphorIconsFill.swap, + 'swatches': PhosphorIconsFill.swatches, + 'swimmingPool': PhosphorIconsFill.swimmingPool, + 'sword': PhosphorIconsFill.sword, + 'synagogue': PhosphorIconsFill.synagogue, + 'syringe': PhosphorIconsFill.syringe, + 'tShirt': PhosphorIconsFill.tShirt, + 'table': PhosphorIconsFill.table, + 'tabs': PhosphorIconsFill.tabs, + 'tag': PhosphorIconsFill.tag, + 'tagChevron': PhosphorIconsFill.tagChevron, + 'tagSimple': PhosphorIconsFill.tagSimple, + 'target': PhosphorIconsFill.target, + 'taxi': PhosphorIconsFill.taxi, + 'teaBag': PhosphorIconsFill.teaBag, + 'telegramLogo': PhosphorIconsFill.telegramLogo, + 'television': PhosphorIconsFill.television, + 'televisionSimple': PhosphorIconsFill.televisionSimple, + 'tennisBall': PhosphorIconsFill.tennisBall, + 'tent': PhosphorIconsFill.tent, + 'terminal': PhosphorIconsFill.terminal, + 'terminalWindow': PhosphorIconsFill.terminalWindow, + 'testTube': PhosphorIconsFill.testTube, + 'textAUnderline': PhosphorIconsFill.textAUnderline, + 'textAa': PhosphorIconsFill.textAa, + 'textAlignCenter': PhosphorIconsFill.textAlignCenter, + 'textAlignJustify': PhosphorIconsFill.textAlignJustify, + 'textAlignLeft': PhosphorIconsFill.textAlignLeft, + 'textAlignRight': PhosphorIconsFill.textAlignRight, + 'textB': PhosphorIconsFill.textB, + 'textColumns': PhosphorIconsFill.textColumns, + 'textH': PhosphorIconsFill.textH, + 'textHFive': PhosphorIconsFill.textHFive, + 'textHFour': PhosphorIconsFill.textHFour, + 'textHOne': PhosphorIconsFill.textHOne, + 'textHSix': PhosphorIconsFill.textHSix, + 'textHThree': PhosphorIconsFill.textHThree, + 'textHTwo': PhosphorIconsFill.textHTwo, + 'textIndent': PhosphorIconsFill.textIndent, + 'textItalic': PhosphorIconsFill.textItalic, + 'textOutdent': PhosphorIconsFill.textOutdent, + 'textStrikethrough': PhosphorIconsFill.textStrikethrough, + 'textSubscript': PhosphorIconsFill.textSubscript, + 'textSuperscript': PhosphorIconsFill.textSuperscript, + 'textT': PhosphorIconsFill.textT, + 'textTSlash': PhosphorIconsFill.textTSlash, + 'textUnderline': PhosphorIconsFill.textUnderline, + 'textbox': PhosphorIconsFill.textbox, + 'thermometer': PhosphorIconsFill.thermometer, + 'thermometerCold': PhosphorIconsFill.thermometerCold, + 'thermometerHot': PhosphorIconsFill.thermometerHot, + 'thermometerSimple': PhosphorIconsFill.thermometerSimple, + 'threadsLogo': PhosphorIconsFill.threadsLogo, + 'threeD': PhosphorIconsFill.threeD, + 'thumbsDown': PhosphorIconsFill.thumbsDown, + 'thumbsUp': PhosphorIconsFill.thumbsUp, + 'ticket': PhosphorIconsFill.ticket, + 'tidalLogo': PhosphorIconsFill.tidalLogo, + 'tiktokLogo': PhosphorIconsFill.tiktokLogo, + 'tilde': PhosphorIconsFill.tilde, + 'timer': PhosphorIconsFill.timer, + 'tipJar': PhosphorIconsFill.tipJar, + 'tipi': PhosphorIconsFill.tipi, + 'tire': PhosphorIconsFill.tire, + 'toggleLeft': PhosphorIconsFill.toggleLeft, + 'toggleRight': PhosphorIconsFill.toggleRight, + 'toilet': PhosphorIconsFill.toilet, + 'toiletPaper': PhosphorIconsFill.toiletPaper, + 'toolbox': PhosphorIconsFill.toolbox, + 'tooth': PhosphorIconsFill.tooth, + 'tornado': PhosphorIconsFill.tornado, + 'tote': PhosphorIconsFill.tote, + 'toteSimple': PhosphorIconsFill.toteSimple, + 'towel': PhosphorIconsFill.towel, + 'tractor': PhosphorIconsFill.tractor, + 'trademark': PhosphorIconsFill.trademark, + 'trademarkRegistered': PhosphorIconsFill.trademarkRegistered, + 'trafficCone': PhosphorIconsFill.trafficCone, + 'trafficSign': PhosphorIconsFill.trafficSign, + 'trafficSignal': PhosphorIconsFill.trafficSignal, + 'train': PhosphorIconsFill.train, + 'trainRegional': PhosphorIconsFill.trainRegional, + 'trainSimple': PhosphorIconsFill.trainSimple, + 'tram': PhosphorIconsFill.tram, + 'translate': PhosphorIconsFill.translate, + 'trash': PhosphorIconsFill.trash, + 'trashSimple': PhosphorIconsFill.trashSimple, + 'tray': PhosphorIconsFill.tray, + 'trayArrowDown': PhosphorIconsFill.trayArrowDown, + 'trayArrowUp': PhosphorIconsFill.trayArrowUp, + 'treasureChest': PhosphorIconsFill.treasureChest, + 'tree': PhosphorIconsFill.tree, + 'treeEvergreen': PhosphorIconsFill.treeEvergreen, + 'treePalm': PhosphorIconsFill.treePalm, + 'treeStructure': PhosphorIconsFill.treeStructure, + 'treeView': PhosphorIconsFill.treeView, + 'trendDown': PhosphorIconsFill.trendDown, + 'trendUp': PhosphorIconsFill.trendUp, + 'triangle': PhosphorIconsFill.triangle, + 'triangleDashed': PhosphorIconsFill.triangleDashed, + 'trolley': PhosphorIconsFill.trolley, + 'trolleySuitcase': PhosphorIconsFill.trolleySuitcase, + 'trophy': PhosphorIconsFill.trophy, + 'truck': PhosphorIconsFill.truck, + 'truckTrailer': PhosphorIconsFill.truckTrailer, + 'tumblrLogo': PhosphorIconsFill.tumblrLogo, + 'twitchLogo': PhosphorIconsFill.twitchLogo, + 'twitterLogo': PhosphorIconsFill.twitterLogo, + 'umbrella': PhosphorIconsFill.umbrella, + 'umbrellaSimple': PhosphorIconsFill.umbrellaSimple, + 'union': PhosphorIconsFill.union, + 'unite': PhosphorIconsFill.unite, + 'uniteSquare': PhosphorIconsFill.uniteSquare, + 'upload': PhosphorIconsFill.upload, + 'uploadSimple': PhosphorIconsFill.uploadSimple, + 'usb': PhosphorIconsFill.usb, + 'user': PhosphorIconsFill.user, + 'userCheck': PhosphorIconsFill.userCheck, + 'userCircle': PhosphorIconsFill.userCircle, + 'userCircleCheck': PhosphorIconsFill.userCircleCheck, + 'userCircleDashed': PhosphorIconsFill.userCircleDashed, + 'userCircleGear': PhosphorIconsFill.userCircleGear, + 'userCircleMinus': PhosphorIconsFill.userCircleMinus, + 'userCirclePlus': PhosphorIconsFill.userCirclePlus, + 'userFocus': PhosphorIconsFill.userFocus, + 'userGear': PhosphorIconsFill.userGear, + 'userList': PhosphorIconsFill.userList, + 'userMinus': PhosphorIconsFill.userMinus, + 'userPlus': PhosphorIconsFill.userPlus, + 'userRectangle': PhosphorIconsFill.userRectangle, + 'userSound': PhosphorIconsFill.userSound, + 'userSquare': PhosphorIconsFill.userSquare, + 'userSwitch': PhosphorIconsFill.userSwitch, + 'users': PhosphorIconsFill.users, + 'usersFour': PhosphorIconsFill.usersFour, + 'usersThree': PhosphorIconsFill.usersThree, + 'van': PhosphorIconsFill.van, + 'vault': PhosphorIconsFill.vault, + 'vectorThree': PhosphorIconsFill.vectorThree, + 'vectorTwo': PhosphorIconsFill.vectorTwo, + 'vibrate': PhosphorIconsFill.vibrate, + 'video': PhosphorIconsFill.video, + 'videoCamera': PhosphorIconsFill.videoCamera, + 'videoCameraSlash': PhosphorIconsFill.videoCameraSlash, + 'videoConference': PhosphorIconsFill.videoConference, + 'vignette': PhosphorIconsFill.vignette, + 'vinylRecord': PhosphorIconsFill.vinylRecord, + 'virtualReality': PhosphorIconsFill.virtualReality, + 'virus': PhosphorIconsFill.virus, + 'visor': PhosphorIconsFill.visor, + 'voicemail': PhosphorIconsFill.voicemail, + 'volleyball': PhosphorIconsFill.volleyball, + 'wall': PhosphorIconsFill.wall, + 'wallet': PhosphorIconsFill.wallet, + 'warehouse': PhosphorIconsFill.warehouse, + 'warning': PhosphorIconsFill.warning, + 'warningCircle': PhosphorIconsFill.warningCircle, + 'warningDiamond': PhosphorIconsFill.warningDiamond, + 'warningOctagon': PhosphorIconsFill.warningOctagon, + 'washingMachine': PhosphorIconsFill.washingMachine, + 'watch': PhosphorIconsFill.watch, + 'waveSawtooth': PhosphorIconsFill.waveSawtooth, + 'waveSine': PhosphorIconsFill.waveSine, + 'waveSquare': PhosphorIconsFill.waveSquare, + 'waveTriangle': PhosphorIconsFill.waveTriangle, + 'waveform': PhosphorIconsFill.waveform, + 'waveformSlash': PhosphorIconsFill.waveformSlash, + 'waves': PhosphorIconsFill.waves, + 'webcam': PhosphorIconsFill.webcam, + 'webcamSlash': PhosphorIconsFill.webcamSlash, + 'webhooksLogo': PhosphorIconsFill.webhooksLogo, + 'wechatLogo': PhosphorIconsFill.wechatLogo, + 'whatsappLogo': PhosphorIconsFill.whatsappLogo, + 'wheelchair': PhosphorIconsFill.wheelchair, + 'wheelchairMotion': PhosphorIconsFill.wheelchairMotion, + 'wifiHigh': PhosphorIconsFill.wifiHigh, + 'wifiLow': PhosphorIconsFill.wifiLow, + 'wifiMedium': PhosphorIconsFill.wifiMedium, + 'wifiNone': PhosphorIconsFill.wifiNone, + 'wifiSlash': PhosphorIconsFill.wifiSlash, + 'wifiX': PhosphorIconsFill.wifiX, + 'wind': PhosphorIconsFill.wind, + 'windmill': PhosphorIconsFill.windmill, + 'windowsLogo': PhosphorIconsFill.windowsLogo, + 'wine': PhosphorIconsFill.wine, + 'wrench': PhosphorIconsFill.wrench, + 'x': PhosphorIconsFill.x, + 'xCircle': PhosphorIconsFill.xCircle, + 'xLogo': PhosphorIconsFill.xLogo, + 'xSquare': PhosphorIconsFill.xSquare, + 'yarn': PhosphorIconsFill.yarn, + 'yinYang': PhosphorIconsFill.yinYang, + 'youtubeLogo': PhosphorIconsFill.youtubeLogo, + }; + + static final Map _iconMapRegular = { + 'acorn': PhosphorIconsRegular.acorn, + 'addressBook': PhosphorIconsRegular.addressBook, + 'addressBookTabs': PhosphorIconsRegular.addressBookTabs, + 'airTrafficControl': PhosphorIconsRegular.airTrafficControl, + 'airplane': PhosphorIconsRegular.airplane, + 'airplaneInFlight': PhosphorIconsRegular.airplaneInFlight, + 'airplaneLanding': PhosphorIconsRegular.airplaneLanding, + 'airplaneTakeoff': PhosphorIconsRegular.airplaneTakeoff, + 'airplaneTaxiing': PhosphorIconsRegular.airplaneTaxiing, + 'airplaneTilt': PhosphorIconsRegular.airplaneTilt, + 'airplay': PhosphorIconsRegular.airplay, + 'alarm': PhosphorIconsRegular.alarm, + 'alien': PhosphorIconsRegular.alien, + 'alignBottom': PhosphorIconsRegular.alignBottom, + 'alignBottomSimple': PhosphorIconsRegular.alignBottomSimple, + 'alignCenterHorizontal': PhosphorIconsRegular.alignCenterHorizontal, + 'alignCenterHorizontalSimple': PhosphorIconsRegular.alignCenterHorizontalSimple, + 'alignCenterVertical': PhosphorIconsRegular.alignCenterVertical, + 'alignCenterVerticalSimple': PhosphorIconsRegular.alignCenterVerticalSimple, + 'alignLeft': PhosphorIconsRegular.alignLeft, + 'alignLeftSimple': PhosphorIconsRegular.alignLeftSimple, + 'alignRight': PhosphorIconsRegular.alignRight, + 'alignRightSimple': PhosphorIconsRegular.alignRightSimple, + 'alignTop': PhosphorIconsRegular.alignTop, + 'alignTopSimple': PhosphorIconsRegular.alignTopSimple, + 'amazonLogo': PhosphorIconsRegular.amazonLogo, + 'ambulance': PhosphorIconsRegular.ambulance, + 'anchor': PhosphorIconsRegular.anchor, + 'anchorSimple': PhosphorIconsRegular.anchorSimple, + 'androidLogo': PhosphorIconsRegular.androidLogo, + 'angle': PhosphorIconsRegular.angle, + 'angularLogo': PhosphorIconsRegular.angularLogo, + 'aperture': PhosphorIconsRegular.aperture, + 'appStoreLogo': PhosphorIconsRegular.appStoreLogo, + 'appWindow': PhosphorIconsRegular.appWindow, + 'appleLogo': PhosphorIconsRegular.appleLogo, + 'applePodcastsLogo': PhosphorIconsRegular.applePodcastsLogo, + 'approximateEquals': PhosphorIconsRegular.approximateEquals, + 'archive': PhosphorIconsRegular.archive, + 'armchair': PhosphorIconsRegular.armchair, + 'arrowArcLeft': PhosphorIconsRegular.arrowArcLeft, + 'arrowArcRight': PhosphorIconsRegular.arrowArcRight, + 'arrowBendDoubleUpLeft': PhosphorIconsRegular.arrowBendDoubleUpLeft, + 'arrowBendDoubleUpRight': PhosphorIconsRegular.arrowBendDoubleUpRight, + 'arrowBendDownLeft': PhosphorIconsRegular.arrowBendDownLeft, + 'arrowBendDownRight': PhosphorIconsRegular.arrowBendDownRight, + 'arrowBendLeftDown': PhosphorIconsRegular.arrowBendLeftDown, + 'arrowBendLeftUp': PhosphorIconsRegular.arrowBendLeftUp, + 'arrowBendRightDown': PhosphorIconsRegular.arrowBendRightDown, + 'arrowBendRightUp': PhosphorIconsRegular.arrowBendRightUp, + 'arrowBendUpLeft': PhosphorIconsRegular.arrowBendUpLeft, + 'arrowBendUpRight': PhosphorIconsRegular.arrowBendUpRight, + 'arrowCircleDown': PhosphorIconsRegular.arrowCircleDown, + 'arrowCircleDownLeft': PhosphorIconsRegular.arrowCircleDownLeft, + 'arrowCircleDownRight': PhosphorIconsRegular.arrowCircleDownRight, + 'arrowCircleLeft': PhosphorIconsRegular.arrowCircleLeft, + 'arrowCircleRight': PhosphorIconsRegular.arrowCircleRight, + 'arrowCircleUp': PhosphorIconsRegular.arrowCircleUp, + 'arrowCircleUpLeft': PhosphorIconsRegular.arrowCircleUpLeft, + 'arrowCircleUpRight': PhosphorIconsRegular.arrowCircleUpRight, + 'arrowClockwise': PhosphorIconsRegular.arrowClockwise, + 'arrowCounterClockwise': PhosphorIconsRegular.arrowCounterClockwise, + 'arrowDown': PhosphorIconsRegular.arrowDown, + 'arrowDownLeft': PhosphorIconsRegular.arrowDownLeft, + 'arrowDownRight': PhosphorIconsRegular.arrowDownRight, + 'arrowElbowDownLeft': PhosphorIconsRegular.arrowElbowDownLeft, + 'arrowElbowDownRight': PhosphorIconsRegular.arrowElbowDownRight, + 'arrowElbowLeft': PhosphorIconsRegular.arrowElbowLeft, + 'arrowElbowLeftDown': PhosphorIconsRegular.arrowElbowLeftDown, + 'arrowElbowLeftUp': PhosphorIconsRegular.arrowElbowLeftUp, + 'arrowElbowRight': PhosphorIconsRegular.arrowElbowRight, + 'arrowElbowRightDown': PhosphorIconsRegular.arrowElbowRightDown, + 'arrowElbowRightUp': PhosphorIconsRegular.arrowElbowRightUp, + 'arrowElbowUpLeft': PhosphorIconsRegular.arrowElbowUpLeft, + 'arrowElbowUpRight': PhosphorIconsRegular.arrowElbowUpRight, + 'arrowFatDown': PhosphorIconsRegular.arrowFatDown, + 'arrowFatLeft': PhosphorIconsRegular.arrowFatLeft, + 'arrowFatLineDown': PhosphorIconsRegular.arrowFatLineDown, + 'arrowFatLineLeft': PhosphorIconsRegular.arrowFatLineLeft, + 'arrowFatLineRight': PhosphorIconsRegular.arrowFatLineRight, + 'arrowFatLineUp': PhosphorIconsRegular.arrowFatLineUp, + 'arrowFatLinesDown': PhosphorIconsRegular.arrowFatLinesDown, + 'arrowFatLinesLeft': PhosphorIconsRegular.arrowFatLinesLeft, + 'arrowFatLinesRight': PhosphorIconsRegular.arrowFatLinesRight, + 'arrowFatLinesUp': PhosphorIconsRegular.arrowFatLinesUp, + 'arrowFatRight': PhosphorIconsRegular.arrowFatRight, + 'arrowFatUp': PhosphorIconsRegular.arrowFatUp, + 'arrowLeft': PhosphorIconsRegular.arrowLeft, + 'arrowLineDown': PhosphorIconsRegular.arrowLineDown, + 'arrowLineDownLeft': PhosphorIconsRegular.arrowLineDownLeft, + 'arrowLineDownRight': PhosphorIconsRegular.arrowLineDownRight, + 'arrowLineLeft': PhosphorIconsRegular.arrowLineLeft, + 'arrowLineRight': PhosphorIconsRegular.arrowLineRight, + 'arrowLineUp': PhosphorIconsRegular.arrowLineUp, + 'arrowLineUpLeft': PhosphorIconsRegular.arrowLineUpLeft, + 'arrowLineUpRight': PhosphorIconsRegular.arrowLineUpRight, + 'arrowRight': PhosphorIconsRegular.arrowRight, + 'arrowSquareDown': PhosphorIconsRegular.arrowSquareDown, + 'arrowSquareDownLeft': PhosphorIconsRegular.arrowSquareDownLeft, + 'arrowSquareDownRight': PhosphorIconsRegular.arrowSquareDownRight, + 'arrowSquareIn': PhosphorIconsRegular.arrowSquareIn, + 'arrowSquareLeft': PhosphorIconsRegular.arrowSquareLeft, + 'arrowSquareOut': PhosphorIconsRegular.arrowSquareOut, + 'arrowSquareRight': PhosphorIconsRegular.arrowSquareRight, + 'arrowSquareUp': PhosphorIconsRegular.arrowSquareUp, + 'arrowSquareUpLeft': PhosphorIconsRegular.arrowSquareUpLeft, + 'arrowSquareUpRight': PhosphorIconsRegular.arrowSquareUpRight, + 'arrowUDownLeft': PhosphorIconsRegular.arrowUDownLeft, + 'arrowUDownRight': PhosphorIconsRegular.arrowUDownRight, + 'arrowULeftDown': PhosphorIconsRegular.arrowULeftDown, + 'arrowULeftUp': PhosphorIconsRegular.arrowULeftUp, + 'arrowURightDown': PhosphorIconsRegular.arrowURightDown, + 'arrowURightUp': PhosphorIconsRegular.arrowURightUp, + 'arrowUUpLeft': PhosphorIconsRegular.arrowUUpLeft, + 'arrowUUpRight': PhosphorIconsRegular.arrowUUpRight, + 'arrowUp': PhosphorIconsRegular.arrowUp, + 'arrowUpLeft': PhosphorIconsRegular.arrowUpLeft, + 'arrowUpRight': PhosphorIconsRegular.arrowUpRight, + 'arrowsClockwise': PhosphorIconsRegular.arrowsClockwise, + 'arrowsCounterClockwise': PhosphorIconsRegular.arrowsCounterClockwise, + 'arrowsDownUp': PhosphorIconsRegular.arrowsDownUp, + 'arrowsHorizontal': PhosphorIconsRegular.arrowsHorizontal, + 'arrowsIn': PhosphorIconsRegular.arrowsIn, + 'arrowsInCardinal': PhosphorIconsRegular.arrowsInCardinal, + 'arrowsInLineHorizontal': PhosphorIconsRegular.arrowsInLineHorizontal, + 'arrowsInLineVertical': PhosphorIconsRegular.arrowsInLineVertical, + 'arrowsInSimple': PhosphorIconsRegular.arrowsInSimple, + 'arrowsLeftRight': PhosphorIconsRegular.arrowsLeftRight, + 'arrowsMerge': PhosphorIconsRegular.arrowsMerge, + 'arrowsOut': PhosphorIconsRegular.arrowsOut, + 'arrowsOutCardinal': PhosphorIconsRegular.arrowsOutCardinal, + 'arrowsOutLineHorizontal': PhosphorIconsRegular.arrowsOutLineHorizontal, + 'arrowsOutLineVertical': PhosphorIconsRegular.arrowsOutLineVertical, + 'arrowsOutSimple': PhosphorIconsRegular.arrowsOutSimple, + 'arrowsSplit': PhosphorIconsRegular.arrowsSplit, + 'arrowsVertical': PhosphorIconsRegular.arrowsVertical, + 'article': PhosphorIconsRegular.article, + 'articleMedium': PhosphorIconsRegular.articleMedium, + 'articleNyTimes': PhosphorIconsRegular.articleNyTimes, + 'asclepius': PhosphorIconsRegular.asclepius, + 'asterisk': PhosphorIconsRegular.asterisk, + 'asteriskSimple': PhosphorIconsRegular.asteriskSimple, + 'at': PhosphorIconsRegular.at, + 'atom': PhosphorIconsRegular.atom, + 'avocado': PhosphorIconsRegular.avocado, + 'axe': PhosphorIconsRegular.axe, + 'baby': PhosphorIconsRegular.baby, + 'babyCarriage': PhosphorIconsRegular.babyCarriage, + 'backpack': PhosphorIconsRegular.backpack, + 'backspace': PhosphorIconsRegular.backspace, + 'bag': PhosphorIconsRegular.bag, + 'bagSimple': PhosphorIconsRegular.bagSimple, + 'balloon': PhosphorIconsRegular.balloon, + 'bandaids': PhosphorIconsRegular.bandaids, + 'bank': PhosphorIconsRegular.bank, + 'barbell': PhosphorIconsRegular.barbell, + 'barcode': PhosphorIconsRegular.barcode, + 'barn': PhosphorIconsRegular.barn, + 'barricade': PhosphorIconsRegular.barricade, + 'baseball': PhosphorIconsRegular.baseball, + 'baseballCap': PhosphorIconsRegular.baseballCap, + 'baseballHelmet': PhosphorIconsRegular.baseballHelmet, + 'basket': PhosphorIconsRegular.basket, + 'basketball': PhosphorIconsRegular.basketball, + 'bathtub': PhosphorIconsRegular.bathtub, + 'batteryCharging': PhosphorIconsRegular.batteryCharging, + 'batteryChargingVertical': PhosphorIconsRegular.batteryChargingVertical, + 'batteryEmpty': PhosphorIconsRegular.batteryEmpty, + 'batteryFull': PhosphorIconsRegular.batteryFull, + 'batteryHigh': PhosphorIconsRegular.batteryHigh, + 'batteryLow': PhosphorIconsRegular.batteryLow, + 'batteryMedium': PhosphorIconsRegular.batteryMedium, + 'batteryPlus': PhosphorIconsRegular.batteryPlus, + 'batteryPlusVertical': PhosphorIconsRegular.batteryPlusVertical, + 'batteryVerticalEmpty': PhosphorIconsRegular.batteryVerticalEmpty, + 'batteryVerticalFull': PhosphorIconsRegular.batteryVerticalFull, + 'batteryVerticalHigh': PhosphorIconsRegular.batteryVerticalHigh, + 'batteryVerticalLow': PhosphorIconsRegular.batteryVerticalLow, + 'batteryVerticalMedium': PhosphorIconsRegular.batteryVerticalMedium, + 'batteryWarning': PhosphorIconsRegular.batteryWarning, + 'batteryWarningVertical': PhosphorIconsRegular.batteryWarningVertical, + 'beachBall': PhosphorIconsRegular.beachBall, + 'beanie': PhosphorIconsRegular.beanie, + 'bed': PhosphorIconsRegular.bed, + 'beerBottle': PhosphorIconsRegular.beerBottle, + 'beerStein': PhosphorIconsRegular.beerStein, + 'behanceLogo': PhosphorIconsRegular.behanceLogo, + 'bell': PhosphorIconsRegular.bell, + 'bellRinging': PhosphorIconsRegular.bellRinging, + 'bellSimple': PhosphorIconsRegular.bellSimple, + 'bellSimpleRinging': PhosphorIconsRegular.bellSimpleRinging, + 'bellSimpleSlash': PhosphorIconsRegular.bellSimpleSlash, + 'bellSimpleZ': PhosphorIconsRegular.bellSimpleZ, + 'bellSlash': PhosphorIconsRegular.bellSlash, + 'bellZ': PhosphorIconsRegular.bellZ, + 'belt': PhosphorIconsRegular.belt, + 'bezierCurve': PhosphorIconsRegular.bezierCurve, + 'bicycle': PhosphorIconsRegular.bicycle, + 'binary': PhosphorIconsRegular.binary, + 'binoculars': PhosphorIconsRegular.binoculars, + 'biohazard': PhosphorIconsRegular.biohazard, + 'bird': PhosphorIconsRegular.bird, + 'blueprint': PhosphorIconsRegular.blueprint, + 'bluetooth': PhosphorIconsRegular.bluetooth, + 'bluetoothConnected': PhosphorIconsRegular.bluetoothConnected, + 'bluetoothSlash': PhosphorIconsRegular.bluetoothSlash, + 'bluetoothX': PhosphorIconsRegular.bluetoothX, + 'boat': PhosphorIconsRegular.boat, + 'bomb': PhosphorIconsRegular.bomb, + 'bone': PhosphorIconsRegular.bone, + 'book': PhosphorIconsRegular.book, + 'bookBookmark': PhosphorIconsRegular.bookBookmark, + 'bookOpen': PhosphorIconsRegular.bookOpen, + 'bookOpenText': PhosphorIconsRegular.bookOpenText, + 'bookOpenUser': PhosphorIconsRegular.bookOpenUser, + 'bookmark': PhosphorIconsRegular.bookmark, + 'bookmarkSimple': PhosphorIconsRegular.bookmarkSimple, + 'bookmarks': PhosphorIconsRegular.bookmarks, + 'bookmarksSimple': PhosphorIconsRegular.bookmarksSimple, + 'books': PhosphorIconsRegular.books, + 'boot': PhosphorIconsRegular.boot, + 'boules': PhosphorIconsRegular.boules, + 'boundingBox': PhosphorIconsRegular.boundingBox, + 'bowlFood': PhosphorIconsRegular.bowlFood, + 'bowlSteam': PhosphorIconsRegular.bowlSteam, + 'bowlingBall': PhosphorIconsRegular.bowlingBall, + 'boxArrowDown': PhosphorIconsRegular.boxArrowDown, + 'boxArrowUp': PhosphorIconsRegular.boxArrowUp, + 'boxingGlove': PhosphorIconsRegular.boxingGlove, + 'bracketsAngle': PhosphorIconsRegular.bracketsAngle, + 'bracketsCurly': PhosphorIconsRegular.bracketsCurly, + 'bracketsRound': PhosphorIconsRegular.bracketsRound, + 'bracketsSquare': PhosphorIconsRegular.bracketsSquare, + 'brain': PhosphorIconsRegular.brain, + 'brandy': PhosphorIconsRegular.brandy, + 'bread': PhosphorIconsRegular.bread, + 'bridge': PhosphorIconsRegular.bridge, + 'briefcase': PhosphorIconsRegular.briefcase, + 'briefcaseMetal': PhosphorIconsRegular.briefcaseMetal, + 'broadcast': PhosphorIconsRegular.broadcast, + 'broom': PhosphorIconsRegular.broom, + 'browser': PhosphorIconsRegular.browser, + 'browsers': PhosphorIconsRegular.browsers, + 'bug': PhosphorIconsRegular.bug, + 'bugBeetle': PhosphorIconsRegular.bugBeetle, + 'bugDroid': PhosphorIconsRegular.bugDroid, + 'building': PhosphorIconsRegular.building, + 'buildingApartment': PhosphorIconsRegular.buildingApartment, + 'buildingOffice': PhosphorIconsRegular.buildingOffice, + 'buildings': PhosphorIconsRegular.buildings, + 'bulldozer': PhosphorIconsRegular.bulldozer, + 'bus': PhosphorIconsRegular.bus, + 'butterfly': PhosphorIconsRegular.butterfly, + 'cableCar': PhosphorIconsRegular.cableCar, + 'cactus': PhosphorIconsRegular.cactus, + 'cake': PhosphorIconsRegular.cake, + 'calculator': PhosphorIconsRegular.calculator, + 'calendar': PhosphorIconsRegular.calendar, + 'calendarBlank': PhosphorIconsRegular.calendarBlank, + 'calendarCheck': PhosphorIconsRegular.calendarCheck, + 'calendarDot': PhosphorIconsRegular.calendarDot, + 'calendarDots': PhosphorIconsRegular.calendarDots, + 'calendarHeart': PhosphorIconsRegular.calendarHeart, + 'calendarMinus': PhosphorIconsRegular.calendarMinus, + 'calendarPlus': PhosphorIconsRegular.calendarPlus, + 'calendarSlash': PhosphorIconsRegular.calendarSlash, + 'calendarStar': PhosphorIconsRegular.calendarStar, + 'calendarX': PhosphorIconsRegular.calendarX, + 'callBell': PhosphorIconsRegular.callBell, + 'camera': PhosphorIconsRegular.camera, + 'cameraPlus': PhosphorIconsRegular.cameraPlus, + 'cameraRotate': PhosphorIconsRegular.cameraRotate, + 'cameraSlash': PhosphorIconsRegular.cameraSlash, + 'campfire': PhosphorIconsRegular.campfire, + 'car': PhosphorIconsRegular.car, + 'carBattery': PhosphorIconsRegular.carBattery, + 'carProfile': PhosphorIconsRegular.carProfile, + 'carSimple': PhosphorIconsRegular.carSimple, + 'cardholder': PhosphorIconsRegular.cardholder, + 'cards': PhosphorIconsRegular.cards, + 'cardsThree': PhosphorIconsRegular.cardsThree, + 'caretCircleDoubleDown': PhosphorIconsRegular.caretCircleDoubleDown, + 'caretCircleDoubleLeft': PhosphorIconsRegular.caretCircleDoubleLeft, + 'caretCircleDoubleRight': PhosphorIconsRegular.caretCircleDoubleRight, + 'caretCircleDoubleUp': PhosphorIconsRegular.caretCircleDoubleUp, + 'caretCircleDown': PhosphorIconsRegular.caretCircleDown, + 'caretCircleLeft': PhosphorIconsRegular.caretCircleLeft, + 'caretCircleRight': PhosphorIconsRegular.caretCircleRight, + 'caretCircleUp': PhosphorIconsRegular.caretCircleUp, + 'caretCircleUpDown': PhosphorIconsRegular.caretCircleUpDown, + 'caretDoubleDown': PhosphorIconsRegular.caretDoubleDown, + 'caretDoubleLeft': PhosphorIconsRegular.caretDoubleLeft, + 'caretDoubleRight': PhosphorIconsRegular.caretDoubleRight, + 'caretDoubleUp': PhosphorIconsRegular.caretDoubleUp, + 'caretDown': PhosphorIconsRegular.caretDown, + 'caretLeft': PhosphorIconsRegular.caretLeft, + 'caretLineDown': PhosphorIconsRegular.caretLineDown, + 'caretLineLeft': PhosphorIconsRegular.caretLineLeft, + 'caretLineRight': PhosphorIconsRegular.caretLineRight, + 'caretLineUp': PhosphorIconsRegular.caretLineUp, + 'caretRight': PhosphorIconsRegular.caretRight, + 'caretUp': PhosphorIconsRegular.caretUp, + 'caretUpDown': PhosphorIconsRegular.caretUpDown, + 'carrot': PhosphorIconsRegular.carrot, + 'cashRegister': PhosphorIconsRegular.cashRegister, + 'cassetteTape': PhosphorIconsRegular.cassetteTape, + 'castleTurret': PhosphorIconsRegular.castleTurret, + 'cat': PhosphorIconsRegular.cat, + 'cellSignalFull': PhosphorIconsRegular.cellSignalFull, + 'cellSignalHigh': PhosphorIconsRegular.cellSignalHigh, + 'cellSignalLow': PhosphorIconsRegular.cellSignalLow, + 'cellSignalMedium': PhosphorIconsRegular.cellSignalMedium, + 'cellSignalNone': PhosphorIconsRegular.cellSignalNone, + 'cellSignalSlash': PhosphorIconsRegular.cellSignalSlash, + 'cellSignalX': PhosphorIconsRegular.cellSignalX, + 'cellTower': PhosphorIconsRegular.cellTower, + 'certificate': PhosphorIconsRegular.certificate, + 'chair': PhosphorIconsRegular.chair, + 'chalkboard': PhosphorIconsRegular.chalkboard, + 'chalkboardSimple': PhosphorIconsRegular.chalkboardSimple, + 'chalkboardTeacher': PhosphorIconsRegular.chalkboardTeacher, + 'champagne': PhosphorIconsRegular.champagne, + 'chargingStation': PhosphorIconsRegular.chargingStation, + 'chartBar': PhosphorIconsRegular.chartBar, + 'chartBarHorizontal': PhosphorIconsRegular.chartBarHorizontal, + 'chartDonut': PhosphorIconsRegular.chartDonut, + 'chartLine': PhosphorIconsRegular.chartLine, + 'chartLineDown': PhosphorIconsRegular.chartLineDown, + 'chartLineUp': PhosphorIconsRegular.chartLineUp, + 'chartPie': PhosphorIconsRegular.chartPie, + 'chartPieSlice': PhosphorIconsRegular.chartPieSlice, + 'chartPolar': PhosphorIconsRegular.chartPolar, + 'chartScatter': PhosphorIconsRegular.chartScatter, + 'chat': PhosphorIconsRegular.chat, + 'chatCentered': PhosphorIconsRegular.chatCentered, + 'chatCenteredDots': PhosphorIconsRegular.chatCenteredDots, + 'chatCenteredSlash': PhosphorIconsRegular.chatCenteredSlash, + 'chatCenteredText': PhosphorIconsRegular.chatCenteredText, + 'chatCircle': PhosphorIconsRegular.chatCircle, + 'chatCircleDots': PhosphorIconsRegular.chatCircleDots, + 'chatCircleSlash': PhosphorIconsRegular.chatCircleSlash, + 'chatCircleText': PhosphorIconsRegular.chatCircleText, + 'chatDots': PhosphorIconsRegular.chatDots, + 'chatSlash': PhosphorIconsRegular.chatSlash, + 'chatTeardrop': PhosphorIconsRegular.chatTeardrop, + 'chatTeardropDots': PhosphorIconsRegular.chatTeardropDots, + 'chatTeardropSlash': PhosphorIconsRegular.chatTeardropSlash, + 'chatTeardropText': PhosphorIconsRegular.chatTeardropText, + 'chatText': PhosphorIconsRegular.chatText, + 'chats': PhosphorIconsRegular.chats, + 'chatsCircle': PhosphorIconsRegular.chatsCircle, + 'chatsTeardrop': PhosphorIconsRegular.chatsTeardrop, + 'check': PhosphorIconsRegular.check, + 'checkCircle': PhosphorIconsRegular.checkCircle, + 'checkFat': PhosphorIconsRegular.checkFat, + 'checkSquare': PhosphorIconsRegular.checkSquare, + 'checkSquareOffset': PhosphorIconsRegular.checkSquareOffset, + 'checkerboard': PhosphorIconsRegular.checkerboard, + 'checks': PhosphorIconsRegular.checks, + 'cheers': PhosphorIconsRegular.cheers, + 'cheese': PhosphorIconsRegular.cheese, + 'chefHat': PhosphorIconsRegular.chefHat, + 'cherries': PhosphorIconsRegular.cherries, + 'church': PhosphorIconsRegular.church, + 'cigarette': PhosphorIconsRegular.cigarette, + 'cigaretteSlash': PhosphorIconsRegular.cigaretteSlash, + 'circle': PhosphorIconsRegular.circle, + 'circleDashed': PhosphorIconsRegular.circleDashed, + 'circleHalf': PhosphorIconsRegular.circleHalf, + 'circleHalfTilt': PhosphorIconsRegular.circleHalfTilt, + 'circleNotch': PhosphorIconsRegular.circleNotch, + 'circlesFour': PhosphorIconsRegular.circlesFour, + 'circlesThree': PhosphorIconsRegular.circlesThree, + 'circlesThreePlus': PhosphorIconsRegular.circlesThreePlus, + 'circuitry': PhosphorIconsRegular.circuitry, + 'city': PhosphorIconsRegular.city, + 'clipboard': PhosphorIconsRegular.clipboard, + 'clipboardText': PhosphorIconsRegular.clipboardText, + 'clock': PhosphorIconsRegular.clock, + 'clockAfternoon': PhosphorIconsRegular.clockAfternoon, + 'clockClockwise': PhosphorIconsRegular.clockClockwise, + 'clockCountdown': PhosphorIconsRegular.clockCountdown, + 'clockCounterClockwise': PhosphorIconsRegular.clockCounterClockwise, + 'clockUser': PhosphorIconsRegular.clockUser, + 'closedCaptioning': PhosphorIconsRegular.closedCaptioning, + 'cloud': PhosphorIconsRegular.cloud, + 'cloudArrowDown': PhosphorIconsRegular.cloudArrowDown, + 'cloudArrowUp': PhosphorIconsRegular.cloudArrowUp, + 'cloudCheck': PhosphorIconsRegular.cloudCheck, + 'cloudFog': PhosphorIconsRegular.cloudFog, + 'cloudLightning': PhosphorIconsRegular.cloudLightning, + 'cloudMoon': PhosphorIconsRegular.cloudMoon, + 'cloudRain': PhosphorIconsRegular.cloudRain, + 'cloudSlash': PhosphorIconsRegular.cloudSlash, + 'cloudSun': PhosphorIconsRegular.cloudSun, + 'cloudWarning': PhosphorIconsRegular.cloudWarning, + 'cloudX': PhosphorIconsRegular.cloudX, + 'clover': PhosphorIconsRegular.clover, + 'club': PhosphorIconsRegular.club, + 'coatHanger': PhosphorIconsRegular.coatHanger, + 'codaLogo': PhosphorIconsRegular.codaLogo, + 'code': PhosphorIconsRegular.code, + 'codeBlock': PhosphorIconsRegular.codeBlock, + 'codeSimple': PhosphorIconsRegular.codeSimple, + 'codepenLogo': PhosphorIconsRegular.codepenLogo, + 'codesandboxLogo': PhosphorIconsRegular.codesandboxLogo, + 'coffee': PhosphorIconsRegular.coffee, + 'coffeeBean': PhosphorIconsRegular.coffeeBean, + 'coin': PhosphorIconsRegular.coin, + 'coinVertical': PhosphorIconsRegular.coinVertical, + 'coins': PhosphorIconsRegular.coins, + 'columns': PhosphorIconsRegular.columns, + 'columnsPlusLeft': PhosphorIconsRegular.columnsPlusLeft, + 'columnsPlusRight': PhosphorIconsRegular.columnsPlusRight, + 'command': PhosphorIconsRegular.command, + 'compass': PhosphorIconsRegular.compass, + 'compassRose': PhosphorIconsRegular.compassRose, + 'compassTool': PhosphorIconsRegular.compassTool, + 'computerTower': PhosphorIconsRegular.computerTower, + 'confetti': PhosphorIconsRegular.confetti, + 'contactlessPayment': PhosphorIconsRegular.contactlessPayment, + 'control': PhosphorIconsRegular.control, + 'cookie': PhosphorIconsRegular.cookie, + 'cookingPot': PhosphorIconsRegular.cookingPot, + 'copy': PhosphorIconsRegular.copy, + 'copySimple': PhosphorIconsRegular.copySimple, + 'copyleft': PhosphorIconsRegular.copyleft, + 'copyright': PhosphorIconsRegular.copyright, + 'cornersIn': PhosphorIconsRegular.cornersIn, + 'cornersOut': PhosphorIconsRegular.cornersOut, + 'couch': PhosphorIconsRegular.couch, + 'courtBasketball': PhosphorIconsRegular.courtBasketball, + 'cow': PhosphorIconsRegular.cow, + 'cowboyHat': PhosphorIconsRegular.cowboyHat, + 'cpu': PhosphorIconsRegular.cpu, + 'crane': PhosphorIconsRegular.crane, + 'craneTower': PhosphorIconsRegular.craneTower, + 'creditCard': PhosphorIconsRegular.creditCard, + 'cricket': PhosphorIconsRegular.cricket, + 'crop': PhosphorIconsRegular.crop, + 'cross': PhosphorIconsRegular.cross, + 'crosshair': PhosphorIconsRegular.crosshair, + 'crosshairSimple': PhosphorIconsRegular.crosshairSimple, + 'crown': PhosphorIconsRegular.crown, + 'crownCross': PhosphorIconsRegular.crownCross, + 'crownSimple': PhosphorIconsRegular.crownSimple, + 'cube': PhosphorIconsRegular.cube, + 'cubeFocus': PhosphorIconsRegular.cubeFocus, + 'cubeTransparent': PhosphorIconsRegular.cubeTransparent, + 'currencyBtc': PhosphorIconsRegular.currencyBtc, + 'currencyCircleDollar': PhosphorIconsRegular.currencyCircleDollar, + 'currencyCny': PhosphorIconsRegular.currencyCny, + 'currencyDollar': PhosphorIconsRegular.currencyDollar, + 'currencyDollarSimple': PhosphorIconsRegular.currencyDollarSimple, + 'currencyEth': PhosphorIconsRegular.currencyEth, + 'currencyEur': PhosphorIconsRegular.currencyEur, + 'currencyGbp': PhosphorIconsRegular.currencyGbp, + 'currencyInr': PhosphorIconsRegular.currencyInr, + 'currencyJpy': PhosphorIconsRegular.currencyJpy, + 'currencyKrw': PhosphorIconsRegular.currencyKrw, + 'currencyKzt': PhosphorIconsRegular.currencyKzt, + 'currencyNgn': PhosphorIconsRegular.currencyNgn, + 'currencyRub': PhosphorIconsRegular.currencyRub, + 'cursor': PhosphorIconsRegular.cursor, + 'cursorClick': PhosphorIconsRegular.cursorClick, + 'cursorText': PhosphorIconsRegular.cursorText, + 'cylinder': PhosphorIconsRegular.cylinder, + 'database': PhosphorIconsRegular.database, + 'desk': PhosphorIconsRegular.desk, + 'desktop': PhosphorIconsRegular.desktop, + 'desktopTower': PhosphorIconsRegular.desktopTower, + 'detective': PhosphorIconsRegular.detective, + 'devToLogo': PhosphorIconsRegular.devToLogo, + 'deviceMobile': PhosphorIconsRegular.deviceMobile, + 'deviceMobileCamera': PhosphorIconsRegular.deviceMobileCamera, + 'deviceMobileSlash': PhosphorIconsRegular.deviceMobileSlash, + 'deviceMobileSpeaker': PhosphorIconsRegular.deviceMobileSpeaker, + 'deviceRotate': PhosphorIconsRegular.deviceRotate, + 'deviceTablet': PhosphorIconsRegular.deviceTablet, + 'deviceTabletCamera': PhosphorIconsRegular.deviceTabletCamera, + 'deviceTabletSpeaker': PhosphorIconsRegular.deviceTabletSpeaker, + 'devices': PhosphorIconsRegular.devices, + 'diamond': PhosphorIconsRegular.diamond, + 'diamondsFour': PhosphorIconsRegular.diamondsFour, + 'diceFive': PhosphorIconsRegular.diceFive, + 'diceFour': PhosphorIconsRegular.diceFour, + 'diceOne': PhosphorIconsRegular.diceOne, + 'diceSix': PhosphorIconsRegular.diceSix, + 'diceThree': PhosphorIconsRegular.diceThree, + 'diceTwo': PhosphorIconsRegular.diceTwo, + 'disc': PhosphorIconsRegular.disc, + 'discoBall': PhosphorIconsRegular.discoBall, + 'discordLogo': PhosphorIconsRegular.discordLogo, + 'divide': PhosphorIconsRegular.divide, + 'dna': PhosphorIconsRegular.dna, + 'dog': PhosphorIconsRegular.dog, + 'door': PhosphorIconsRegular.door, + 'doorOpen': PhosphorIconsRegular.doorOpen, + 'dot': PhosphorIconsRegular.dot, + 'dotOutline': PhosphorIconsRegular.dotOutline, + 'dotsNine': PhosphorIconsRegular.dotsNine, + 'dotsSix': PhosphorIconsRegular.dotsSix, + 'dotsSixVertical': PhosphorIconsRegular.dotsSixVertical, + 'dotsThree': PhosphorIconsRegular.dotsThree, + 'dotsThreeCircle': PhosphorIconsRegular.dotsThreeCircle, + 'dotsThreeCircleVertical': PhosphorIconsRegular.dotsThreeCircleVertical, + 'dotsThreeOutline': PhosphorIconsRegular.dotsThreeOutline, + 'dotsThreeOutlineVertical': PhosphorIconsRegular.dotsThreeOutlineVertical, + 'dotsThreeVertical': PhosphorIconsRegular.dotsThreeVertical, + 'download': PhosphorIconsRegular.download, + 'downloadSimple': PhosphorIconsRegular.downloadSimple, + 'dress': PhosphorIconsRegular.dress, + 'dresser': PhosphorIconsRegular.dresser, + 'dribbbleLogo': PhosphorIconsRegular.dribbbleLogo, + 'drone': PhosphorIconsRegular.drone, + 'drop': PhosphorIconsRegular.drop, + 'dropHalf': PhosphorIconsRegular.dropHalf, + 'dropHalfBottom': PhosphorIconsRegular.dropHalfBottom, + 'dropSimple': PhosphorIconsRegular.dropSimple, + 'dropSlash': PhosphorIconsRegular.dropSlash, + 'dropboxLogo': PhosphorIconsRegular.dropboxLogo, + 'ear': PhosphorIconsRegular.ear, + 'earSlash': PhosphorIconsRegular.earSlash, + 'egg': PhosphorIconsRegular.egg, + 'eggCrack': PhosphorIconsRegular.eggCrack, + 'eject': PhosphorIconsRegular.eject, + 'ejectSimple': PhosphorIconsRegular.ejectSimple, + 'elevator': PhosphorIconsRegular.elevator, + 'empty': PhosphorIconsRegular.empty, + 'engine': PhosphorIconsRegular.engine, + 'envelope': PhosphorIconsRegular.envelope, + 'envelopeOpen': PhosphorIconsRegular.envelopeOpen, + 'envelopeSimple': PhosphorIconsRegular.envelopeSimple, + 'envelopeSimpleOpen': PhosphorIconsRegular.envelopeSimpleOpen, + 'equalizer': PhosphorIconsRegular.equalizer, + 'equals': PhosphorIconsRegular.equals, + 'eraser': PhosphorIconsRegular.eraser, + 'escalatorDown': PhosphorIconsRegular.escalatorDown, + 'escalatorUp': PhosphorIconsRegular.escalatorUp, + 'exam': PhosphorIconsRegular.exam, + 'exclamationMark': PhosphorIconsRegular.exclamationMark, + 'exclude': PhosphorIconsRegular.exclude, + 'excludeSquare': PhosphorIconsRegular.excludeSquare, + 'export': PhosphorIconsRegular.export, + 'eye': PhosphorIconsRegular.eye, + 'eyeClosed': PhosphorIconsRegular.eyeClosed, + 'eyeSlash': PhosphorIconsRegular.eyeSlash, + 'eyedropper': PhosphorIconsRegular.eyedropper, + 'eyedropperSample': PhosphorIconsRegular.eyedropperSample, + 'eyeglasses': PhosphorIconsRegular.eyeglasses, + 'eyes': PhosphorIconsRegular.eyes, + 'faceMask': PhosphorIconsRegular.faceMask, + 'facebookLogo': PhosphorIconsRegular.facebookLogo, + 'factory': PhosphorIconsRegular.factory, + 'faders': PhosphorIconsRegular.faders, + 'fadersHorizontal': PhosphorIconsRegular.fadersHorizontal, + 'falloutShelter': PhosphorIconsRegular.falloutShelter, + 'fan': PhosphorIconsRegular.fan, + 'farm': PhosphorIconsRegular.farm, + 'fastForward': PhosphorIconsRegular.fastForward, + 'fastForwardCircle': PhosphorIconsRegular.fastForwardCircle, + 'feather': PhosphorIconsRegular.feather, + 'fediverseLogo': PhosphorIconsRegular.fediverseLogo, + 'figmaLogo': PhosphorIconsRegular.figmaLogo, + 'file': PhosphorIconsRegular.file, + 'fileArchive': PhosphorIconsRegular.fileArchive, + 'fileArrowDown': PhosphorIconsRegular.fileArrowDown, + 'fileArrowUp': PhosphorIconsRegular.fileArrowUp, + 'fileAudio': PhosphorIconsRegular.fileAudio, + 'fileC': PhosphorIconsRegular.fileC, + 'fileCSharp': PhosphorIconsRegular.fileCSharp, + 'fileCloud': PhosphorIconsRegular.fileCloud, + 'fileCode': PhosphorIconsRegular.fileCode, + 'fileCpp': PhosphorIconsRegular.fileCpp, + 'fileCss': PhosphorIconsRegular.fileCss, + 'fileCsv': PhosphorIconsRegular.fileCsv, + 'fileDashed': PhosphorIconsRegular.fileDashed, + 'fileDoc': PhosphorIconsRegular.fileDoc, + 'fileHtml': PhosphorIconsRegular.fileHtml, + 'fileImage': PhosphorIconsRegular.fileImage, + 'fileIni': PhosphorIconsRegular.fileIni, + 'fileJpg': PhosphorIconsRegular.fileJpg, + 'fileJs': PhosphorIconsRegular.fileJs, + 'fileJsx': PhosphorIconsRegular.fileJsx, + 'fileLock': PhosphorIconsRegular.fileLock, + 'fileMagnifyingGlass': PhosphorIconsRegular.fileMagnifyingGlass, + 'fileMd': PhosphorIconsRegular.fileMd, + 'fileMinus': PhosphorIconsRegular.fileMinus, + 'filePdf': PhosphorIconsRegular.filePdf, + 'filePlus': PhosphorIconsRegular.filePlus, + 'filePng': PhosphorIconsRegular.filePng, + 'filePpt': PhosphorIconsRegular.filePpt, + 'filePy': PhosphorIconsRegular.filePy, + 'fileRs': PhosphorIconsRegular.fileRs, + 'fileSql': PhosphorIconsRegular.fileSql, + 'fileSvg': PhosphorIconsRegular.fileSvg, + 'fileText': PhosphorIconsRegular.fileText, + 'fileTs': PhosphorIconsRegular.fileTs, + 'fileTsx': PhosphorIconsRegular.fileTsx, + 'fileTxt': PhosphorIconsRegular.fileTxt, + 'fileVideo': PhosphorIconsRegular.fileVideo, + 'fileVue': PhosphorIconsRegular.fileVue, + 'fileX': PhosphorIconsRegular.fileX, + 'fileXls': PhosphorIconsRegular.fileXls, + 'fileZip': PhosphorIconsRegular.fileZip, + 'files': PhosphorIconsRegular.files, + 'filmReel': PhosphorIconsRegular.filmReel, + 'filmScript': PhosphorIconsRegular.filmScript, + 'filmSlate': PhosphorIconsRegular.filmSlate, + 'filmStrip': PhosphorIconsRegular.filmStrip, + 'fingerprint': PhosphorIconsRegular.fingerprint, + 'fingerprintSimple': PhosphorIconsRegular.fingerprintSimple, + 'finnTheHuman': PhosphorIconsRegular.finnTheHuman, + 'fire': PhosphorIconsRegular.fire, + 'fireExtinguisher': PhosphorIconsRegular.fireExtinguisher, + 'fireSimple': PhosphorIconsRegular.fireSimple, + 'fireTruck': PhosphorIconsRegular.fireTruck, + 'firstAid': PhosphorIconsRegular.firstAid, + 'firstAidKit': PhosphorIconsRegular.firstAidKit, + 'fish': PhosphorIconsRegular.fish, + 'fishSimple': PhosphorIconsRegular.fishSimple, + 'flag': PhosphorIconsRegular.flag, + 'flagBanner': PhosphorIconsRegular.flagBanner, + 'flagBannerFold': PhosphorIconsRegular.flagBannerFold, + 'flagCheckered': PhosphorIconsRegular.flagCheckered, + 'flagPennant': PhosphorIconsRegular.flagPennant, + 'flame': PhosphorIconsRegular.flame, + 'flashlight': PhosphorIconsRegular.flashlight, + 'flask': PhosphorIconsRegular.flask, + 'flipHorizontal': PhosphorIconsRegular.flipHorizontal, + 'flipVertical': PhosphorIconsRegular.flipVertical, + 'floppyDisk': PhosphorIconsRegular.floppyDisk, + 'floppyDiskBack': PhosphorIconsRegular.floppyDiskBack, + 'flowArrow': PhosphorIconsRegular.flowArrow, + 'flower': PhosphorIconsRegular.flower, + 'flowerLotus': PhosphorIconsRegular.flowerLotus, + 'flowerTulip': PhosphorIconsRegular.flowerTulip, + 'flyingSaucer': PhosphorIconsRegular.flyingSaucer, + 'folder': PhosphorIconsRegular.folder, + 'folderDashed': PhosphorIconsRegular.folderDashed, + 'folderLock': PhosphorIconsRegular.folderLock, + 'folderMinus': PhosphorIconsRegular.folderMinus, + 'folderOpen': PhosphorIconsRegular.folderOpen, + 'folderPlus': PhosphorIconsRegular.folderPlus, + 'folderSimple': PhosphorIconsRegular.folderSimple, + 'folderSimpleDashed': PhosphorIconsRegular.folderSimpleDashed, + 'folderSimpleLock': PhosphorIconsRegular.folderSimpleLock, + 'folderSimpleMinus': PhosphorIconsRegular.folderSimpleMinus, + 'folderSimplePlus': PhosphorIconsRegular.folderSimplePlus, + 'folderSimpleStar': PhosphorIconsRegular.folderSimpleStar, + 'folderSimpleUser': PhosphorIconsRegular.folderSimpleUser, + 'folderStar': PhosphorIconsRegular.folderStar, + 'folderUser': PhosphorIconsRegular.folderUser, + 'folders': PhosphorIconsRegular.folders, + 'football': PhosphorIconsRegular.football, + 'footballHelmet': PhosphorIconsRegular.footballHelmet, + 'footprints': PhosphorIconsRegular.footprints, + 'forkKnife': PhosphorIconsRegular.forkKnife, + 'fourK': PhosphorIconsRegular.fourK, + 'frameCorners': PhosphorIconsRegular.frameCorners, + 'framerLogo': PhosphorIconsRegular.framerLogo, + 'function': PhosphorIconsRegular.function, + 'funnel': PhosphorIconsRegular.funnel, + 'funnelSimple': PhosphorIconsRegular.funnelSimple, + 'funnelSimpleX': PhosphorIconsRegular.funnelSimpleX, + 'funnelX': PhosphorIconsRegular.funnelX, + 'gameController': PhosphorIconsRegular.gameController, + 'garage': PhosphorIconsRegular.garage, + 'gasCan': PhosphorIconsRegular.gasCan, + 'gasPump': PhosphorIconsRegular.gasPump, + 'gauge': PhosphorIconsRegular.gauge, + 'gavel': PhosphorIconsRegular.gavel, + 'gear': PhosphorIconsRegular.gear, + 'gearFine': PhosphorIconsRegular.gearFine, + 'gearSix': PhosphorIconsRegular.gearSix, + 'genderFemale': PhosphorIconsRegular.genderFemale, + 'genderIntersex': PhosphorIconsRegular.genderIntersex, + 'genderMale': PhosphorIconsRegular.genderMale, + 'genderNeuter': PhosphorIconsRegular.genderNeuter, + 'genderNonbinary': PhosphorIconsRegular.genderNonbinary, + 'genderTransgender': PhosphorIconsRegular.genderTransgender, + 'ghost': PhosphorIconsRegular.ghost, + 'gif': PhosphorIconsRegular.gif, + 'gift': PhosphorIconsRegular.gift, + 'gitBranch': PhosphorIconsRegular.gitBranch, + 'gitCommit': PhosphorIconsRegular.gitCommit, + 'gitDiff': PhosphorIconsRegular.gitDiff, + 'gitFork': PhosphorIconsRegular.gitFork, + 'gitMerge': PhosphorIconsRegular.gitMerge, + 'gitPullRequest': PhosphorIconsRegular.gitPullRequest, + 'githubLogo': PhosphorIconsRegular.githubLogo, + 'gitlabLogo': PhosphorIconsRegular.gitlabLogo, + 'gitlabLogoSimple': PhosphorIconsRegular.gitlabLogoSimple, + 'globe': PhosphorIconsRegular.globe, + 'globeHemisphereEast': PhosphorIconsRegular.globeHemisphereEast, + 'globeHemisphereWest': PhosphorIconsRegular.globeHemisphereWest, + 'globeSimple': PhosphorIconsRegular.globeSimple, + 'globeSimpleX': PhosphorIconsRegular.globeSimpleX, + 'globeStand': PhosphorIconsRegular.globeStand, + 'globeX': PhosphorIconsRegular.globeX, + 'goggles': PhosphorIconsRegular.goggles, + 'golf': PhosphorIconsRegular.golf, + 'goodreadsLogo': PhosphorIconsRegular.goodreadsLogo, + 'googleCardboardLogo': PhosphorIconsRegular.googleCardboardLogo, + 'googleChromeLogo': PhosphorIconsRegular.googleChromeLogo, + 'googleDriveLogo': PhosphorIconsRegular.googleDriveLogo, + 'googleLogo': PhosphorIconsRegular.googleLogo, + 'googlePhotosLogo': PhosphorIconsRegular.googlePhotosLogo, + 'googlePlayLogo': PhosphorIconsRegular.googlePlayLogo, + 'googlePodcastsLogo': PhosphorIconsRegular.googlePodcastsLogo, + 'gps': PhosphorIconsRegular.gps, + 'gpsFix': PhosphorIconsRegular.gpsFix, + 'gpsSlash': PhosphorIconsRegular.gpsSlash, + 'gradient': PhosphorIconsRegular.gradient, + 'graduationCap': PhosphorIconsRegular.graduationCap, + 'grains': PhosphorIconsRegular.grains, + 'grainsSlash': PhosphorIconsRegular.grainsSlash, + 'graph': PhosphorIconsRegular.graph, + 'graphicsCard': PhosphorIconsRegular.graphicsCard, + 'greaterThan': PhosphorIconsRegular.greaterThan, + 'greaterThanOrEqual': PhosphorIconsRegular.greaterThanOrEqual, + 'gridFour': PhosphorIconsRegular.gridFour, + 'gridNine': PhosphorIconsRegular.gridNine, + 'guitar': PhosphorIconsRegular.guitar, + 'hairDryer': PhosphorIconsRegular.hairDryer, + 'hamburger': PhosphorIconsRegular.hamburger, + 'hammer': PhosphorIconsRegular.hammer, + 'hand': PhosphorIconsRegular.hand, + 'handArrowDown': PhosphorIconsRegular.handArrowDown, + 'handArrowUp': PhosphorIconsRegular.handArrowUp, + 'handCoins': PhosphorIconsRegular.handCoins, + 'handDeposit': PhosphorIconsRegular.handDeposit, + 'handEye': PhosphorIconsRegular.handEye, + 'handFist': PhosphorIconsRegular.handFist, + 'handGrabbing': PhosphorIconsRegular.handGrabbing, + 'handHeart': PhosphorIconsRegular.handHeart, + 'handPalm': PhosphorIconsRegular.handPalm, + 'handPeace': PhosphorIconsRegular.handPeace, + 'handPointing': PhosphorIconsRegular.handPointing, + 'handSoap': PhosphorIconsRegular.handSoap, + 'handSwipeLeft': PhosphorIconsRegular.handSwipeLeft, + 'handSwipeRight': PhosphorIconsRegular.handSwipeRight, + 'handTap': PhosphorIconsRegular.handTap, + 'handWaving': PhosphorIconsRegular.handWaving, + 'handWithdraw': PhosphorIconsRegular.handWithdraw, + 'handbag': PhosphorIconsRegular.handbag, + 'handbagSimple': PhosphorIconsRegular.handbagSimple, + 'handsClapping': PhosphorIconsRegular.handsClapping, + 'handsPraying': PhosphorIconsRegular.handsPraying, + 'handshake': PhosphorIconsRegular.handshake, + 'hardDrive': PhosphorIconsRegular.hardDrive, + 'hardDrives': PhosphorIconsRegular.hardDrives, + 'hardHat': PhosphorIconsRegular.hardHat, + 'hash': PhosphorIconsRegular.hash, + 'hashStraight': PhosphorIconsRegular.hashStraight, + 'headCircuit': PhosphorIconsRegular.headCircuit, + 'headlights': PhosphorIconsRegular.headlights, + 'headphones': PhosphorIconsRegular.headphones, + 'headset': PhosphorIconsRegular.headset, + 'heart': PhosphorIconsRegular.heart, + 'heartBreak': PhosphorIconsRegular.heartBreak, + 'heartHalf': PhosphorIconsRegular.heartHalf, + 'heartStraight': PhosphorIconsRegular.heartStraight, + 'heartStraightBreak': PhosphorIconsRegular.heartStraightBreak, + 'heartbeat': PhosphorIconsRegular.heartbeat, + 'hexagon': PhosphorIconsRegular.hexagon, + 'highDefinition': PhosphorIconsRegular.highDefinition, + 'highHeel': PhosphorIconsRegular.highHeel, + 'highlighter': PhosphorIconsRegular.highlighter, + 'highlighterCircle': PhosphorIconsRegular.highlighterCircle, + 'hockey': PhosphorIconsRegular.hockey, + 'hoodie': PhosphorIconsRegular.hoodie, + 'horse': PhosphorIconsRegular.horse, + 'hospital': PhosphorIconsRegular.hospital, + 'hourglass': PhosphorIconsRegular.hourglass, + 'hourglassHigh': PhosphorIconsRegular.hourglassHigh, + 'hourglassLow': PhosphorIconsRegular.hourglassLow, + 'hourglassMedium': PhosphorIconsRegular.hourglassMedium, + 'hourglassSimple': PhosphorIconsRegular.hourglassSimple, + 'hourglassSimpleHigh': PhosphorIconsRegular.hourglassSimpleHigh, + 'hourglassSimpleLow': PhosphorIconsRegular.hourglassSimpleLow, + 'hourglassSimpleMedium': PhosphorIconsRegular.hourglassSimpleMedium, + 'house': PhosphorIconsRegular.house, + 'houseLine': PhosphorIconsRegular.houseLine, + 'houseSimple': PhosphorIconsRegular.houseSimple, + 'hurricane': PhosphorIconsRegular.hurricane, + 'iceCream': PhosphorIconsRegular.iceCream, + 'identificationBadge': PhosphorIconsRegular.identificationBadge, + 'identificationCard': PhosphorIconsRegular.identificationCard, + 'image': PhosphorIconsRegular.image, + 'imageBroken': PhosphorIconsRegular.imageBroken, + 'imageSquare': PhosphorIconsRegular.imageSquare, + 'images': PhosphorIconsRegular.images, + 'imagesSquare': PhosphorIconsRegular.imagesSquare, + 'infinity': PhosphorIconsRegular.infinity, + 'info': PhosphorIconsRegular.info, + 'instagramLogo': PhosphorIconsRegular.instagramLogo, + 'intersect': PhosphorIconsRegular.intersect, + 'intersectSquare': PhosphorIconsRegular.intersectSquare, + 'intersectThree': PhosphorIconsRegular.intersectThree, + 'intersection': PhosphorIconsRegular.intersection, + 'invoice': PhosphorIconsRegular.invoice, + 'island': PhosphorIconsRegular.island, + 'jar': PhosphorIconsRegular.jar, + 'jarLabel': PhosphorIconsRegular.jarLabel, + 'jeep': PhosphorIconsRegular.jeep, + 'joystick': PhosphorIconsRegular.joystick, + 'kanban': PhosphorIconsRegular.kanban, + 'key': PhosphorIconsRegular.key, + 'keyReturn': PhosphorIconsRegular.keyReturn, + 'keyboard': PhosphorIconsRegular.keyboard, + 'keyhole': PhosphorIconsRegular.keyhole, + 'knife': PhosphorIconsRegular.knife, + 'ladder': PhosphorIconsRegular.ladder, + 'ladderSimple': PhosphorIconsRegular.ladderSimple, + 'lamp': PhosphorIconsRegular.lamp, + 'lampPendant': PhosphorIconsRegular.lampPendant, + 'laptop': PhosphorIconsRegular.laptop, + 'lasso': PhosphorIconsRegular.lasso, + 'lastfmLogo': PhosphorIconsRegular.lastfmLogo, + 'layout': PhosphorIconsRegular.layout, + 'leaf': PhosphorIconsRegular.leaf, + 'lectern': PhosphorIconsRegular.lectern, + 'lego': PhosphorIconsRegular.lego, + 'legoSmiley': PhosphorIconsRegular.legoSmiley, + 'lessThan': PhosphorIconsRegular.lessThan, + 'lessThanOrEqual': PhosphorIconsRegular.lessThanOrEqual, + 'letterCircleH': PhosphorIconsRegular.letterCircleH, + 'letterCircleP': PhosphorIconsRegular.letterCircleP, + 'letterCircleV': PhosphorIconsRegular.letterCircleV, + 'lifebuoy': PhosphorIconsRegular.lifebuoy, + 'lightbulb': PhosphorIconsRegular.lightbulb, + 'lightbulbFilament': PhosphorIconsRegular.lightbulbFilament, + 'lighthouse': PhosphorIconsRegular.lighthouse, + 'lightning': PhosphorIconsRegular.lightning, + 'lightningA': PhosphorIconsRegular.lightningA, + 'lightningSlash': PhosphorIconsRegular.lightningSlash, + 'lineSegment': PhosphorIconsRegular.lineSegment, + 'lineSegments': PhosphorIconsRegular.lineSegments, + 'lineVertical': PhosphorIconsRegular.lineVertical, + 'link': PhosphorIconsRegular.link, + 'linkBreak': PhosphorIconsRegular.linkBreak, + 'linkSimple': PhosphorIconsRegular.linkSimple, + 'linkSimpleBreak': PhosphorIconsRegular.linkSimpleBreak, + 'linkSimpleHorizontal': PhosphorIconsRegular.linkSimpleHorizontal, + 'linkSimpleHorizontalBreak': PhosphorIconsRegular.linkSimpleHorizontalBreak, + 'linkedinLogo': PhosphorIconsRegular.linkedinLogo, + 'linktreeLogo': PhosphorIconsRegular.linktreeLogo, + 'linuxLogo': PhosphorIconsRegular.linuxLogo, + 'list': PhosphorIconsRegular.list, + 'listBullets': PhosphorIconsRegular.listBullets, + 'listChecks': PhosphorIconsRegular.listChecks, + 'listDashes': PhosphorIconsRegular.listDashes, + 'listHeart': PhosphorIconsRegular.listHeart, + 'listMagnifyingGlass': PhosphorIconsRegular.listMagnifyingGlass, + 'listNumbers': PhosphorIconsRegular.listNumbers, + 'listPlus': PhosphorIconsRegular.listPlus, + 'listStar': PhosphorIconsRegular.listStar, + 'lock': PhosphorIconsRegular.lock, + 'lockKey': PhosphorIconsRegular.lockKey, + 'lockKeyOpen': PhosphorIconsRegular.lockKeyOpen, + 'lockLaminated': PhosphorIconsRegular.lockLaminated, + 'lockLaminatedOpen': PhosphorIconsRegular.lockLaminatedOpen, + 'lockOpen': PhosphorIconsRegular.lockOpen, + 'lockSimple': PhosphorIconsRegular.lockSimple, + 'lockSimpleOpen': PhosphorIconsRegular.lockSimpleOpen, + 'lockers': PhosphorIconsRegular.lockers, + 'log': PhosphorIconsRegular.log, + 'magicWand': PhosphorIconsRegular.magicWand, + 'magnet': PhosphorIconsRegular.magnet, + 'magnetStraight': PhosphorIconsRegular.magnetStraight, + 'magnifyingGlass': PhosphorIconsRegular.magnifyingGlass, + 'magnifyingGlassMinus': PhosphorIconsRegular.magnifyingGlassMinus, + 'magnifyingGlassPlus': PhosphorIconsRegular.magnifyingGlassPlus, + 'mailbox': PhosphorIconsRegular.mailbox, + 'mapPin': PhosphorIconsRegular.mapPin, + 'mapPinArea': PhosphorIconsRegular.mapPinArea, + 'mapPinLine': PhosphorIconsRegular.mapPinLine, + 'mapPinPlus': PhosphorIconsRegular.mapPinPlus, + 'mapPinSimple': PhosphorIconsRegular.mapPinSimple, + 'mapPinSimpleArea': PhosphorIconsRegular.mapPinSimpleArea, + 'mapPinSimpleLine': PhosphorIconsRegular.mapPinSimpleLine, + 'mapTrifold': PhosphorIconsRegular.mapTrifold, + 'markdownLogo': PhosphorIconsRegular.markdownLogo, + 'markerCircle': PhosphorIconsRegular.markerCircle, + 'martini': PhosphorIconsRegular.martini, + 'maskHappy': PhosphorIconsRegular.maskHappy, + 'maskSad': PhosphorIconsRegular.maskSad, + 'mastodonLogo': PhosphorIconsRegular.mastodonLogo, + 'mathOperations': PhosphorIconsRegular.mathOperations, + 'matrixLogo': PhosphorIconsRegular.matrixLogo, + 'medal': PhosphorIconsRegular.medal, + 'medalMilitary': PhosphorIconsRegular.medalMilitary, + 'mediumLogo': PhosphorIconsRegular.mediumLogo, + 'megaphone': PhosphorIconsRegular.megaphone, + 'megaphoneSimple': PhosphorIconsRegular.megaphoneSimple, + 'memberOf': PhosphorIconsRegular.memberOf, + 'memory': PhosphorIconsRegular.memory, + 'messengerLogo': PhosphorIconsRegular.messengerLogo, + 'metaLogo': PhosphorIconsRegular.metaLogo, + 'meteor': PhosphorIconsRegular.meteor, + 'metronome': PhosphorIconsRegular.metronome, + 'microphone': PhosphorIconsRegular.microphone, + 'microphoneSlash': PhosphorIconsRegular.microphoneSlash, + 'microphoneStage': PhosphorIconsRegular.microphoneStage, + 'microscope': PhosphorIconsRegular.microscope, + 'microsoftExcelLogo': PhosphorIconsRegular.microsoftExcelLogo, + 'microsoftOutlookLogo': PhosphorIconsRegular.microsoftOutlookLogo, + 'microsoftPowerpointLogo': PhosphorIconsRegular.microsoftPowerpointLogo, + 'microsoftTeamsLogo': PhosphorIconsRegular.microsoftTeamsLogo, + 'microsoftWordLogo': PhosphorIconsRegular.microsoftWordLogo, + 'minus': PhosphorIconsRegular.minus, + 'minusCircle': PhosphorIconsRegular.minusCircle, + 'minusSquare': PhosphorIconsRegular.minusSquare, + 'money': PhosphorIconsRegular.money, + 'moneyWavy': PhosphorIconsRegular.moneyWavy, + 'monitor': PhosphorIconsRegular.monitor, + 'monitorArrowUp': PhosphorIconsRegular.monitorArrowUp, + 'monitorPlay': PhosphorIconsRegular.monitorPlay, + 'moon': PhosphorIconsRegular.moon, + 'moonStars': PhosphorIconsRegular.moonStars, + 'moped': PhosphorIconsRegular.moped, + 'mopedFront': PhosphorIconsRegular.mopedFront, + 'mosque': PhosphorIconsRegular.mosque, + 'motorcycle': PhosphorIconsRegular.motorcycle, + 'mountains': PhosphorIconsRegular.mountains, + 'mouse': PhosphorIconsRegular.mouse, + 'mouseLeftClick': PhosphorIconsRegular.mouseLeftClick, + 'mouseMiddleClick': PhosphorIconsRegular.mouseMiddleClick, + 'mouseRightClick': PhosphorIconsRegular.mouseRightClick, + 'mouseScroll': PhosphorIconsRegular.mouseScroll, + 'mouseSimple': PhosphorIconsRegular.mouseSimple, + 'musicNote': PhosphorIconsRegular.musicNote, + 'musicNoteSimple': PhosphorIconsRegular.musicNoteSimple, + 'musicNotes': PhosphorIconsRegular.musicNotes, + 'musicNotesMinus': PhosphorIconsRegular.musicNotesMinus, + 'musicNotesPlus': PhosphorIconsRegular.musicNotesPlus, + 'musicNotesSimple': PhosphorIconsRegular.musicNotesSimple, + 'navigationArrow': PhosphorIconsRegular.navigationArrow, + 'needle': PhosphorIconsRegular.needle, + 'network': PhosphorIconsRegular.network, + 'networkSlash': PhosphorIconsRegular.networkSlash, + 'networkX': PhosphorIconsRegular.networkX, + 'newspaper': PhosphorIconsRegular.newspaper, + 'newspaperClipping': PhosphorIconsRegular.newspaperClipping, + 'notEquals': PhosphorIconsRegular.notEquals, + 'notMemberOf': PhosphorIconsRegular.notMemberOf, + 'notSubsetOf': PhosphorIconsRegular.notSubsetOf, + 'notSupersetOf': PhosphorIconsRegular.notSupersetOf, + 'notches': PhosphorIconsRegular.notches, + 'note': PhosphorIconsRegular.note, + 'noteBlank': PhosphorIconsRegular.noteBlank, + 'notePencil': PhosphorIconsRegular.notePencil, + 'notebook': PhosphorIconsRegular.notebook, + 'notepad': PhosphorIconsRegular.notepad, + 'notification': PhosphorIconsRegular.notification, + 'notionLogo': PhosphorIconsRegular.notionLogo, + 'nuclearPlant': PhosphorIconsRegular.nuclearPlant, + 'numberCircleEight': PhosphorIconsRegular.numberCircleEight, + 'numberCircleFive': PhosphorIconsRegular.numberCircleFive, + 'numberCircleFour': PhosphorIconsRegular.numberCircleFour, + 'numberCircleNine': PhosphorIconsRegular.numberCircleNine, + 'numberCircleOne': PhosphorIconsRegular.numberCircleOne, + 'numberCircleSeven': PhosphorIconsRegular.numberCircleSeven, + 'numberCircleSix': PhosphorIconsRegular.numberCircleSix, + 'numberCircleThree': PhosphorIconsRegular.numberCircleThree, + 'numberCircleTwo': PhosphorIconsRegular.numberCircleTwo, + 'numberCircleZero': PhosphorIconsRegular.numberCircleZero, + 'numberEight': PhosphorIconsRegular.numberEight, + 'numberFive': PhosphorIconsRegular.numberFive, + 'numberFour': PhosphorIconsRegular.numberFour, + 'numberNine': PhosphorIconsRegular.numberNine, + 'numberOne': PhosphorIconsRegular.numberOne, + 'numberSeven': PhosphorIconsRegular.numberSeven, + 'numberSix': PhosphorIconsRegular.numberSix, + 'numberSquareEight': PhosphorIconsRegular.numberSquareEight, + 'numberSquareFive': PhosphorIconsRegular.numberSquareFive, + 'numberSquareFour': PhosphorIconsRegular.numberSquareFour, + 'numberSquareNine': PhosphorIconsRegular.numberSquareNine, + 'numberSquareOne': PhosphorIconsRegular.numberSquareOne, + 'numberSquareSeven': PhosphorIconsRegular.numberSquareSeven, + 'numberSquareSix': PhosphorIconsRegular.numberSquareSix, + 'numberSquareThree': PhosphorIconsRegular.numberSquareThree, + 'numberSquareTwo': PhosphorIconsRegular.numberSquareTwo, + 'numberSquareZero': PhosphorIconsRegular.numberSquareZero, + 'numberThree': PhosphorIconsRegular.numberThree, + 'numberTwo': PhosphorIconsRegular.numberTwo, + 'numberZero': PhosphorIconsRegular.numberZero, + 'numpad': PhosphorIconsRegular.numpad, + 'nut': PhosphorIconsRegular.nut, + 'nyTimesLogo': PhosphorIconsRegular.nyTimesLogo, + 'octagon': PhosphorIconsRegular.octagon, + 'officeChair': PhosphorIconsRegular.officeChair, + 'onigiri': PhosphorIconsRegular.onigiri, + 'openAiLogo': PhosphorIconsRegular.openAiLogo, + 'option': PhosphorIconsRegular.option, + 'orange': PhosphorIconsRegular.orange, + 'orangeSlice': PhosphorIconsRegular.orangeSlice, + 'oven': PhosphorIconsRegular.oven, + 'package': PhosphorIconsRegular.package, + 'paintBrush': PhosphorIconsRegular.paintBrush, + 'paintBrushBroad': PhosphorIconsRegular.paintBrushBroad, + 'paintBrushHousehold': PhosphorIconsRegular.paintBrushHousehold, + 'paintBucket': PhosphorIconsRegular.paintBucket, + 'paintRoller': PhosphorIconsRegular.paintRoller, + 'palette': PhosphorIconsRegular.palette, + 'panorama': PhosphorIconsRegular.panorama, + 'pants': PhosphorIconsRegular.pants, + 'paperPlane': PhosphorIconsRegular.paperPlane, + 'paperPlaneRight': PhosphorIconsRegular.paperPlaneRight, + 'paperPlaneTilt': PhosphorIconsRegular.paperPlaneTilt, + 'paperclip': PhosphorIconsRegular.paperclip, + 'paperclipHorizontal': PhosphorIconsRegular.paperclipHorizontal, + 'parachute': PhosphorIconsRegular.parachute, + 'paragraph': PhosphorIconsRegular.paragraph, + 'parallelogram': PhosphorIconsRegular.parallelogram, + 'park': PhosphorIconsRegular.park, + 'password': PhosphorIconsRegular.password, + 'path': PhosphorIconsRegular.path, + 'patreonLogo': PhosphorIconsRegular.patreonLogo, + 'pause': PhosphorIconsRegular.pause, + 'pauseCircle': PhosphorIconsRegular.pauseCircle, + 'pawPrint': PhosphorIconsRegular.pawPrint, + 'paypalLogo': PhosphorIconsRegular.paypalLogo, + 'peace': PhosphorIconsRegular.peace, + 'pen': PhosphorIconsRegular.pen, + 'penNib': PhosphorIconsRegular.penNib, + 'penNibStraight': PhosphorIconsRegular.penNibStraight, + 'pencil': PhosphorIconsRegular.pencil, + 'pencilCircle': PhosphorIconsRegular.pencilCircle, + 'pencilLine': PhosphorIconsRegular.pencilLine, + 'pencilRuler': PhosphorIconsRegular.pencilRuler, + 'pencilSimple': PhosphorIconsRegular.pencilSimple, + 'pencilSimpleLine': PhosphorIconsRegular.pencilSimpleLine, + 'pencilSimpleSlash': PhosphorIconsRegular.pencilSimpleSlash, + 'pencilSlash': PhosphorIconsRegular.pencilSlash, + 'pentagon': PhosphorIconsRegular.pentagon, + 'pentagram': PhosphorIconsRegular.pentagram, + 'pepper': PhosphorIconsRegular.pepper, + 'percent': PhosphorIconsRegular.percent, + 'person': PhosphorIconsRegular.person, + 'personArmsSpread': PhosphorIconsRegular.personArmsSpread, + 'personSimple': PhosphorIconsRegular.personSimple, + 'personSimpleBike': PhosphorIconsRegular.personSimpleBike, + 'personSimpleCircle': PhosphorIconsRegular.personSimpleCircle, + 'personSimpleHike': PhosphorIconsRegular.personSimpleHike, + 'personSimpleRun': PhosphorIconsRegular.personSimpleRun, + 'personSimpleSki': PhosphorIconsRegular.personSimpleSki, + 'personSimpleSnowboard': PhosphorIconsRegular.personSimpleSnowboard, + 'personSimpleSwim': PhosphorIconsRegular.personSimpleSwim, + 'personSimpleTaiChi': PhosphorIconsRegular.personSimpleTaiChi, + 'personSimpleThrow': PhosphorIconsRegular.personSimpleThrow, + 'personSimpleWalk': PhosphorIconsRegular.personSimpleWalk, + 'perspective': PhosphorIconsRegular.perspective, + 'phone': PhosphorIconsRegular.phone, + 'phoneCall': PhosphorIconsRegular.phoneCall, + 'phoneDisconnect': PhosphorIconsRegular.phoneDisconnect, + 'phoneIncoming': PhosphorIconsRegular.phoneIncoming, + 'phoneList': PhosphorIconsRegular.phoneList, + 'phoneOutgoing': PhosphorIconsRegular.phoneOutgoing, + 'phonePause': PhosphorIconsRegular.phonePause, + 'phonePlus': PhosphorIconsRegular.phonePlus, + 'phoneSlash': PhosphorIconsRegular.phoneSlash, + 'phoneTransfer': PhosphorIconsRegular.phoneTransfer, + 'phoneX': PhosphorIconsRegular.phoneX, + 'phosphorLogo': PhosphorIconsRegular.phosphorLogo, + 'pi': PhosphorIconsRegular.pi, + 'pianoKeys': PhosphorIconsRegular.pianoKeys, + 'picnicTable': PhosphorIconsRegular.picnicTable, + 'pictureInpicture': PhosphorIconsRegular.pictureInpicture, + 'piggyBank': PhosphorIconsRegular.piggyBank, + 'pill': PhosphorIconsRegular.pill, + 'pingPong': PhosphorIconsRegular.pingPong, + 'pintGlass': PhosphorIconsRegular.pintGlass, + 'pinterestLogo': PhosphorIconsRegular.pinterestLogo, + 'pinwheel': PhosphorIconsRegular.pinwheel, + 'pipe': PhosphorIconsRegular.pipe, + 'pipeWrench': PhosphorIconsRegular.pipeWrench, + 'pixLogo': PhosphorIconsRegular.pixLogo, + 'pizza': PhosphorIconsRegular.pizza, + 'placeholder': PhosphorIconsRegular.placeholder, + 'planet': PhosphorIconsRegular.planet, + 'plant': PhosphorIconsRegular.plant, + 'play': PhosphorIconsRegular.play, + 'playCircle': PhosphorIconsRegular.playCircle, + 'playPause': PhosphorIconsRegular.playPause, + 'playlist': PhosphorIconsRegular.playlist, + 'plug': PhosphorIconsRegular.plug, + 'plugCharging': PhosphorIconsRegular.plugCharging, + 'plugs': PhosphorIconsRegular.plugs, + 'plugsConnected': PhosphorIconsRegular.plugsConnected, + 'plus': PhosphorIconsRegular.plus, + 'plusCircle': PhosphorIconsRegular.plusCircle, + 'plusMinus': PhosphorIconsRegular.plusMinus, + 'plusSquare': PhosphorIconsRegular.plusSquare, + 'pokerChip': PhosphorIconsRegular.pokerChip, + 'policeCar': PhosphorIconsRegular.policeCar, + 'polygon': PhosphorIconsRegular.polygon, + 'popcorn': PhosphorIconsRegular.popcorn, + 'popsicle': PhosphorIconsRegular.popsicle, + 'pottedPlant': PhosphorIconsRegular.pottedPlant, + 'power': PhosphorIconsRegular.power, + 'prescription': PhosphorIconsRegular.prescription, + 'presentation': PhosphorIconsRegular.presentation, + 'presentationChart': PhosphorIconsRegular.presentationChart, + 'printer': PhosphorIconsRegular.printer, + 'prohibit': PhosphorIconsRegular.prohibit, + 'prohibitInset': PhosphorIconsRegular.prohibitInset, + 'projectorScreen': PhosphorIconsRegular.projectorScreen, + 'projectorScreenChart': PhosphorIconsRegular.projectorScreenChart, + 'pulse': PhosphorIconsRegular.pulse, + 'pushPin': PhosphorIconsRegular.pushPin, + 'pushPinSimple': PhosphorIconsRegular.pushPinSimple, + 'pushPinSimpleSlash': PhosphorIconsRegular.pushPinSimpleSlash, + 'pushPinSlash': PhosphorIconsRegular.pushPinSlash, + 'puzzlePiece': PhosphorIconsRegular.puzzlePiece, + 'qrCode': PhosphorIconsRegular.qrCode, + 'question': PhosphorIconsRegular.question, + 'questionMark': PhosphorIconsRegular.questionMark, + 'queue': PhosphorIconsRegular.queue, + 'quotes': PhosphorIconsRegular.quotes, + 'rabbit': PhosphorIconsRegular.rabbit, + 'racquet': PhosphorIconsRegular.racquet, + 'radical': PhosphorIconsRegular.radical, + 'radio': PhosphorIconsRegular.radio, + 'radioButton': PhosphorIconsRegular.radioButton, + 'radioactive': PhosphorIconsRegular.radioactive, + 'rainbow': PhosphorIconsRegular.rainbow, + 'rainbowCloud': PhosphorIconsRegular.rainbowCloud, + 'ranking': PhosphorIconsRegular.ranking, + 'readCvLogo': PhosphorIconsRegular.readCvLogo, + 'receipt': PhosphorIconsRegular.receipt, + 'receiptX': PhosphorIconsRegular.receiptX, + 'record': PhosphorIconsRegular.record, + 'rectangle': PhosphorIconsRegular.rectangle, + 'rectangleDashed': PhosphorIconsRegular.rectangleDashed, + 'recycle': PhosphorIconsRegular.recycle, + 'redditLogo': PhosphorIconsRegular.redditLogo, + 'repeat': PhosphorIconsRegular.repeat, + 'repeatOnce': PhosphorIconsRegular.repeatOnce, + 'replitLogo': PhosphorIconsRegular.replitLogo, + 'resize': PhosphorIconsRegular.resize, + 'rewind': PhosphorIconsRegular.rewind, + 'rewindCircle': PhosphorIconsRegular.rewindCircle, + 'roadHorizon': PhosphorIconsRegular.roadHorizon, + 'robot': PhosphorIconsRegular.robot, + 'rocket': PhosphorIconsRegular.rocket, + 'rocketLaunch': PhosphorIconsRegular.rocketLaunch, + 'rows': PhosphorIconsRegular.rows, + 'rowsPlusBottom': PhosphorIconsRegular.rowsPlusBottom, + 'rowsPlusTop': PhosphorIconsRegular.rowsPlusTop, + 'rss': PhosphorIconsRegular.rss, + 'rssSimple': PhosphorIconsRegular.rssSimple, + 'rug': PhosphorIconsRegular.rug, + 'ruler': PhosphorIconsRegular.ruler, + 'sailboat': PhosphorIconsRegular.sailboat, + 'scales': PhosphorIconsRegular.scales, + 'scan': PhosphorIconsRegular.scan, + 'scanSmiley': PhosphorIconsRegular.scanSmiley, + 'scissors': PhosphorIconsRegular.scissors, + 'scooter': PhosphorIconsRegular.scooter, + 'screencast': PhosphorIconsRegular.screencast, + 'screwdriver': PhosphorIconsRegular.screwdriver, + 'scribble': PhosphorIconsRegular.scribble, + 'scribbleLoop': PhosphorIconsRegular.scribbleLoop, + 'scroll': PhosphorIconsRegular.scroll, + 'seal': PhosphorIconsRegular.seal, + 'sealCheck': PhosphorIconsRegular.sealCheck, + 'sealPercent': PhosphorIconsRegular.sealPercent, + 'sealQuestion': PhosphorIconsRegular.sealQuestion, + 'sealWarning': PhosphorIconsRegular.sealWarning, + 'seat': PhosphorIconsRegular.seat, + 'seatbelt': PhosphorIconsRegular.seatbelt, + 'securityCamera': PhosphorIconsRegular.securityCamera, + 'selection': PhosphorIconsRegular.selection, + 'selectionAll': PhosphorIconsRegular.selectionAll, + 'selectionBackground': PhosphorIconsRegular.selectionBackground, + 'selectionForeground': PhosphorIconsRegular.selectionForeground, + 'selectionInverse': PhosphorIconsRegular.selectionInverse, + 'selectionPlus': PhosphorIconsRegular.selectionPlus, + 'selectionSlash': PhosphorIconsRegular.selectionSlash, + 'shapes': PhosphorIconsRegular.shapes, + 'share': PhosphorIconsRegular.share, + 'shareFat': PhosphorIconsRegular.shareFat, + 'shareNetwork': PhosphorIconsRegular.shareNetwork, + 'shield': PhosphorIconsRegular.shield, + 'shieldCheck': PhosphorIconsRegular.shieldCheck, + 'shieldCheckered': PhosphorIconsRegular.shieldCheckered, + 'shieldChevron': PhosphorIconsRegular.shieldChevron, + 'shieldPlus': PhosphorIconsRegular.shieldPlus, + 'shieldSlash': PhosphorIconsRegular.shieldSlash, + 'shieldStar': PhosphorIconsRegular.shieldStar, + 'shieldWarning': PhosphorIconsRegular.shieldWarning, + 'shippingContainer': PhosphorIconsRegular.shippingContainer, + 'shirtFolded': PhosphorIconsRegular.shirtFolded, + 'shootingStar': PhosphorIconsRegular.shootingStar, + 'shoppingBag': PhosphorIconsRegular.shoppingBag, + 'shoppingBagOpen': PhosphorIconsRegular.shoppingBagOpen, + 'shoppingCart': PhosphorIconsRegular.shoppingCart, + 'shoppingCartSimple': PhosphorIconsRegular.shoppingCartSimple, + 'shovel': PhosphorIconsRegular.shovel, + 'shower': PhosphorIconsRegular.shower, + 'shrimp': PhosphorIconsRegular.shrimp, + 'shuffle': PhosphorIconsRegular.shuffle, + 'shuffleAngular': PhosphorIconsRegular.shuffleAngular, + 'shuffleSimple': PhosphorIconsRegular.shuffleSimple, + 'sidebar': PhosphorIconsRegular.sidebar, + 'sidebarSimple': PhosphorIconsRegular.sidebarSimple, + 'sigma': PhosphorIconsRegular.sigma, + 'signIn': PhosphorIconsRegular.signIn, + 'signOut': PhosphorIconsRegular.signOut, + 'signature': PhosphorIconsRegular.signature, + 'signpost': PhosphorIconsRegular.signpost, + 'simCard': PhosphorIconsRegular.simCard, + 'siren': PhosphorIconsRegular.siren, + 'sketchLogo': PhosphorIconsRegular.sketchLogo, + 'skipBack': PhosphorIconsRegular.skipBack, + 'skipBackCircle': PhosphorIconsRegular.skipBackCircle, + 'skipForward': PhosphorIconsRegular.skipForward, + 'skipForwardCircle': PhosphorIconsRegular.skipForwardCircle, + 'skull': PhosphorIconsRegular.skull, + 'skypeLogo': PhosphorIconsRegular.skypeLogo, + 'slackLogo': PhosphorIconsRegular.slackLogo, + 'sliders': PhosphorIconsRegular.sliders, + 'slidersHorizontal': PhosphorIconsRegular.slidersHorizontal, + 'slideshow': PhosphorIconsRegular.slideshow, + 'smiley': PhosphorIconsRegular.smiley, + 'smileyAngry': PhosphorIconsRegular.smileyAngry, + 'smileyBlank': PhosphorIconsRegular.smileyBlank, + 'smileyMeh': PhosphorIconsRegular.smileyMeh, + 'smileyMelting': PhosphorIconsRegular.smileyMelting, + 'smileyNervous': PhosphorIconsRegular.smileyNervous, + 'smileySad': PhosphorIconsRegular.smileySad, + 'smileySticker': PhosphorIconsRegular.smileySticker, + 'smileyWink': PhosphorIconsRegular.smileyWink, + 'smileyXEyes': PhosphorIconsRegular.smileyXEyes, + 'snapchatLogo': PhosphorIconsRegular.snapchatLogo, + 'sneaker': PhosphorIconsRegular.sneaker, + 'sneakerMove': PhosphorIconsRegular.sneakerMove, + 'snowflake': PhosphorIconsRegular.snowflake, + 'soccerBall': PhosphorIconsRegular.soccerBall, + 'sock': PhosphorIconsRegular.sock, + 'solarPanel': PhosphorIconsRegular.solarPanel, + 'solarRoof': PhosphorIconsRegular.solarRoof, + 'sortAscending': PhosphorIconsRegular.sortAscending, + 'sortDescending': PhosphorIconsRegular.sortDescending, + 'soundcloudLogo': PhosphorIconsRegular.soundcloudLogo, + 'spade': PhosphorIconsRegular.spade, + 'sparkle': PhosphorIconsRegular.sparkle, + 'speakerHifi': PhosphorIconsRegular.speakerHifi, + 'speakerHigh': PhosphorIconsRegular.speakerHigh, + 'speakerLow': PhosphorIconsRegular.speakerLow, + 'speakerNone': PhosphorIconsRegular.speakerNone, + 'speakerSimpleHigh': PhosphorIconsRegular.speakerSimpleHigh, + 'speakerSimpleLow': PhosphorIconsRegular.speakerSimpleLow, + 'speakerSimpleNone': PhosphorIconsRegular.speakerSimpleNone, + 'speakerSimpleSlash': PhosphorIconsRegular.speakerSimpleSlash, + 'speakerSimpleX': PhosphorIconsRegular.speakerSimpleX, + 'speakerSlash': PhosphorIconsRegular.speakerSlash, + 'speakerX': PhosphorIconsRegular.speakerX, + 'speedometer': PhosphorIconsRegular.speedometer, + 'sphere': PhosphorIconsRegular.sphere, + 'spinner': PhosphorIconsRegular.spinner, + 'spinnerBall': PhosphorIconsRegular.spinnerBall, + 'spinnerGap': PhosphorIconsRegular.spinnerGap, + 'spiral': PhosphorIconsRegular.spiral, + 'splitHorizontal': PhosphorIconsRegular.splitHorizontal, + 'splitVertical': PhosphorIconsRegular.splitVertical, + 'spotifyLogo': PhosphorIconsRegular.spotifyLogo, + 'sprayBottle': PhosphorIconsRegular.sprayBottle, + 'square': PhosphorIconsRegular.square, + 'squareHalf': PhosphorIconsRegular.squareHalf, + 'squareHalfBottom': PhosphorIconsRegular.squareHalfBottom, + 'squareLogo': PhosphorIconsRegular.squareLogo, + 'squareSplitHorizontal': PhosphorIconsRegular.squareSplitHorizontal, + 'squareSplitVertical': PhosphorIconsRegular.squareSplitVertical, + 'squaresFour': PhosphorIconsRegular.squaresFour, + 'stack': PhosphorIconsRegular.stack, + 'stackMinus': PhosphorIconsRegular.stackMinus, + 'stackOverflowLogo': PhosphorIconsRegular.stackOverflowLogo, + 'stackPlus': PhosphorIconsRegular.stackPlus, + 'stackSimple': PhosphorIconsRegular.stackSimple, + 'stairs': PhosphorIconsRegular.stairs, + 'stamp': PhosphorIconsRegular.stamp, + 'standardDefinition': PhosphorIconsRegular.standardDefinition, + 'star': PhosphorIconsRegular.star, + 'starAndCrescent': PhosphorIconsRegular.starAndCrescent, + 'starFour': PhosphorIconsRegular.starFour, + 'starHalf': PhosphorIconsRegular.starHalf, + 'starOfDavid': PhosphorIconsRegular.starOfDavid, + 'steamLogo': PhosphorIconsRegular.steamLogo, + 'steeringWheel': PhosphorIconsRegular.steeringWheel, + 'steps': PhosphorIconsRegular.steps, + 'stethoscope': PhosphorIconsRegular.stethoscope, + 'sticker': PhosphorIconsRegular.sticker, + 'stool': PhosphorIconsRegular.stool, + 'stop': PhosphorIconsRegular.stop, + 'stopCircle': PhosphorIconsRegular.stopCircle, + 'storefront': PhosphorIconsRegular.storefront, + 'strategy': PhosphorIconsRegular.strategy, + 'stripeLogo': PhosphorIconsRegular.stripeLogo, + 'student': PhosphorIconsRegular.student, + 'subsetOf': PhosphorIconsRegular.subsetOf, + 'subsetProperOf': PhosphorIconsRegular.subsetProperOf, + 'subtitles': PhosphorIconsRegular.subtitles, + 'subtitlesSlash': PhosphorIconsRegular.subtitlesSlash, + 'subtract': PhosphorIconsRegular.subtract, + 'subtractSquare': PhosphorIconsRegular.subtractSquare, + 'subway': PhosphorIconsRegular.subway, + 'suitcase': PhosphorIconsRegular.suitcase, + 'suitcaseRolling': PhosphorIconsRegular.suitcaseRolling, + 'suitcaseSimple': PhosphorIconsRegular.suitcaseSimple, + 'sun': PhosphorIconsRegular.sun, + 'sunDim': PhosphorIconsRegular.sunDim, + 'sunHorizon': PhosphorIconsRegular.sunHorizon, + 'sunglasses': PhosphorIconsRegular.sunglasses, + 'supersetOf': PhosphorIconsRegular.supersetOf, + 'supersetProperOf': PhosphorIconsRegular.supersetProperOf, + 'swap': PhosphorIconsRegular.swap, + 'swatches': PhosphorIconsRegular.swatches, + 'swimmingPool': PhosphorIconsRegular.swimmingPool, + 'sword': PhosphorIconsRegular.sword, + 'synagogue': PhosphorIconsRegular.synagogue, + 'syringe': PhosphorIconsRegular.syringe, + 'tShirt': PhosphorIconsRegular.tShirt, + 'table': PhosphorIconsRegular.table, + 'tabs': PhosphorIconsRegular.tabs, + 'tag': PhosphorIconsRegular.tag, + 'tagChevron': PhosphorIconsRegular.tagChevron, + 'tagSimple': PhosphorIconsRegular.tagSimple, + 'target': PhosphorIconsRegular.target, + 'taxi': PhosphorIconsRegular.taxi, + 'teaBag': PhosphorIconsRegular.teaBag, + 'telegramLogo': PhosphorIconsRegular.telegramLogo, + 'television': PhosphorIconsRegular.television, + 'televisionSimple': PhosphorIconsRegular.televisionSimple, + 'tennisBall': PhosphorIconsRegular.tennisBall, + 'tent': PhosphorIconsRegular.tent, + 'terminal': PhosphorIconsRegular.terminal, + 'terminalWindow': PhosphorIconsRegular.terminalWindow, + 'testTube': PhosphorIconsRegular.testTube, + 'textAUnderline': PhosphorIconsRegular.textAUnderline, + 'textAa': PhosphorIconsRegular.textAa, + 'textAlignCenter': PhosphorIconsRegular.textAlignCenter, + 'textAlignJustify': PhosphorIconsRegular.textAlignJustify, + 'textAlignLeft': PhosphorIconsRegular.textAlignLeft, + 'textAlignRight': PhosphorIconsRegular.textAlignRight, + 'textB': PhosphorIconsRegular.textB, + 'textColumns': PhosphorIconsRegular.textColumns, + 'textH': PhosphorIconsRegular.textH, + 'textHFive': PhosphorIconsRegular.textHFive, + 'textHFour': PhosphorIconsRegular.textHFour, + 'textHOne': PhosphorIconsRegular.textHOne, + 'textHSix': PhosphorIconsRegular.textHSix, + 'textHThree': PhosphorIconsRegular.textHThree, + 'textHTwo': PhosphorIconsRegular.textHTwo, + 'textIndent': PhosphorIconsRegular.textIndent, + 'textItalic': PhosphorIconsRegular.textItalic, + 'textOutdent': PhosphorIconsRegular.textOutdent, + 'textStrikethrough': PhosphorIconsRegular.textStrikethrough, + 'textSubscript': PhosphorIconsRegular.textSubscript, + 'textSuperscript': PhosphorIconsRegular.textSuperscript, + 'textT': PhosphorIconsRegular.textT, + 'textTSlash': PhosphorIconsRegular.textTSlash, + 'textUnderline': PhosphorIconsRegular.textUnderline, + 'textbox': PhosphorIconsRegular.textbox, + 'thermometer': PhosphorIconsRegular.thermometer, + 'thermometerCold': PhosphorIconsRegular.thermometerCold, + 'thermometerHot': PhosphorIconsRegular.thermometerHot, + 'thermometerSimple': PhosphorIconsRegular.thermometerSimple, + 'threadsLogo': PhosphorIconsRegular.threadsLogo, + 'threeD': PhosphorIconsRegular.threeD, + 'thumbsDown': PhosphorIconsRegular.thumbsDown, + 'thumbsUp': PhosphorIconsRegular.thumbsUp, + 'ticket': PhosphorIconsRegular.ticket, + 'tidalLogo': PhosphorIconsRegular.tidalLogo, + 'tiktokLogo': PhosphorIconsRegular.tiktokLogo, + 'tilde': PhosphorIconsRegular.tilde, + 'timer': PhosphorIconsRegular.timer, + 'tipJar': PhosphorIconsRegular.tipJar, + 'tipi': PhosphorIconsRegular.tipi, + 'tire': PhosphorIconsRegular.tire, + 'toggleLeft': PhosphorIconsRegular.toggleLeft, + 'toggleRight': PhosphorIconsRegular.toggleRight, + 'toilet': PhosphorIconsRegular.toilet, + 'toiletPaper': PhosphorIconsRegular.toiletPaper, + 'toolbox': PhosphorIconsRegular.toolbox, + 'tooth': PhosphorIconsRegular.tooth, + 'tornado': PhosphorIconsRegular.tornado, + 'tote': PhosphorIconsRegular.tote, + 'toteSimple': PhosphorIconsRegular.toteSimple, + 'towel': PhosphorIconsRegular.towel, + 'tractor': PhosphorIconsRegular.tractor, + 'trademark': PhosphorIconsRegular.trademark, + 'trademarkRegistered': PhosphorIconsRegular.trademarkRegistered, + 'trafficCone': PhosphorIconsRegular.trafficCone, + 'trafficSign': PhosphorIconsRegular.trafficSign, + 'trafficSignal': PhosphorIconsRegular.trafficSignal, + 'train': PhosphorIconsRegular.train, + 'trainRegional': PhosphorIconsRegular.trainRegional, + 'trainSimple': PhosphorIconsRegular.trainSimple, + 'tram': PhosphorIconsRegular.tram, + 'translate': PhosphorIconsRegular.translate, + 'trash': PhosphorIconsRegular.trash, + 'trashSimple': PhosphorIconsRegular.trashSimple, + 'tray': PhosphorIconsRegular.tray, + 'trayArrowDown': PhosphorIconsRegular.trayArrowDown, + 'trayArrowUp': PhosphorIconsRegular.trayArrowUp, + 'treasureChest': PhosphorIconsRegular.treasureChest, + 'tree': PhosphorIconsRegular.tree, + 'treeEvergreen': PhosphorIconsRegular.treeEvergreen, + 'treePalm': PhosphorIconsRegular.treePalm, + 'treeStructure': PhosphorIconsRegular.treeStructure, + 'treeView': PhosphorIconsRegular.treeView, + 'trendDown': PhosphorIconsRegular.trendDown, + 'trendUp': PhosphorIconsRegular.trendUp, + 'triangle': PhosphorIconsRegular.triangle, + 'triangleDashed': PhosphorIconsRegular.triangleDashed, + 'trolley': PhosphorIconsRegular.trolley, + 'trolleySuitcase': PhosphorIconsRegular.trolleySuitcase, + 'trophy': PhosphorIconsRegular.trophy, + 'truck': PhosphorIconsRegular.truck, + 'truckTrailer': PhosphorIconsRegular.truckTrailer, + 'tumblrLogo': PhosphorIconsRegular.tumblrLogo, + 'twitchLogo': PhosphorIconsRegular.twitchLogo, + 'twitterLogo': PhosphorIconsRegular.twitterLogo, + 'umbrella': PhosphorIconsRegular.umbrella, + 'umbrellaSimple': PhosphorIconsRegular.umbrellaSimple, + 'union': PhosphorIconsRegular.union, + 'unite': PhosphorIconsRegular.unite, + 'uniteSquare': PhosphorIconsRegular.uniteSquare, + 'upload': PhosphorIconsRegular.upload, + 'uploadSimple': PhosphorIconsRegular.uploadSimple, + 'usb': PhosphorIconsRegular.usb, + 'user': PhosphorIconsRegular.user, + 'userCheck': PhosphorIconsRegular.userCheck, + 'userCircle': PhosphorIconsRegular.userCircle, + 'userCircleCheck': PhosphorIconsRegular.userCircleCheck, + 'userCircleDashed': PhosphorIconsRegular.userCircleDashed, + 'userCircleGear': PhosphorIconsRegular.userCircleGear, + 'userCircleMinus': PhosphorIconsRegular.userCircleMinus, + 'userCirclePlus': PhosphorIconsRegular.userCirclePlus, + 'userFocus': PhosphorIconsRegular.userFocus, + 'userGear': PhosphorIconsRegular.userGear, + 'userList': PhosphorIconsRegular.userList, + 'userMinus': PhosphorIconsRegular.userMinus, + 'userPlus': PhosphorIconsRegular.userPlus, + 'userRectangle': PhosphorIconsRegular.userRectangle, + 'userSound': PhosphorIconsRegular.userSound, + 'userSquare': PhosphorIconsRegular.userSquare, + 'userSwitch': PhosphorIconsRegular.userSwitch, + 'users': PhosphorIconsRegular.users, + 'usersFour': PhosphorIconsRegular.usersFour, + 'usersThree': PhosphorIconsRegular.usersThree, + 'van': PhosphorIconsRegular.van, + 'vault': PhosphorIconsRegular.vault, + 'vectorThree': PhosphorIconsRegular.vectorThree, + 'vectorTwo': PhosphorIconsRegular.vectorTwo, + 'vibrate': PhosphorIconsRegular.vibrate, + 'video': PhosphorIconsRegular.video, + 'videoCamera': PhosphorIconsRegular.videoCamera, + 'videoCameraSlash': PhosphorIconsRegular.videoCameraSlash, + 'videoConference': PhosphorIconsRegular.videoConference, + 'vignette': PhosphorIconsRegular.vignette, + 'vinylRecord': PhosphorIconsRegular.vinylRecord, + 'virtualReality': PhosphorIconsRegular.virtualReality, + 'virus': PhosphorIconsRegular.virus, + 'visor': PhosphorIconsRegular.visor, + 'voicemail': PhosphorIconsRegular.voicemail, + 'volleyball': PhosphorIconsRegular.volleyball, + 'wall': PhosphorIconsRegular.wall, + 'wallet': PhosphorIconsRegular.wallet, + 'warehouse': PhosphorIconsRegular.warehouse, + 'warning': PhosphorIconsRegular.warning, + 'warningCircle': PhosphorIconsRegular.warningCircle, + 'warningDiamond': PhosphorIconsRegular.warningDiamond, + 'warningOctagon': PhosphorIconsRegular.warningOctagon, + 'washingMachine': PhosphorIconsRegular.washingMachine, + 'watch': PhosphorIconsRegular.watch, + 'waveSawtooth': PhosphorIconsRegular.waveSawtooth, + 'waveSine': PhosphorIconsRegular.waveSine, + 'waveSquare': PhosphorIconsRegular.waveSquare, + 'waveTriangle': PhosphorIconsRegular.waveTriangle, + 'waveform': PhosphorIconsRegular.waveform, + 'waveformSlash': PhosphorIconsRegular.waveformSlash, + 'waves': PhosphorIconsRegular.waves, + 'webcam': PhosphorIconsRegular.webcam, + 'webcamSlash': PhosphorIconsRegular.webcamSlash, + 'webhooksLogo': PhosphorIconsRegular.webhooksLogo, + 'wechatLogo': PhosphorIconsRegular.wechatLogo, + 'whatsappLogo': PhosphorIconsRegular.whatsappLogo, + 'wheelchair': PhosphorIconsRegular.wheelchair, + 'wheelchairMotion': PhosphorIconsRegular.wheelchairMotion, + 'wifiHigh': PhosphorIconsRegular.wifiHigh, + 'wifiLow': PhosphorIconsRegular.wifiLow, + 'wifiMedium': PhosphorIconsRegular.wifiMedium, + 'wifiNone': PhosphorIconsRegular.wifiNone, + 'wifiSlash': PhosphorIconsRegular.wifiSlash, + 'wifiX': PhosphorIconsRegular.wifiX, + 'wind': PhosphorIconsRegular.wind, + 'windmill': PhosphorIconsRegular.windmill, + 'windowsLogo': PhosphorIconsRegular.windowsLogo, + 'wine': PhosphorIconsRegular.wine, + 'wrench': PhosphorIconsRegular.wrench, + 'x': PhosphorIconsRegular.x, + 'xCircle': PhosphorIconsRegular.xCircle, + 'xLogo': PhosphorIconsRegular.xLogo, + 'xSquare': PhosphorIconsRegular.xSquare, + 'yarn': PhosphorIconsRegular.yarn, + 'yinYang': PhosphorIconsRegular.yinYang, + 'youtubeLogo': PhosphorIconsRegular.youtubeLogo, + }; + + static final Map _iconMapBold = { + 'acorn': PhosphorIconsBold.acorn, + 'addressBook': PhosphorIconsBold.addressBook, + 'addressBookTabs': PhosphorIconsBold.addressBookTabs, + 'airTrafficControl': PhosphorIconsBold.airTrafficControl, + 'airplane': PhosphorIconsBold.airplane, + 'airplaneInFlight': PhosphorIconsBold.airplaneInFlight, + 'airplaneLanding': PhosphorIconsBold.airplaneLanding, + 'airplaneTakeoff': PhosphorIconsBold.airplaneTakeoff, + 'airplaneTaxiing': PhosphorIconsBold.airplaneTaxiing, + 'airplaneTilt': PhosphorIconsBold.airplaneTilt, + 'airplay': PhosphorIconsBold.airplay, + 'alarm': PhosphorIconsBold.alarm, + 'alien': PhosphorIconsBold.alien, + 'alignBottom': PhosphorIconsBold.alignBottom, + 'alignBottomSimple': PhosphorIconsBold.alignBottomSimple, + 'alignCenterHorizontal': PhosphorIconsBold.alignCenterHorizontal, + 'alignCenterHorizontalSimple': PhosphorIconsBold.alignCenterHorizontalSimple, + 'alignCenterVertical': PhosphorIconsBold.alignCenterVertical, + 'alignCenterVerticalSimple': PhosphorIconsBold.alignCenterVerticalSimple, + 'alignLeft': PhosphorIconsBold.alignLeft, + 'alignLeftSimple': PhosphorIconsBold.alignLeftSimple, + 'alignRight': PhosphorIconsBold.alignRight, + 'alignRightSimple': PhosphorIconsBold.alignRightSimple, + 'alignTop': PhosphorIconsBold.alignTop, + 'alignTopSimple': PhosphorIconsBold.alignTopSimple, + 'amazonLogo': PhosphorIconsBold.amazonLogo, + 'ambulance': PhosphorIconsBold.ambulance, + 'anchor': PhosphorIconsBold.anchor, + 'anchorSimple': PhosphorIconsBold.anchorSimple, + 'androidLogo': PhosphorIconsBold.androidLogo, + 'angle': PhosphorIconsBold.angle, + 'angularLogo': PhosphorIconsBold.angularLogo, + 'aperture': PhosphorIconsBold.aperture, + 'appStoreLogo': PhosphorIconsBold.appStoreLogo, + 'appWindow': PhosphorIconsBold.appWindow, + 'appleLogo': PhosphorIconsBold.appleLogo, + 'applePodcastsLogo': PhosphorIconsBold.applePodcastsLogo, + 'approximateEquals': PhosphorIconsBold.approximateEquals, + 'archive': PhosphorIconsBold.archive, + 'armchair': PhosphorIconsBold.armchair, + 'arrowArcLeft': PhosphorIconsBold.arrowArcLeft, + 'arrowArcRight': PhosphorIconsBold.arrowArcRight, + 'arrowBendDoubleUpLeft': PhosphorIconsBold.arrowBendDoubleUpLeft, + 'arrowBendDoubleUpRight': PhosphorIconsBold.arrowBendDoubleUpRight, + 'arrowBendDownLeft': PhosphorIconsBold.arrowBendDownLeft, + 'arrowBendDownRight': PhosphorIconsBold.arrowBendDownRight, + 'arrowBendLeftDown': PhosphorIconsBold.arrowBendLeftDown, + 'arrowBendLeftUp': PhosphorIconsBold.arrowBendLeftUp, + 'arrowBendRightDown': PhosphorIconsBold.arrowBendRightDown, + 'arrowBendRightUp': PhosphorIconsBold.arrowBendRightUp, + 'arrowBendUpLeft': PhosphorIconsBold.arrowBendUpLeft, + 'arrowBendUpRight': PhosphorIconsBold.arrowBendUpRight, + 'arrowCircleDown': PhosphorIconsBold.arrowCircleDown, + 'arrowCircleDownLeft': PhosphorIconsBold.arrowCircleDownLeft, + 'arrowCircleDownRight': PhosphorIconsBold.arrowCircleDownRight, + 'arrowCircleLeft': PhosphorIconsBold.arrowCircleLeft, + 'arrowCircleRight': PhosphorIconsBold.arrowCircleRight, + 'arrowCircleUp': PhosphorIconsBold.arrowCircleUp, + 'arrowCircleUpLeft': PhosphorIconsBold.arrowCircleUpLeft, + 'arrowCircleUpRight': PhosphorIconsBold.arrowCircleUpRight, + 'arrowClockwise': PhosphorIconsBold.arrowClockwise, + 'arrowCounterClockwise': PhosphorIconsBold.arrowCounterClockwise, + 'arrowDown': PhosphorIconsBold.arrowDown, + 'arrowDownLeft': PhosphorIconsBold.arrowDownLeft, + 'arrowDownRight': PhosphorIconsBold.arrowDownRight, + 'arrowElbowDownLeft': PhosphorIconsBold.arrowElbowDownLeft, + 'arrowElbowDownRight': PhosphorIconsBold.arrowElbowDownRight, + 'arrowElbowLeft': PhosphorIconsBold.arrowElbowLeft, + 'arrowElbowLeftDown': PhosphorIconsBold.arrowElbowLeftDown, + 'arrowElbowLeftUp': PhosphorIconsBold.arrowElbowLeftUp, + 'arrowElbowRight': PhosphorIconsBold.arrowElbowRight, + 'arrowElbowRightDown': PhosphorIconsBold.arrowElbowRightDown, + 'arrowElbowRightUp': PhosphorIconsBold.arrowElbowRightUp, + 'arrowElbowUpLeft': PhosphorIconsBold.arrowElbowUpLeft, + 'arrowElbowUpRight': PhosphorIconsBold.arrowElbowUpRight, + 'arrowFatDown': PhosphorIconsBold.arrowFatDown, + 'arrowFatLeft': PhosphorIconsBold.arrowFatLeft, + 'arrowFatLineDown': PhosphorIconsBold.arrowFatLineDown, + 'arrowFatLineLeft': PhosphorIconsBold.arrowFatLineLeft, + 'arrowFatLineRight': PhosphorIconsBold.arrowFatLineRight, + 'arrowFatLineUp': PhosphorIconsBold.arrowFatLineUp, + 'arrowFatLinesDown': PhosphorIconsBold.arrowFatLinesDown, + 'arrowFatLinesLeft': PhosphorIconsBold.arrowFatLinesLeft, + 'arrowFatLinesRight': PhosphorIconsBold.arrowFatLinesRight, + 'arrowFatLinesUp': PhosphorIconsBold.arrowFatLinesUp, + 'arrowFatRight': PhosphorIconsBold.arrowFatRight, + 'arrowFatUp': PhosphorIconsBold.arrowFatUp, + 'arrowLeft': PhosphorIconsBold.arrowLeft, + 'arrowLineDown': PhosphorIconsBold.arrowLineDown, + 'arrowLineDownLeft': PhosphorIconsBold.arrowLineDownLeft, + 'arrowLineDownRight': PhosphorIconsBold.arrowLineDownRight, + 'arrowLineLeft': PhosphorIconsBold.arrowLineLeft, + 'arrowLineRight': PhosphorIconsBold.arrowLineRight, + 'arrowLineUp': PhosphorIconsBold.arrowLineUp, + 'arrowLineUpLeft': PhosphorIconsBold.arrowLineUpLeft, + 'arrowLineUpRight': PhosphorIconsBold.arrowLineUpRight, + 'arrowRight': PhosphorIconsBold.arrowRight, + 'arrowSquareDown': PhosphorIconsBold.arrowSquareDown, + 'arrowSquareDownLeft': PhosphorIconsBold.arrowSquareDownLeft, + 'arrowSquareDownRight': PhosphorIconsBold.arrowSquareDownRight, + 'arrowSquareIn': PhosphorIconsBold.arrowSquareIn, + 'arrowSquareLeft': PhosphorIconsBold.arrowSquareLeft, + 'arrowSquareOut': PhosphorIconsBold.arrowSquareOut, + 'arrowSquareRight': PhosphorIconsBold.arrowSquareRight, + 'arrowSquareUp': PhosphorIconsBold.arrowSquareUp, + 'arrowSquareUpLeft': PhosphorIconsBold.arrowSquareUpLeft, + 'arrowSquareUpRight': PhosphorIconsBold.arrowSquareUpRight, + 'arrowUDownLeft': PhosphorIconsBold.arrowUDownLeft, + 'arrowUDownRight': PhosphorIconsBold.arrowUDownRight, + 'arrowULeftDown': PhosphorIconsBold.arrowULeftDown, + 'arrowULeftUp': PhosphorIconsBold.arrowULeftUp, + 'arrowURightDown': PhosphorIconsBold.arrowURightDown, + 'arrowURightUp': PhosphorIconsBold.arrowURightUp, + 'arrowUUpLeft': PhosphorIconsBold.arrowUUpLeft, + 'arrowUUpRight': PhosphorIconsBold.arrowUUpRight, + 'arrowUp': PhosphorIconsBold.arrowUp, + 'arrowUpLeft': PhosphorIconsBold.arrowUpLeft, + 'arrowUpRight': PhosphorIconsBold.arrowUpRight, + 'arrowsClockwise': PhosphorIconsBold.arrowsClockwise, + 'arrowsCounterClockwise': PhosphorIconsBold.arrowsCounterClockwise, + 'arrowsDownUp': PhosphorIconsBold.arrowsDownUp, + 'arrowsHorizontal': PhosphorIconsBold.arrowsHorizontal, + 'arrowsIn': PhosphorIconsBold.arrowsIn, + 'arrowsInCardinal': PhosphorIconsBold.arrowsInCardinal, + 'arrowsInLineHorizontal': PhosphorIconsBold.arrowsInLineHorizontal, + 'arrowsInLineVertical': PhosphorIconsBold.arrowsInLineVertical, + 'arrowsInSimple': PhosphorIconsBold.arrowsInSimple, + 'arrowsLeftRight': PhosphorIconsBold.arrowsLeftRight, + 'arrowsMerge': PhosphorIconsBold.arrowsMerge, + 'arrowsOut': PhosphorIconsBold.arrowsOut, + 'arrowsOutCardinal': PhosphorIconsBold.arrowsOutCardinal, + 'arrowsOutLineHorizontal': PhosphorIconsBold.arrowsOutLineHorizontal, + 'arrowsOutLineVertical': PhosphorIconsBold.arrowsOutLineVertical, + 'arrowsOutSimple': PhosphorIconsBold.arrowsOutSimple, + 'arrowsSplit': PhosphorIconsBold.arrowsSplit, + 'arrowsVertical': PhosphorIconsBold.arrowsVertical, + 'article': PhosphorIconsBold.article, + 'articleMedium': PhosphorIconsBold.articleMedium, + 'articleNyTimes': PhosphorIconsBold.articleNyTimes, + 'asclepius': PhosphorIconsBold.asclepius, + 'asterisk': PhosphorIconsBold.asterisk, + 'asteriskSimple': PhosphorIconsBold.asteriskSimple, + 'at': PhosphorIconsBold.at, + 'atom': PhosphorIconsBold.atom, + 'avocado': PhosphorIconsBold.avocado, + 'axe': PhosphorIconsBold.axe, + 'baby': PhosphorIconsBold.baby, + 'babyCarriage': PhosphorIconsBold.babyCarriage, + 'backpack': PhosphorIconsBold.backpack, + 'backspace': PhosphorIconsBold.backspace, + 'bag': PhosphorIconsBold.bag, + 'bagSimple': PhosphorIconsBold.bagSimple, + 'balloon': PhosphorIconsBold.balloon, + 'bandaids': PhosphorIconsBold.bandaids, + 'bank': PhosphorIconsBold.bank, + 'barbell': PhosphorIconsBold.barbell, + 'barcode': PhosphorIconsBold.barcode, + 'barn': PhosphorIconsBold.barn, + 'barricade': PhosphorIconsBold.barricade, + 'baseball': PhosphorIconsBold.baseball, + 'baseballCap': PhosphorIconsBold.baseballCap, + 'baseballHelmet': PhosphorIconsBold.baseballHelmet, + 'basket': PhosphorIconsBold.basket, + 'basketball': PhosphorIconsBold.basketball, + 'bathtub': PhosphorIconsBold.bathtub, + 'batteryCharging': PhosphorIconsBold.batteryCharging, + 'batteryChargingVertical': PhosphorIconsBold.batteryChargingVertical, + 'batteryEmpty': PhosphorIconsBold.batteryEmpty, + 'batteryFull': PhosphorIconsBold.batteryFull, + 'batteryHigh': PhosphorIconsBold.batteryHigh, + 'batteryLow': PhosphorIconsBold.batteryLow, + 'batteryMedium': PhosphorIconsBold.batteryMedium, + 'batteryPlus': PhosphorIconsBold.batteryPlus, + 'batteryPlusVertical': PhosphorIconsBold.batteryPlusVertical, + 'batteryVerticalEmpty': PhosphorIconsBold.batteryVerticalEmpty, + 'batteryVerticalFull': PhosphorIconsBold.batteryVerticalFull, + 'batteryVerticalHigh': PhosphorIconsBold.batteryVerticalHigh, + 'batteryVerticalLow': PhosphorIconsBold.batteryVerticalLow, + 'batteryVerticalMedium': PhosphorIconsBold.batteryVerticalMedium, + 'batteryWarning': PhosphorIconsBold.batteryWarning, + 'batteryWarningVertical': PhosphorIconsBold.batteryWarningVertical, + 'beachBall': PhosphorIconsBold.beachBall, + 'beanie': PhosphorIconsBold.beanie, + 'bed': PhosphorIconsBold.bed, + 'beerBottle': PhosphorIconsBold.beerBottle, + 'beerStein': PhosphorIconsBold.beerStein, + 'behanceLogo': PhosphorIconsBold.behanceLogo, + 'bell': PhosphorIconsBold.bell, + 'bellRinging': PhosphorIconsBold.bellRinging, + 'bellSimple': PhosphorIconsBold.bellSimple, + 'bellSimpleRinging': PhosphorIconsBold.bellSimpleRinging, + 'bellSimpleSlash': PhosphorIconsBold.bellSimpleSlash, + 'bellSimpleZ': PhosphorIconsBold.bellSimpleZ, + 'bellSlash': PhosphorIconsBold.bellSlash, + 'bellZ': PhosphorIconsBold.bellZ, + 'belt': PhosphorIconsBold.belt, + 'bezierCurve': PhosphorIconsBold.bezierCurve, + 'bicycle': PhosphorIconsBold.bicycle, + 'binary': PhosphorIconsBold.binary, + 'binoculars': PhosphorIconsBold.binoculars, + 'biohazard': PhosphorIconsBold.biohazard, + 'bird': PhosphorIconsBold.bird, + 'blueprint': PhosphorIconsBold.blueprint, + 'bluetooth': PhosphorIconsBold.bluetooth, + 'bluetoothConnected': PhosphorIconsBold.bluetoothConnected, + 'bluetoothSlash': PhosphorIconsBold.bluetoothSlash, + 'bluetoothX': PhosphorIconsBold.bluetoothX, + 'boat': PhosphorIconsBold.boat, + 'bomb': PhosphorIconsBold.bomb, + 'bone': PhosphorIconsBold.bone, + 'book': PhosphorIconsBold.book, + 'bookBookmark': PhosphorIconsBold.bookBookmark, + 'bookOpen': PhosphorIconsBold.bookOpen, + 'bookOpenText': PhosphorIconsBold.bookOpenText, + 'bookOpenUser': PhosphorIconsBold.bookOpenUser, + 'bookmark': PhosphorIconsBold.bookmark, + 'bookmarkSimple': PhosphorIconsBold.bookmarkSimple, + 'bookmarks': PhosphorIconsBold.bookmarks, + 'bookmarksSimple': PhosphorIconsBold.bookmarksSimple, + 'books': PhosphorIconsBold.books, + 'boot': PhosphorIconsBold.boot, + 'boules': PhosphorIconsBold.boules, + 'boundingBox': PhosphorIconsBold.boundingBox, + 'bowlFood': PhosphorIconsBold.bowlFood, + 'bowlSteam': PhosphorIconsBold.bowlSteam, + 'bowlingBall': PhosphorIconsBold.bowlingBall, + 'boxArrowDown': PhosphorIconsBold.boxArrowDown, + 'boxArrowUp': PhosphorIconsBold.boxArrowUp, + 'boxingGlove': PhosphorIconsBold.boxingGlove, + 'bracketsAngle': PhosphorIconsBold.bracketsAngle, + 'bracketsCurly': PhosphorIconsBold.bracketsCurly, + 'bracketsRound': PhosphorIconsBold.bracketsRound, + 'bracketsSquare': PhosphorIconsBold.bracketsSquare, + 'brain': PhosphorIconsBold.brain, + 'brandy': PhosphorIconsBold.brandy, + 'bread': PhosphorIconsBold.bread, + 'bridge': PhosphorIconsBold.bridge, + 'briefcase': PhosphorIconsBold.briefcase, + 'briefcaseMetal': PhosphorIconsBold.briefcaseMetal, + 'broadcast': PhosphorIconsBold.broadcast, + 'broom': PhosphorIconsBold.broom, + 'browser': PhosphorIconsBold.browser, + 'browsers': PhosphorIconsBold.browsers, + 'bug': PhosphorIconsBold.bug, + 'bugBeetle': PhosphorIconsBold.bugBeetle, + 'bugDroid': PhosphorIconsBold.bugDroid, + 'building': PhosphorIconsBold.building, + 'buildingApartment': PhosphorIconsBold.buildingApartment, + 'buildingOffice': PhosphorIconsBold.buildingOffice, + 'buildings': PhosphorIconsBold.buildings, + 'bulldozer': PhosphorIconsBold.bulldozer, + 'bus': PhosphorIconsBold.bus, + 'butterfly': PhosphorIconsBold.butterfly, + 'cableCar': PhosphorIconsBold.cableCar, + 'cactus': PhosphorIconsBold.cactus, + 'cake': PhosphorIconsBold.cake, + 'calculator': PhosphorIconsBold.calculator, + 'calendar': PhosphorIconsBold.calendar, + 'calendarBlank': PhosphorIconsBold.calendarBlank, + 'calendarCheck': PhosphorIconsBold.calendarCheck, + 'calendarDot': PhosphorIconsBold.calendarDot, + 'calendarDots': PhosphorIconsBold.calendarDots, + 'calendarHeart': PhosphorIconsBold.calendarHeart, + 'calendarMinus': PhosphorIconsBold.calendarMinus, + 'calendarPlus': PhosphorIconsBold.calendarPlus, + 'calendarSlash': PhosphorIconsBold.calendarSlash, + 'calendarStar': PhosphorIconsBold.calendarStar, + 'calendarX': PhosphorIconsBold.calendarX, + 'callBell': PhosphorIconsBold.callBell, + 'camera': PhosphorIconsBold.camera, + 'cameraPlus': PhosphorIconsBold.cameraPlus, + 'cameraRotate': PhosphorIconsBold.cameraRotate, + 'cameraSlash': PhosphorIconsBold.cameraSlash, + 'campfire': PhosphorIconsBold.campfire, + 'car': PhosphorIconsBold.car, + 'carBattery': PhosphorIconsBold.carBattery, + 'carProfile': PhosphorIconsBold.carProfile, + 'carSimple': PhosphorIconsBold.carSimple, + 'cardholder': PhosphorIconsBold.cardholder, + 'cards': PhosphorIconsBold.cards, + 'cardsThree': PhosphorIconsBold.cardsThree, + 'caretCircleDoubleDown': PhosphorIconsBold.caretCircleDoubleDown, + 'caretCircleDoubleLeft': PhosphorIconsBold.caretCircleDoubleLeft, + 'caretCircleDoubleRight': PhosphorIconsBold.caretCircleDoubleRight, + 'caretCircleDoubleUp': PhosphorIconsBold.caretCircleDoubleUp, + 'caretCircleDown': PhosphorIconsBold.caretCircleDown, + 'caretCircleLeft': PhosphorIconsBold.caretCircleLeft, + 'caretCircleRight': PhosphorIconsBold.caretCircleRight, + 'caretCircleUp': PhosphorIconsBold.caretCircleUp, + 'caretCircleUpDown': PhosphorIconsBold.caretCircleUpDown, + 'caretDoubleDown': PhosphorIconsBold.caretDoubleDown, + 'caretDoubleLeft': PhosphorIconsBold.caretDoubleLeft, + 'caretDoubleRight': PhosphorIconsBold.caretDoubleRight, + 'caretDoubleUp': PhosphorIconsBold.caretDoubleUp, + 'caretDown': PhosphorIconsBold.caretDown, + 'caretLeft': PhosphorIconsBold.caretLeft, + 'caretLineDown': PhosphorIconsBold.caretLineDown, + 'caretLineLeft': PhosphorIconsBold.caretLineLeft, + 'caretLineRight': PhosphorIconsBold.caretLineRight, + 'caretLineUp': PhosphorIconsBold.caretLineUp, + 'caretRight': PhosphorIconsBold.caretRight, + 'caretUp': PhosphorIconsBold.caretUp, + 'caretUpDown': PhosphorIconsBold.caretUpDown, + 'carrot': PhosphorIconsBold.carrot, + 'cashRegister': PhosphorIconsBold.cashRegister, + 'cassetteTape': PhosphorIconsBold.cassetteTape, + 'castleTurret': PhosphorIconsBold.castleTurret, + 'cat': PhosphorIconsBold.cat, + 'cellSignalFull': PhosphorIconsBold.cellSignalFull, + 'cellSignalHigh': PhosphorIconsBold.cellSignalHigh, + 'cellSignalLow': PhosphorIconsBold.cellSignalLow, + 'cellSignalMedium': PhosphorIconsBold.cellSignalMedium, + 'cellSignalNone': PhosphorIconsBold.cellSignalNone, + 'cellSignalSlash': PhosphorIconsBold.cellSignalSlash, + 'cellSignalX': PhosphorIconsBold.cellSignalX, + 'cellTower': PhosphorIconsBold.cellTower, + 'certificate': PhosphorIconsBold.certificate, + 'chair': PhosphorIconsBold.chair, + 'chalkboard': PhosphorIconsBold.chalkboard, + 'chalkboardSimple': PhosphorIconsBold.chalkboardSimple, + 'chalkboardTeacher': PhosphorIconsBold.chalkboardTeacher, + 'champagne': PhosphorIconsBold.champagne, + 'chargingStation': PhosphorIconsBold.chargingStation, + 'chartBar': PhosphorIconsBold.chartBar, + 'chartBarHorizontal': PhosphorIconsBold.chartBarHorizontal, + 'chartDonut': PhosphorIconsBold.chartDonut, + 'chartLine': PhosphorIconsBold.chartLine, + 'chartLineDown': PhosphorIconsBold.chartLineDown, + 'chartLineUp': PhosphorIconsBold.chartLineUp, + 'chartPie': PhosphorIconsBold.chartPie, + 'chartPieSlice': PhosphorIconsBold.chartPieSlice, + 'chartPolar': PhosphorIconsBold.chartPolar, + 'chartScatter': PhosphorIconsBold.chartScatter, + 'chat': PhosphorIconsBold.chat, + 'chatCentered': PhosphorIconsBold.chatCentered, + 'chatCenteredDots': PhosphorIconsBold.chatCenteredDots, + 'chatCenteredSlash': PhosphorIconsBold.chatCenteredSlash, + 'chatCenteredText': PhosphorIconsBold.chatCenteredText, + 'chatCircle': PhosphorIconsBold.chatCircle, + 'chatCircleDots': PhosphorIconsBold.chatCircleDots, + 'chatCircleSlash': PhosphorIconsBold.chatCircleSlash, + 'chatCircleText': PhosphorIconsBold.chatCircleText, + 'chatDots': PhosphorIconsBold.chatDots, + 'chatSlash': PhosphorIconsBold.chatSlash, + 'chatTeardrop': PhosphorIconsBold.chatTeardrop, + 'chatTeardropDots': PhosphorIconsBold.chatTeardropDots, + 'chatTeardropSlash': PhosphorIconsBold.chatTeardropSlash, + 'chatTeardropText': PhosphorIconsBold.chatTeardropText, + 'chatText': PhosphorIconsBold.chatText, + 'chats': PhosphorIconsBold.chats, + 'chatsCircle': PhosphorIconsBold.chatsCircle, + 'chatsTeardrop': PhosphorIconsBold.chatsTeardrop, + 'check': PhosphorIconsBold.check, + 'checkCircle': PhosphorIconsBold.checkCircle, + 'checkFat': PhosphorIconsBold.checkFat, + 'checkSquare': PhosphorIconsBold.checkSquare, + 'checkSquareOffset': PhosphorIconsBold.checkSquareOffset, + 'checkerboard': PhosphorIconsBold.checkerboard, + 'checks': PhosphorIconsBold.checks, + 'cheers': PhosphorIconsBold.cheers, + 'cheese': PhosphorIconsBold.cheese, + 'chefHat': PhosphorIconsBold.chefHat, + 'cherries': PhosphorIconsBold.cherries, + 'church': PhosphorIconsBold.church, + 'cigarette': PhosphorIconsBold.cigarette, + 'cigaretteSlash': PhosphorIconsBold.cigaretteSlash, + 'circle': PhosphorIconsBold.circle, + 'circleDashed': PhosphorIconsBold.circleDashed, + 'circleHalf': PhosphorIconsBold.circleHalf, + 'circleHalfTilt': PhosphorIconsBold.circleHalfTilt, + 'circleNotch': PhosphorIconsBold.circleNotch, + 'circlesFour': PhosphorIconsBold.circlesFour, + 'circlesThree': PhosphorIconsBold.circlesThree, + 'circlesThreePlus': PhosphorIconsBold.circlesThreePlus, + 'circuitry': PhosphorIconsBold.circuitry, + 'city': PhosphorIconsBold.city, + 'clipboard': PhosphorIconsBold.clipboard, + 'clipboardText': PhosphorIconsBold.clipboardText, + 'clock': PhosphorIconsBold.clock, + 'clockAfternoon': PhosphorIconsBold.clockAfternoon, + 'clockClockwise': PhosphorIconsBold.clockClockwise, + 'clockCountdown': PhosphorIconsBold.clockCountdown, + 'clockCounterClockwise': PhosphorIconsBold.clockCounterClockwise, + 'clockUser': PhosphorIconsBold.clockUser, + 'closedCaptioning': PhosphorIconsBold.closedCaptioning, + 'cloud': PhosphorIconsBold.cloud, + 'cloudArrowDown': PhosphorIconsBold.cloudArrowDown, + 'cloudArrowUp': PhosphorIconsBold.cloudArrowUp, + 'cloudCheck': PhosphorIconsBold.cloudCheck, + 'cloudFog': PhosphorIconsBold.cloudFog, + 'cloudLightning': PhosphorIconsBold.cloudLightning, + 'cloudMoon': PhosphorIconsBold.cloudMoon, + 'cloudRain': PhosphorIconsBold.cloudRain, + 'cloudSlash': PhosphorIconsBold.cloudSlash, + 'cloudSun': PhosphorIconsBold.cloudSun, + 'cloudWarning': PhosphorIconsBold.cloudWarning, + 'cloudX': PhosphorIconsBold.cloudX, + 'clover': PhosphorIconsBold.clover, + 'club': PhosphorIconsBold.club, + 'coatHanger': PhosphorIconsBold.coatHanger, + 'codaLogo': PhosphorIconsBold.codaLogo, + 'code': PhosphorIconsBold.code, + 'codeBlock': PhosphorIconsBold.codeBlock, + 'codeSimple': PhosphorIconsBold.codeSimple, + 'codepenLogo': PhosphorIconsBold.codepenLogo, + 'codesandboxLogo': PhosphorIconsBold.codesandboxLogo, + 'coffee': PhosphorIconsBold.coffee, + 'coffeeBean': PhosphorIconsBold.coffeeBean, + 'coin': PhosphorIconsBold.coin, + 'coinVertical': PhosphorIconsBold.coinVertical, + 'coins': PhosphorIconsBold.coins, + 'columns': PhosphorIconsBold.columns, + 'columnsPlusLeft': PhosphorIconsBold.columnsPlusLeft, + 'columnsPlusRight': PhosphorIconsBold.columnsPlusRight, + 'command': PhosphorIconsBold.command, + 'compass': PhosphorIconsBold.compass, + 'compassRose': PhosphorIconsBold.compassRose, + 'compassTool': PhosphorIconsBold.compassTool, + 'computerTower': PhosphorIconsBold.computerTower, + 'confetti': PhosphorIconsBold.confetti, + 'contactlessPayment': PhosphorIconsBold.contactlessPayment, + 'control': PhosphorIconsBold.control, + 'cookie': PhosphorIconsBold.cookie, + 'cookingPot': PhosphorIconsBold.cookingPot, + 'copy': PhosphorIconsBold.copy, + 'copySimple': PhosphorIconsBold.copySimple, + 'copyleft': PhosphorIconsBold.copyleft, + 'copyright': PhosphorIconsBold.copyright, + 'cornersIn': PhosphorIconsBold.cornersIn, + 'cornersOut': PhosphorIconsBold.cornersOut, + 'couch': PhosphorIconsBold.couch, + 'courtBasketball': PhosphorIconsBold.courtBasketball, + 'cow': PhosphorIconsBold.cow, + 'cowboyHat': PhosphorIconsBold.cowboyHat, + 'cpu': PhosphorIconsBold.cpu, + 'crane': PhosphorIconsBold.crane, + 'craneTower': PhosphorIconsBold.craneTower, + 'creditCard': PhosphorIconsBold.creditCard, + 'cricket': PhosphorIconsBold.cricket, + 'crop': PhosphorIconsBold.crop, + 'cross': PhosphorIconsBold.cross, + 'crosshair': PhosphorIconsBold.crosshair, + 'crosshairSimple': PhosphorIconsBold.crosshairSimple, + 'crown': PhosphorIconsBold.crown, + 'crownCross': PhosphorIconsBold.crownCross, + 'crownSimple': PhosphorIconsBold.crownSimple, + 'cube': PhosphorIconsBold.cube, + 'cubeFocus': PhosphorIconsBold.cubeFocus, + 'cubeTransparent': PhosphorIconsBold.cubeTransparent, + 'currencyBtc': PhosphorIconsBold.currencyBtc, + 'currencyCircleDollar': PhosphorIconsBold.currencyCircleDollar, + 'currencyCny': PhosphorIconsBold.currencyCny, + 'currencyDollar': PhosphorIconsBold.currencyDollar, + 'currencyDollarSimple': PhosphorIconsBold.currencyDollarSimple, + 'currencyEth': PhosphorIconsBold.currencyEth, + 'currencyEur': PhosphorIconsBold.currencyEur, + 'currencyGbp': PhosphorIconsBold.currencyGbp, + 'currencyInr': PhosphorIconsBold.currencyInr, + 'currencyJpy': PhosphorIconsBold.currencyJpy, + 'currencyKrw': PhosphorIconsBold.currencyKrw, + 'currencyKzt': PhosphorIconsBold.currencyKzt, + 'currencyNgn': PhosphorIconsBold.currencyNgn, + 'currencyRub': PhosphorIconsBold.currencyRub, + 'cursor': PhosphorIconsBold.cursor, + 'cursorClick': PhosphorIconsBold.cursorClick, + 'cursorText': PhosphorIconsBold.cursorText, + 'cylinder': PhosphorIconsBold.cylinder, + 'database': PhosphorIconsBold.database, + 'desk': PhosphorIconsBold.desk, + 'desktop': PhosphorIconsBold.desktop, + 'desktopTower': PhosphorIconsBold.desktopTower, + 'detective': PhosphorIconsBold.detective, + 'devToLogo': PhosphorIconsBold.devToLogo, + 'deviceMobile': PhosphorIconsBold.deviceMobile, + 'deviceMobileCamera': PhosphorIconsBold.deviceMobileCamera, + 'deviceMobileSlash': PhosphorIconsBold.deviceMobileSlash, + 'deviceMobileSpeaker': PhosphorIconsBold.deviceMobileSpeaker, + 'deviceRotate': PhosphorIconsBold.deviceRotate, + 'deviceTablet': PhosphorIconsBold.deviceTablet, + 'deviceTabletCamera': PhosphorIconsBold.deviceTabletCamera, + 'deviceTabletSpeaker': PhosphorIconsBold.deviceTabletSpeaker, + 'devices': PhosphorIconsBold.devices, + 'diamond': PhosphorIconsBold.diamond, + 'diamondsFour': PhosphorIconsBold.diamondsFour, + 'diceFive': PhosphorIconsBold.diceFive, + 'diceFour': PhosphorIconsBold.diceFour, + 'diceOne': PhosphorIconsBold.diceOne, + 'diceSix': PhosphorIconsBold.diceSix, + 'diceThree': PhosphorIconsBold.diceThree, + 'diceTwo': PhosphorIconsBold.diceTwo, + 'disc': PhosphorIconsBold.disc, + 'discoBall': PhosphorIconsBold.discoBall, + 'discordLogo': PhosphorIconsBold.discordLogo, + 'divide': PhosphorIconsBold.divide, + 'dna': PhosphorIconsBold.dna, + 'dog': PhosphorIconsBold.dog, + 'door': PhosphorIconsBold.door, + 'doorOpen': PhosphorIconsBold.doorOpen, + 'dot': PhosphorIconsBold.dot, + 'dotOutline': PhosphorIconsBold.dotOutline, + 'dotsNine': PhosphorIconsBold.dotsNine, + 'dotsSix': PhosphorIconsBold.dotsSix, + 'dotsSixVertical': PhosphorIconsBold.dotsSixVertical, + 'dotsThree': PhosphorIconsBold.dotsThree, + 'dotsThreeCircle': PhosphorIconsBold.dotsThreeCircle, + 'dotsThreeCircleVertical': PhosphorIconsBold.dotsThreeCircleVertical, + 'dotsThreeOutline': PhosphorIconsBold.dotsThreeOutline, + 'dotsThreeOutlineVertical': PhosphorIconsBold.dotsThreeOutlineVertical, + 'dotsThreeVertical': PhosphorIconsBold.dotsThreeVertical, + 'download': PhosphorIconsBold.download, + 'downloadSimple': PhosphorIconsBold.downloadSimple, + 'dress': PhosphorIconsBold.dress, + 'dresser': PhosphorIconsBold.dresser, + 'dribbbleLogo': PhosphorIconsBold.dribbbleLogo, + 'drone': PhosphorIconsBold.drone, + 'drop': PhosphorIconsBold.drop, + 'dropHalf': PhosphorIconsBold.dropHalf, + 'dropHalfBottom': PhosphorIconsBold.dropHalfBottom, + 'dropSimple': PhosphorIconsBold.dropSimple, + 'dropSlash': PhosphorIconsBold.dropSlash, + 'dropboxLogo': PhosphorIconsBold.dropboxLogo, + 'ear': PhosphorIconsBold.ear, + 'earSlash': PhosphorIconsBold.earSlash, + 'egg': PhosphorIconsBold.egg, + 'eggCrack': PhosphorIconsBold.eggCrack, + 'eject': PhosphorIconsBold.eject, + 'ejectSimple': PhosphorIconsBold.ejectSimple, + 'elevator': PhosphorIconsBold.elevator, + 'empty': PhosphorIconsBold.empty, + 'engine': PhosphorIconsBold.engine, + 'envelope': PhosphorIconsBold.envelope, + 'envelopeOpen': PhosphorIconsBold.envelopeOpen, + 'envelopeSimple': PhosphorIconsBold.envelopeSimple, + 'envelopeSimpleOpen': PhosphorIconsBold.envelopeSimpleOpen, + 'equalizer': PhosphorIconsBold.equalizer, + 'equals': PhosphorIconsBold.equals, + 'eraser': PhosphorIconsBold.eraser, + 'escalatorDown': PhosphorIconsBold.escalatorDown, + 'escalatorUp': PhosphorIconsBold.escalatorUp, + 'exam': PhosphorIconsBold.exam, + 'exclamationMark': PhosphorIconsBold.exclamationMark, + 'exclude': PhosphorIconsBold.exclude, + 'excludeSquare': PhosphorIconsBold.excludeSquare, + 'export': PhosphorIconsBold.export, + 'eye': PhosphorIconsBold.eye, + 'eyeClosed': PhosphorIconsBold.eyeClosed, + 'eyeSlash': PhosphorIconsBold.eyeSlash, + 'eyedropper': PhosphorIconsBold.eyedropper, + 'eyedropperSample': PhosphorIconsBold.eyedropperSample, + 'eyeglasses': PhosphorIconsBold.eyeglasses, + 'eyes': PhosphorIconsBold.eyes, + 'faceMask': PhosphorIconsBold.faceMask, + 'facebookLogo': PhosphorIconsBold.facebookLogo, + 'factory': PhosphorIconsBold.factory, + 'faders': PhosphorIconsBold.faders, + 'fadersHorizontal': PhosphorIconsBold.fadersHorizontal, + 'falloutShelter': PhosphorIconsBold.falloutShelter, + 'fan': PhosphorIconsBold.fan, + 'farm': PhosphorIconsBold.farm, + 'fastForward': PhosphorIconsBold.fastForward, + 'fastForwardCircle': PhosphorIconsBold.fastForwardCircle, + 'feather': PhosphorIconsBold.feather, + 'fediverseLogo': PhosphorIconsBold.fediverseLogo, + 'figmaLogo': PhosphorIconsBold.figmaLogo, + 'file': PhosphorIconsBold.file, + 'fileArchive': PhosphorIconsBold.fileArchive, + 'fileArrowDown': PhosphorIconsBold.fileArrowDown, + 'fileArrowUp': PhosphorIconsBold.fileArrowUp, + 'fileAudio': PhosphorIconsBold.fileAudio, + 'fileC': PhosphorIconsBold.fileC, + 'fileCSharp': PhosphorIconsBold.fileCSharp, + 'fileCloud': PhosphorIconsBold.fileCloud, + 'fileCode': PhosphorIconsBold.fileCode, + 'fileCpp': PhosphorIconsBold.fileCpp, + 'fileCss': PhosphorIconsBold.fileCss, + 'fileCsv': PhosphorIconsBold.fileCsv, + 'fileDashed': PhosphorIconsBold.fileDashed, + 'fileDoc': PhosphorIconsBold.fileDoc, + 'fileHtml': PhosphorIconsBold.fileHtml, + 'fileImage': PhosphorIconsBold.fileImage, + 'fileIni': PhosphorIconsBold.fileIni, + 'fileJpg': PhosphorIconsBold.fileJpg, + 'fileJs': PhosphorIconsBold.fileJs, + 'fileJsx': PhosphorIconsBold.fileJsx, + 'fileLock': PhosphorIconsBold.fileLock, + 'fileMagnifyingGlass': PhosphorIconsBold.fileMagnifyingGlass, + 'fileMd': PhosphorIconsBold.fileMd, + 'fileMinus': PhosphorIconsBold.fileMinus, + 'filePdf': PhosphorIconsBold.filePdf, + 'filePlus': PhosphorIconsBold.filePlus, + 'filePng': PhosphorIconsBold.filePng, + 'filePpt': PhosphorIconsBold.filePpt, + 'filePy': PhosphorIconsBold.filePy, + 'fileRs': PhosphorIconsBold.fileRs, + 'fileSql': PhosphorIconsBold.fileSql, + 'fileSvg': PhosphorIconsBold.fileSvg, + 'fileText': PhosphorIconsBold.fileText, + 'fileTs': PhosphorIconsBold.fileTs, + 'fileTsx': PhosphorIconsBold.fileTsx, + 'fileTxt': PhosphorIconsBold.fileTxt, + 'fileVideo': PhosphorIconsBold.fileVideo, + 'fileVue': PhosphorIconsBold.fileVue, + 'fileX': PhosphorIconsBold.fileX, + 'fileXls': PhosphorIconsBold.fileXls, + 'fileZip': PhosphorIconsBold.fileZip, + 'files': PhosphorIconsBold.files, + 'filmReel': PhosphorIconsBold.filmReel, + 'filmScript': PhosphorIconsBold.filmScript, + 'filmSlate': PhosphorIconsBold.filmSlate, + 'filmStrip': PhosphorIconsBold.filmStrip, + 'fingerprint': PhosphorIconsBold.fingerprint, + 'fingerprintSimple': PhosphorIconsBold.fingerprintSimple, + 'finnTheHuman': PhosphorIconsBold.finnTheHuman, + 'fire': PhosphorIconsBold.fire, + 'fireExtinguisher': PhosphorIconsBold.fireExtinguisher, + 'fireSimple': PhosphorIconsBold.fireSimple, + 'fireTruck': PhosphorIconsBold.fireTruck, + 'firstAid': PhosphorIconsBold.firstAid, + 'firstAidKit': PhosphorIconsBold.firstAidKit, + 'fish': PhosphorIconsBold.fish, + 'fishSimple': PhosphorIconsBold.fishSimple, + 'flag': PhosphorIconsBold.flag, + 'flagBanner': PhosphorIconsBold.flagBanner, + 'flagBannerFold': PhosphorIconsBold.flagBannerFold, + 'flagCheckered': PhosphorIconsBold.flagCheckered, + 'flagPennant': PhosphorIconsBold.flagPennant, + 'flame': PhosphorIconsBold.flame, + 'flashlight': PhosphorIconsBold.flashlight, + 'flask': PhosphorIconsBold.flask, + 'flipHorizontal': PhosphorIconsBold.flipHorizontal, + 'flipVertical': PhosphorIconsBold.flipVertical, + 'floppyDisk': PhosphorIconsBold.floppyDisk, + 'floppyDiskBack': PhosphorIconsBold.floppyDiskBack, + 'flowArrow': PhosphorIconsBold.flowArrow, + 'flower': PhosphorIconsBold.flower, + 'flowerLotus': PhosphorIconsBold.flowerLotus, + 'flowerTulip': PhosphorIconsBold.flowerTulip, + 'flyingSaucer': PhosphorIconsBold.flyingSaucer, + 'folder': PhosphorIconsBold.folder, + 'folderDashed': PhosphorIconsBold.folderDashed, + 'folderLock': PhosphorIconsBold.folderLock, + 'folderMinus': PhosphorIconsBold.folderMinus, + 'folderOpen': PhosphorIconsBold.folderOpen, + 'folderPlus': PhosphorIconsBold.folderPlus, + 'folderSimple': PhosphorIconsBold.folderSimple, + 'folderSimpleDashed': PhosphorIconsBold.folderSimpleDashed, + 'folderSimpleLock': PhosphorIconsBold.folderSimpleLock, + 'folderSimpleMinus': PhosphorIconsBold.folderSimpleMinus, + 'folderSimplePlus': PhosphorIconsBold.folderSimplePlus, + 'folderSimpleStar': PhosphorIconsBold.folderSimpleStar, + 'folderSimpleUser': PhosphorIconsBold.folderSimpleUser, + 'folderStar': PhosphorIconsBold.folderStar, + 'folderUser': PhosphorIconsBold.folderUser, + 'folders': PhosphorIconsBold.folders, + 'football': PhosphorIconsBold.football, + 'footballHelmet': PhosphorIconsBold.footballHelmet, + 'footprints': PhosphorIconsBold.footprints, + 'forkKnife': PhosphorIconsBold.forkKnife, + 'fourK': PhosphorIconsBold.fourK, + 'frameCorners': PhosphorIconsBold.frameCorners, + 'framerLogo': PhosphorIconsBold.framerLogo, + 'function': PhosphorIconsBold.function, + 'funnel': PhosphorIconsBold.funnel, + 'funnelSimple': PhosphorIconsBold.funnelSimple, + 'funnelSimpleX': PhosphorIconsBold.funnelSimpleX, + 'funnelX': PhosphorIconsBold.funnelX, + 'gameController': PhosphorIconsBold.gameController, + 'garage': PhosphorIconsBold.garage, + 'gasCan': PhosphorIconsBold.gasCan, + 'gasPump': PhosphorIconsBold.gasPump, + 'gauge': PhosphorIconsBold.gauge, + 'gavel': PhosphorIconsBold.gavel, + 'gear': PhosphorIconsBold.gear, + 'gearFine': PhosphorIconsBold.gearFine, + 'gearSix': PhosphorIconsBold.gearSix, + 'genderFemale': PhosphorIconsBold.genderFemale, + 'genderIntersex': PhosphorIconsBold.genderIntersex, + 'genderMale': PhosphorIconsBold.genderMale, + 'genderNeuter': PhosphorIconsBold.genderNeuter, + 'genderNonbinary': PhosphorIconsBold.genderNonbinary, + 'genderTransgender': PhosphorIconsBold.genderTransgender, + 'ghost': PhosphorIconsBold.ghost, + 'gif': PhosphorIconsBold.gif, + 'gift': PhosphorIconsBold.gift, + 'gitBranch': PhosphorIconsBold.gitBranch, + 'gitCommit': PhosphorIconsBold.gitCommit, + 'gitDiff': PhosphorIconsBold.gitDiff, + 'gitFork': PhosphorIconsBold.gitFork, + 'gitMerge': PhosphorIconsBold.gitMerge, + 'gitPullRequest': PhosphorIconsBold.gitPullRequest, + 'githubLogo': PhosphorIconsBold.githubLogo, + 'gitlabLogo': PhosphorIconsBold.gitlabLogo, + 'gitlabLogoSimple': PhosphorIconsBold.gitlabLogoSimple, + 'globe': PhosphorIconsBold.globe, + 'globeHemisphereEast': PhosphorIconsBold.globeHemisphereEast, + 'globeHemisphereWest': PhosphorIconsBold.globeHemisphereWest, + 'globeSimple': PhosphorIconsBold.globeSimple, + 'globeSimpleX': PhosphorIconsBold.globeSimpleX, + 'globeStand': PhosphorIconsBold.globeStand, + 'globeX': PhosphorIconsBold.globeX, + 'goggles': PhosphorIconsBold.goggles, + 'golf': PhosphorIconsBold.golf, + 'goodreadsLogo': PhosphorIconsBold.goodreadsLogo, + 'googleCardboardLogo': PhosphorIconsBold.googleCardboardLogo, + 'googleChromeLogo': PhosphorIconsBold.googleChromeLogo, + 'googleDriveLogo': PhosphorIconsBold.googleDriveLogo, + 'googleLogo': PhosphorIconsBold.googleLogo, + 'googlePhotosLogo': PhosphorIconsBold.googlePhotosLogo, + 'googlePlayLogo': PhosphorIconsBold.googlePlayLogo, + 'googlePodcastsLogo': PhosphorIconsBold.googlePodcastsLogo, + 'gps': PhosphorIconsBold.gps, + 'gpsFix': PhosphorIconsBold.gpsFix, + 'gpsSlash': PhosphorIconsBold.gpsSlash, + 'gradient': PhosphorIconsBold.gradient, + 'graduationCap': PhosphorIconsBold.graduationCap, + 'grains': PhosphorIconsBold.grains, + 'grainsSlash': PhosphorIconsBold.grainsSlash, + 'graph': PhosphorIconsBold.graph, + 'graphicsCard': PhosphorIconsBold.graphicsCard, + 'greaterThan': PhosphorIconsBold.greaterThan, + 'greaterThanOrEqual': PhosphorIconsBold.greaterThanOrEqual, + 'gridFour': PhosphorIconsBold.gridFour, + 'gridNine': PhosphorIconsBold.gridNine, + 'guitar': PhosphorIconsBold.guitar, + 'hairDryer': PhosphorIconsBold.hairDryer, + 'hamburger': PhosphorIconsBold.hamburger, + 'hammer': PhosphorIconsBold.hammer, + 'hand': PhosphorIconsBold.hand, + 'handArrowDown': PhosphorIconsBold.handArrowDown, + 'handArrowUp': PhosphorIconsBold.handArrowUp, + 'handCoins': PhosphorIconsBold.handCoins, + 'handDeposit': PhosphorIconsBold.handDeposit, + 'handEye': PhosphorIconsBold.handEye, + 'handFist': PhosphorIconsBold.handFist, + 'handGrabbing': PhosphorIconsBold.handGrabbing, + 'handHeart': PhosphorIconsBold.handHeart, + 'handPalm': PhosphorIconsBold.handPalm, + 'handPeace': PhosphorIconsBold.handPeace, + 'handPointing': PhosphorIconsBold.handPointing, + 'handSoap': PhosphorIconsBold.handSoap, + 'handSwipeLeft': PhosphorIconsBold.handSwipeLeft, + 'handSwipeRight': PhosphorIconsBold.handSwipeRight, + 'handTap': PhosphorIconsBold.handTap, + 'handWaving': PhosphorIconsBold.handWaving, + 'handWithdraw': PhosphorIconsBold.handWithdraw, + 'handbag': PhosphorIconsBold.handbag, + 'handbagSimple': PhosphorIconsBold.handbagSimple, + 'handsClapping': PhosphorIconsBold.handsClapping, + 'handsPraying': PhosphorIconsBold.handsPraying, + 'handshake': PhosphorIconsBold.handshake, + 'hardDrive': PhosphorIconsBold.hardDrive, + 'hardDrives': PhosphorIconsBold.hardDrives, + 'hardHat': PhosphorIconsBold.hardHat, + 'hash': PhosphorIconsBold.hash, + 'hashStraight': PhosphorIconsBold.hashStraight, + 'headCircuit': PhosphorIconsBold.headCircuit, + 'headlights': PhosphorIconsBold.headlights, + 'headphones': PhosphorIconsBold.headphones, + 'headset': PhosphorIconsBold.headset, + 'heart': PhosphorIconsBold.heart, + 'heartBreak': PhosphorIconsBold.heartBreak, + 'heartHalf': PhosphorIconsBold.heartHalf, + 'heartStraight': PhosphorIconsBold.heartStraight, + 'heartStraightBreak': PhosphorIconsBold.heartStraightBreak, + 'heartbeat': PhosphorIconsBold.heartbeat, + 'hexagon': PhosphorIconsBold.hexagon, + 'highDefinition': PhosphorIconsBold.highDefinition, + 'highHeel': PhosphorIconsBold.highHeel, + 'highlighter': PhosphorIconsBold.highlighter, + 'highlighterCircle': PhosphorIconsBold.highlighterCircle, + 'hockey': PhosphorIconsBold.hockey, + 'hoodie': PhosphorIconsBold.hoodie, + 'horse': PhosphorIconsBold.horse, + 'hospital': PhosphorIconsBold.hospital, + 'hourglass': PhosphorIconsBold.hourglass, + 'hourglassHigh': PhosphorIconsBold.hourglassHigh, + 'hourglassLow': PhosphorIconsBold.hourglassLow, + 'hourglassMedium': PhosphorIconsBold.hourglassMedium, + 'hourglassSimple': PhosphorIconsBold.hourglassSimple, + 'hourglassSimpleHigh': PhosphorIconsBold.hourglassSimpleHigh, + 'hourglassSimpleLow': PhosphorIconsBold.hourglassSimpleLow, + 'hourglassSimpleMedium': PhosphorIconsBold.hourglassSimpleMedium, + 'house': PhosphorIconsBold.house, + 'houseLine': PhosphorIconsBold.houseLine, + 'houseSimple': PhosphorIconsBold.houseSimple, + 'hurricane': PhosphorIconsBold.hurricane, + 'iceCream': PhosphorIconsBold.iceCream, + 'identificationBadge': PhosphorIconsBold.identificationBadge, + 'identificationCard': PhosphorIconsBold.identificationCard, + 'image': PhosphorIconsBold.image, + 'imageBroken': PhosphorIconsBold.imageBroken, + 'imageSquare': PhosphorIconsBold.imageSquare, + 'images': PhosphorIconsBold.images, + 'imagesSquare': PhosphorIconsBold.imagesSquare, + 'infinity': PhosphorIconsBold.infinity, + 'info': PhosphorIconsBold.info, + 'instagramLogo': PhosphorIconsBold.instagramLogo, + 'intersect': PhosphorIconsBold.intersect, + 'intersectSquare': PhosphorIconsBold.intersectSquare, + 'intersectThree': PhosphorIconsBold.intersectThree, + 'intersection': PhosphorIconsBold.intersection, + 'invoice': PhosphorIconsBold.invoice, + 'island': PhosphorIconsBold.island, + 'jar': PhosphorIconsBold.jar, + 'jarLabel': PhosphorIconsBold.jarLabel, + 'jeep': PhosphorIconsBold.jeep, + 'joystick': PhosphorIconsBold.joystick, + 'kanban': PhosphorIconsBold.kanban, + 'key': PhosphorIconsBold.key, + 'keyReturn': PhosphorIconsBold.keyReturn, + 'keyboard': PhosphorIconsBold.keyboard, + 'keyhole': PhosphorIconsBold.keyhole, + 'knife': PhosphorIconsBold.knife, + 'ladder': PhosphorIconsBold.ladder, + 'ladderSimple': PhosphorIconsBold.ladderSimple, + 'lamp': PhosphorIconsBold.lamp, + 'lampPendant': PhosphorIconsBold.lampPendant, + 'laptop': PhosphorIconsBold.laptop, + 'lasso': PhosphorIconsBold.lasso, + 'lastfmLogo': PhosphorIconsBold.lastfmLogo, + 'layout': PhosphorIconsBold.layout, + 'leaf': PhosphorIconsBold.leaf, + 'lectern': PhosphorIconsBold.lectern, + 'lego': PhosphorIconsBold.lego, + 'legoSmiley': PhosphorIconsBold.legoSmiley, + 'lessThan': PhosphorIconsBold.lessThan, + 'lessThanOrEqual': PhosphorIconsBold.lessThanOrEqual, + 'letterCircleH': PhosphorIconsBold.letterCircleH, + 'letterCircleP': PhosphorIconsBold.letterCircleP, + 'letterCircleV': PhosphorIconsBold.letterCircleV, + 'lifebuoy': PhosphorIconsBold.lifebuoy, + 'lightbulb': PhosphorIconsBold.lightbulb, + 'lightbulbFilament': PhosphorIconsBold.lightbulbFilament, + 'lighthouse': PhosphorIconsBold.lighthouse, + 'lightning': PhosphorIconsBold.lightning, + 'lightningA': PhosphorIconsBold.lightningA, + 'lightningSlash': PhosphorIconsBold.lightningSlash, + 'lineSegment': PhosphorIconsBold.lineSegment, + 'lineSegments': PhosphorIconsBold.lineSegments, + 'lineVertical': PhosphorIconsBold.lineVertical, + 'link': PhosphorIconsBold.link, + 'linkBreak': PhosphorIconsBold.linkBreak, + 'linkSimple': PhosphorIconsBold.linkSimple, + 'linkSimpleBreak': PhosphorIconsBold.linkSimpleBreak, + 'linkSimpleHorizontal': PhosphorIconsBold.linkSimpleHorizontal, + 'linkSimpleHorizontalBreak': PhosphorIconsBold.linkSimpleHorizontalBreak, + 'linkedinLogo': PhosphorIconsBold.linkedinLogo, + 'linktreeLogo': PhosphorIconsBold.linktreeLogo, + 'linuxLogo': PhosphorIconsBold.linuxLogo, + 'list': PhosphorIconsBold.list, + 'listBullets': PhosphorIconsBold.listBullets, + 'listChecks': PhosphorIconsBold.listChecks, + 'listDashes': PhosphorIconsBold.listDashes, + 'listHeart': PhosphorIconsBold.listHeart, + 'listMagnifyingGlass': PhosphorIconsBold.listMagnifyingGlass, + 'listNumbers': PhosphorIconsBold.listNumbers, + 'listPlus': PhosphorIconsBold.listPlus, + 'listStar': PhosphorIconsBold.listStar, + 'lock': PhosphorIconsBold.lock, + 'lockKey': PhosphorIconsBold.lockKey, + 'lockKeyOpen': PhosphorIconsBold.lockKeyOpen, + 'lockLaminated': PhosphorIconsBold.lockLaminated, + 'lockLaminatedOpen': PhosphorIconsBold.lockLaminatedOpen, + 'lockOpen': PhosphorIconsBold.lockOpen, + 'lockSimple': PhosphorIconsBold.lockSimple, + 'lockSimpleOpen': PhosphorIconsBold.lockSimpleOpen, + 'lockers': PhosphorIconsBold.lockers, + 'log': PhosphorIconsBold.log, + 'magicWand': PhosphorIconsBold.magicWand, + 'magnet': PhosphorIconsBold.magnet, + 'magnetStraight': PhosphorIconsBold.magnetStraight, + 'magnifyingGlass': PhosphorIconsBold.magnifyingGlass, + 'magnifyingGlassMinus': PhosphorIconsBold.magnifyingGlassMinus, + 'magnifyingGlassPlus': PhosphorIconsBold.magnifyingGlassPlus, + 'mailbox': PhosphorIconsBold.mailbox, + 'mapPin': PhosphorIconsBold.mapPin, + 'mapPinArea': PhosphorIconsBold.mapPinArea, + 'mapPinLine': PhosphorIconsBold.mapPinLine, + 'mapPinPlus': PhosphorIconsBold.mapPinPlus, + 'mapPinSimple': PhosphorIconsBold.mapPinSimple, + 'mapPinSimpleArea': PhosphorIconsBold.mapPinSimpleArea, + 'mapPinSimpleLine': PhosphorIconsBold.mapPinSimpleLine, + 'mapTrifold': PhosphorIconsBold.mapTrifold, + 'markdownLogo': PhosphorIconsBold.markdownLogo, + 'markerCircle': PhosphorIconsBold.markerCircle, + 'martini': PhosphorIconsBold.martini, + 'maskHappy': PhosphorIconsBold.maskHappy, + 'maskSad': PhosphorIconsBold.maskSad, + 'mastodonLogo': PhosphorIconsBold.mastodonLogo, + 'mathOperations': PhosphorIconsBold.mathOperations, + 'matrixLogo': PhosphorIconsBold.matrixLogo, + 'medal': PhosphorIconsBold.medal, + 'medalMilitary': PhosphorIconsBold.medalMilitary, + 'mediumLogo': PhosphorIconsBold.mediumLogo, + 'megaphone': PhosphorIconsBold.megaphone, + 'megaphoneSimple': PhosphorIconsBold.megaphoneSimple, + 'memberOf': PhosphorIconsBold.memberOf, + 'memory': PhosphorIconsBold.memory, + 'messengerLogo': PhosphorIconsBold.messengerLogo, + 'metaLogo': PhosphorIconsBold.metaLogo, + 'meteor': PhosphorIconsBold.meteor, + 'metronome': PhosphorIconsBold.metronome, + 'microphone': PhosphorIconsBold.microphone, + 'microphoneSlash': PhosphorIconsBold.microphoneSlash, + 'microphoneStage': PhosphorIconsBold.microphoneStage, + 'microscope': PhosphorIconsBold.microscope, + 'microsoftExcelLogo': PhosphorIconsBold.microsoftExcelLogo, + 'microsoftOutlookLogo': PhosphorIconsBold.microsoftOutlookLogo, + 'microsoftPowerpointLogo': PhosphorIconsBold.microsoftPowerpointLogo, + 'microsoftTeamsLogo': PhosphorIconsBold.microsoftTeamsLogo, + 'microsoftWordLogo': PhosphorIconsBold.microsoftWordLogo, + 'minus': PhosphorIconsBold.minus, + 'minusCircle': PhosphorIconsBold.minusCircle, + 'minusSquare': PhosphorIconsBold.minusSquare, + 'money': PhosphorIconsBold.money, + 'moneyWavy': PhosphorIconsBold.moneyWavy, + 'monitor': PhosphorIconsBold.monitor, + 'monitorArrowUp': PhosphorIconsBold.monitorArrowUp, + 'monitorPlay': PhosphorIconsBold.monitorPlay, + 'moon': PhosphorIconsBold.moon, + 'moonStars': PhosphorIconsBold.moonStars, + 'moped': PhosphorIconsBold.moped, + 'mopedFront': PhosphorIconsBold.mopedFront, + 'mosque': PhosphorIconsBold.mosque, + 'motorcycle': PhosphorIconsBold.motorcycle, + 'mountains': PhosphorIconsBold.mountains, + 'mouse': PhosphorIconsBold.mouse, + 'mouseLeftClick': PhosphorIconsBold.mouseLeftClick, + 'mouseMiddleClick': PhosphorIconsBold.mouseMiddleClick, + 'mouseRightClick': PhosphorIconsBold.mouseRightClick, + 'mouseScroll': PhosphorIconsBold.mouseScroll, + 'mouseSimple': PhosphorIconsBold.mouseSimple, + 'musicNote': PhosphorIconsBold.musicNote, + 'musicNoteSimple': PhosphorIconsBold.musicNoteSimple, + 'musicNotes': PhosphorIconsBold.musicNotes, + 'musicNotesMinus': PhosphorIconsBold.musicNotesMinus, + 'musicNotesPlus': PhosphorIconsBold.musicNotesPlus, + 'musicNotesSimple': PhosphorIconsBold.musicNotesSimple, + 'navigationArrow': PhosphorIconsBold.navigationArrow, + 'needle': PhosphorIconsBold.needle, + 'network': PhosphorIconsBold.network, + 'networkSlash': PhosphorIconsBold.networkSlash, + 'networkX': PhosphorIconsBold.networkX, + 'newspaper': PhosphorIconsBold.newspaper, + 'newspaperClipping': PhosphorIconsBold.newspaperClipping, + 'notEquals': PhosphorIconsBold.notEquals, + 'notMemberOf': PhosphorIconsBold.notMemberOf, + 'notSubsetOf': PhosphorIconsBold.notSubsetOf, + 'notSupersetOf': PhosphorIconsBold.notSupersetOf, + 'notches': PhosphorIconsBold.notches, + 'note': PhosphorIconsBold.note, + 'noteBlank': PhosphorIconsBold.noteBlank, + 'notePencil': PhosphorIconsBold.notePencil, + 'notebook': PhosphorIconsBold.notebook, + 'notepad': PhosphorIconsBold.notepad, + 'notification': PhosphorIconsBold.notification, + 'notionLogo': PhosphorIconsBold.notionLogo, + 'nuclearPlant': PhosphorIconsBold.nuclearPlant, + 'numberCircleEight': PhosphorIconsBold.numberCircleEight, + 'numberCircleFive': PhosphorIconsBold.numberCircleFive, + 'numberCircleFour': PhosphorIconsBold.numberCircleFour, + 'numberCircleNine': PhosphorIconsBold.numberCircleNine, + 'numberCircleOne': PhosphorIconsBold.numberCircleOne, + 'numberCircleSeven': PhosphorIconsBold.numberCircleSeven, + 'numberCircleSix': PhosphorIconsBold.numberCircleSix, + 'numberCircleThree': PhosphorIconsBold.numberCircleThree, + 'numberCircleTwo': PhosphorIconsBold.numberCircleTwo, + 'numberCircleZero': PhosphorIconsBold.numberCircleZero, + 'numberEight': PhosphorIconsBold.numberEight, + 'numberFive': PhosphorIconsBold.numberFive, + 'numberFour': PhosphorIconsBold.numberFour, + 'numberNine': PhosphorIconsBold.numberNine, + 'numberOne': PhosphorIconsBold.numberOne, + 'numberSeven': PhosphorIconsBold.numberSeven, + 'numberSix': PhosphorIconsBold.numberSix, + 'numberSquareEight': PhosphorIconsBold.numberSquareEight, + 'numberSquareFive': PhosphorIconsBold.numberSquareFive, + 'numberSquareFour': PhosphorIconsBold.numberSquareFour, + 'numberSquareNine': PhosphorIconsBold.numberSquareNine, + 'numberSquareOne': PhosphorIconsBold.numberSquareOne, + 'numberSquareSeven': PhosphorIconsBold.numberSquareSeven, + 'numberSquareSix': PhosphorIconsBold.numberSquareSix, + 'numberSquareThree': PhosphorIconsBold.numberSquareThree, + 'numberSquareTwo': PhosphorIconsBold.numberSquareTwo, + 'numberSquareZero': PhosphorIconsBold.numberSquareZero, + 'numberThree': PhosphorIconsBold.numberThree, + 'numberTwo': PhosphorIconsBold.numberTwo, + 'numberZero': PhosphorIconsBold.numberZero, + 'numpad': PhosphorIconsBold.numpad, + 'nut': PhosphorIconsBold.nut, + 'nyTimesLogo': PhosphorIconsBold.nyTimesLogo, + 'octagon': PhosphorIconsBold.octagon, + 'officeChair': PhosphorIconsBold.officeChair, + 'onigiri': PhosphorIconsBold.onigiri, + 'openAiLogo': PhosphorIconsBold.openAiLogo, + 'option': PhosphorIconsBold.option, + 'orange': PhosphorIconsBold.orange, + 'orangeSlice': PhosphorIconsBold.orangeSlice, + 'oven': PhosphorIconsBold.oven, + 'package': PhosphorIconsBold.package, + 'paintBrush': PhosphorIconsBold.paintBrush, + 'paintBrushBroad': PhosphorIconsBold.paintBrushBroad, + 'paintBrushHousehold': PhosphorIconsBold.paintBrushHousehold, + 'paintBucket': PhosphorIconsBold.paintBucket, + 'paintRoller': PhosphorIconsBold.paintRoller, + 'palette': PhosphorIconsBold.palette, + 'panorama': PhosphorIconsBold.panorama, + 'pants': PhosphorIconsBold.pants, + 'paperPlane': PhosphorIconsBold.paperPlane, + 'paperPlaneRight': PhosphorIconsBold.paperPlaneRight, + 'paperPlaneTilt': PhosphorIconsBold.paperPlaneTilt, + 'paperclip': PhosphorIconsBold.paperclip, + 'paperclipHorizontal': PhosphorIconsBold.paperclipHorizontal, + 'parachute': PhosphorIconsBold.parachute, + 'paragraph': PhosphorIconsBold.paragraph, + 'parallelogram': PhosphorIconsBold.parallelogram, + 'park': PhosphorIconsBold.park, + 'password': PhosphorIconsBold.password, + 'path': PhosphorIconsBold.path, + 'patreonLogo': PhosphorIconsBold.patreonLogo, + 'pause': PhosphorIconsBold.pause, + 'pauseCircle': PhosphorIconsBold.pauseCircle, + 'pawPrint': PhosphorIconsBold.pawPrint, + 'paypalLogo': PhosphorIconsBold.paypalLogo, + 'peace': PhosphorIconsBold.peace, + 'pen': PhosphorIconsBold.pen, + 'penNib': PhosphorIconsBold.penNib, + 'penNibStraight': PhosphorIconsBold.penNibStraight, + 'pencil': PhosphorIconsBold.pencil, + 'pencilCircle': PhosphorIconsBold.pencilCircle, + 'pencilLine': PhosphorIconsBold.pencilLine, + 'pencilRuler': PhosphorIconsBold.pencilRuler, + 'pencilSimple': PhosphorIconsBold.pencilSimple, + 'pencilSimpleLine': PhosphorIconsBold.pencilSimpleLine, + 'pencilSimpleSlash': PhosphorIconsBold.pencilSimpleSlash, + 'pencilSlash': PhosphorIconsBold.pencilSlash, + 'pentagon': PhosphorIconsBold.pentagon, + 'pentagram': PhosphorIconsBold.pentagram, + 'pepper': PhosphorIconsBold.pepper, + 'percent': PhosphorIconsBold.percent, + 'person': PhosphorIconsBold.person, + 'personArmsSpread': PhosphorIconsBold.personArmsSpread, + 'personSimple': PhosphorIconsBold.personSimple, + 'personSimpleBike': PhosphorIconsBold.personSimpleBike, + 'personSimpleCircle': PhosphorIconsBold.personSimpleCircle, + 'personSimpleHike': PhosphorIconsBold.personSimpleHike, + 'personSimpleRun': PhosphorIconsBold.personSimpleRun, + 'personSimpleSki': PhosphorIconsBold.personSimpleSki, + 'personSimpleSnowboard': PhosphorIconsBold.personSimpleSnowboard, + 'personSimpleSwim': PhosphorIconsBold.personSimpleSwim, + 'personSimpleTaiChi': PhosphorIconsBold.personSimpleTaiChi, + 'personSimpleThrow': PhosphorIconsBold.personSimpleThrow, + 'personSimpleWalk': PhosphorIconsBold.personSimpleWalk, + 'perspective': PhosphorIconsBold.perspective, + 'phone': PhosphorIconsBold.phone, + 'phoneCall': PhosphorIconsBold.phoneCall, + 'phoneDisconnect': PhosphorIconsBold.phoneDisconnect, + 'phoneIncoming': PhosphorIconsBold.phoneIncoming, + 'phoneList': PhosphorIconsBold.phoneList, + 'phoneOutgoing': PhosphorIconsBold.phoneOutgoing, + 'phonePause': PhosphorIconsBold.phonePause, + 'phonePlus': PhosphorIconsBold.phonePlus, + 'phoneSlash': PhosphorIconsBold.phoneSlash, + 'phoneTransfer': PhosphorIconsBold.phoneTransfer, + 'phoneX': PhosphorIconsBold.phoneX, + 'phosphorLogo': PhosphorIconsBold.phosphorLogo, + 'pi': PhosphorIconsBold.pi, + 'pianoKeys': PhosphorIconsBold.pianoKeys, + 'picnicTable': PhosphorIconsBold.picnicTable, + 'pictureInpicture': PhosphorIconsBold.pictureInpicture, + 'piggyBank': PhosphorIconsBold.piggyBank, + 'pill': PhosphorIconsBold.pill, + 'pingPong': PhosphorIconsBold.pingPong, + 'pintGlass': PhosphorIconsBold.pintGlass, + 'pinterestLogo': PhosphorIconsBold.pinterestLogo, + 'pinwheel': PhosphorIconsBold.pinwheel, + 'pipe': PhosphorIconsBold.pipe, + 'pipeWrench': PhosphorIconsBold.pipeWrench, + 'pixLogo': PhosphorIconsBold.pixLogo, + 'pizza': PhosphorIconsBold.pizza, + 'placeholder': PhosphorIconsBold.placeholder, + 'planet': PhosphorIconsBold.planet, + 'plant': PhosphorIconsBold.plant, + 'play': PhosphorIconsBold.play, + 'playCircle': PhosphorIconsBold.playCircle, + 'playPause': PhosphorIconsBold.playPause, + 'playlist': PhosphorIconsBold.playlist, + 'plug': PhosphorIconsBold.plug, + 'plugCharging': PhosphorIconsBold.plugCharging, + 'plugs': PhosphorIconsBold.plugs, + 'plugsConnected': PhosphorIconsBold.plugsConnected, + 'plus': PhosphorIconsBold.plus, + 'plusCircle': PhosphorIconsBold.plusCircle, + 'plusMinus': PhosphorIconsBold.plusMinus, + 'plusSquare': PhosphorIconsBold.plusSquare, + 'pokerChip': PhosphorIconsBold.pokerChip, + 'policeCar': PhosphorIconsBold.policeCar, + 'polygon': PhosphorIconsBold.polygon, + 'popcorn': PhosphorIconsBold.popcorn, + 'popsicle': PhosphorIconsBold.popsicle, + 'pottedPlant': PhosphorIconsBold.pottedPlant, + 'power': PhosphorIconsBold.power, + 'prescription': PhosphorIconsBold.prescription, + 'presentation': PhosphorIconsBold.presentation, + 'presentationChart': PhosphorIconsBold.presentationChart, + 'printer': PhosphorIconsBold.printer, + 'prohibit': PhosphorIconsBold.prohibit, + 'prohibitInset': PhosphorIconsBold.prohibitInset, + 'projectorScreen': PhosphorIconsBold.projectorScreen, + 'projectorScreenChart': PhosphorIconsBold.projectorScreenChart, + 'pulse': PhosphorIconsBold.pulse, + 'pushPin': PhosphorIconsBold.pushPin, + 'pushPinSimple': PhosphorIconsBold.pushPinSimple, + 'pushPinSimpleSlash': PhosphorIconsBold.pushPinSimpleSlash, + 'pushPinSlash': PhosphorIconsBold.pushPinSlash, + 'puzzlePiece': PhosphorIconsBold.puzzlePiece, + 'qrCode': PhosphorIconsBold.qrCode, + 'question': PhosphorIconsBold.question, + 'questionMark': PhosphorIconsBold.questionMark, + 'queue': PhosphorIconsBold.queue, + 'quotes': PhosphorIconsBold.quotes, + 'rabbit': PhosphorIconsBold.rabbit, + 'racquet': PhosphorIconsBold.racquet, + 'radical': PhosphorIconsBold.radical, + 'radio': PhosphorIconsBold.radio, + 'radioButton': PhosphorIconsBold.radioButton, + 'radioactive': PhosphorIconsBold.radioactive, + 'rainbow': PhosphorIconsBold.rainbow, + 'rainbowCloud': PhosphorIconsBold.rainbowCloud, + 'ranking': PhosphorIconsBold.ranking, + 'readCvLogo': PhosphorIconsBold.readCvLogo, + 'receipt': PhosphorIconsBold.receipt, + 'receiptX': PhosphorIconsBold.receiptX, + 'record': PhosphorIconsBold.record, + 'rectangle': PhosphorIconsBold.rectangle, + 'rectangleDashed': PhosphorIconsBold.rectangleDashed, + 'recycle': PhosphorIconsBold.recycle, + 'redditLogo': PhosphorIconsBold.redditLogo, + 'repeat': PhosphorIconsBold.repeat, + 'repeatOnce': PhosphorIconsBold.repeatOnce, + 'replitLogo': PhosphorIconsBold.replitLogo, + 'resize': PhosphorIconsBold.resize, + 'rewind': PhosphorIconsBold.rewind, + 'rewindCircle': PhosphorIconsBold.rewindCircle, + 'roadHorizon': PhosphorIconsBold.roadHorizon, + 'robot': PhosphorIconsBold.robot, + 'rocket': PhosphorIconsBold.rocket, + 'rocketLaunch': PhosphorIconsBold.rocketLaunch, + 'rows': PhosphorIconsBold.rows, + 'rowsPlusBottom': PhosphorIconsBold.rowsPlusBottom, + 'rowsPlusTop': PhosphorIconsBold.rowsPlusTop, + 'rss': PhosphorIconsBold.rss, + 'rssSimple': PhosphorIconsBold.rssSimple, + 'rug': PhosphorIconsBold.rug, + 'ruler': PhosphorIconsBold.ruler, + 'sailboat': PhosphorIconsBold.sailboat, + 'scales': PhosphorIconsBold.scales, + 'scan': PhosphorIconsBold.scan, + 'scanSmiley': PhosphorIconsBold.scanSmiley, + 'scissors': PhosphorIconsBold.scissors, + 'scooter': PhosphorIconsBold.scooter, + 'screencast': PhosphorIconsBold.screencast, + 'screwdriver': PhosphorIconsBold.screwdriver, + 'scribble': PhosphorIconsBold.scribble, + 'scribbleLoop': PhosphorIconsBold.scribbleLoop, + 'scroll': PhosphorIconsBold.scroll, + 'seal': PhosphorIconsBold.seal, + 'sealCheck': PhosphorIconsBold.sealCheck, + 'sealPercent': PhosphorIconsBold.sealPercent, + 'sealQuestion': PhosphorIconsBold.sealQuestion, + 'sealWarning': PhosphorIconsBold.sealWarning, + 'seat': PhosphorIconsBold.seat, + 'seatbelt': PhosphorIconsBold.seatbelt, + 'securityCamera': PhosphorIconsBold.securityCamera, + 'selection': PhosphorIconsBold.selection, + 'selectionAll': PhosphorIconsBold.selectionAll, + 'selectionBackground': PhosphorIconsBold.selectionBackground, + 'selectionForeground': PhosphorIconsBold.selectionForeground, + 'selectionInverse': PhosphorIconsBold.selectionInverse, + 'selectionPlus': PhosphorIconsBold.selectionPlus, + 'selectionSlash': PhosphorIconsBold.selectionSlash, + 'shapes': PhosphorIconsBold.shapes, + 'share': PhosphorIconsBold.share, + 'shareFat': PhosphorIconsBold.shareFat, + 'shareNetwork': PhosphorIconsBold.shareNetwork, + 'shield': PhosphorIconsBold.shield, + 'shieldCheck': PhosphorIconsBold.shieldCheck, + 'shieldCheckered': PhosphorIconsBold.shieldCheckered, + 'shieldChevron': PhosphorIconsBold.shieldChevron, + 'shieldPlus': PhosphorIconsBold.shieldPlus, + 'shieldSlash': PhosphorIconsBold.shieldSlash, + 'shieldStar': PhosphorIconsBold.shieldStar, + 'shieldWarning': PhosphorIconsBold.shieldWarning, + 'shippingContainer': PhosphorIconsBold.shippingContainer, + 'shirtFolded': PhosphorIconsBold.shirtFolded, + 'shootingStar': PhosphorIconsBold.shootingStar, + 'shoppingBag': PhosphorIconsBold.shoppingBag, + 'shoppingBagOpen': PhosphorIconsBold.shoppingBagOpen, + 'shoppingCart': PhosphorIconsBold.shoppingCart, + 'shoppingCartSimple': PhosphorIconsBold.shoppingCartSimple, + 'shovel': PhosphorIconsBold.shovel, + 'shower': PhosphorIconsBold.shower, + 'shrimp': PhosphorIconsBold.shrimp, + 'shuffle': PhosphorIconsBold.shuffle, + 'shuffleAngular': PhosphorIconsBold.shuffleAngular, + 'shuffleSimple': PhosphorIconsBold.shuffleSimple, + 'sidebar': PhosphorIconsBold.sidebar, + 'sidebarSimple': PhosphorIconsBold.sidebarSimple, + 'sigma': PhosphorIconsBold.sigma, + 'signIn': PhosphorIconsBold.signIn, + 'signOut': PhosphorIconsBold.signOut, + 'signature': PhosphorIconsBold.signature, + 'signpost': PhosphorIconsBold.signpost, + 'simCard': PhosphorIconsBold.simCard, + 'siren': PhosphorIconsBold.siren, + 'sketchLogo': PhosphorIconsBold.sketchLogo, + 'skipBack': PhosphorIconsBold.skipBack, + 'skipBackCircle': PhosphorIconsBold.skipBackCircle, + 'skipForward': PhosphorIconsBold.skipForward, + 'skipForwardCircle': PhosphorIconsBold.skipForwardCircle, + 'skull': PhosphorIconsBold.skull, + 'skypeLogo': PhosphorIconsBold.skypeLogo, + 'slackLogo': PhosphorIconsBold.slackLogo, + 'sliders': PhosphorIconsBold.sliders, + 'slidersHorizontal': PhosphorIconsBold.slidersHorizontal, + 'slideshow': PhosphorIconsBold.slideshow, + 'smiley': PhosphorIconsBold.smiley, + 'smileyAngry': PhosphorIconsBold.smileyAngry, + 'smileyBlank': PhosphorIconsBold.smileyBlank, + 'smileyMeh': PhosphorIconsBold.smileyMeh, + 'smileyMelting': PhosphorIconsBold.smileyMelting, + 'smileyNervous': PhosphorIconsBold.smileyNervous, + 'smileySad': PhosphorIconsBold.smileySad, + 'smileySticker': PhosphorIconsBold.smileySticker, + 'smileyWink': PhosphorIconsBold.smileyWink, + 'smileyXEyes': PhosphorIconsBold.smileyXEyes, + 'snapchatLogo': PhosphorIconsBold.snapchatLogo, + 'sneaker': PhosphorIconsBold.sneaker, + 'sneakerMove': PhosphorIconsBold.sneakerMove, + 'snowflake': PhosphorIconsBold.snowflake, + 'soccerBall': PhosphorIconsBold.soccerBall, + 'sock': PhosphorIconsBold.sock, + 'solarPanel': PhosphorIconsBold.solarPanel, + 'solarRoof': PhosphorIconsBold.solarRoof, + 'sortAscending': PhosphorIconsBold.sortAscending, + 'sortDescending': PhosphorIconsBold.sortDescending, + 'soundcloudLogo': PhosphorIconsBold.soundcloudLogo, + 'spade': PhosphorIconsBold.spade, + 'sparkle': PhosphorIconsBold.sparkle, + 'speakerHifi': PhosphorIconsBold.speakerHifi, + 'speakerHigh': PhosphorIconsBold.speakerHigh, + 'speakerLow': PhosphorIconsBold.speakerLow, + 'speakerNone': PhosphorIconsBold.speakerNone, + 'speakerSimpleHigh': PhosphorIconsBold.speakerSimpleHigh, + 'speakerSimpleLow': PhosphorIconsBold.speakerSimpleLow, + 'speakerSimpleNone': PhosphorIconsBold.speakerSimpleNone, + 'speakerSimpleSlash': PhosphorIconsBold.speakerSimpleSlash, + 'speakerSimpleX': PhosphorIconsBold.speakerSimpleX, + 'speakerSlash': PhosphorIconsBold.speakerSlash, + 'speakerX': PhosphorIconsBold.speakerX, + 'speedometer': PhosphorIconsBold.speedometer, + 'sphere': PhosphorIconsBold.sphere, + 'spinner': PhosphorIconsBold.spinner, + 'spinnerBall': PhosphorIconsBold.spinnerBall, + 'spinnerGap': PhosphorIconsBold.spinnerGap, + 'spiral': PhosphorIconsBold.spiral, + 'splitHorizontal': PhosphorIconsBold.splitHorizontal, + 'splitVertical': PhosphorIconsBold.splitVertical, + 'spotifyLogo': PhosphorIconsBold.spotifyLogo, + 'sprayBottle': PhosphorIconsBold.sprayBottle, + 'square': PhosphorIconsBold.square, + 'squareHalf': PhosphorIconsBold.squareHalf, + 'squareHalfBottom': PhosphorIconsBold.squareHalfBottom, + 'squareLogo': PhosphorIconsBold.squareLogo, + 'squareSplitHorizontal': PhosphorIconsBold.squareSplitHorizontal, + 'squareSplitVertical': PhosphorIconsBold.squareSplitVertical, + 'squaresFour': PhosphorIconsBold.squaresFour, + 'stack': PhosphorIconsBold.stack, + 'stackMinus': PhosphorIconsBold.stackMinus, + 'stackOverflowLogo': PhosphorIconsBold.stackOverflowLogo, + 'stackPlus': PhosphorIconsBold.stackPlus, + 'stackSimple': PhosphorIconsBold.stackSimple, + 'stairs': PhosphorIconsBold.stairs, + 'stamp': PhosphorIconsBold.stamp, + 'standardDefinition': PhosphorIconsBold.standardDefinition, + 'star': PhosphorIconsBold.star, + 'starAndCrescent': PhosphorIconsBold.starAndCrescent, + 'starFour': PhosphorIconsBold.starFour, + 'starHalf': PhosphorIconsBold.starHalf, + 'starOfDavid': PhosphorIconsBold.starOfDavid, + 'steamLogo': PhosphorIconsBold.steamLogo, + 'steeringWheel': PhosphorIconsBold.steeringWheel, + 'steps': PhosphorIconsBold.steps, + 'stethoscope': PhosphorIconsBold.stethoscope, + 'sticker': PhosphorIconsBold.sticker, + 'stool': PhosphorIconsBold.stool, + 'stop': PhosphorIconsBold.stop, + 'stopCircle': PhosphorIconsBold.stopCircle, + 'storefront': PhosphorIconsBold.storefront, + 'strategy': PhosphorIconsBold.strategy, + 'stripeLogo': PhosphorIconsBold.stripeLogo, + 'student': PhosphorIconsBold.student, + 'subsetOf': PhosphorIconsBold.subsetOf, + 'subsetProperOf': PhosphorIconsBold.subsetProperOf, + 'subtitles': PhosphorIconsBold.subtitles, + 'subtitlesSlash': PhosphorIconsBold.subtitlesSlash, + 'subtract': PhosphorIconsBold.subtract, + 'subtractSquare': PhosphorIconsBold.subtractSquare, + 'subway': PhosphorIconsBold.subway, + 'suitcase': PhosphorIconsBold.suitcase, + 'suitcaseRolling': PhosphorIconsBold.suitcaseRolling, + 'suitcaseSimple': PhosphorIconsBold.suitcaseSimple, + 'sun': PhosphorIconsBold.sun, + 'sunDim': PhosphorIconsBold.sunDim, + 'sunHorizon': PhosphorIconsBold.sunHorizon, + 'sunglasses': PhosphorIconsBold.sunglasses, + 'supersetOf': PhosphorIconsBold.supersetOf, + 'supersetProperOf': PhosphorIconsBold.supersetProperOf, + 'swap': PhosphorIconsBold.swap, + 'swatches': PhosphorIconsBold.swatches, + 'swimmingPool': PhosphorIconsBold.swimmingPool, + 'sword': PhosphorIconsBold.sword, + 'synagogue': PhosphorIconsBold.synagogue, + 'syringe': PhosphorIconsBold.syringe, + 'tShirt': PhosphorIconsBold.tShirt, + 'table': PhosphorIconsBold.table, + 'tabs': PhosphorIconsBold.tabs, + 'tag': PhosphorIconsBold.tag, + 'tagChevron': PhosphorIconsBold.tagChevron, + 'tagSimple': PhosphorIconsBold.tagSimple, + 'target': PhosphorIconsBold.target, + 'taxi': PhosphorIconsBold.taxi, + 'teaBag': PhosphorIconsBold.teaBag, + 'telegramLogo': PhosphorIconsBold.telegramLogo, + 'television': PhosphorIconsBold.television, + 'televisionSimple': PhosphorIconsBold.televisionSimple, + 'tennisBall': PhosphorIconsBold.tennisBall, + 'tent': PhosphorIconsBold.tent, + 'terminal': PhosphorIconsBold.terminal, + 'terminalWindow': PhosphorIconsBold.terminalWindow, + 'testTube': PhosphorIconsBold.testTube, + 'textAUnderline': PhosphorIconsBold.textAUnderline, + 'textAa': PhosphorIconsBold.textAa, + 'textAlignCenter': PhosphorIconsBold.textAlignCenter, + 'textAlignJustify': PhosphorIconsBold.textAlignJustify, + 'textAlignLeft': PhosphorIconsBold.textAlignLeft, + 'textAlignRight': PhosphorIconsBold.textAlignRight, + 'textB': PhosphorIconsBold.textB, + 'textColumns': PhosphorIconsBold.textColumns, + 'textH': PhosphorIconsBold.textH, + 'textHFive': PhosphorIconsBold.textHFive, + 'textHFour': PhosphorIconsBold.textHFour, + 'textHOne': PhosphorIconsBold.textHOne, + 'textHSix': PhosphorIconsBold.textHSix, + 'textHThree': PhosphorIconsBold.textHThree, + 'textHTwo': PhosphorIconsBold.textHTwo, + 'textIndent': PhosphorIconsBold.textIndent, + 'textItalic': PhosphorIconsBold.textItalic, + 'textOutdent': PhosphorIconsBold.textOutdent, + 'textStrikethrough': PhosphorIconsBold.textStrikethrough, + 'textSubscript': PhosphorIconsBold.textSubscript, + 'textSuperscript': PhosphorIconsBold.textSuperscript, + 'textT': PhosphorIconsBold.textT, + 'textTSlash': PhosphorIconsBold.textTSlash, + 'textUnderline': PhosphorIconsBold.textUnderline, + 'textbox': PhosphorIconsBold.textbox, + 'thermometer': PhosphorIconsBold.thermometer, + 'thermometerCold': PhosphorIconsBold.thermometerCold, + 'thermometerHot': PhosphorIconsBold.thermometerHot, + 'thermometerSimple': PhosphorIconsBold.thermometerSimple, + 'threadsLogo': PhosphorIconsBold.threadsLogo, + 'threeD': PhosphorIconsBold.threeD, + 'thumbsDown': PhosphorIconsBold.thumbsDown, + 'thumbsUp': PhosphorIconsBold.thumbsUp, + 'ticket': PhosphorIconsBold.ticket, + 'tidalLogo': PhosphorIconsBold.tidalLogo, + 'tiktokLogo': PhosphorIconsBold.tiktokLogo, + 'tilde': PhosphorIconsBold.tilde, + 'timer': PhosphorIconsBold.timer, + 'tipJar': PhosphorIconsBold.tipJar, + 'tipi': PhosphorIconsBold.tipi, + 'tire': PhosphorIconsBold.tire, + 'toggleLeft': PhosphorIconsBold.toggleLeft, + 'toggleRight': PhosphorIconsBold.toggleRight, + 'toilet': PhosphorIconsBold.toilet, + 'toiletPaper': PhosphorIconsBold.toiletPaper, + 'toolbox': PhosphorIconsBold.toolbox, + 'tooth': PhosphorIconsBold.tooth, + 'tornado': PhosphorIconsBold.tornado, + 'tote': PhosphorIconsBold.tote, + 'toteSimple': PhosphorIconsBold.toteSimple, + 'towel': PhosphorIconsBold.towel, + 'tractor': PhosphorIconsBold.tractor, + 'trademark': PhosphorIconsBold.trademark, + 'trademarkRegistered': PhosphorIconsBold.trademarkRegistered, + 'trafficCone': PhosphorIconsBold.trafficCone, + 'trafficSign': PhosphorIconsBold.trafficSign, + 'trafficSignal': PhosphorIconsBold.trafficSignal, + 'train': PhosphorIconsBold.train, + 'trainRegional': PhosphorIconsBold.trainRegional, + 'trainSimple': PhosphorIconsBold.trainSimple, + 'tram': PhosphorIconsBold.tram, + 'translate': PhosphorIconsBold.translate, + 'trash': PhosphorIconsBold.trash, + 'trashSimple': PhosphorIconsBold.trashSimple, + 'tray': PhosphorIconsBold.tray, + 'trayArrowDown': PhosphorIconsBold.trayArrowDown, + 'trayArrowUp': PhosphorIconsBold.trayArrowUp, + 'treasureChest': PhosphorIconsBold.treasureChest, + 'tree': PhosphorIconsBold.tree, + 'treeEvergreen': PhosphorIconsBold.treeEvergreen, + 'treePalm': PhosphorIconsBold.treePalm, + 'treeStructure': PhosphorIconsBold.treeStructure, + 'treeView': PhosphorIconsBold.treeView, + 'trendDown': PhosphorIconsBold.trendDown, + 'trendUp': PhosphorIconsBold.trendUp, + 'triangle': PhosphorIconsBold.triangle, + 'triangleDashed': PhosphorIconsBold.triangleDashed, + 'trolley': PhosphorIconsBold.trolley, + 'trolleySuitcase': PhosphorIconsBold.trolleySuitcase, + 'trophy': PhosphorIconsBold.trophy, + 'truck': PhosphorIconsBold.truck, + 'truckTrailer': PhosphorIconsBold.truckTrailer, + 'tumblrLogo': PhosphorIconsBold.tumblrLogo, + 'twitchLogo': PhosphorIconsBold.twitchLogo, + 'twitterLogo': PhosphorIconsBold.twitterLogo, + 'umbrella': PhosphorIconsBold.umbrella, + 'umbrellaSimple': PhosphorIconsBold.umbrellaSimple, + 'union': PhosphorIconsBold.union, + 'unite': PhosphorIconsBold.unite, + 'uniteSquare': PhosphorIconsBold.uniteSquare, + 'upload': PhosphorIconsBold.upload, + 'uploadSimple': PhosphorIconsBold.uploadSimple, + 'usb': PhosphorIconsBold.usb, + 'user': PhosphorIconsBold.user, + 'userCheck': PhosphorIconsBold.userCheck, + 'userCircle': PhosphorIconsBold.userCircle, + 'userCircleCheck': PhosphorIconsBold.userCircleCheck, + 'userCircleDashed': PhosphorIconsBold.userCircleDashed, + 'userCircleGear': PhosphorIconsBold.userCircleGear, + 'userCircleMinus': PhosphorIconsBold.userCircleMinus, + 'userCirclePlus': PhosphorIconsBold.userCirclePlus, + 'userFocus': PhosphorIconsBold.userFocus, + 'userGear': PhosphorIconsBold.userGear, + 'userList': PhosphorIconsBold.userList, + 'userMinus': PhosphorIconsBold.userMinus, + 'userPlus': PhosphorIconsBold.userPlus, + 'userRectangle': PhosphorIconsBold.userRectangle, + 'userSound': PhosphorIconsBold.userSound, + 'userSquare': PhosphorIconsBold.userSquare, + 'userSwitch': PhosphorIconsBold.userSwitch, + 'users': PhosphorIconsBold.users, + 'usersFour': PhosphorIconsBold.usersFour, + 'usersThree': PhosphorIconsBold.usersThree, + 'van': PhosphorIconsBold.van, + 'vault': PhosphorIconsBold.vault, + 'vectorThree': PhosphorIconsBold.vectorThree, + 'vectorTwo': PhosphorIconsBold.vectorTwo, + 'vibrate': PhosphorIconsBold.vibrate, + 'video': PhosphorIconsBold.video, + 'videoCamera': PhosphorIconsBold.videoCamera, + 'videoCameraSlash': PhosphorIconsBold.videoCameraSlash, + 'videoConference': PhosphorIconsBold.videoConference, + 'vignette': PhosphorIconsBold.vignette, + 'vinylRecord': PhosphorIconsBold.vinylRecord, + 'virtualReality': PhosphorIconsBold.virtualReality, + 'virus': PhosphorIconsBold.virus, + 'visor': PhosphorIconsBold.visor, + 'voicemail': PhosphorIconsBold.voicemail, + 'volleyball': PhosphorIconsBold.volleyball, + 'wall': PhosphorIconsBold.wall, + 'wallet': PhosphorIconsBold.wallet, + 'warehouse': PhosphorIconsBold.warehouse, + 'warning': PhosphorIconsBold.warning, + 'warningCircle': PhosphorIconsBold.warningCircle, + 'warningDiamond': PhosphorIconsBold.warningDiamond, + 'warningOctagon': PhosphorIconsBold.warningOctagon, + 'washingMachine': PhosphorIconsBold.washingMachine, + 'watch': PhosphorIconsBold.watch, + 'waveSawtooth': PhosphorIconsBold.waveSawtooth, + 'waveSine': PhosphorIconsBold.waveSine, + 'waveSquare': PhosphorIconsBold.waveSquare, + 'waveTriangle': PhosphorIconsBold.waveTriangle, + 'waveform': PhosphorIconsBold.waveform, + 'waveformSlash': PhosphorIconsBold.waveformSlash, + 'waves': PhosphorIconsBold.waves, + 'webcam': PhosphorIconsBold.webcam, + 'webcamSlash': PhosphorIconsBold.webcamSlash, + 'webhooksLogo': PhosphorIconsBold.webhooksLogo, + 'wechatLogo': PhosphorIconsBold.wechatLogo, + 'whatsappLogo': PhosphorIconsBold.whatsappLogo, + 'wheelchair': PhosphorIconsBold.wheelchair, + 'wheelchairMotion': PhosphorIconsBold.wheelchairMotion, + 'wifiHigh': PhosphorIconsBold.wifiHigh, + 'wifiLow': PhosphorIconsBold.wifiLow, + 'wifiMedium': PhosphorIconsBold.wifiMedium, + 'wifiNone': PhosphorIconsBold.wifiNone, + 'wifiSlash': PhosphorIconsBold.wifiSlash, + 'wifiX': PhosphorIconsBold.wifiX, + 'wind': PhosphorIconsBold.wind, + 'windmill': PhosphorIconsBold.windmill, + 'windowsLogo': PhosphorIconsBold.windowsLogo, + 'wine': PhosphorIconsBold.wine, + 'wrench': PhosphorIconsBold.wrench, + 'x': PhosphorIconsBold.x, + 'xCircle': PhosphorIconsBold.xCircle, + 'xLogo': PhosphorIconsBold.xLogo, + 'xSquare': PhosphorIconsBold.xSquare, + 'yarn': PhosphorIconsBold.yarn, + 'yinYang': PhosphorIconsBold.yinYang, + 'youtubeLogo': PhosphorIconsBold.youtubeLogo, + }; +} diff --git a/lib/core/utils/toaster.dart b/lib/core/utils/toaster.dart new file mode 100644 index 0000000..17b315d --- /dev/null +++ b/lib/core/utils/toaster.dart @@ -0,0 +1,153 @@ +import 'package:flutter/cupertino.dart'; +import 'dart:async'; + +import 'package:hum/core/constants/app_theme.dart'; + +void +showCupertinoToast( + BuildContext context, + String message, +) { + final overlay = Overlay.of( + context, + ); + + // Animation controller lives inside an OverlayEntry widget + late OverlayEntry entry; + final animationController = AnimationController( + vsync: Navigator.of( + context, + ), + duration: const Duration( + milliseconds: 250, + ), + ); + + entry = OverlayEntry( + builder: + ( + ctx, + ) { + return Positioned( + bottom: 30, + left: 24, + right: 24, + child: FadeTransition( + opacity: CurvedAnimation( + parent: animationController, + curve: Curves.easeInOut, + ), + child: CupertinoPopupSurface( + isSurfacePainted: true, + child: Container( + padding: const EdgeInsets.symmetric( + horizontal: 16, + vertical: 12, + ), + decoration: BoxDecoration( + // color: CupertinoColors.black.withValues( + // alpha: .8, + // ), + color: CupertinoDynamicColor.resolve( + colorBackground, + context, + ), + borderRadius: BorderRadius.circular( + 12, + ), + ), + child: Center( + child: Text( + message, + style: const TextStyle( + color: CupertinoColors.white, + fontSize: 16, + ), + textAlign: TextAlign.center, + ), + ), + ), + ), + ), + ); + }, + ); + + overlay.insert( + entry, + ); + + // Animate fade-in + animationController.forward(); + + // Wait, then fade out and remove + Future.delayed( + const Duration( + seconds: 2, + ), + ).then( + ( + _, + ) async { + await animationController.reverse(); + entry.remove(); + animationController.dispose(); + }, + ); +} + +// void +// showCupertinoToast( +// BuildContext context, +// String message, +// ) { +// final overlay = Overlay.of( +// context, +// ); +// final overlayEntry = OverlayEntry( +// builder: +// ( +// _, +// ) => Positioned( +// bottom: 100, // distance from bottom +// left: 24, +// right: 24, +// child: CupertinoPopupSurface( +// isSurfacePainted: true, +// child: Container( +// padding: const EdgeInsets.symmetric( +// horizontal: 16, +// vertical: 12, +// ), +// decoration: BoxDecoration( +// color: CupertinoColors.black.withValues( +// alpha: 0.8, +// ), +// borderRadius: BorderRadius.circular( +// 12, +// ), +// ), +// child: Center( +// child: Text( +// message, +// style: const TextStyle( +// color: CupertinoColors.white, +// ), +// textAlign: TextAlign.center, +// ), +// ), +// ), +// ), +// ), +// ); + +// overlay.insert( +// overlayEntry, +// ); +// Future.delayed( +// const Duration( +// seconds: 2, +// ), +// overlayEntry.remove, +// ); +// } diff --git a/lib/firebase_options.dart b/lib/firebase_options.dart new file mode 100644 index 0000000..c7dc2c3 --- /dev/null +++ b/lib/firebase_options.dart @@ -0,0 +1,70 @@ +// File generated by FlutterFire CLI. +// ignore_for_file: type=lint +import 'package:firebase_core/firebase_core.dart' show FirebaseOptions; +import 'package:flutter/foundation.dart' + show defaultTargetPlatform, kIsWeb, TargetPlatform; + +/// Default [FirebaseOptions] for use with your Firebase apps. +/// +/// Example: +/// ```dart +/// import 'firebase_options.dart'; +/// // ... +/// await Firebase.initializeApp( +/// options: DefaultFirebaseOptions.currentPlatform, +/// ); +/// ``` +class DefaultFirebaseOptions { + static FirebaseOptions get currentPlatform { + if (kIsWeb) { + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for web - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + } + switch (defaultTargetPlatform) { + case TargetPlatform.android: + return android; + case TargetPlatform.iOS: + return ios; + case TargetPlatform.macOS: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for macos - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + case TargetPlatform.windows: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for windows - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + case TargetPlatform.linux: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for linux - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + default: + throw UnsupportedError( + 'DefaultFirebaseOptions are not supported for this platform.', + ); + } + } + + static const FirebaseOptions android = FirebaseOptions( + apiKey: 'AIzaSyAzvzcZWKsqtoh3D2eifjMJvCuLOK8w3qc', + appId: '1:441447288850:android:75d41340d538f941edc8cb', + messagingSenderId: '441447288850', + projectId: 'hum-app-d68e3', + storageBucket: 'hum-app-d68e3.firebasestorage.app', + ); + + static const FirebaseOptions ios = FirebaseOptions( + apiKey: 'AIzaSyCLcT0zGwqlsKEhlfYEScuvZJ4FJXfeOGM', + appId: '1:441447288850:ios:4abcac611c190b72edc8cb', + messagingSenderId: '441447288850', + projectId: 'hum-app-d68e3', + storageBucket: 'hum-app-d68e3.firebasestorage.app', + androidClientId: '441447288850-2dj30aok9mn0gi8n09pshbo2odt6u643.apps.googleusercontent.com', + iosClientId: '441447288850-05msfa5br1q2f5144qtp128l4fp1rd22.apps.googleusercontent.com', + iosBundleId: 'com.latonas.hum', + ); +} diff --git a/lib/main.dart b/lib/main.dart new file mode 100644 index 0000000..18139b8 --- /dev/null +++ b/lib/main.dart @@ -0,0 +1,241 @@ +import 'dart:async'; +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/foundation.dart'; +import 'package:hum/core/constants/app_theme.dart'; +import 'package:hum/views/auth/auth_view.dart'; +import 'package:hum/views/home/home_view.dart'; +import 'package:hum/views/home/modes/home_map.dart'; +import 'package:hum/views/listings/views/new/drawer_new_item.dart'; + +import 'package:firebase_core/firebase_core.dart'; +import 'package:hum/views/notifications/view_notifications.dart'; +import 'package:hum/views/profile/profile_view.dart'; +import 'package:modal_bottom_sheet/modal_bottom_sheet.dart'; +import 'package:phosphor_flutter/phosphor_flutter.dart'; +import 'firebase_options.dart'; +import 'package:firebase_remote_config/firebase_remote_config.dart'; + +Future setupRemoteConfig() async { + final remoteConfig = FirebaseRemoteConfig.instance; + + await remoteConfig.setConfigSettings( + RemoteConfigSettings( + fetchTimeout: const Duration(minutes: 1), + minimumFetchInterval: kDebugMode + ? const Duration(seconds: 10) // Dev: 10 seconds + : const Duration(hours: 5), // Prod: 5 hours + ), + ); + + // 2. Set default values + // If the fetch fails (e.g., no internet), the app will use this backup URL. + await remoteConfig.setDefaults(const { + "fn_ai_parse_image": "https://us-central1-hum-app-d68e3.cloudfunctions.net/humprocessimage", + }); + + // 3. Fetch and Activate + // This pulls the latest values from the cloud and makes them available to the app. + try { + await remoteConfig.fetchAndActivate(); + print('Remote Config fetched and activated'); + } catch (e) { + print('Failed to fetch remote config: $e'); + } +} + +void main() async { + WidgetsFlutterBinding.ensureInitialized(); + await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform); + + // Increase image cache size for better performance + PaintingBinding.instance.imageCache.maximumSize = 200; // Default is 1000 + PaintingBinding.instance.imageCache.maximumSizeBytes = 150 << 20; // 150 MB (default is 100 MB) + + // Pulls the remote config + await setupRemoteConfig(); + + // Activates the App + runApp(const HUMApp()); +} + +class HUMApp extends StatelessWidget { + const HUMApp({super.key}); + + // This widget is the root of your application. + @override + Widget build(BuildContext context) { + return CupertinoApp( + title: 'Flutter Demo', + debugShowCheckedModeBanner: false, + theme: CupertinoThemeData( + brightness: Brightness.dark, + // primaryColor: colorAccentPrimary, + barBackgroundColor: colorBarBackground, + scaffoldBackgroundColor: colorBackground, + ), + // home: const HomeView(), + home: RootTabs(), + ); + } +} + +class RootTabs extends StatefulWidget { + const RootTabs({super.key}); + @override + State createState() => _RootTabsState(); +} + +class _RootTabsState extends State { + int _index = 0; + StreamSubscription? _userSubscription; + bool _userIsLoggedIn = false; + + @override + void initState() { + super.initState(); + _userSubscription = FirebaseAuth.instance.authStateChanges().listen((user) { + if (!mounted) return; + if (user == null) { + setState(() { + _userIsLoggedIn = false; + }); + } else { + setState(() { + _userIsLoggedIn = true; + }); + } + }); + } + + @override + void dispose() { + _userSubscription?.cancel(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Stack( + alignment: Alignment.bottomCenter, + children: [ + CupertinoTabScaffold( + tabBar: CupertinoTabBar( + backgroundColor: CupertinoDynamicColor.resolve(colorBackground, context), + activeColor: CupertinoDynamicColor.resolve(colorAccentSecondary, context), + // height: 58, + currentIndex: _index, + onTap: (i) { + if (i == 2) { + return; + } + setState(() => _index = i); + }, + items: [ + buildTabItem( + PhosphorIcons.house( + (_index == 0) ? PhosphorIconsStyle.fill : PhosphorIconsStyle.duotone, + ), + 'Home', + ), + buildTabItem( + PhosphorIcons.mapPin( + (_index == 1) ? PhosphorIconsStyle.fill : PhosphorIconsStyle.duotone, + ), + 'Messages', + ), + buildTabItem(CupertinoIcons.rectangle_expand_vertical, ''), + buildTabItem( + PhosphorIcons.chatCircle( + (_index == 3) ? PhosphorIconsStyle.fill : PhosphorIconsStyle.duotone, + ), + 'Notifications', + ), + buildTabItem( + PhosphorIcons.userCircle( + (_index == 4) ? PhosphorIconsStyle.fill : PhosphorIconsStyle.duotone, + ), + 'Profile', + ), + ], + ), + tabBuilder: (context, index) { + return CupertinoTabView( + builder: (context) { + switch (index) { + case 0: + return const HomeView(); + case 1: + return _userIsLoggedIn ? const HomeViewMap() : const AuthView(); + case 2: + return const HomeView(); + case 3: + return _userIsLoggedIn ? const ViewNotifications() : const AuthView(); + case 4: + return _userIsLoggedIn ? const ProfileView() : const AuthView(); + default: + return const HomeView(); + } + }, + ); + }, + ), + + // 👇 Floating round button + Positioned( + bottom: 30, // distance from bottom nav + child: GestureDetector( + onTap: () { + showCupertinoModalBottomSheet( + topRadius: Radius.circular(radiusCards), + useRootNavigator: true, + isDismissible: true, + context: context, + builder: (context) => Container( + height: MediaQuery.of(context).size.height, + color: CupertinoDynamicColor.resolve(colorBarBackground, context), + child: DrawerNewItem(), + ), + ); + }, + child: Container( + height: 56, + width: 56, + decoration: BoxDecoration(color: CupertinoColors.activeGreen, shape: BoxShape.circle), + child: const Icon( + CupertinoIcons.add, + color: CupertinoColors.white, + size: 28, + fontWeight: FontWeight.bold, + ), + ), + ), + ), + ], + ); + } +} + +BottomNavigationBarItem buildTabItem(IconData icon, String label) { + return BottomNavigationBarItem( + icon: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Padding( + padding: const EdgeInsets.only(top: 5.0, bottom: 1.0), + child: PhosphorIcon( + icon, + // color: Colors.green, + size: 30.0, + ), + ), + // Text( + // label, + // style: TextStyle( + // fontSize: 10, + // ), + // ), + ], + ), + ); +} diff --git a/lib/services/firebase_auth.dart b/lib/services/firebase_auth.dart new file mode 100644 index 0000000..ce269f7 --- /dev/null +++ b/lib/services/firebase_auth.dart @@ -0,0 +1,99 @@ +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:google_sign_in/google_sign_in.dart'; + +final _auth = FirebaseAuth.instance; + +Future signInWithGoogle() async { + try { + // Trigger the authentication flow + final GoogleSignInAccount googleUser = await GoogleSignIn.instance.authenticate(); + + // Obtain the auth details from the request + final GoogleSignInAuthentication googleAuth = googleUser.authentication; + + // Create a new credential + final credential = GoogleAuthProvider.credential(idToken: googleAuth.idToken); + + // Once signed in, return the UserCredential + return await FirebaseAuth.instance.signInWithCredential(credential); + } catch (e) { + // Handle and map Google sign-in specific errors + final msg = mapAuthErrorGoogle(e.toString()); + + throw Exception(msg); + } +} + +// flutter: Google sign-in failed: PlatformException(google_sign_in, Your app is missing support for the following URL schemes: com.googleusercontent.apps.441447288850-m7pld8j4gv8k1guc5l0jpk1auqi93mna, NSInvalidArgumentException, null) + +Future signUpEmail({required String email, required String password}) async { + try { + return await _auth.createUserWithEmailAndPassword(email: email.trim(), password: password); + } on FirebaseAuthException catch (e) { + throw _mapAuthError(e); + } +} + +Future signInEmail({required String email, required String password}) async { + try { + return await _auth.signInWithEmailAndPassword(email: email.trim(), password: password); + } on FirebaseAuthException catch (e) { + throw _mapAuthError(e); + } +} + +Future signOut() => _auth.signOut(); + +Stream get authState => _auth.authStateChanges(); + +String _mapAuthError(FirebaseAuthException e) { + switch (e.code) { + case 'invalid-email': + return 'The email address is badly formatted.'; + case 'user-disabled': + return 'This account has been disabled.'; + case 'user-not-found': + return 'No account found with this email.'; + case 'wrong-password': + return 'Incorrect password.'; + case 'email-already-in-use': + return 'An account already exists with this email.'; + case 'weak-password': + return 'Please choose a stronger password.'; + case 'operation-not-allowed': + return 'Email/Password is disabled in Firebase Console.'; + default: + return 'Authentication failed. (${e.code})'; + } +} + +String mapAuthErrorGoogle(Object e) { + // Some errors come wrapped in PlatformException or GoogleSignInException. + final msg = e.toString(); + + if (msg.contains('GoogleSignInExceptionCode.canceled') || + msg.contains('The user canceled') || + msg.contains('sign-in flow.') || + msg.contains('sign-in sflow.') || + msg.contains('Exception: Sign-in was canceled')) { + return 'Sign-in was canceled.'; + } + + if (msg.contains('no_network') || msg.contains('network error') || msg.contains('Network connection lost')) { + return 'Check your internet connection and try again.'; + } + + if (msg.contains('No active configuration') || msg.contains('GIDClientID')) { + return 'Google Sign-In is not configured correctly for this app.'; + } + + if (msg.contains('sign_in_failed') || msg.contains('invalid credentials') || msg.contains('Authentication error')) { + return 'Could not sign in with Google. Please try again.'; + } + + if (msg.contains('popup_closed_by_user') || msg.contains('User closed the popup')) { + return 'Google sign-in was closed before completion.'; + } + + return 'Google authentication failed.'; +} diff --git a/lib/services/firebase_functions.dart b/lib/services/firebase_functions.dart new file mode 100644 index 0000000..416d475 --- /dev/null +++ b/lib/services/firebase_functions.dart @@ -0,0 +1,39 @@ +import 'dart:convert'; // For jsonEncode +import 'package:firebase_remote_config/firebase_remote_config.dart'; +import 'package:http/http.dart' as http; + +Future callHumProcessImage(String targetImageUrl) async { + // 1. GET THE URL FROM REMOTE CONFIG + final remoteConfig = FirebaseRemoteConfig.instance; + String functionUrl = remoteConfig.getString('fn_ai_parse_image'); + + // Safety check: ensure we actually got a URL + if (functionUrl.isEmpty) { + print("Error: Remote Config URL is empty."); + return; + } + + final url = Uri.parse(functionUrl); + + try { + // 2. Make the POST request + final response = await http.post( + url, + headers: {'Content-Type': 'application/json'}, + // 3. Encode the body as JSON, inserting the dynamic URL + body: jsonEncode({'imageUrl': targetImageUrl}), + ); + + // 4. Check the response + if (response.statusCode == 200) { + print('Success: ${response.body}'); + // You can parse the response body here if your function returns data + // final data = jsonDecode(response.body); + } else { + print('Request failed with status: ${response.statusCode}.'); + print('Response body: ${response.body}'); + } + } catch (e) { + print('Error sending request: $e'); + } +} diff --git a/lib/services/firestore_api.dart b/lib/services/firestore_api.dart new file mode 100644 index 0000000..c9f574c --- /dev/null +++ b/lib/services/firestore_api.dart @@ -0,0 +1,20 @@ +import 'package:cloud_firestore/cloud_firestore.dart'; + +Future>> dbGetCategories() async { + final snapshot = await FirebaseFirestore.instance.collection('categories').get(); + return snapshot.docs.map((doc) => doc.data()).toList(); +} + +Future?> dbGetItemById(String itemId) async { + try { + final doc = await FirebaseFirestore.instance.collection('items').doc(itemId).get(); + + if (doc.exists) { + return doc.data(); + } + return null; + } catch (e) { + print('Error fetching item: $e'); + return null; + } +} diff --git a/lib/views/auth/auth_view.dart b/lib/views/auth/auth_view.dart new file mode 100644 index 0000000..702c3a9 --- /dev/null +++ b/lib/views/auth/auth_view.dart @@ -0,0 +1,194 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:hum/core/constants/app_text.dart'; +import 'package:hum/core/constants/app_theme.dart'; +import 'package:hum/core/utils/toaster.dart'; +import 'package:hum/services/firebase_auth.dart'; +import 'package:hum/widgets/widget_buttons.dart'; +import 'package:hum/widgets/widget_text_fields.dart'; + +class AuthView extends StatefulWidget { + const AuthView({super.key}); + @override + State createState() => _AuthViewState(); +} + +class _AuthViewState extends State { + bool signUp = false; + bool workingOnSignIn = false; + + final ctrlEmail = TextEditingController(); + final ctrlPassword = TextEditingController(); + final ctrlUsername = TextEditingController(); + + @override + Widget build(BuildContext context) { + final bottomInset = MediaQuery.of(context).viewInsets.bottom; // keyboard + + return CupertinoPageScaffold( + resizeToAvoidBottomInset: true, + backgroundColor: CupertinoDynamicColor.resolve(colorBarBackground, context), + navigationBar: const CupertinoNavigationBar(), + child: SafeArea( + bottom: false, // we'll add our own bottom padding that follows the keyboard + child: LayoutBuilder( + builder: (context, constraints) { + return SingleChildScrollView( + keyboardDismissBehavior: ScrollViewKeyboardDismissBehavior.onDrag, + physics: const BouncingScrollPhysics(), + padding: EdgeInsets.fromLTRB(14, 0, 14, bottomInset + 16), + child: ConstrainedBox( + constraints: BoxConstraints(minHeight: constraints.maxHeight), + child: Center( + // centers when there's room; scrolls when not + child: Column( + spacing: 8, + mainAxisSize: MainAxisSize.min, + children: [ + const SizedBox(height: 30), + Padding( + padding: const EdgeInsets.only(bottom: 16.0), + child: Text( + signUp ? authTitleSignUp : authTitleSignIn, + style: const TextStyle(fontSize: 30, fontWeight: FontWeight.w800), + textAlign: TextAlign.center, + ), + ), + + if (signUp) + TXTFieldInput( + controller: ctrlUsername, + placeholder: authPlaceholderDisplayName, + inputType: TextInputType.name, + ), + + TXTFieldInput( + controller: ctrlEmail, + placeholder: authPlaceholderEmail, + inputType: TextInputType.emailAddress, + password: false, + ), + + TXTFieldInput( + controller: ctrlPassword, + placeholder: authPlaceholderPassword, + inputType: TextInputType.text, + password: true, + ), + + // Sign in/up + Column( + children: [ + BTNFilledAnimated( + working: workingOnSignIn, + text: signUp ? authSignUp : authSignIn, + color: CupertinoDynamicColor.resolve(colorAccentSecondary, context), + action: () async { + final ctx = context; + try { + if (!mounted) return; + setState(() => workingOnSignIn = true); + if (signUp) { + await signUpEmail( + email: ctrlEmail.text, + password: ctrlPassword.text, + ); + } else { + await signInEmail( + email: ctrlEmail.text, + password: ctrlPassword.text, + ); + } + if (!mounted) return; + setState(() => workingOnSignIn = false); + } catch (e) { + if (!mounted) return; + setState(() => workingOnSignIn = false); + if (ctx.mounted) { + showCupertinoToast(ctx, e.toString()); + } + } + }, + ), + BTNText( + text: signUp ? authModeSignIn : authModeSignUp, + action: () => setState(() => signUp = !signUp), + ), + ], + ), + + const Divider(), + + // Providers + Column( + children: [ + SizedBox( + width: double.infinity, + child: CupertinoButton( + color: CupertinoColors.white, + borderRadius: BorderRadius.circular(roundLarge), + padding: const EdgeInsets.symmetric(vertical: 14), + onPressed: () async { + final ctx = context; + try { + await signInWithGoogle(); + } catch (e) { + if (ctx.mounted) showCupertinoToast(ctx, e.toString()); + } + }, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: const [ + Icon(Icons.g_mobiledata, color: CupertinoColors.black, size: 28), + SizedBox(width: 8), + Text( + authSignGoogle, + style: TextStyle( + color: CupertinoColors.black, + fontWeight: FontWeight.w600, + ), + ), + ], + ), + ), + ), + const SizedBox(height: 12), + SizedBox( + width: double.infinity, + child: CupertinoButton( + color: CupertinoColors.black, + borderRadius: BorderRadius.circular(roundLarge), + padding: const EdgeInsets.symmetric(vertical: 14), + onPressed: () {}, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: const [ + Text( + '', + style: TextStyle(fontSize: 22, color: CupertinoColors.white), + ), + SizedBox(width: 8), + Text( + authSignApple, + style: TextStyle( + color: CupertinoColors.white, + fontWeight: FontWeight.w600, + ), + ), + ], + ), + ), + ), + ], + ), + ], + ), + ), + ), + ); + }, + ), + ), + ); + } +} diff --git a/lib/views/eco/eco_view.dart b/lib/views/eco/eco_view.dart new file mode 100644 index 0000000..b9e07c8 --- /dev/null +++ b/lib/views/eco/eco_view.dart @@ -0,0 +1,32 @@ +import 'package:flutter/cupertino.dart'; + +class EcoView + extends + StatefulWidget { + const EcoView({ + super.key, + }); + + @override + State< + EcoView + > + createState() => _EcoViewState(); +} + +class _EcoViewState + extends + State< + EcoView + > { + @override + Widget build( + BuildContext context, + ) { + return const Center( + child: Text( + 'ECO', + ), + ); + } +} diff --git a/lib/views/explore/explore_view.dart b/lib/views/explore/explore_view.dart new file mode 100644 index 0000000..ef54564 --- /dev/null +++ b/lib/views/explore/explore_view.dart @@ -0,0 +1,32 @@ +import 'package:flutter/cupertino.dart'; + +class ExploreView + extends + StatefulWidget { + const ExploreView({ + super.key, + }); + + @override + State< + ExploreView + > + createState() => _ExploreViewState(); +} + +class _ExploreViewState + extends + State< + ExploreView + > { + @override + Widget build( + BuildContext context, + ) { + return const Center( + child: Text( + 'Explore', + ), + ); + } +} diff --git a/lib/views/home/home_view.dart b/lib/views/home/home_view.dart new file mode 100644 index 0000000..19463b3 --- /dev/null +++ b/lib/views/home/home_view.dart @@ -0,0 +1,286 @@ +import 'dart:async'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:hum/core/constants/app_text.dart'; +import 'package:hum/core/constants/app_theme.dart'; +import 'package:hum/core/utils/icon_mapper.dart'; +import 'package:hum/services/firestore_api.dart'; +import 'package:hum/views/home/modes/home_ai_view.dart'; +import 'package:hum/views/home/panels/home_categories.dart'; +import 'package:hum/views/home/panels/home_filters.dart'; +import 'package:hum/views/home/modes/home_grid.dart'; +import 'package:hum/views/home/widgets/home_widgets.dart'; +import 'package:hum/widgets/widget_buttons.dart'; +import 'package:modal_bottom_sheet/modal_bottom_sheet.dart'; + +class HomeView extends StatefulWidget { + const HomeView({super.key}); + + @override + State createState() => _HomeViewState(); +} + +class _HomeViewState extends State with SingleTickerProviderStateMixin { + int _ideaIndex = 0; + Timer? _ideasTimer; + bool showFilters = false; + bool showViewMode = false; + FocusNode searchFocusMode = FocusNode(); + String viewMode = 'ai'; + List> categories = []; + + final double navBarIconSize = 32; + late final AnimationController _borderController; + + final List colorsGlow = [ + Color(0xFF00FFFF), + Color(0xFF2155E5), + Color(0xFFFF00FF), + Color(0xFF0DFFEF), + ]; + + Future _initData() async { + List> dbCategories = await dbGetCategories(); + if (mounted) { + setState(() { + categories = [ + {'id': 'all', 'icon': 'squaresFour', 'name': 'All'}, + ...dbCategories, + ]; + }); + } + } + + @override + void initState() { + super.initState(); + + _borderController = AnimationController(vsync: this, duration: const Duration(seconds: 5)) + ..repeat(); + + searchFocusMode.addListener(() { + setState(() { + showFilters = searchFocusMode.hasFocus; + }); + }); + + _ideasTimer = Timer.periodic(const Duration(seconds: 3), (_) { + if (!mounted) return; + setState(() { + _ideaIndex = (_ideaIndex + 1) % homeViewIdeas.length; + }); + }); + + _initData(); + } + + @override + void dispose() { + _borderController.dispose(); + _ideasTimer?.cancel(); + searchFocusMode.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + final bottomInset = MediaQuery.of(context).viewInsets.bottom; + return CupertinoPageScaffold( + child: Stack( + children: [ + Positioned.fill( + child: SafeArea( + top: false, // allow content under status/nav bar + child: AnimatedPadding( + duration: const Duration(milliseconds: 200), + curve: Curves.easeOutCubic, + padding: EdgeInsets.only(bottom: bottomInset), + child: MediaQuery.removePadding( + context: context, + removeTop: true, // critical so it can slide under the bar + child: SafeArea( + child: Column( + spacing: 8, + children: [ + if (viewMode == 'ai') HomeAIView(), + if (viewMode == 'grid') HomeViewGrid(), + // if (viewMode == 'map') HomeViewMap(), + ], + ), + ), + ), + ), + ), + ), + + Positioned( + bottom: MediaQuery.of(context).padding.bottom, + left: 0, + right: 0, + child: Container( + // color: CupertinoDynamicColor.resolve(colorBackground, context), + decoration: BoxDecoration( + color: CupertinoDynamicColor.resolve(colorBackground, context), + // gradient: LinearGradient( + // begin: Alignment.topCenter, + // end: Alignment.bottomCenter, + // colors: [ + // CupertinoDynamicColor.resolve(colorBackground, context).withValues(alpha: 0), // Transparent at top + // CupertinoDynamicColor.resolve(colorBackground, context).withValues(alpha: 255), // Solid at bottom + // ], + // stops: [0.0, .1], + // ), + ), + child: Padding( + padding: const EdgeInsets.only(left: 6.0, right: 6.0, top: 12.0, bottom: 20), + child: SizedBox( + height: searchBarHeight, + width: double.infinity, + child: Row( + spacing: 0, + children: [ + Expanded( + child: SizedBox( + height: searchBarHeight, + child: CupertinoSearchTextField( + focusNode: searchFocusMode, + padding: EdgeInsetsGeometry.symmetric(horizontal: 6), + borderRadius: BorderRadius.circular(16), + placeholder: homeViewSearchPlaceholder, + ), + ), + ), + + AnimatedOpacity( + duration: Duration(milliseconds: 150), + opacity: viewMode != 'ai' ? 1 : 0, + child: AnimatedContainer( + curve: Curves.easeInOut, + width: viewMode != 'ai' ? 46 : 0, + duration: Duration(milliseconds: 150), + child: Padding( + padding: const EdgeInsets.only(left: 4.0), + child: SizedBox( + width: 42, + child: BTNRoundBG( + icon: PhosphorIconHelper.fromString('fadersHorizontal'), + action: () { + showCupertinoModalBottomSheet( + topRadius: Radius.circular(radiusCards), + useRootNavigator: true, + isDismissible: true, + context: context, + builder: (context) => Container( + height: MediaQuery.of(context).size.height / 1.3, + color: CupertinoDynamicColor.resolve( + colorBarBackground, + context, + ), + child: HomeFilters(), + ), + ); + }, + ), + ), + ), + ), + ), + + AnimatedOpacity( + duration: Duration(milliseconds: 150), + opacity: viewMode != 'ai' ? 1 : 0, + child: AnimatedContainer( + curve: Curves.easeInOut, + width: viewMode != 'ai' ? 46 : 0, + duration: Duration(milliseconds: 150), + child: Padding( + padding: const EdgeInsets.only(left: 4.0), + child: BTNRoundBG( + // icon: CupertinoIcons.square_grid_2x2_fill, + icon: PhosphorIconHelper.fromString('circlesFour', style: 'fill'), + action: () { + showCupertinoModalBottomSheet( + topRadius: Radius.circular(radiusCards), + useRootNavigator: true, + isDismissible: true, + context: context, + builder: (context) => Container( + height: MediaQuery.of(context).size.height / 1.55, + color: CupertinoDynamicColor.resolve( + colorBarBackground, + context, + ), + child: HomePanelCategory(categories: categories), + ), + ); + }, + ), + ), + ), + ), + ], + ), + ), + ), + ), + ), + + Positioned( + top: 0, + left: 0, + right: 0, + child: SafeArea( + bottom: false, + child: CupertinoNavigationBar( + backgroundColor: Colors.transparent, + enableBackgroundFilterBlur: false, + automaticBackgroundVisibility: false, + border: null, // remove bottom hairline + automaticallyImplyLeading: false, + leading: Row( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + SizedBox(width: 80, child: Image.asset('assets/images/logo_large_green.png')), + ], + ), + trailing: Row( + spacing: 6, + // crossAxisAlignment: CrossAxisAlignment.end, + mainAxisAlignment: MainAxisAlignment.end, + children: [ + HomeToggleView( + mode: viewMode, + onChanged: (newView) { + setState(() { + viewMode = newView; + }); + }, + ), + + Container( + decoration: BoxDecoration( + border: Border.all( + width: 2, + color: CupertinoDynamicColor.resolve(colorBackground, context), + ), + borderRadius: BorderRadius.circular(100), + ), + child: CircleAvatar( + // radius: 24, + child: ClipRRect( + borderRadius: BorderRadius.circular(999), + child: Image.asset('assets/images/profile_test_002.jpg'), + ), + ), + ), + ], + ), + ), + ), + ), + ], + ), + ); + } +} diff --git a/lib/views/home/modes/home_ai_view.dart b/lib/views/home/modes/home_ai_view.dart new file mode 100644 index 0000000..82d2cbf --- /dev/null +++ b/lib/views/home/modes/home_ai_view.dart @@ -0,0 +1,181 @@ +import 'dart:async'; +import 'dart:math' as math; +import 'dart:ui'; + +import 'package:flutter/cupertino.dart'; +import 'package:hum/core/constants/app_text.dart'; +import 'package:hum/core/constants/app_theme.dart'; + +class HomeAIView extends StatefulWidget { + const HomeAIView({super.key}); + + @override + State createState() => _HomeAIViewState(); +} + +class _HomeAIViewState extends State with SingleTickerProviderStateMixin { + int _ideaIndex = 0; + Timer? _ideasTimer; + late final AnimationController _borderController; + final List colorsGlow = [ + Color(0xFF00FFFF), + Color(0xFF2155E5), + Color(0xFF2155E5), + Color(0xFF0DFFEF), + ]; + + @override + void initState() { + super.initState(); + + _borderController = AnimationController(vsync: this, duration: const Duration(seconds: 5)) + ..repeat(); + + _ideasTimer = Timer.periodic(const Duration(seconds: 3), (_) { + if (!mounted) return; + setState(() { + _ideaIndex = (_ideaIndex + 1) % homeViewIdeas.length; + }); + }); + } + + @override + void dispose() { + _borderController.dispose(); + _ideasTimer?.cancel(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Expanded( + child: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Spacer(flex: 2), + SizedBox( + width: 150, + child: Stack( + alignment: Alignment.center, + children: [ + AnimatedBuilder( + animation: _borderController, + builder: (context, _) { + final rot = _borderController.value * 2 * math.pi; + return ImageFiltered( + imageFilter: ImageFilter.blur(sigmaX: 34, sigmaY: 24), + child: Container( + width: 170, + height: 170, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(38), + gradient: SweepGradient( + colors: colorsGlow, + stops: const [0.0, 0.33, 0.66, 1.0], + transform: GradientRotation(rot), + ), + boxShadow: [ + BoxShadow( + color: CupertinoDynamicColor.resolve( + colorAccentPrimary, + context, + ).withValues(alpha: 0.1), + blurRadius: 40, + spreadRadius: 12, + ), + BoxShadow( + color: CupertinoDynamicColor.resolve( + colorAccentPrimary, + context, + ).withValues(alpha: 0.15), + blurRadius: 10, + spreadRadius: 24, + ), + ], + ), + ), + ); + }, + ), + AnimatedBuilder( + animation: _borderController, + builder: (context, _) { + final rot = _borderController.value * 2 * math.pi; + return Container( + padding: const EdgeInsets.all(4), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(36), + gradient: SweepGradient( + colors: colorsGlow, + stops: const [0.0, 0.33, 0.66, 1.0], + transform: GradientRotation(rot), + ), + boxShadow: [ + BoxShadow( + color: CupertinoDynamicColor.resolve( + colorAccentPrimary, + context, + ).withValues(alpha: 0.1), + blurRadius: 30, + spreadRadius: 6, + ), + ], + ), + child: ClipRRect( + borderRadius: BorderRadius.circular(32), + child: Image.asset('assets/images/logo_app_large.png', fit: BoxFit.cover), + ), + ); + }, + ), + ], + ), + ), + Spacer(), + Column( + children: [ + Text( + homeViewVoiceTitle, + style: const TextStyle(fontWeight: FontWeight.bold, fontSize: 20), + ), + Padding( + padding: const EdgeInsets.only(top: 2.0), + child: Opacity( + opacity: 0.8, + child: Text( + homeViewVoiceMessage, + style: const TextStyle(fontWeight: FontWeight.w300, fontSize: 17), + ), + ), + ), + Padding( + padding: const EdgeInsets.only(top: 24.0, bottom: 40.0), + child: Opacity( + opacity: 0.8, + child: AnimatedSwitcher( + duration: const Duration(milliseconds: 350), + transitionBuilder: (child, anim) => + FadeTransition(opacity: anim, child: child), + child: Text( + homeViewIdeas[_ideaIndex], + key: ValueKey(_ideaIndex), + textAlign: TextAlign.center, + style: const TextStyle( + fontWeight: FontWeight.w500, + fontSize: 17, + color: CupertinoColors.systemPurple, + ), + ), + ), + ), + ), + ], + ), + Spacer(), + ], + ), + ), + ); + } +} diff --git a/lib/views/home/modes/home_grid.dart b/lib/views/home/modes/home_grid.dart new file mode 100644 index 0000000..8925908 --- /dev/null +++ b/lib/views/home/modes/home_grid.dart @@ -0,0 +1,202 @@ +import 'package:cached_network_image/cached_network_image.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:cloud_firestore/cloud_firestore.dart'; +import 'package:hum/core/constants/app_theme.dart'; +import 'package:hum/views/listings/views/items/thumbnail_with_details.dart'; + +class HomeViewGrid extends StatefulWidget { + const HomeViewGrid({super.key}); + + @override + State createState() => _HomeViewGridState(); +} + +class _HomeViewGridState extends State { + final ScrollController _scrollController = ScrollController(); + + @override + void dispose() { + _scrollController.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + final cardRadius = 16.0; + + return Expanded( + child: StreamBuilder( + stream: FirebaseFirestore.instance.collection('items').snapshots(), + builder: (context, snapshot) { + if (snapshot.hasError) { + return Center( + child: Text( + 'Error: ${snapshot.error}', + style: const TextStyle(color: CupertinoColors.systemRed), + ), + ); + } + + // Only show loading spinner on initial load, not on updates + if (!snapshot.hasData) { + return const Center(child: CupertinoActivityIndicator()); + } + + if (snapshot.data!.docs.isEmpty) { + return const Center( + child: Text('No items found', style: TextStyle(color: CupertinoColors.systemGrey)), + ); + } + + final items = snapshot.data!.docs; + + return CustomScrollView( + controller: _scrollController, + cacheExtent: 1000, // Preload images 1000 pixels ahead + slivers: [ + const SliverPadding(padding: EdgeInsets.only(top: 120.0)), + SliverPadding( + padding: const EdgeInsets.all(8.0), + sliver: SliverGrid( + gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 2, + crossAxisSpacing: 6.0, + mainAxisSpacing: 6.0, + childAspectRatio: 0.9, + ), + delegate: SliverChildBuilderDelegate( + (context, index) { + final item = items[index]; + + Map? itemData = item.data() as Map?; + String thumbnailURL = ''; + if (itemData != null) { + thumbnailURL = itemData['images'][0]; + } + + return GestureDetector( + onTap: () { + Navigator.of(context, rootNavigator: true).push( + CupertinoPageRoute( + // fullscreenDialog: true, + builder: (context) => ViewListingsItem( + itemID: item.id, + thumbnailURL: thumbnailURL, + itemData: itemData, + ), + ), + ); + }, + child: Container( + key: ValueKey(item.id), + decoration: BoxDecoration( + color: CupertinoDynamicColor.resolve(colorBarBackground, context), + borderRadius: BorderRadius.circular(cardRadius), + // border: Border.all(color: color, width: 2.0), + ), + child: Column( + children: [ + Stack( + children: [ + // LISTING IMAGE + Padding( + padding: const EdgeInsets.all(6.0), + child: SizedBox( + height: 150, + width: double.infinity, + child: Hero( + tag: itemData?['id'], + child: ClipRRect( + borderRadius: BorderRadius.only( + topLeft: Radius.circular(cardRadius), + topRight: Radius.circular(cardRadius), + bottomLeft: Radius.circular(cardRadius), + bottomRight: Radius.circular(cardRadius), + ), + child: CachedNetworkImage( + imageUrl: thumbnailURL, + fit: BoxFit.cover, + memCacheHeight: 600, + maxHeightDiskCache: 600, + fadeInDuration: Duration.zero, + fadeOutDuration: Duration.zero, + placeholderFadeInDuration: Duration.zero, + // fadeInDuration: Duration(milliseconds: 200), + placeholder: (context, url) => + Center(child: CupertinoActivityIndicator()), + errorWidget: (context, url, error) => + Icon(CupertinoIcons.photo, size: 32), + ), + ), + ), + ), + ), + + // CATEGORY LABEL + Positioned( + top: 16, + left: 16, + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(6), + color: CupertinoColors.activeBlue.withAlpha(180), + ), + padding: EdgeInsets.symmetric(horizontal: 6, vertical: 2), + + child: Text( + 'Electronics', + style: TextStyle(fontSize: 12, fontWeight: FontWeight.bold), + ), + ), + ), + ], + ), + Expanded( + child: Padding( + padding: const EdgeInsets.only( + left: 0.0, + right: 8.0, + top: 0.0, + bottom: 0.0, + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + spacing: 2, + children: [ + Text( + itemData?['title'], + overflow: TextOverflow.ellipsis, + maxLines: 1, + style: TextStyle(fontSize: 14), + ), + Text( + '\$${itemData!['price_per_day']} / day', + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.bold, + color: CupertinoColors.activeBlue, + ), + ), + ], + ), + ), + ), + ], + ), + ), + ); + }, + childCount: items.length, + addAutomaticKeepAlives: true, + addRepaintBoundaries: true, + ), + ), + ), + ], + ); + }, + ), + ); + } +} diff --git a/lib/views/home/modes/home_map.dart b/lib/views/home/modes/home_map.dart new file mode 100644 index 0000000..52ab3d5 --- /dev/null +++ b/lib/views/home/modes/home_map.dart @@ -0,0 +1,16 @@ +import 'package:flutter/cupertino.dart'; +import 'package:modal_bottom_sheet/modal_bottom_sheet.dart'; + +class HomeViewMap extends StatefulWidget { + const HomeViewMap({super.key}); + + @override + State createState() => _HomeViewMapState(); +} + +class _HomeViewMapState extends State { + @override + Widget build(BuildContext context) { + return CupertinoScaffold(body: const Center(child: Text('MAPS'))); + } +} diff --git a/lib/views/home/panels/home_categories.dart b/lib/views/home/panels/home_categories.dart new file mode 100644 index 0000000..37989a8 --- /dev/null +++ b/lib/views/home/panels/home_categories.dart @@ -0,0 +1,144 @@ +import 'package:cloud_firestore/cloud_firestore.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:hum/core/constants/app_text.dart'; +import 'package:hum/core/constants/app_theme.dart'; +import 'package:hum/core/utils/icon_mapper.dart'; +import 'package:phosphor_flutter/phosphor_flutter.dart'; + +class HomePanelCategory extends StatefulWidget { + final List> categories; + const HomePanelCategory({super.key, this.categories = const []}); + + @override + State createState() => _HomePanelCategoryState(); +} + +Stream>> categoriesStream() { + return FirebaseFirestore.instance + .collection('categories') + .snapshots() + .map((snapshot) => snapshot.docs.map((doc) => doc.data()).toList()); +} + +class _HomePanelCategoryState extends State { + List selectedCategories = []; + + bool isSelected(String categoryId, int index) { + if (selectedCategories.contains(categoryId)) { + return true; + } else if (index == 0 && selectedCategories.isEmpty) { + return true; + } + return false; + } + + void toggleCategory(String category) { + if (category.toLowerCase() == 'all') { + selectedCategories.clear(); + setState(() => selectedCategories = selectedCategories); + return; + } + + if (selectedCategories.contains(category)) { + selectedCategories.remove(category); + } else { + selectedCategories.add(category); + } + + setState(() => selectedCategories = selectedCategories); + } + + @override + Widget build(BuildContext context) { + return CupertinoPageScaffold( + backgroundColor: CupertinoDynamicColor.resolve(colorBarBackground, context), + navigationBar: CupertinoNavigationBar( + automaticallyImplyLeading: false, + trailing: CupertinoButton( + padding: EdgeInsets.all(0), + child: Text(doneLabel), + onPressed: () => Navigator.of(context).maybePop(), + ), + ), + + child: SafeArea( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 16.0), + child: CustomScrollView( + physics: const BouncingScrollPhysics(), + slivers: [ + SliverPadding( + padding: const EdgeInsets.only(top: 12, bottom: 24), + sliver: SliverGrid( + gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 2, + mainAxisSpacing: 8, + crossAxisSpacing: 8, + childAspectRatio: 1.7, // width / height ratio + ), + delegate: SliverChildBuilderDelegate((context, index) { + final category = widget.categories[index]; + + return GestureDetector( + onTap: () { + toggleCategory(category['id']); + }, + child: Container( + decoration: BoxDecoration( + color: CupertinoDynamicColor.resolve( + (isSelected(category['id'], index)) + ? colorBarControl.withAlpha(30) + : colorBarControl.withAlpha(10), + context, + ), + borderRadius: BorderRadius.circular(12), + border: BoxBorder.all( + width: 2, + color: (isSelected(category['id'], index)) + ? CupertinoColors.activeGreen + : colorBarControlBordeer.withValues(alpha: 0.2), + ), + ), + child: Center( + child: Column( + spacing: 10, + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + PhosphorIcon( + PhosphorIconHelper.fromString( + category['icon'] ?? 'home', + style: (isSelected(category['id'], index)) ? 'fill' : 'duotone', + ), + size: 40, + color: (isSelected(category['id'], index)) + ? CupertinoColors.activeGreen + : CupertinoColors.white.withAlpha(140), + ), + + Text( + category['name'] ?? 'Unnamed', + style: TextStyle( + color: (isSelected(category['id'], index)) + ? CupertinoColors.activeGreen + : CupertinoColors.white.withAlpha(180), + fontSize: 16, + fontWeight: FontWeight.w500, + ), + textAlign: TextAlign.center, + ), + ], + ), + ), + ), + ); + }, childCount: widget.categories.length), + ), + ), + ], + ), + ), + ), + ); + } +} diff --git a/lib/views/home/panels/home_filters.dart b/lib/views/home/panels/home_filters.dart new file mode 100644 index 0000000..6be6276 --- /dev/null +++ b/lib/views/home/panels/home_filters.dart @@ -0,0 +1,153 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:hum/core/constants/app_text.dart'; +import 'package:hum/core/constants/app_theme.dart'; +import 'package:hum/widgets/widget_buttons.dart'; +import 'package:hum/widgets/widget_text_fields.dart'; + +class HomeFilters extends StatefulWidget { + const HomeFilters({super.key}); + + @override + State createState() => _HomeFiltersState(); +} + +String locationFriendly = 'San Francisco'; +TextEditingController ctrlLocation = TextEditingController(); +final UniqueKey keyCtrlLocation = UniqueKey(); +String filterDateStartFriendly = 'May 22nd, 2027'; +String filterDateEndFriendly = 'June 3rd, 2027'; + +class _HomeFiltersState extends State { + @override + Widget build(BuildContext context) { + return CupertinoPageScaffold( + backgroundColor: CupertinoDynamicColor.resolve(colorBarBackground, context), + navigationBar: CupertinoNavigationBar( + automaticallyImplyLeading: false, + // leading: CupertinoButton( + // padding: EdgeInsets.zero, + // onPressed: () => Navigator.of( + // context, + // ).maybePop(), + // child: Text( + // 'Close', + // ), + // ), + // middle: Text( + // 'Filters', + // ), + trailing: CupertinoButton( + padding: EdgeInsets.all(0), + child: Text('Done'), + onPressed: () => Navigator.of(context).maybePop(), + ), + ), + child: SafeArea( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 16.0), + child: Column( + spacing: 16, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // LOCATION + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + LBLFilter(label: filterLocation), + Opacity( + opacity: 0.7, + child: Row( + spacing: 4, + children: [ + Icon(CupertinoIcons.globe, color: CupertinoColors.lightBackgroundGray, size: 18), + Text(locationFriendly, style: TextStyle(fontSize: 15)), + ], + ), + ), + ], + ), + + TXTFieldInput( + key: keyCtrlLocation, + controller: ctrlLocation, + placeholder: filterLocationPlaceholder, + inputType: TextInputType.text, + ), + + BTNFilledIcon( + text: 'Current Location', + color: colorBarButton, + icon: CupertinoIcons.location_fill, + action: () {}, + ), + + // SizedBox( + // width: double.infinity, + // child: CupertinoSlider( + // value: 30, + // min: 1, + // max: 100, + // onChanged: + // ( + // value, + // ) => {}, + // ), + // ), + Divider(), + + // DATES + LBLFilter(label: filterDates), + + Column( + spacing: 6, + children: [ + BTNComplex( + label: filterLabelStartDate, + text: filterDateStartFriendly, + iconLeading: CupertinoIcons.calendar, + color: CupertinoDynamicColor.resolve(colorBarButton, context), + textColor: CupertinoDynamicColor.resolve(colorAccentSecondary, context), + action: () {}, + ), + + Center( + child: Opacity(opacity: .5, child: Icon(CupertinoIcons.arrow_down, color: Colors.white)), + ), + + BTNComplex( + label: filterLabelEndDate, + text: filterDateEndFriendly, + iconLeading: CupertinoIcons.calendar, + color: CupertinoDynamicColor.resolve(colorBarButton, context), + textColor: CupertinoDynamicColor.resolve(colorAccentPrimary, context), + action: () {}, + ), + ], + ), + + Divider(), + + // PRICING + LBLFilter(label: filterPricing), + ], + ), + ), + ), + ); + } +} + +class LBLFilter extends StatelessWidget { + const LBLFilter({super.key, required this.label}); + + final String label; + + @override + Widget build(BuildContext context) { + return Opacity( + opacity: .5, + child: Text(label, style: TextStyle(fontSize: 16, fontWeight: FontWeight.w300)), + ); + } +} diff --git a/lib/views/home/widgets/home_widgets.dart b/lib/views/home/widgets/home_widgets.dart new file mode 100644 index 0000000..fa2608f --- /dev/null +++ b/lib/views/home/widgets/home_widgets.dart @@ -0,0 +1,211 @@ +import 'package:flutter/cupertino.dart'; +import 'package:hum/core/constants/app_icons.dart'; +import 'package:hum/core/constants/app_theme.dart'; +import 'package:hum/widgets/widget_buttons.dart'; + +class BTNCategory extends StatelessWidget { + final String label; + final String icon; + + const BTNCategory({required this.label, required this.icon, super.key}); + + @override + Widget build(BuildContext context) { + return Container( + decoration: BoxDecoration( + border: Border.all( + color: CupertinoDynamicColor.resolve( + colorCategoryButtonBG, + context, + ).withValues(alpha: 0.2), + width: 1.5, + ), + borderRadius: BorderRadius.circular(8), + ), + child: CupertinoButton( + minimumSize: Size(0, categoryHeight), + color: CupertinoDynamicColor.resolve(colorCategoryButtonBG, context).withValues(alpha: .3), + borderRadius: BorderRadius.circular(8), + padding: EdgeInsets.zero, + onPressed: () {}, + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 9.0), + child: Row( + spacing: 4, + children: [ + Icon( + size: 14, + color: CupertinoDynamicColor.resolve(colorCategoryButtonFG, context), + CupertinoIconHelper.fromString(icon), + ), + Text( + label, + style: TextStyle( + fontSize: 14, + color: CupertinoDynamicColor.resolve(colorCategoryButtonFG, context), + ), + ), + ], + ), + ), + ), + ); + } +} + +class BTNViewSwitcher extends StatelessWidget { + final List actions; + final String view; + // final double iconSize; + // final EdgeInsetsGeometry padding; + + const BTNViewSwitcher({super.key, this.view = 'ai', required this.actions}); + + @override + Widget build(BuildContext context) { + return CupertinoButton( + key: UniqueKey(), + child: Icon(CupertinoIcons.ellipsis_vertical), + onPressed: () => _showMenu(context), + ); + } + + void _showMenu(BuildContext context) { + showCupertinoModalPopup( + context: context, + builder: (ctx) => CupertinoActionSheet( + actions: actions.map((a) { + final row = Row( + spacing: 12, + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Padding( + padding: const EdgeInsets.only(left: 8.0), + child: Icon(a.icon, size: 20, color: colorBarButton), + ), + + Text(a.label, style: TextStyle(color: CupertinoColors.lightBackgroundGray)), + ], + ); + return CupertinoActionSheetAction( + isDestructiveAction: a.destructive, + onPressed: () { + Navigator.of(ctx).pop(); + a.onPressed(); + }, + child: row, + ); + }).toList(), + cancelButton: CupertinoActionSheetAction( + onPressed: () => Navigator.of(ctx).pop(), + isDefaultAction: true, + child: const Text('Cancel'), + ), + ), + ); + } +} + +// TOGGLE TO CHANGE VIEW MODE +class HomeToggleView extends StatefulWidget { + const HomeToggleView({super.key, this.mode = 'grid', required this.onChanged}); + + final String mode; + final ValueChanged onChanged; + + @override + State createState() => _HomeToggleViewState(); +} + +class _HomeToggleViewState extends State { + String mode = 'grid'; + + @override + void initState() { + mode = widget.mode; + super.initState(); + } + + @override + Widget build(BuildContext context) { + return SizedBox( + child: Container( + padding: EdgeInsets.all(3), + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(14)), + color: CupertinoDynamicColor.resolve(colorBackground, context), + ), + child: Row( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.end, + children: [ + SizedBox( + width: 40, + height: 36, + child: CupertinoButton.filled( + color: mode == 'ai' + ? CupertinoDynamicColor.resolve(colorBarButton, context) + : CupertinoDynamicColor.resolve(colorBackground, context), + + padding: EdgeInsets.zero, + child: Text( + 'AI', + style: TextStyle(fontWeight: mode == 'ai' ? FontWeight.bold : FontWeight.w300), + ), + onPressed: () { + setState(() { + mode = 'ai'; + }); + widget.onChanged('ai'); + }, + ), + ), + SizedBox( + width: 40, + height: 36, + child: CupertinoButton.filled( + color: mode == 'grid' + ? CupertinoDynamicColor.resolve(colorBarButton, context) + : CupertinoDynamicColor.resolve(colorBackground, context), + + padding: EdgeInsets.zero, + child: Icon( + mode == 'grid' + ? CupertinoIcons.square_grid_2x2_fill + : CupertinoIcons.square_grid_2x2, + ), + onPressed: () { + setState(() { + mode = 'grid'; + }); + widget.onChanged('grid'); + }, + ), + ), + + // SizedBox( + // width: 40, + // height: 36, + // child: CupertinoButton.filled( + // color: mode == 'map' + // ? CupertinoDynamicColor.resolve(colorBarButton, context) + // : CupertinoDynamicColor.resolve(colorBackground, context), + + // padding: EdgeInsets.zero, + // child: Icon(mode == 'map' ? CupertinoIcons.map_fill : CupertinoIcons.map), + // onPressed: () { + // setState(() { + // mode = 'map'; + // }); + // widget.onChanged('map'); + // }, + // ), + // ), + ], + ), + ), + ); + } +} diff --git a/lib/views/listings/views/items/thumbnail_with_details.dart b/lib/views/listings/views/items/thumbnail_with_details.dart new file mode 100644 index 0000000..6476b67 --- /dev/null +++ b/lib/views/listings/views/items/thumbnail_with_details.dart @@ -0,0 +1,286 @@ +import 'package:cached_network_image/cached_network_image.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:hum/core/constants/app_text.dart'; +import 'package:hum/core/constants/app_theme.dart'; +import 'package:hum/services/firestore_api.dart'; +import 'package:hum/widgets/widget_buttons.dart'; +import 'package:phosphor_flutter/phosphor_flutter.dart'; + +class ViewListingsItem extends StatefulWidget { + final String itemID; + final String thumbnailURL; + final Map itemData; + const ViewListingsItem({ + super.key, + required this.itemID, + required this.thumbnailURL, + required this.itemData, + }); + + @override + State createState() => _ViewListingState(); +} + +class _ViewListingState extends State { + late final Map itemData; + String title = ''; + + void setItemDetails() async { + Map dbItemData = (await dbGetItemById(widget.itemID))!; + setState(() { + itemData = dbItemData; + title = itemData['title']; + }); + } + + @override + void initState() { + // setItemDetails(); + super.initState(); + } + + @override + Widget build(BuildContext context) { + final cardRadius = 16.0; + // print(widget.itemData); + return CupertinoPageScaffold( + navigationBar: CupertinoNavigationBar( + automaticallyImplyLeading: true, + leading: CupertinoButton( + padding: EdgeInsets.zero, + child: Row( + children: [ + PhosphorIcon( + PhosphorIconsRegular.caretLeft, + size: 26, + // color: Colors.green, + // size: 30.0, + ), + Text(doneBack), + ], + ), + onPressed: () { + Navigator.of(context).maybePop(); + }, + ), + ), + child: SafeArea( + child: Column( + children: [ + Expanded( + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.symmetric(horizontal: 12.0), + child: Hero( + tag: widget.itemID, + child: ClipRRect( + borderRadius: BorderRadius.only( + topLeft: Radius.circular(cardRadius), + topRight: Radius.circular(cardRadius), + bottomLeft: Radius.circular(cardRadius), + bottomRight: Radius.circular(cardRadius), + ), + child: SizedBox( + width: double.infinity, + height: 340, + child: CachedNetworkImage( + imageUrl: widget.thumbnailURL, + fit: BoxFit.cover, + memCacheHeight: 1500, + fadeInDuration: Duration.zero, + fadeOutDuration: Duration.zero, + placeholderFadeInDuration: Duration.zero, + placeholder: (context, url) { + // Try to use the cached thumbnail as placeholder + return Image( + image: CachedNetworkImageProvider(widget.thumbnailURL), + fit: BoxFit.cover, + errorBuilder: (context, error, stackTrace) { + return Center(child: CupertinoActivityIndicator()); + }, + ); + }, + errorWidget: (context, url, error) => + Center(child: Icon(CupertinoIcons.photo, size: 48)), + ), + ), + ), + ), + ), + + // Hero( + // tag: widget.itemID, + // child: SizedBox( + // width: double.infinity, + // height: 300, + // child: CachedNetworkImage( + // imageUrl: widget.thumbnailURL, + // fit: BoxFit.cover, + // placeholder: (context, url) => + // Center(child: CupertinoActivityIndicator()), + // ), + // ), + // ), + Padding( + padding: const EdgeInsets.only(left: 16.0, right: 16.0, top: 30), + child: Column( + spacing: 16, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + spacing: 16, + children: [ + Expanded( + child: Text( + widget.itemData['title'], + overflow: TextOverflow.visible, + style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20), + ), + ), + + // Text(widget.itemData['price_per_day'].toString()), + Text( + '\$${widget.itemData['price_per_day']} / day', + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.bold, + color: CupertinoColors.activeBlue, + ), + ), + ], + ), + + Opacity(opacity: 0.6, child: Text(widget.itemData['description'])), + + Padding( + padding: const EdgeInsets.only(top: 12.0), + child: Text( + listingLabelCondition, + style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16), + ), + ), + + Row( + spacing: 10, + children: [ + PhosphorIcon( + PhosphorIconsFill.star, + size: 20, + color: CupertinoColors.systemYellow, + // size: 30.0, + ), + Text(listingLabelCondition), + ], + ), + + Padding( + padding: const EdgeInsets.only(top: 12.0), + child: Text( + listingLabelFeatures, + style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16), + ), + ), + + Column( + spacing: 4, + children: [ + ...widget.itemData['features'].map((feature) { + return Row( + spacing: 10, + children: [ + PhosphorIcon( + PhosphorIconsFill.checkCircle, + size: 20, + color: CupertinoColors.activeGreen, + // size: 30.0, + ), + Text(feature), + ], + ); + }).toList(), + ], + ), + + Padding( + padding: const EdgeInsets.only(top: 12.0), + child: Text( + listingLabelOwner, + style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16), + ), + ), + + Row( + crossAxisAlignment: CrossAxisAlignment.center, + spacing: 10, + children: [ + CircleAvatar(radius: 25), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text('Jon Dow'), + Row( + spacing: 4, + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + PhosphorIcon( + PhosphorIconsFill.star, + size: 16, + color: CupertinoColors.systemYellow, + // size: 30.0, + ), + Text( + '4.5', + style: TextStyle(fontWeight: FontWeight.bold, fontSize: 14), + ), + ], + ), + ], + ), + ], + ), + ], + ), + ), + ], + ), + ), + ), + + Container( + width: double.infinity, + height: 60, + padding: EdgeInsets.symmetric(horizontal: 16.0), + child: Row( + spacing: 8, + children: [ + Expanded( + child: BTNFilledIcon( + color: CupertinoDynamicColor.resolve(colorBarButton, context), + text: listingActionMessage, + icon: PhosphorIconsDuotone.chatCircle, + alignment: MainAxisAlignment.center, + action: () {}, + ), + ), + Expanded( + child: BTNFilledIcon( + text: listingActionRent, + icon: PhosphorIconsDuotone.calendarPlus, + alignment: MainAxisAlignment.center, + action: () {}, + ), + ), + ], + ), + ), + ], + ), + ), + ); + } +} diff --git a/lib/views/listings/views/new/drawer_new_item.dart b/lib/views/listings/views/new/drawer_new_item.dart new file mode 100644 index 0000000..e944ff0 --- /dev/null +++ b/lib/views/listings/views/new/drawer_new_item.dart @@ -0,0 +1,34 @@ +import 'package:flutter/cupertino.dart'; +import 'package:hum/core/constants/app_text.dart'; +import 'package:hum/core/constants/app_theme.dart'; +import 'package:hum/views/listings/views/new/state_selection.dart'; + +enum DrawerStatus { selection, uploading, parsing, editing, listed } + +class DrawerNewItem extends StatefulWidget { + const DrawerNewItem({super.key}); + + @override + State createState() => _DrawerNewItemState(); +} + +class _DrawerNewItemState extends State { + DrawerStatus _drawerStatus = DrawerStatus.selection; + + @override + Widget build(BuildContext context) { + return CupertinoPageScaffold( + navigationBar: CupertinoNavigationBar( + leading: CupertinoButton( + padding: EdgeInsets.all(0), + child: Text(doneCancel), + onPressed: () { + Navigator.of(context).maybePop(); + }, + ), + ), + backgroundColor: CupertinoDynamicColor.resolve(colorBarControl, context), + child: (_drawerStatus == DrawerStatus.selection) ? DrawerStateSelection() : Container(), + ); + } +} diff --git a/lib/views/listings/views/new/state_selection.dart b/lib/views/listings/views/new/state_selection.dart new file mode 100644 index 0000000..87d603c --- /dev/null +++ b/lib/views/listings/views/new/state_selection.dart @@ -0,0 +1,136 @@ +import 'dart:io'; + +import 'package:firebase_storage/firebase_storage.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:hum/core/constants/app_text.dart'; +import 'package:hum/services/firebase_functions.dart'; +import 'package:hum/views/listings/widgets/widget_listings.dart'; +import 'package:image_picker/image_picker.dart'; +import 'package:phosphor_flutter/phosphor_flutter.dart'; + +class DrawerStateSelection extends StatefulWidget { + const DrawerStateSelection({super.key}); + + @override + State createState() => DrawerStateSelectionState(); +} + +class DrawerStateSelectionState extends State { + bool _isUploading = false; + bool _shouldParseWithAI = true; + + Future _pickAndUploadImage(ImageSource source) async { + String downloadURL = ''; + final ImagePicker picker = ImagePicker(); + try { + final XFile? image = await picker.pickImage(source: source); + if (image == null) return downloadURL; + + setState(() => _isUploading = true); + + // Create a reference to the location you want to upload to in firebase + final storageRef = FirebaseStorage.instance.ref().child( + 'uploads/${DateTime.now().millisecondsSinceEpoch}.jpg', + ); + + // Upload the file + final uploadTask = storageRef.putFile(File(image.path)); + final snapshot = await uploadTask.whenComplete(() => null); + + // Get the download URL + downloadURL = await snapshot.ref.getDownloadURL(); + } catch (e) { + print('Error uploading image: $e'); + } finally { + if (mounted) { + setState(() => _isUploading = false); + } + } + return downloadURL; + } + + @override + Widget build(BuildContext context) { + return Center( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Padding( + padding: const EdgeInsets.only(top: 40.0, bottom: 20), + child: Stack( + alignment: AlignmentDirectional.center, + children: [ + PhosphorIcon( + PhosphorIconsDuotone.camera, + // color: Colors.green, + size: 80.0, + ), + Opacity( + opacity: .3, + child: PhosphorIcon( + PhosphorIconsLight.cornersOut, + color: CupertinoColors.activeBlue, + size: 130.0, + ), + ), + ], + ), + ), + + Text(listingAddTitle, style: TextStyle(fontSize: 36, fontWeight: FontWeight.bold)), + + Padding( + padding: const EdgeInsets.only(top: 16.0, bottom: 80), + child: Opacity( + opacity: .5, + child: Text( + listingAddMessage, + textAlign: TextAlign.center, + style: TextStyle(fontSize: 18, fontWeight: FontWeight.w500), + ), + ), + ), + + Expanded( + child: Column( + spacing: 20, + children: [ + WDGListingButton( + icon: PhosphorIconsDuotone.camera, + text: listingTakePhoto, + description: listingTakePhotoDescription, + action: () async { + String imageURL = await _pickAndUploadImage(ImageSource.camera); + if (imageURL.isNotEmpty) { + print(imageURL); + print('^^^^^^^^'); + await callHumProcessImage(imageURL); + } + }, + ), + WDGListingButton( + icon: PhosphorIconsDuotone.image, + iconColor: CupertinoColors.activeGreen, + text: listingChoosePhoto, + description: listingChoosePhotoDescription, + action: () async { + String imageURL = await _pickAndUploadImage(ImageSource.gallery); + if (imageURL.isNotEmpty) { + print(imageURL); + print('^^^^^^^^'); + await callHumProcessImage(imageURL); + } + }, + ), + // WDGListingButton(icon: PhosphorIconsDuotone.cornersOut, action: () {}), + ], + ), + ), + ], + ), + ), + ); + } +} diff --git a/lib/views/listings/views/new/upload.dart b/lib/views/listings/views/new/upload.dart new file mode 100644 index 0000000..b4b3346 --- /dev/null +++ b/lib/views/listings/views/new/upload.dart @@ -0,0 +1,151 @@ +import 'dart:io'; +import 'package:flutter/cupertino.dart'; +import 'package:firebase_storage/firebase_storage.dart'; +import 'package:hum/core/constants/app_text.dart'; +import 'package:hum/core/constants/app_theme.dart'; +import 'package:hum/services/firebase_functions.dart'; +import 'package:hum/views/listings/widgets/widget_listings.dart'; +import 'package:phosphor_flutter/phosphor_flutter.dart'; +import 'package:image_picker/image_picker.dart'; + +class ViewListingsNew extends StatefulWidget { + const ViewListingsNew({super.key}); + @override + State createState() => _ViewListingsNewState(); +} + +class _ViewListingsNewState extends State { + bool _isUploading = false; + + Future _pickAndUploadImage(ImageSource source) async { + String downloadURL = ''; + final ImagePicker picker = ImagePicker(); + try { + final XFile? image = await picker.pickImage(source: source); + if (image == null) return downloadURL; + + setState(() => _isUploading = true); + + // Create a reference to the location you want to upload to in firebase + final storageRef = FirebaseStorage.instance.ref().child( + 'uploads/${DateTime.now().millisecondsSinceEpoch}.jpg', + ); + + // Upload the file + final uploadTask = storageRef.putFile(File(image.path)); + final snapshot = await uploadTask.whenComplete(() => null); + + // Get the download URL + downloadURL = await snapshot.ref.getDownloadURL(); + } catch (e) { + print('Error uploading image: $e'); + } finally { + if (mounted) { + setState(() => _isUploading = false); + } + } + return downloadURL; + } + + @override + Widget build(BuildContext context) { + return CupertinoPageScaffold( + navigationBar: CupertinoNavigationBar( + leading: CupertinoButton( + padding: EdgeInsets.all(0), + child: Text(doneCancel), + onPressed: () { + Navigator.of(context).maybePop(); + }, + ), + ), + backgroundColor: CupertinoDynamicColor.resolve(colorBarControl, context), + child: _isUploading + ? const Center(child: CupertinoActivityIndicator(radius: 20)) + : Center( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Padding( + padding: const EdgeInsets.only(top: 40.0, bottom: 20), + child: Stack( + alignment: AlignmentDirectional.center, + children: [ + PhosphorIcon( + PhosphorIconsDuotone.camera, + // color: Colors.green, + size: 80.0, + ), + Opacity( + opacity: .3, + child: PhosphorIcon( + PhosphorIconsLight.cornersOut, + color: CupertinoColors.activeBlue, + size: 130.0, + ), + ), + ], + ), + ), + + Text( + listingAddTitle, + style: TextStyle(fontSize: 36, fontWeight: FontWeight.bold), + ), + + Padding( + padding: const EdgeInsets.only(top: 16.0, bottom: 80), + child: Opacity( + opacity: .5, + child: Text( + listingAddMessage, + textAlign: TextAlign.center, + style: TextStyle(fontSize: 18, fontWeight: FontWeight.w500), + ), + ), + ), + + Expanded( + child: Column( + spacing: 20, + children: [ + WDGListingButton( + icon: PhosphorIconsDuotone.camera, + text: listingTakePhoto, + description: listingTakePhotoDescription, + action: () async { + String imageURL = await _pickAndUploadImage(ImageSource.camera); + if (imageURL.isNotEmpty) { + print(imageURL); + print('^^^^^^^^'); + await callHumProcessImage(imageURL); + } + }, + ), + WDGListingButton( + icon: PhosphorIconsDuotone.image, + iconColor: CupertinoColors.activeGreen, + text: listingChoosePhoto, + description: listingChoosePhotoDescription, + action: () async { + String imageURL = await _pickAndUploadImage(ImageSource.gallery); + if (imageURL.isNotEmpty) { + print(imageURL); + print('^^^^^^^^'); + await callHumProcessImage(imageURL); + } + }, + ), + // WDGListingButton(icon: PhosphorIconsDuotone.cornersOut, action: () {}), + ], + ), + ), + ], + ), + ), + ), + ); + } +} diff --git a/lib/views/listings/views/new/view_listings_upload.dart b/lib/views/listings/views/new/view_listings_upload.dart new file mode 100644 index 0000000..e69de29 diff --git a/lib/views/listings/widgets/widget_listings.dart b/lib/views/listings/widgets/widget_listings.dart new file mode 100644 index 0000000..b4b7d4d --- /dev/null +++ b/lib/views/listings/widgets/widget_listings.dart @@ -0,0 +1,74 @@ +import 'package:flutter/cupertino.dart'; +import 'package:hum/core/constants/app_theme.dart'; +import 'package:phosphor_flutter/phosphor_flutter.dart'; + +class WDGListingButton extends StatelessWidget { + final String text; + final String description; + final double width; + final VoidCallback action; + final IconData icon; + final Color iconColor; + + const WDGListingButton({ + super.key, + this.text = 'as', + this.description = 'asdas', + this.width = double.infinity, + this.icon = PhosphorIconsDuotone.camera, + this.iconColor = CupertinoColors.activeBlue, + required this.action, + }); + + @override + Widget build(BuildContext context) { + final double sizeIcon = 60; + + return SizedBox( + width: width, + child: CupertinoButton.filled( + padding: EdgeInsets.all(16), + color: colorBarControl.withAlpha(20), + borderRadius: BorderRadius.circular(roundLarge), + onPressed: action, + child: Row( + spacing: 16, + children: [ + Stack( + alignment: AlignmentDirectional.center, + children: [ + Container( + width: sizeIcon, + height: sizeIcon, + decoration: BoxDecoration(borderRadius: BorderRadius.circular(10), color: iconColor), + ), + + PhosphorIcon(icon, size: 36.0), + ], + ), + + Column( + spacing: 6, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(text, style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold)), + Opacity(opacity: .5, child: Text(description, style: TextStyle(fontSize: 14))), + ], + ), + + Spacer(), + + Opacity( + opacity: .4, + child: PhosphorIcon( + PhosphorIconsRegular.caretRight, + // color: Colors.green, + size: 24.0, + ), + ), + ], + ), + ), + ); + } +} diff --git a/lib/views/messages/messages_view.dart b/lib/views/messages/messages_view.dart new file mode 100644 index 0000000..66c6cbc --- /dev/null +++ b/lib/views/messages/messages_view.dart @@ -0,0 +1,15 @@ +import 'package:flutter/cupertino.dart'; + +class MessagesView extends StatefulWidget { + const MessagesView({super.key}); + + @override + State createState() => _MessagesViewState(); +} + +class _MessagesViewState extends State { + @override + Widget build(BuildContext context) { + return const Center(child: Text('MESSAGES')); + } +} diff --git a/lib/views/notifications/view_notifications.dart b/lib/views/notifications/view_notifications.dart new file mode 100644 index 0000000..1b3f2ff --- /dev/null +++ b/lib/views/notifications/view_notifications.dart @@ -0,0 +1,15 @@ +import 'package:flutter/cupertino.dart'; + +class ViewNotifications extends StatefulWidget { + const ViewNotifications({super.key}); + + @override + State createState() => _ViewNotificationsState(); +} + +class _ViewNotificationsState extends State { + @override + Widget build(BuildContext context) { + return const SafeArea(child: Center(child: Text('NOTIFICATIONS'))); + } +} diff --git a/lib/views/profile/profile_view.dart b/lib/views/profile/profile_view.dart new file mode 100644 index 0000000..2a057ec --- /dev/null +++ b/lib/views/profile/profile_view.dart @@ -0,0 +1,162 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:hum/core/constants/app_text.dart'; +import 'package:hum/core/constants/app_theme.dart'; +import 'package:hum/core/utils/dialogs.dart'; +import 'package:hum/services/firebase_auth.dart'; +import 'package:hum/views/profile/widget_profile_stat.dart'; + +class ProfileView extends StatefulWidget { + const ProfileView({super.key}); + + @override + State createState() => _ProfileViewState(); +} + +class _ProfileViewState extends State { + String displayName = 'Yas Opisso'; + String memberSince = 'July 14th, 2014'; + + String rentals = '34'; + String listings = '5'; + String earnings = "1.12K"; + String favorites = '2'; + + @override + Widget build(BuildContext context) { + return CupertinoPageScaffold( + navigationBar: CupertinoNavigationBar( + trailing: CupertinoButton( + padding: EdgeInsets.all(0), + child: Text('Edit'), + onPressed: () {}, + ), + ), + child: SafeArea( + child: Center( + child: Padding( + padding: const EdgeInsets.only(left: 14, right: 14), + child: Column( + children: [ + Icon( + CupertinoIcons.person_alt_circle_fill, + size: 140, + color: CupertinoColors.inactiveGray, + ), + + Padding( + padding: const EdgeInsets.only(top: 16.0, bottom: 6), + child: Text( + displayName, + style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold), + ), + ), + + Opacity( + opacity: .7, + child: Text( + memberSince, + style: TextStyle(fontSize: 14, fontWeight: FontWeight.w400), + ), + ), + + Padding( + padding: const EdgeInsets.only(top: 26.0), + child: Row( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + WDGProfileStat( + amount: rentals, + label: profileStatRental, + color: Colors.blue, + icon: CupertinoIcons.house_fill, + ), + + Opacity( + opacity: .5, + child: Container(width: .5, height: 60, color: Colors.grey), + ), + + WDGProfileStat( + amount: listings, + label: profileStatListings, + color: Colors.orange, + icon: CupertinoIcons.square_list_fill, + ), + + Opacity( + opacity: .5, + child: Container(width: .5, height: 60, color: Colors.grey), + ), + + WDGProfileStat( + amount: earnings, + label: profileStatEarnings, + color: Colors.green, + icon: CupertinoIcons.money_dollar_circle_fill, + ), + + Opacity( + opacity: .5, + child: Container(width: .5, height: 60, color: Colors.grey), + ), + + WDGProfileStat( + amount: favorites, + label: profileStatFavorites, + color: Colors.red, + icon: CupertinoIcons.heart_fill, + ), + ], + ), + ), + + Padding( + padding: const EdgeInsets.only(top: 30.0), + child: SizedBox( + width: double.infinity, + // height: 40, + child: Container( + decoration: BoxDecoration( + border: Border.all( + color: CupertinoColors.systemRed.withAlpha(140), // 🔴 red border + width: 1.5, + ), + borderRadius: BorderRadius.circular(roundLarge), + ), + child: CupertinoButton.filled( + sizeStyle: CupertinoButtonSize.medium, + color: CupertinoColors.systemRed.withAlpha(20), + borderRadius: BorderRadius.circular(roundLarge), + onPressed: () async { + final confirm = await showYesNoDialog( + context, + title: 'Sign Out', + message: 'Do you want to sign out', + ); + if (confirm) { + signOut(); + } + }, + child: Row( + spacing: 10, + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Icon(CupertinoIcons.power, color: CupertinoColors.systemRed), + const Text(profileBtnSignOut, style: TextStyle(color: Colors.red)), + ], + ), + ), + ), + ), + ), + ], + ), + ), + ), + ), + ); + } +} diff --git a/lib/views/profile/widget_profile_stat.dart b/lib/views/profile/widget_profile_stat.dart new file mode 100644 index 0000000..19a3c27 --- /dev/null +++ b/lib/views/profile/widget_profile_stat.dart @@ -0,0 +1,70 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +class WDGProfileStat + extends + StatelessWidget { + const WDGProfileStat({ + super.key, + this.amount = '', + this.label = '', + this.color = Colors.blue, + this.icon = CupertinoIcons.house_fill, + }); + + final String amount; + final String label; + final Color color; + final IconData icon; + + @override + Widget build( + BuildContext context, + ) { + return Column( + children: [ + Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular( + 100, + ), + color: color, + ), + + padding: EdgeInsets.all( + 10, + ), + child: Icon( + icon, + color: Colors.white, + ), + ), + + Padding( + padding: const EdgeInsets.only( + top: 12.0, + bottom: 2.0, + ), + child: Text( + amount, + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + + Opacity( + opacity: .7, + child: Text( + label, + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w400, + ), + ), + ), + ], + ); + } +} diff --git a/lib/widgets/widget_buttons.dart b/lib/widgets/widget_buttons.dart new file mode 100644 index 0000000..0070aab --- /dev/null +++ b/lib/widgets/widget_buttons.dart @@ -0,0 +1,313 @@ +import 'package:flutter/cupertino.dart'; +import 'package:hum/core/constants/app_theme.dart'; +import 'package:phosphor_flutter/phosphor_flutter.dart'; + +class BTNSquareBG extends StatelessWidget { + final IconData icon; + final VoidCallback action; + + const BTNSquareBG({super.key, required this.icon, required this.action}); + + @override + Widget build(BuildContext context) { + return CupertinoButton( + color: CupertinoDynamicColor.resolve(colorBarButton, context), + borderRadius: BorderRadius.circular(10), + padding: EdgeInsets.zero, + onPressed: action, + child: Icon( + size: 18, + color: CupertinoDynamicColor.resolve( + colorAccentSecondary, // 👈 define as dynamic in your theme + context, + ), + icon, + ), + ); + } +} + +class BTNRoundBG extends StatelessWidget { + final IconData icon; + final VoidCallback action; + + const BTNRoundBG({super.key, required this.icon, required this.action}); + + @override + Widget build(BuildContext context) { + return CupertinoButton( + color: CupertinoDynamicColor.resolve(colorBarButton, context), + borderRadius: BorderRadius.circular(16), + padding: EdgeInsets.zero, + onPressed: action, + child: Icon( + size: 18, + color: CupertinoDynamicColor.resolve( + colorAccentSecondary, // 👈 define as dynamic in your theme + context, + ), + icon, + ), + ); + } +} + +class BTNFilled extends StatelessWidget { + const BTNFilled({ + super.key, + this.text = '', + this.width = double.infinity, + this.color = colorAccentSecondary, + required this.action, + }); + + final String text; + final double width; + final VoidCallback action; + final Color color; + + @override + Widget build(BuildContext context) { + return SizedBox( + width: width, + child: CupertinoButton.filled( + color: color, + borderRadius: BorderRadius.circular(roundLarge), + onPressed: action, + child: Text(text), + ), + ); + } +} + +class BTNFilledIcon extends StatelessWidget { + const BTNFilledIcon({ + super.key, + this.text = '', + this.width = double.infinity, + this.color = colorAccentSecondary, + this.alignment = MainAxisAlignment.start, + required this.icon, + required this.action, + }); + + final String text; + final double width; + final VoidCallback action; + final Color color; + final IconData icon; + final MainAxisAlignment alignment; + + @override + Widget build(BuildContext context) { + return SizedBox( + width: width, + child: CupertinoButton.filled( + color: color, + borderRadius: BorderRadius.circular(roundLarge), + onPressed: action, + child: Row( + spacing: 14, + crossAxisAlignment: CrossAxisAlignment.end, + mainAxisAlignment: alignment, + children: [PhosphorIcon(icon), Text(text)], + ), + ), + ); + } +} + +class BTNComplex extends StatelessWidget { + const BTNComplex({ + super.key, + this.text = 'text', + this.label = 'label', + this.width = double.infinity, + this.color = colorAccentSecondary, + this.alignment = MainAxisAlignment.start, + this.trailingIcon = CupertinoIcons.right_chevron, + this.textColor = CupertinoColors.white, + required this.iconLeading, + required this.action, + }); + + final String label; + final String text; + final double width; + final VoidCallback action; + final Color color; + final IconData iconLeading; + final IconData trailingIcon; + final MainAxisAlignment alignment; + final Color textColor; + + @override + Widget build(BuildContext context) { + return SizedBox( + width: width, + child: CupertinoButton.filled( + color: color, + borderRadius: BorderRadius.circular(roundLarge), + onPressed: action, + child: Row( + spacing: 14, + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: alignment, + children: [ + Icon(iconLeading), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Opacity(opacity: .6, child: Text(label, style: TextStyle(fontSize: 14))), + Text(text, style: TextStyle(color: textColor)), + ], + ), + Spacer(), + Opacity(opacity: .4, child: Icon(trailingIcon, size: 18)), + ], + ), + ), + ); + } +} + +class BTNFilledAnimated extends StatelessWidget { + const BTNFilledAnimated({ + super.key, + this.text = '', + this.width = double.infinity, + this.color = colorAccentSecondary, + this.working = false, + required this.action, + }); + + final String text; + final double width; + final Color color; + final bool working; + final VoidCallback action; + + @override + Widget build(BuildContext context) { + const double spinnerSize = 16; + const double gap = 8; + const double slotWidth = spinnerSize + gap; // space reserved on both sides + + return SizedBox( + width: width, + child: CupertinoButton.filled( + color: color, + borderRadius: BorderRadius.circular(roundLarge), + // Disable tap while working (optional UX) + onPressed: working ? null : action, + child: Row( + mainAxisSize: MainAxisSize.max, + children: [ + // right slot shows spinner when working, otherwise keeps same width + SizedBox( + width: slotWidth, + child: AnimatedSwitcher( + duration: const Duration(milliseconds: 200), + transitionBuilder: (child, anim) => FadeTransition(opacity: anim, child: child), + child: working + ? Align( + alignment: Alignment.centerRight, + key: const ValueKey('spinner'), + child: Padding( + padding: const EdgeInsets.only(left: gap), + child: CupertinoActivityIndicator(radius: spinnerSize / 2), + ), + ) + : const SizedBox(key: ValueKey('no-spinner')), + ), + ), + + // centered label + Expanded(child: Center(child: Text(text))), + + // left spacer to keep text perfectly centered + const SizedBox(width: slotWidth), + ], + ), + ), + ); + } +} + +class BTNText extends StatelessWidget { + const BTNText({super.key, this.text = '', required this.action}); + + final VoidCallback action; + final String text; + + @override + Widget build(BuildContext context) { + return CupertinoButton(onPressed: action, child: Text(text)); + } +} + +// CONTEXT MENU BUTTON +class MenuAction { + final String label; + final IconData? icon; + final VoidCallback onPressed; + final bool destructive; + const MenuAction({ + required this.label, + required this.onPressed, + this.icon, + this.destructive = false, + }); +} + +class CupertinoMoreButton extends StatelessWidget { + final List actions; + final double iconSize; + final EdgeInsetsGeometry padding; + + const CupertinoMoreButton({ + super.key, + required this.actions, + this.iconSize = 22, + this.padding = EdgeInsets.zero, + }); + + @override + Widget build(BuildContext context) { + return CupertinoButton( + padding: padding, + child: Icon(CupertinoIcons.ellipsis_vertical, size: iconSize), + onPressed: () => _showMenu(context), + ); + } + + void _showMenu(BuildContext context) { + showCupertinoModalPopup( + context: context, + builder: (ctx) => CupertinoActionSheet( + actions: actions.map((a) { + final text = Text(a.label); + final row = a.icon == null + ? text + : Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [Icon(a.icon, size: 18), const SizedBox(width: 8), text], + ); + return CupertinoActionSheetAction( + isDestructiveAction: a.destructive, + onPressed: () { + Navigator.of(ctx).pop(); + a.onPressed(); + }, + child: row, + ); + }).toList(), + cancelButton: CupertinoActionSheetAction( + onPressed: () => Navigator.of(ctx).pop(), + isDefaultAction: true, + child: const Text('Cancel'), + ), + ), + ); + } +} diff --git a/lib/widgets/widget_text_fields.dart b/lib/widgets/widget_text_fields.dart new file mode 100644 index 0000000..d63c7fa --- /dev/null +++ b/lib/widgets/widget_text_fields.dart @@ -0,0 +1,82 @@ +import 'package:flutter/cupertino.dart'; +import 'package:hum/core/constants/app_theme.dart'; + +class TXTFieldInput + extends + StatefulWidget { + const TXTFieldInput({ + super.key, + this.placeholder = '', + this.inputType = TextInputType.text, + this.password = false, + required this.controller, + }); + + final String placeholder; + final TextInputType inputType; + final bool password; + final TextEditingController controller; + // final ValueKey fieldId; + + @override + State< + TXTFieldInput + > + createState() => _TXTFieldInputState(); +} + +class _TXTFieldInputState + extends + State< + TXTFieldInput + > { + bool _obscure = false; + + @override + void initState() { + _obscure = widget.password + ? true + : false; + super.initState(); + } + + @override + Widget build( + BuildContext context, + ) { + return CupertinoTextField( + controller: widget.controller, + key: widget.key, + placeholder: widget.placeholder, + keyboardType: widget.inputType, + padding: EdgeInsets.symmetric( + horizontal: 16, + vertical: 12, + ), + decoration: BoxDecoration( + color: CupertinoDynamicColor.resolve( + colorBackground, + context, + ), + borderRadius: BorderRadius.circular( + roundLarge, + ), + ), + + obscureText: _obscure, + suffix: widget.password + ? CupertinoButton( + padding: EdgeInsets.zero, + onPressed: () => setState( + () => _obscure = !_obscure, + ), + child: Icon( + _obscure + ? CupertinoIcons.eye + : CupertinoIcons.eye_slash, + ), + ) + : null, + ); + } +} diff --git a/linux/.gitignore b/linux/.gitignore new file mode 100644 index 0000000..d3896c9 --- /dev/null +++ b/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/linux/CMakeLists.txt b/linux/CMakeLists.txt new file mode 100644 index 0000000..dd5c3b2 --- /dev/null +++ b/linux/CMakeLists.txt @@ -0,0 +1,128 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "hum") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.hum") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/linux/flutter/CMakeLists.txt b/linux/flutter/CMakeLists.txt new file mode 100644 index 0000000..d5bd016 --- /dev/null +++ b/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000..64a0ece --- /dev/null +++ b/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + +#include + +void fl_register_plugins(FlPluginRegistry* registry) { + g_autoptr(FlPluginRegistrar) file_selector_linux_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "FileSelectorPlugin"); + file_selector_plugin_register_with_registrar(file_selector_linux_registrar); +} diff --git a/linux/flutter/generated_plugin_registrant.h b/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000..e0f0a47 --- /dev/null +++ b/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake new file mode 100644 index 0000000..2db3c22 --- /dev/null +++ b/linux/flutter/generated_plugins.cmake @@ -0,0 +1,24 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST + file_selector_linux +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/linux/runner/CMakeLists.txt b/linux/runner/CMakeLists.txt new file mode 100644 index 0000000..e97dabc --- /dev/null +++ b/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/linux/runner/main.cc b/linux/runner/main.cc new file mode 100644 index 0000000..e7c5c54 --- /dev/null +++ b/linux/runner/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/linux/runner/my_application.cc b/linux/runner/my_application.cc new file mode 100644 index 0000000..ac983e0 --- /dev/null +++ b/linux/runner/my_application.cc @@ -0,0 +1,144 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Called when first Flutter frame received. +static void first_frame_cb(MyApplication* self, FlView *view) +{ + gtk_widget_show(gtk_widget_get_toplevel(GTK_WIDGET(view))); +} + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "hum"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "hum"); + } + + gtk_window_set_default_size(window, 1280, 720); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + GdkRGBA background_color; + // Background defaults to black, override it here if necessary, e.g. #00000000 for transparent. + gdk_rgba_parse(&background_color, "#000000"); + fl_view_set_background_color(view, &background_color); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + // Show the window when Flutter renders. + // Requires the view to be realized so we can start rendering. + g_signal_connect_swapped(view, "first-frame", G_CALLBACK(first_frame_cb), self); + gtk_widget_realize(GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/linux/runner/my_application.h b/linux/runner/my_application.h new file mode 100644 index 0000000..72271d5 --- /dev/null +++ b/linux/runner/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/macos/.gitignore b/macos/.gitignore new file mode 100644 index 0000000..746adbb --- /dev/null +++ b/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/macos/Flutter/Flutter-Debug.xcconfig b/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 0000000..4b81f9b --- /dev/null +++ b/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/macos/Flutter/Flutter-Release.xcconfig b/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 0000000..5caa9d1 --- /dev/null +++ b/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 0000000..06887d9 --- /dev/null +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,32 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + +import cloud_firestore +import file_selector_macos +import firebase_analytics +import firebase_auth +import firebase_core +import firebase_remote_config +import firebase_storage +import google_sign_in_ios +import path_provider_foundation +import sign_in_with_apple +import sqflite_darwin + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + FLTFirebaseFirestorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseFirestorePlugin")) + FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin")) + FirebaseAnalyticsPlugin.register(with: registry.registrar(forPlugin: "FirebaseAnalyticsPlugin")) + FLTFirebaseAuthPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseAuthPlugin")) + FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin")) + FirebaseRemoteConfigPlugin.register(with: registry.registrar(forPlugin: "FirebaseRemoteConfigPlugin")) + FLTFirebaseStoragePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseStoragePlugin")) + FLTGoogleSignInPlugin.register(with: registry.registrar(forPlugin: "FLTGoogleSignInPlugin")) + PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) + SignInWithApplePlugin.register(with: registry.registrar(forPlugin: "SignInWithApplePlugin")) + SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin")) +} diff --git a/macos/Podfile b/macos/Podfile new file mode 100644 index 0000000..ff5ddb3 --- /dev/null +++ b/macos/Podfile @@ -0,0 +1,42 @@ +platform :osx, '10.15' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_macos_podfile_setup + +target 'Runner' do + use_frameworks! + + flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_macos_build_settings(target) + end +end diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..ec12d61 --- /dev/null +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,705 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* hum.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "hum.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* hum.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* hum.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.hum.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/hum.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/hum"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.hum.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/hum.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/hum"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.hum.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/hum.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/hum"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..aae005c --- /dev/null +++ b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/macos/Runner.xcworkspace/contents.xcworkspacedata b/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/macos/Runner/AppDelegate.swift b/macos/Runner/AppDelegate.swift new file mode 100644 index 0000000..b3c1761 --- /dev/null +++ b/macos/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Cocoa +import FlutterMacOS + +@main +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } +} diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..a2ec33f --- /dev/null +++ b/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000..82b6f9d Binary files /dev/null and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png differ diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000..13b35eb Binary files /dev/null and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png differ diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 0000000..0a3f5fa Binary files /dev/null and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png differ diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png new file mode 100644 index 0000000..bdb5722 Binary files /dev/null and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png differ diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png new file mode 100644 index 0000000..f083318 Binary files /dev/null and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png differ diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png new file mode 100644 index 0000000..326c0e7 Binary files /dev/null and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png differ diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 0000000..2f1632c Binary files /dev/null and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png differ diff --git a/macos/Runner/Base.lproj/MainMenu.xib b/macos/Runner/Base.lproj/MainMenu.xib new file mode 100644 index 0000000..80e867a --- /dev/null +++ b/macos/Runner/Base.lproj/MainMenu.xib @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/macos/Runner/Configs/AppInfo.xcconfig b/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 0000000..ad2a74e --- /dev/null +++ b/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = hum + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.hum + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/macos/Runner/Configs/Debug.xcconfig b/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 0000000..36b0fd9 --- /dev/null +++ b/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/macos/Runner/Configs/Release.xcconfig b/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 0000000..dff4f49 --- /dev/null +++ b/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/macos/Runner/Configs/Warnings.xcconfig b/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 0000000..42bcbf4 --- /dev/null +++ b/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/macos/Runner/DebugProfile.entitlements b/macos/Runner/DebugProfile.entitlements new file mode 100644 index 0000000..dddb8a3 --- /dev/null +++ b/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/macos/Runner/Info.plist b/macos/Runner/Info.plist new file mode 100644 index 0000000..4789daa --- /dev/null +++ b/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/macos/Runner/MainFlutterWindow.swift b/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 0000000..3cc05eb --- /dev/null +++ b/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/macos/Runner/Release.entitlements b/macos/Runner/Release.entitlements new file mode 100644 index 0000000..852fa1a --- /dev/null +++ b/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/macos/RunnerTests/RunnerTests.swift b/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000..61f3bd1 --- /dev/null +++ b/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Cocoa +import FlutterMacOS +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/pubspec.lock b/pubspec.lock new file mode 100644 index 0000000..db81455 --- /dev/null +++ b/pubspec.lock @@ -0,0 +1,826 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "8a1f5f3020ef2a74fb93f7ab3ef127a8feea33a7a2276279113660784ee7516a" + url: "https://pub.dev" + source: hosted + version: "1.3.64" + async: + dependency: transitive + description: + name: async + sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb" + url: "https://pub.dev" + source: hosted + version: "2.13.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + cached_network_image: + dependency: "direct main" + description: + name: cached_network_image + sha256: "7c1183e361e5c8b0a0f21a28401eecdbde252441106a9816400dd4c2b2424916" + url: "https://pub.dev" + source: hosted + version: "3.4.1" + cached_network_image_platform_interface: + dependency: transitive + description: + name: cached_network_image_platform_interface + sha256: "35814b016e37fbdc91f7ae18c8caf49ba5c88501813f73ce8a07027a395e2829" + url: "https://pub.dev" + source: hosted + version: "4.1.1" + cached_network_image_web: + dependency: transitive + description: + name: cached_network_image_web + sha256: "980842f4e8e2535b8dbd3d5ca0b1f0ba66bf61d14cc3a17a9b4788a3685ba062" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + characters: + dependency: transitive + description: + name: characters + sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 + url: "https://pub.dev" + source: hosted + version: "1.4.0" + clock: + dependency: transitive + description: + name: clock + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b + url: "https://pub.dev" + source: hosted + version: "1.1.2" + cloud_firestore: + dependency: "direct main" + description: + name: cloud_firestore + sha256: ea3fe98eaf0c3b675ab2a242d98430518da60f89d5cc9774df7b2d9110aaf160 + url: "https://pub.dev" + source: hosted + version: "6.0.3" + cloud_firestore_platform_interface: + dependency: transitive + description: + name: cloud_firestore_platform_interface + sha256: b5592862c451ebfd229b430907b6feb2082333d6e5a61d0eafd547c2afc6f68e + url: "https://pub.dev" + source: hosted + version: "7.0.3" + cloud_firestore_web: + dependency: transitive + description: + name: cloud_firestore_web + sha256: eca0337985e0eedcef8a3e5380950af01c0853951b6b8427e7909115d81d7b9c + url: "https://pub.dev" + source: hosted + version: "5.0.3" + collection: + dependency: transitive + description: + name: collection + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" + url: "https://pub.dev" + source: hosted + version: "1.19.1" + cross_file: + dependency: transitive + description: + name: cross_file + sha256: "701dcfc06da0882883a2657c445103380e53e647060ad8d9dfb710c100996608" + url: "https://pub.dev" + source: hosted + version: "0.3.5+1" + crypto: + dependency: "direct main" + description: + name: crypto + sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855" + url: "https://pub.dev" + source: hosted + version: "3.0.6" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 + url: "https://pub.dev" + source: hosted + version: "1.0.8" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" + url: "https://pub.dev" + source: hosted + version: "1.3.3" + ffi: + dependency: transitive + description: + name: ffi + sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + file: + dependency: transitive + description: + name: file + sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 + url: "https://pub.dev" + source: hosted + version: "7.0.1" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: "2567f398e06ac72dcf2e98a0c95df2a9edd03c2c2e0cacd4780f20cdf56263a0" + url: "https://pub.dev" + source: hosted + version: "0.9.4" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: "5e0bbe9c312416f1787a68259ea1505b52f258c587f12920422671807c4d618a" + url: "https://pub.dev" + source: hosted + version: "0.9.5" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: "35e0bd61ebcdb91a3505813b055b09b79dfdc7d0aee9c09a7ba59ae4bb13dc85" + url: "https://pub.dev" + source: hosted + version: "2.7.0" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: "62197474ae75893a62df75939c777763d39c2bc5f73ce5b88497208bc269abfd" + url: "https://pub.dev" + source: hosted + version: "0.9.3+5" + firebase_analytics: + dependency: "direct main" + description: + name: firebase_analytics + sha256: "3cfc4089e61e810ffb531af63cfde2c8cfd36f12dc14fdba359e623992311015" + url: "https://pub.dev" + source: hosted + version: "12.0.3" + firebase_analytics_platform_interface: + dependency: transitive + description: + name: firebase_analytics_platform_interface + sha256: "775fc18d9b00a014362510a33f76f1f34deb30f69a64edcb41a7dfd0ebd9cf98" + url: "https://pub.dev" + source: hosted + version: "5.0.3" + firebase_analytics_web: + dependency: transitive + description: + name: firebase_analytics_web + sha256: "6eafa8fef5fdca6c922ac3e353c9a093c12344a3ba996e65fd40f8db0a00d26f" + url: "https://pub.dev" + source: hosted + version: "0.6.0+3" + firebase_auth: + dependency: "direct main" + description: + name: firebase_auth + sha256: "3150a56fc0f20b4b926e1343bfdca3acb591a0aa1c95bae5426353f384085352" + url: "https://pub.dev" + source: hosted + version: "6.1.1" + firebase_auth_platform_interface: + dependency: transitive + description: + name: firebase_auth_platform_interface + sha256: "7bc50c0d74dd8f4c72d7840ae64ea7b638f203d089e5c4a90a157b2f2ead1963" + url: "https://pub.dev" + source: hosted + version: "8.1.3" + firebase_auth_web: + dependency: transitive + description: + name: firebase_auth_web + sha256: "351dcb82bc542e21a426cd97ffcc40d7232981dafc3fd89a6c932876a09240e1" + url: "https://pub.dev" + source: hosted + version: "6.0.4" + firebase_core: + dependency: "direct main" + description: + name: firebase_core + sha256: "1f2dfd9f535d81f8b06d7a50ecda6eac1e6922191ed42e09ca2c84bd2288927c" + url: "https://pub.dev" + source: hosted + version: "4.2.1" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: cccb4f572325dc14904c02fcc7db6323ad62ba02536833dddb5c02cac7341c64 + url: "https://pub.dev" + source: hosted + version: "6.0.2" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: ff18fabb0ad0ed3595d2f2c85007ecc794aadecdff5b3bb1460b7ee47cded398 + url: "https://pub.dev" + source: hosted + version: "3.3.0" + firebase_remote_config: + dependency: "direct main" + description: + name: firebase_remote_config + sha256: "5d23c7021e69fbc9ef489ebcf4b1b941575e34ebacc7f20173c2a97f37f45b74" + url: "https://pub.dev" + source: hosted + version: "6.1.2" + firebase_remote_config_platform_interface: + dependency: transitive + description: + name: firebase_remote_config_platform_interface + sha256: b9c80a6cbc43367fdb2d4f441546e7c5330e5dc256659b58f5c0ab67cd332f43 + url: "https://pub.dev" + source: hosted + version: "2.0.5" + firebase_remote_config_web: + dependency: transitive + description: + name: firebase_remote_config_web + sha256: "2a465562d7d35c3a7f4956d440d5ac171e6ce65974b2225fd17b45303f88aa94" + url: "https://pub.dev" + source: hosted + version: "1.10.1" + firebase_storage: + dependency: "direct main" + description: + name: firebase_storage + sha256: d740b9ea0105f27d7286d7ad5957d778bf7fa967796c6e3fc26491cf5245b486 + url: "https://pub.dev" + source: hosted + version: "13.0.3" + firebase_storage_platform_interface: + dependency: transitive + description: + name: firebase_storage_platform_interface + sha256: "52a1dfb2c93f49a8e800d4b9aed107d1c0f2f6dd3ebf10a5f7e2222442960e50" + url: "https://pub.dev" + source: hosted + version: "5.2.14" + firebase_storage_web: + dependency: transitive + description: + name: firebase_storage_web + sha256: d5ce115e3d5a58fddd7631d5246aa8389d8000fa7790ecb04f65bf751bbf6a92 + url: "https://pub.dev" + source: hosted + version: "3.10.21" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be + url: "https://pub.dev" + source: hosted + version: "1.1.1" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_cache_manager: + dependency: transitive + description: + name: flutter_cache_manager + sha256: "400b6592f16a4409a7f2bb929a9a7e38c72cceb8ffb99ee57bbf2cb2cecf8386" + url: "https://pub.dev" + source: hosted + version: "3.4.1" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: "3105dc8492f6183fb076ccf1f351ac3d60564bff92e20bfc4af9cc1651f4e7e1" + url: "https://pub.dev" + source: hosted + version: "6.0.0" + flutter_plugin_android_lifecycle: + dependency: transitive + description: + name: flutter_plugin_android_lifecycle + sha256: ee8068e0e1cd16c4a82714119918efdeed33b3ba7772c54b5d094ab53f9b7fd1 + url: "https://pub.dev" + source: hosted + version: "2.0.33" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + google_identity_services_web: + dependency: transitive + description: + name: google_identity_services_web + sha256: "5d187c46dc59e02646e10fe82665fc3884a9b71bc1c90c2b8b749316d33ee454" + url: "https://pub.dev" + source: hosted + version: "0.3.3+1" + google_sign_in: + dependency: "direct main" + description: + name: google_sign_in + sha256: "521031b65853b4409b8213c0387d57edaad7e2a949ce6dea0d8b2afc9cb29763" + url: "https://pub.dev" + source: hosted + version: "7.2.0" + google_sign_in_android: + dependency: transitive + description: + name: google_sign_in_android + sha256: "799165f4c0621ed233bccdded4c2e92739bc1fe73e970163b2f7493b301adad3" + url: "https://pub.dev" + source: hosted + version: "7.2.1" + google_sign_in_ios: + dependency: transitive + description: + name: google_sign_in_ios + sha256: d9d80f953a244a099a40df1ff6aadc10ee375e6a098bbd5d55be332ce26db18c + url: "https://pub.dev" + source: hosted + version: "6.2.1" + google_sign_in_platform_interface: + dependency: transitive + description: + name: google_sign_in_platform_interface + sha256: "7f59208c42b415a3cca203571128d6f84f885fead2d5b53eb65a9e27f2965bb5" + url: "https://pub.dev" + source: hosted + version: "3.1.0" + google_sign_in_web: + dependency: transitive + description: + name: google_sign_in_web + sha256: "2fc1f941e6443b2d6984f4056a727a3eaeab15d8ee99ba7125d79029be75a1da" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + http: + dependency: "direct main" + description: + name: http + sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412" + url: "https://pub.dev" + source: hosted + version: "1.6.0" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" + url: "https://pub.dev" + source: hosted + version: "4.1.2" + image_picker: + dependency: "direct main" + description: + name: image_picker + sha256: "784210112be18ea55f69d7076e2c656a4e24949fa9e76429fe53af0c0f4fa320" + url: "https://pub.dev" + source: hosted + version: "1.2.1" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: "5e9bf126c37c117cf8094215373c6d561117a3cfb50ebc5add1a61dc6e224677" + url: "https://pub.dev" + source: hosted + version: "0.8.13+10" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: "66257a3191ab360d23a55c8241c91a6e329d31e94efa7be9cf7a212e65850214" + url: "https://pub.dev" + source: hosted + version: "3.1.1" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: "956c16a42c0c708f914021666ffcd8265dde36e673c9fa68c81f7d085d9774ad" + url: "https://pub.dev" + source: hosted + version: "0.8.13+3" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "1f81c5f2046b9ab724f85523e4af65be1d47b038160a8c8deed909762c308ed4" + url: "https://pub.dev" + source: hosted + version: "0.2.2" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: "86f0f15a309de7e1a552c12df9ce5b59fe927e71385329355aec4776c6a8ec91" + url: "https://pub.dev" + source: hosted + version: "0.2.2+1" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: "567e056716333a1647c64bb6bd873cff7622233a5c3f694be28a583d4715690c" + url: "https://pub.dev" + source: hosted + version: "2.11.1" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: d248c86554a72b5495a31c56f060cf73a41c7ff541689327b1a7dbccc33adfae + url: "https://pub.dev" + source: hosted + version: "0.2.2" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de" + url: "https://pub.dev" + source: hosted + version: "11.0.2" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1" + url: "https://pub.dev" + source: hosted + version: "3.0.10" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1" + url: "https://pub.dev" + source: hosted + version: "3.0.2" + lints: + dependency: transitive + description: + name: lints + sha256: a5e2b223cb7c9c8efdc663ef484fdd95bb243bff242ef5b13e26883547fce9a0 + url: "https://pub.dev" + source: hosted + version: "6.0.0" + matcher: + dependency: transitive + description: + name: matcher + sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 + url: "https://pub.dev" + source: hosted + version: "0.12.17" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec + url: "https://pub.dev" + source: hosted + version: "0.11.1" + meta: + dependency: transitive + description: + name: meta + sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c + url: "https://pub.dev" + source: hosted + version: "1.16.0" + mime: + dependency: transitive + description: + name: mime + sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6" + url: "https://pub.dev" + source: hosted + version: "2.0.0" + modal_bottom_sheet: + dependency: "direct main" + description: + name: modal_bottom_sheet + sha256: eac66ef8cb0461bf069a38c5eb0fa728cee525a531a8304bd3f7b2185407c67e + url: "https://pub.dev" + source: hosted + version: "3.0.0" + octo_image: + dependency: transitive + description: + name: octo_image + sha256: "34faa6639a78c7e3cbe79be6f9f96535867e879748ade7d17c9b1ae7536293bd" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + path: + dependency: transitive + description: + name: path + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" + url: "https://pub.dev" + source: hosted + version: "1.9.1" + path_provider: + dependency: transitive + description: + name: path_provider + sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd" + url: "https://pub.dev" + source: hosted + version: "2.1.5" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + sha256: e122c5ea805bb6773bb12ce667611265980940145be920cd09a4b0ec0285cb16 + url: "https://pub.dev" + source: hosted + version: "2.2.20" + path_provider_foundation: + dependency: transitive + description: + name: path_provider_foundation + sha256: efaec349ddfc181528345c56f8eda9d6cccd71c177511b132c6a0ddaefaa2738 + url: "https://pub.dev" + source: hosted + version: "2.4.3" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 + url: "https://pub.dev" + source: hosted + version: "2.2.1" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 + url: "https://pub.dev" + source: hosted + version: "2.3.0" + phosphor_flutter: + dependency: "direct main" + description: + name: phosphor_flutter + sha256: "8a14f238f28a0b54842c5a4dc20676598dd4811fcba284ed828bd5a262c11fde" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + platform: + dependency: transitive + description: + name: platform + sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984" + url: "https://pub.dev" + source: hosted + version: "3.1.6" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" + url: "https://pub.dev" + source: hosted + version: "2.1.8" + rxdart: + dependency: transitive + description: + name: rxdart + sha256: "5c3004a4a8dbb94bd4bf5412a4def4acdaa12e12f269737a5751369e12d1a962" + url: "https://pub.dev" + source: hosted + version: "0.28.0" + sign_in_with_apple: + dependency: "direct main" + description: + name: sign_in_with_apple + sha256: "8bd875c8e8748272749eb6d25b896f768e7e9d60988446d543fe85a37a2392b8" + url: "https://pub.dev" + source: hosted + version: "7.0.1" + sign_in_with_apple_platform_interface: + dependency: transitive + description: + name: sign_in_with_apple_platform_interface + sha256: "981bca52cf3bb9c3ad7ef44aace2d543e5c468bb713fd8dda4275ff76dfa6659" + url: "https://pub.dev" + source: hosted + version: "2.0.0" + sign_in_with_apple_web: + dependency: transitive + description: + name: sign_in_with_apple_web + sha256: f316400827f52cafcf50d00e1a2e8a0abc534ca1264e856a81c5f06bd5b10fed + url: "https://pub.dev" + source: hosted + version: "3.0.0" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + source_span: + dependency: transitive + description: + name: source_span + sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c" + url: "https://pub.dev" + source: hosted + version: "1.10.1" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" + sqflite: + dependency: transitive + description: + name: sqflite + sha256: e2297b1da52f127bc7a3da11439985d9b536f75070f3325e62ada69a5c585d03 + url: "https://pub.dev" + source: hosted + version: "2.4.2" + sqflite_android: + dependency: transitive + description: + name: sqflite_android + sha256: ecd684501ebc2ae9a83536e8b15731642b9570dc8623e0073d227d0ee2bfea88 + url: "https://pub.dev" + source: hosted + version: "2.4.2+2" + sqflite_common: + dependency: transitive + description: + name: sqflite_common + sha256: "6ef422a4525ecc601db6c0a2233ff448c731307906e92cabc9ba292afaae16a6" + url: "https://pub.dev" + source: hosted + version: "2.5.6" + sqflite_darwin: + dependency: transitive + description: + name: sqflite_darwin + sha256: "279832e5cde3fe99e8571879498c9211f3ca6391b0d818df4e17d9fff5c6ccb3" + url: "https://pub.dev" + source: hosted + version: "2.4.2" + sqflite_platform_interface: + dependency: transitive + description: + name: sqflite_platform_interface + sha256: "8dd4515c7bdcae0a785b0062859336de775e8c65db81ae33dd5445f35be61920" + url: "https://pub.dev" + source: hosted + version: "2.4.0" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" + url: "https://pub.dev" + source: hosted + version: "1.12.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" + url: "https://pub.dev" + source: hosted + version: "1.4.1" + synchronized: + dependency: transitive + description: + name: synchronized + sha256: c254ade258ec8282947a0acbbc90b9575b4f19673533ee46f2f6e9b3aeefd7c0 + url: "https://pub.dev" + source: hosted + version: "3.4.0" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" + url: "https://pub.dev" + source: hosted + version: "1.2.2" + test_api: + dependency: transitive + description: + name: test_api + sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00" + url: "https://pub.dev" + source: hosted + version: "0.7.6" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 + url: "https://pub.dev" + source: hosted + version: "1.4.0" + uuid: + dependency: transitive + description: + name: uuid + sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff + url: "https://pub.dev" + source: hosted + version: "4.5.1" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b + url: "https://pub.dev" + source: hosted + version: "2.2.0" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: "45caa6c5917fa127b5dbcfbd1fa60b14e583afdc08bfc96dda38886ca252eb60" + url: "https://pub.dev" + source: hosted + version: "15.0.2" + web: + dependency: transitive + description: + name: web + sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" + url: "https://pub.dev" + source: hosted + version: "1.1.1" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" + url: "https://pub.dev" + source: hosted + version: "1.1.0" +sdks: + dart: ">=3.9.2 <4.0.0" + flutter: ">=3.35.0" diff --git a/pubspec.yaml b/pubspec.yaml new file mode 100644 index 0000000..0baa2c1 --- /dev/null +++ b/pubspec.yaml @@ -0,0 +1,94 @@ +name: hum +description: "A new Flutter project." +# The following line prevents the package from being accidentally published to +# pub.dev using `flutter pub publish`. This is preferred for private packages. +publish_to: 'none' # Remove this line if you wish to publish to pub.dev +version: 1.0.0+1 + +environment: + sdk: ^3.9.2 + +# Dependencies specify other packages that your package needs in order to work. +# To automatically upgrade your package dependencies to the latest versions +# consider running `flutter pub upgrade --major-versions`. Alternatively, +# dependencies can be manually updated by changing the version numbers below to +# the latest version available on pub.dev. To see which dependencies have newer +# versions available, run `flutter pub outdated`. +dependencies: + flutter: + sdk: flutter + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + cupertino_icons: ^1.0.8 + firebase_core: ^4.1.1 + firebase_auth: ^6.1.0 + cloud_firestore: ^6.0.3 + firebase_storage: ^13.0.2 + firebase_analytics: ^12.0.2 + modal_bottom_sheet: ^3.0.0 + google_sign_in: ^7.2.0 + sign_in_with_apple: ^7.0.1 + crypto: ^3.0.6 + phosphor_flutter: ^2.1.0 + cached_network_image: ^3.4.1 + image_picker: ^1.2.1 + http: ^1.6.0 + firebase_remote_config: ^6.1.2 + +dev_dependencies: + flutter_test: + sdk: flutter + + # The "flutter_lints" package below contains a set of recommended lints to + # encourage good coding practices. The lint set provided by the package is + # activated in the `analysis_options.yaml` file located at the root of your + # package. See that file for information about deactivating specific lint + # rules and activating additional ones. + flutter_lints: ^6.0.0 + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter packages. +flutter: + + # The following line ensures that the Material Icons font is + # included with your application, so that you can use the icons in + # the material Icons class. + uses-material-design: true + + + assets: + - assets/images/ + + # To add assets to your application, add an assets section, like this: + # assets: + # - images/a_dot_burr.jpeg + # - images/a_dot_ham.jpeg + + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/to/resolution-aware-images + + # For details regarding adding assets from package dependencies, see + # https://flutter.dev/to/asset-from-package + + # To add custom fonts to your application, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts from package dependencies, + # see https://flutter.dev/to/font-from-package diff --git a/test/widget_test.dart b/test/widget_test.dart new file mode 100644 index 0000000..1b3aa25 --- /dev/null +++ b/test/widget_test.dart @@ -0,0 +1,30 @@ +// This is a basic Flutter widget test. +// +// To perform an interaction with a widget in your test, use the WidgetTester +// utility in the flutter_test package. For example, you can send tap and scroll +// gestures. You can also use WidgetTester to find child widgets in the widget +// tree, read text, and verify that the values of widget properties are correct. + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import 'package:hum/main.dart'; + +void main() { + testWidgets('Counter increments smoke test', (WidgetTester tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget(const HUMApp()); + + // Verify that our counter starts at 0. + expect(find.text('0'), findsOneWidget); + expect(find.text('1'), findsNothing); + + // Tap the '+' icon and trigger a frame. + await tester.tap(find.byIcon(Icons.add)); + await tester.pump(); + + // Verify that our counter has incremented. + expect(find.text('0'), findsNothing); + expect(find.text('1'), findsOneWidget); + }); +} diff --git a/web/favicon.png b/web/favicon.png new file mode 100644 index 0000000..8aaa46a Binary files /dev/null and b/web/favicon.png differ diff --git a/web/icons/Icon-192.png b/web/icons/Icon-192.png new file mode 100644 index 0000000..b749bfe Binary files /dev/null and b/web/icons/Icon-192.png differ diff --git a/web/icons/Icon-512.png b/web/icons/Icon-512.png new file mode 100644 index 0000000..88cfd48 Binary files /dev/null and b/web/icons/Icon-512.png differ diff --git a/web/icons/Icon-maskable-192.png b/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000..eb9b4d7 Binary files /dev/null and b/web/icons/Icon-maskable-192.png differ diff --git a/web/icons/Icon-maskable-512.png b/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000..d69c566 Binary files /dev/null and b/web/icons/Icon-maskable-512.png differ diff --git a/web/index.html b/web/index.html new file mode 100644 index 0000000..a015cd8 --- /dev/null +++ b/web/index.html @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + hum + + + + + + diff --git a/web/manifest.json b/web/manifest.json new file mode 100644 index 0000000..783868b --- /dev/null +++ b/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "hum", + "short_name": "hum", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/windows/.gitignore b/windows/.gitignore new file mode 100644 index 0000000..d492d0d --- /dev/null +++ b/windows/.gitignore @@ -0,0 +1,17 @@ +flutter/ephemeral/ + +# Visual Studio user-specific files. +*.suo +*.user +*.userosscache +*.sln.docstates + +# Visual Studio build-related files. +x64/ +x86/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ diff --git a/windows/CMakeLists.txt b/windows/CMakeLists.txt new file mode 100644 index 0000000..84a7b4d --- /dev/null +++ b/windows/CMakeLists.txt @@ -0,0 +1,108 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(hum LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "hum") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(VERSION 3.14...3.25) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/windows/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/windows/flutter/CMakeLists.txt b/windows/flutter/CMakeLists.txt new file mode 100644 index 0000000..903f489 --- /dev/null +++ b/windows/flutter/CMakeLists.txt @@ -0,0 +1,109 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# Set fallback configurations for older versions of the flutter tool. +if (NOT DEFINED FLUTTER_TARGET_PLATFORM) + set(FLUTTER_TARGET_PLATFORM "windows-x64") +endif() + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + ${FLUTTER_TARGET_PLATFORM} $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000..ec1e463 --- /dev/null +++ b/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,26 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + +#include +#include +#include +#include +#include + +void RegisterPlugins(flutter::PluginRegistry* registry) { + CloudFirestorePluginCApiRegisterWithRegistrar( + registry->GetRegistrarForPlugin("CloudFirestorePluginCApi")); + FileSelectorWindowsRegisterWithRegistrar( + registry->GetRegistrarForPlugin("FileSelectorWindows")); + FirebaseAuthPluginCApiRegisterWithRegistrar( + registry->GetRegistrarForPlugin("FirebaseAuthPluginCApi")); + FirebaseCorePluginCApiRegisterWithRegistrar( + registry->GetRegistrarForPlugin("FirebaseCorePluginCApi")); + FirebaseStoragePluginCApiRegisterWithRegistrar( + registry->GetRegistrarForPlugin("FirebaseStoragePluginCApi")); +} diff --git a/windows/flutter/generated_plugin_registrant.h b/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000..dc139d8 --- /dev/null +++ b/windows/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake new file mode 100644 index 0000000..767b528 --- /dev/null +++ b/windows/flutter/generated_plugins.cmake @@ -0,0 +1,28 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST + cloud_firestore + file_selector_windows + firebase_auth + firebase_core + firebase_storage +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/windows/runner/CMakeLists.txt b/windows/runner/CMakeLists.txt new file mode 100644 index 0000000..394917c --- /dev/null +++ b/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/windows/runner/Runner.rc b/windows/runner/Runner.rc new file mode 100644 index 0000000..5b59afe --- /dev/null +++ b/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "com.example" "\0" + VALUE "FileDescription", "hum" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "hum" "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" + VALUE "OriginalFilename", "hum.exe" "\0" + VALUE "ProductName", "hum" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/windows/runner/flutter_window.cpp b/windows/runner/flutter_window.cpp new file mode 100644 index 0000000..955ee30 --- /dev/null +++ b/windows/runner/flutter_window.cpp @@ -0,0 +1,71 @@ +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/windows/runner/flutter_window.h b/windows/runner/flutter_window.h new file mode 100644 index 0000000..6da0652 --- /dev/null +++ b/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/windows/runner/main.cpp b/windows/runner/main.cpp new file mode 100644 index 0000000..0eca459 --- /dev/null +++ b/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t *command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = + GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"hum", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/windows/runner/resource.h b/windows/runner/resource.h new file mode 100644 index 0000000..66a65d1 --- /dev/null +++ b/windows/runner/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/windows/runner/resources/app_icon.ico b/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000..c04e20c Binary files /dev/null and b/windows/runner/resources/app_icon.ico differ diff --git a/windows/runner/runner.exe.manifest b/windows/runner/runner.exe.manifest new file mode 100644 index 0000000..153653e --- /dev/null +++ b/windows/runner/runner.exe.manifest @@ -0,0 +1,14 @@ + + + + + PerMonitorV2 + + + + + + + + + diff --git a/windows/runner/utils.cpp b/windows/runner/utils.cpp new file mode 100644 index 0000000..3a0b465 --- /dev/null +++ b/windows/runner/utils.cpp @@ -0,0 +1,65 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE *unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + unsigned int target_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); + std::string utf8_string; + if (target_length == 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + input_length, utf8_string.data(), target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/windows/runner/utils.h b/windows/runner/utils.h new file mode 100644 index 0000000..3879d54 --- /dev/null +++ b/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/windows/runner/win32_window.cpp b/windows/runner/win32_window.cpp new file mode 100644 index 0000000..60608d0 --- /dev/null +++ b/windows/runner/win32_window.cpp @@ -0,0 +1,288 @@ +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registrar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { + ++g_active_window_count; +} + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { + return window_handle_; +} + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/windows/runner/win32_window.h b/windows/runner/win32_window.h new file mode 100644 index 0000000..e901dde --- /dev/null +++ b/windows/runner/win32_window.h @@ -0,0 +1,102 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_