commit 0c8bed0314f97368500b0f50cea6957c42b5f6ee Author: mirza.shafique Date: Wed Dec 21 14:59:41 2022 +0300 Structure 1.0 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..24476c5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,44 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +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 +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# 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..814aa47 --- /dev/null +++ b/.metadata @@ -0,0 +1,33 @@ +# 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. + +version: + revision: d9111f64021372856901a1fd5bfbc386cade3318 + channel: stable + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: d9111f64021372856901a1fd5bfbc386cade3318 + base_revision: d9111f64021372856901a1fd5bfbc386cade3318 + - platform: android + create_revision: d9111f64021372856901a1fd5bfbc386cade3318 + base_revision: d9111f64021372856901a1fd5bfbc386cade3318 + - platform: ios + create_revision: d9111f64021372856901a1fd5bfbc386cade3318 + base_revision: d9111f64021372856901a1fd5bfbc386cade3318 + + # 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/README.md b/README.md new file mode 100644 index 0000000..b68da7c --- /dev/null +++ b/README.md @@ -0,0 +1,16 @@ +# hmg_flutter_template + +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..61b6c4d --- /dev/null +++ b/analysis_options.yaml @@ -0,0 +1,29 @@ +# 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. +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-lang.github.io/linter/lints/index.html. + # + # 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..6f56801 --- /dev/null +++ b/android/.gitignore @@ -0,0 +1,13 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app +key.properties +**/*.keystore +**/*.jks diff --git a/android/app/build.gradle b/android/app/build.gradle new file mode 100644 index 0000000..991c0bc --- /dev/null +++ b/android/app/build.gradle @@ -0,0 +1,72 @@ +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def flutterRoot = localProperties.getProperty('flutter.sdk') +if (flutterRoot == null) { + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" +apply plugin: 'com.google.gms.google-services' + +android { + compileSdkVersion localProperties.getProperty('flutter.compileSdkVersion').toInteger() + ndkVersion flutter.ndkVersion + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = '1.8' + } + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.hmg.hmgDr" + // You can update the following values to match your application needs. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. + minSdkVersion localProperties.getProperty('flutter.minSdkVersion').toInteger() + targetSdkVersion localProperties.getProperty('flutter.targetSdkVersion').toInteger() + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + } + + 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.debug + } + } +} + +flutter { + source '../..' +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" +} diff --git a/android/app/google-services.json b/android/app/google-services.json new file mode 100644 index 0000000..e656079 --- /dev/null +++ b/android/app/google-services.json @@ -0,0 +1,82 @@ +{ + "project_info": { + "project_number": "934365232760", + "project_id": "hmg-dr-app", + "storage_bucket": "hmg-dr-app.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:934365232760:android:024b3569972f1c09f9778d", + "android_client_info": { + "package_name": "COM.HMG.HMGDR" + } + }, + "oauth_client": [ + { + "client_id": "934365232760-bobv1r1sn222le020jeni6u1bdbjdu1v.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCpYwrmuntOBdZv6GV6KEnLj8nQRvEnZ6I" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "934365232760-bobv1r1sn222le020jeni6u1bdbjdu1v.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "934365232760-57v2ld1qqulc4nt4o5pgjfbpc47fj3qf.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "COM.HMG.HMGDR" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:934365232760:android:e0e185e68c0d7690f9778d", + "android_client_info": { + "package_name": "com.hmg.hmgDr" + } + }, + "oauth_client": [ + { + "client_id": "934365232760-bobv1r1sn222le020jeni6u1bdbjdu1v.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCpYwrmuntOBdZv6GV6KEnLj8nQRvEnZ6I" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "934365232760-bobv1r1sn222le020jeni6u1bdbjdu1v.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "934365232760-57v2ld1qqulc4nt4o5pgjfbpc47fj3qf.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "COM.HMG.HMGDR" + } + } + ] + } + } + } + ], + "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..865d5f3 --- /dev/null +++ b/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..ba95d67 --- /dev/null +++ b/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + diff --git a/android/app/src/main/kotlin/com/example/hmg_flutter_template/MainActivity.kt b/android/app/src/main/kotlin/com/example/hmg_flutter_template/MainActivity.kt new file mode 100644 index 0000000..30866e3 --- /dev/null +++ b/android/app/src/main/kotlin/com/example/hmg_flutter_template/MainActivity.kt @@ -0,0 +1,6 @@ +package com.example.hmg_flutter_template + +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..865d5f3 --- /dev/null +++ b/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + diff --git a/android/build.gradle b/android/build.gradle new file mode 100644 index 0000000..1d20ff2 --- /dev/null +++ b/android/build.gradle @@ -0,0 +1,32 @@ +buildscript { + ext.kotlin_version = '1.6.10' + repositories { + google() + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:7.1.2' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath 'com.google.gms:google-services:4.3.3' + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/android/gradle.properties b/android/gradle.properties new file mode 100644 index 0000000..94adc3a --- /dev/null +++ b/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx1536M +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..cb24abd --- /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-7.4-all.zip diff --git a/android/settings.gradle b/android/settings.gradle new file mode 100644 index 0000000..44e62bc --- /dev/null +++ b/android/settings.gradle @@ -0,0 +1,11 @@ +include ':app' + +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() + +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/assets/fonts/DoctorApp.ttf b/assets/fonts/DoctorApp.ttf new file mode 100644 index 0000000..4ef2028 Binary files /dev/null and b/assets/fonts/DoctorApp.ttf differ diff --git a/assets/fonts/Poppins/Poppins-Bold.ttf b/assets/fonts/Poppins/Poppins-Bold.ttf new file mode 100644 index 0000000..b94d47f Binary files /dev/null and b/assets/fonts/Poppins/Poppins-Bold.ttf differ diff --git a/assets/fonts/Poppins/Poppins-Medium.ttf b/assets/fonts/Poppins/Poppins-Medium.ttf new file mode 100644 index 0000000..e90e87e Binary files /dev/null and b/assets/fonts/Poppins/Poppins-Medium.ttf differ diff --git a/assets/fonts/Poppins/Poppins-Regular.ttf b/assets/fonts/Poppins/Poppins-Regular.ttf new file mode 100644 index 0000000..be06e7f Binary files /dev/null and b/assets/fonts/Poppins/Poppins-Regular.ttf differ diff --git a/assets/fonts/Poppins/Poppins-SemiBold.ttf b/assets/fonts/Poppins/Poppins-SemiBold.ttf new file mode 100644 index 0000000..8987d80 Binary files /dev/null and b/assets/fonts/Poppins/Poppins-SemiBold.ttf differ diff --git a/assets/fonts/Work_Sans/OFL.txt b/assets/fonts/Work_Sans/OFL.txt new file mode 100644 index 0000000..5c0354e --- /dev/null +++ b/assets/fonts/Work_Sans/OFL.txt @@ -0,0 +1,93 @@ +Copyright (c) 2014-2015 Wei Huang (wweeiihhuuaanngg@gmail.com) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/assets/fonts/Work_Sans/WorkSans-Black.ttf b/assets/fonts/Work_Sans/WorkSans-Black.ttf new file mode 100644 index 0000000..fb74420 Binary files /dev/null and b/assets/fonts/Work_Sans/WorkSans-Black.ttf differ diff --git a/assets/fonts/Work_Sans/WorkSans-Bold.ttf b/assets/fonts/Work_Sans/WorkSans-Bold.ttf new file mode 100644 index 0000000..7caa359 Binary files /dev/null and b/assets/fonts/Work_Sans/WorkSans-Bold.ttf differ diff --git a/assets/fonts/Work_Sans/WorkSans-ExtraBold.ttf b/assets/fonts/Work_Sans/WorkSans-ExtraBold.ttf new file mode 100644 index 0000000..fd4b912 Binary files /dev/null and b/assets/fonts/Work_Sans/WorkSans-ExtraBold.ttf differ diff --git a/assets/fonts/Work_Sans/WorkSans-ExtraLight.ttf b/assets/fonts/Work_Sans/WorkSans-ExtraLight.ttf new file mode 100644 index 0000000..b97cf8c Binary files /dev/null and b/assets/fonts/Work_Sans/WorkSans-ExtraLight.ttf differ diff --git a/assets/fonts/Work_Sans/WorkSans-Light.ttf b/assets/fonts/Work_Sans/WorkSans-Light.ttf new file mode 100644 index 0000000..3e981fb Binary files /dev/null and b/assets/fonts/Work_Sans/WorkSans-Light.ttf differ diff --git a/assets/fonts/Work_Sans/WorkSans-Medium.ttf b/assets/fonts/Work_Sans/WorkSans-Medium.ttf new file mode 100644 index 0000000..7a2645b Binary files /dev/null and b/assets/fonts/Work_Sans/WorkSans-Medium.ttf differ diff --git a/assets/fonts/Work_Sans/WorkSans-Regular.ttf b/assets/fonts/Work_Sans/WorkSans-Regular.ttf new file mode 100644 index 0000000..0ac4520 Binary files /dev/null and b/assets/fonts/Work_Sans/WorkSans-Regular.ttf differ diff --git a/assets/fonts/Work_Sans/WorkSans-SemiBold.ttf b/assets/fonts/Work_Sans/WorkSans-SemiBold.ttf new file mode 100644 index 0000000..589a5f5 Binary files /dev/null and b/assets/fonts/Work_Sans/WorkSans-SemiBold.ttf differ diff --git a/assets/fonts/Work_Sans/WorkSans-Thin.ttf b/assets/fonts/Work_Sans/WorkSans-Thin.ttf new file mode 100644 index 0000000..011fcd3 Binary files /dev/null and b/assets/fonts/Work_Sans/WorkSans-Thin.ttf differ diff --git a/assets/images/loading_mohemm_logo.gif b/assets/images/loading_mohemm_logo.gif new file mode 100644 index 0000000..ffefdb0 Binary files /dev/null and b/assets/images/loading_mohemm_logo.gif differ diff --git a/assets/images/login/more_icon.png b/assets/images/login/more_icon.png new file mode 100644 index 0000000..b696d34 Binary files /dev/null and b/assets/images/login/more_icon.png differ diff --git a/assets/images/login/verify_face.svg b/assets/images/login/verify_face.svg new file mode 100644 index 0000000..e50d1a6 --- /dev/null +++ b/assets/images/login/verify_face.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/assets/images/login/verify_sms.svg b/assets/images/login/verify_sms.svg new file mode 100644 index 0000000..ae5fa9f --- /dev/null +++ b/assets/images/login/verify_sms.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/assets/images/login/verify_thumb.svg b/assets/images/login/verify_thumb.svg new file mode 100644 index 0000000..e626baf --- /dev/null +++ b/assets/images/login/verify_thumb.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/assets/images/login/verify_whatsapp.svg b/assets/images/login/verify_whatsapp.svg new file mode 100644 index 0000000..09ac85c --- /dev/null +++ b/assets/images/login/verify_whatsapp.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/assets/images/svgs/bottom_nav/home-active.svg b/assets/images/svgs/bottom_nav/home-active.svg new file mode 100644 index 0000000..8357b01 --- /dev/null +++ b/assets/images/svgs/bottom_nav/home-active.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/svgs/bottom_nav/reader-active.svg b/assets/images/svgs/bottom_nav/reader-active.svg new file mode 100644 index 0000000..36e7657 --- /dev/null +++ b/assets/images/svgs/bottom_nav/reader-active.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/assets/images/svgs/bottom_nav/reply-active.svg b/assets/images/svgs/bottom_nav/reply-active.svg new file mode 100644 index 0000000..3fc5bd0 --- /dev/null +++ b/assets/images/svgs/bottom_nav/reply-active.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/images/svgs/bottom_nav/schedule-active.svg b/assets/images/svgs/bottom_nav/schedule-active.svg new file mode 100644 index 0000000..a48e165 --- /dev/null +++ b/assets/images/svgs/bottom_nav/schedule-active.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/svgs/female avatar.svg b/assets/images/svgs/female avatar.svg new file mode 100644 index 0000000..1cf831e --- /dev/null +++ b/assets/images/svgs/female avatar.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/svgs/female.svg b/assets/images/svgs/female.svg new file mode 100644 index 0000000..307729c --- /dev/null +++ b/assets/images/svgs/female.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/svgs/inpatient.svg b/assets/images/svgs/inpatient.svg new file mode 100644 index 0000000..0f6b79b --- /dev/null +++ b/assets/images/svgs/inpatient.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/images/svgs/male avatar.svg b/assets/images/svgs/male avatar.svg new file mode 100644 index 0000000..ff17741 --- /dev/null +++ b/assets/images/svgs/male avatar.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/svgs/male.svg b/assets/images/svgs/male.svg new file mode 100644 index 0000000..80cd0c7 --- /dev/null +++ b/assets/images/svgs/male.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/svgs/menu.svg b/assets/images/svgs/menu.svg new file mode 100644 index 0000000..6808f51 --- /dev/null +++ b/assets/images/svgs/menu.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/svgs/no_data.svg b/assets/images/svgs/no_data.svg new file mode 100644 index 0000000..c54f043 --- /dev/null +++ b/assets/images/svgs/no_data.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/svgs/profile_screen/ECG.svg b/assets/images/svgs/profile_screen/ECG.svg new file mode 100644 index 0000000..cc697f9 --- /dev/null +++ b/assets/images/svgs/profile_screen/ECG.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/svgs/profile_screen/Order Procedures.svg b/assets/images/svgs/profile_screen/Order Procedures.svg new file mode 100644 index 0000000..9eb44df --- /dev/null +++ b/assets/images/svgs/profile_screen/Order Procedures.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/svgs/profile_screen/Progress notes.svg b/assets/images/svgs/profile_screen/Progress notes.svg new file mode 100644 index 0000000..5fc4175 --- /dev/null +++ b/assets/images/svgs/profile_screen/Progress notes.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/assets/images/svgs/profile_screen/Radiology.svg b/assets/images/svgs/profile_screen/Radiology.svg new file mode 100644 index 0000000..8f1d8a4 --- /dev/null +++ b/assets/images/svgs/profile_screen/Radiology.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/svgs/profile_screen/UCAF.svg b/assets/images/svgs/profile_screen/UCAF.svg new file mode 100644 index 0000000..79100a5 --- /dev/null +++ b/assets/images/svgs/profile_screen/UCAF.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/svgs/profile_screen/admission req.svg b/assets/images/svgs/profile_screen/admission req.svg new file mode 100644 index 0000000..1f45426 --- /dev/null +++ b/assets/images/svgs/profile_screen/admission req.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/assets/images/svgs/profile_screen/booked.svg b/assets/images/svgs/profile_screen/booked.svg new file mode 100644 index 0000000..bda90bc --- /dev/null +++ b/assets/images/svgs/profile_screen/booked.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/assets/images/svgs/profile_screen/create episode.svg b/assets/images/svgs/profile_screen/create episode.svg new file mode 100644 index 0000000..88c1cc2 --- /dev/null +++ b/assets/images/svgs/profile_screen/create episode.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/images/svgs/profile_screen/diabetic chart.svg b/assets/images/svgs/profile_screen/diabetic chart.svg new file mode 100644 index 0000000..b558bc6 --- /dev/null +++ b/assets/images/svgs/profile_screen/diabetic chart.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/assets/images/svgs/profile_screen/diagnosis.svg b/assets/images/svgs/profile_screen/diagnosis.svg new file mode 100644 index 0000000..b0c9b83 --- /dev/null +++ b/assets/images/svgs/profile_screen/diagnosis.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/svgs/profile_screen/discharge summary.svg b/assets/images/svgs/profile_screen/discharge summary.svg new file mode 100644 index 0000000..2edd6a1 --- /dev/null +++ b/assets/images/svgs/profile_screen/discharge summary.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/assets/images/svgs/profile_screen/health summary.svg b/assets/images/svgs/profile_screen/health summary.svg new file mode 100644 index 0000000..186af7a --- /dev/null +++ b/assets/images/svgs/profile_screen/health summary.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/assets/images/svgs/profile_screen/insurance approval.svg b/assets/images/svgs/profile_screen/insurance approval.svg new file mode 100644 index 0000000..f6a5885 --- /dev/null +++ b/assets/images/svgs/profile_screen/insurance approval.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/images/svgs/profile_screen/lab results.svg b/assets/images/svgs/profile_screen/lab results.svg new file mode 100644 index 0000000..5e03a2d --- /dev/null +++ b/assets/images/svgs/profile_screen/lab results.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/svgs/profile_screen/livecare.svg b/assets/images/svgs/profile_screen/livecare.svg new file mode 100644 index 0000000..452ffc5 --- /dev/null +++ b/assets/images/svgs/profile_screen/livecare.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/assets/images/svgs/profile_screen/medical report.svg b/assets/images/svgs/profile_screen/medical report.svg new file mode 100644 index 0000000..f40a960 --- /dev/null +++ b/assets/images/svgs/profile_screen/medical report.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/svgs/profile_screen/modify episode.svg b/assets/images/svgs/profile_screen/modify episode.svg new file mode 100644 index 0000000..cdf5d3a --- /dev/null +++ b/assets/images/svgs/profile_screen/modify episode.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/images/svgs/profile_screen/operating report.svg b/assets/images/svgs/profile_screen/operating report.svg new file mode 100644 index 0000000..8d9766b --- /dev/null +++ b/assets/images/svgs/profile_screen/operating report.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/images/svgs/profile_screen/order prescription.svg b/assets/images/svgs/profile_screen/order prescription.svg new file mode 100644 index 0000000..21cadf7 --- /dev/null +++ b/assets/images/svgs/profile_screen/order prescription.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/assets/images/svgs/profile_screen/order sheets.svg b/assets/images/svgs/profile_screen/order sheets.svg new file mode 100644 index 0000000..c9e61e9 --- /dev/null +++ b/assets/images/svgs/profile_screen/order sheets.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/svgs/profile_screen/patient sick leave.svg b/assets/images/svgs/profile_screen/patient sick leave.svg new file mode 100644 index 0000000..f585b17 --- /dev/null +++ b/assets/images/svgs/profile_screen/patient sick leave.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/images/svgs/profile_screen/pending orders.svg b/assets/images/svgs/profile_screen/pending orders.svg new file mode 100644 index 0000000..ffe95e3 --- /dev/null +++ b/assets/images/svgs/profile_screen/pending orders.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/assets/images/svgs/profile_screen/refer patient.svg b/assets/images/svgs/profile_screen/refer patient.svg new file mode 100644 index 0000000..65c8f61 --- /dev/null +++ b/assets/images/svgs/profile_screen/refer patient.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/images/svgs/profile_screen/sick leave.svg b/assets/images/svgs/profile_screen/sick leave.svg new file mode 100644 index 0000000..0774eb7 --- /dev/null +++ b/assets/images/svgs/profile_screen/sick leave.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/images/svgs/profile_screen/vital signs.svg b/assets/images/svgs/profile_screen/vital signs.svg new file mode 100644 index 0000000..fe476c3 --- /dev/null +++ b/assets/images/svgs/profile_screen/vital signs.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/assets/images/svgs/profile_screen/walkin.svg b/assets/images/svgs/profile_screen/walkin.svg new file mode 100644 index 0000000..0ef3ecf --- /dev/null +++ b/assets/images/svgs/profile_screen/walkin.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/assets/images/svgs/verification/verify-face.svg b/assets/images/svgs/verification/verify-face.svg new file mode 100644 index 0000000..7969cad --- /dev/null +++ b/assets/images/svgs/verification/verify-face.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/assets/images/svgs/verification/verify-finger.svg b/assets/images/svgs/verification/verify-finger.svg new file mode 100644 index 0000000..e626baf --- /dev/null +++ b/assets/images/svgs/verification/verify-finger.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/assets/images/svgs/verification/verify-sms.svg b/assets/images/svgs/verification/verify-sms.svg new file mode 100644 index 0000000..ae5fa9f --- /dev/null +++ b/assets/images/svgs/verification/verify-sms.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/assets/images/svgs/verification/verify-whtsapp.svg b/assets/images/svgs/verification/verify-whtsapp.svg new file mode 100644 index 0000000..09ac85c --- /dev/null +++ b/assets/images/svgs/verification/verify-whtsapp.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/assets/langs/ar-SA.json b/assets/langs/ar-SA.json new file mode 100644 index 0000000..8dfc92f --- /dev/null +++ b/assets/langs/ar-SA.json @@ -0,0 +1,58 @@ +{ + "mohemm": "Mohemm", + "english": "English", + "arabic": "عربي", + "login": "تسجيل الدخول", + "drSulaiman": "سليمان الحبيب", + "welcomeTo": "مرحبا بك في", + "userID": "معرف المستخدم", + "password": "كلمة المرور", + "branch": "فرع", + "pleaseEnterLoginDetails": "الرجاء إدخال التفاصيل أدناه لتسجيل الدخول", + "username": "اسم المستخدم", + "welcomeBack": "مرحبا بعودتك", + "wouldYouLikeToLoginWithCurrentUsername": "هل ترغب في تسجيل الدخول باسم المستخدم الحالي؟", + "lastLoginDetails": "تفاصيل تسجيل الدخول الأخير:", + "verificationType": "نوع التحقق:", + "pleaseVerify": "ارجوك تحقق", + "pleaseVerifyForBio": "الرجاء التحقق من تسجيل الدخول باستخدام أحد هذه الخيارات", + "verifyThroughFace": "تحقق من خلال الوجه", + "verifyThroughFingerprint": "تحقق من خلال بصمة الإصبع", + "verifyThroughSMS": "تحقق من خلال الرسائل القصيرة", + "verifyThroughWhatsapp": "تحقق من خلال Whatsapp", + "useAnotherAccount": "استخدم حسابا آخر", + "pleaseEnterTheVerificationCodeSentTo": "الرجاء إدخال رمز التحقق المرسل إلى ", + "theVerificationCodeWillExpireIn": "ستنتهي صلاحية رمز التحقق في ", + "goodMorning": "صباح الخير", + "markAttendance": "علامة الحضور", + "timeLeftToday": "الوقت المتبقي اليوم", + "checkIn": "تحقق في", + "workList": "قائمة العمل", + "doNotUseRecentPassword": "لا تستخدم كلمة مرور حديثة", + "atLeastOneLowercase": "حرف صغير واحد على الأقل", + "atLeastOneUppercase": "حرف كبير واحد على الأقل", + "atLeastOneNumeric": "رقم واحد على الأقل", + "minimum8Characters": "8 أحرف على الأقل", + "doNotAddRepeatingLetters": "لا تقم بإضافة أحرف متكررة", + "itShouldContainSpecialCharacter": "يجب أن يحتوي على طابع خاص", + "confirmPasswordMustMatch": "يجب أن يتطابق تأكيد كلمة المرور", + "sms": "رسالة قصيرة", + "fingerPrint": "بصمة", + "face": "التعرف على الوجه", + "whatsapp": "واتس اب", + "reject": "يرفض", + "approve": "يوافق", + "cancel": "إلغاء", + "otp": "OTP", + "verification": "تَحَقّق", + "resend": "إعادة إرسال", + "codeExpire": "انتهت صلاحية رمز التحقق", + "moreVerificationOpts": "المزيد من خيارات التحقق", + "select": "Select", + "days": "أيام", + "hr": "س", + "min": "د", + "years": "سنة", + "months": "أشهر", + "userOtherAccount": "مستخدم حساب آخر" +} \ No newline at end of file diff --git a/assets/langs/en-US.json b/assets/langs/en-US.json new file mode 100644 index 0000000..a530700 --- /dev/null +++ b/assets/langs/en-US.json @@ -0,0 +1,58 @@ +{ + "mohemm": "Mohemm", + "english": "English", + "arabic": "عربي", + "login": "Login", + "drSulaiman" : "Dr Sulaiman Al Habib", + "welcomeTo": "Welcome to", + "userID" : "User ID", + "password" : "Password", + "branch" : "Branch", + "pleaseEnterLoginDetails": "Please enter the detail below to login", + "username": "Username", + "welcomeBack": "Welcome back", + "wouldYouLikeToLoginWithCurrentUsername": "Would you like to login with current Username?", + "lastLoginDetails": "Last Login Details:", + "verificationType": "Verification Type:", + "pleaseVerify": "Please Verify", + "pleaseVerifyForBio": "Please verify login with one of the following options", + "verifyThroughFace": "Verify Through Face", + "verifyThroughFingerprint": "Verify Through Fingerprint", + "verifyThroughSMS": "Verify Through SMS", + "verifyThroughWhatsapp": "Verify Through Whatsapp", + "useAnotherAccount": "Use Another Account", + "pleaseEnterTheVerificationCodeSentTo": "Please enter the verification code sent to ", + "theVerificationCodeWillExpireIn": "The verification code will expire in ", + "goodMorning": "Good Morning", + "markAttendance": "Mark Attendance", + "timeLeftToday": "Time Left Today", + "checkIn": "Check In", + "workList": "Work List", + "doNotUseRecentPassword": "Do not use recent password", + "atLeastOneLowercase": "At least one lowercase", + "atLeastOneUppercase": "At least one uppercase", + "atLeastOneNumeric": "At least one numeric", + "minimum8Characters": "Minimum 8 characters", + "doNotAddRepeatingLetters": "Do not add repeating letters", + "itShouldContainSpecialCharacter": "It should contain special character", + "confirmPasswordMustMatch": "Confirm password must match", + "sms": "SMS", + "fingerPrint": "Fingerprint", + "face": "Face", + "whatsapp": "Whatsapp", + "reject": "Reject", + "approve": "Approve", + "cancel": "Cancel", + "otp": "OTP", + "verification": "Verification", + "resend": "Resend", + "codeExpire": "The verification code has been expired", + "moreVerificationOpts" :"More verification options", + "select": "Select", + "days": "Days", + "hr": "Hr", + "min": "Min", + "years": "Years", + "months": "Months", + "userOtherAccount": "User Another Account" +} \ 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/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 0000000..9625e10 --- /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 + 11.0 + + diff --git a/ios/Flutter/Debug.xcconfig b/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000..592ceee --- /dev/null +++ b/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/ios/Flutter/Release.xcconfig b/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000..592ceee --- /dev/null +++ b/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..da4eafe --- /dev/null +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,481 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 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 PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 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 = ""; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.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 = ""; }; + 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 = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 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 */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + ); + 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 */ + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + 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 = { + LastUpgradeCheck = 1300; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 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 */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + 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"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase 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; + 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; + 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 = 11.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)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.hmgFlutterTemplate; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + 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; + 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 = 11.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; + 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; + 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 = 11.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)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.hmgFlutterTemplate; + 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)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.hmgFlutterTemplate; + 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 */ + 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..c87d15a --- /dev/null +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + 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..70693e4 --- /dev/null +++ b/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import UIKit +import Flutter + +@UIApplicationMain +@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..28c6bf0 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..2ccbfd9 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..f091b6b 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..4cde121 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..d0ef06e 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..dcdc230 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..2ccbfd9 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..c8f9ed8 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..a6d6b86 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..a6d6b86 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..75b2d16 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..c4df70d 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..6a84f41 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..d0e1f58 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/Info.plist b/ios/Runner/Info.plist new file mode 100644 index 0000000..41fc433 --- /dev/null +++ b/ios/Runner/Info.plist @@ -0,0 +1,51 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Hmg Flutter Template + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + hmg_flutter_template + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + + + 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/lib/classes/app_permissions.dart b/lib/classes/app_permissions.dart new file mode 100644 index 0000000..8c0a0ee --- /dev/null +++ b/lib/classes/app_permissions.dart @@ -0,0 +1,48 @@ + +import 'package:hmg_flutter_template/widgets/dialogs/confirm_dialog.dart'; +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; + +import 'package:permission_handler/permission_handler.dart'; + +class AppPermissions { + static void location(Function(bool) completion, BuildContext context) { + Permission.location.isGranted.then((isGranted){ + if(!isGranted){ + Permission.location.request().then((granted){ + completion(granted == PermissionStatus.granted); + }); + } + completion(isGranted); + }); + } + + static void showErrorLocationDialog(bool isPermissionError, BuildContext context) { + showDialog( + context: context, + builder: (cxt) => ConfirmDialog( + message: "Please provide location permission", + onTap: () { + if (isPermissionError) { + // Geolocator.openAppSettings(); + } else { + // Geolocator.openLocationSettings(); + } + Navigator.pop(context); + // createVacationRule(list); + }, + ), + ); + } + + static void checkAll(Function(bool) completion) { + [Permission.location].request().then((value) { + bool allGranted = false; + value.values.forEach((element) { + allGranted = allGranted && element == PermissionStatus.granted; + }); + + completion(allGranted); + }); + } +} diff --git a/lib/classes/colors.dart b/lib/classes/colors.dart new file mode 100644 index 0000000..93ea761 --- /dev/null +++ b/lib/classes/colors.dart @@ -0,0 +1,65 @@ +import 'package:flutter/cupertino.dart'; + +class MyColors { + static const Color kWhiteColor = Color(0xffffffff); + static const Color darkIconColor = Color(0xff28323A); + static const Color darkTextColor = Color(0xff2B353E); + static const Color normalTextColor = Color(0xff5A5A5A); + static const Color lightTextColor = Color(0xffBFBFBF); + static const Color gradiantStartColor = Color(0xff33c0a5); + static const Color gradiantEndColor = Color(0xff259db7); + static const Color textMixColor = Color(0xff2BB8A6); + static const Color backgroundColor = Color(0xffEDEDED); + static const Color grey41Color = Color(0xff414141); + static const Color grey57Color = Color(0xff575757); + static const Color grey67Color = Color(0xff676767); + static const Color grey77Color = Color(0xff777777); + static const Color greyF7Color = Color(0xffF7F7F7); + static const Color grey80Color = Color(0xff808080); + static const Color grey70Color = Color(0xff707070); + static const Color greyACColor = Color(0xffACACAC); + static const Color grey98Color = Color(0xff989898); + static const Color lightGreyEFColor = Color(0xffEFEFEF); + static const Color lightGreyEDColor = Color(0xffEDEDED); + static const Color lightGreyDeColor = Color(0xffDEDEDE); + static const Color lightGreyE3Color = Color(0xffE3E3E3); + static const Color lightGreyE6Color = Color(0xffE6E6E6); + static const Color lightGreyEAColor = Color(0xffEAEAEA); + static const Color lightGreyE5Color = Color(0xffE5E5E5); + static const Color darkWhiteColor = Color(0xffE0E0E0); + static const Color redColor = Color(0xffD02127); + static const Color pinkColor = Color(0xffEBA9A9); + static const Color pinkDarkColor = Color(0xffe3797d); + static const Color yellowColor = Color(0xffF4E31C); + static const Color orange = Color(0xFFCC9B14); + static const Color yellowFavColor = Color(0xffEAC321); + static const Color yellowColorII = Color(0xffEAA118); + static const Color backgroundBlackColor = Color(0xff202529); + static const Color black = Color(0xff000000); + static const Color white = Color(0xffffffff); + static const Color borderColor = Color(0xffE8E8E8); + static const Color borderE3Color = Color(0xffE3E3E3); + static const Color borderCEColor = Color(0xffCECECE); + + //static const Color grey67Color = Color(0xff676767); + static const Color whiteColor = Color(0xFFEEEEEE); + static const Color greenColor = Color(0xff1FA269); + static const Color lightGreenColor = Color(0xff2AB2AB); + static const Color darkGreyColor = Color(0xff464646); + static const Color greyA5Color = Color(0xffA5A5A5); + static const Color blackColor = Color(0xff000014); + static const Color grey3AColor = Color(0xff2E303A); + static const Color darkColor = Color(0xff000015); + static const Color lightGrayColor = Color(0xff808080); + static const Color darkRedColor = Color(0xffD02127); + static const Color lightGreyColor = Color(0xffC7C7C7); + static const Color green69Color = Color(0xff1FA169); + static const Color redA3Color = Color(0xffCA3332); + static const Color green9CColor = Color(0xff259CB8); + static const Color green2DColor = Color(0xff32D892); + static const Color greyC4Color = Color(0xffC4C4C4); + static const Color grey35Color = Color(0xff535353); + static const Color grey9DColor = Color(0xff9D9D9D); + static const Color darkDigitColor = Color(0xff2D2F39); + static const Color grey71Color = Color(0xff717171); +} diff --git a/lib/classes/consts.dart b/lib/classes/consts.dart new file mode 100644 index 0000000..7854166 --- /dev/null +++ b/lib/classes/consts.dart @@ -0,0 +1,40 @@ +class ApiConsts { + static const MAX_SMALL_SCREEN = 660; + + static String baseUrl = "http://10.200.204.20:2801/"; // Local server + // static String baseUrl = 'https://hmgwebservices.com/'; + + // static String baseUrl = 'https://uat.hmgwebservices.com/'; + static String baseUrlServices = baseUrl + "Services/"; // server + // static String baseUrlServices = "https://api.cssynapses.com/tangheem/"; // Live server + static String utilitiesRest = baseUrlServices + "Utilities.svc/REST/"; + static String erpRest = baseUrlServices + "ERP.svc/REST/"; + static String swpRest = baseUrlServices + "SWP.svc/REST/"; + static String user = baseUrlServices + "api_repo/User/"; + static String cocRest = baseUrlServices + "COCWS.svc/REST/"; + + //Chat + static String chatServerBaseUrl = "https://apiderichat.hmg.com"; + static String chatServerBaseApiUrl = "https://apiderichat.hmg.com/api_repo/"; + static String chatHubConnectionUrl = chatServerBaseUrl + "/ConnectionChatHub"; + static String chatSearchMember = "user/getUserWithStatusAndFavAsync/"; + static String chatRecentUrl = "UserChatHistory/getchathistorybyuserid"; //For a Mem + static String chatSingleUserHistoryUrl = "UserChatHistory/GetUserChatHistory"; + static String chatMediaImageUploadUrl = "shared/upload"; + static String chatFavoriteUsers = "FavUser/getFavUserById/"; +} + +class SharedPrefsConsts { + static String isRememberMe = "remember_me"; + static String username = "doctorId"; + static String password = "password"; + static String logInTokenID = "logInTokenID"; + static String vidaAuthTokenID = "vidaAuthTokenID"; + static String vidaRefreshTokenID = "vidaRefreshTokenID"; + static String authenticationTokenID = "authenticationTokenID"; + static String projectID = "projectID"; + static String clinicId = "clinicId"; + static String lastLoginDate = "lastLoginDate"; + static String lastLoginTime = "lastLoginTime"; + static String memberModel = "memberModel"; +} diff --git a/lib/classes/date-utils.dart b/lib/classes/date-utils.dart new file mode 100644 index 0000000..c823435 --- /dev/null +++ b/lib/classes/date-utils.dart @@ -0,0 +1,415 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:hmg_flutter_template/generated/locale_keys.g.dart'; +import 'package:intl/intl.dart'; + +class AppDateUtils { + static String convertDateToFormat(DateTime dateTime, String dateFormat) { + return DateFormat(dateFormat).format(dateTime); + } + + static DateTime convertISOStringToDateTime(String date) { + DateTime newDate; + + newDate = DateTime.parse(date); + + return newDate; + } + + static String convertStringToDateFormat(String date, String dateFormat) { + DateTime dateTime; + if (date.contains("/Date")) + dateTime = getDateTimeFromServerFormat(date); + else + dateTime = DateTime.parse(date); + return convertDateToFormat(dateTime, dateFormat); + } + + static String convertToServerFormat(String date, String dateFormat) { + return '/Date(${DateFormat(dateFormat).parse(date).millisecondsSinceEpoch})/'; + } + + static String convertDateToServerFormat(DateTime date) { + return '/Date(${date.millisecondsSinceEpoch})/'; + } + + static convertDateFromServerFormat(String str, dateFormat) { + var date = getDateTimeFromServerFormat(str); + + return DateFormat(dateFormat).format(date); + } + + static DateTime getDateTimeFromServerFormat(String str) { + DateTime date = DateTime.now(); + if (str != null) { + const start = "/Date("; + + const end = "+0300)"; + if (str.contains("/Date")) { + final startIndex = str.indexOf(start); + + final endIndex = str.indexOf(end, startIndex + start.length); + + date = new DateTime.fromMillisecondsSinceEpoch(int.parse(str.substring(startIndex + start.length, endIndex))); + } else { + date = DateTime.now(); + } + } else { + date = DateTime.parse(str); + } + + return date; + } + + static String differenceBetweenDateAndCurrentInYearMonthDay(DateTime firstDate, BuildContext context) { + DateTime now = DateTime.now(); + // now = now.add(Duration(days: 400, minutes: 0)); + var difference = firstDate.difference(now); + + int years = now.year - firstDate.year; + int months = now.month - firstDate.month; + int days = now.day - firstDate.day; + + if (months < 0 || (months == 0 && days < 0)) { + years--; + months += (days < 0 ? 11 : 12); + } + if (days < 0) { + final monthAgo = new DateTime(now.year, now.month - 1, firstDate.day); + days = now.difference(monthAgo).inDays + 1; + } + return "$days ${LocaleKeys.days.tr()}, $months ${LocaleKeys.months.tr()}, $years ${LocaleKeys.years.tr()}"; + } + + static String differenceBetweenDateAndCurrent(DateTime firstDate, BuildContext context, {bool isShowSecond = false, bool isShowDays = true}) { + DateTime now = DateTime.now(); + var difference = now.difference(firstDate); + + int minutesInDays = difference.inMinutes; + int secondInDays = difference.inSeconds; + int hoursInDays = minutesInDays ~/ 60; // ~/ : truncating division to make the result int + int second = secondInDays % 60; + int minutes = minutesInDays % 60; + int days = hoursInDays ~/ 24; + int hours = hoursInDays % 24; + + double hoursInOneDay = difference.inHours / difference.inDays; + + return (isShowDays ? (days > 0 ? "$days ${LocaleKeys.days.tr()}," : '') : "") + + (hours > 0 ? "$hours ${LocaleKeys.hr.tr()}," : "") + + " $minutes ${LocaleKeys.min.tr()}" + + (isShowSecond ? ", $second Sec" : ""); + } + + static String differenceBetweenServerDateAndCurrent(String str, BuildContext context) { + const start = "/Date("; + + const end = "+0300)"; + + final startIndex = str.indexOf(start); + + final endIndex = str.indexOf(end, startIndex + start.length); + + var date = new DateTime.fromMillisecondsSinceEpoch(int.parse(str.substring(startIndex + start.length, endIndex))); + return differenceBetweenDateAndCurrent(date, context); + } + + /// get month by + /// [weekDay] convert week day in int to week day name + static getWeekDay(int weekDay) { + switch (weekDay) { + case 1: + return "Monday"; + case 2: + return "Tuesday"; + case 3: + return "Wednesday"; + case 4: + return "Thursday"; + case 5: + return "Friday"; + case 6: + return "Saturday "; + case 7: + return "Sunday"; + } + } + + /// get month by + /// [weekDay] convert week day in int to week day name arabic + static getWeekDayArabic(int weekDay) { + switch (weekDay) { + case 1: + return "الاثنين"; + case 2: + return "الثلاثاء"; + case 3: + return "الاربعاء"; + case 4: + return "الخميس"; + case 5: + return "الجمعه"; + case 6: + return "السبت "; + case 7: + return "الاحد"; + } + } + + /// get month by + /// [month] convert month number in to month name + static getMonth(int month) { + switch (month) { + case 1: + return "January"; + case 2: + return "February"; + case 3: + return "March"; + case 4: + return "April"; + case 5: + return "May"; + case 6: + return "June"; + case 7: + return "July"; + case 8: + return "August"; + case 9: + return "September"; + case 10: + return "October"; + case 11: + return "November"; + case 12: + return "December"; + } + } + + /// get month by + /// [month] convert month number in to month name in Arabic + static getMonthArabic(int month) { + switch (month) { + case 1: + return "يناير"; + case 2: + return " فبراير"; + case 3: + return "مارس"; + case 4: + return "أبريل"; + case 5: + return "مايو"; + case 6: + return "يونيو"; + case 7: + return "يوليو"; + case 8: + return "أغسطس"; + case 9: + return "سبتمبر"; + case 10: + return " اكتوبر"; + case 11: + return " نوفمبر"; + case 12: + return "ديسمبر"; + } + } + + static getMonthByName(String month) { + switch (month.toLowerCase()) { + case 'january': + return 1; + case 'february': + return 2; + case 'march': + return 3; + case 'april': + return 4; + case 'may': + return 5; + case 'june': + return 6; + case 'july': + return 7; + case 'august': + return 8; + case 'september': + return 9; + case 'october': + return 10; + case 'november': + return 11; + case 'december': + return 12; + } + } + + static DateTime convertStringToDate(String date) { + // /Date(1585774800000+0300)/ + + if (date != null) { + const start = "/Date("; + const end = "+0300)"; + final startIndex = date.indexOf(start); + final endIndex = date.indexOf(end, startIndex + start.length); + DateTime newDate = DateTime.fromMillisecondsSinceEpoch( + int.parse( + date.substring(startIndex + start.length, endIndex), + ), + ); + return newDate; + } else + return DateTime.now(); + } + + /// get data formatted like Apr 26,2020 + /// [dateTime] convert DateTime to data formatted Arabic + static String getMonthDayYearDateFormattedAr(DateTime dateTime) { + if (dateTime != null) + return getMonthArabic(dateTime.month) + " " + dateTime.day.toString() + ", " + dateTime.year.toString(); + else + return ""; + } + + /// get data formatted like Apr 26,2020 + /// [dateTime] convert DateTime to data formatted + static String getMonthDayYearDateFormatted(DateTime dateTime, {bool isArabic = false}) { + if (dateTime != null) + return isArabic ? getMonthArabic(dateTime.month) : getMonth(dateTime.month) + " " + dateTime.day.toString() + ", " + dateTime.year.toString(); + else + return ""; + } + + /// get data formatted like 26 Apr 2020 + /// [dateTime] convert DateTime to data formatted + static String getDayMonthYearDateFormatted(DateTime dateTime, {bool isArabic = false, bool isMonthShort = true}) { + if (dateTime != null) + return dateTime.day.toString() + + " " + + "${isArabic ? getMonthArabic(dateTime.month) : isMonthShort ? getMonth(dateTime.month).toString().substring(0, 3) : getMonth(dateTime.month)}" + + " " + + dateTime.year.toString(); + else + return ""; + } + + /// get data formatted like 26/4/2020 + /// [dateTime] convert DateTime to data formatted + static String getDayMonthYearDate(DateTime dateTime, {bool isArabic = false}) { + if (dateTime != null) + return dateTime.day.toString() + "/" + "${dateTime.month}" + "/" + dateTime.year.toString(); + else + return ""; + } + + /// get data formatted like 10:45 PM + /// [dateTime] convert DateTime to data formatted + static String getHour(DateTime dateTime) { + return DateFormat('hh:mm a').format(dateTime); + } + + static String getAgeByBirthday(String birthOfDate, BuildContext context, {bool isServerFormat = true}) { + // https://leechy.dev/calculate-dates-diff-in-dart + DateTime birthDate; + if (birthOfDate.contains("/Date")) { + birthDate = AppDateUtils.getDateTimeFromServerFormat(birthOfDate); + } else { + birthDate = DateTime.parse(birthOfDate); + } + final now = DateTime.now(); + int years = now.year - birthDate.year; + int months = now.month - birthDate.month; + int days = now.day - birthDate.day; + if (months < 0 || (months == 0 && days < 0)) { + years--; + months += (days < 0 ? 11 : 12); + } + if (days < 0) { + final monthAgo = new DateTime(now.year, now.month - 1, birthDate.day); + days = now.difference(monthAgo).inDays + 1; + } + return "$years ${LocaleKeys.years.tr()} $months ${LocaleKeys.months.tr()} $days ${LocaleKeys.days.tr()}"; + } + + static bool isToday(DateTime dateTime) { + DateTime todayDate = DateTime.now().toUtc(); + if (dateTime.day == todayDate.day && dateTime.month == todayDate.month && dateTime.year == todayDate.year) { + return true; + } + return false; + } + + static String getDate(DateTime dateTime) { + print(dateTime); + if (dateTime != null) + return getMonth(dateTime.month) + " " + dateTime.day.toString() + "," + dateTime.year.toString(); + else + return ""; + } + + static String getDateFormatted(DateTime dateTime) { + print(dateTime); + if (dateTime != null) + return dateTime.day.toString() + "/" + dateTime.month.toString() + "/" + dateTime.year.toString(); + else + return ""; + } + + static String getTimeHHMMA(DateTime dateTime) { + return DateFormat('hh:mm a').format(dateTime); + } + + static String getTimeHHMMA2(DateTime dateTime) { + return DateFormat('hh:mm').format(dateTime); + } + + static String getStartTime(String dateTime) { + String time = dateTime; + + if (dateTime.length > 7) time = dateTime.substring(0, 5); + return time; + } + + static String getTimeFormated(DateTime dateTime) { + print(dateTime); + if (dateTime != null) + return dateTime.hour.toString() + ":" + dateTime.minute.toString(); + else + return ""; + } + + // handel date like "09/05/2021 17:00" + static DateTime getDateTimeFromString(String str) { + List array = str.split('/'); + int day = int.parse(array[0]); + int month = int.parse(array[1]); + + List array2 = array[2].split(' '); + int year = int.parse(array2[0]); + String hour = array2[1]; + List hourList = hour.split(":"); + + DateTime date = DateTime(year, month, day, int.parse(hourList[0]), int.parse(hourList[1])); + + return date; + } + + static convertDateFormatImproved(String str) { + String newDate = ""; + const start = "/Date("; + if (str.isNotEmpty) { + const end = "+0300)"; + + final startIndex = str.indexOf(start); + final endIndex = str.indexOf(end, startIndex + start.length); + + var date = new DateTime.fromMillisecondsSinceEpoch(int.parse(str.substring(startIndex + start.length, endIndex))); + newDate = date.year.toString() + "/" + date.month.toString().padLeft(2, '0') + "/" + date.day.toString().padLeft(2, '0'); + } + + return newDate; + } +} diff --git a/lib/classes/decorations_helper.dart b/lib/classes/decorations_helper.dart new file mode 100644 index 0000000..35d302d --- /dev/null +++ b/lib/classes/decorations_helper.dart @@ -0,0 +1,25 @@ +import 'package:flutter/material.dart'; +import 'package:hmg_flutter_template/classes/colors.dart'; + +class MyDecorations { + static Decoration shadowDecoration = BoxDecoration( + color: MyColors.kWhiteColor, + borderRadius: BorderRadius.circular(15), + boxShadow: [ + BoxShadow( + color: const Color(0xff000000).withOpacity(.05), + blurRadius: 26, + offset: const Offset(0, -3), + ), + ], + ); + + static Decoration getContainersDecoration(Color color) { + Decoration answerContainerDecoration = BoxDecoration( + borderRadius: BorderRadius.circular(10), + color: color, + border: Border.all(width: 1, color: MyColors.lightGreyEFColor), + ); + return answerContainerDecoration; + } +} diff --git a/lib/classes/enums.dart b/lib/classes/enums.dart new file mode 100644 index 0000000..cf27602 --- /dev/null +++ b/lib/classes/enums.dart @@ -0,0 +1,29 @@ +// enum APPSTATUS { +// loading, +// unAuthenticated, +// authenticated, +// unverified, +// } + +enum AuthMethodTypes { + sms, + whatsApp, + fingerPrint, + faceID, + moreOptions, +} + +enum ViewState { + hide, + idle, + busy, + error, + busyLocal, + errorLocal, +} + +enum LoginType { + FROM_LOGIN, + SILENT_LOGIN, + SILENT_WITH_OTP, +} diff --git a/lib/classes/file_process.dart b/lib/classes/file_process.dart new file mode 100644 index 0000000..83bee75 --- /dev/null +++ b/lib/classes/file_process.dart @@ -0,0 +1,40 @@ +import 'dart:convert'; +import 'dart:io'; +import 'dart:typed_data'; + + +import 'package:path_provider/path_provider.dart'; + +class FileProcess { + static bool isFolderCreated = false; + static Directory? directory; + + static Future checkDocumentFolder() async { + try { + if (!isFolderCreated) { + directory = await getApplicationDocumentsDirectory(); + await directory!.exists().then((value) { + if (value) directory!.create(); + isFolderCreated = true; + }); + } + } catch (e) { + print(e.toString()); + } + } + + static void openFile(String fileName) { + String dir = directory!.path + "/$fileName.pdf"; + // OpenFile.open(dir); + } + + static Future downloadFile(String base64Content, String fileName) async { + Uint8List bytes = base64.decode(base64Content); + await checkDocumentFolder(); + String dir = directory!.path + "/" + fileName + ".pdf"; + File file = File(dir); + if (!file.existsSync()) file.create(); + await file.writeAsBytes(bytes); + return file; + } +} diff --git a/lib/classes/lottie_consts.dart b/lib/classes/lottie_consts.dart new file mode 100644 index 0000000..1b714a4 --- /dev/null +++ b/lib/classes/lottie_consts.dart @@ -0,0 +1,7 @@ +class MyLottieConsts { + static const String hourGlassLottie = "assets/lottie/hourglass.json"; + static const String celebrate1Lottie = "assets/lottie/celebrate1.json"; + static const String celebrate2Lottie = "assets/lottie/celebrate2.json"; + static const String winnerLottie = "assets/lottie/winner3.json"; + static const String allQuestions = "assets/lottie/all_questions.json"; +} diff --git a/lib/classes/size_config.dart b/lib/classes/size_config.dart new file mode 100644 index 0000000..c0f7ddd --- /dev/null +++ b/lib/classes/size_config.dart @@ -0,0 +1,103 @@ +import 'package:flutter/cupertino.dart'; +import 'package:hmg_flutter_template/classes/consts.dart'; + +class SizeConfig { + static double _blockWidth = 0; + static double _blockHeight = 0; + + static double? realScreenWidth; + static double? realScreenHeight; + static double? screenWidth; + static double? screenHeight; + static double? textMultiplier; + static double? imageSizeMultiplier; + static double? heightMultiplier; + static bool isPortrait = true; + static double? widthMultiplier; + static bool isMobilePortrait = false; + static bool isMobile = false; + static bool isHeightShort = false; + static bool isHeightVeryShort = false; + static bool isHeightMiddle = false; + static bool isHeightLarge = false; + static bool isWidthLarge = false; + + void init(BoxConstraints constraints, Orientation orientation) { + realScreenHeight = constraints.maxHeight; + realScreenWidth = constraints.maxWidth; + if (constraints.maxWidth <= ApiConsts.MAX_SMALL_SCREEN) { + isMobile = true; + } + if (constraints.maxHeight < 600) { + isHeightVeryShort = true; + } else if (constraints.maxHeight < 800) { + isHeightShort = true; + } else if (constraints.maxHeight < 1000) { + isHeightMiddle = true; + } else { + isHeightLarge = true; + } + + if (constraints.maxWidth > 600) { + isWidthLarge = true; + } + + if (orientation == Orientation.portrait) { + isPortrait = true; + if (realScreenWidth! < 450) { + isMobilePortrait = true; + } + // textMultiplier = _blockHeight; + // imageSizeMultiplier = _blockWidth; + screenHeight = realScreenHeight; + screenWidth = realScreenWidth; + } else { + isPortrait = false; + isMobilePortrait = false; + // textMultiplier = _blockWidth; + // imageSizeMultiplier = _blockHeight; + screenHeight = realScreenWidth; + screenWidth = realScreenHeight; + } + _blockWidth = screenWidth! / 100; + _blockHeight = screenHeight! / 100; + + textMultiplier = _blockHeight; + imageSizeMultiplier = _blockWidth; + heightMultiplier = _blockHeight; + widthMultiplier = _blockWidth; + + print('realScreenWidth $realScreenWidth'); + print('realScreenHeight $realScreenHeight'); + print('textMultiplier $textMultiplier'); + print('imageSizeMultiplier $imageSizeMultiplier'); + print('heightMultiplier$heightMultiplier'); + print('widthMultiplier $widthMultiplier'); + print('isPortrait $isPortrait'); + print('isMobilePortrait $isMobilePortrait'); + } + + static getTextMultiplierBasedOnWidth({double? width}) { + // TODO handel LandScape case + if (width != null) { + return width / 100; + } + return widthMultiplier; + } + + static getWidthMultiplier({double? width}) { + // TODO handel LandScape case + if (width != null) { + return width / 100; + } + return widthMultiplier; + } + + static getHeightMultiplier({double? height}) { + // TODO handel LandScape case + if (height != null) { + return height / 100; + } + return heightMultiplier; + } +} diff --git a/lib/classes/utils.dart b/lib/classes/utils.dart new file mode 100644 index 0000000..717f214 --- /dev/null +++ b/lib/classes/utils.dart @@ -0,0 +1,382 @@ +import 'dart:convert'; +import 'dart:io'; +import 'dart:typed_data'; + +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:fluttertoast/fluttertoast.dart'; +import 'package:hmg_flutter_template/config/app_state.dart'; +import 'package:hmg_flutter_template/classes/colors.dart'; +import 'package:hmg_flutter_template/config/routes.dart'; +import 'package:hmg_flutter_template/exceptions/api_exception.dart'; +import 'package:hmg_flutter_template/extensions/int_extensions.dart'; +import 'package:hmg_flutter_template/extensions/string_extensions.dart'; +import 'package:hmg_flutter_template/extensions/widget_extensions.dart'; +import 'package:hmg_flutter_template/main.dart'; +import 'package:hmg_flutter_template/widgets/dialogs/confirm_dialog.dart'; +import 'package:hmg_flutter_template/widgets/loading_dialog.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +// ignore_for_file: avoid_annotating_with_dynamic + +class Utils { + static bool _isLoadingVisible = false; + + static bool get isLoading => _isLoadingVisible; + + static void showToast(String message, {bool longDuration = true}) { + Fluttertoast.showToast( + msg: message, + toastLength: longDuration ? Toast.LENGTH_LONG : Toast.LENGTH_SHORT, + gravity: ToastGravity.BOTTOM, + timeInSecForIosWeb: 1, + backgroundColor: Colors.black54, + textColor: Colors.white, + fontSize: 16.0); + } + + static dynamic getNotNullValue(List list, int index) { + try { + return list[index]; + } catch (ex) { + return null; + } + } + + static int stringToHex(String colorCode) { + try { + return int.parse(colorCode.replaceAll("#", "0xff")); + } catch (ex) { + return (0xff000000); + } + } + + static Future delay(int millis) async { + return await Future.delayed(Duration(milliseconds: millis)); + } + + static void showLoading({bool isNeedBinding = true}) { + if (isNeedBinding) { + WidgetsBinding.instance.addPostFrameCallback((_) { + showLoadingDialog(); + }); + } else { + showLoadingDialog(); + } + } + + static void showLoadingDialog() { + _isLoadingVisible = true; + showDialog( + context: navigatorKey.currentContext!, + barrierColor: Colors.black.withOpacity(0.5), + builder: (BuildContext context) => LoadingDialog(), + ).then((value) { + _isLoadingVisible = false; + }).catchError((e) { + print("--------------catchError---------------"); + print(e); + }).onError( + (error, stackTrace) { + print("--------------onError---------------"); + print(error); + }, + ); + } + + static void hideLoading() { + try { + if (_isLoadingVisible) { + _isLoadingVisible = false; + Navigator.of(navigatorKey.currentContext!).pop(); + } + _isLoadingVisible = false; + } catch (e) { + print("exp_while_hide_dialog: " + e.toString()); + } + } + + static Future getStringFromPrefs(String key) async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + return prefs.getString(key) ?? ""; + } + + static Future saveStringFromPrefs(String key, String value) async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + return await prefs.setString(key, value); + } + + static Future getIntFromPrefs(String key) async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + return prefs.getInt(key) ?? 0; + } + + static Future saveIntFromPrefs(String key, int value) async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + return await prefs.setInt(key, value); + } + + static String capitalize(str) { + if (str != "") { + return "${str[0].toUpperCase()}${str.substring(1).toLowerCase()}"; + } else { + return str; + } + } + + static void handleException(dynamic exception, cxt, Function(String)? onErrorMessage) { + String errorMessage; + if (exception is APIException) { + if (exception.message == APIException.UNAUTHORIZED) { + return; + } else { + errorMessage = exception.error?.errorMessage ?? exception.message; + } + } else { + errorMessage = APIException.UNKNOWN; + } + if (onErrorMessage != null) { + onErrorMessage(errorMessage); + } else { + if (!AppState().isAuthenticated) { + showDialog( + context: cxt, + builder: (cxt) => ConfirmDialog( + message: errorMessage, + onTap: () { + Navigator.pushNamedAndRemoveUntil(cxt, AppRoutes.login, (Route route) => false); + }, + ), + ); + } else { + showToast(errorMessage); + } + } + } + + static void confirmDialog(cxt, String message) { + showDialog( + context: cxt, + builder: (cxt) => ConfirmDialog( + message: message, + ), + ); + } + + static Widget getNoDataWidget(BuildContext context) { + return Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SvgPicture.asset('assets/images/not_found.svg', width: 110.0, height: 110.0), + // LocaleKeys.noDataAvailable.tr().toText16().paddingOnly(top: 15), + ], + ).center; + } + + static Widget getNoChatWidget(BuildContext context) { + return Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SvgPicture.asset('assets/images/not_found.svg', width: 110.0, height: 110.0), + // LocaleKeys.noDataAvailable.tr().toText16().paddingOnly(top: 15), + ], + ).center; + } + + static Uint8List getPostBytes(img) { + try { + var b64 = img.replaceFirst('data:image/png;base64,', ''); + if (img != null && Utils.isBase64(b64)) return Utils.dataFromBase64String(b64); + } catch (e) {} + return Uint8List.fromList([]); + } + + static String getBase64FromJpeg(img) { + try { + var b64 = img.replaceFirst('data:image/jpeg;base64,', ''); + return b64; + } catch (e) {} + return ""; + } + + static bool isBase64(String str) { + RegExp _base64 = RegExp(r'^(?:[A-Za-z0-9+\/]{4})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=|[A-Za-z0-9+\/]{4})$'); + return _base64.hasMatch(str); + } + + static Uint8List dataFromBase64String(String base64String) { + return base64Decode(base64String); + } + + static Widget tableColumnTitle(String? text, {bool showDivider = true, bool alignCenter = false}) { + text ??= ""; + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + 6.height, + alignCenter ? text.toText12().center : text.toText12(), + 5.height, + if (showDivider) + const Divider( + height: 1, + color: Color(0xff2E303A), + thickness: 1, + ) + ], + ); + } + + static Decoration containerRadius(Color background, double radius) { + return BoxDecoration( + color: background, + border: Border.all( + width: 1, // + color: background // <--- border width here + ), + borderRadius: BorderRadius.circular(radius), + ); + } + + static Widget mHeight(double h) { + return Container( + height: h, + ); + } + + static Widget mDivider(Color color) { + return Divider( + // width: double.infinity, + height: 1, + color: color, + ); + } + + static Widget tableColumnValue(String text, {bool isCapitable = true, bool alignCenter = false}) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + 12.height, + if (alignCenter) + (isCapitable ? text.toLowerCase().capitalizeFirstofEach : text).toText12(color: MyColors.normalTextColor).center + else + (isCapitable ? text.toLowerCase().capitalizeFirstofEach : text).toText12(color: MyColors.normalTextColor), + 12.height, + ], + ); + } + + /// EIT Forms date formats + + static String getMonthNamedFormat(DateTime date) { + /// it will return like "29-Sep-2022" + return DateFormat('dd-MMM-yyyy').format(date); + } + + static String reverseFormatDate(String date) { + String formattedDate; + if (date.isNotEmpty) { + formattedDate = date.replaceAll('/', '-'); + formattedDate = formattedDate.replaceAll(' 00:00:00', ''); + } else { + formattedDate = date; + } + return formattedDate; + } + + static String formatStandardDate(String date) { + String formattedDate; + if (date.isNotEmpty) { + formattedDate = date.replaceAll('-', '/'); + } else { + formattedDate = date; + } + return formattedDate; + } + + static String reverseFormatStandardDate(String date) { + String formattedDate; + if (date.isNotEmpty) { + formattedDate = date.replaceAll('/', '-'); + } else { + formattedDate = date; + } + return formattedDate; + } + + static String formatDate(String date) { + String formattedDate; + + if (date.isNotEmpty) { + date = date.substring(0, 10); + formattedDate = date.replaceAll('-', '/'); + formattedDate = formattedDate + ' 00:00:00'; + } else { + formattedDate = date; + } + return formattedDate; + } + + static String formatDateNew(String date) { + String formattedDate; + if (date.isNotEmpty) { + formattedDate = date.split('T')[0]; + if (!formattedDate.contains("00:00:00")) { + formattedDate = formattedDate + ' 00:00:00'; + } + } else { + formattedDate = date; + } + return formattedDate; + } + + static Future selectDate(BuildContext context, DateTime selectedDate) async { + if (!Platform.isIOS) { + await showCupertinoModalPopup( + context: context, + builder: (cxt) => Container( + height: 250, + color: Colors.white, + child: CupertinoDatePicker( + backgroundColor: Colors.white, + mode: CupertinoDatePickerMode.date, + onDateTimeChanged: (value) { + if (value != null && value != selectedDate) { + selectedDate = value; + } + }, + initialDateTime: selectedDate, + ), + ), + ); + } else { + DateTime? picked = await showDatePicker(context: context, initialDate: selectedDate, initialEntryMode: DatePickerEntryMode.calendarOnly, firstDate: DateTime(2015, 8), lastDate: DateTime(2101)); + if (picked != null && picked != selectedDate) { + selectedDate = picked; + } + } + return selectedDate; + } + +// static void readNFc({required Function(String) onRead}) { +// +// NfcManager.instance.startSession(onDiscovered: (NfcTag tag) async { +// print(tag.data); +// var f; +// if (Platform.isAndroid) { +// f = MifareUltralight(tag: tag, identifier: tag.data["nfca"]["identifier"], type: 2, maxTransceiveLength: 252, timeout: 22); +// } else { +// f = MifareUltralight(tag: tag, identifier: tag.data["mifare"]["identifier"], type: 2, maxTransceiveLength: 252, timeout: 22); +// } +// String identifier = f.identifier.map((e) => e.toRadixString(16).padLeft(2, '0')).join(''); +// NfcManager.instance.stopSession(); +// onRead(identifier); +// }).catchError((err) { +// print(err); +// }); +// } +} diff --git a/lib/config/app_state.dart b/lib/config/app_state.dart new file mode 100644 index 0000000..0651c80 --- /dev/null +++ b/lib/config/app_state.dart @@ -0,0 +1,89 @@ +import 'dart:io'; + +import 'package:easy_localization/easy_localization.dart'; +import 'package:hmg_flutter_template/main.dart'; +import 'package:hmg_flutter_template/model/base/generic_response_model2.dart'; +import 'package:hmg_flutter_template/model/base/post_params_model.dart'; +import 'package:hmg_flutter_template/model/login/imei_details_model.dart'; +import 'package:hmg_flutter_template/model/login/list_doctors_clinic_model.dart'; +import 'package:hmg_flutter_template/model/login/member_login_model.dart'; + +class AppState { + // static final AppState _instance = AppState._internal(); + // + // AppState._internal(); + // + // factory AppState() => _instance; + + //Tokens + String? imei, logInTokenID, vidaAuthTokenID, vidaRefreshTokenID, authenticationTokenID; + + int projectID = 0; + int clinicId = 0; + + //TODO: Must be -1 before login or logout + int lastLoginTyp = -1; + int? doctorUserId; + int? employeeId; + String? password; + String? lastLoginDate; + GetIMEIDetailsModel? lastLoginImeiDate; + List? listDoctorsClinic; + + int setupId=91877; + + GenericResponseModel2? doctorProfile; + + bool isAuthenticated = false; + + set setIsAuthenticated(v) => isAuthenticated = v; + + bool isLogged = false; + + PostParamsModel _postParamsInitConfig = PostParamsModel( + tokenID: "", + languageID: 2, + stamp: "", + iPAdress: "9.9.9.9", + versionID: 9, + channel: 9, + sessionID: "BlUSkYymTt", + isLoginForDoctorApp: true, + patientOutSA: false, + vidaAuthTokenID: null, + vidaRefreshTokenID: null, + deviceTypeID: 1, + generalID: 'Cs2020@2016\$2958', + ); + + void setPostParamsInitConfig() { + isAuthenticated = false; + isLogged = false; + _postParams = _postParamsInitConfig; + } + + PostParamsModel? _postParams; + + PostParamsModel? get postParamsObject => _postParams; + + // Map get postParamsJson => isLogged ? (_postParams?.toJsonAfterLogin() ?? {}) : (_postParams?.toJson() ?? {}); + Map get postParamsJson { + _postParams!.stamp = DateTime.now().toIso8601String(); + _postParams?.vidaAuthTokenID = vidaAuthTokenID; + _postParams?.vidaRefreshTokenID = vidaRefreshTokenID; + _postParams?.imei = imei; + if(isLogged) + _postParams?.tokenID=authenticationTokenID; + return isLogged ? _postParams?.toJsonLogged() ?? {} : _postParams?.toJson() ?? {}; + } + + void setPostParamsModel(PostParamsModel _postParams) { + this._postParams = _postParams; + } + + bool isArabic() => EasyLocalization.of(navigatorKey.currentContext!)?.locale.languageCode == "ar"; + + int getLanguageID(context) => EasyLocalization.of(context)?.locale.languageCode == "ar" ? 1 : 2; + + MemberLoginModel? memberBeforeLogin; +} diff --git a/lib/config/dependencies.dart b/lib/config/dependencies.dart new file mode 100644 index 0000000..b9d0130 --- /dev/null +++ b/lib/config/dependencies.dart @@ -0,0 +1,27 @@ +// import 'package:firebase_crashlytics/firebase_crashlytics.dart'; +// import 'package:flutter/material.dart'; +import 'package:hmg_flutter_template/config/app_state.dart'; +import 'package:hmg_flutter_template/services/api_client.dart'; +import 'package:hmg_flutter_template/services/api_repo/dashboard_api_repo.dart'; +import 'package:hmg_flutter_template/services/api_repo/login_api_repo.dart'; +import 'package:hmg_flutter_template/services/api_repo/patient_api_repo.dart'; + +import 'package:hmg_flutter_template/services/firebase_service.dart'; +import 'package:injector/injector.dart'; + +class AppDependencies { + static void addDependencies() { + Injector injector = Injector.appInstance; + + //add dependencies as needed + //services + injector.registerSingleton(() => AppState()); + injector.registerSingleton(() => ApiClient()); + injector.registerSingleton(() => FirebaseService()); + + //repos + injector.registerSingleton(() => LoginApiRepo()); + injector.registerSingleton(() => DashboardApiRepo()); + injector.registerSingleton(() => PatientApiRepo()); + } +} diff --git a/lib/config/routes.dart b/lib/config/routes.dart new file mode 100644 index 0000000..04c7c5a --- /dev/null +++ b/lib/config/routes.dart @@ -0,0 +1,33 @@ +import 'package:flutter/material.dart'; +import 'package:hmg_flutter_template/ui/dashboard/dashbaord_page.dart'; +import 'package:hmg_flutter_template/ui/login/login_method_page.dart'; +import 'package:hmg_flutter_template/ui/login/login_page.dart'; +import 'package:hmg_flutter_template/ui/login/splash_page.dart'; + + +class AppRoutes { + static const String initialPage = login; + + //Login + static const String splash = "/splash"; + static const String registerSelection = "/registerSelection"; + static const String loginMethodsPage = "/loginMethodsPage"; + static const String login = "/login"; + + //Dashboard + static const String dashboard = "/dashboard"; + static const String searchPatient = "/searchPatient"; + static const String searchedFor = "/searchedFor"; + static const String patientProfile = "/patientProfile"; + static const String vitalSigns = "/vitalSigns"; + + static final Map routes = { + //Login + splash: (BuildContext context) => SplashPage(), + login: (BuildContext context) => LoginPage(), + loginMethodsPage: (BuildContext context) => const LoginMethodsPage(), + + //Dashboard + dashboard: (BuildContext context) => DashboardPage(), + }; +} diff --git a/lib/exceptions/api_exception.dart b/lib/exceptions/api_exception.dart new file mode 100644 index 0000000..d44100b --- /dev/null +++ b/lib/exceptions/api_exception.dart @@ -0,0 +1,29 @@ +import 'dart:convert'; + +import 'package:hmg_flutter_template/services/api_client.dart'; + +class APIException implements Exception { + static const String BAD_REQUEST = 'api_common_bad_request'; + static const String UNAUTHORIZED = 'api_common_unauthorized'; + static const String FORBIDDEN = 'api_common_forbidden'; + static const String NOT_FOUND = 'api_common_not_found'; + static const String INTERNAL_SERVER_ERROR = 'api_common_internal_server_error'; + static const String UPGRADE_REQUIRED = 'api_common_upgrade_required'; + static const String BAD_RESPONSE_FORMAT = 'api_common_bad_response_format'; + static const String OTHER = 'api_common_http_error'; + static const String TIMEOUT = 'api_common_http_timeout'; + static const String UNKNOWN = 'unexpected_error'; + + final String message; + final APIError? error; + final arguments; + + const APIException(this.message, {this.arguments, this.error}); + + Map toJson() => {'message': message, 'error': error, 'arguments': '$arguments'}; + + @override + String toString() { + return jsonEncode(this); + } +} diff --git a/lib/extensions/int_extensions.dart b/lib/extensions/int_extensions.dart new file mode 100644 index 0000000..7f8377d --- /dev/null +++ b/lib/extensions/int_extensions.dart @@ -0,0 +1,15 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:hmg_flutter_template/classes/colors.dart'; + +extension IntExtensions on int { + Widget get height => SizedBox(height: toDouble()); + + Widget get width => SizedBox(width: toDouble()); + + Widget get divider => Divider(height: toDouble(), thickness: toDouble(), color: MyColors.lightGreyEFColor); + + Widget get makeItSquare => SizedBox(width: toDouble(), height: toDouble()); + + +} diff --git a/lib/extensions/string_extensions.dart b/lib/extensions/string_extensions.dart new file mode 100644 index 0000000..e2d0e2e --- /dev/null +++ b/lib/extensions/string_extensions.dart @@ -0,0 +1,263 @@ +import 'package:auto_size_text/auto_size_text.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:intl/intl.dart'; +import 'package:hmg_flutter_template/classes/colors.dart'; +import 'package:sizer/sizer.dart'; + +extension CapExtension on String { + String get toCamelCase => "${this[0].toUpperCase()}${this.substring(1)}"; + + String get inCaps => '${this[0].toUpperCase()}${this.substring(1)}'; + + String get allInCaps => this.toUpperCase(); + + String get capitalizeFirstofEach => this.trim().length > 0 ? this.trim().toLowerCase().split(" ").map((str) => str.inCaps).join(" ") : ""; +} + +extension EmailValidator on String { + Widget get toWidget => Text(this); + + Widget toText10({Color? color, bool isBold = false, int? maxlines, FontStyle? fontStyle, TextOverflow? textOverflow}) => Text( + this, + maxLines: maxlines, + overflow: textOverflow, + style: TextStyle( + fontSize: 10.sp, + fontStyle: fontStyle ?? FontStyle.normal, + fontWeight: isBold ? FontWeight.bold : FontWeight.w600, + color: color ?? MyColors.darkTextColor, + letterSpacing: -0.4, + ), + ); + + Widget toText11({Color? color, FontWeight? weight, bool isUnderLine = false, bool isBold = false}) => Text( + this, + style: TextStyle( + fontSize: 11.sp, + fontWeight: weight ?? (isBold ? FontWeight.bold : FontWeight.w600), + color: color ?? MyColors.darkTextColor, + letterSpacing: -0.33, + decoration: isUnderLine ? TextDecoration.underline : null, + ), + ); + + Widget toText12({Color? color, bool isUnderLine = false, bool isBold = false, bool isCenter = false, int maxLine = 0}) => Text( + this, + textAlign: isCenter ? TextAlign.center : null, + maxLines: (maxLine > 0) ? maxLine : null, + style: TextStyle( + fontSize: 12.sp, + fontWeight: isBold ? FontWeight.bold : FontWeight.w600, + color: color ?? MyColors.darkTextColor, + letterSpacing: -0.72, + decoration: isUnderLine ? TextDecoration.underline : null, + ), + ); + + Widget toText12Auto({Color? color, bool isUnderLine = false, bool isBold = false, bool isCenter = false, int maxLine = 0}) => AutoSizeText( + this, + textAlign: isCenter ? TextAlign.center : null, + maxLines: (maxLine > 0) ? maxLine : null, + minFontSize: 8, + style: TextStyle( + fontSize: 12.sp, + fontWeight: isBold ? FontWeight.bold : FontWeight.w600, + color: color ?? MyColors.darkTextColor, + letterSpacing: -0.72, + decoration: isUnderLine ? TextDecoration.underline : null, + ), + ); + + Widget toTextAuto({ + Color? color, + bool isUnderLine = false, + bool isBold = false, + bool isCenter = false, + int maxLine = 0, + double fontSize = 12, + double letterSpacing = -0.72, + double height = 1, + TextOverflow? textOverflow, + FontWeight? fontWeight, + }) => + AutoSizeText( + this, + textAlign: isCenter ? TextAlign.center : null, + maxLines: (maxLine > 0) ? maxLine : null, + minFontSize: 5, + overflow: textOverflow, + style: TextStyle( + fontSize: fontSize, + fontWeight: fontWeight ?? (isBold + ? FontWeight.bold + : FontWeight.w600), + color: color ?? MyColors.darkTextColor, + letterSpacing: letterSpacing, + decoration: isUnderLine ? TextDecoration.underline : null, + ), + ); + + Widget toText13({Color? color, bool isUnderLine = false}) => Text( + this, + style: TextStyle(fontSize: 13.sp, fontWeight: FontWeight.w600, color: color ?? MyColors.darkTextColor, letterSpacing: -0.52, decoration: isUnderLine ? TextDecoration.underline : null), + ); + + Widget toText14({Color? color, bool isUnderLine = false, bool isBold = false, FontWeight? weight, int? maxlines}) => Text( + this, + maxLines: maxlines, + style: TextStyle( + color: color ?? MyColors.darkTextColor, + fontSize: 14.sp, + letterSpacing: -0.48, + fontWeight: weight ?? (isBold ? FontWeight.bold : FontWeight.w600), + decoration: isUnderLine ? TextDecoration.underline : null), + ); + + Widget toText16({ + Color? color, + bool isUnderLine = false, + bool isBold = false, + int? maxlines, + TextAlign? textAlign, + }) => + Text( + this, + maxLines: maxlines, + textAlign: textAlign, + style: TextStyle( + color: color ?? MyColors.darkTextColor, + fontSize: 16.sp, + letterSpacing: -0.64, + fontWeight: isBold ? FontWeight.bold : FontWeight.w600, + decoration: isUnderLine ? TextDecoration.underline : null, + ), + ); + + Widget toText17({Color? color, bool isBold = false}) => Text( + this, + style: TextStyle(color: color ?? MyColors.darkTextColor, fontSize: 17.sp, letterSpacing: -0.68, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), + ); + + Widget toText18({Color? color, bool isBold = false}) => Text( + this, + style: TextStyle(fontSize: 18.sp, fontWeight: isBold ? FontWeight.bold : FontWeight.w600, color: color ?? MyColors.darkTextColor, letterSpacing: -1.08), + ); + + Widget toText19({Color? color, bool isBold = false}) => Text( + this, + style: TextStyle(fontSize: 19.sp, fontWeight: isBold ? FontWeight.bold : FontWeight.w600, color: color ?? MyColors.darkTextColor, letterSpacing: -1.14), + ); + + Widget toText20({Color? color, bool isBold = false}) => Text( + this, + style: TextStyle(fontSize: 20.sp, fontWeight: isBold ? FontWeight.bold : FontWeight.w600, color: color ?? MyColors.darkTextColor, letterSpacing: -0.4), + ); + + Widget toText21({Color? color, bool isBold = false, FontWeight? weight, int? maxlines}) => Text( + this, + maxLines: maxlines, + style: TextStyle(color: color ?? MyColors.grey3AColor, fontSize: 21.sp, letterSpacing: -0.31, fontWeight: weight ?? (isBold ? FontWeight.bold : FontWeight.w600)), + ); + + Widget toText22({Color? color, bool isBold = false}) => Text( + this, + style: TextStyle(height: 1, color: color ?? MyColors.darkTextColor, fontSize: 22.sp, letterSpacing: -1.44, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), + ); + + Widget toText24({Color? color, bool isBold = false}) => Text( + this, + style: TextStyle(height: 23 / 24, color: color ?? MyColors.darkTextColor, fontSize: 24.sp, letterSpacing: -1.44, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), + ); + + Widget toText32({Color? color, bool isBold = false}) => Text( + this, + style: TextStyle(height: 32 / 32, color: color ?? MyColors.darkTextColor, fontSize: 32.sp, letterSpacing: -1.92, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), + ); + + Widget toText44({Color? color, bool isBold = false}) => Text( + this, + style: TextStyle(height: 32 / 32, color: color ?? MyColors.darkTextColor, fontSize: 44.sp, letterSpacing: -2.64, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), + ); + + Widget toSectionHeading({String upperHeading = "", String lowerHeading = ""}) { + String upper = ""; + String lower = ""; + String heading = this; + if (heading.isNotEmpty) { + List data = heading.split(" "); + + if (data.length > 1) { + upper = data[0]; + data.removeAt(0); + lower = data.join(" "); + } else { + lower = data[0]; + } + } + if (upperHeading.isNotEmpty) { + upper = upperHeading; + } + if (lowerHeading.isNotEmpty) { + lower = lowerHeading; + } + + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + if (upper.isNotEmpty) upper.toText12(), + lower.toText24(isBold: true), + ], + ); + } + + bool isValidEmail() { + return RegExp(r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$').hasMatch(this); + } + + String toFormattedDate() { + String date = this.split("T")[0]; + String time = this.split("T")[1]; + var dates = date.split("-"); + return "${dates[2]} ${getMonth(int.parse(dates[1]))} ${dates[0]} ${DateFormat('hh:mm a').format(DateFormat('hh:mm:ss').parse(time))}"; + } + + String getMonth(int month) { + switch (month) { + case 1: + return "January"; + case 2: + return "February"; + case 3: + return "March"; + case 4: + return "April"; + case 5: + return "May"; + case 6: + return "June"; + case 7: + return "July"; + case 8: + return "August"; + case 9: + return "September"; + case 10: + return "October"; + case 11: + return "November"; + case 12: + return "December"; + default: + return ""; + } + } + + String truncate(int max, {String suffix = ''}) { + try { + return length <= max ? this : '${substring(0, max - suffix.length)}$suffix'; + } catch (e) { + return this; + } + } +} diff --git a/lib/extensions/util_extensions.dart b/lib/extensions/util_extensions.dart new file mode 100644 index 0000000..349f821 --- /dev/null +++ b/lib/extensions/util_extensions.dart @@ -0,0 +1,33 @@ +import 'package:hmg_flutter_template/classes/enums.dart'; + +extension SelectedAuthMethodTypesService on AuthMethodTypes { + int getTypeIdService() { + switch (this) { + case AuthMethodTypes.sms: + return 1; + case AuthMethodTypes.whatsApp: + return 2; + case AuthMethodTypes.fingerPrint: + return 3; + case AuthMethodTypes.faceID: + return 4; + case AuthMethodTypes.moreOptions: + return 5; + } + } + + static getMethodsTypeService(int typeId) { + switch (typeId) { + case 1: + return AuthMethodTypes.sms; + case 2: + return AuthMethodTypes.whatsApp; + case 3: + return AuthMethodTypes.fingerPrint; + case 4: + return AuthMethodTypes.faceID; + case 5: + return AuthMethodTypes.moreOptions; + } + } +} diff --git a/lib/extensions/widget_extensions.dart b/lib/extensions/widget_extensions.dart new file mode 100644 index 0000000..5463bf3 --- /dev/null +++ b/lib/extensions/widget_extensions.dart @@ -0,0 +1,157 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/widgets.dart'; +import 'package:hmg_flutter_template/classes/colors.dart'; +import 'package:hmg_flutter_template/extensions/int_extensions.dart'; +import 'package:hmg_flutter_template/extensions/string_extensions.dart'; +import 'package:shimmer/shimmer.dart'; +import 'package:sizer/sizer.dart'; + +extension WidgetExtensions on Widget { + Widget onPress(VoidCallback onTap) => InkWell(onTap: onTap, child: this); + + Widget get expanded => Expanded(child: this); + + Widget get center => Center(child: this); + + Widget circle(double _value) => ClipRRect(borderRadius: BorderRadius.circular(_value), child: this); + + + Widget paddingAll(double _value) => Padding(padding: EdgeInsets.all(_value), child: this); + + Widget paddingSymmetrical(double horizontal, double vertical) => Padding(padding: EdgeInsets.symmetric(horizontal: horizontal, vertical: vertical), child: this); + + Widget paddingOnly({double left = 0.0, double right = 0.0, double top = 0.0, double bottom = 0.0}) => + Padding(padding: EdgeInsets.only(left: left, right: right, top: top, bottom: bottom), child: this); + + Widget toExpanded({int flex = 1}) => Expanded(flex: flex, child: this); + + Widget toShimmer({bool isShow = true}) => isShow + ? Shimmer.fromColors( + baseColor: Color(0xffe8eff0), + highlightColor: Colors.white, + child: Container( + color: Colors.white, + child: this, + ), + ) + : Container( + child: this, + ); + + Widget animatedSwither() => AnimatedSwitcher( + duration: const Duration(milliseconds: 500), + // transitionBuilder: (Widget child, Animation animation) { + // return ScaleTransition(scale: animation, child: child); + // }, + switchInCurve: Curves.linearToEaseOut, + switchOutCurve: Curves.linearToEaseOut, + child: this, + ); + + Widget objectContainerView({String title = "", String note = "", bool disablePadding = false, double radius = 15}) { + return Container( + padding: disablePadding ? EdgeInsets.zero : const EdgeInsets.only(top: 15, bottom: 15, left: 14, right: 14), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(radius), + boxShadow: [ + BoxShadow( + color: const Color(0xff000000).withOpacity(.05), + blurRadius: 26, + offset: const Offset(0, -3), + ), + ], + ), + alignment: Alignment.center, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + if (title.isNotEmpty) title.toText16(), + if (title.isNotEmpty) 12.height, + this, + if (note.isNotEmpty) note.toText11(), + ], + ), + ); + } + + Widget objectContainerBorderView( + {String title = "", + String note = "", + bool disablePadding = false, + double radius = 15, + Color? color, + Color borderColor = MyColors.lightGreyEFColor, + bool disableWidth = false, + bool isAlignment = false}) { + return Container( + padding: disablePadding ? EdgeInsets.zero : const EdgeInsets.only(top: 15, bottom: 15, left: 14, right: 14), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(radius), + color: color, + border: Border.all( + color: borderColor, + width: disableWidth ? 2 : 1, + ), + ), + alignment: isAlignment ? Alignment.center : null, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + if (title.isNotEmpty) title.toText16(), + if (title.isNotEmpty) 12.height, + this, + if (note.isNotEmpty) note.toText11(), + ], + ), + ); + } +} + +//Height Spacers in percentages +Widget heightSpacer02per() => SizedBox(height: 0.2.h); + +Widget heightSpacer04per() => SizedBox(height: 0.4.h); + +Widget heightSpacer06per() => SizedBox(height: 0.6.h); + +Widget heightSpacer08per() => SizedBox(height: 0.8.h); + +Widget heightSpacer1per() => SizedBox(height: 1.h); + +Widget heightSpacer2per() => SizedBox(height: 2.h); + +Widget heightSpacer3per() => SizedBox(height: 3.h); + +Widget heightSpacer4per() => SizedBox(height: 4.h); + +Widget heightSpacer5per() => SizedBox(height: 5.h); + +Widget heightSpacer8per() => SizedBox(height: 8.h); + +Widget heightSpacer10per() => SizedBox(height: 10.h); + +Widget heightSpacer15per() => SizedBox(height: 15.h); + +Widget heightSpacer20per() => SizedBox(height: 20.h); + +//Width Spacers in percentages +Widget widthSpacer02perc() => SizedBox(height: 0.2.w); + +Widget widthSpacer04perc() => SizedBox(height: 0.4.w); + +Widget widthSpacer06perc() => SizedBox(height: 0.6.w); + +Widget widthSpacer08per() => SizedBox(height: 0.8.w); + +Widget widthSpacer1per() => SizedBox(height: 1.w); + +Widget widthSpacer2per() => SizedBox(height: 2.w); + +Widget widthSpacer3per() => SizedBox(height: 3.w); + +Widget widthSpacer4per() => SizedBox(height: 4.w); + +Widget widthSpacer5per() => SizedBox(height: 5.w); diff --git a/lib/generated/codegen_loader.g.dart b/lib/generated/codegen_loader.g.dart new file mode 100644 index 0000000..09234fb --- /dev/null +++ b/lib/generated/codegen_loader.g.dart @@ -0,0 +1,132 @@ +// DO NOT EDIT. This is code generated via package:easy_localization/generate.dart + +// ignore_for_file: prefer_single_quotes + +import 'dart:ui'; + +import 'package:easy_localization/easy_localization.dart' show AssetLoader; + +class CodegenLoader extends AssetLoader{ + const CodegenLoader(); + + @override + Future> load(String fullPath, Locale locale ) { + return Future.value(mapLocales[locale.toString()]); + } + + static const Map ar_SA = { + "mohemm": "Mohemm", + "english": "English", + "arabic": "عربي", + "login": "تسجيل الدخول", + "drSulaiman": "سليمان الحبيب", + "welcomeTo": "مرحبا بك في", + "userID": "معرف المستخدم", + "password": "كلمة المرور", + "branch": "فرع", + "pleaseEnterLoginDetails": "الرجاء إدخال التفاصيل أدناه لتسجيل الدخول", + "username": "اسم المستخدم", + "welcomeBack": "مرحبا بعودتك", + "wouldYouLikeToLoginWithCurrentUsername": "هل ترغب في تسجيل الدخول باسم المستخدم الحالي؟", + "lastLoginDetails": "تفاصيل تسجيل الدخول الأخير:", + "verificationType": "نوع التحقق:", + "pleaseVerify": "ارجوك تحقق", + "pleaseVerifyForBio": "الرجاء التحقق من تسجيل الدخول باستخدام أحد هذه الخيارات", + "verifyThroughFace": "تحقق من خلال الوجه", + "verifyThroughFingerprint": "تحقق من خلال بصمة الإصبع", + "verifyThroughSMS": "تحقق من خلال الرسائل القصيرة", + "verifyThroughWhatsapp": "تحقق من خلال Whatsapp", + "useAnotherAccount": "استخدم حسابا آخر", + "pleaseEnterTheVerificationCodeSentTo": "الرجاء إدخال رمز التحقق المرسل إلى ", + "theVerificationCodeWillExpireIn": "ستنتهي صلاحية رمز التحقق في ", + "goodMorning": "صباح الخير", + "markAttendance": "علامة الحضور", + "timeLeftToday": "الوقت المتبقي اليوم", + "checkIn": "تحقق في", + "workList": "قائمة العمل", + "doNotUseRecentPassword": "لا تستخدم كلمة مرور حديثة", + "atLeastOneLowercase": "حرف صغير واحد على الأقل", + "atLeastOneUppercase": "حرف كبير واحد على الأقل", + "atLeastOneNumeric": "رقم واحد على الأقل", + "minimum8Characters": "8 أحرف على الأقل", + "doNotAddRepeatingLetters": "لا تقم بإضافة أحرف متكررة", + "itShouldContainSpecialCharacter": "يجب أن يحتوي على طابع خاص", + "confirmPasswordMustMatch": "يجب أن يتطابق تأكيد كلمة المرور", + "sms": "رسالة قصيرة", + "fingerPrint": "بصمة", + "face": "التعرف على الوجه", + "whatsapp": "واتس اب", + "reject": "يرفض", + "approve": "يوافق", + "cancel": "إلغاء", + "otp": "OTP", + "verification": "تَحَقّق", + "resend": "إعادة إرسال", + "codeExpire": "انتهت صلاحية رمز التحقق", + "moreVerificationOpts": "المزيد من خيارات التحقق", + "select": "Select", + "days": "أيام", + "hr": "س", + "min": "د", + "years": "سنة", + "months": "أشهر" +}; +static const Map en_US = { + "mohemm": "Mohemm", + "english": "English", + "arabic": "عربي", + "login": "Login", + "drSulaiman": "Dr Sulaiman Al Habib", + "welcomeTo": "Welcome to", + "userID": "User ID", + "password": "Password", + "branch": "Branch", + "pleaseEnterLoginDetails": "Please enter the detail below to login", + "username": "Username", + "welcomeBack": "Welcome back", + "wouldYouLikeToLoginWithCurrentUsername": "Would you like to login with current Username?", + "lastLoginDetails": "Last Login Details:", + "verificationType": "Verification Type:", + "pleaseVerify": "Please Verify", + "pleaseVerifyForBio": "Please verify login with one of the following options", + "verifyThroughFace": "Verify Through Face", + "verifyThroughFingerprint": "Verify Through Fingerprint", + "verifyThroughSMS": "Verify Through SMS", + "verifyThroughWhatsapp": "Verify Through Whatsapp", + "useAnotherAccount": "Use Another Account", + "pleaseEnterTheVerificationCodeSentTo": "Please enter the verification code sent to ", + "theVerificationCodeWillExpireIn": "The verification code will expire in ", + "goodMorning": "Good Morning", + "markAttendance": "Mark Attendance", + "timeLeftToday": "Time Left Today", + "checkIn": "Check In", + "workList": "Work List", + "doNotUseRecentPassword": "Do not use recent password", + "atLeastOneLowercase": "At least one lowercase", + "atLeastOneUppercase": "At least one uppercase", + "atLeastOneNumeric": "At least one numeric", + "minimum8Characters": "Minimum 8 characters", + "doNotAddRepeatingLetters": "Do not add repeating letters", + "itShouldContainSpecialCharacter": "It should contain special character", + "confirmPasswordMustMatch": "Confirm password must match", + "sms": "SMS", + "fingerPrint": "Fingerprint", + "face": "Face", + "whatsapp": "Whatsapp", + "reject": "Reject", + "approve": "Approve", + "cancel": "Cancel", + "otp": "OTP", + "verification": "Verification", + "resend": "Resend", + "codeExpire": "The verification code has been expired", + "moreVerificationOpts": "More verification options", + "select": "Select", + "days": "Days", + "hr": "Hr", + "min": "Min", + "years": "Years", + "months": "Months" +}; +static const Map> mapLocales = {"ar_SA": ar_SA, "en_US": en_US}; +} diff --git a/lib/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart new file mode 100644 index 0000000..8522794 --- /dev/null +++ b/lib/generated/locale_keys.g.dart @@ -0,0 +1,61 @@ +// DO NOT EDIT. This is code generated via package:easy_localization/generate.dart + +abstract class LocaleKeys { + static const mohemm = 'mohemm'; + static const english = 'english'; + static const arabic = 'arabic'; + static const login = 'login'; + static const drSulaiman = 'drSulaiman'; + static const welcomeTo = 'welcomeTo'; + static const userID = 'userID'; + static const password = 'password'; + static const branch = 'branch'; + static const pleaseEnterLoginDetails = 'pleaseEnterLoginDetails'; + static const username = 'username'; + static const welcomeBack = 'welcomeBack'; + static const wouldYouLikeToLoginWithCurrentUsername = 'wouldYouLikeToLoginWithCurrentUsername'; + static const lastLoginDetails = 'lastLoginDetails'; + static const verificationType = 'verificationType'; + static const pleaseVerify = 'pleaseVerify'; + static const pleaseVerifyForBio = 'pleaseVerifyForBio'; + static const verifyThroughFace = 'verifyThroughFace'; + static const verifyThroughFingerprint = 'verifyThroughFingerprint'; + static const verifyThroughSMS = 'verifyThroughSMS'; + static const verifyThroughWhatsapp = 'verifyThroughWhatsapp'; + static const useAnotherAccount = 'useAnotherAccount'; + static const pleaseEnterTheVerificationCodeSentTo = 'pleaseEnterTheVerificationCodeSentTo'; + static const theVerificationCodeWillExpireIn = 'theVerificationCodeWillExpireIn'; + static const goodMorning = 'goodMorning'; + static const markAttendance = 'markAttendance'; + static const timeLeftToday = 'timeLeftToday'; + static const checkIn = 'checkIn'; + static const workList = 'workList'; + static const doNotUseRecentPassword = 'doNotUseRecentPassword'; + static const atLeastOneLowercase = 'atLeastOneLowercase'; + static const atLeastOneUppercase = 'atLeastOneUppercase'; + static const atLeastOneNumeric = 'atLeastOneNumeric'; + static const minimum8Characters = 'minimum8Characters'; + static const doNotAddRepeatingLetters = 'doNotAddRepeatingLetters'; + static const itShouldContainSpecialCharacter = 'itShouldContainSpecialCharacter'; + static const confirmPasswordMustMatch = 'confirmPasswordMustMatch'; + static const sms = 'sms'; + static const fingerPrint = 'fingerPrint'; + static const face = 'face'; + static const whatsapp = 'whatsapp'; + static const reject = 'reject'; + static const approve = 'approve'; + static const cancel = 'cancel'; + static const otp = 'otp'; + static const verification = 'verification'; + static const resend = 'resend'; + static const codeExpire = 'codeExpire'; + static const moreVerificationOpts = 'moreVerificationOpts'; + static const select = 'select'; + static const days = 'days'; + static const hr = 'hr'; + static const min = 'min'; + static const years = 'years'; + static const months = 'months'; + static const userOtherAccount = 'userOtherAccount'; + +} diff --git a/lib/main.dart b/lib/main.dart new file mode 100644 index 0000000..439be81 --- /dev/null +++ b/lib/main.dart @@ -0,0 +1,114 @@ +import 'dart:io'; + +import 'package:easy_localization/easy_localization.dart'; +import 'package:firebase_core/firebase_core.dart'; +import 'package:flutter/material.dart'; +import 'package:hmg_flutter_template/classes/size_config.dart'; +import 'package:hmg_flutter_template/config/app_state.dart'; +import 'package:hmg_flutter_template/config/dependencies.dart'; +import 'package:hmg_flutter_template/config/routes.dart'; +import 'package:hmg_flutter_template/provider/dashboard_provider_model.dart'; +import 'package:hmg_flutter_template/provider/login_provider_model.dart'; +import 'package:hmg_flutter_template/theme/app_theme.dart'; +import 'package:injector/injector.dart'; +import 'package:logger/logger.dart'; +import 'package:provider/provider.dart'; +import 'package:provider/single_child_widget.dart'; +import 'package:sizer/sizer.dart'; + +import 'generated/codegen_loader.g.dart'; + + +late AppState appState; + +final navigatorKey = GlobalKey(); + +Logger logger = Logger( + printer: PrettyPrinter( + lineLength: 0, + ), +); + +class MyHttpOverrides extends HttpOverrides { + @override + HttpClient createHttpClient(SecurityContext? context) { + return super.createHttpClient(context)..badCertificateCallback = (X509Certificate cert, String host, int port) => true; + } +} + +Future main() async { + WidgetsFlutterBinding.ensureInitialized(); + await EasyLocalization.ensureInitialized(); + // AppState().setPostParamsInitConfig(); + HttpOverrides.global = MyHttpOverrides(); + await Firebase.initializeApp(); + runApp( + EasyLocalization( + supportedLocales: const [ + Locale('en', 'US'), + Locale('ar', 'SA'), + ], + path: 'assets/langs', + assetLoader: const CodegenLoader(), + child: MultiProvider( + providers: [ + ChangeNotifierProvider( + create: (_) => DashboardProviderModel(), + ), + ChangeNotifierProvider( + create: (_) => LoginProviderModel(), + ), + ChangeNotifierProvider( + create: (_) => DashboardProviderModel(), + ), + ], + child: MyApp(), + ), + ), + ); +} + +// todo terminal command to generate translation files +// flutter pub run easy_localization:generate --source-dir ./assets/langs +// todo terminal command to generate translation keys +// flutter pub run easy_localization:generate --source-dir ./assets/langs -f keys -o locale_keys.g.dart +// command to generate languages data from json + +class MyApp extends StatelessWidget { + MyApp({super.key}) { + AppDependencies.addDependencies(); + appState = Injector.appInstance.get(); + appState.setPostParamsInitConfig(); + } + + @override + Widget build(BuildContext context) { + return LayoutBuilder(builder: (context, constraints) { + return Sizer( + builder: ( + BuildContext context, + Orientation orientation, + DeviceType deviceType, + ) { + SizeConfig().init(constraints, orientation); + List> delegates = context.localizationDelegates; + return MaterialApp( + // key: navigatorKey, + navigatorKey: navigatorKey, + theme: AppTheme.getTheme( + EasyLocalization.of(context)?.locale.languageCode == "ar", + ), + debugShowCheckedModeBanner: false, + localizationsDelegates: delegates, + supportedLocales: context.supportedLocales, + locale: context.locale, + initialRoute: AppRoutes.initialPage, + routes: AppRoutes.routes, + ); + }, + ); + }); + } +} + + diff --git a/lib/model/base/generic_response_model.dart b/lib/model/base/generic_response_model.dart new file mode 100644 index 0000000..849d0b0 --- /dev/null +++ b/lib/model/base/generic_response_model.dart @@ -0,0 +1,750 @@ +// To parse this JSON data, do +// +// final genericResponseModel = genericResponseModelFromJson(jsonString); + +import 'dart:convert'; + +import 'package:hmg_flutter_template/model/login/imei_details_model.dart'; +import 'package:hmg_flutter_template/model/login/list_doctors_clinic_model.dart'; +import 'package:hmg_flutter_template/model/login/member_information_model.dart'; + + +import '../login/project_info_model.dart'; + +GenericResponseModel genericResponseModelFromJson(String str) => GenericResponseModel.fromJson(json.decode(str)); + +String genericResponseModelToJson(GenericResponseModel data) => json.encode(data.toJson()); + +class GenericResponseModel { + GenericResponseModel({ + this.date, + this.languageId, + this.serviceName, + this.time, + this.androidLink, + this.authenticationTokenId, + this.data, + this.dataw, + this.dietType, + this.dietTypeId, + this.errorCode, + this.errorEndUserMessage, + this.errorEndUserMessageN, + this.errorMessage, + this.errorType, + this.foodCategory, + this.iosLink, + this.isAuthenticated, + this.mealOrderStatus, + this.mealType, + this.messageStatus, + this.numberOfResultRecords, + this.patientBlodType, + this.successMsg, + this.successMsgN, + this.vidaUpdatedResponse, + this.admissionDiagnosisList, + this.admissionMasterList, + this.admissionProcedureList, + this.admissionRequestList, + this.appointmentDate, + this.appointmentId, + this.assessmentList, + this.boxQuantity, + this.chkStatusUpdated, + this.chiefComplaintAuditLogList, + this.clinicId, + this.created, + this.dietTypeList, + this.doctorDetails, + this.doctorHaveOneClinic, + this.doctorId, + this.doctorNotRepliedCounts, + this.doctorSesId, + this.doctorTokId, + this.drugToDrugResponse, + this.erlcInsertPatientInHisgenxList, + this.erlcIsInserted, + this.erlcRequestList, + this.endTime, + this.episodeId, + this.getErAppointmentFeesList, + this.getEpisodeNo, + this.getPatientErSessionStatusList, + this.getVcStatusBySessionIdList, + this.hasAppointment, + this.hasVirtualClinic, + this.httpStatusCode, + this.icdCodesList, + this.isAccepted, + this.isChangePassword, + this.isLogout, + this.isPatientErRequestVcSessionAndTokenUpdated, + this.isPatientSessionStatusInserted, + this.isPatientSessionStatusUpdated, + this.isSent, + this.labResultType, + this.listSickLeavesToExtent, + this.listAdmissionOrders, + this.listAllergies, + this.listApprovalMainInPatient, + this.listChiefComplaint, + this.listClinicAll, + this.listDiabeticChartValues, + this.listDiagnosisForInPatient, + this.listDischargeSummary, + this.listDoctorDeviceDetails, + this.listDoctorProfile, + this.listDoctorProgressNote, + this.listDoctorsClinic, + this.listDoctorsAll, + this.listDrugToDrugTherapy, + this.listGetLabNormal, + this.listGetLabOreders, + this.listGetLabSpecial, + this.listGetMedicationForInpatient, + this.listGetPatientVitalSign, + this.listGetPregressNoteForInPatient, + this.listGetRadOreders, + this.listGtMyPatientsQuestions, + this.listHistory, + this.listIcdCodes, + this.listInterventionHistory, + this.listInterventionMedications, + this.listMyDischargePatient, + this.listMyDischargeReferralPatient, + this.listMyDischargeReferredPatient, + this.listMyInPatient, + this.listMyOutPatient, + this.listMyOutPatientReferral, + this.listMyReferralPatient, + this.listMyReferredOutPatient, + this.listMyReferredPatient, + this.listMyTomorrowPatient, + this.listNursingProgressNote, + this.listOtReservationDetails, + this.listOperationDetails, + this.listPendingDischargeSummary, + this.listPendingOrders, + this.listPendingPatientAdminList, + this.listPendingPatientList, + this.listPrescriptionAuditLogInfo, + this.listPrescriptionReportByPatientId, + this.listPrescriptionReportForInPatient, + this.listRxAuditLogInfo, + this.listStpMasterList, + this.listSpecialClinicalCareList, + this.listSpecialClinicalCareMappingList, + this.logInTokenId, + this.masterLookUpList, + this.medicationList, + this.memberId, + this.orderedProcedureList, + this.patientDetails, + this.patientFileList, + this.patientInfoList, + this.patientInforBySearchCriteriaHisgenxList, + this.patientInforBySearchCriteriaList, + this.patientOutSa, + this.patientsFileInfoList, + this.pendingReferralList, + this.physicalExamAuditLogList, + this.physicalExamList, + this.prescriptionList, + this.procedureList, + this.progressNoteList, + this.progressNotesAuditLogList, + this.projectId, + this.projectInfo, + this.referralList, + this.requestCompleted, + this.requisitionResponse, + this.returnValue, + this.rowCount, + this.smsCode, + this.searchAdmissionList, + this.searchCriteriaKindList, + this.sickLeaveStatistics, + this.sickLeavesList, + this.sserviceId, + this.startTime, + this.statusMessage, + this.strAppointmentDate, + this.totalUnUsedCount, + this.ucafResponse, + this.validateProcedureList, + this.validationErrors, + this.verificationCode, + this.vidaAuthTokenId, + this.vidaRefreshTokenId, + this.vitalSignsHistory, + this.vitalSignsList, + this.admissionResponse, + this.coveringDoctorList, + this.isActiveCode, + this.isSmsSent, + this.listCategories, + this.listClinics, + this.listDoctorDashboarKpi, + this.listItemByMedicineCode, + this.listKeywords, + this.listProcedureCategories, + this.listProcedureResult, + this.memberInformation, + this.patientArrivalList, + this.requisitionList, + this.requisitionScheduleList, + this.requisitionStatusList, + this.resultValue, + this.specialAuthenticate, + + }); + + final dynamic date; + final int? languageId; + final int? serviceName; + final dynamic time; + final dynamic androidLink; + final dynamic authenticationTokenId; + final dynamic data; + final bool? dataw; + final int? dietType; + final int? dietTypeId; + final dynamic errorCode; + final dynamic errorEndUserMessage; + final dynamic errorEndUserMessageN; + final dynamic errorMessage; + final int? errorType; + final int? foodCategory; + final dynamic iosLink; + final bool? isAuthenticated; + final int? mealOrderStatus; + final int? mealType; + final int? messageStatus; + final int? numberOfResultRecords; + final dynamic patientBlodType; + final dynamic successMsg; + final dynamic successMsgN; + final dynamic vidaUpdatedResponse; + final dynamic admissionDiagnosisList; + final dynamic admissionMasterList; + final dynamic admissionProcedureList; + final dynamic admissionRequestList; + final dynamic appointmentDate; + final dynamic appointmentId; + final dynamic assessmentList; + final int? boxQuantity; + final int? chkStatusUpdated; + final dynamic chiefComplaintAuditLogList; + final int? clinicId; + final bool? created; + final dynamic dietTypeList; + final dynamic doctorDetails; + final bool? doctorHaveOneClinic; + final int? doctorId; + final int? doctorNotRepliedCounts; + final dynamic doctorSesId; + final dynamic doctorTokId; + final dynamic drugToDrugResponse; + final dynamic erlcInsertPatientInHisgenxList; + final int? erlcIsInserted; + final dynamic erlcRequestList; + final dynamic endTime; + final int? episodeId; + final dynamic getErAppointmentFeesList; + final int? getEpisodeNo; + final dynamic getPatientErSessionStatusList; + final dynamic getVcStatusBySessionIdList; + final bool? hasAppointment; + final dynamic hasVirtualClinic; + final dynamic httpStatusCode; + final dynamic icdCodesList; + final bool? isAccepted; + final bool? isChangePassword; + final bool? isLogout; + final bool? isPatientErRequestVcSessionAndTokenUpdated; + final bool? isPatientSessionStatusInserted; + final bool? isPatientSessionStatusUpdated; + final bool? isSent; + final int? labResultType; + final dynamic listSickLeavesToExtent; + final dynamic listAdmissionOrders; + final dynamic listAllergies; + final dynamic listApprovalMainInPatient; + final dynamic listChiefComplaint; + final dynamic listClinicAll; + final dynamic listDiabeticChartValues; + final dynamic listDiagnosisForInPatient; + final dynamic listDischargeSummary; + final List? listDoctorDeviceDetails; + final dynamic listDoctorProfile; + final dynamic listDoctorProgressNote; + final List? listDoctorsClinic; + final dynamic listDoctorsAll; + final dynamic listDrugToDrugTherapy; + final dynamic listGetLabNormal; + final dynamic listGetLabOreders; + final dynamic listGetLabSpecial; + final dynamic listGetMedicationForInpatient; + final dynamic listGetPatientVitalSign; + final dynamic listGetPregressNoteForInPatient; + final dynamic listGetRadOreders; + final dynamic listGtMyPatientsQuestions; + final dynamic listHistory; + final dynamic listIcdCodes; + final dynamic listInterventionHistory; + final dynamic listInterventionMedications; + final dynamic listMyDischargePatient; + final dynamic listMyDischargeReferralPatient; + final dynamic listMyDischargeReferredPatient; + final dynamic listMyInPatient; + final dynamic listMyOutPatient; + final dynamic listMyOutPatientReferral; + final dynamic listMyReferralPatient; + final dynamic listMyReferredOutPatient; + final dynamic listMyReferredPatient; + final dynamic listMyTomorrowPatient; + final dynamic listNursingProgressNote; + final dynamic listOtReservationDetails; + final dynamic listOperationDetails; + final dynamic listPendingDischargeSummary; + final dynamic listPendingOrders; + final dynamic listPendingPatientAdminList; + final dynamic listPendingPatientList; + final dynamic listPrescriptionAuditLogInfo; + final dynamic listPrescriptionReportByPatientId; + final dynamic listPrescriptionReportForInPatient; + final dynamic listRxAuditLogInfo; + final dynamic listStpMasterList; + final dynamic listSpecialClinicalCareList; + final dynamic listSpecialClinicalCareMappingList; + final dynamic logInTokenId; + final dynamic masterLookUpList; + final dynamic medicationList; + final int? memberId; + final dynamic orderedProcedureList; + final dynamic patientDetails; + final dynamic patientFileList; + final dynamic patientInfoList; + final dynamic patientInforBySearchCriteriaHisgenxList; + final dynamic patientInforBySearchCriteriaList; + final bool? patientOutSa; + final dynamic patientsFileInfoList; + final dynamic pendingReferralList; + final dynamic physicalExamAuditLogList; + final dynamic physicalExamList; + final dynamic prescriptionList; + final dynamic procedureList; + final dynamic progressNoteList; + final dynamic progressNotesAuditLogList; + final int? projectId; + final List? projectInfo; + final dynamic referralList; + final bool? requestCompleted; + final dynamic requisitionResponse; + final int? returnValue; + final int? rowCount; + final dynamic smsCode; + final dynamic searchAdmissionList; + final dynamic searchCriteriaKindList; + final dynamic sickLeaveStatistics; + final dynamic sickLeavesList; + final dynamic sserviceId; + final dynamic startTime; + final dynamic statusMessage; + final dynamic strAppointmentDate; + final int? totalUnUsedCount; + final dynamic ucafResponse; + final dynamic validateProcedureList; + final dynamic validationErrors; + final dynamic verificationCode; + final dynamic vidaAuthTokenId; + final dynamic vidaRefreshTokenId; + final dynamic vitalSignsHistory; + final dynamic vitalSignsList; + final dynamic admissionResponse; + final dynamic coveringDoctorList; + final bool? isActiveCode; + final bool? isSmsSent; + final dynamic listCategories; + final dynamic listClinics; + final dynamic listDoctorDashboarKpi; + final dynamic listItemByMedicineCode; + final dynamic listKeywords; + final dynamic listProcedureCategories; + final dynamic listProcedureResult; + final MemberInformation? memberInformation; + final dynamic patientArrivalList; + final dynamic requisitionList; + final dynamic requisitionScheduleList; + final dynamic requisitionStatusList; + final int? resultValue; + final bool? specialAuthenticate; + + + factory GenericResponseModel.fromJson(Map json) => GenericResponseModel( + date: json["Date"], + languageId: json["LanguageID"] == null ? null : json["LanguageID"], + serviceName: json["ServiceName"] == null ? null : json["ServiceName"], + time: json["Time"], + androidLink: json["AndroidLink"], + authenticationTokenId: json["AuthenticationTokenID"], + data: json["Data"], + dataw: json["Dataw"] == null ? null : json["Dataw"], + dietType: json["DietType"] == null ? null : json["DietType"], + dietTypeId: json["DietTypeID"] == null ? null : json["DietTypeID"], + errorCode: json["ErrorCode"], + errorEndUserMessage: json["ErrorEndUserMessage"], + errorEndUserMessageN: json["ErrorEndUserMessageN"], + errorMessage: json["ErrorMessage"], + errorType: json["ErrorType"] == null ? null : json["ErrorType"], + foodCategory: json["FoodCategory"] == null ? null : json["FoodCategory"], + iosLink: json["IOSLink"], + isAuthenticated: json["IsAuthenticated"] == null ? null : json["IsAuthenticated"], + mealOrderStatus: json["MealOrderStatus"] == null ? null : json["MealOrderStatus"], + mealType: json["MealType"] == null ? null : json["MealType"], + messageStatus: json["MessageStatus"] == null ? null : json["MessageStatus"], + numberOfResultRecords: json["NumberOfResultRecords"] == null ? null : json["NumberOfResultRecords"], + patientBlodType: json["PatientBlodType"], + successMsg: json["SuccessMsg"], + successMsgN: json["SuccessMsgN"], + vidaUpdatedResponse: json["VidaUpdatedResponse"], + admissionDiagnosisList: json["AdmissionDiagnosisList"], + admissionMasterList: json["AdmissionMasterList"], + admissionProcedureList: json["AdmissionProcedureList"], + admissionRequestList: json["AdmissionRequestList"], + appointmentDate: json["AppointmentDate"], + appointmentId: json["AppointmentID"], + assessmentList: json["AssessmentList"], + boxQuantity: json["BoxQuantity"] == null ? null : json["BoxQuantity"], + chkStatusUpdated: json["CHK_StatusUpdated"] == null ? null : json["CHK_StatusUpdated"], + chiefComplaintAuditLogList: json["ChiefComplaintAuditLogList"], + clinicId: json["ClinicID"] == null ? null : json["ClinicID"], + created: json["Created"] == null ? null : json["Created"], + dietTypeList: json["DietTypeList"], + doctorDetails: json["DoctorDetails"], + doctorHaveOneClinic: json["DoctorHaveOneClinic"] == null ? null : json["DoctorHaveOneClinic"], + doctorId: json["DoctorID"] == null ? null : json["DoctorID"], + doctorNotRepliedCounts: json["DoctorNotRepliedCounts"] == null ? null : json["DoctorNotRepliedCounts"], + doctorSesId: json["DoctorSesID"], + doctorTokId: json["DoctorTokID"], + drugToDrugResponse: json["DrugToDrugResponse"], + erlcInsertPatientInHisgenxList: json["ERLC_InsertPatientInHISGENXList"], + erlcIsInserted: json["ERLC_IsInserted"] == null ? null : json["ERLC_IsInserted"], + erlcRequestList: json["ERLC_RequestList"], + endTime: json["EndTime"], + episodeId: json["EpisodeID"] == null ? null : json["EpisodeID"], + getErAppointmentFeesList: json["GetERAppointmentFeesList"], + getEpisodeNo: json["GetEpisodeNo"] == null ? null : json["GetEpisodeNo"], + getPatientErSessionStatusList: json["GetPatientERSessionStatusList"], + getVcStatusBySessionIdList: json["GetVCStatusBySessionIDList"], + hasAppointment: json["HasAppointment"] == null ? null : json["HasAppointment"], + hasVirtualClinic: json["HasVirtualClinic"], + httpStatusCode: json["HttpStatusCode"], + icdCodesList: json["ICDCodesList"], + isAccepted: json["IsAccepted"] == null ? null : json["IsAccepted"], + isChangePassword: json["IsChangePassword"] == null ? null : json["IsChangePassword"], + isLogout: json["IsLogout"] == null ? null : json["IsLogout"], + isPatientErRequestVcSessionAndTokenUpdated: json["IsPatientERRequestVCSessionAndTokenUpdated"] == null ? null : json["IsPatientERRequestVCSessionAndTokenUpdated"], + isPatientSessionStatusInserted: json["IsPatientSessionStatusInserted"] == null ? null : json["IsPatientSessionStatusInserted"], + isPatientSessionStatusUpdated: json["IsPatientSessionStatusUpdated"] == null ? null : json["IsPatientSessionStatusUpdated"], + isSent: json["IsSent"] == null ? null : json["IsSent"], + labResultType: json["LabResultType"] == null ? null : json["LabResultType"], + listSickLeavesToExtent: json["ListSickLeavesToExtent"], + listAdmissionOrders: json["List_AdmissionOrders"], + listAllergies: json["List_Allergies"], + listApprovalMainInPatient: json["List_ApprovalMain_InPatient"], + listChiefComplaint: json["List_ChiefComplaint"], + listClinicAll: json["List_Clinic_All"], + listDiabeticChartValues: json["List_DiabeticChartValues"], + listDiagnosisForInPatient: json["List_DiagnosisForInPatient"], + listDischargeSummary: json["List_DischargeSummary"], + listDoctorDeviceDetails: json["List_DoctorDeviceDetails"] == null ? null : List.from(json["List_DoctorDeviceDetails"].map((x) => GetIMEIDetailsModel.fromJson(x))), + listDoctorProfile: json["List_DoctorProfile"], + listDoctorProgressNote: json["List_DoctorProgressNote"], + listDoctorsClinic: json["List_DoctorsClinic"] == null ? null : List.from(json["List_DoctorsClinic"].map((x) => ListDoctorsClinicModel.fromJson(x))), + listDoctorsAll: json["List_Doctors_All"], + listDrugToDrugTherapy: json["List_DrugToDrugTherapy"], + listGetLabNormal: json["List_GetLabNormal"], + listGetLabOreders: json["List_GetLabOreders"], + listGetLabSpecial: json["List_GetLabSpecial"], + listGetMedicationForInpatient: json["List_GetMedicationForInpatient"], + listGetPatientVitalSign: json["List_GetPatientVitalSign"], + listGetPregressNoteForInPatient: json["List_GetPregressNoteForInPatient"], + listGetRadOreders: json["List_GetRadOreders"], + listGtMyPatientsQuestions: json["List_GtMyPatientsQuestions"], + listHistory: json["List_History"], + listIcdCodes: json["List_ICDCodes"], + listInterventionHistory: json["List_InterventionHistory"], + listInterventionMedications: json["List_InterventionMedications"], + listMyDischargePatient: json["List_MyDischargePatient"], + listMyDischargeReferralPatient: json["List_MyDischargeReferralPatient"], + listMyDischargeReferredPatient: json["List_MyDischargeReferredPatient"], + listMyInPatient: json["List_MyInPatient"], + listMyOutPatient: json["List_MyOutPatient"], + listMyOutPatientReferral: json["List_MyOutPatientReferral"], + listMyReferralPatient: json["List_MyReferralPatient"], + listMyReferredOutPatient: json["List_MyReferredOutPatient"], + listMyReferredPatient: json["List_MyReferredPatient"], + listMyTomorrowPatient: json["List_MyTomorrowPatient"], + listNursingProgressNote: json["List_NursingProgressNote"], + listOtReservationDetails: json["List_OTReservationDetails"], + listOperationDetails: json["List_OperationDetails"], + listPendingDischargeSummary: json["List_PendingDischargeSummary"], + listPendingOrders: json["List_PendingOrders"], + listPendingPatientAdminList: json["List_PendingPatientAdminList"], + listPendingPatientList: json["List_PendingPatientList"], + listPrescriptionAuditLogInfo: json["List_PrescriptionAuditLogInfo"], + listPrescriptionReportByPatientId: json["List_PrescriptionReportByPatientID"], + listPrescriptionReportForInPatient: json["List_PrescriptionReportForInPatient"], + listRxAuditLogInfo: json["List_RxAuditLogInfo"], + listStpMasterList: json["List_STPMasterList"], + listSpecialClinicalCareList: json["List_SpecialClinicalCareList"], + listSpecialClinicalCareMappingList: json["List_SpecialClinicalCareMappingList"], + logInTokenId: json["LogInTokenID"], + masterLookUpList: json["MasterLookUpList"], + medicationList: json["MedicationList"], + memberId: json["MemberID"] == null ? null : json["MemberID"], + orderedProcedureList: json["OrderedProcedureList"], + patientDetails: json["PatientDetails"], + patientFileList: json["PatientFileList"], + patientInfoList: json["PatientInfo_List"], + patientInforBySearchCriteriaHisgenxList: json["PatientInforBySearchCriteriaHISGENX_List"], + patientInforBySearchCriteriaList: json["PatientInforBySearchCriteria_List"], + patientOutSa: json["PatientOutSA"] == null ? null : json["PatientOutSA"], + patientsFileInfoList: json["PatientsFileInfo_List"], + pendingReferralList: json["PendingReferralList"], + physicalExamAuditLogList: json["PhysicalExamAuditLogList"], + physicalExamList: json["PhysicalExamList"], + prescriptionList: json["PrescriptionList"], + procedureList: json["ProcedureList"], + progressNoteList: json["ProgressNoteList"], + progressNotesAuditLogList: json["ProgressNotesAuditLogList"], + projectId: json["ProjectID"] == null ? null : json["ProjectID"], + projectInfo: json["ProjectInfo"] == null ? null : List.from(json["ProjectInfo"].map((x) => ProjectInfoModel.fromJson(x))), + referralList: json["ReferralList"], + requestCompleted: json["RequestCompleted"] == null ? null : json["RequestCompleted"], + requisitionResponse: json["RequisitionResponse"], + returnValue: json["ReturnValue"] == null ? null : json["ReturnValue"], + rowCount: json["RowCount"] == null ? null : json["RowCount"], + smsCode: json["SMSCode"], + searchAdmissionList: json["SearchAdmissionList"], + searchCriteriaKindList: json["SearchCriteriaKindList"], + sickLeaveStatistics: json["SickLeaveStatistics"], + sickLeavesList: json["SickLeavesList"], + sserviceId: json["SserviceID"], + startTime: json["StartTime"], + statusMessage: json["StatusMessage"], + strAppointmentDate: json["StrAppointmentDate"], + totalUnUsedCount: json["TotalUnUsedCount"] == null ? null : json["TotalUnUsedCount"], + ucafResponse: json["UcafResponse"], + validateProcedureList: json["ValidateProcedureList"], + validationErrors: json["ValidationErrors"], + verificationCode: json["VerificationCode"], + vidaAuthTokenId: json["VidaAuthTokenID"], + vidaRefreshTokenId: json["VidaRefreshTokenID"], + vitalSignsHistory: json["VitalSignsHistory"], + vitalSignsList: json["VitalSignsList"], + admissionResponse: json["admissionResponse"], + coveringDoctorList: json["coveringDoctorList"], + isActiveCode: json["isActiveCode"] == null ? null : json["isActiveCode"], + isSmsSent: json["isSMSSent"] == null ? null : json["isSMSSent"], + listCategories: json["listCategories"], + listClinics: json["listClinics"], + listDoctorDashboarKpi: json["listDoctorDashboarKPI"], + listItemByMedicineCode: json["listItemByMedicineCode"], + listKeywords: json["listKeywords"], + listProcedureCategories: json["listProcedureCategories"], + listProcedureResult: json["listProcedureResult"], + memberInformation: json["memberInformation"] == null ? null : MemberInformation.fromJson(json["memberInformation"]), + patientArrivalList: json["patientArrivalList"], + requisitionList: json["requisitionList"], + requisitionScheduleList: json["requisitionScheduleList"], + requisitionStatusList: json["requisitionStatusList"], + resultValue: json["resultValue"] == null ? null : json["resultValue"], + specialAuthenticate: json["specialAuthenticate"] == null ? null : json["specialAuthenticate"], + ); + + Map toJson() => { + "Date": date, + "LanguageID": languageId == null ? null : languageId, + "ServiceName": serviceName == null ? null : serviceName, + "Time": time, + "AndroidLink": androidLink, + "AuthenticationTokenID": authenticationTokenId, + "Data": data, + "Dataw": dataw == null ? null : dataw, + "DietType": dietType == null ? null : dietType, + "DietTypeID": dietTypeId == null ? null : dietTypeId, + "ErrorCode": errorCode, + "ErrorEndUserMessage": errorEndUserMessage, + "ErrorEndUserMessageN": errorEndUserMessageN, + "ErrorMessage": errorMessage, + "ErrorType": errorType == null ? null : errorType, + "FoodCategory": foodCategory == null ? null : foodCategory, + "IOSLink": iosLink, + "IsAuthenticated": isAuthenticated == null ? null : isAuthenticated, + "MealOrderStatus": mealOrderStatus == null ? null : mealOrderStatus, + "MealType": mealType == null ? null : mealType, + "MessageStatus": messageStatus == null ? null : messageStatus, + "NumberOfResultRecords": numberOfResultRecords == null ? null : numberOfResultRecords, + "PatientBlodType": patientBlodType, + "SuccessMsg": successMsg, + "SuccessMsgN": successMsgN, + "VidaUpdatedResponse": vidaUpdatedResponse, + "AdmissionDiagnosisList": admissionDiagnosisList, + "AdmissionMasterList": admissionMasterList, + "AdmissionProcedureList": admissionProcedureList, + "AdmissionRequestList": admissionRequestList, + "AppointmentDate": appointmentDate, + "AppointmentID": appointmentId, + "AssessmentList": assessmentList, + "BoxQuantity": boxQuantity == null ? null : boxQuantity, + "CHK_StatusUpdated": chkStatusUpdated == null ? null : chkStatusUpdated, + "ChiefComplaintAuditLogList": chiefComplaintAuditLogList, + "ClinicID": clinicId == null ? null : clinicId, + "Created": created == null ? null : created, + "DietTypeList": dietTypeList, + "DoctorDetails": doctorDetails, + "DoctorHaveOneClinic": doctorHaveOneClinic == null ? null : doctorHaveOneClinic, + "DoctorID": doctorId == null ? null : doctorId, + "DoctorNotRepliedCounts": doctorNotRepliedCounts == null ? null : doctorNotRepliedCounts, + "DoctorSesID": doctorSesId, + "DoctorTokID": doctorTokId, + "DrugToDrugResponse": drugToDrugResponse, + "ERLC_InsertPatientInHISGENXList": erlcInsertPatientInHisgenxList, + "ERLC_IsInserted": erlcIsInserted == null ? null : erlcIsInserted, + "ERLC_RequestList": erlcRequestList, + "EndTime": endTime, + "EpisodeID": episodeId == null ? null : episodeId, + "GetERAppointmentFeesList": getErAppointmentFeesList, + "GetEpisodeNo": getEpisodeNo == null ? null : getEpisodeNo, + "GetPatientERSessionStatusList": getPatientErSessionStatusList, + "GetVCStatusBySessionIDList": getVcStatusBySessionIdList, + "HasAppointment": hasAppointment == null ? null : hasAppointment, + "HasVirtualClinic": hasVirtualClinic, + "HttpStatusCode": httpStatusCode, + "ICDCodesList": icdCodesList, + "IsAccepted": isAccepted == null ? null : isAccepted, + "IsChangePassword": isChangePassword == null ? null : isChangePassword, + "IsLogout": isLogout == null ? null : isLogout, + "IsPatientERRequestVCSessionAndTokenUpdated": isPatientErRequestVcSessionAndTokenUpdated == null ? null : isPatientErRequestVcSessionAndTokenUpdated, + "IsPatientSessionStatusInserted": isPatientSessionStatusInserted == null ? null : isPatientSessionStatusInserted, + "IsPatientSessionStatusUpdated": isPatientSessionStatusUpdated == null ? null : isPatientSessionStatusUpdated, + "IsSent": isSent == null ? null : isSent, + "LabResultType": labResultType == null ? null : labResultType, + "ListSickLeavesToExtent": listSickLeavesToExtent, + "List_AdmissionOrders": listAdmissionOrders, + "List_Allergies": listAllergies, + "List_ApprovalMain_InPatient": listApprovalMainInPatient, + "List_ChiefComplaint": listChiefComplaint, + "List_Clinic_All": listClinicAll, + "List_DiabeticChartValues": listDiabeticChartValues, + "List_DiagnosisForInPatient": listDiagnosisForInPatient, + "List_DischargeSummary": listDischargeSummary, + "List_DoctorDeviceDetails": listDoctorDeviceDetails == null ? null : List.from(listDoctorDeviceDetails!.map((x) => x)), + "List_DoctorProfile": listDoctorProfile, + "List_DoctorProgressNote": listDoctorProgressNote, + "List_DoctorsClinic": listDoctorsClinic == null ? null : List.from(listDoctorsClinic!.map((x) => x.toJson())), + "List_Doctors_All": listDoctorsAll, + "List_DrugToDrugTherapy": listDrugToDrugTherapy, + "List_GetLabNormal": listGetLabNormal, + "List_GetLabOreders": listGetLabOreders, + "List_GetLabSpecial": listGetLabSpecial, + "List_GetMedicationForInpatient": listGetMedicationForInpatient, + "List_GetPatientVitalSign": listGetPatientVitalSign, + "List_GetPregressNoteForInPatient": listGetPregressNoteForInPatient, + "List_GetRadOreders": listGetRadOreders, + "List_GtMyPatientsQuestions": listGtMyPatientsQuestions, + "List_History": listHistory, + "List_ICDCodes": listIcdCodes, + "List_InterventionHistory": listInterventionHistory, + "List_InterventionMedications": listInterventionMedications, + "List_MyDischargePatient": listMyDischargePatient, + "List_MyDischargeReferralPatient": listMyDischargeReferralPatient, + "List_MyDischargeReferredPatient": listMyDischargeReferredPatient, + "List_MyInPatient": listMyInPatient, + "List_MyOutPatient": listMyOutPatient, + "List_MyOutPatientReferral": listMyOutPatientReferral, + "List_MyReferralPatient": listMyReferralPatient, + "List_MyReferredOutPatient": listMyReferredOutPatient, + "List_MyReferredPatient": listMyReferredPatient, + "List_MyTomorrowPatient": listMyTomorrowPatient, + "List_NursingProgressNote": listNursingProgressNote, + "List_OTReservationDetails": listOtReservationDetails, + "List_OperationDetails": listOperationDetails, + "List_PendingDischargeSummary": listPendingDischargeSummary, + "List_PendingOrders": listPendingOrders, + "List_PendingPatientAdminList": listPendingPatientAdminList, + "List_PendingPatientList": listPendingPatientList, + "List_PrescriptionAuditLogInfo": listPrescriptionAuditLogInfo, + "List_PrescriptionReportByPatientID": listPrescriptionReportByPatientId, + "List_PrescriptionReportForInPatient": listPrescriptionReportForInPatient, + "List_RxAuditLogInfo": listRxAuditLogInfo, + "List_STPMasterList": listStpMasterList, + "List_SpecialClinicalCareList": listSpecialClinicalCareList, + "List_SpecialClinicalCareMappingList": listSpecialClinicalCareMappingList, + "LogInTokenID": logInTokenId, + "MasterLookUpList": masterLookUpList, + "MedicationList": medicationList, + "MemberID": memberId == null ? null : memberId, + "OrderedProcedureList": orderedProcedureList, + "PatientDetails": patientDetails, + "PatientFileList": patientFileList, + "PatientInfo_List": patientInfoList, + "PatientInforBySearchCriteriaHISGENX_List": patientInforBySearchCriteriaHisgenxList, + "PatientInforBySearchCriteria_List": patientInforBySearchCriteriaList, + "PatientOutSA": patientOutSa == null ? null : patientOutSa, + "PatientsFileInfo_List": patientsFileInfoList, + "PendingReferralList": pendingReferralList, + "PhysicalExamAuditLogList": physicalExamAuditLogList, + "PhysicalExamList": physicalExamList, + "PrescriptionList": prescriptionList, + "ProcedureList": procedureList, + "ProgressNoteList": progressNoteList, + "ProgressNotesAuditLogList": progressNotesAuditLogList, + "ProjectID": projectId == null ? null : projectId, + "ProjectInfo": projectInfo, + "ReferralList": referralList, + "RequestCompleted": requestCompleted == null ? null : requestCompleted, + "RequisitionResponse": requisitionResponse, + "ReturnValue": returnValue == null ? null : returnValue, + "RowCount": rowCount == null ? null : rowCount, + "SMSCode": smsCode, + "SearchAdmissionList": searchAdmissionList, + "SearchCriteriaKindList": searchCriteriaKindList, + "SickLeaveStatistics": sickLeaveStatistics, + "SickLeavesList": sickLeavesList, + "SserviceID": sserviceId, + "StartTime": startTime, + "StatusMessage": statusMessage, + "StrAppointmentDate": strAppointmentDate, + "TotalUnUsedCount": totalUnUsedCount == null ? null : totalUnUsedCount, + "UcafResponse": ucafResponse, + "ValidateProcedureList": validateProcedureList, + "ValidationErrors": validationErrors, + "VerificationCode": verificationCode, + "VidaAuthTokenID": vidaAuthTokenId, + "VidaRefreshTokenID": vidaRefreshTokenId, + "VitalSignsHistory": vitalSignsHistory, + "VitalSignsList": vitalSignsList, + "admissionResponse": admissionResponse, + "coveringDoctorList": coveringDoctorList, + "isActiveCode": isActiveCode == null ? null : isActiveCode, + "isSMSSent": isSmsSent == null ? null : isSmsSent, + "listCategories": listCategories, + "listClinics": listClinics, + "listDoctorDashboarKPI": listDoctorDashboarKpi, + "listItemByMedicineCode": listItemByMedicineCode, + "listKeywords": listKeywords, + "listProcedureCategories": listProcedureCategories, + "listProcedureResult": listProcedureResult, + "memberInformation": memberInformation == null ? null : memberInformation!.toJson(), + "patientArrivalList": patientArrivalList, + "requisitionList": requisitionList, + "requisitionScheduleList": requisitionScheduleList, + "requisitionStatusList": requisitionStatusList, + "resultValue": resultValue == null ? null : resultValue, + "specialAuthenticate": specialAuthenticate == null ? null : specialAuthenticate, + }; +} diff --git a/lib/model/base/generic_response_model2.dart b/lib/model/base/generic_response_model2.dart new file mode 100644 index 0000000..b4dbc4b --- /dev/null +++ b/lib/model/base/generic_response_model2.dart @@ -0,0 +1,911 @@ +// To parse this JSON data, do +// +// final genericResponseModel2 = genericResponseModel2FromJson(jsonString); + +import 'dart:convert'; + +import 'package:hmg_flutter_template/model/login/doctor_profile_model.dart'; + +GenericResponseModel2 genericResponseModel2FromJson(String str) => GenericResponseModel2.fromJson(json.decode(str)); + +String genericResponseModel2ToJson(GenericResponseModel2 data) => json.encode(data.toJson()); + +class GenericResponseModel2 { + GenericResponseModel2({ + this.date, + this.languageId, + this.serviceName, + this.time, + this.androidLink, + this.authenticationTokenId, + this.data, + this.dataw, + this.dietType, + this.dietTypeId, + this.errorCode, + this.errorEndUserMessage, + this.errorEndUserMessageN, + this.errorMessage, + this.errorType, + this.foodCategory, + this.iosLink, + this.isAuthenticated, + this.mealOrderStatus, + this.mealType, + this.messageStatus, + this.numberOfResultRecords, + this.patientBlodType, + this.successMsg, + this.successMsgN, + this.vidaUpdatedResponse, + this.ageError, + this.allowedBooking, + this.ancillaryOrderInvoiceList, + this.ancillaryOrderList, + this.ancillaryOrderListCount, + this.ancillaryOrderProcList, + this.appoimentAllHistoryResultList, + this.appoimentAllResultList, + this.appointmentActiveNumber, + this.appointmentNo, + this.appointmentQr, + this.avgDoctorRatingList, + this.covid19AppointmentResponse, + this.covid19FreeTimeSlots, + this.covid19InvoiceResponse, + this.covid19PatientShare, + this.covid19TestProceduresList, + this.clinicCategoryList, + this.clinicInsertedId, + this.clinicsHaveScheduleList, + this.continueBookAppointment, + this.dappTemplateGetList, + this.decimalDoctorRate, + this.dentalProcedure, + this.dentalProcedureName, + this.diseasesByClinicList, + this.doctorBasicScheduleList, + this.doctorByClinicIdList, + this.doctorByDiseaseList, + this.doctorCalenderList, + this.doctorInformationAsHtml, + this.doctorInformationRaw, + this.doctorList, + this.doctorPrePostImagesList, + this.doctorProfileList, + this.doctorRate, + this.doctorRatingDetailsList, + this.doctorScheduleMappingInsert, + this.doctorSchedulesByClinicList, + this.doctorscheduleslotInsert, + this.doctorscheduleslotSelectList, + this.erAppointmentFeesObject, + this.erAdvancePaymentResponse, + this.erOnlinePaymentDetailsResponse, + this.erPatientShare, + this.erTriageQuestionsList, + this.errCode, + this.errorSearchMsg, + this.formId, + this.freeTimeSlots, + this.genderError, + this.getDoctorMobileNo, + this.getPatientInfoByPatientIdList, + this.getPatientMedicalStatus, + this.hisGetAllAppoimentHistoryList, + this.hisGetDoctorOffDaysList, + this.hisObgyneUltrasoundDoctorsList, + this.hisProcedureTemplateDetailsList, + this.hisProcedureTemplateList, + this.hisWaitingCheckDoctorAvailableForWaitingAppointmentList, + this.hisObGyneProcedureGetResponse, + this.hisPrmGetApprovalRemarkList, + this.hoursDiff, + this.isDentalplan, + this.isMobileAppDentalAllow, + this.initialSlotDuration, + this.isAllowToBookWaitingAppointment, + this.isAllowVClinic, + this.isAllowWaitList, + this.isAppointmentAllowed, + this.isClinicEnabledForIcdCodes, + this.isDoctorExist, + this.isInsertOrUpdate, + this.isLastAppoitmentRatedList, + this.isShowInsuranceUpdateModule, + this.isSlotAvailable, + this.lcGetClinicScheduleList, + this.listHoursDiff, + this.listReqTypes, + this.listAllClinicRate, + this.listAllDoctorRate, + this.listAllProjectRate, + this.listCovid19DoctorsByClinicAndProject, + this.listCovid19ProjectDriveThroughTestingCenter, + this.listCalculationTable, + this.listDdAdminMembers, + this.listDentalChiefComplain, + this.listDentalDdDetails, + this.listDentalDoctorChiefComplaintMapping, + this.listDentalPediatricDoctor, + this.listDoctorAll, + this.listDoctorByIpAddressCheckIn, + this.listDoctorByProjectClinicAr, + this.listDoctorByProjectClinicEn, + this.listDoctorCases, + this.listDoctorClinics, + this.listDoctorDetailsList, + this.listDoctorDetailsListAr, + this.listDoctorLanguages, + this.listDoctorMappinsgs, + this.listDoctorPatientVitalSign, + this.listDoctorProcedureMapping, + this.listDoctorProfileImage, + this.listDoctorProject, + this.listDoctorQualifications, + this.listDoctorSlotFirstVisit, + this.listDoctorSpeciality, + this.listDoctorSpecializations, + this.listDoctorWorkingHoursTable, + this.listDoctorblacklistModel, + this.listDoctorinfo, + this.listEnglish, + this.listGetAllCancelAppointmentReasons, + this.listGetAllClinicsRoomNo, + this.listGetAllDoctorsOnProject, + this.listGetAllDoctorsbyProject, + this.listGetAppForCancel, + this.listGetClinicsInfobyProject, + this.listGetClinicsbyProject, + this.listGetDoctorsbyProject, + this.listGetIpAddressForDd, + this.listGetIpAddressForDentalDd, + this.listGetInfoForDentalClinicsDd, + this.listGetLoginDetails, + this.listGetPatientCancelAppointment, + this.listHisDoctorProject, + this.listHisGetContactLensPerscription, + this.listHisGetGlassPerscription, + this.listHmgPartTimeDoctor, + this.listInvoiceDetails, + this.listIsPatientHasOnGoingEstimation, + this.listLaserDoctors, + this.listLaserProcedures, + this.listMedicalReportByAppointment, + this.listNonAdminProjectMapping, + this.listPatientErAdminServiceModel, + this.listPatientErDoctorBlackListModel, + this.listPhysioDoctors, + this.listProjectErpMapping, + this.listRecordByIpAddress, + this.listRecordByIpAddressNew, + this.listRecordByIpAddressNewCheckIn, + this.listRecordByIpAddressNewForDubai, + this.listRescahdualOnlineModel, + this.message, + this.notesDoctorRatingForCocList, + this.notesDoctorRatingList, + this.onlineCheckInAppointments, + this.onlineCheckinBeforeHour, + this.prmAdmissionInfoList, + this.prmDentalEstimationDetailList, + this.prmDentalEstimationList, + this.prmDoctorsForRadiologyList, + this.prmGetErToOpdRequestStatusList, + this.prmGetDoctorRatingList, + this.prmGetProceureAndPackagesList, + this.prmHisAppointmentqueuegetList, + this.prmHisCheckDoctorIsFullyBookedList, + this.prmHisGetDentalEstimationPlanList, + this.prmHisGetDischargeInfoList, + this.prmHisGetUpcomingConfirmedAppoimentList, + this.prmHisQueueErToOpList, + this.prmQueueERreferralHistoryGetList, + this.prmSpecialClinicalCareMappingList, + this.patientDoctorAppointmentResultExit, + this.patientDoctorAppointmentResultList, + this.patientErDoctorFreeSlots, + this.patientErGetAllClinicsList, + this.patientErGetDoctorClincByServiceIdList, + this.patientErGetServiceList, + this.patientErLogininsert, + this.patientErPrescriptionLogin, + this.patientErSelectAdmin, + this.patientErSelectRole2, + this.patientErUpdateLiveCareStatus, + this.patientErInsert, + this.patientInformationList, + this.patientNumber, + this.paymentModes, + this.physioIsPatientHasApproval, + this.physiotherapyError, + this.procedureNeedeTime, + this.riskScore, + this.rowCount, + this.sameClinicApptList, + this.searchDoctorsByTimeIsVoiceCommandList, + this.slotDuration, + this.statusCode, + this.tamaraIntegrationLogsInsertResponse, + this.tamaraIntegrationLogsUpdateResponse, + this.transactionNo, + this.userDentalPlanMessage, + this.waitingAppointmentNoPerDay, + this.age, + this.erpDoctorDetails, + this.returnValue, + }); + + final dynamic date; + final int? languageId; + final int? serviceName; + final dynamic time; + final dynamic androidLink; + final dynamic authenticationTokenId; + final dynamic data; + final bool? dataw; + final int? dietType; + final int? dietTypeId; + final dynamic errorCode; + final dynamic errorEndUserMessage; + final dynamic errorEndUserMessageN; + final dynamic errorMessage; + final int? errorType; + final int? foodCategory; + final dynamic iosLink; + final bool? isAuthenticated; + final int? mealOrderStatus; + final int? mealType; + final int? messageStatus; + final int? numberOfResultRecords; + final dynamic patientBlodType; + final dynamic successMsg; + final dynamic successMsgN; + final dynamic vidaUpdatedResponse; + final bool? ageError; + final bool? allowedBooking; + final dynamic ancillaryOrderInvoiceList; + final dynamic ancillaryOrderList; + final int? ancillaryOrderListCount; + final dynamic ancillaryOrderProcList; + final dynamic appoimentAllHistoryResultList; + final dynamic appoimentAllResultList; + final int? appointmentActiveNumber; + final dynamic appointmentNo; + final dynamic appointmentQr; + final dynamic avgDoctorRatingList; + final dynamic covid19AppointmentResponse; + final dynamic covid19FreeTimeSlots; + final dynamic covid19InvoiceResponse; + final dynamic covid19PatientShare; + final dynamic covid19TestProceduresList; + final dynamic clinicCategoryList; + final int? clinicInsertedId; + final dynamic clinicsHaveScheduleList; + final bool? continueBookAppointment; + final dynamic dappTemplateGetList; + final int? decimalDoctorRate; + final dynamic dentalProcedure; + final dynamic dentalProcedureName; + final dynamic diseasesByClinicList; + final dynamic doctorBasicScheduleList; + final dynamic doctorByClinicIdList; + final dynamic doctorByDiseaseList; + final dynamic doctorCalenderList; + final dynamic doctorInformationAsHtml; + final dynamic doctorInformationRaw; + final dynamic doctorList; + final dynamic doctorPrePostImagesList; + final List? doctorProfileList; + final int? doctorRate; + final dynamic doctorRatingDetailsList; + final int? doctorScheduleMappingInsert; + final dynamic doctorSchedulesByClinicList; + final int? doctorscheduleslotInsert; + final dynamic doctorscheduleslotSelectList; + final dynamic erAppointmentFeesObject; + final dynamic erAdvancePaymentResponse; + final dynamic erOnlinePaymentDetailsResponse; + final dynamic erPatientShare; + final dynamic erTriageQuestionsList; + final dynamic errCode; + final dynamic errorSearchMsg; + final int? formId; + final dynamic freeTimeSlots; + final bool? genderError; + final dynamic getDoctorMobileNo; + final dynamic getPatientInfoByPatientIdList; + final dynamic getPatientMedicalStatus; + final dynamic hisGetAllAppoimentHistoryList; + final dynamic hisGetDoctorOffDaysList; + final dynamic hisObgyneUltrasoundDoctorsList; + final dynamic hisProcedureTemplateDetailsList; + final dynamic hisProcedureTemplateList; + final dynamic hisWaitingCheckDoctorAvailableForWaitingAppointmentList; + final dynamic hisObGyneProcedureGetResponse; + final dynamic hisPrmGetApprovalRemarkList; + final int? hoursDiff; + final bool? isDentalplan; + final bool? isMobileAppDentalAllow; + final int? initialSlotDuration; + final bool? isAllowToBookWaitingAppointment; + final bool? isAllowVClinic; + final bool? isAllowWaitList; + final bool? isAppointmentAllowed; + final bool? isClinicEnabledForIcdCodes; + final bool? isDoctorExist; + final int? isInsertOrUpdate; + final dynamic isLastAppoitmentRatedList; + final bool? isShowInsuranceUpdateModule; + final int? isSlotAvailable; + final dynamic lcGetClinicScheduleList; + final dynamic listHoursDiff; + final dynamic listReqTypes; + final dynamic listAllClinicRate; + final dynamic listAllDoctorRate; + final dynamic listAllProjectRate; + final dynamic listCovid19DoctorsByClinicAndProject; + final dynamic listCovid19ProjectDriveThroughTestingCenter; + final dynamic listCalculationTable; + final dynamic listDdAdminMembers; + final dynamic listDentalChiefComplain; + final dynamic listDentalDdDetails; + final dynamic listDentalDoctorChiefComplaintMapping; + final dynamic listDentalPediatricDoctor; + final dynamic listDoctorAll; + final dynamic listDoctorByIpAddressCheckIn; + final dynamic listDoctorByProjectClinicAr; + final dynamic listDoctorByProjectClinicEn; + final dynamic listDoctorCases; + final dynamic listDoctorClinics; + final dynamic listDoctorDetailsList; + final dynamic listDoctorDetailsListAr; + final dynamic listDoctorLanguages; + final dynamic listDoctorMappinsgs; + final dynamic listDoctorPatientVitalSign; + final dynamic listDoctorProcedureMapping; + final dynamic listDoctorProfileImage; + final dynamic listDoctorProject; + final dynamic listDoctorQualifications; + final dynamic listDoctorSlotFirstVisit; + final dynamic listDoctorSpeciality; + final dynamic listDoctorSpecializations; + final dynamic listDoctorWorkingHoursTable; + final dynamic listDoctorblacklistModel; + final dynamic listDoctorinfo; + final dynamic listEnglish; + final dynamic listGetAllCancelAppointmentReasons; + final dynamic listGetAllClinicsRoomNo; + final dynamic listGetAllDoctorsOnProject; + final dynamic listGetAllDoctorsbyProject; + final dynamic listGetAppForCancel; + final dynamic listGetClinicsInfobyProject; + final dynamic listGetClinicsbyProject; + final dynamic listGetDoctorsbyProject; + final dynamic listGetIpAddressForDd; + final dynamic listGetIpAddressForDentalDd; + final dynamic listGetInfoForDentalClinicsDd; + final dynamic listGetLoginDetails; + final dynamic listGetPatientCancelAppointment; + final dynamic listHisDoctorProject; + final dynamic listHisGetContactLensPerscription; + final dynamic listHisGetGlassPerscription; + final dynamic listHmgPartTimeDoctor; + final dynamic listInvoiceDetails; + final dynamic listIsPatientHasOnGoingEstimation; + final dynamic listLaserDoctors; + final dynamic listLaserProcedures; + final dynamic listMedicalReportByAppointment; + final dynamic listNonAdminProjectMapping; + final dynamic listPatientErAdminServiceModel; + final dynamic listPatientErDoctorBlackListModel; + final dynamic listPhysioDoctors; + final dynamic listProjectErpMapping; + final dynamic listRecordByIpAddress; + final dynamic listRecordByIpAddressNew; + final dynamic listRecordByIpAddressNewCheckIn; + final dynamic listRecordByIpAddressNewForDubai; + final dynamic listRescahdualOnlineModel; + final dynamic message; + final dynamic notesDoctorRatingForCocList; + final dynamic notesDoctorRatingList; + final dynamic onlineCheckInAppointments; + final int? onlineCheckinBeforeHour; + final dynamic prmAdmissionInfoList; + final dynamic prmDentalEstimationDetailList; + final dynamic prmDentalEstimationList; + final dynamic prmDoctorsForRadiologyList; + final dynamic prmGetErToOpdRequestStatusList; + final dynamic prmGetDoctorRatingList; + final dynamic prmGetProceureAndPackagesList; + final dynamic prmHisAppointmentqueuegetList; + final dynamic prmHisCheckDoctorIsFullyBookedList; + final dynamic prmHisGetDentalEstimationPlanList; + final dynamic prmHisGetDischargeInfoList; + final dynamic prmHisGetUpcomingConfirmedAppoimentList; + final dynamic prmHisQueueErToOpList; + final dynamic prmQueueERreferralHistoryGetList; + final dynamic prmSpecialClinicalCareMappingList; + final bool? patientDoctorAppointmentResultExit; + final dynamic patientDoctorAppointmentResultList; + final dynamic patientErDoctorFreeSlots; + final dynamic patientErGetAllClinicsList; + final dynamic patientErGetDoctorClincByServiceIdList; + final dynamic patientErGetServiceList; + final int? patientErLogininsert; + final dynamic patientErPrescriptionLogin; + final dynamic patientErSelectAdmin; + final dynamic patientErSelectRole2; + final int? patientErUpdateLiveCareStatus; + final int? patientErInsert; + final dynamic patientInformationList; + final int? patientNumber; + final dynamic paymentModes; + final bool? physioIsPatientHasApproval; + final int? physiotherapyError; + final dynamic procedureNeedeTime; + final int? riskScore; + final int? rowCount; + final dynamic sameClinicApptList; + final dynamic searchDoctorsByTimeIsVoiceCommandList; + final int? slotDuration; + final int? statusCode; + final int? tamaraIntegrationLogsInsertResponse; + final int? tamaraIntegrationLogsUpdateResponse; + final dynamic transactionNo; + final dynamic userDentalPlanMessage; + final int? waitingAppointmentNoPerDay; + final int? age; + final dynamic erpDoctorDetails; + final int? returnValue; + + factory GenericResponseModel2.fromJson(Map json) => GenericResponseModel2( + date: json["Date"], + languageId: json["LanguageID"] == null ? null : json["LanguageID"], + serviceName: json["ServiceName"] == null ? null : json["ServiceName"], + time: json["Time"], + androidLink: json["AndroidLink"], + authenticationTokenId: json["AuthenticationTokenID"], + data: json["Data"], + dataw: json["Dataw"] == null ? null : json["Dataw"], + dietType: json["DietType"] == null ? null : json["DietType"], + dietTypeId: json["DietTypeID"] == null ? null : json["DietTypeID"], + errorCode: json["ErrorCode"], + errorEndUserMessage: json["ErrorEndUserMessage"], + errorEndUserMessageN: json["ErrorEndUserMessageN"], + errorMessage: json["ErrorMessage"], + errorType: json["ErrorType"] == null ? null : json["ErrorType"], + foodCategory: json["FoodCategory"] == null ? null : json["FoodCategory"], + iosLink: json["IOSLink"], + isAuthenticated: json["IsAuthenticated"] == null ? null : json["IsAuthenticated"], + mealOrderStatus: json["MealOrderStatus"] == null ? null : json["MealOrderStatus"], + mealType: json["MealType"] == null ? null : json["MealType"], + messageStatus: json["MessageStatus"] == null ? null : json["MessageStatus"], + numberOfResultRecords: json["NumberOfResultRecords"] == null ? null : json["NumberOfResultRecords"], + patientBlodType: json["PatientBlodType"], + successMsg: json["SuccessMsg"], + successMsgN: json["SuccessMsgN"], + vidaUpdatedResponse: json["VidaUpdatedResponse"], + ageError: json["AgeError"] == null ? null : json["AgeError"], + allowedBooking: json["AllowedBooking"] == null ? null : json["AllowedBooking"], + ancillaryOrderInvoiceList: json["AncillaryOrderInvoiceList"], + ancillaryOrderList: json["AncillaryOrderList"], + ancillaryOrderListCount: json["AncillaryOrderListCount"] == null ? null : json["AncillaryOrderListCount"], + ancillaryOrderProcList: json["AncillaryOrderProcList"], + appoimentAllHistoryResultList: json["AppoimentAllHistoryResultList"], + appoimentAllResultList: json["AppoimentAllResultList"], + appointmentActiveNumber: json["AppointmentActiveNumber"] == null ? null : json["AppointmentActiveNumber"], + appointmentNo: json["AppointmentNo"], + appointmentQr: json["AppointmentQR"], + avgDoctorRatingList: json["AvgDoctorRatingList"], + covid19AppointmentResponse: json["COVID19_AppointmentResponse"], + covid19FreeTimeSlots: json["COVID19_FreeTimeSlots"], + covid19InvoiceResponse: json["COVID19_InvoiceResponse"], + covid19PatientShare: json["COVID19_PatientShare"], + covid19TestProceduresList: json["COVID19_TestProceduresList"], + clinicCategoryList: json["ClinicCategoryList"], + clinicInsertedId: json["ClinicInsertedID"] == null ? null : json["ClinicInsertedID"], + clinicsHaveScheduleList: json["ClinicsHaveScheduleList"], + continueBookAppointment: json["ContinueBookAppointment"] == null ? null : json["ContinueBookAppointment"], + dappTemplateGetList: json["DAPP_TemplateGetList"], + decimalDoctorRate: json["DecimalDoctorRate"] == null ? null : json["DecimalDoctorRate"], + dentalProcedure: json["DentalProcedure"], + dentalProcedureName: json["DentalProcedureName"], + diseasesByClinicList: json["DiseasesByClinicList"], + doctorBasicScheduleList: json["DoctorBasicScheduleList"], + doctorByClinicIdList: json["DoctorByClinicIDList"], + doctorByDiseaseList: json["DoctorByDiseaseList"], + doctorCalenderList: json["DoctorCalenderList"], + doctorInformationAsHtml: json["DoctorInformationAsHTML"], + doctorInformationRaw: json["DoctorInformationRAW"], + doctorList: json["DoctorList"], + doctorPrePostImagesList: json["DoctorPrePostImagesList"], + doctorProfileList: json["DoctorProfileList"] == null ? null : List.from(json["DoctorProfileList"].map((x) => DoctorProfileListModel.fromJson(x))), + doctorRate: json["DoctorRate"] == null ? null : json["DoctorRate"], + doctorRatingDetailsList: json["DoctorRatingDetailsList"], + doctorScheduleMappingInsert: json["DoctorScheduleMapping_Insert"] == null ? null : json["DoctorScheduleMapping_Insert"], + doctorSchedulesByClinicList: json["DoctorSchedulesByClinicList"], + doctorscheduleslotInsert: json["Doctorscheduleslot_Insert"] == null ? null : json["Doctorscheduleslot_Insert"], + doctorscheduleslotSelectList: json["Doctorscheduleslot_SelectList"], + erAppointmentFeesObject: json["ERAppointmentFeesObject"], + erAdvancePaymentResponse: json["ER_AdvancePaymentResponse"], + erOnlinePaymentDetailsResponse: json["ER_OnlinePaymentDetailsResponse"], + erPatientShare: json["ER_PatientShare"], + erTriageQuestionsList: json["ER_TriageQuestionsList"], + errCode: json["ErrCode"], + errorSearchMsg: json["ErrorSearchMsg"], + formId: json["FormID"] == null ? null : json["FormID"], + freeTimeSlots: json["FreeTimeSlots"], + genderError: json["GenderError"] == null ? null : json["GenderError"], + getDoctorMobileNo: json["GetDoctorMobileNo"], + getPatientInfoByPatientIdList: json["GetPatientInfoByPatientIDList"], + getPatientMedicalStatus: json["GetPatientMedicalStatus"], + hisGetAllAppoimentHistoryList: json["HIS_GetAllAppoimentHistoryList"], + hisGetDoctorOffDaysList: json["HIS_GetDoctorOffDaysList"], + hisObgyneUltrasoundDoctorsList: json["HIS_ObgyneUltrasoundDoctorsList"], + hisProcedureTemplateDetailsList: json["HIS_ProcedureTemplateDetailsList"], + hisProcedureTemplateList: json["HIS_ProcedureTemplateList"], + hisWaitingCheckDoctorAvailableForWaitingAppointmentList: json["HIS_Waiting_CheckDoctorAvailableForWaitingAppointment_List"], + hisObGyneProcedureGetResponse: json["His_ObGyneProcedureGet_Response"], + hisPrmGetApprovalRemarkList: json["His_PRM_GetApprovalRemarkList"], + hoursDiff: json["HoursDiff"] == null ? null : json["HoursDiff"], + isDentalplan: json["ISDentalplan"] == null ? null : json["ISDentalplan"], + isMobileAppDentalAllow: json["ISMobileAppDentalAllow"] == null ? null : json["ISMobileAppDentalAllow"], + initialSlotDuration: json["InitialSlotDuration"] == null ? null : json["InitialSlotDuration"], + isAllowToBookWaitingAppointment: json["IsAllowToBookWaitingAppointment"] == null ? null : json["IsAllowToBookWaitingAppointment"], + isAllowVClinic: json["IsAllowVClinic"] == null ? null : json["IsAllowVClinic"], + isAllowWaitList: json["IsAllowWaitList"] == null ? null : json["IsAllowWaitList"], + isAppointmentAllowed: json["IsAppointmentAllowed"] == null ? null : json["IsAppointmentAllowed"], + isClinicEnabledForIcdCodes: json["IsClinicEnabledForICDCodes"] == null ? null : json["IsClinicEnabledForICDCodes"], + isDoctorExist: json["IsDoctorExist"] == null ? null : json["IsDoctorExist"], + isInsertOrUpdate: json["IsInsertOrUpdate"] == null ? null : json["IsInsertOrUpdate"], + isLastAppoitmentRatedList: json["IsLastAppoitmentRatedList"], + isShowInsuranceUpdateModule: json["IsShowInsuranceUpdateModule"] == null ? null : json["IsShowInsuranceUpdateModule"], + isSlotAvailable: json["IsSlotAvailable"] == null ? null : json["IsSlotAvailable"], + lcGetClinicScheduleList: json["LC_GetClinicScheduleList"], + listHoursDiff: json["ListHoursDiff"], + listReqTypes: json["ListReqTypes"], + listAllClinicRate: json["List_AllClinicRate"], + listAllDoctorRate: json["List_AllDoctorRate"], + listAllProjectRate: json["List_AllProjectRate"], + listCovid19DoctorsByClinicAndProject: json["List_COVID19_DoctorsByClinicAndProject"], + listCovid19ProjectDriveThroughTestingCenter: json["List_COVID19_ProjectDriveThroughTestingCenter"], + listCalculationTable: json["List_CalculationTable"], + listDdAdminMembers: json["List_DDAdmin_Members"], + listDentalChiefComplain: json["List_DentalChiefComplain"], + listDentalDdDetails: json["List_DentalDDDetails"], + listDentalDoctorChiefComplaintMapping: json["List_DentalDoctorChiefComplaintMapping"], + listDentalPediatricDoctor: json["List_DentalPediatricDoctor"], + listDoctorAll: json["List_DoctorAll"], + listDoctorByIpAddressCheckIn: json["List_DoctorByIPAddressCheckIn"], + listDoctorByProjectClinicAr: json["List_DoctorByProjectClinicAr"], + listDoctorByProjectClinicEn: json["List_DoctorByProjectClinicEn"], + listDoctorCases: json["List_DoctorCases"], + listDoctorClinics: json["List_DoctorClinics"], + listDoctorDetailsList: json["List_DoctorDetailsList"], + listDoctorDetailsListAr: json["List_DoctorDetailsListAr"], + listDoctorLanguages: json["List_DoctorLanguages"], + listDoctorMappinsgs: json["List_DoctorMappinsgs"], + listDoctorPatientVitalSign: json["List_DoctorPatientVitalSign"], + listDoctorProcedureMapping: json["List_DoctorProcedureMapping"], + listDoctorProfileImage: json["List_DoctorProfileImage"], + listDoctorProject: json["List_DoctorProject"], + listDoctorQualifications: json["List_DoctorQualifications"], + listDoctorSlotFirstVisit: json["List_DoctorSlotFirstVisit"], + listDoctorSpeciality: json["List_DoctorSpeciality"], + listDoctorSpecializations: json["List_DoctorSpecializations"], + listDoctorWorkingHoursTable: json["List_DoctorWorkingHoursTable"], + listDoctorblacklistModel: json["List_DoctorblacklistModel"], + listDoctorinfo: json["List_Doctorinfo"], + listEnglish: json["List_English"], + listGetAllCancelAppointmentReasons: json["List_GetAllCancelAppointmentReasons"], + listGetAllClinicsRoomNo: json["List_GetAllClinicsRoomNo"], + listGetAllDoctorsOnProject: json["List_GetAllDoctorsOnProject"], + listGetAllDoctorsbyProject: json["List_GetAllDoctorsbyProject"], + listGetAppForCancel: json["List_GetAppForCancel"], + listGetClinicsInfobyProject: json["List_GetClinicsInfobyProject"], + listGetClinicsbyProject: json["List_GetClinicsbyProject"], + listGetDoctorsbyProject: json["List_GetDoctorsbyProject"], + listGetIpAddressForDd: json["List_GetIPAddressForDD"], + listGetIpAddressForDentalDd: json["List_GetIPAddressForDentalDD"], + listGetInfoForDentalClinicsDd: json["List_GetInfoForDentalClinicsDD"], + listGetLoginDetails: json["List_GetLoginDetails"], + listGetPatientCancelAppointment: json["List_GetPatientCancelAppointment"], + listHisDoctorProject: json["List_HISDoctorProject"], + listHisGetContactLensPerscription: json["List_HIS_GetContactLensPerscription"], + listHisGetGlassPerscription: json["List_HIS_GetGlassPerscription"], + listHmgPartTimeDoctor: json["List_HmgPartTimeDoctor"], + listInvoiceDetails: json["List_InvoiceDetails"], + listIsPatientHasOnGoingEstimation: json["List_IsPatientHasOnGoingEstimation"], + listLaserDoctors: json["List_LaserDoctors"], + listLaserProcedures: json["List_LaserProcedures"], + listMedicalReportByAppointment: json["List_MedicalReportByAppointment"], + listNonAdminProjectMapping: json["List_NonAdminProjectMapping"], + listPatientErAdminServiceModel: json["List_PatientER_AdminServiceModel"], + listPatientErDoctorBlackListModel: json["List_PatientER_DoctorBlackListModel"], + listPhysioDoctors: json["List_PhysioDoctors"], + listProjectErpMapping: json["List_ProjectERPMapping"], + listRecordByIpAddress: json["List_RecordByIPAddress"], + listRecordByIpAddressNew: json["List_RecordByIPAddressNew"], + listRecordByIpAddressNewCheckIn: json["List_RecordByIPAddressNewCheckIn"], + listRecordByIpAddressNewForDubai: json["List_RecordByIPAddressNewForDubai"], + listRescahdualOnlineModel: json["List_RescahdualOnlineModel"], + message: json["Message"], + notesDoctorRatingForCocList: json["NotesDoctorRatingForCOC_List"], + notesDoctorRatingList: json["NotesDoctorRatingList"], + onlineCheckInAppointments: json["OnlineCheckInAppointments"], + onlineCheckinBeforeHour: json["OnlineCheckinBeforeHour"] == null ? null : json["OnlineCheckinBeforeHour"], + prmAdmissionInfoList: json["PRM_AdmissionInfoList"], + prmDentalEstimationDetailList: json["PRM_DentalEstimationDetailList"], + prmDentalEstimationList: json["PRM_DentalEstimationList"], + prmDoctorsForRadiologyList: json["PRM_DoctorsForRadiologyList"], + prmGetErToOpdRequestStatusList: json["PRM_GET_ERToOPDRequestStatusList"], + prmGetDoctorRatingList: json["PRM_GetDoctorRatingList"], + prmGetProceureAndPackagesList: json["PRM_GetProceureAndPackagesList"], + prmHisAppointmentqueuegetList: json["PRM_HIS_AppointmentqueuegetList"], + prmHisCheckDoctorIsFullyBookedList: json["PRM_HIS_CheckDoctorIsFullyBookedList"], + prmHisGetDentalEstimationPlanList: json["PRM_HIS_GetDentalEstimationPlan_List"], + prmHisGetDischargeInfoList: json["PRM_HIS_GetDischargeInfo_List"], + prmHisGetUpcomingConfirmedAppoimentList: json["PRM_HIS_GetUpcomingConfirmedAppoimentList"], + prmHisQueueErToOpList: json["PRM_HIS_QueueERToOP_List"], + prmQueueERreferralHistoryGetList: json["PRM_QueueERreferralHistory_getList"], + prmSpecialClinicalCareMappingList: json["PRM_SpecialClinicalCareMapping_List"], + patientDoctorAppointmentResultExit: json["PatientDoctorAppointmentResultExit"] == null ? null : json["PatientDoctorAppointmentResultExit"], + patientDoctorAppointmentResultList: json["PatientDoctorAppointmentResultList"], + patientErDoctorFreeSlots: json["PatientER_DoctorFreeSlots"], + patientErGetAllClinicsList: json["PatientER_GetAllClinics_List"], + patientErGetDoctorClincByServiceIdList: json["PatientER_GetDoctorClincByServiceID_List"], + patientErGetServiceList: json["PatientER_GetServiceList"], + patientErLogininsert: json["PatientER_Logininsert"] == null ? null : json["PatientER_Logininsert"], + patientErPrescriptionLogin: json["PatientER_PrescriptionLogin"], + patientErSelectAdmin: json["PatientER_SelectAdmin"], + patientErSelectRole2: json["PatientER_SelectRole2"], + patientErUpdateLiveCareStatus: json["PatientER_UpdateLiveCareStatus"] == null ? null : json["PatientER_UpdateLiveCareStatus"], + patientErInsert: json["PatientER_insert"] == null ? null : json["PatientER_insert"], + patientInformationList: json["PatientInformationList"], + patientNumber: json["PatientNumber"] == null ? null : json["PatientNumber"], + paymentModes: json["PaymentModes"], + physioIsPatientHasApproval: json["Physio_IsPatientHasApproval"] == null ? null : json["Physio_IsPatientHasApproval"], + physiotherapyError: json["PhysiotherapyError"] == null ? null : json["PhysiotherapyError"], + procedureNeedeTime: json["ProcedureNeedeTime"], + riskScore: json["RiskScore"] == null ? null : json["RiskScore"], + rowCount: json["RowCount"] == null ? null : json["RowCount"], + sameClinicApptList: json["SameClinicApptList"], + searchDoctorsByTimeIsVoiceCommandList: json["SearchDoctorsByTime_IsVoiceCommandList"], + slotDuration: json["SlotDuration"] == null ? null : json["SlotDuration"], + statusCode: json["StatusCode"] == null ? null : json["StatusCode"], + tamaraIntegrationLogsInsertResponse: json["Tamara_IntegrationLogsInsert_Response"] == null ? null : json["Tamara_IntegrationLogsInsert_Response"], + tamaraIntegrationLogsUpdateResponse: json["Tamara_IntegrationLogsUpdate_Response"] == null ? null : json["Tamara_IntegrationLogsUpdate_Response"], + transactionNo: json["TransactionNo"], + userDentalPlanMessage: json["UserDentalPlanMessage"], + waitingAppointmentNoPerDay: json["WaitingAppointmentNoPerDay"] == null ? null : json["WaitingAppointmentNoPerDay"], + age: json["age"] == null ? null : json["age"], + erpDoctorDetails: json["erpDoctorDetails"], + returnValue: json["returnValue"] == null ? null : json["returnValue"], + ); + + Map toJson() => { + "Date": date, + "LanguageID": languageId == null ? null : languageId, + "ServiceName": serviceName == null ? null : serviceName, + "Time": time, + "AndroidLink": androidLink, + "AuthenticationTokenID": authenticationTokenId, + "Data": data, + "Dataw": dataw == null ? null : dataw, + "DietType": dietType == null ? null : dietType, + "DietTypeID": dietTypeId == null ? null : dietTypeId, + "ErrorCode": errorCode, + "ErrorEndUserMessage": errorEndUserMessage, + "ErrorEndUserMessageN": errorEndUserMessageN, + "ErrorMessage": errorMessage, + "ErrorType": errorType == null ? null : errorType, + "FoodCategory": foodCategory == null ? null : foodCategory, + "IOSLink": iosLink, + "IsAuthenticated": isAuthenticated == null ? null : isAuthenticated, + "MealOrderStatus": mealOrderStatus == null ? null : mealOrderStatus, + "MealType": mealType == null ? null : mealType, + "MessageStatus": messageStatus == null ? null : messageStatus, + "NumberOfResultRecords": numberOfResultRecords == null ? null : numberOfResultRecords, + "PatientBlodType": patientBlodType, + "SuccessMsg": successMsg, + "SuccessMsgN": successMsgN, + "VidaUpdatedResponse": vidaUpdatedResponse, + "AgeError": ageError == null ? null : ageError, + "AllowedBooking": allowedBooking == null ? null : allowedBooking, + "AncillaryOrderInvoiceList": ancillaryOrderInvoiceList, + "AncillaryOrderList": ancillaryOrderList, + "AncillaryOrderListCount": ancillaryOrderListCount == null ? null : ancillaryOrderListCount, + "AncillaryOrderProcList": ancillaryOrderProcList, + "AppoimentAllHistoryResultList": appoimentAllHistoryResultList, + "AppoimentAllResultList": appoimentAllResultList, + "AppointmentActiveNumber": appointmentActiveNumber == null ? null : appointmentActiveNumber, + "AppointmentNo": appointmentNo, + "AppointmentQR": appointmentQr, + "AvgDoctorRatingList": avgDoctorRatingList, + "COVID19_AppointmentResponse": covid19AppointmentResponse, + "COVID19_FreeTimeSlots": covid19FreeTimeSlots, + "COVID19_InvoiceResponse": covid19InvoiceResponse, + "COVID19_PatientShare": covid19PatientShare, + "COVID19_TestProceduresList": covid19TestProceduresList, + "ClinicCategoryList": clinicCategoryList, + "ClinicInsertedID": clinicInsertedId == null ? null : clinicInsertedId, + "ClinicsHaveScheduleList": clinicsHaveScheduleList, + "ContinueBookAppointment": continueBookAppointment == null ? null : continueBookAppointment, + "DAPP_TemplateGetList": dappTemplateGetList, + "DecimalDoctorRate": decimalDoctorRate == null ? null : decimalDoctorRate, + "DentalProcedure": dentalProcedure, + "DentalProcedureName": dentalProcedureName, + "DiseasesByClinicList": diseasesByClinicList, + "DoctorBasicScheduleList": doctorBasicScheduleList, + "DoctorByClinicIDList": doctorByClinicIdList, + "DoctorByDiseaseList": doctorByDiseaseList, + "DoctorCalenderList": doctorCalenderList, + "DoctorInformationAsHTML": doctorInformationAsHtml, + "DoctorInformationRAW": doctorInformationRaw, + "DoctorList": doctorList, + "DoctorPrePostImagesList": doctorPrePostImagesList, + "DoctorProfileList": doctorProfileList == null ? null : List.from(doctorProfileList!.map((x) => x.toJson())), + "DoctorRate": doctorRate == null ? null : doctorRate, + "DoctorRatingDetailsList": doctorRatingDetailsList, + "DoctorScheduleMapping_Insert": doctorScheduleMappingInsert == null ? null : doctorScheduleMappingInsert, + "DoctorSchedulesByClinicList": doctorSchedulesByClinicList, + "Doctorscheduleslot_Insert": doctorscheduleslotInsert == null ? null : doctorscheduleslotInsert, + "Doctorscheduleslot_SelectList": doctorscheduleslotSelectList, + "ERAppointmentFeesObject": erAppointmentFeesObject, + "ER_AdvancePaymentResponse": erAdvancePaymentResponse, + "ER_OnlinePaymentDetailsResponse": erOnlinePaymentDetailsResponse, + "ER_PatientShare": erPatientShare, + "ER_TriageQuestionsList": erTriageQuestionsList, + "ErrCode": errCode, + "ErrorSearchMsg": errorSearchMsg, + "FormID": formId == null ? null : formId, + "FreeTimeSlots": freeTimeSlots, + "GenderError": genderError == null ? null : genderError, + "GetDoctorMobileNo": getDoctorMobileNo, + "GetPatientInfoByPatientIDList": getPatientInfoByPatientIdList, + "GetPatientMedicalStatus": getPatientMedicalStatus, + "HIS_GetAllAppoimentHistoryList": hisGetAllAppoimentHistoryList, + "HIS_GetDoctorOffDaysList": hisGetDoctorOffDaysList, + "HIS_ObgyneUltrasoundDoctorsList": hisObgyneUltrasoundDoctorsList, + "HIS_ProcedureTemplateDetailsList": hisProcedureTemplateDetailsList, + "HIS_ProcedureTemplateList": hisProcedureTemplateList, + "HIS_Waiting_CheckDoctorAvailableForWaitingAppointment_List": hisWaitingCheckDoctorAvailableForWaitingAppointmentList, + "His_ObGyneProcedureGet_Response": hisObGyneProcedureGetResponse, + "His_PRM_GetApprovalRemarkList": hisPrmGetApprovalRemarkList, + "HoursDiff": hoursDiff == null ? null : hoursDiff, + "ISDentalplan": isDentalplan == null ? null : isDentalplan, + "ISMobileAppDentalAllow": isMobileAppDentalAllow == null ? null : isMobileAppDentalAllow, + "InitialSlotDuration": initialSlotDuration == null ? null : initialSlotDuration, + "IsAllowToBookWaitingAppointment": isAllowToBookWaitingAppointment == null ? null : isAllowToBookWaitingAppointment, + "IsAllowVClinic": isAllowVClinic == null ? null : isAllowVClinic, + "IsAllowWaitList": isAllowWaitList == null ? null : isAllowWaitList, + "IsAppointmentAllowed": isAppointmentAllowed == null ? null : isAppointmentAllowed, + "IsClinicEnabledForICDCodes": isClinicEnabledForIcdCodes == null ? null : isClinicEnabledForIcdCodes, + "IsDoctorExist": isDoctorExist == null ? null : isDoctorExist, + "IsInsertOrUpdate": isInsertOrUpdate == null ? null : isInsertOrUpdate, + "IsLastAppoitmentRatedList": isLastAppoitmentRatedList, + "IsShowInsuranceUpdateModule": isShowInsuranceUpdateModule == null ? null : isShowInsuranceUpdateModule, + "IsSlotAvailable": isSlotAvailable == null ? null : isSlotAvailable, + "LC_GetClinicScheduleList": lcGetClinicScheduleList, + "ListHoursDiff": listHoursDiff, + "ListReqTypes": listReqTypes, + "List_AllClinicRate": listAllClinicRate, + "List_AllDoctorRate": listAllDoctorRate, + "List_AllProjectRate": listAllProjectRate, + "List_COVID19_DoctorsByClinicAndProject": listCovid19DoctorsByClinicAndProject, + "List_COVID19_ProjectDriveThroughTestingCenter": listCovid19ProjectDriveThroughTestingCenter, + "List_CalculationTable": listCalculationTable, + "List_DDAdmin_Members": listDdAdminMembers, + "List_DentalChiefComplain": listDentalChiefComplain, + "List_DentalDDDetails": listDentalDdDetails, + "List_DentalDoctorChiefComplaintMapping": listDentalDoctorChiefComplaintMapping, + "List_DentalPediatricDoctor": listDentalPediatricDoctor, + "List_DoctorAll": listDoctorAll, + "List_DoctorByIPAddressCheckIn": listDoctorByIpAddressCheckIn, + "List_DoctorByProjectClinicAr": listDoctorByProjectClinicAr, + "List_DoctorByProjectClinicEn": listDoctorByProjectClinicEn, + "List_DoctorCases": listDoctorCases, + "List_DoctorClinics": listDoctorClinics, + "List_DoctorDetailsList": listDoctorDetailsList, + "List_DoctorDetailsListAr": listDoctorDetailsListAr, + "List_DoctorLanguages": listDoctorLanguages, + "List_DoctorMappinsgs": listDoctorMappinsgs, + "List_DoctorPatientVitalSign": listDoctorPatientVitalSign, + "List_DoctorProcedureMapping": listDoctorProcedureMapping, + "List_DoctorProfileImage": listDoctorProfileImage, + "List_DoctorProject": listDoctorProject, + "List_DoctorQualifications": listDoctorQualifications, + "List_DoctorSlotFirstVisit": listDoctorSlotFirstVisit, + "List_DoctorSpeciality": listDoctorSpeciality, + "List_DoctorSpecializations": listDoctorSpecializations, + "List_DoctorWorkingHoursTable": listDoctorWorkingHoursTable, + "List_DoctorblacklistModel": listDoctorblacklistModel, + "List_Doctorinfo": listDoctorinfo, + "List_English": listEnglish, + "List_GetAllCancelAppointmentReasons": listGetAllCancelAppointmentReasons, + "List_GetAllClinicsRoomNo": listGetAllClinicsRoomNo, + "List_GetAllDoctorsOnProject": listGetAllDoctorsOnProject, + "List_GetAllDoctorsbyProject": listGetAllDoctorsbyProject, + "List_GetAppForCancel": listGetAppForCancel, + "List_GetClinicsInfobyProject": listGetClinicsInfobyProject, + "List_GetClinicsbyProject": listGetClinicsbyProject, + "List_GetDoctorsbyProject": listGetDoctorsbyProject, + "List_GetIPAddressForDD": listGetIpAddressForDd, + "List_GetIPAddressForDentalDD": listGetIpAddressForDentalDd, + "List_GetInfoForDentalClinicsDD": listGetInfoForDentalClinicsDd, + "List_GetLoginDetails": listGetLoginDetails, + "List_GetPatientCancelAppointment": listGetPatientCancelAppointment, + "List_HISDoctorProject": listHisDoctorProject, + "List_HIS_GetContactLensPerscription": listHisGetContactLensPerscription, + "List_HIS_GetGlassPerscription": listHisGetGlassPerscription, + "List_HmgPartTimeDoctor": listHmgPartTimeDoctor, + "List_InvoiceDetails": listInvoiceDetails, + "List_IsPatientHasOnGoingEstimation": listIsPatientHasOnGoingEstimation, + "List_LaserDoctors": listLaserDoctors, + "List_LaserProcedures": listLaserProcedures, + "List_MedicalReportByAppointment": listMedicalReportByAppointment, + "List_NonAdminProjectMapping": listNonAdminProjectMapping, + "List_PatientER_AdminServiceModel": listPatientErAdminServiceModel, + "List_PatientER_DoctorBlackListModel": listPatientErDoctorBlackListModel, + "List_PhysioDoctors": listPhysioDoctors, + "List_ProjectERPMapping": listProjectErpMapping, + "List_RecordByIPAddress": listRecordByIpAddress, + "List_RecordByIPAddressNew": listRecordByIpAddressNew, + "List_RecordByIPAddressNewCheckIn": listRecordByIpAddressNewCheckIn, + "List_RecordByIPAddressNewForDubai": listRecordByIpAddressNewForDubai, + "List_RescahdualOnlineModel": listRescahdualOnlineModel, + "Message": message, + "NotesDoctorRatingForCOC_List": notesDoctorRatingForCocList, + "NotesDoctorRatingList": notesDoctorRatingList, + "OnlineCheckInAppointments": onlineCheckInAppointments, + "OnlineCheckinBeforeHour": onlineCheckinBeforeHour == null ? null : onlineCheckinBeforeHour, + "PRM_AdmissionInfoList": prmAdmissionInfoList, + "PRM_DentalEstimationDetailList": prmDentalEstimationDetailList, + "PRM_DentalEstimationList": prmDentalEstimationList, + "PRM_DoctorsForRadiologyList": prmDoctorsForRadiologyList, + "PRM_GET_ERToOPDRequestStatusList": prmGetErToOpdRequestStatusList, + "PRM_GetDoctorRatingList": prmGetDoctorRatingList, + "PRM_GetProceureAndPackagesList": prmGetProceureAndPackagesList, + "PRM_HIS_AppointmentqueuegetList": prmHisAppointmentqueuegetList, + "PRM_HIS_CheckDoctorIsFullyBookedList": prmHisCheckDoctorIsFullyBookedList, + "PRM_HIS_GetDentalEstimationPlan_List": prmHisGetDentalEstimationPlanList, + "PRM_HIS_GetDischargeInfo_List": prmHisGetDischargeInfoList, + "PRM_HIS_GetUpcomingConfirmedAppoimentList": prmHisGetUpcomingConfirmedAppoimentList, + "PRM_HIS_QueueERToOP_List": prmHisQueueErToOpList, + "PRM_QueueERreferralHistory_getList": prmQueueERreferralHistoryGetList, + "PRM_SpecialClinicalCareMapping_List": prmSpecialClinicalCareMappingList, + "PatientDoctorAppointmentResultExit": patientDoctorAppointmentResultExit == null ? null : patientDoctorAppointmentResultExit, + "PatientDoctorAppointmentResultList": patientDoctorAppointmentResultList, + "PatientER_DoctorFreeSlots": patientErDoctorFreeSlots, + "PatientER_GetAllClinics_List": patientErGetAllClinicsList, + "PatientER_GetDoctorClincByServiceID_List": patientErGetDoctorClincByServiceIdList, + "PatientER_GetServiceList": patientErGetServiceList, + "PatientER_Logininsert": patientErLogininsert == null ? null : patientErLogininsert, + "PatientER_PrescriptionLogin": patientErPrescriptionLogin, + "PatientER_SelectAdmin": patientErSelectAdmin, + "PatientER_SelectRole2": patientErSelectRole2, + "PatientER_UpdateLiveCareStatus": patientErUpdateLiveCareStatus == null ? null : patientErUpdateLiveCareStatus, + "PatientER_insert": patientErInsert == null ? null : patientErInsert, + "PatientInformationList": patientInformationList, + "PatientNumber": patientNumber == null ? null : patientNumber, + "PaymentModes": paymentModes, + "Physio_IsPatientHasApproval": physioIsPatientHasApproval == null ? null : physioIsPatientHasApproval, + "PhysiotherapyError": physiotherapyError == null ? null : physiotherapyError, + "ProcedureNeedeTime": procedureNeedeTime, + "RiskScore": riskScore == null ? null : riskScore, + "RowCount": rowCount == null ? null : rowCount, + "SameClinicApptList": sameClinicApptList, + "SearchDoctorsByTime_IsVoiceCommandList": searchDoctorsByTimeIsVoiceCommandList, + "SlotDuration": slotDuration == null ? null : slotDuration, + "StatusCode": statusCode == null ? null : statusCode, + "Tamara_IntegrationLogsInsert_Response": tamaraIntegrationLogsInsertResponse == null ? null : tamaraIntegrationLogsInsertResponse, + "Tamara_IntegrationLogsUpdate_Response": tamaraIntegrationLogsUpdateResponse == null ? null : tamaraIntegrationLogsUpdateResponse, + "TransactionNo": transactionNo, + "UserDentalPlanMessage": userDentalPlanMessage, + "WaitingAppointmentNoPerDay": waitingAppointmentNoPerDay == null ? null : waitingAppointmentNoPerDay, + "age": age == null ? null : age, + "erpDoctorDetails": erpDoctorDetails, + "returnValue": returnValue == null ? null : returnValue, + }; +} diff --git a/lib/model/base/post_params_model.dart b/lib/model/base/post_params_model.dart new file mode 100644 index 0000000..e09b571 --- /dev/null +++ b/lib/model/base/post_params_model.dart @@ -0,0 +1,139 @@ +class PostParamsModel { + String? imei; + String? tokenID; + int? languageID; + String? stamp; + String? iPAdress; + double? versionID; + int? channel; + String? sessionID; + bool? isLoginForDoctorApp; + bool? patientOutSA; + String? vidaAuthTokenID; + String? vidaRefreshTokenID; + int? deviceTypeID; + String? generalID; + + //After Login + int? doctorId; + int? editedBy; + int? projectId; + int? clinicId; + + PostParamsModel({ + this.imei, + this.tokenID, + this.languageID, + this.stamp, + this.iPAdress, + this.versionID, + this.channel, + this.sessionID, + this.isLoginForDoctorApp, + this.patientOutSA, + this.vidaAuthTokenID, + this.vidaRefreshTokenID, + this.deviceTypeID, + this.generalID, + this.doctorId, + this.editedBy, + this.projectId, + this.clinicId, + }); + + PostParamsModel.fromJson(Map json) { + imei = json['IMEI']; + tokenID = json['TokenID']; + languageID = json['LanguageID']; + stamp = json['stamp']; + iPAdress = json['IPAdress']; + versionID = json['VersionID']; + channel = json['Channel']; + sessionID = json['SessionID']; + isLoginForDoctorApp = json['IsLoginForDoctorApp']; + patientOutSA = json['PatientOutSA']; + vidaAuthTokenID = json['VidaAuthTokenID']; + vidaRefreshTokenID = json['VidaRefreshTokenID']; + deviceTypeID = json['DeviceTypeID']; + deviceTypeID = json['generalid']; + } + + Map toJson() { + Map data = new Map(); + data['TokenID'] = this.tokenID; + data['LanguageID'] = this.languageID; + data['stamp'] = this.stamp; + data['IPAdress'] = this.iPAdress; + data['VersionID'] = this.versionID; + data['Channel'] = this.channel; + data['SessionID'] = this.sessionID; + data['IsLoginForDoctorApp'] = this.isLoginForDoctorApp; + data['PatientOutSA'] = this.patientOutSA; + data['VidaAuthTokenID'] = this.vidaAuthTokenID; + data['VidaRefreshTokenID'] = this.vidaRefreshTokenID; + data['DeviceTypeID'] = this.deviceTypeID; + data['generalid'] = this.generalID; + return data; + } + + Map toJsonLogged() { + Map data = new Map(); + data['TokenID'] = this.tokenID; + data['LanguageID'] = this.languageID; + data['stamp'] = this.stamp; + data['IPAdress'] = this.iPAdress; + data['VersionID'] = this.versionID; + data['Channel'] = this.channel; + data['SessionID'] = this.sessionID; + data['IsLoginForDoctorApp'] = this.isLoginForDoctorApp; + data['PatientOutSA'] = this.patientOutSA; + data['VidaAuthTokenID'] = this.vidaAuthTokenID; + data['VidaRefreshTokenID'] = this.vidaRefreshTokenID; + data['DeviceTypeID'] = this.deviceTypeID; + data['generalid'] = this.generalID; + data['DoctorID'] = this.doctorId; + data['EditedBy'] = this.editedBy; + data['ProjectID'] = this.projectId; + data['ClinicID'] = this.clinicId; + return data; + } + +// Map toJsonAfterLogin() { +// Map data = new Map(); +// data['VersionID'] = this.versionID; +// data['Channel'] = this.channel; +// data['LanguageID'] = this.languageID; +// data['MobileType'] = this.mobileType; +// data['LogInTokenID'] = this.logInTokenID; +// data['TokenID'] = this.tokenID; +// data['MobileNumber'] = this.mobileNumber; +// data['UserName'] = this.userName; +// data['P_EMAIL_ADDRESS'] = this.pEmailAddress; +// data['P_SESSION_ID'] = this.pSessionId; +// data['PayrollCodeStr'] = this.payrollCodeStr; +// data['LegislationCodeStr'] = this.pLegislationCode; +// data['P_SELECTED_EMPLOYEE_NUMBER'] = this.pSelectedEmployeeNumber; +// data['P_USER_NAME'] = this.pUserName; +// return data; +// } +// +// set setLogInTokenID(String? token) => logInTokenID = token; +// +// set setTokenID(String? token) => tokenID = token; +// +// set setMobileNumer(String? v) => mobileNumber = v; +// +// set setUserName(String? v) => userName = v; +// +// set setPEmailAddress(String? v) => pEmailAddress = v; +// +// set setPSessionId(int? v) => pSessionId = v; +// +// set setPUserName(String? v) => pUserName = v; +// +// set setPSelectedEmployeeNumber(String? v) => pSelectedEmployeeNumber = v; +// +// set setPLegislationCode(String? v) => pLegislationCode = v; +// +// set setPayrollCodeStr(String? v) => payrollCodeStr = v; +} diff --git a/lib/model/get_mobile_login_info_list_model.dart b/lib/model/get_mobile_login_info_list_model.dart new file mode 100644 index 0000000..ef00d43 --- /dev/null +++ b/lib/model/get_mobile_login_info_list_model.dart @@ -0,0 +1,65 @@ +class GetMobileLoginInfoListModel { + int? iD; + int? employeeID; + int? channelID; + int? companyID; + String? deviceType; + String? deviceToken; + int? language; + int? gender; + int? loginType; + String? createdOn; + String? editedOn; + String? employeeName; + bool? businessCardPrivilege; + + GetMobileLoginInfoListModel({ + this.iD, + this.employeeID, + this.channelID, + this.companyID, + this.deviceType, + this.deviceToken, + this.language, + this.gender, + this.loginType, + this.createdOn, + this.editedOn, + this.employeeName, + this.businessCardPrivilege, + }); + + GetMobileLoginInfoListModel.fromJson(Map json) { + iD = json['ID']; + employeeID = json['EmployeeID']; + channelID = json['ChannelID']; + companyID = json['CompanyID']; + deviceType = json['DeviceType']; + deviceToken = json['DeviceToken']; + language = json['Language']; + gender = json['Gender']; + loginType = json['LoginType']; + createdOn = json['CreatedOn']; + editedOn = json['EditedOn']; + employeeName = json['EmployeeName']; + businessCardPrivilege = json['BusinessCardPrivilege']; + } + + Map toJson() { + Map data = Map(); + data['ID'] = iD; + data['EmployeeID'] = employeeID; + data['ChannelID'] = channelID; + data['CompanyID'] = companyID; + data['DeviceType'] = deviceType; + data['DeviceToken'] = deviceToken; + data['Language'] = language; + data['Gender'] = gender; + data['LoginType'] = loginType; + data['CreatedOn'] = createdOn; + data['EditedOn'] = editedOn; + data['EmployeeName'] = employeeName; + data['BusinessCardPrivilege'] = businessCardPrivilege; + return data; + } +} diff --git a/lib/model/login/doctor_profile_model.dart b/lib/model/login/doctor_profile_model.dart new file mode 100644 index 0000000..390c516 --- /dev/null +++ b/lib/model/login/doctor_profile_model.dart @@ -0,0 +1,195 @@ +class DoctorProfileListModel { + DoctorProfileListModel({ + this.doctorId, + this.doctorName, + this.doctorNameN, + this.clinicId, + this.clinicDescription, + this.clinicDescriptionN, + this.licenseExpiry, + this.employmentType, + this.setupId, + this.projectId, + this.projectName, + this.nationalityId, + this.nationalityName, + this.nationalityNameN, + this.gender, + this.genderDescription, + this.genderDescriptionN, + this.doctorTitle, + this.projectNameN, + this.isAllowWaitList, + this.titleDescription, + this.titleDescriptionN, + this.isRegistered, + this.isDoctorDummy, + this.isActive, + this.isDoctorAppointmentDisplayed, + this.doctorClinicActive, + this.isbookingAllowed, + this.doctorCases, + this.doctorPicture, + this.doctorProfileInfo, + this.specialty, + this.actualDoctorRate, + this.consultationFee, + this.decimalDoctorRate, + this.doctorImageUrl, + this.doctorMobileNumber, + this.doctorRate, + this.doctorStarsRate, + this.doctorTitleForProfile, + this.isAppointmentAllowed, + this.isDoctorHasPrePostImages, + this.nationalityFlagUrl, + this.noOfPatientsRate, + this.qr, + this.serviceId, + }); + + final int? doctorId; + final String? doctorName; + final dynamic doctorNameN; + final int? clinicId; + final String? clinicDescription; + final dynamic clinicDescriptionN; + final dynamic licenseExpiry; + final int? employmentType; + final dynamic setupId; + final int? projectId; + final String? projectName; + final String? nationalityId; + final String? nationalityName; + final dynamic nationalityNameN; + final int? gender; + final String? genderDescription; + final dynamic genderDescriptionN; + final dynamic doctorTitle; + final dynamic projectNameN; + final bool? isAllowWaitList; + final String? titleDescription; + final dynamic titleDescriptionN; + final dynamic isRegistered; + final dynamic isDoctorDummy; + final bool? isActive; + final dynamic isDoctorAppointmentDisplayed; + final bool? doctorClinicActive; + final dynamic isbookingAllowed; + final String? doctorCases; + final dynamic doctorPicture; + final String? doctorProfileInfo; + final List? specialty; + final int? actualDoctorRate; + final String? consultationFee; + final double? decimalDoctorRate; + final String? doctorImageUrl; + final String? doctorMobileNumber; + final int? doctorRate; + final int? doctorStarsRate; + final String? doctorTitleForProfile; + final bool? isAppointmentAllowed; + final bool? isDoctorHasPrePostImages; + final String? nationalityFlagUrl; + final int? noOfPatientsRate; + final String? qr; + final int? serviceId; + + factory DoctorProfileListModel.fromJson(Map json) => DoctorProfileListModel( + doctorId: json["DoctorID"] == null ? null : json["DoctorID"], + doctorName: json["DoctorName"] == null ? null : json["DoctorName"], + doctorNameN: json["DoctorNameN"], + clinicId: json["ClinicID"] == null ? null : json["ClinicID"], + clinicDescription: json["ClinicDescription"] == null ? null : json["ClinicDescription"], + clinicDescriptionN: json["ClinicDescriptionN"], + licenseExpiry: json["LicenseExpiry"], + employmentType: json["EmploymentType"] == null ? null : json["EmploymentType"], + setupId: json["SetupID"], + projectId: json["ProjectID"] == null ? null : json["ProjectID"], + projectName: json["ProjectName"] == null ? null : json["ProjectName"], + nationalityId: json["NationalityID"] == null ? null : json["NationalityID"], + nationalityName: json["NationalityName"] == null ? null : json["NationalityName"], + nationalityNameN: json["NationalityNameN"], + gender: json["Gender"] == null ? null : json["Gender"], + genderDescription: json["Gender_Description"] == null ? null : json["Gender_Description"], + genderDescriptionN: json["Gender_DescriptionN"], + doctorTitle: json["DoctorTitle"], + projectNameN: json["ProjectNameN"], + isAllowWaitList: json["IsAllowWaitList"] == null ? null : json["IsAllowWaitList"], + titleDescription: json["Title_Description"] == null ? null : json["Title_Description"], + titleDescriptionN: json["Title_DescriptionN"], + isRegistered: json["IsRegistered"], + isDoctorDummy: json["IsDoctorDummy"], + isActive: json["IsActive"] == null ? null : json["IsActive"], + isDoctorAppointmentDisplayed: json["IsDoctorAppointmentDisplayed"], + doctorClinicActive: json["DoctorClinicActive"] == null ? null : json["DoctorClinicActive"], + isbookingAllowed: json["IsbookingAllowed"], + doctorCases: json["DoctorCases"] == null ? null : json["DoctorCases"], + doctorPicture: json["DoctorPicture"], + doctorProfileInfo: json["DoctorProfileInfo"] == null ? null : json["DoctorProfileInfo"], + specialty: json["Specialty"] == null ? null : List.from(json["Specialty"].map((x) => x)), + actualDoctorRate: json["ActualDoctorRate"] == null ? null : json["ActualDoctorRate"], + consultationFee: json["ConsultationFee"] == null ? null : json["ConsultationFee"], + decimalDoctorRate: json["DecimalDoctorRate"] == null ? null : json["DecimalDoctorRate"].toDouble(), + doctorImageUrl: json["DoctorImageURL"] == null ? null : json["DoctorImageURL"], + doctorMobileNumber: json["DoctorMobileNumber"] == null ? null : json["DoctorMobileNumber"], + doctorRate: json["DoctorRate"] == null ? null : json["DoctorRate"], + doctorStarsRate: json["DoctorStarsRate"] == null ? null : json["DoctorStarsRate"], + doctorTitleForProfile: json["DoctorTitleForProfile"] == null ? null : json["DoctorTitleForProfile"], + isAppointmentAllowed: json["IsAppointmentAllowed"] == null ? null : json["IsAppointmentAllowed"], + isDoctorHasPrePostImages: json["IsDoctorHasPrePostImages"] == null ? null : json["IsDoctorHasPrePostImages"], + nationalityFlagUrl: json["NationalityFlagURL"] == null ? null : json["NationalityFlagURL"], + noOfPatientsRate: json["NoOfPatientsRate"] == null ? null : json["NoOfPatientsRate"], + qr: json["QR"] == null ? null : json["QR"], + serviceId: json["ServiceID"] == null ? null : json["ServiceID"], + ); + + Map toJson() => { + "DoctorID": doctorId == null ? null : doctorId, + "DoctorName": doctorName == null ? null : doctorName, + "DoctorNameN": doctorNameN, + "ClinicID": clinicId == null ? null : clinicId, + "ClinicDescription": clinicDescription == null ? null : clinicDescription, + "ClinicDescriptionN": clinicDescriptionN, + "LicenseExpiry": licenseExpiry, + "EmploymentType": employmentType == null ? null : employmentType, + "SetupID": setupId, + "ProjectID": projectId == null ? null : projectId, + "ProjectName": projectName == null ? null : projectName, + "NationalityID": nationalityId == null ? null : nationalityId, + "NationalityName": nationalityName == null ? null : nationalityName, + "NationalityNameN": nationalityNameN, + "Gender": gender == null ? null : gender, + "Gender_Description": genderDescription == null ? null : genderDescription, + "Gender_DescriptionN": genderDescriptionN, + "DoctorTitle": doctorTitle, + "ProjectNameN": projectNameN, + "IsAllowWaitList": isAllowWaitList == null ? null : isAllowWaitList, + "Title_Description": titleDescription == null ? null : titleDescription, + "Title_DescriptionN": titleDescriptionN, + "IsRegistered": isRegistered, + "IsDoctorDummy": isDoctorDummy, + "IsActive": isActive == null ? null : isActive, + "IsDoctorAppointmentDisplayed": isDoctorAppointmentDisplayed, + "DoctorClinicActive": doctorClinicActive == null ? null : doctorClinicActive, + "IsbookingAllowed": isbookingAllowed, + "DoctorCases": doctorCases == null ? null : doctorCases, + "DoctorPicture": doctorPicture, + "DoctorProfileInfo": doctorProfileInfo == null ? null : doctorProfileInfo, + "Specialty": specialty == null ? null : List.from(specialty!.map((x) => x)), + "ActualDoctorRate": actualDoctorRate == null ? null : actualDoctorRate, + "ConsultationFee": consultationFee == null ? null : consultationFee, + "DecimalDoctorRate": decimalDoctorRate == null ? null : decimalDoctorRate, + "DoctorImageURL": doctorImageUrl == null ? null : doctorImageUrl, + "DoctorMobileNumber": doctorMobileNumber == null ? null : doctorMobileNumber, + "DoctorRate": doctorRate == null ? null : doctorRate, + "DoctorStarsRate": doctorStarsRate == null ? null : doctorStarsRate, + "DoctorTitleForProfile": doctorTitleForProfile == null ? null : doctorTitleForProfile, + "IsAppointmentAllowed": isAppointmentAllowed == null ? null : isAppointmentAllowed, + "IsDoctorHasPrePostImages": isDoctorHasPrePostImages == null ? null : isDoctorHasPrePostImages, + "NationalityFlagURL": nationalityFlagUrl == null ? null : nationalityFlagUrl, + "NoOfPatientsRate": noOfPatientsRate == null ? null : noOfPatientsRate, + "QR": qr == null ? null : qr, + "ServiceID": serviceId == null ? null : serviceId, + }; +} diff --git a/lib/model/login/imei_details_model.dart b/lib/model/login/imei_details_model.dart new file mode 100644 index 0000000..e2611a5 --- /dev/null +++ b/lib/model/login/imei_details_model.dart @@ -0,0 +1,128 @@ +class GetIMEIDetailsModel { + int? iD; + String? iMEI; + int? logInTypeID; + bool? outSA; + String? mobile; + dynamic identificationNo; + int? doctorID; + String? doctorName; + String? doctorNameN; + int? clinicID; + String? clinicDescription; + dynamic clinicDescriptionN; + int? projectID; + String? projectName; + String? genderDescription; + dynamic genderDescriptionN; + String? titleDescription; + dynamic titleDescriptionN; + dynamic zipCode; + String? createdOn; + dynamic createdBy; + String? editedOn; + dynamic editedBy; + bool? biometricEnabled; + dynamic preferredLanguage; + bool? isActive; + String? vidaAuthTokenID; + String? vidaRefreshTokenID; + String? password; + + GetIMEIDetailsModel( + {this.iD, + this.iMEI, + this.logInTypeID, + this.outSA, + this.mobile, + this.identificationNo, + this.doctorID, + this.doctorName, + this.doctorNameN, + this.clinicID, + this.clinicDescription, + this.clinicDescriptionN, + this.projectID, + this.projectName, + this.genderDescription, + this.genderDescriptionN, + this.titleDescription, + this.titleDescriptionN, + this.zipCode, + this.createdOn, + this.createdBy, + this.editedOn, + this.editedBy, + this.biometricEnabled, + this.preferredLanguage, + this.isActive, + this.vidaAuthTokenID, + this.vidaRefreshTokenID, + this.password}); + + GetIMEIDetailsModel.fromJson(Map json) { + iD = json['ID']; + iMEI = json['IMEI']; + logInTypeID = json['LogInTypeID']; + outSA = json['OutSA']; + mobile = json['Mobile']; + identificationNo = json['IdentificationNo']; + doctorID = json['DoctorID']; + doctorName = json['DoctorName']; + doctorNameN = json['DoctorNameN']; + clinicID = json['ClinicID']; + clinicDescription = json['ClinicDescription']; + clinicDescriptionN = json['ClinicDescriptionN']; + projectID = json['ProjectID']; + projectName = json['ProjectName']; + genderDescription = json['Gender_Description']; + genderDescriptionN = json['Gender_DescriptionN']; + titleDescription = json['Title_Description']; + titleDescriptionN = json['Title_DescriptionN']; + zipCode = json['ZipCode']; + createdOn = json['CreatedOn']; + createdBy = json['CreatedBy']; + editedOn = json['EditedOn']; + editedBy = json['EditedBy']; + biometricEnabled = json['BiometricEnabled']; + preferredLanguage = json['PreferredLanguage']; + isActive = json['IsActive']; + vidaAuthTokenID = json['VidaAuthTokenID']; + vidaRefreshTokenID = json['VidaRefreshTokenID']; + password = json['Password']; + } + + Map toJson() { + final Map data = new Map(); + data['ID'] = this.iD; + data['IMEI'] = this.iMEI; + data['LogInTypeID'] = this.logInTypeID; + data['OutSA'] = this.outSA; + data['Mobile'] = this.mobile; + data['IdentificationNo'] = this.identificationNo; + data['DoctorID'] = this.doctorID; + data['DoctorName'] = this.doctorName; + data['DoctorNameN'] = this.doctorNameN; + data['ClinicID'] = this.clinicID; + data['ClinicDescription'] = this.clinicDescription; + data['ClinicDescriptionN'] = this.clinicDescriptionN; + data['ProjectID'] = this.projectID; + data['ProjectName'] = this.projectName; + data['Gender_Description'] = this.genderDescription; + data['Gender_DescriptionN'] = this.genderDescriptionN; + data['Title_Description'] = this.titleDescription; + data['Title_DescriptionN'] = this.titleDescriptionN; + data['ZipCode'] = this.zipCode; + data['CreatedOn'] = this.createdOn; + data['CreatedBy'] = this.createdBy; + data['EditedOn'] = this.editedOn; + data['EditedBy'] = this.editedBy; + data['BiometricEnabled'] = this.biometricEnabled; + data['PreferredLanguage'] = this.preferredLanguage; + data['IsActive'] = this.isActive; + data['VidaAuthTokenID'] = this.vidaAuthTokenID; + data['VidaRefreshTokenID'] = this.vidaRefreshTokenID; + data['Password'] = this.password; + return data; + } +} diff --git a/lib/model/login/list_doctors_clinic_model.dart b/lib/model/login/list_doctors_clinic_model.dart new file mode 100644 index 0000000..96f1e80 --- /dev/null +++ b/lib/model/login/list_doctors_clinic_model.dart @@ -0,0 +1,35 @@ +class ListDoctorsClinicModel { + ListDoctorsClinicModel({ + this.setupId, + this.projectId, + this.doctorId, + this.clinicId, + this.isActive, + this.clinicName, + }); + + final dynamic setupId; + final int? projectId; + final int? doctorId; + final int? clinicId; + final bool? isActive; + final String? clinicName; + + factory ListDoctorsClinicModel.fromJson(Map json) => ListDoctorsClinicModel( + setupId: json["SetupID"], + projectId: json["ProjectID"] == null ? null : json["ProjectID"], + doctorId: json["DoctorID"] == null ? null : json["DoctorID"], + clinicId: json["ClinicID"] == null ? null : json["ClinicID"], + isActive: json["IsActive"] == null ? null : json["IsActive"], + clinicName: json["ClinicName"] == null ? null : json["ClinicName"], + ); + + Map toJson() => { + "SetupID": setupId, + "ProjectID": projectId == null ? null : projectId, + "DoctorID": doctorId == null ? null : doctorId, + "ClinicID": clinicId == null ? null : clinicId, + "IsActive": isActive == null ? null : isActive, + "ClinicName": clinicName == null ? null : clinicName, + }; +} diff --git a/lib/model/login/member_information_model.dart b/lib/model/login/member_information_model.dart new file mode 100644 index 0000000..a3f22c1 --- /dev/null +++ b/lib/model/login/member_information_model.dart @@ -0,0 +1,92 @@ +class MemberInformation { + MemberInformation({ + this.clinics, + this.doctorId, + this.email, + this.employeeId, + this.memberId, + this.memberName, + this.memberNameArabic, + this.preferredLanguage, + this.roles, + }); + + final List? clinics; + final int? doctorId; + final String? email; + final int? employeeId; + final int? memberId; + final dynamic memberName; + final dynamic memberNameArabic; + final String? preferredLanguage; + final List? roles; + + factory MemberInformation.fromJson(Map json) => MemberInformation( + clinics: json["clinics"] == null ? null : List.from(json["clinics"].map((x) => Clinic.fromJson(x))), + doctorId: json["doctorId"] == null ? null : json["doctorId"], + email: json["email"] == null ? null : json["email"], + employeeId: json["employeeId"] == null ? null : json["employeeId"], + memberId: json["memberId"] == null ? null : json["memberId"], + memberName: json["memberName"], + memberNameArabic: json["memberNameArabic"], + preferredLanguage: json["preferredLanguage"] == null ? null : json["preferredLanguage"], + roles: json["roles"] == null ? null : List.from(json["roles"].map((x) => Role.fromJson(x))), + ); + + Map toJson() => { + "clinics": clinics == null ? null : List.from(clinics!.map((x) => x.toJson())), + "doctorId": doctorId == null ? null : doctorId, + "email": email == null ? null : email, + "employeeId": employeeId == null ? null : employeeId, + "memberId": memberId == null ? null : memberId, + "memberName": memberName, + "memberNameArabic": memberNameArabic, + "preferredLanguage": preferredLanguage == null ? null : preferredLanguage, + "roles": roles == null ? null : List.from(roles!.map((x) => x.toJson())), + }; +} + + +class Clinic { + Clinic({ + this.defaultClinic, + this.id, + this.name, + }); + + final bool? defaultClinic; + final int? id; + final String? name; + + factory Clinic.fromJson(Map json) => Clinic( + defaultClinic: json["defaultClinic"] == null ? null : json["defaultClinic"], + id: json["id"] == null ? null : json["id"], + name: json["name"] == null ? null : json["name"], + ); + + Map toJson() => { + "defaultClinic": defaultClinic == null ? null : defaultClinic, + "id": id == null ? null : id, + "name": name == null ? null : name, + }; +} + +class Role { + Role({ + this.name, + this.roleId, + }); + + final String? name; + final int? roleId; + + factory Role.fromJson(Map json) => Role( + name: json["name"] == null ? null : json["name"], + roleId: json["roleId"] == null ? null : json["roleId"], + ); + + Map toJson() => { + "name": name == null ? null : name, + "roleId": roleId == null ? null : roleId, + }; +} diff --git a/lib/model/login/member_login_model.dart b/lib/model/login/member_login_model.dart new file mode 100644 index 0000000..c5dd862 --- /dev/null +++ b/lib/model/login/member_login_model.dart @@ -0,0 +1,259 @@ +// To parse this JSON data, do +// +// final memberLoginModel = memberLoginModelFromJson(jsonString); + +import 'dart:convert'; + +import 'package:hmg_flutter_template/classes/consts.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +MemberLoginModel memberLoginModelFromJson(String str) => MemberLoginModel.fromJson(json.decode(str)); + +String memberLoginModelToJson(MemberLoginModel data) => json.encode(data.toJson()); + +class MemberLoginModel { + MemberLoginModel({ + this.date, + this.languageId, + this.serviceName, + this.time, + this.androidLink, + this.authenticationTokenId, + this.data, + this.dataw, + this.dietType, + this.dietTypeId, + this.errorCode, + this.errorEndUserMessage, + this.errorEndUserMessageN, + this.errorMessage, + this.errorType, + this.foodCategory, + this.iosLink, + this.isAuthenticated, + this.mealOrderStatus, + this.mealType, + this.messageStatus, + this.numberOfResultRecords, + this.patientBlodType, + this.successMsg, + this.successMsgN, + this.vidaUpdatedResponse, + this.doctorHaveOneClinic, + this.doctorId, + this.erpSessionId, + this.listConsentMember, + this.listConsentMemberNew, + this.listDoctorProfile, + this.listDoctorsClinic, + this.listMemberInformation, + this.listModelDbConnect, + this.logInTokenId, + this.mobileNumber, + this.selectDeviceImeIbyImeiList, + this.userId, + this.zipCode, + this.isActiveCode, + this.isSmsSent, + }); + + final dynamic date; + final int? languageId; + final int? serviceName; + final dynamic time; + final dynamic androidLink; + final dynamic authenticationTokenId; + final dynamic data; + final bool? dataw; + final int? dietType; + final int? dietTypeId; + final dynamic errorCode; + final dynamic errorEndUserMessage; + final dynamic errorEndUserMessageN; + final dynamic errorMessage; + final int? errorType; + final int? foodCategory; + final dynamic iosLink; + final bool? isAuthenticated; + final int? mealOrderStatus; + final int? mealType; + final int? messageStatus; + final int? numberOfResultRecords; + final dynamic patientBlodType; + final dynamic successMsg; + final dynamic successMsgN; + final dynamic vidaUpdatedResponse; + final bool? doctorHaveOneClinic; + final int? doctorId; + final dynamic erpSessionId; + final dynamic listConsentMember; + final dynamic listConsentMemberNew; + final dynamic listDoctorProfile; + final dynamic listDoctorsClinic; + final List? listMemberInformation; + final dynamic listModelDbConnect; + final String? logInTokenId; + final String? mobileNumber; + final dynamic selectDeviceImeIbyImeiList; + final int? userId; + final String? zipCode; + final bool? isActiveCode; + final bool? isSmsSent; + + factory MemberLoginModel.fromJson(Map json) => MemberLoginModel( + date: json["Date"], + languageId: json["LanguageID"] == null ? null : json["LanguageID"], + serviceName: json["ServiceName"] == null ? null : json["ServiceName"], + time: json["Time"], + androidLink: json["AndroidLink"], + authenticationTokenId: json["AuthenticationTokenID"], + data: json["Data"], + dataw: json["Dataw"] == null ? null : json["Dataw"], + dietType: json["DietType"] == null ? null : json["DietType"], + dietTypeId: json["DietTypeID"] == null ? null : json["DietTypeID"], + errorCode: json["ErrorCode"], + errorEndUserMessage: json["ErrorEndUserMessage"], + errorEndUserMessageN: json["ErrorEndUserMessageN"], + errorMessage: json["ErrorMessage"], + errorType: json["ErrorType"] == null ? null : json["ErrorType"], + foodCategory: json["FoodCategory"] == null ? null : json["FoodCategory"], + iosLink: json["IOSLink"], + isAuthenticated: json["IsAuthenticated"] == null ? null : json["IsAuthenticated"], + mealOrderStatus: json["MealOrderStatus"] == null ? null : json["MealOrderStatus"], + mealType: json["MealType"] == null ? null : json["MealType"], + messageStatus: json["MessageStatus"] == null ? null : json["MessageStatus"], + numberOfResultRecords: json["NumberOfResultRecords"] == null ? null : json["NumberOfResultRecords"], + patientBlodType: json["PatientBlodType"], + successMsg: json["SuccessMsg"], + successMsgN: json["SuccessMsgN"], + vidaUpdatedResponse: json["VidaUpdatedResponse"], + doctorHaveOneClinic: json["DoctorHaveOneClinic"] == null ? null : json["DoctorHaveOneClinic"], + doctorId: json["DoctorID"] == null ? null : json["DoctorID"], + erpSessionId: json["ERP_SessionID"], + listConsentMember: json["List_Consent_Member"], + listConsentMemberNew: json["List_Consent_MemberNew"], + listDoctorProfile: json["List_DoctorProfile"], + listDoctorsClinic: json["List_DoctorsClinic"], + listMemberInformation: json["List_MemberInformation"] == null ? null : List.from(json["List_MemberInformation"].map((x) => ListMemberInformation.fromJson(x))), + listModelDbConnect: json["List_Model_DB_Connect"], + logInTokenId: json["LogInTokenID"] == null ? null : json["LogInTokenID"], + mobileNumber: json["MobileNumber"] == null ? null : json["MobileNumber"], + selectDeviceImeIbyImeiList: json["SELECTDeviceIMEIbyIMEI_List"], + userId: json["UserID"] == null ? null : json["UserID"], + zipCode: json["ZipCode"] == null ? null : json["ZipCode"], + isActiveCode: json["isActiveCode"] == null ? null : json["isActiveCode"], + isSmsSent: json["isSMSSent"] == null ? null : json["isSMSSent"], + ); + + Map toJson() => { + "Date": date, + "LanguageID": languageId == null ? null : languageId, + "ServiceName": serviceName == null ? null : serviceName, + "Time": time, + "AndroidLink": androidLink, + "AuthenticationTokenID": authenticationTokenId, + "Data": data, + "Dataw": dataw == null ? null : dataw, + "DietType": dietType == null ? null : dietType, + "DietTypeID": dietTypeId == null ? null : dietTypeId, + "ErrorCode": errorCode, + "ErrorEndUserMessage": errorEndUserMessage, + "ErrorEndUserMessageN": errorEndUserMessageN, + "ErrorMessage": errorMessage, + "ErrorType": errorType == null ? null : errorType, + "FoodCategory": foodCategory == null ? null : foodCategory, + "IOSLink": iosLink, + "IsAuthenticated": isAuthenticated == null ? null : isAuthenticated, + "MealOrderStatus": mealOrderStatus == null ? null : mealOrderStatus, + "MealType": mealType == null ? null : mealType, + "MessageStatus": messageStatus == null ? null : messageStatus, + "NumberOfResultRecords": numberOfResultRecords == null ? null : numberOfResultRecords, + "PatientBlodType": patientBlodType, + "SuccessMsg": successMsg, + "SuccessMsgN": successMsgN, + "VidaUpdatedResponse": vidaUpdatedResponse, + "DoctorHaveOneClinic": doctorHaveOneClinic == null ? null : doctorHaveOneClinic, + "DoctorID": doctorId == null ? null : doctorId, + "ERP_SessionID": erpSessionId, + "List_Consent_Member": listConsentMember, + "List_Consent_MemberNew": listConsentMemberNew, + "List_DoctorProfile": listDoctorProfile, + "List_DoctorsClinic": listDoctorsClinic, + "List_MemberInformation": listMemberInformation == null ? null : List.from(listMemberInformation!.map((x) => x.toJson())), + "List_Model_DB_Connect": listModelDbConnect, + "LogInTokenID": logInTokenId == null ? null : logInTokenId, + "MobileNumber": mobileNumber == null ? null : mobileNumber, + "SELECTDeviceIMEIbyIMEI_List": selectDeviceImeIbyImeiList, + "UserID": userId == null ? null : userId, + "ZipCode": zipCode == null ? null : zipCode, + "isActiveCode": isActiveCode == null ? null : isActiveCode, + "isSMSSent": isSmsSent == null ? null : isSmsSent, + }; + + static Future getFromPrefs() async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + String decodedJson = prefs.getString(SharedPrefsConsts.memberModel) ?? ""; + return MemberLoginModel.fromJson(jsonDecode(decodedJson)); + } + + static void saveToPrefs(String json) async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + await prefs.setString(SharedPrefsConsts.memberModel, json); + } +} + +class ListMemberInformation { + ListMemberInformation({ + this.setupId, + this.memberId, + this.memberName, + this.memberNameN, + this.preferredLang, + this.pin, + this.saltHash, + this.referenceId, + this.employeeId, + this.roleId, + this.projectid, + }); + + final dynamic setupId; + final int? memberId; + final String? memberName; + final dynamic memberNameN; + final String? preferredLang; + final dynamic pin; + final dynamic saltHash; + final int? referenceId; + final int? employeeId; + final int? roleId; + final int? projectid; + + factory ListMemberInformation.fromJson(Map json) => ListMemberInformation( + setupId: json["SetupID"], + memberId: json["MemberID"] == null ? null : json["MemberID"], + memberName: json["MemberName"] == null ? null : json["MemberName"], + memberNameN: json["MemberNameN"], + preferredLang: json["PreferredLang"] == null ? null : json["PreferredLang"], + pin: json["PIN"], + saltHash: json["SaltHash"], + referenceId: json["ReferenceID"] == null ? null : json["ReferenceID"], + employeeId: json["EmployeeID"] == null ? null : json["EmployeeID"], + roleId: json["RoleID"] == null ? null : json["RoleID"], + projectid: json["projectid"] == null ? null : json["projectid"], + ); + + Map toJson() => { + "SetupID": setupId, + "MemberID": memberId == null ? null : memberId, + "MemberName": memberName == null ? null : memberName, + "MemberNameN": memberNameN, + "PreferredLang": preferredLang == null ? null : preferredLang, + "PIN": pin, + "SaltHash": saltHash, + "ReferenceID": referenceId == null ? null : referenceId, + "EmployeeID": employeeId == null ? null : employeeId, + "RoleID": roleId == null ? null : roleId, + "projectid": projectid == null ? null : projectid, + }; +} diff --git a/lib/model/login/project_info_model.dart b/lib/model/login/project_info_model.dart new file mode 100644 index 0000000..c8168f0 --- /dev/null +++ b/lib/model/login/project_info_model.dart @@ -0,0 +1,23 @@ +class ProjectInfoModel { + ProjectInfoModel({ + this.facilityGroupId, + this.facilityId, + this.facilityName, + }); + + final String? facilityGroupId; + final int? facilityId; + final String? facilityName; + + factory ProjectInfoModel.fromJson(Map json) => ProjectInfoModel( + facilityGroupId: json["facilityGroupId"] == null ? null : json["facilityGroupId"], + facilityId: json["facilityId"] == null ? null : json["facilityId"], + facilityName: json["facilityName"] == null ? null : json["facilityName"], + ); + + Map toJson() => { + "facilityGroupId": facilityGroupId == null ? null : facilityGroupId, + "facilityId": facilityId == null ? null : facilityId, + "facilityName": facilityName == null ? null : facilityName, + }; +} diff --git a/lib/provider/base_vm.dart b/lib/provider/base_vm.dart new file mode 100644 index 0000000..cf0c34b --- /dev/null +++ b/lib/provider/base_vm.dart @@ -0,0 +1,24 @@ + +import 'package:flutter/material.dart'; +import 'package:hmg_flutter_template/classes/enums.dart'; + +class BaseViewModel extends ChangeNotifier { + + ViewState _state = ViewState.idle; + bool isInternetConnection = true; + + ViewState get state => _state; + + String error = ""; + + //TODO add the user login model when we need it + void setOnlyState(ViewState viewState) { + _state = viewState; + } + + void setState(ViewState viewState) { + _state = viewState; + notifyListeners(); + } + +} diff --git a/lib/provider/dashboard_provider_model.dart b/lib/provider/dashboard_provider_model.dart new file mode 100644 index 0000000..639c0ce --- /dev/null +++ b/lib/provider/dashboard_provider_model.dart @@ -0,0 +1,35 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:hmg_flutter_template/model/base/generic_response_model2.dart'; +import 'package:hmg_flutter_template/provider/base_vm.dart'; +import 'package:hmg_flutter_template/services/api_repo/dashboard_api_repo.dart'; +import 'package:injector/injector.dart'; + +import '../classes/utils.dart'; +import '../main.dart'; + +/// Mix-in [DiagnosticableTreeMixin] to have access to [debugFillProperties] for the devtool +// ignore: prefer_mixin +class DashboardProviderModel extends BaseViewModel { + final IDashboardApiRepo _loginApiRepo = Injector.appInstance.get(); + + Future getDocProfile() async { + try { + Utils.showLoading(); + + // Utils.showToast(deviceInfo.length.toString()); + GenericResponseModel2 docProfileModel = await _loginApiRepo.getDoctorProfile(); + appState.doctorProfile = docProfileModel; + await _loginApiRepo.insertDoctorProfile(); + Utils.hideLoading(); + return docProfileModel; + } catch (e) { + Utils.hideLoading(); + Utils.handleException(e, navigatorKey.currentContext!, (msg) { + Utils.confirmDialog(navigatorKey.currentContext!, msg); + }); + } + return null; + } +} diff --git a/lib/provider/helper/provider_helper.dart b/lib/provider/helper/provider_helper.dart new file mode 100644 index 0000000..9981f63 --- /dev/null +++ b/lib/provider/helper/provider_helper.dart @@ -0,0 +1,46 @@ +import 'package:flutter/widgets.dart'; + +enum _Action { + increment, + decrement, +} + +class MyStore extends ValueNotifier { + MyStore() : super(0); + + void increment() => value++; + + void decrement() => value--; +} + +class Bar {} + +class Initial implements Bar {} + +class Loading implements Bar {} + +class Error implements Bar { + Error(this.err); + + final Object err; +} + +class Loaded implements Bar { + Loaded(this.value); + + final int value; +} + +class Foo extends ValueNotifier { + Foo() : super(Initial()); + + Future fetch() async { + value = Loading(); + try { + final result = await Future.delayed(Duration(seconds: 1)); + value = Loaded(result); + } catch (err) { + value = Error(err); + } + } +} diff --git a/lib/provider/login_provider_model.dart b/lib/provider/login_provider_model.dart new file mode 100644 index 0000000..994218a --- /dev/null +++ b/lib/provider/login_provider_model.dart @@ -0,0 +1,289 @@ +import 'dart:convert'; + +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:hmg_flutter_template/classes/consts.dart'; +import 'package:hmg_flutter_template/classes/enums.dart'; +import 'package:hmg_flutter_template/classes/utils.dart'; +import 'package:hmg_flutter_template/config/routes.dart'; +import 'package:hmg_flutter_template/generated/locale_keys.g.dart'; +import 'package:hmg_flutter_template/main.dart'; +import 'package:hmg_flutter_template/model/base/generic_response_model.dart'; +import 'package:hmg_flutter_template/model/base/generic_response_model2.dart'; +import 'package:hmg_flutter_template/model/base/post_params_model.dart'; +import 'package:hmg_flutter_template/model/login/imei_details_model.dart'; +import 'package:hmg_flutter_template/model/login/member_login_model.dart'; +import 'package:hmg_flutter_template/model/login/project_info_model.dart'; +import 'package:hmg_flutter_template/provider/base_vm.dart'; +import 'package:hmg_flutter_template/services/api_repo/login_api_repo.dart'; +import 'package:hmg_flutter_template/widgets/dialogs/otp_dialog.dart'; +import 'package:http/http.dart'; +import 'package:injector/injector.dart'; +import 'package:local_auth/auth_strings.dart'; +import 'package:local_auth/local_auth.dart'; + +class LoginProviderModel extends BaseViewModel { + //UI variables + late LocalAuthentication auth; + late bool isFaceBioAvailable, isFingerBioAvailable; + late List _availableBiometrics; + + //API's variables + late List assignedBranches; + final ILoginApiRepo _loginApiRepo = Injector.appInstance.get(); + + LoginProviderModel() { + setOnlyState(ViewState.hide); + checkBiosAvailblity(); + } + + checkBiosAvailblity() async { + auth = LocalAuthentication(); + await _getAvailableBiometrics(); + isFaceBioAvailable = checkBiometricIsAvailable(BiometricType.face); + isFingerBioAvailable = checkBiometricIsAvailable(BiometricType.fingerprint); + } + + /// check specific biometric if it available or not + bool checkBiometricIsAvailable(BiometricType biometricType) { + bool isAvailable = false; + for (int i = 0; i < _availableBiometrics.length; i++) { + if (biometricType == _availableBiometrics[i]) { + isAvailable = true; + break; + } + } + return isAvailable; + } + + /// get all available biometric on the device for local Auth service + Future _getAvailableBiometrics() async { + try { + _availableBiometrics = await auth.getAvailableBiometrics(); + print(_availableBiometrics); + } on PlatformException catch (e) { + // AppToast.showErrorToast(message: e.message); + print("_getAvailableBiometrics"); + print(e); + } + } + + Future loginWithFaceIDAndBiometrics() async { + IOSAuthMessages iosStrings = + const IOSAuthMessages(cancelButton: 'cancel', goToSettingsButton: 'settings', goToSettingsDescription: 'Please set up your Touch ID.', lockOut: 'Please re-enable your Touch ID'); + bool authenticated = false; + try { + authenticated = await auth.authenticate(localizedReason: 'Scan your fingerprint to authenticate', useErrorDialogs: true, stickyAuth: true, biometricOnly: true, iOSAuthStrings: iosStrings); + } on PlatformException catch (e) { + print(e); + Utils.showToast("Please enable your Touch or Face ID"); + } + return authenticated; + } + + int getLoginMethodId(AuthMethodTypes authMethodTypes) { + switch (authMethodTypes) { + case AuthMethodTypes.sms: + return 1; + case AuthMethodTypes.whatsApp: + return 2; + case AuthMethodTypes.fingerPrint: + return 3; + case AuthMethodTypes.faceID: + return 4; + default: + return 1; + } + } + + String getType(type) { + switch (type) { + case 1: + return LocaleKeys.sms.tr(); + case 3: + return LocaleKeys.fingerPrint.tr(); + case 4: + return LocaleKeys.face.tr(); + case 2: + return LocaleKeys.whatsapp.tr(); + default: + return LocaleKeys.sms.tr(); + } + } + + // LoginType getDirectLoginType(type) { + // switch (type) { + // case 1: + // return LoginType.DIRECT_LOGIN; + // case 3: + // return LocaleKeys.fingerPrint.tr(); + // case 4: + // return LocaleKeys.face.tr(); + // case 2: + // return LocaleKeys.whatsapp.tr(); + // default: + // return LocaleKeys.sms.tr(); + // } + // } + + //API Calls + checkLastSession() async { + try { + Utils.showLoading(); + List deviceInfo = await _loginApiRepo.getDeviceInfoByIMEI(); + if (deviceInfo.isNotEmpty) getSession(deviceInfo.first); + Utils.showToast(deviceInfo.length.toString()); + Utils.hideLoading(); + } catch (e) { + Utils.hideLoading(); + } + } + + getAssignedBranches(String userId) async { + setState(ViewState.busy); + assignedBranches = await _loginApiRepo.getProjectInfo(userId); + print(assignedBranches.length); + setState(ViewState.idle); + } + + Future performLogin(String userID, String password, int branchId) async { + try { + Utils.showLoading(); + MemberLoginModel memberLogin = await _loginApiRepo.memberLogin(userID, password, branchId); + // Utils.showToast(deviceInfo.length.toString()); + appState.memberBeforeLogin = memberLogin; + appState.projectID = branchId; + appState.logInTokenID = memberLogin.logInTokenId; + appState.lastLoginTyp = -1; + Utils.hideLoading(); + Navigator.pushReplacementNamed(navigatorKey.currentContext!, AppRoutes.loginMethodsPage, arguments: LoginType.FROM_LOGIN); + return true; + } catch (e) { + Utils.hideLoading(); + Utils.handleException(e, navigatorKey.currentContext!, (msg) { + Utils.confirmDialog(navigatorKey.currentContext!, msg); + }); + return false; + } + } + + Future sendActivationCode(MemberLoginModel memberLoginModel, int facilityID, int sendOtpType, LoginType loginType, {bool isNeedBinding = true}) async { + try { + Utils.showLoading(isNeedBinding: isNeedBinding); + GenericResponseModel memberLogin; + + if (loginType == LoginType.FROM_LOGIN) { + memberLogin = await _loginApiRepo.sendActivationCode(memberLoginModel, facilityID, sendOtpType); + appState.logInTokenID = memberLogin.logInTokenId.toString(); + Utils.hideLoading(); + startSMSService(sendOtpType, false); + } else { + if (loginType == LoginType.SILENT_LOGIN) { + memberLogin = await _loginApiRepo.sendActivationCodeForSlientLogin(memberLoginModel, facilityID, sendOtpType); + appState.logInTokenID = memberLogin.logInTokenId.toString(); + checkActivationCode("0000", sendOtpType, true); + } else { + memberLogin = await _loginApiRepo.sendActivationCodeForSlientLogin(memberLoginModel, facilityID, sendOtpType); + appState.logInTokenID = memberLogin.logInTokenId.toString(); + Utils.hideLoading(); + startSMSService(sendOtpType, true); + } + } + + return memberLogin; + } catch (e) { + Utils.hideLoading(); + Utils.handleException(e, navigatorKey.currentContext!, (msg) { + Utils.confirmDialog(navigatorKey.currentContext!, msg); + }); + } + return null; + } + + Future checkActivationCode(String activationCode, int sendOtpType, bool isFromSilentLogin) async { + try { + if (!isFromSilentLogin) Utils.showLoading(); + GenericResponseModel memberLogin = await _loginApiRepo.checkActivationCode(activationCode, sendOtpType, isFromSilentLogin); + Utils.hideLoading(); + setSession(memberLogin); + Navigator.pushReplacementNamed(navigatorKey.currentContext!, AppRoutes.dashboard); + return memberLogin; + } catch (e) { + Utils.hideLoading(); + Utils.handleException(e, navigatorKey.currentContext!, (msg) { + Utils.confirmDialog(navigatorKey.currentContext!, msg); + }); + } + return null; + } + + startSMSService(int sendOtpType, bool isFromSilentLogin) { + OtpDialog( + type: sendOtpType, + mobileNo: appState.memberBeforeLogin!.mobileNumber, + onSuccess: (String otpCode, TextEditingController pinPut) { + Navigator.pop(navigatorKey.currentContext!); + Utils.showLoading(); + checkActivationCode(otpCode, sendOtpType, isFromSilentLogin); + Utils.hideLoading(); + }, + onFailure: () => Navigator.pop(navigatorKey.currentContext!), + onResendCode: () {}, + ).displayDialog(navigatorKey.currentContext!); + } + + setSession(GenericResponseModel response) { + appState.vidaAuthTokenID = response.vidaAuthTokenId; + appState.vidaRefreshTokenID = response.vidaRefreshTokenId; + appState.authenticationTokenID = response.authenticationTokenId; + appState.listDoctorsClinic = response.listDoctorsClinic; + appState.projectID = response.listDoctorsClinic!.first.projectId!; + appState.clinicId = response.listDoctorsClinic!.first.clinicId!; + appState.employeeId = response.memberInformation!.employeeId; + appState.isLogged = true; + PostParamsModel? paramsModel = appState.postParamsObject; + paramsModel!.doctorId = appState.employeeId; + paramsModel.editedBy = appState.employeeId; + paramsModel.projectId = appState.projectID; + paramsModel.clinicId = appState.clinicId; + MemberLoginModel.saveToPrefs(jsonEncode(appState.memberBeforeLogin!.toJson())); + Utils.saveIntFromPrefs(SharedPrefsConsts.username, appState.doctorUserId ?? 0); + Utils.saveStringFromPrefs(SharedPrefsConsts.password, appState.password ?? ""); + Utils.saveStringFromPrefs(SharedPrefsConsts.logInTokenID, appState.logInTokenID ?? ""); + Utils.saveStringFromPrefs(SharedPrefsConsts.vidaAuthTokenID, appState.vidaAuthTokenID ?? ""); + Utils.saveStringFromPrefs(SharedPrefsConsts.vidaRefreshTokenID, appState.vidaRefreshTokenID ?? ""); + Utils.saveStringFromPrefs(SharedPrefsConsts.authenticationTokenID, appState.authenticationTokenID ?? ""); + Utils.saveIntFromPrefs(SharedPrefsConsts.projectID, appState.projectID); + Utils.saveIntFromPrefs(SharedPrefsConsts.clinicId, appState.clinicId); + Utils.saveStringFromPrefs(SharedPrefsConsts.lastLoginDate, Utils.getMonthNamedFormat(DateTime.now())); + } + + getSession(GetIMEIDetailsModel model) async { + int doctorUserId = await Utils.getIntFromPrefs(SharedPrefsConsts.username); + if (model.doctorID == doctorUserId) { + String password = await Utils.getStringFromPrefs(SharedPrefsConsts.password); + String logInTokenID = await Utils.getStringFromPrefs(SharedPrefsConsts.logInTokenID); + String authenticationTokenID = await Utils.getStringFromPrefs(SharedPrefsConsts.authenticationTokenID); + int clinicId = await Utils.getIntFromPrefs(SharedPrefsConsts.clinicId); + String lastLoginDate = await Utils.getStringFromPrefs(SharedPrefsConsts.lastLoginDate); + appState.memberBeforeLogin = await MemberLoginModel.getFromPrefs(); + // print(appState.memberBeforeLogin!.toJson()); + + appState.lastLoginTyp = -1; + appState.doctorUserId = doctorUserId; + appState.employeeId = appState.memberBeforeLogin!.listMemberInformation!.first.employeeId; + appState.password = password; + appState.logInTokenID = logInTokenID; + appState.vidaAuthTokenID = model.vidaAuthTokenID; + appState.vidaRefreshTokenID = model.vidaRefreshTokenID; + appState.authenticationTokenID = authenticationTokenID; + appState.projectID = model.projectID ?? 0; + appState.clinicId = clinicId; + appState.lastLoginImeiDate = model; + appState.lastLoginDate = lastLoginDate; + Navigator.pushReplacementNamed(navigatorKey.currentContext!, AppRoutes.loginMethodsPage, arguments: LoginType.SILENT_LOGIN); + } + } +} diff --git a/lib/services/api_client.dart b/lib/services/api_client.dart new file mode 100644 index 0000000..cce3a30 --- /dev/null +++ b/lib/services/api_client.dart @@ -0,0 +1,271 @@ +import 'dart:async'; +import 'dart:convert'; +import 'dart:io'; + +import 'package:flutter/foundation.dart'; +import 'package:http/http.dart'; +import 'package:http/io_client.dart'; +import 'package:hmg_flutter_template/config/app_state.dart'; +import 'package:hmg_flutter_template/exceptions/api_exception.dart'; +import 'package:hmg_flutter_template/main.dart'; +// ignore_for_file: avoid_annotating_with_dynamic + +typedef FactoryConstructor = U Function(dynamic); + +class APIError { + int? errorCode; + String? errorMessage; + + APIError(this.errorCode, this.errorMessage); + + Map toJson() => {'errorCode': errorCode, 'errorMessage': errorMessage}; + + @override + String toString() { + return jsonEncode(this); + } +} + +APIException _throwAPIException(Response response) { + switch (response.statusCode) { + case 200: + APIError? apiError; + if (response.body != null && response.body.isNotEmpty) { + var jsonError = jsonDecode(response.body); + print(jsonError); + apiError = APIError(jsonError['ErrorCode'], jsonError['ErrorMessage']); + } + return APIException(APIException.BAD_REQUEST, error: apiError); + case 400: + APIError? apiError; + if (response.body != null && response.body.isNotEmpty) { + var jsonError = jsonDecode(response.body); + apiError = APIError(jsonError['ErrorCode'], jsonError['ErrorMessage']); + } + return APIException(APIException.BAD_REQUEST, error: apiError); + case 401: + return APIException(APIException.UNAUTHORIZED); + case 403: + return APIException(APIException.FORBIDDEN); + case 404: + return APIException(APIException.NOT_FOUND); + case 500: + return APIException(APIException.INTERNAL_SERVER_ERROR); + case 444: + var downloadUrl = response.headers["location"]; + return APIException(APIException.UPGRADE_REQUIRED, arguments: downloadUrl); + default: + return APIException(APIException.OTHER); + } +} + +abstract class IApiClient { + Future postJsonForObject(FactoryConstructor factoryConstructor, String url, T jsonObject, + {String? token, Map? queryParameters, Map? headers, int retryTimes = 0, bool isFormData = false}); + + Future postJsonForResponse(String url, T jsonObject, {String? token, Map? queryParameters, Map? headers, int retryTimes = 0, bool isFormData = false}); + + Future getJsonForResponse(String url, {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}); + + void setHomeUrl(String url); +} + +class ApiClient implements IApiClient { + // static final ApiClient _instance = ApiClient._internal(); + + // ApiClient._internal(); + + // factory ApiClient() => _instance; + + @override + Future postJsonForObject(FactoryConstructor factoryConstructor, String url, T jsonObject, + {String? token, Map? queryParameters, Map? headers, int retryTimes = 0, bool isFormData = false}) async { + var _headers = {'Accept': 'application/json'}; + if (headers != null && headers.isNotEmpty) { + _headers.addAll(headers); + } + if (!kReleaseMode) { + print("Url:$url"); + var bodyJson = json.encode(jsonObject); + print("body:$bodyJson"); + } + var response = await postJsonForResponse(url, jsonObject, token: token, queryParameters: queryParameters, headers: _headers, retryTimes: retryTimes, isFormData: isFormData); + // try { + if (!kReleaseMode) { + logger.i("res: " + response.body); + } + var jsonData = jsonDecode(response.body); + if (jsonData["IsAuthenticated"] != null) { + AppState().setIsAuthenticated = jsonData["IsAuthenticated"]; + } + if (jsonData["ErrorMessage"] == null) { + return factoryConstructor(jsonData); + } else { + APIError? apiError; + apiError = APIError(jsonData['ErrorCode'], jsonData['ErrorEndUserMessage']); + throw APIException(APIException.BAD_REQUEST, error: apiError); + } + // } catch (ex) { + // if (ex is APIException) { + // rethrow; + // } else { + // throw APIException(APIException.BAD_RESPONSE_FORMAT, arguments: ex); + // } + // } + } + + @override + Future postJsonForResponse(String url, T jsonObject, + {String? token, Map? queryParameters, Map? headers, int retryTimes = 0, bool isFormData = false}) async { + String? requestBody; + late Map stringObj; + if (jsonObject != null) { + requestBody = jsonEncode(jsonObject); + if (headers == null) { + headers = {'Content-Type': 'application/json'}; + } else { + headers['Content-Type'] = 'application/json'; + } + } + + if (isFormData) { + headers = {'Content-Type': 'application/x-www-form-urlencoded'}; + stringObj = ((jsonObject ?? {}) as Map).map((key, value) => MapEntry(key, value?.toString() ?? "")); + } + + return await _postForResponse(url, isFormData ? stringObj : requestBody, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes); + } + + Future _postForResponse(String url, requestBody, {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}) async { + try { + var _headers = {}; + if (token != null) { + _headers['Authorization'] = 'Bearer $token'; + } + + if (headers != null && headers.isNotEmpty) { + _headers.addAll(headers); + } + + if (queryParameters != null) { + var queryString = new Uri(queryParameters: queryParameters).query; + url = url + '?' + queryString; + } + var response = await _post(Uri.parse(url), body: requestBody, headers: _headers).timeout(Duration(seconds: 120)); + + if (response.statusCode >= 200 && response.statusCode < 300) { + return response; + } else { + throw _throwAPIException(response); + } + } on SocketException catch (e) { + if (retryTimes > 0) { + print('will retry after 3 seconds...'); + await Future.delayed(Duration(seconds: 3)); + return await _postForResponse(url, requestBody, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes - 1); + } else { + throw APIException(APIException.OTHER, arguments: e); + } + } on HttpException catch (e) { + if (retryTimes > 0) { + print('will retry after 3 seconds...'); + await Future.delayed(Duration(seconds: 3)); + return await _postForResponse(url, requestBody, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes - 1); + } else { + throw APIException(APIException.OTHER, arguments: e); + } + } on TimeoutException catch (e) { + throw APIException(APIException.TIMEOUT, arguments: e); + } on ClientException catch (e) { + if (retryTimes > 0) { + print('will retry after 3 seconds...'); + await Future.delayed(Duration(seconds: 3)); + return await _postForResponse(url, requestBody, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes - 1); + } else { + throw APIException(APIException.OTHER, arguments: e); + } + } + } + + @override + Future getJsonForResponse(String url, {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}) async { + if (headers == null) { + headers = {'Content-Type': 'application/json'}; + } else { + headers['Content-Type'] = 'application/json'; + } + return await _getForResponse(url, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes); + } + + Future _getForResponse(String url, {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}) async { + try { + var _headers = {}; + if (token != null) { + _headers['Authorization'] = 'Bearer $token'; + } + + if (headers != null && headers.isNotEmpty) { + _headers.addAll(headers); + } + + if (queryParameters != null) { + var queryString = new Uri(queryParameters: queryParameters).query; + url = url + '?' + queryString; + } + var response = await _get(Uri.parse(url), headers: _headers).timeout(Duration(seconds: 60)); + + if (response.statusCode >= 200 && response.statusCode < 300) { + return response; + } else { + throw _throwAPIException(response); + } + } on SocketException catch (e) { + if (retryTimes > 0) { + print('will retry after 3 seconds...'); + await Future.delayed(Duration(seconds: 3)); + return await _getForResponse(url, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes - 1); + } else { + throw APIException(APIException.OTHER, arguments: e); + } + } on HttpException catch (e) { + if (retryTimes > 0) { + print('will retry after 3 seconds...'); + await Future.delayed(Duration(seconds: 3)); + return await _getForResponse(url, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes - 1); + } else { + throw APIException(APIException.OTHER, arguments: e); + } + } on TimeoutException catch (e) { + throw APIException(APIException.TIMEOUT, arguments: e); + } on ClientException catch (e) { + if (retryTimes > 0) { + print('will retry after 3 seconds...'); + await Future.delayed(Duration(seconds: 3)); + return await _getForResponse(url, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes - 1); + } else { + throw APIException(APIException.OTHER, arguments: e); + } + } + } + + Future _get(url, {Map? headers}) => _withClient((client) => client.get(url, headers: headers)); + + bool _certificateCheck(X509Certificate cert, String host, int port) => true; + + Future _withClient(Future Function(Client) fn) async { + var httpClient = HttpClient()..badCertificateCallback = _certificateCheck; + var client = IOClient(httpClient); + try { + return await fn(client); + } finally { + client.close(); + } + } + + Future _post(url, {Map? headers, body, Encoding? encoding}) => _withClient((client) => client.post(url, headers: headers, body: body, encoding: encoding)); + + @override + void setHomeUrl(String url) { + // TODO: implement setHomeUrl + } +} diff --git a/lib/services/api_repo/dashboard_api_repo.dart b/lib/services/api_repo/dashboard_api_repo.dart new file mode 100644 index 0000000..dd2ac28 --- /dev/null +++ b/lib/services/api_repo/dashboard_api_repo.dart @@ -0,0 +1,121 @@ +import 'dart:convert'; + +import 'package:hmg_flutter_template/exceptions/api_exception.dart'; +import 'package:hmg_flutter_template/main.dart'; +import 'package:hmg_flutter_template/model/base/generic_response_model2.dart'; +import 'package:hmg_flutter_template/model/login/member_login_model.dart'; +import 'package:hmg_flutter_template/model/login/project_info_model.dart'; +import 'package:hmg_flutter_template/services/api_client.dart'; +import 'package:hmg_flutter_template/classes/consts.dart'; +import 'package:hmg_flutter_template/model/base/generic_response_model.dart'; +import 'package:hmg_flutter_template/model/login/imei_details_model.dart'; +import 'package:hmg_flutter_template/services/firebase_service.dart'; +import 'package:injector/injector.dart'; + +abstract class IDashboardApiRepo { + Future getDoctorProfile(); + + Future insertDoctorProfile(); +} + +class DashboardApiRepo implements IDashboardApiRepo { + @override + Future getDoctorProfile() async { + String url = "${ApiConsts.baseUrlServices}Doctors.svc/REST/GetDocProfiles"; + Map postParams = {}; + postParams.addAll(appState.postParamsJson); + postParams["ProjectID"] = appState.projectID; + postParams["ClinicID"] = appState.clinicId; + postParams["doctorID"] = appState.memberBeforeLogin!.doctorId; + postParams["IsRegistered"] = true; + postParams["License"] = true; + postParams["TokenID"] = appState.authenticationTokenID; + postParams["DoctorID"] = appState.memberBeforeLogin!.doctorId; + postParams["PatientOutSA"] = false; + + GenericResponseModel2 response; + try { + response = await Injector.appInstance.get().postJsonForObject((json) => GenericResponseModel2.fromJson(json), url, postParams); + } catch (e) { + rethrow; + } + return response; + } + + @override + Future insertDoctorProfile() async { + String url = "${ApiConsts.baseUrlServices}DoctorApplication.svc/REST/DoctorApp_InsertOrUpdateDeviceDetails"; + Map postParams = {}; + postParams.addAll(appState.postParamsJson); + postParams["IMEI"] = appState.imei; + postParams["LogInTypeID"] = appState.lastLoginTyp; + postParams["OutSA"] = null; + postParams["MobileNo"] = appState.doctorProfile!.doctorProfileList!.first.doctorMobileNumber; + postParams["IdentificationNo"] = null; + postParams["DoctorID"] = appState.doctorUserId; + postParams["DoctorName"] = appState.doctorProfile!.doctorProfileList!.first.doctorName; + postParams["DoctorNameN"] = appState.doctorProfile!.doctorProfileList!.first.doctorNameN; + postParams["ClinicID"] = appState.doctorProfile!.doctorProfileList!.first.clinicId; + postParams["ClinicDescription"] = appState.doctorProfile!.doctorProfileList!.first.clinicDescription; + postParams["ClinicDescriptionN"] = appState.doctorProfile!.doctorProfileList!.first.clinicDescriptionN; + postParams["ProjectName"] = appState.doctorProfile!.doctorProfileList!.first.projectName; + postParams["GenderDescription"] = appState.doctorProfile!.doctorProfileList!.first.genderDescription; + postParams["GenderDescriptionN"] = appState.doctorProfile!.doctorProfileList!.first.genderDescriptionN; + postParams["TitleDescription"] = appState.doctorProfile!.doctorProfileList!.first.titleDescription; + postParams["Title_DescriptionN"] = appState.doctorProfile!.doctorProfileList!.first.titleDescriptionN; + postParams["BioMetricEnabled"] = true; + postParams["PreferredLanguage"] = null; + postParams["IsActive"] = appState.doctorProfile!.doctorProfileList!.first.isActive; + postParams["EditedBy"] = appState.doctorProfile!.doctorProfileList!.first.doctorId; + postParams["ProjectID"] = appState.doctorProfile!.doctorProfileList!.first.projectId; + postParams["TokenID"] = appState.authenticationTokenID; + postParams["LoginDoctorID"] = appState.doctorProfile!.doctorProfileList!.first.doctorId; + postParams["Password"] = appState.password; + + logger.d(jsonEncode(postParams)); + GenericResponseModel response; + try { + response = await Injector.appInstance.get().postJsonForObject((json) => GenericResponseModel.fromJson(json), url, postParams); + } catch (e) { + rethrow; + } + return null; + } +} +// { +// "IMEI": "es6V9NcpSzCXR665uSDWGo:APA91bGF_FjdOf8ZOZmw5FU7pkDfzNOvkz-IsSBRrJE6OR0ZE2lyeTxzFtvjZEajUEC_ssD6ytKNEm74lm30KpZEvPdrNgSRR8idlGrRqJ6qK2Lp2lrLtgA1OLMjkkQS1bcpvXcdnEg_", +// "LogInTypeID": 1, +// "OutSA": null, +// "MobileNo": "0553755378", +// "IdentificationNo": null, +// "DoctorID": 13777, +// "DoctorName": "EYAD ISMAIL ABU-JAYAB", +// "DoctorNameN": null, +// "ClinicID": 1, +// "ClinicDescription": "INTERNAL MEDICINE CLINIC", +// "ClinicDescriptionN": null, +// "ProjectName": "Olaya Hospital", +// "GenderDescription": "Male", +// "GenderDescriptionN": null, +// "TitleDescription": "Dr.", +// "Title_DescriptionN": null, +// "BioMetricEnabled": true, +// "PreferredLanguage": null, +// "IsActive": false, +// "EditedBy": 2477, +// "ProjectID": 12, +// "TokenID": "W7qObFELE0+VAtKJoTeq+w==", +// "LanguageID": 2, +// "stamp": "2022-11-27T10:50:25.345098", +// "IPAdress": "9.9.9.9", +// "VersionID": 9, +// "Channel": 9, +// "SessionID": "BlUSkYymTt", +// "IsLoginForDoctorApp": true, +// "PatientOutSA": false, +// "VidaAuthTokenID": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMzc3NyIsImp0aSI6IjNiM2U5MTU4LTJhNmEtNGM4MS04OTk5LWU3ZTRhYzUzMmFiOCIsImVtYWlsIjoiUndhaWQuQWxtYWxsYWhAY2xvdWRzb2x1dGlvbnMuY29tLnNhIiwiaWQiOiIxMzc3NyIsIk5hbWUiOiJSd2FpZCBGb3VkIEhhc3NhbiBBbE1hbGxhaCIsIkVtcGxveWVlSWQiOiIyNDc3IiwiRmFjaWxpdHlHcm91cElkIjoiOTE4NzciLCJGYWNpbGl0eUlkIjoiMTIiLCJQaGFyYW1jeUZhY2lsaXR5SWQiOiI1NiIsIklTX1BIQVJNQUNZX0NPTk5FQ1RFRCI6IlRydWUiLCJEb2N0b3JJZCI6IjI0NzciLCJTRVNTSU9OSUQiOiIyMDYzNDY2OCIsIkNsaW5pY0lkIjoiMSIsIm5iZiI6MTY2OTUzNTQxMSwiZXhwIjoxNjcwMzk5NDExLCJpYXQiOjE2Njk1MzU0MTF9.LkZMiDAt9F4yjbuNyMSIcZYIgct6VuPed7uPOw0PTVw", +// "VidaRefreshTokenID": "sm30FcA2iL0lJmSCAVlNJJ8e0AbfYzHxg+wMGTBSoP9VM9do55BRxjATjBtOJyo60u8tLRk9LHrmmH8Xn+B25A==", +// "Password": "Rr123456", +// "LoginDoctorID": 2477, +// "DeviceTypeID": 1 +// } diff --git a/lib/services/api_repo/login_api_repo.dart b/lib/services/api_repo/login_api_repo.dart new file mode 100644 index 0000000..2b77c3e --- /dev/null +++ b/lib/services/api_repo/login_api_repo.dart @@ -0,0 +1,169 @@ +import 'dart:convert'; + +import 'package:hmg_flutter_template/classes/utils.dart'; +import 'package:hmg_flutter_template/exceptions/api_exception.dart'; +import 'package:hmg_flutter_template/main.dart'; +import 'package:hmg_flutter_template/model/base/generic_response_model2.dart'; +import 'package:hmg_flutter_template/model/login/member_login_model.dart'; +import 'package:hmg_flutter_template/model/login/project_info_model.dart'; +import 'package:hmg_flutter_template/services/api_client.dart'; +import 'package:hmg_flutter_template/classes/consts.dart'; +import 'package:hmg_flutter_template/model/base/generic_response_model.dart'; +import 'package:hmg_flutter_template/model/login/imei_details_model.dart'; +import 'package:hmg_flutter_template/services/firebase_service.dart'; +import 'package:injector/injector.dart'; + +abstract class ILoginApiRepo { + Future> getDeviceInfoByIMEI(); + + Future> getProjectInfo(String userId); + + Future memberLogin(String userId, String password, int projectId); + + Future sendActivationCode(MemberLoginModel memberLoginModel, int facilityID, int sendOtpType); + + Future sendActivationCodeForSlientLogin(MemberLoginModel memberLoginModel, int facilityID, int sendOtpType); + + Future checkActivationCode(String activationCode, int sendOtpType, bool isFromSilentLogin); +} + +class LoginApiRepo implements ILoginApiRepo { + final IFirebaseService _firebaseService = Injector.appInstance.get(); + + @override + Future> getDeviceInfoByIMEI() async { + String url = "${ApiConsts.baseUrlServices}DoctorApplication.svc/REST/DoctorApp_GetDeviceDetailsByIMEI"; + String token = await _firebaseService.getFirebaseToke(); + logger.d("firebase_token: " + token); + appState.imei = token; + + Map postParams = {}; + postParams.addAll(appState.postParamsJson); + postParams["stamp"] = DateTime.now().toIso8601String(); + postParams["IMEI"] = appState.imei; + GenericResponseModel response; + try { + response = await Injector.appInstance.get().postJsonForObject((json) => GenericResponseModel.fromJson(json), url, postParams); + } catch (e) { + rethrow; + } + return response.listDoctorDeviceDetails ?? []; + } + + @override + Future> getProjectInfo(String userId) async { + String url = "${ApiConsts.baseUrlServices}DoctorApplication.svc/REST/GetProjectInfo"; + + Map postParams = {}; + postParams.addAll(appState.postParamsJson); + postParams["MemberID"] = "13777"; + GenericResponseModel response; + try { + response = await Injector.appInstance.get().postJsonForObject((json) => GenericResponseModel.fromJson(json), url, postParams); + } catch (e) { + rethrow; + } + return response.projectInfo ?? []; + } + + @override + Future memberLogin(String userId, String password, int projectId) async { + String url = "${ApiConsts.baseUrlServices}Sentry.svc/REST/MemberLogIN_New"; + + Map postParams = {}; + postParams.addAll(appState.postParamsJson); + postParams["UserID"] = userId; + postParams["Password"] = password; + postParams["ProjectID"] = projectId; + MemberLoginModel response; + try { + response = await Injector.appInstance.get().postJsonForObject((json) => MemberLoginModel.fromJson(json), url, postParams); + } catch (e) { + rethrow; + } + return response; + } + + @override + Future sendActivationCode(MemberLoginModel memberLoginModel, int facilityID, int sendOtpType) async { + String url = "${ApiConsts.baseUrlServices}DoctorApplication.svc/REST/SendActivationCodeForDoctorApp"; + Map postParams = {}; + + postParams.addAll(appState.postParamsJson); + postParams["MemberID"] = memberLoginModel.listMemberInformation!.first.memberId; + postParams["facilityId"] = facilityID; + postParams["OTP_SendType"] = sendOtpType.toString(); + postParams["LoginDoctorID"] = memberLoginModel.doctorId; + postParams["DoctorID"] = memberLoginModel.doctorId; + postParams["TokenID"] = appState.logInTokenID; + GenericResponseModel response; + print(jsonEncode(postParams)); + // return GenericResponseModel(); + try { + response = await Injector.appInstance.get().postJsonForObject((json) => GenericResponseModel.fromJson(json), url, postParams); + + } catch (e) { + rethrow; + } + return response; + } + + @override + Future sendActivationCodeForSlientLogin(MemberLoginModel memberLoginModel, int facilityID, int sendOtpType) async { + String url = "${ApiConsts.baseUrlServices}DoctorApplication.svc/REST/SendVerificationCode"; + Map postParams = {}; + + postParams.addAll(appState.postParamsJson); + postParams["MobileNumber"] = memberLoginModel.mobileNumber; + postParams["ZipCode"] = memberLoginModel.zipCode; + postParams["IsMobileFingerPrint"] = 1; + postParams["IMEI"] = appState.imei; + postParams["LoginDoctorID"] = memberLoginModel.doctorId; + postParams["DoctorID"] = memberLoginModel.doctorId; + postParams["MemberID"] = memberLoginModel.listMemberInformation!.first.memberId; + postParams["facilityId"] = facilityID; + postParams["OTP_SendType"] = sendOtpType; + postParams["LoginDoctorID"] = memberLoginModel.doctorId; + postParams["DoctorID"] = memberLoginModel.doctorId; + postParams["TokenID"] = appState.logInTokenID; + GenericResponseModel response; + print(jsonEncode(postParams)); + // return GenericResponseModel(); + try { + response = await Injector.appInstance.get().postJsonForObject((json) => GenericResponseModel.fromJson(json), url, postParams); + } catch (e) { + rethrow; + } + return response; + } + + @override + Future checkActivationCode(String activationCode, int sendOtpType, bool isFromSilentLogin) async { + String url = "${ApiConsts.baseUrlServices}DoctorApplication.svc/REST/CheckActivationCodeForDoctorApp"; + Map postParams = {}; + MemberLoginModel memberLoginModel = appState.memberBeforeLogin ?? MemberLoginModel(); + postParams.addAll(appState.postParamsJson); + postParams["MobileNumber"] = memberLoginModel.mobileNumber; + postParams["ProjectID"] = appState.projectID; + postParams["LogInTokenID"] = appState.logInTokenID; + postParams["activationCode"] = activationCode; + postParams["OTP_SendType"] = sendOtpType; + postParams["facilityId"] = appState.projectID; + postParams["MemberID"] = appState.memberBeforeLogin!.listMemberInformation!.first.memberId; + postParams["Password"] = appState.password; + postParams["IsForSilentLogin"] = isFromSilentLogin; + postParams["LoginDoctorID"] = appState.memberBeforeLogin?.doctorId; + postParams["DoctorID"] = appState.memberBeforeLogin?.doctorId; + postParams["IMEI"] = appState.imei; + postParams["ZipCode"] = appState.memberBeforeLogin?.zipCode; + postParams["TokenID"] = appState.logInTokenID; + + GenericResponseModel response; + try { + response = await Injector.appInstance.get().postJsonForObject((json) => GenericResponseModel.fromJson(json), url, postParams); + } catch (e) { + rethrow; + } + return response; + } +} diff --git a/lib/services/api_repo/patient_api_repo.dart b/lib/services/api_repo/patient_api_repo.dart new file mode 100644 index 0000000..4ca2310 --- /dev/null +++ b/lib/services/api_repo/patient_api_repo.dart @@ -0,0 +1,80 @@ +import 'dart:convert'; + +import 'package:hmg_flutter_template/classes/consts.dart'; +import 'package:hmg_flutter_template/main.dart'; +import 'package:hmg_flutter_template/model/base/generic_response_model.dart'; +import 'package:hmg_flutter_template/services/api_client.dart'; +import 'package:injector/injector.dart'; + +abstract class IPatientApiRepo { + Future getPatientInfo(int patientID); + + Future getVitalSigns({int? patientID, int? patientTypeID, int? inOutPatientType, bool isDentalAllowedBackend, int? doctorID, int setupID, int? patientType}); +} + +class PatientApiRepo implements IPatientApiRepo { + @override + Future getPatientInfo(int patientID) async { + String url = "${ApiConsts.baseUrlServices}Patients.svc/REST/GetPatientInformation_PRM"; + Map postParams = {}; + + postParams.addAll(appState.postParamsJson); + postParams["FirstName"] = "0"; + postParams["MiddleName"] = "0"; + postParams["LastName"] = "0"; + postParams["PatientMobileNumber"] = "0"; + postParams["PatientIdentificationID"] = "0"; + postParams["PatientID"] = patientID; + postParams["From"] = "0"; + postParams["To"] = "0"; + postParams["SearchType"] = 1; + postParams["MobileNo"] = ""; + postParams["IdentificationNo"] = "0"; + postParams["NursingStationID"] = "0"; + GenericResponseModel response; + print(jsonEncode(postParams)); + // return GenericResponseModel(); + try { + response = await Injector.appInstance.get().postJsonForObject((json) => GenericResponseModel.fromJson(json), url, postParams); + } catch (e) { + rethrow; + } + return response; + } + + @override + Future getVitalSigns({int? patientID, int? patientTypeID, int? inOutPatientType, bool? isDentalAllowedBackend, int? doctorID, int? setupID, int? patientType}) async { + String url = "${ApiConsts.baseUrlServices}Doctors.svc/REST/Doctor_GetPatientVitalSign"; + Map postParams = {}; + + // { + // "PatientID": 12, + // "PatientTypeID": 1, + // "InOutPatientType": 0, + // "isDentalAllowedBackend": false, + // "DoctorID": 2477, + // "SetupID": "91877", + // "PatientType": 1, + // } + + postParams.addAll(appState.postParamsJson); + postParams["PatientID"] = patientID; + postParams["PatientTypeID"] = patientTypeID; + postParams["InOutPatientType"] = inOutPatientType; + postParams["isDentalAllowedBackend"] = isDentalAllowedBackend; + postParams["DoctorID"] = doctorID; + postParams["SetupID"] = setupID; + postParams["PatientType"] = patientType; + postParams.remove("ProjectID"); + postParams.remove("ClinicID"); + + GenericResponseModel response; + // return GenericResponseModel(); + try { + response = await Injector.appInstance.get().postJsonForObject((json) => GenericResponseModel.fromJson(json), url, postParams); + } catch (e) { + rethrow; + } + return response; + } +} diff --git a/lib/services/firebase_service.dart b/lib/services/firebase_service.dart new file mode 100644 index 0000000..01a53f3 --- /dev/null +++ b/lib/services/firebase_service.dart @@ -0,0 +1,24 @@ +import 'dart:io'; + +import 'package:firebase_messaging/firebase_messaging.dart'; + +abstract class IFirebaseService { + Future getFirebaseToke(); +} + +class FirebaseService implements IFirebaseService { + final FirebaseMessaging? _firebaseMessaging = FirebaseMessaging.instance; + + FirebaseService() { + _firebaseMessaging!.setAutoInitEnabled(true); + if (Platform.isIOS) { + _firebaseMessaging!.requestPermission(); + } + } + + @override + Future getFirebaseToke() async { + var token = await _firebaseMessaging!.getToken(); + return token ?? ""; + } +} diff --git a/lib/theme/app_theme.dart b/lib/theme/app_theme.dart new file mode 100644 index 0000000..5e52cc2 --- /dev/null +++ b/lib/theme/app_theme.dart @@ -0,0 +1,60 @@ +import 'package:flutter/material.dart'; +import 'package:hmg_flutter_template/classes/colors.dart'; +import 'package:hmg_flutter_template/theme/colors.dart'; + +class AppTheme { + static ThemeData getTheme(isArabic) => ThemeData( + fontFamily: isArabic ? 'Cairo' : 'Poppins', + primarySwatch: Colors.red, + visualDensity: VisualDensity.adaptivePlatformDensity, + brightness: Brightness.light, + pageTransitionsTheme: const PageTransitionsTheme( + builders: { + TargetPlatform.android: ZoomPageTransitionsBuilder(), + TargetPlatform.iOS: CupertinoPageTransitionsBuilder(), + }, + ), + hintColor: Colors.grey[400], + colorScheme: ColorScheme.fromSwatch(accentColor: MyColors.backgroundColor), + disabledColor: Colors.grey[300], + errorColor: const Color.fromRGBO(235, 80, 60, 1.0), + scaffoldBackgroundColor: MyColors.backgroundColor, + textSelectionTheme: const TextSelectionThemeData(cursorColor: Colors.grey, selectionColor: Color.fromRGBO(80, 100, 253, 0.5), selectionHandleColor: Colors.grey), + canvasColor: Colors.white, + backgroundColor: const Color.fromRGBO(255, 255, 255, 1), + highlightColor: Colors.grey[100]!.withOpacity(0.4), + splashColor: Colors.transparent, + primaryColor: primaryColor, + primaryColorDark: primaryColor, + buttonColor: Colors.black, + toggleableActiveColor: secondaryColor, + indicatorColor: secondaryColor, + bottomSheetTheme: const BottomSheetThemeData( + backgroundColor: Color(0xFFE0E0E0), + ), + primaryTextTheme: const TextTheme( + bodyText2: TextStyle(color: Colors.white), + ), + iconTheme: const IconThemeData(color: MyColors.darkIconColor), + textTheme: const TextTheme( + bodyText1: TextStyle(color: Colors.black, letterSpacing: 0.6), + headline1: TextStyle(color: Colors.white, letterSpacing: 0.6), + headline2: TextStyle(color: Colors.white, letterSpacing: 0.6), + ), + floatingActionButtonTheme: const FloatingActionButtonThemeData(highlightElevation: 2, disabledElevation: 0, elevation: 2), + appBarTheme: AppBarTheme( + color: const Color(0xff515A5D), + brightness: Brightness.light, + elevation: 0.0, + actionsIconTheme: IconThemeData( + color: Colors.grey[800], + ), + ), + ); +} + +extension ExtendedRevoCheckTheme on TextTheme { + //add custom styles and colors here + //taken from https://medium.com/@crizantlai/flutter-how-to-extend-themedata-b5b987a95bb5 + TextStyle get price => const TextStyle(color: Colors.redAccent); +} diff --git a/lib/theme/colors.dart b/lib/theme/colors.dart new file mode 100644 index 0000000..67b5a6f --- /dev/null +++ b/lib/theme/colors.dart @@ -0,0 +1,13 @@ +import 'package:flutter/material.dart'; + +const Color primaryColor = Color(0xffF8F8F8); +const Color secondaryColor = Color(0xff2BB8A6); +const Color accentColor = Colors.blue; +const Color appBackgroundColor = Colors.white; +Color? accentColorDark = Colors.green[800]; +const Color borderColor = Color(0xffE8E8E8); +Color? borderLightColor = Colors.blueGrey[50]; +Color backgroudColor = Colors.blueGrey[50]!.withOpacity(0.5); +const Color iconColor = Colors.blueGrey; +Color? headingColor = Colors.blueGrey[800]; +Color? txtColor = Colors.blueGrey[500]; diff --git a/lib/ui/dashboard/dashbaord_page.dart b/lib/ui/dashboard/dashbaord_page.dart new file mode 100644 index 0000000..5096ec3 --- /dev/null +++ b/lib/ui/dashboard/dashbaord_page.dart @@ -0,0 +1,49 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:hmg_flutter_template/config/routes.dart'; +import 'package:hmg_flutter_template/main.dart'; +import 'package:hmg_flutter_template/provider/dashboard_provider_model.dart'; +import 'package:hmg_flutter_template/ui/dashboard/widgets/home_patient_card.dart'; +import 'package:hmg_flutter_template/widgets/icons_app/doctor_app_icons.dart'; +import 'package:provider/provider.dart'; + +class DashboardPage extends StatefulWidget { + @override + State createState() => _DashboardPageState(); +} + +class _DashboardPageState extends State { + late DashboardProviderModel provider; + + @override + void initState() { + super.initState(); + provider = Provider.of(navigatorKey.currentContext!); + provider.getDocProfile(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + actions: [ + IconButton( + onPressed: () { + appState.isLogged = false; + Navigator.pushReplacementNamed(context, AppRoutes.login, arguments: false); + }, + icon: const Icon( + Icons.logout, + color: Colors.white, + ), + ) + ], + ), + body: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [], + ), + ); + } +} diff --git a/lib/ui/dashboard/widgets/home_page_card.dart b/lib/ui/dashboard/widgets/home_page_card.dart new file mode 100644 index 0000000..615ef89 --- /dev/null +++ b/lib/ui/dashboard/widgets/home_page_card.dart @@ -0,0 +1,48 @@ +import 'package:flutter/material.dart'; + +class HomePageCard extends StatelessWidget { + const HomePageCard( + {this.hasBorder = false, + required this.imageName, + required this.child, + required this.onTap, + required this.color, + this.opacity = 0.4, + required this.margin, + required this.width, + required this.gradient}); + + final bool hasBorder; + final String imageName; + final Widget child; + final GestureTapCallback onTap; + final Color color; + final double opacity; + final double width; + final EdgeInsets margin; + final LinearGradient gradient; + + @override + Widget build(BuildContext context) { + return InkWell( + onTap: onTap, + child: Container( + width: width, + margin: this.margin, + decoration: BoxDecoration( + gradient: gradient, + borderRadius: BorderRadius.circular(20.0), + border: hasBorder ? Border.all(width: 1.0, color: const Color(0xffcccccc)) : Border.all(width: 0.0, color: Colors.transparent), + image: imageName != null + ? DecorationImage( + image: AssetImage('assets/images/patient/ucaf.png'), + fit: BoxFit.cover, + colorFilter: new ColorFilter.mode(Colors.black.withOpacity(0.2), BlendMode.dstIn), + ) + : null, + ), + child: child, + ), + ); + } +} diff --git a/lib/ui/dashboard/widgets/home_patient_card.dart b/lib/ui/dashboard/widgets/home_patient_card.dart new file mode 100644 index 0000000..36a4a5b --- /dev/null +++ b/lib/ui/dashboard/widgets/home_patient_card.dart @@ -0,0 +1,118 @@ +import 'package:flutter/material.dart'; +import 'package:hmg_flutter_template/classes/size_config.dart'; +import 'package:hmg_flutter_template/ui/dashboard/widgets/home_page_card.dart'; + +class HomePatientCard extends StatelessWidget { + final Color? backgroundColor; + final IconData? cardIcon; + final String? cardIconImage; + final Color? backgroundIconColor; + final String? text; + final Color? textColor; + final VoidCallback? onTap; + final double iconSize; + final LinearGradient? gradient; + + HomePatientCard({ + this.backgroundColor, + this.backgroundIconColor, + this.cardIcon, + this.cardIconImage, + this.text, + this.textColor, + this.onTap, + this.iconSize = 30, + this.gradient, + }); + + @override + Widget build(BuildContext context) { + double width = SizeConfig.heightMultiplier! * + (SizeConfig.isHeightVeryShort + ? 16 + : SizeConfig.isHeightLarge + ? 15 + : 13); + return HomePageCard( + color: backgroundColor??Colors.black, + width: width, + gradient: gradient??LinearGradient(colors: []), + margin: EdgeInsets.all(SizeConfig.widthMultiplier! * 1.121), + child: Container( + padding: EdgeInsets.all(8), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + child: Stack( + children: [ + Container( + margin: EdgeInsets.only(top: 18, left: 10), + color: Colors.transparent, + child: cardIcon != null + ? Icon( + cardIcon, + size: iconSize * 2, + color: backgroundIconColor, + ) + : IconButton( + icon: Image.asset( + 'assets/images/patient/ucaf.png', + width: iconSize * 2, + height: iconSize * 2, + fit: BoxFit.fill, + ), + iconSize: iconSize * 2, + color: backgroundIconColor, + onPressed: () => null, + ), + ), + Container( + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + cardIcon != null + ? Icon( + cardIcon, + size: SizeConfig.getWidthMultiplier(width: width) * 30, + color: textColor, + ) + : Image.asset( + cardIconImage!, + height: iconSize, + width: iconSize, + ), + SizedBox( + height: 4, + ), + ], + ), + ), + ], + ), + ), + Expanded( + child: Container( + child: Text( + text!, + textAlign: TextAlign.start, + style: TextStyle( + color: textColor, + letterSpacing: -0.33, + fontWeight: FontWeight.w600, + fontSize: SizeConfig.getTextMultiplierBasedOnWidth(width: width) * (SizeConfig.isHeightVeryShort ? 11 : 10), + ), + ), + ), + ), + ], + ), + ), + hasBorder: false, + onTap: onTap!, + imageName: '', + ); + } +} diff --git a/lib/ui/login/login_method_page.dart b/lib/ui/login/login_method_page.dart new file mode 100644 index 0000000..2b3735a --- /dev/null +++ b/lib/ui/login/login_method_page.dart @@ -0,0 +1,281 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:hexcolor/hexcolor.dart'; +import 'package:hmg_flutter_template/classes/colors.dart'; +import 'package:hmg_flutter_template/classes/date-utils.dart'; +import 'package:hmg_flutter_template/classes/enums.dart'; +import 'package:hmg_flutter_template/config/routes.dart'; +import 'package:hmg_flutter_template/extensions/int_extensions.dart'; +import 'package:hmg_flutter_template/extensions/string_extensions.dart'; +import 'package:hmg_flutter_template/extensions/util_extensions.dart'; +import 'package:hmg_flutter_template/extensions/widget_extensions.dart'; +import 'package:hmg_flutter_template/generated/locale_keys.g.dart'; +import 'package:hmg_flutter_template/main.dart'; +import 'package:hmg_flutter_template/provider/login_provider_model.dart'; +import 'package:hmg_flutter_template/ui/login/widgets/verification_method_card.dart'; +import 'package:hmg_flutter_template/widgets/button/default_button.dart'; +import 'package:local_auth/local_auth.dart'; +import 'package:provider/provider.dart'; +import 'package:sizer/sizer.dart'; + +// WhatsApp 2 +// SMS 1 +// Face ID 3 +// Finger Print 4 + +class LoginMethodsPage extends StatefulWidget { + const LoginMethodsPage({Key? key}) : super(key: key); + + @override + LoginMethodsPageState createState() => LoginMethodsPageState(); +} + +class LoginMethodsPageState extends State { + bool isMoreOption = false; + bool onlySMSBox = false; + + LoginType? loginType; + AuthMethodTypes? selectedAuthType; + late LoginProviderModel loginProviderModel; + + @override + Widget build(BuildContext context) { + loginType ??= ModalRoute.of(context)!.settings.arguments as LoginType; + + loginProviderModel = context.read(); + return Scaffold( + // appBar: AppBar( + // backgroundColor: Colors.transparent, + // leading: null, + // // actions: [Center(child: "Employee Digital ID".toText12(color: MyColors.textMixColor, isUnderLine: true).onPress(() {})), 21.width], + // ), + body: Container( + width: double.infinity, + height: double.infinity, + padding: const EdgeInsets.all(21), + child: Column( + children: [ + Expanded( + child: SafeArea( + child: SingleChildScrollView( + child: Column( + children: [ + 21.height, + if (loginType == LoginType.SILENT_LOGIN && appState.lastLoginImeiDate != null) + Column( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + LocaleKeys.welcomeBack.tr().toText12(), + ("${appState.lastLoginImeiDate!.titleDescription!} ${appState.lastLoginImeiDate!.doctorName!}").toText20(isBold: true), + heightSpacer3per(), + LocaleKeys.wouldYouLikeToLoginWithCurrentUsername.tr().toText14(), + heightSpacer3per(), + Container( + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: const BorderRadius.all(Radius.circular(10)), + border: Border.all(color: HexColor('#707070'), width: 0.1), + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + LocaleKeys.lastLoginDetails.tr().toText13(), + SizedBox( + width: 55.w, + child: Row( + children: [ + "${LocaleKeys.verificationType.tr()} : ".toText11(), + loginProviderModel.getType(appState.lastLoginImeiDate!.logInTypeID ?? 1).toText11(isBold: true), + ], + ), + ), + ], + ), + Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + (appState.lastLoginImeiDate!.editedOn != null + ? AppDateUtils.getDayMonthYearDateFormatted(AppDateUtils.convertStringToDate(appState.lastLoginImeiDate!.editedOn ?? ""), isMonthShort: true) + : appState.lastLoginImeiDate!.createdOn != null + ? AppDateUtils.getDayMonthYearDateFormatted(AppDateUtils.convertStringToDate(appState.lastLoginImeiDate!.createdOn ?? ""), isMonthShort: true) + : '--') + .toText11(isBold: true), + heightSpacer06per(), + (appState.lastLoginImeiDate!.editedOn != null + ? AppDateUtils.getHour(AppDateUtils.convertStringToDate(appState.lastLoginImeiDate!.editedOn ?? "")) + : appState.lastLoginImeiDate!.createdOn != null + ? AppDateUtils.getHour(AppDateUtils.convertStringToDate(appState.lastLoginImeiDate!.createdOn ?? "")) + : '--') + .toText10() + ], + ) + ], + ), + ), + heightSpacer3per(), + LocaleKeys.pleaseVerify.tr().toText14().paddingOnly(left: 1.w), + heightSpacer2per(), + ], + ), + Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + if (loginType == LoginType.FROM_LOGIN || loginType == LoginType.SILENT_WITH_OTP) + Column( + children: [ + LocaleKeys.pleaseVerifyForBio.tr().toText14(), + 21.height, + ], + ), + if (loginType == LoginType.FROM_LOGIN || loginType == LoginType.SILENT_LOGIN) + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Expanded( + child: VerificationMethodsList( + authMethodType: AuthMethodTypes.faceID, + isBioAvailable: loginProviderModel.isFaceBioAvailable, + authenticateUser: (AuthMethodTypes authMethodType, isActive) async { + bool isAuthenticated = await loginProviderModel.loginWithFaceIDAndBiometrics(); + if (isAuthenticated) { + appState.lastLoginTyp = loginProviderModel.getLoginMethodId(authMethodType); + if (loginType == LoginType.FROM_LOGIN) { + setState(() { + loginType = LoginType.FROM_LOGIN; + }); + } else if (loginType == LoginType.SILENT_LOGIN) { + if (appState.lastLoginImeiDate!.logInTypeID == loginProviderModel.getLoginMethodId(authMethodType)) { + loginProviderModel.sendActivationCode( + appState.memberBeforeLogin!, + appState.projectID, + loginProviderModel.getLoginMethodId(AuthMethodTypes.sms), + loginType ?? LoginType.FROM_LOGIN, + isNeedBinding: false, + ); + } else { + setState(() { + loginType = LoginType.SILENT_WITH_OTP; + }); + } + } + } else { + print("Authentication Failed"); + } + }, + ), + ), + 21.width, + Expanded( + child: VerificationMethodsList( + authMethodType: AuthMethodTypes.fingerPrint, + isBioAvailable: loginProviderModel.isFingerBioAvailable, + authenticateUser: (AuthMethodTypes authMethodType, isActive) async { + bool isAuthenticated = await loginProviderModel.loginWithFaceIDAndBiometrics(); + if (isAuthenticated) { + appState.lastLoginTyp = loginProviderModel.getLoginMethodId(authMethodType); + if (loginType == LoginType.FROM_LOGIN) { + setState(() { + loginType = LoginType.FROM_LOGIN; + }); + } else if (loginType == LoginType.SILENT_LOGIN) { + if (appState.lastLoginImeiDate!.logInTypeID == loginProviderModel.getLoginMethodId(authMethodType)) { + loginProviderModel.sendActivationCode( + appState.memberBeforeLogin!, + appState.projectID, + loginProviderModel.getLoginMethodId(AuthMethodTypes.sms), + loginType ?? LoginType.FROM_LOGIN, + isNeedBinding: false, + ); + } else { + setState(() { + loginType = LoginType.SILENT_WITH_OTP; + }); + } + } + } else { + print("Authentication Failed"); + } + }, + ), + ), + ], + ), + 21.height, + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Expanded( + child: VerificationMethodsList( + authMethodType: AuthMethodTypes.sms, + authenticateUser: (AuthMethodTypes authMethodType, isActive) { + if (loginType == LoginType.FROM_LOGIN || loginType == LoginType.SILENT_LOGIN) { + if (appState.lastLoginTyp == -1) appState.lastLoginTyp = loginProviderModel.getLoginMethodId(authMethodType); + if (loginType == LoginType.SILENT_LOGIN) { + loginType = LoginType.SILENT_WITH_OTP; + } + } + loginProviderModel.sendActivationCode( + appState.memberBeforeLogin!, + appState.projectID, + loginProviderModel.getLoginMethodId(AuthMethodTypes.sms), + loginType ?? LoginType.FROM_LOGIN, + ); + }, + ), + ), + 21.width, + Expanded( + child: VerificationMethodsList( + authMethodType: AuthMethodTypes.whatsApp, + authenticateUser: (AuthMethodTypes authMethodType, isActive) { + if (loginType == LoginType.FROM_LOGIN || loginType == LoginType.SILENT_LOGIN) { + if (appState.lastLoginTyp == -1) appState.lastLoginTyp = loginProviderModel.getLoginMethodId(authMethodType); + if (loginType == LoginType.SILENT_LOGIN) { + loginType = LoginType.SILENT_WITH_OTP; + } + } + loginProviderModel.sendActivationCode( + appState.memberBeforeLogin!, + appState.projectID, + loginProviderModel.getLoginMethodId(AuthMethodTypes.whatsApp), + loginType ?? LoginType.FROM_LOGIN, + ); + }, + ), + ), + ], + ), + ], + ), + 12.height, + ], + ), + ), + ), + ), + 21.height, + DefaultButton( + LocaleKeys.useAnotherAccount.tr(), + () async { + Navigator.pushReplacementNamed(context, AppRoutes.login, arguments:false); + }, + colors: const [ + MyColors.redColor, + MyColors.redColor, + ], + ), + ], + ), + ), + ); + } +} diff --git a/lib/ui/login/login_page.dart b/lib/ui/login/login_page.dart new file mode 100644 index 0000000..ecb5f53 --- /dev/null +++ b/lib/ui/login/login_page.dart @@ -0,0 +1,171 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:hmg_flutter_template/classes/colors.dart'; +import 'package:hmg_flutter_template/classes/consts.dart'; +import 'package:hmg_flutter_template/classes/enums.dart'; +import 'package:hmg_flutter_template/classes/utils.dart'; +import 'package:hmg_flutter_template/config/routes.dart'; +import 'package:hmg_flutter_template/extensions/string_extensions.dart'; +import 'package:hmg_flutter_template/extensions/widget_extensions.dart'; +import 'package:hmg_flutter_template/extensions/int_extensions.dart'; +import 'package:hmg_flutter_template/generated/locale_keys.g.dart'; +import 'package:hmg_flutter_template/main.dart'; +import 'package:hmg_flutter_template/model/login/imei_details_model.dart'; +import 'package:hmg_flutter_template/model/login/member_login_model.dart'; +import 'package:hmg_flutter_template/model/login/project_info_model.dart'; +import 'package:hmg_flutter_template/provider/login_provider_model.dart'; +import 'package:hmg_flutter_template/widgets/button/default_button.dart'; +import 'package:hmg_flutter_template/widgets/cupertino_picker.dart'; +import 'package:hmg_flutter_template/widgets/input_widget.dart'; +import 'package:injector/injector.dart'; +import 'package:local_auth/local_auth.dart'; +import 'package:provider/provider.dart'; +import 'package:sizer/sizer.dart'; + +class LoginPage extends StatefulWidget { + @override + State createState() => _LoginPageState(); +} + +class _LoginPageState extends State { + int branchID = 0; + + LoginProviderModel? provider; + + final loginFormKey = GlobalKey(); + + var projectIdController = TextEditingController(); + + var userIdController = TextEditingController(); + + var passwordController = TextEditingController(); + + checkUserSession() async { + provider!.checkLastSession(); + } + + setUserSession() async { + await Utils.getStringFromPrefs(SharedPrefsConsts.username); + await Utils.getStringFromPrefs(SharedPrefsConsts.password); + } + + @override + Widget build(BuildContext context) { + if (provider == null) { + dynamic? isNeedCheckUserSession = (ModalRoute.of(context)!.settings.arguments); + // setUserSession(); + provider = context.read(); + if (isNeedCheckUserSession == null) { + checkUserSession(); + } + } + + return Scaffold( + body: SafeArea( + child: Column( + children: [ + Expanded( + child: SingleChildScrollView( + child: SizedBox( + height: MediaQuery.of(context).size.height / 1.2, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + flex: 1, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + LocaleKeys.welcomeTo.tr().toText14(color: MyColors.blackColor), + LocaleKeys.drSulaiman.tr().toText20(isBold: true, color: MyColors.blackColor), + "Nurses App".toText16(color: MyColors.redColor), + ], + ), + ), + Expanded( + flex: 3, + child: Form( + key: loginFormKey, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + CustomTextField( + LocaleKeys.userID.tr(), + userIdController, + isEnableBorder: true, + isInputTypeNum: true, + ), + 16.height, + CustomTextField( + LocaleKeys.password.tr(), + passwordController, + isTextIsPassword: true, + onChange: (v) { + if (v.length == 1) { + provider!.getAssignedBranches(userIdController.text); + } + }, + ), + 16.height, + Consumer( + builder: (_, data, w) { + // if (data.state == ViewState.idle && provider.assignedBranches.isNotEmpty) { + // projectIdController.text = provider.assignedBranches.first.facilityName!; + // branchID = provider.assignedBranches.first.facilityId as int; + // print(branchID); + // provider.notifyListeners(); + // } + return data.state == ViewState.hide + ? Container() + : data.state == ViewState.busy + ? const Center(child: CircularProgressIndicator()) + : CustomTextField( + LocaleKeys.branch.tr(), + projectIdController, + hasSelection: true, + isEnable: false, + onClick: () => CustomCupertinoPicker.showCupertinoPicker( + context, + provider!.assignedBranches, + (index) { + projectIdController.text = provider!.assignedBranches[index].facilityName!; + branchID = provider!.assignedBranches[index].facilityId as int; + provider!.notifyListeners(); + }, + ), + ); + }, + ), + ], + ), + ), + ), + ], + ), + ), + ), + ), + 21.height, + DefaultButton( + LocaleKeys.login.tr(), + () async { + // provider.checkLastSession(); + bool isSuccess = await provider!.performLogin(userIdController.text, passwordController.text, branchID); + if (isSuccess) { + appState.password = passwordController.text; + appState.doctorUserId = int.parse(userIdController.text); + print(appState.doctorUserId); + } + }, + colors: const [ + MyColors.redColor, + MyColors.redColor, + ], + ), + ], + ).paddingAll(21), + ), + ); + } +} diff --git a/lib/ui/login/splash_page.dart b/lib/ui/login/splash_page.dart new file mode 100644 index 0000000..02d2f10 --- /dev/null +++ b/lib/ui/login/splash_page.dart @@ -0,0 +1,38 @@ +import 'package:flutter/material.dart'; +import 'package:hmg_flutter_template/services/api_repo/login_api_repo.dart'; +import 'package:hmg_flutter_template/services/firebase_service.dart'; +import 'package:injector/injector.dart'; + +import '../../classes/utils.dart'; + +class SplashPage extends StatefulWidget { + @override + State createState() => _SplashPageState(); +} + +class _SplashPageState extends State { + final ILoginApiRepo _loginApiRepo = Injector.appInstance.get(); + + @override + void initState() { + super.initState(); + getData(); + } + + getData() async { + try { + await _loginApiRepo.getDeviceInfoByIMEI(); + await _loginApiRepo.getProjectInfo("userId"); + await _loginApiRepo.memberLogin("13777", "Rr123456", 12); + } catch (e) { + Utils.handleException(e, context, (msg) { + Utils.confirmDialog(context, msg); + }); + } + } + + @override + Widget build(BuildContext context) { + return Scaffold(); + } +} diff --git a/lib/ui/login/widgets/verification_method_card.dart b/lib/ui/login/widgets/verification_method_card.dart new file mode 100644 index 0000000..c9268ff --- /dev/null +++ b/lib/ui/login/widgets/verification_method_card.dart @@ -0,0 +1,141 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/svg.dart'; +import 'package:hexcolor/hexcolor.dart'; +import 'package:hmg_flutter_template/classes/colors.dart'; +import 'package:hmg_flutter_template/classes/enums.dart'; +import 'package:hmg_flutter_template/classes/size_config.dart'; +import 'package:hmg_flutter_template/generated/locale_keys.g.dart'; + +import 'package:local_auth/local_auth.dart'; + +class VerificationMethodsList extends StatelessWidget { + final AuthMethodTypes authMethodType; + final Function(AuthMethodTypes type, bool isActive)? authenticateUser; + final Function? onShowMore; + final bool isBioAvailable; + + const VerificationMethodsList({ + Key? key, + required this.authMethodType, + this.authenticateUser, + this.onShowMore, + this.isBioAvailable = true, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + switch (authMethodType) { + case AuthMethodTypes.whatsApp: + return MethodTypeCard( + assetPath: 'assets/images/login/verify_whatsapp.svg', + onTap: () => {authenticateUser!(AuthMethodTypes.whatsApp, true)}, + label: LocaleKeys.verifyThroughWhatsapp.tr(), + isBioAvailable: isBioAvailable, + ); + case AuthMethodTypes.sms: + return MethodTypeCard( + assetPath: "assets/images/login/verify_sms.svg", + onTap: () => {authenticateUser!(AuthMethodTypes.sms, true)}, + label: LocaleKeys.verifyThroughSMS.tr(), + isBioAvailable: isBioAvailable, + ); + case AuthMethodTypes.fingerPrint: + return MethodTypeCard( + assetPath: 'assets/images/login/verify_thumb.svg', + onTap: () => {authenticateUser!(AuthMethodTypes.fingerPrint, true)}, + label: LocaleKeys.verifyThroughFingerprint.tr(), + isBioAvailable: isBioAvailable, + ); + case AuthMethodTypes.faceID: + return MethodTypeCard( + assetPath: 'assets/images/login/verify_face.svg', + onTap: () => {authenticateUser!(AuthMethodTypes.faceID, true)}, + label: LocaleKeys.verifyThroughFace.tr(), + isBioAvailable: isBioAvailable, + ); + + default: + return MethodTypeCard( + assetPath: 'assets/images/login/more_icon.png', + onTap: () { + onShowMore!(); + }, + isSvg: false, + label: LocaleKeys.moreVerificationOpts.tr(), + height: 0, + isBioAvailable: isBioAvailable, + ); + } + } +} + +class MethodTypeCard extends StatelessWidget { + const MethodTypeCard({ + Key? key, + required this.assetPath, + required this.onTap, + required this.label, + this.height = 20, + this.isSvg = true, + required this.isBioAvailable, + }) : super(key: key); + final String assetPath; + final GestureTapCallback onTap; + final String label; + final double height; + final bool isSvg; + final bool isBioAvailable; + + @override + Widget build(BuildContext context) { + double cardHeight = SizeConfig.heightMultiplier! * + (SizeConfig.isHeightVeryShort + ? 22 + : SizeConfig.isHeightLarge + ? 25 + : 20); + return InkWell( + onTap: onTap, + child: Container( + decoration: BoxDecoration( + color: isBioAvailable ? Colors.white : Colors.grey[400], + borderRadius: const BorderRadius.all(Radius.circular(10)), + border: Border.all(color: HexColor('#707070'), width: 0.1), + ), + height: cardHeight, + child: Padding( + padding: const EdgeInsets.all(12.0), + child: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + isSvg + ? SvgPicture.asset(assetPath, width: SizeConfig.widthMultiplier! * (14), height: cardHeight * 0.20) + : Image.asset( + assetPath, + width: SizeConfig.widthMultiplier! * (12), + height: cardHeight * 0.35, + // height: , + ), + SizedBox( + height: height, + ), + Text( + label, + style: TextStyle( + fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * (SizeConfig.isHeightVeryShort ? 3 : 3.7), + color: MyColors.darkTextColor, + fontWeight: FontWeight.w600, + letterSpacing: -0.48, + ), + ) + ], + ), + ), + ), + ), + ); + } +} diff --git a/lib/widgets/Updater.dart b/lib/widgets/Updater.dart new file mode 100644 index 0000000..82cc172 --- /dev/null +++ b/lib/widgets/Updater.dart @@ -0,0 +1,39 @@ +/* ZiK */ + +import 'dart:async'; +import 'package:flutter/cupertino.dart'; + +typedef ChildProvider = Widget Function(BuildContext context, E? data); + +class Updater extends StatelessWidget{ + final ChildProvider childProvider; + StreamController? sink; + T? initialData; + List _history = []; + + Stream? _stream; + Updater({T? initialData, required this.childProvider}){ + this.sink = StreamController(); + this.initialData = initialData; + _stream = this.sink?.stream; + } + + @override + Widget build(BuildContext context) { + return StreamBuilder( + initialData: this.initialData, + stream: _stream, + builder: (ctx, snapshot){ + return childProvider(context, snapshot.data); + }); + } + + void pushData(T? data) { + _history.add(data); + sink?.sink.add(data); + } + + List getDataHistory() => _history; + T? getLatestData() => _history.last; + +} \ No newline at end of file diff --git a/lib/widgets/app_bar_widget.dart b/lib/widgets/app_bar_widget.dart new file mode 100644 index 0000000..d0846c5 --- /dev/null +++ b/lib/widgets/app_bar_widget.dart @@ -0,0 +1,48 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:hmg_flutter_template/classes/colors.dart'; +import 'package:hmg_flutter_template/config/routes.dart'; +import 'package:hmg_flutter_template/extensions/int_extensions.dart'; +import 'package:hmg_flutter_template/extensions/string_extensions.dart'; +import 'package:hmg_flutter_template/extensions/widget_extensions.dart'; + +AppBar AppBarWidget( + BuildContext context, { + required String title, + String? image, + bool isNeedLeading = true, + List? actions, +}) { + return AppBar( + leadingWidth: 0, + // leading: GestureDetector( + // behavior: HitTestBehavior.opaque, + // onTap: Feedback.wrapForTap(() => Navigator.maybePop(context), context), + // child: const Icon(Icons.arrow_back_ios, color: MyColors.darkIconColor), + // ), + //titleSpacing: -1.44, + title: Row( + children: [ + if (isNeedLeading) + GestureDetector( + behavior: HitTestBehavior.opaque, + onTap: Feedback.wrapForTap(() => Navigator.maybePop(context), context), + child: const Icon(Icons.arrow_back_ios, color: MyColors.darkIconColor), + ), + 4.width, + if (image != null) + SvgPicture.asset( + image, + height: 40, + width: 40, + ), + if (image != null) 14.width, + title.toText16(color: MyColors.darkTextColor, isBold: true).expanded, + ], + ), + centerTitle: false, + elevation: 0, + backgroundColor: Colors.white, + actions: actions, + ); +} diff --git a/lib/widgets/app_logo.dart b/lib/widgets/app_logo.dart new file mode 100644 index 0000000..cbc10af --- /dev/null +++ b/lib/widgets/app_logo.dart @@ -0,0 +1,26 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/svg.dart'; +import 'package:hmg_flutter_template/extensions/int_extensions.dart'; +import 'package:hmg_flutter_template/extensions/string_extensions.dart'; + + +class AppLogo extends StatelessWidget { + AppLogo({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Row( + children: [ + SvgPicture.asset( + "assets/mohemm_logo.svg", + height: 48, + width: 48, + alignment: Alignment.centerRight, + ), + 8.width, + "LocaleKeys.mohemm.tr()".toText14() + ], + ); + } +} diff --git a/lib/widgets/bottom_sheet.dart b/lib/widgets/bottom_sheet.dart new file mode 100644 index 0000000..d13fc56 --- /dev/null +++ b/lib/widgets/bottom_sheet.dart @@ -0,0 +1,86 @@ +import 'package:flutter/material.dart'; +import 'package:hmg_flutter_template/extensions/int_extensions.dart'; + +void showMyBottomSheet(BuildContext context, {required Widget child, required VoidCallback callBackFunc}) { + showModalBottomSheet( + context: context, + isScrollControlled: true, + backgroundColor: Colors.transparent, + builder: (BuildContext context) { + return Container( + decoration: const BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.only( + topRight: Radius.circular(25), + topLeft: Radius.circular(25), + ), + ), + clipBehavior: Clip.antiAlias, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + mainAxisSize: MainAxisSize.min, + children: [ + 13.height, + Container( + height: 6, + width: 60, + decoration: const BoxDecoration( + color: Color(0xff9A9A9A), + borderRadius: BorderRadius.all( + Radius.circular(20), + ), + ), + ), + 8.height, + child, + ], + ), + ); + }, + ).then((value) { + // print("BACK FROM DELEGATE!!!!"); + // print("value: $value"); + if (value == "delegate_reload") { + callBackFunc(); + } + }); +} + +class BottomSheetItem extends StatelessWidget { + final Function onTap; + final IconData icon; + final String title; + final Color color; + + const BottomSheetItem({Key? key, required this.onTap, required this.title, required this.icon, this.color = Colors.black}) : super(key: key); + + @override + Widget build(BuildContext context) { + return InkWell( + onTap: () { + if (onTap != null) { + Navigator.pop(context); + onTap(); + } + }, + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 18.0, vertical: 18.0), + child: Row( + children: [ + if (icon != null) + Icon( + icon, + color: color, + size: 18.0, + ), + if (icon != null) SizedBox(width: 24.0), + Text( + title ?? "", + style: TextStyle(color: color), + ), + ], + ), + ), + ); + } +} diff --git a/lib/widgets/button/default_button.dart b/lib/widgets/button/default_button.dart new file mode 100644 index 0000000..0aba66a --- /dev/null +++ b/lib/widgets/button/default_button.dart @@ -0,0 +1,137 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_svg/svg.dart'; +import 'package:hmg_flutter_template/classes/colors.dart'; + +extension WithContainer on Widget { + Widget get insideContainer => Container( + color: Colors.white, + padding: const EdgeInsets.only(top: 16, bottom: 16, right: 21, left: 21), + child: this, + ); +} + +class DefaultButton extends StatelessWidget { + final String text; + final VoidCallback? onPress; + final Color textColor; + final Color? color; + final Color? disabledColor; + final IconData? iconData; + final String? svgIcon; + final double? fontSize; + final bool isTextExpanded; + final int count; + final List? colors; + + const DefaultButton( + this.text, + this.onPress, { + Key? key, + this.color, + this.isTextExpanded = true, + this.svgIcon, + this.disabledColor, + this.count = 0, + this.textColor = Colors.white, + this.iconData, + this.fontSize, + this.colors, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return InkWell( + onTap: onPress, + child: Container( + height: 43, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(6.0), + gradient: onPress == null + ? const LinearGradient( + colors: [ + Color(0xffEAEAEA), + Color(0xffEAEAEA), + ], + ) + : color == MyColors.yellowColorII + ? const LinearGradient( + colors: [ + MyColors.redColor, + MyColors.redColor, + ], + ) + : LinearGradient( + transform: const GradientRotation(.83), + begin: Alignment.topRight, + end: Alignment.bottomLeft, + colors: colors ?? + [ + MyColors.redColor, + MyColors.redColor, + ], + ), + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + if (iconData != null) Icon(iconData, color: textColor), + if (svgIcon != null) SvgPicture.asset(svgIcon ?? "", color: textColor), + if (!isTextExpanded) + Padding( + padding: EdgeInsets.only( + left: (iconData ?? svgIcon) != null ? 6 : 0, + ), + child: Text( + text, + textAlign: TextAlign.center, + style: TextStyle( + fontSize: fontSize ?? 16, + fontWeight: FontWeight.w600, + color: textColor, + letterSpacing: -0.48, + ), + ), + ), + if (isTextExpanded) + Expanded( + child: Text( + text, + textAlign: TextAlign.center, + style: TextStyle( + fontSize: fontSize ?? 16, + fontWeight: FontWeight.w600, + color: textColor, + letterSpacing: -0.48, + ), + ), + ), + if (count > 0) + Align( + alignment: Alignment.topCenter, + child: Container( + margin: const EdgeInsets.only(top: 6, bottom: 6), + padding: const EdgeInsets.only(left: 5, right: 5), + alignment: Alignment.center, + height: 16, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10.0), + color: Colors.white, + ), + child: Text( + "$count", + textAlign: TextAlign.center, + style: const TextStyle( + fontSize: 12, + fontWeight: FontWeight.w700, + color: Color(0xffD02127), + letterSpacing: -0.6, + ), + ), + ), + ) + ], + ), + ), + ); + } +} diff --git a/lib/widgets/button/simple_button.dart b/lib/widgets/button/simple_button.dart new file mode 100644 index 0000000..3352c2c --- /dev/null +++ b/lib/widgets/button/simple_button.dart @@ -0,0 +1,42 @@ +import 'package:flutter/material.dart'; +import 'package:hmg_flutter_template/classes/colors.dart'; + +class SimpleButton extends StatelessWidget { + final String text; + final VoidCallback? onPress; + final Color textColor; + final Color? color; + final double? fontSize; + final List? colors; + + SimpleButton(this.text, this.onPress, {this.color, this.textColor = Colors.white, this.fontSize, this.colors}); + + @override + Widget build(BuildContext context) { + return InkWell( + onTap: onPress, + child: Container( + alignment: Alignment.center, + padding: const EdgeInsets.only(left: 12, right: 12, top: 4, bottom: 4), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(6.0), + gradient: onPress == null + ? const LinearGradient(colors: [Color(0xffEAEAEA), Color(0xffEAEAEA)]) + : LinearGradient( + transform: const GradientRotation(.83), + begin: Alignment.topRight, + end: Alignment.bottomLeft, + colors: colors ?? + [ + MyColors.gradiantEndColor, + MyColors.gradiantStartColor, + ]), + ), + child: Text( + text, + style: TextStyle(fontSize: fontSize ?? 16, fontWeight: FontWeight.w600, color: textColor, letterSpacing: -0.48), + ), + ), + ); + } +} diff --git a/lib/widgets/circular_avatar.dart b/lib/widgets/circular_avatar.dart new file mode 100644 index 0000000..af5fb18 --- /dev/null +++ b/lib/widgets/circular_avatar.dart @@ -0,0 +1,54 @@ +import 'dart:convert'; + +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; + +class CircularAvatar extends StatelessWidget { + final String? url; + final double radius; + final double width; + final double height; + final bool isImageBase64; + + CircularAvatar({Key? key, this.radius = 70.0, this.width = 70, this.height = 60, this.url, this.isImageBase64 = false}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + width: width, + height: height, + decoration: BoxDecoration( + shape: BoxShape.circle, + image: isImageBase64 + ? null + : DecorationImage( + fit: BoxFit.cover, + image: NetworkImage(url ?? "https://cdn4.iconfinder.com/data/icons/professions-2-2/151/89-512.png"), + ), + ), + child: (isImageBase64 && url != null) ? imageFromBase64String(url!) : Container(), + ); + } + + Widget imageFromBase64String(String base64String) { + return ClipRRect( + borderRadius: BorderRadius.circular(100), + child: Image.memory( + base64Decode(base64String), + fit: BoxFit.cover, + ), + ); + } +} + +Widget showGenderAvator( + int gender, { + double size = 60, +}) { + return SvgPicture.asset( + gender == 1 ? 'assets/images/svgs/male avatar.svg' : 'assets/images/svgs/female avatar.svg', + fit: BoxFit.cover, + height: size, + width: size, + ); +} diff --git a/lib/widgets/circular_step_progress_bar.dart b/lib/widgets/circular_step_progress_bar.dart new file mode 100644 index 0000000..b137dc6 --- /dev/null +++ b/lib/widgets/circular_step_progress_bar.dart @@ -0,0 +1,515 @@ +import 'dart:math' as math; + +import 'package:flutter/material.dart'; + +class CircularStepProgressBar extends StatelessWidget { + /// Defines if steps grow from + /// clockwise [CircularDirection.clockwise] or + /// counterclockwise [CircularDirection.counterclockwise] + final CircularDirection circularDirection; + + /// Number of steps to underline, all the steps with + /// index <= [currentStep] will have [Color] equal to + /// [selectedColor] + /// + /// Only used when [customColor] is [null] + /// + /// Default value: 0 + final int currentStep; + + /// Total number of step of the complete indicator + final int totalSteps; + + /// Radial spacing between each step. Remember to + /// define the value in radiant units + /// + /// Default value: math.pi / 20 + final double padding; + + /// Height of the indicator's box container + final double? height; + + /// Width of the indicator's box container + final double? width; + + /// Assign a custom [Color] for each step + /// + /// Takes a [int], index of the current step starting from 0, and + /// must return a [Color] + /// + /// **NOTE**: If provided, it overrides + /// [selectedColor] and [unselectedColor] + final Color Function(int)? customColor; + + /// [Color] of the selected steps + /// + /// All the steps with index <= [currentStep] + /// + /// Default value: [Colors.blue] + final Color? selectedColor; + + /// [Color] of the unselected steps + /// + /// All the steps with index between + /// [currentStep] and [totalSteps] + /// + /// Default value: [Colors.grey] + final Color? unselectedColor; + + /// The size of a single step in the indicator + /// + /// Default value: 6.0 + final double stepSize; + + /// Specify a custom size for selected steps + /// + /// Only applicable when not custom setting (customColor, customStepSize) is defined + /// + /// This value will replace the [stepSize] only for selected steps + final double? selectedStepSize; + + /// Specify a custom size for unselected steps + /// + /// Only applicable when not custom setting (customColor, customStepSize) is defined + /// + /// This value will replace the [stepSize] only for unselected steps + final double? unselectedStepSize; + + /// Assign a custom size [double] for each step + /// + /// Function takes a [int], index of the current step starting from 0, and + /// a [bool], which tells if the step is selected based on [currentStep], + /// and must return a [double] size of the step + /// + /// **NOTE**: If provided, it overrides [stepSize] + final double Function(int, bool)? customStepSize; + + /// [Widget] contained inside the circular indicator + final Widget? child; + + /// Height of the indicator container in case no [height] parameter + /// given and parent height is [double.infinity] + /// + /// Default value: 100.0 + final double fallbackHeight; + + /// Height of the indicator container in case no [width] parameter + /// given and parent height is [double.infinity] + /// + /// Default value: 100.0 + final double fallbackWidth; + + /// Angle in radiants in which the first step of the indicator is placed. + /// The initial value is on the top of the indicator (- math.pi / 2) + /// - 0 => TOP + /// - math.pi / 2 => LEFT + /// - math.pi => BOTTOM + /// - math.pi / 2 * 3 => RIGHT + /// - math.pi / 2 => TOP (again) + final double startingAngle; + + /// Angle in radiants which represents the size of the arc used to display the indicator. + /// It allows you to draw a semi-circle instead of a full 360° (math.pi * 2) circle. + final double arcSize; + + /// Adds rounded edges at the beginning and at the end of the circular indicator + /// given a [int], index of each step, and a [bool], + /// which tells if the step is selected based on [currentStep], and must return a + /// [bool] that tells if the edges are rounded or not + /// + /// **NOTE**: For continuous circular indicators (`padding: 0`), to check if to apply + /// the rounded edges the packages uses index 0 (for the first arc painted) and + /// 1 (for the second arc painted) + /// + /// ```dart + /// // Example: Add rounded edges for all the steps + /// roundedCap: (index, _) => true + /// ``` + /// + /// ```dart + /// // Example: Add rounded edges for the selected arc of the indicator + /// roundedCap: (index, _) => index == 0, + /// padding: 0 + /// ``` + final bool Function(int, bool)? roundedCap; + + /// Adds a gradient color to the circular indicator + /// + /// **NOTE**: If provided, it overrides [selectedColor], [unselectedColor], and [customColor] + final Gradient? gradientColor; + + /// Removes the extra angle caused by [StrokeCap.round] when [roundedCap] is applied + final bool removeRoundedCapExtraAngle; + + const CircularStepProgressBar({ + required this.totalSteps, + this.child, + this.height, + this.width, + this.customColor, + this.customStepSize, + this.selectedStepSize, + this.unselectedStepSize, + this.roundedCap, + this.gradientColor, + this.circularDirection = CircularDirection.clockwise, + this.fallbackHeight = 100.0, + this.fallbackWidth = 100.0, + this.currentStep = 0, + this.selectedColor = Colors.blue, + this.unselectedColor = Colors.grey, + this.padding = math.pi / 20, + this.stepSize = 6.0, + this.startingAngle = 0, + this.arcSize = math.pi * 2, + this.removeRoundedCapExtraAngle = false, + Key? key, + }) : assert(totalSteps > 0, "Number of total steps (totalSteps) of the CircularStepProgressBar must be greater than 0"), + assert(currentStep >= 0, "Current step (currentStep) of the CircularStepProgressBar must be greater than or equal to 0"), + assert(padding >= 0.0, "Padding (padding) of the CircularStepProgressBar must be greater or equal to 0"), + super(key: key); + + @override + Widget build(BuildContext context) { + // Print warning when arcSize greater than math.pi * 2 which causes steps to overlap + if (arcSize > math.pi * 2) print("WARNING (step_progress_indicator): arcSize of CircularStepProgressBar is greater than 360° (math.pi * 2), this will cause some steps to overlap!"); + TextDirection textDirection = Directionality.of(context); + + return LayoutBuilder( + builder: (context, constraints) => SizedBox( + // Apply fallback for both height and width + // if their value is null and no parent size limit + height: height != null + ? height + : constraints.maxHeight != double.infinity + ? constraints.maxHeight + : fallbackHeight, + width: width != null + ? width + : constraints.maxWidth != double.infinity + ? constraints.maxWidth + : fallbackWidth, + child: CustomPaint( + painter: _CircularIndicatorPainter( + totalSteps: totalSteps, + currentStep: currentStep, + customColor: customColor, + padding: padding, + circularDirection: circularDirection, + selectedColor: selectedColor, + unselectedColor: unselectedColor, + arcSize: arcSize, + stepSize: stepSize, + customStepSize: customStepSize, + maxDefinedSize: maxDefinedSize, + selectedStepSize: selectedStepSize, + unselectedStepSize: unselectedStepSize, + startingAngle: startingAngleTopOfIndicator, + roundedCap: roundedCap, + gradientColor: gradientColor, + textDirection: textDirection, + removeRoundedCapExtraAngle: removeRoundedCapExtraAngle, + ), + // Padding needed to show the indicator when child is placed on top of it + child: Padding( + padding: EdgeInsets.all(maxDefinedSize), + child: child, + ), + ), + ), + ); + } + + /// Compute the maximum possible size of the indicator between + /// [stepSize] and [customStepSize] + double get maxDefinedSize { + if (customStepSize == null) { + return math.max(stepSize, math.max(selectedStepSize ?? 0, unselectedStepSize ?? 0)); + } + + // When customSize defined, compute and return max possible size + double currentMaxSize = 0; + + for (int step = 0; step < totalSteps; ++step) { + // Consider max between selected and unselected case + var customSizeValue = math.max(customStepSize!(step, false), customStepSize!(step, true)); + if (customSizeValue > currentMaxSize) { + currentMaxSize = customSizeValue; + } + } + + return currentMaxSize; + } + + /// Make [startingAngle] to top-center of indicator (0°) by default + double get startingAngleTopOfIndicator => startingAngle - math.pi / 2; +} + +class _CircularIndicatorPainter implements CustomPainter { + final int totalSteps; + final int currentStep; + final double padding; + final Color? selectedColor; + final Color? unselectedColor; + final double stepSize; + final double? selectedStepSize; + final double? unselectedStepSize; + final double Function(int, bool)? customStepSize; + final double maxDefinedSize; + final Color Function(int)? customColor; + final CircularDirection circularDirection; + final double startingAngle; + final double arcSize; + final bool Function(int, bool)? roundedCap; + final Gradient? gradientColor; + final TextDirection textDirection; + final bool removeRoundedCapExtraAngle; + + _CircularIndicatorPainter({ + required this.totalSteps, + required this.circularDirection, + required this.customColor, + required this.currentStep, + required this.selectedColor, + required this.unselectedColor, + required this.padding, + required this.stepSize, + required this.selectedStepSize, + required this.unselectedStepSize, + required this.customStepSize, + required this.startingAngle, + required this.arcSize, + required this.maxDefinedSize, + required this.roundedCap, + required this.gradientColor, + required this.textDirection, + required this.removeRoundedCapExtraAngle, + }); + + @override + void paint(Canvas canvas, Size size) { + var w = size.width; + var h = size.height; + + // Step length is user-defined arcSize + // divided by the total number of steps (each step same size) + var stepLength = arcSize / totalSteps; + + // Define general arc paint + Paint paint = Paint() + ..style = PaintingStyle.stroke + ..strokeWidth = maxDefinedSize; + + var rect = Rect.fromCenter( + // Rect created from the center of the widget + center: Offset(w / 2, h / 2), + // For both height and width, subtract maxDefinedSize to fit indicator inside the parent container + height: h - maxDefinedSize, + width: w - maxDefinedSize, + ); + + if (gradientColor != null) { + paint.shader = gradientColor!.createShader(rect, textDirection: textDirection); + } + + // Change color selected or unselected based on the circularDirection + var isClockwise = circularDirection == CircularDirection.clockwise; + + // Make a continuous arc without rendering all the steps when possible + if (padding == 0 && customColor == null && customStepSize == null && roundedCap == null) { + _drawContinuousArc(canvas, paint, rect, isClockwise); + } else { + _drawStepArc(canvas, paint, rect, isClockwise, stepLength); + } + } + + /// Draw a series of arcs, each composing the full steps of the indicator + void _drawStepArc(Canvas canvas, Paint paint, Rect rect, bool isClockwise, double stepLength) { + // Draw a series of circular arcs to compose the indicator + // Starting based on startingAngle attribute + // + // When clockwise: + // - Start drawing counterclockwise so to have the selected steps on top of the unselected + int step = isClockwise ? totalSteps - 1 : 0; + double stepAngle = isClockwise ? startingAngle - stepLength : startingAngle; + for (; isClockwise ? step >= 0 : step < totalSteps; isClockwise ? stepAngle -= stepLength : stepAngle += stepLength, isClockwise ? --step : ++step) { + // Check if the current step is selected or unselected + var isSelectedColor = _isSelectedColor(step, isClockwise); + + // Size of the step + var indexStepSize = customStepSize != null + // Consider step index inverted when counterclockwise + ? customStepSize!(_indexOfStep(step, isClockwise), isSelectedColor) + : isSelectedColor + ? selectedStepSize ?? stepSize + : unselectedStepSize ?? stepSize; + + // Use customColor if defined + var stepColor = customColor != null + // Consider step index inverted when counterclockwise + ? customColor!(_indexOfStep(step, isClockwise)) + : isSelectedColor + ? selectedColor! + : unselectedColor!; + + // Apply stroke cap to each step + var hasStrokeCap = roundedCap != null ? roundedCap!(_indexOfStep(step, isClockwise), isSelectedColor) : false; + var strokeCap = hasStrokeCap ? StrokeCap.round : StrokeCap.butt; + + // Remove extra size caused by rounded stroke cap + // https://github.com/SandroMaglione/step-progress-indicator/issues/20#issue-786114745 + var extraCapSize = indexStepSize / 2; + var extraCapAngle = extraCapSize / (rect.width / 2); + var extraCapRemove = hasStrokeCap && removeRoundedCapExtraAngle; + + // Draw arc steps of the indicator + _drawArcOnCanvas( + canvas: canvas, + rect: rect, + startingAngle: stepAngle + (extraCapRemove ? extraCapAngle : 0), + sweepAngle: stepLength - padding - (extraCapRemove ? extraCapAngle * 2 : 0), + paint: paint, + color: stepColor, + strokeWidth: indexStepSize, + strokeCap: strokeCap, + ); + } + } + + /// Draw optimized continuous indicator instead of multiple steps + void _drawContinuousArc(Canvas canvas, Paint paint, Rect rect, bool isClockwise) { + // Compute color of the selected and unselected bars + var firstStepColor = isClockwise ? selectedColor : unselectedColor; + var secondStepColor = !isClockwise ? selectedColor : unselectedColor; + + // Selected and unselected step sizes if defined, otherwise use stepSize + var firstStepSize = isClockwise ? selectedStepSize ?? stepSize : unselectedStepSize ?? stepSize; + var secondStepSize = !isClockwise ? selectedStepSize ?? stepSize : unselectedStepSize ?? stepSize; + + // Compute length and starting angle of the selected and unselected bars + var firstArcLength = arcSize * (currentStep / totalSteps); + var secondArcLength = arcSize - firstArcLength; + + // firstArcStartingAngle = startingAngle + var secondArcStartingAngle = startingAngle + firstArcLength; + + // Apply stroke cap to both arcs + // NOTE: For continuous circular indicator, it uses 0 and 1 as index to + // apply the rounded cap + var firstArcStrokeCap = roundedCap != null + ? isClockwise + ? roundedCap!(0, true) + : roundedCap!(1, false) + : false; + var secondArcStrokeCap = roundedCap != null + ? isClockwise + ? roundedCap!(1, false) + : roundedCap!(0, true) + : false; + var firstCap = firstArcStrokeCap ? StrokeCap.round : StrokeCap.butt; + var secondCap = secondArcStrokeCap ? StrokeCap.round : StrokeCap.butt; + + // When clockwise, draw the second arc first and the first on top of it + // Required when stroke cap is rounded to make the selected step on top of the unselected + if (circularDirection == CircularDirection.clockwise) { + // Second arc, selected when counterclockwise, unselected otherwise + _drawArcOnCanvas( + canvas: canvas, + rect: rect, + paint: paint, + startingAngle: secondArcStartingAngle, + sweepAngle: secondArcLength, + strokeWidth: secondStepSize, + color: secondStepColor!, + strokeCap: secondCap, + ); + + // First arc, selected when clockwise, unselected otherwise + _drawArcOnCanvas( + canvas: canvas, + rect: rect, + paint: paint, + startingAngle: startingAngle, + sweepAngle: firstArcLength, + strokeWidth: firstStepSize, + color: firstStepColor!, + strokeCap: firstCap, + ); + } else { + // First arc, selected when clockwise, unselected otherwise + _drawArcOnCanvas( + canvas: canvas, + rect: rect, + paint: paint, + startingAngle: startingAngle, + sweepAngle: firstArcLength, + strokeWidth: firstStepSize, + color: firstStepColor!, + strokeCap: firstCap, + ); + + // Second arc, selected when counterclockwise, unselected otherwise + _drawArcOnCanvas( + canvas: canvas, + rect: rect, + paint: paint, + startingAngle: secondArcStartingAngle, + sweepAngle: secondArcLength, + strokeWidth: secondStepSize, + color: secondStepColor!, + strokeCap: secondCap, + ); + } + } + + /// Draw the actual arc for a continuous indicator + void _drawArcOnCanvas({ + required Canvas canvas, + required Rect rect, + required double startingAngle, + required double sweepAngle, + required Paint paint, + required Color color, + required double strokeWidth, + required StrokeCap strokeCap, + }) => + canvas.drawArc( + rect, + startingAngle, + sweepAngle, + false /*isRadial*/, + paint + ..color = color + ..strokeWidth = strokeWidth + ..strokeCap = strokeCap, + ); + + bool _isSelectedColor(int step, bool isClockwise) => isClockwise ? step < currentStep : (step + 1) > (totalSteps - currentStep); + + /// Start counting indexes from the right if clockwise and on the left if counterclockwise + int _indexOfStep(int step, bool isClockwise) => isClockwise ? step : totalSteps - step - 1; + + @override + bool shouldRepaint(CustomPainter oldDelegate) => oldDelegate != this; + + @override + bool hitTest(Offset position) => false; + + @override + void addListener(listener) {} + + @override + void removeListener(listener) {} + + @override + Null get semanticsBuilder => null; + + @override + bool shouldRebuildSemantics(CustomPainter oldDelegate) => false; +} + +/// Used to define the [circularDirection] attribute of the [CircularStepProgressBar] +enum CircularDirection { + clockwise, + counterclockwise, +} diff --git a/lib/widgets/commen/cusom_row.dart b/lib/widgets/commen/cusom_row.dart new file mode 100644 index 0000000..d63126b --- /dev/null +++ b/lib/widgets/commen/cusom_row.dart @@ -0,0 +1,52 @@ +import 'package:flutter/material.dart'; +import 'package:hmg_flutter_template/extensions/string_extensions.dart'; + +class CustomRow extends StatelessWidget { + const CustomRow({super.key, + required this.label, + required this.value, + this.labelSize, + this.valueSize, + this.width, + this.isCopyable = true, + this.isExpanded = false, + this.labelColor, + this.valueColor, + }); + + final String label; + final String value; + final double? labelSize; + final double? valueSize; + final double? width; + final bool isCopyable; + final bool isExpanded; + final Color? labelColor; + final Color? valueColor; + + @override + Widget build(BuildContext context) { + return Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + label.toTextAuto( + fontSize: labelSize ?? 10, + color: labelColor ?? const Color(0xFF575757), + letterSpacing: -0.4, + ), + const SizedBox( + width: 1, + ), + Expanded( + flex: isExpanded ? 1 : 0, + child: value.toTextAuto( + fontSize: valueSize ?? 10, + color: valueColor ?? const Color(0xFF2B353E), + fontWeight: FontWeight.w700, + letterSpacing: -0.48, + ), + ), + ], + ); + } +} diff --git a/lib/widgets/cupertino_picker.dart b/lib/widgets/cupertino_picker.dart new file mode 100644 index 0000000..07887ff --- /dev/null +++ b/lib/widgets/cupertino_picker.dart @@ -0,0 +1,76 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:hmg_flutter_template/generated/locale_keys.g.dart'; +import 'package:sizer/sizer.dart'; + +class CustomCupertinoPicker { + static TextStyle textStyle(context) => TextStyle(color: Colors.black); + + static int cupertinoPickerIndex = 0; + + static buildPickerItems(context, List items, onSelectFun) { + return CupertinoPicker( + magnification: 1.5, + scrollController: FixedExtentScrollController(initialItem: cupertinoPickerIndex), + itemExtent: 25, + looping: false, + onSelectedItemChanged: (int index) { + cupertinoPickerIndex = index; + }, + children: items.map((item) { + return Text( + '${item.facilityName}', + style: TextStyle(fontSize: 12.sp, color: Colors.black), + ); + }).toList(), + ); + } + + static showCupertinoPicker(context, List items, onSelectFun) { + showModalBottomSheet( + isDismissible: false, + context: context, + builder: (BuildContext builder) { + return Container( + height: 40.h, + color: const Color(0xfff7f7f7), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Container( + color: const Color(0xfff7f7f7), + child: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + CupertinoButton( + child: Text(LocaleKeys.cancel.tr(), style: textStyle(context)), + onPressed: () { + Navigator.pop(context); + }, + ), + CupertinoButton( + child: Text( + LocaleKeys.select.tr(), + style: textStyle(context), + ), + onPressed: () { + Navigator.pop(context); + onSelectFun(cupertinoPickerIndex); + }, + ) + ], + ), + ), + Container( + height: 30.h, + color: const Color(0xfff7f7f7), + child: buildPickerItems(context, items, onSelectFun), + ) + ], + ), + ); + }, + ); + } +} diff --git a/lib/widgets/dialogs/confirm_dialog.dart b/lib/widgets/dialogs/confirm_dialog.dart new file mode 100644 index 0000000..fb8cf4d --- /dev/null +++ b/lib/widgets/dialogs/confirm_dialog.dart @@ -0,0 +1,63 @@ +import 'package:easy_localization/src/public_ext.dart'; +import 'package:flutter/material.dart'; +import 'package:hmg_flutter_template/classes/colors.dart'; +import 'package:hmg_flutter_template/extensions/int_extensions.dart'; +import 'package:hmg_flutter_template/extensions/string_extensions.dart'; +import 'package:hmg_flutter_template/extensions/widget_extensions.dart'; + +import 'package:hmg_flutter_template/widgets/button/default_button.dart'; + +class ConfirmDialog extends StatelessWidget { + final String? title; + final String message; + final String? okTitle; + final VoidCallback? onTap; + + const ConfirmDialog({Key? key, this.title, required this.message, this.okTitle, this.onTap}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Dialog( + backgroundColor: Colors.white, + shape: const RoundedRectangleBorder(), + insetPadding: const EdgeInsets.only(left: 21, right: 21), + child: Padding( + padding: const EdgeInsets.only(left: 20, right: 20, top: 18, bottom: 28), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + child: Text( + title ?? "LocaleKeys.confirm.tr()", + style: const TextStyle(fontSize: 24, fontWeight: FontWeight.w600, color: MyColors.darkTextColor, height: 35 / 24, letterSpacing: -0.96), + ).paddingOnly(top: 16), + ), + IconButton( + padding: EdgeInsets.zero, + icon: const Icon(Icons.close), + color: MyColors.darkTextColor, + constraints: const BoxConstraints(), + onPressed: () { + Navigator.pop(context); + }, + ) + ], + ), + message.toText16(color: MyColors.lightGrayColor), + 28.height, + DefaultButton( + okTitle ?? "LocaleKeys.ok.tr()", + onTap ?? () => Navigator.pop(context), + textColor: Colors.white, + //color: Ap.green, + ), + ], + ), + ), + ); + } +} diff --git a/lib/widgets/dialogs/dialogs.dart b/lib/widgets/dialogs/dialogs.dart new file mode 100644 index 0000000..debb147 --- /dev/null +++ b/lib/widgets/dialogs/dialogs.dart @@ -0,0 +1,14 @@ +import 'package:flutter/material.dart'; + +void showMDialog(context, {Widget? child,Color? backgroundColor,bool isDismissable=true}) async { + return showDialog( + context: context, + barrierDismissible: isDismissable, + builder: (context) { + return Dialog( + backgroundColor: backgroundColor, + child: child, + ); + }, + ); +} diff --git a/lib/widgets/dialogs/otp_dialog.dart b/lib/widgets/dialogs/otp_dialog.dart new file mode 100644 index 0000000..b119e2c --- /dev/null +++ b/lib/widgets/dialogs/otp_dialog.dart @@ -0,0 +1,255 @@ +import 'dart:async'; + +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/svg.dart'; +import 'package:hmg_flutter_template/classes/colors.dart'; +import 'package:hmg_flutter_template/extensions/int_extensions.dart'; +import 'package:hmg_flutter_template/extensions/string_extensions.dart'; +import 'package:hmg_flutter_template/generated/locale_keys.g.dart'; +import 'package:hmg_flutter_template/widgets/button/default_button.dart'; +import 'package:hmg_flutter_template/widgets/otp_widget.dart'; + +final ValueNotifier otpFieldClear = ValueNotifier(""); + +class OtpDialog { + final int type; + final String? mobileNo; + final Function(String, TextEditingController _pinPutController) onSuccess; + final Function onFailure; + final Function onResendCode; + + int remainingTime = 120; + + Future? timer; + + OtpDialog({required this.type, required this.mobileNo, required this.onSuccess, required this.onFailure, required this.onResendCode}); + + GlobalKey? verifyAccountForm = GlobalKey(); + + final TextEditingController _pinPutController = TextEditingController(); + + TextEditingController digit1 = TextEditingController(text: ""); + TextEditingController digit2 = TextEditingController(text: ""); + TextEditingController digit3 = TextEditingController(text: ""); + TextEditingController digit4 = TextEditingController(text: ""); + + Map verifyAccountFormValue = { + 'digit1': '', + 'digit2': '', + 'digit3': '', + 'digit4': '', + }; + final focusD1 = FocusNode(); + final focusD2 = FocusNode(); + final focusD3 = FocusNode(); + final focusD4 = FocusNode(); + String? errorMsg; + + // ProjectViewModel projectProvider; + String displayTime = ''; + dynamic setState; + bool stopTimer = false; + + // static String signature; + + void displayDialog(BuildContext context) async { + return showDialog( + context: context, + barrierColor: Colors.black.withOpacity(0.63), + builder: (context) { + // projectProvider = Provider.of(context); + return Dialog( + backgroundColor: Colors.white, + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)), + insetPadding: const EdgeInsets.only(left: 21, right: 21), + child: StatefulBuilder(builder: (context, setState) { + if (displayTime == '') { + startTimer(setState); + } + + return Container( + padding: const EdgeInsets.all(21), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SvgPicture.asset( + type == 1 + ? "assets/images/login/verify_sms.svg" + : type == 2 + ? "assets/images/login/verify_whatsapp.svg" + : type == 3 + ? "assets/images/login/verify_face.svg" + : 'assets/images/login/verify_thumb.svg', + height: 50, + width: 50, + ), + 12.height, + LocaleKeys.otp.tr().toText14(), + LocaleKeys.verification.tr().toText24(isBold: true), + 6.height, + ('${LocaleKeys.pleaseEnterTheVerificationCodeSentTo.tr()} xxxxxxxx${mobileNo.toString().substring(mobileNo.toString().length - 3)}').toText16(), + 18.height, + ValueListenableBuilder( + builder: (BuildContext context, String value, Widget? child) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Center( + child: OTPWidget( + autoFocus: true, + controller: _pinPutController, + defaultBorderColor: const Color(0xffD8D8D8), + maxLength: 4, + onTextChanged: (text) {}, + pinBoxColor: Colors.white, + onDone: (code) => _onOtpCallBack(code, null), + textBorderColor: const Color(0xffD8D8D8), + pinBoxWidth: 60, + pinBoxHeight: 60, + pinTextStyle: const TextStyle(fontSize: 24.0, color: MyColors.darkTextColor), + pinTextAnimatedSwitcherTransition: ProvidedPinBoxTextAnimation.scalingTransition, + pinTextAnimatedSwitcherDuration: const Duration(milliseconds: 300), + pinBoxRadius: 10, + keyboardType: TextInputType.number, + ), + ), + 10.height, + stopTimer + ? Row( + children: [ + Expanded( + child: LocaleKeys.codeExpire.tr().toText16( + color: MyColors.redColor, + maxlines: 1, + ), + ), + 12.width, + Image.asset( + "assets/icons/ic_alarm.png", + width: 20, + height: 20, + color: MyColors.redColor, + ), + ], + ) + : RichText( + text: TextSpan( + text: '${LocaleKeys.theVerificationCodeWillExpireIn.tr()}\n', + style: const TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: MyColors.darkTextColor, letterSpacing: -0.48), + children: [ + TextSpan( + text: displayTime, + style: const TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: MyColors.textMixColor, letterSpacing: -0.48), + ), + ], + ), + ), + ], + ); + }, + valueListenable: otpFieldClear, + ), + 18.height, + DefaultButton( + stopTimer ? LocaleKeys.resend.tr() : LocaleKeys.cancel.tr(), + () async { + if (stopTimer) { + hideSMSBox(context); + onResendCode(); + } else { + stopTimer = true; + // onFailure(); + hideSMSBox(context); + } + }, + colors: stopTimer + ? null + : [ + MyColors.redColor, + MyColors.redColor, + ], + ), + ], + ), + ); + }), + ); + }); + } + + InputDecoration buildInputDecoration(BuildContext context) { + return InputDecoration( + counterText: " ", + enabledBorder: const OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(10)), + borderSide: BorderSide(color: Colors.black), + ), + focusedBorder: OutlineInputBorder( + borderRadius: const BorderRadius.all(Radius.circular(10.0)), + borderSide: BorderSide(color: Theme.of(context).primaryColor), + ), + errorBorder: OutlineInputBorder( + borderRadius: const BorderRadius.all(Radius.circular(10.0)), + borderSide: BorderSide(color: Theme.of(context).errorColor), + ), + focusedErrorBorder: OutlineInputBorder( + borderRadius: const BorderRadius.all(Radius.circular(10.0)), + borderSide: BorderSide(color: Theme.of(context).errorColor), + ), + ); + } + + String getSecondsAsDigitalClock(int inputSeconds) { + int secNum = int.parse(inputSeconds.toString()); // don't forget the second param + int hours = (secNum / 3600).floor(); + int minutes = ((secNum - hours * 3600) / 60).floor(); + double seconds = secNum - hours * 3600 - minutes * 60; + String minutesString = ""; + String secondsString = ""; + minutesString = minutes < 10 ? "0$minutes" : minutes.toString(); + secondsString = seconds < 10 ? "0${seconds.toStringAsFixed(0)}" : seconds.toStringAsFixed(0); + return "$minutesString:$secondsString"; + } + + void startTimer(setState) { + remainingTime--; + if (stopTimer) return; + try { + setState(() { + displayTime = getSecondsAsDigitalClock(remainingTime); + }); + } catch (e) {} + + timer = Future.delayed(const Duration(seconds: 1), () { + if (remainingTime > 0) { + startTimer(setState); + } else { + setState(() { + stopTimer = true; + }); + } + }); + } + + void hideSMSBox(context) { + onFailure(); + } + + void _onOtpCallBack(String otpCode, bool? isAutofill) { + if (otpCode.length == 4) { + // stopTimer = true; + otpFieldClear.value = otpCode; + onSuccess(otpCode, _pinPutController); + } + } + +// static getSignature() async { +// // if (Platform.isAndroid) { +// // return await SmsRetriever.getAppSignature(); +// // } else { +// // return null; +// // } +// } +} diff --git a/lib/widgets/errors/error_message.dart b/lib/widgets/errors/error_message.dart new file mode 100644 index 0000000..48586f5 --- /dev/null +++ b/lib/widgets/errors/error_message.dart @@ -0,0 +1,38 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:hmg_flutter_template/extensions/string_extensions.dart'; + +class ErrorMessage extends StatelessWidget { + String? errorMessage; + + ErrorMessage({this.errorMessage}); + + @override + Widget build(BuildContext context) { + return SingleChildScrollView( + child: Center( + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SizedBox( + height: 100, + ), + SvgPicture.asset('assets/images/svgs/no_data.svg'), + Center( + child: Center( + child: Padding( + padding: const EdgeInsets.only(top: 12, bottom: 12, right: 20, left: 30), + child: Center( + child: (errorMessage ?? "").toText16( + textAlign: TextAlign.center, + ), + ), + ), + ), + ) + ], + ), + ), + ); + } +} diff --git a/lib/widgets/icons_app/config.json b/lib/widgets/icons_app/config.json new file mode 100644 index 0000000..20885d7 --- /dev/null +++ b/lib/widgets/icons_app/config.json @@ -0,0 +1,2668 @@ +{ + "name": "DoctorApp", + "css_prefix_text": "", + "css_use_suffix": false, + "hinting": true, + "units_per_em": 1000, + "ascent": 850, + "glyphs": [ + { + "uid": "9caed7b74de0f5a625ccb960f00d9c8d", + "css": "female_icon", + "code": 59392, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M543.9 587C543.6 583.8 543.4 578.5 543.2 573 596.5 567.8 633.8 555.9 633.8 542 633.6 542 633.6 541.5 633.6 541.2 593.9 507.7 668.1 269.7 529.9 274.6 521.2 267.7 505.9 261.6 484.2 261.6 296.9 274.9 379.7 499.6 337 542 337 542 337 542 336.9 542 336.9 542 336.9 542 336.9 542.2 336.9 542.2 336.9 542.2 336.9 542.2S336.9 542.2 336.9 542.2C337 555.8 373.1 567.4 424.9 572.7 424.7 576.1 424.5 580.1 423.8 587 402.3 640.9 257.6 625.8 250.8 729.7H716.2C709.6 625.8 565.4 640.9 543.9 587Z", + "width": 986 + }, + "search": [ + "female_icon" + ] + }, + { + "uid": "d30b03087b318086eb4f93c8ee4f0cf3", + "css": "male", + "code": 59393, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M493.2 537.2C568.8 537.2 630.1 475.9 630.1 400.3S568.8 263.5 493.2 263.5 356.4 324.7 356.4 400.4C356.5 475.9 417.7 537.2 493.2 537.2ZM614.9 567.6H562.6C518.6 587.8 468 587.8 424.1 567.6H371.6C304.5 567.6 250 622 250 689.2V704.5C250 729.6 270.4 750 295.7 750.1H690.9C716.1 750.1 736.5 729.7 736.6 704.5V689.2C736.5 622 682 567.6 614.9 567.6Z", + "width": 986 + }, + "search": [ + "male" + ] + }, + { + "uid": "06d6838cdcf6af812f2eb51e0269afc0", + "css": "home_icon_active", + "code": 59395, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M973.1 435L973.1 435 565 27A92.1 92.1 0 0 0 434.9 27L27.1 434.7 26.7 435.1A92 92 0 0 0 88 592C88.9 592 89.9 592 90.8 592H107.1V892.2A107.9 107.9 0 0 0 214.8 999.9H374.4A29.3 29.3 0 0 0 403.7 970.6V735.4A49.2 49.2 0 0 1 452.9 686.2H547A49.2 49.2 0 0 1 596.2 735.4V970.7A29.3 29.3 0 0 0 625.5 1000H785.1A107.9 107.9 0 0 0 892.8 892.3V592.1H907.8A92.1 92.1 0 0 0 973 434.9ZM931.6 523.7A33.4 33.4 0 0 1 907.9 533.5H863.5A29.3 29.3 0 0 0 834.2 562.8V892.3A49.2 49.2 0 0 1 785.1 941.5H654.9V735.4A107.9 107.9 0 0 0 547 627.5H452.9A107.9 107.9 0 0 0 345.1 735.2V941.3H214.9A49.2 49.2 0 0 1 165.8 892.1V562.8A29.3 29.3 0 0 0 136.5 533.5H92.8L91.4 533.5A33.4 33.4 0 0 1 68.3 476.4H68.3L476.3 68.4A33.4 33.4 0 0 1 523.6 68.4L931.4 476.2 931.6 476.4A33.4 33.4 0 0 1 931.6 523.7ZM931.6 523.7", + "width": 1000 + }, + "search": [ + "home_icon_active" + ] + }, + { + "uid": "1ab45bf5797fa9ab96b13fccd2be2b3c", + "css": "menu_icon", + "code": 59396, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M406.7 0H83.2A83.3 83.3 0 0 0 0 83.2V406.7A83.3 83.3 0 0 0 83.2 489.9H406.7A83.3 83.3 0 0 0 489.9 406.7V83.2A83.3 83.3 0 0 0 406.7 0ZM406.7 449.1H83.2A42.4 42.4 0 0 1 40.8 406.7V83.2A42.4 42.4 0 0 1 83.2 40.8H406.7A42.4 42.4 0 0 1 449 83.2V406.7H449A42.4 42.4 0 0 1 406.7 449.1ZM916.8 0H593.3A83.3 83.3 0 0 0 510.1 83.2V406.7A83.3 83.3 0 0 0 593.3 489.9H916.8A83.3 83.3 0 0 0 1000 406.7V83.2A83.3 83.3 0 0 0 916.8 0ZM959.1 406.7A42.4 42.4 0 0 1 916.8 449.1H593.3A42.4 42.4 0 0 1 550.9 406.7V83.2A42.4 42.4 0 0 1 593.3 40.8H916.8A42.4 42.4 0 0 1 959.1 83.2ZM406.7 510.1H83.2A83.3 83.3 0 0 0 0 593.3V916.8A83.3 83.3 0 0 0 83.2 1000H406.7A83.3 83.3 0 0 0 489.9 916.8V593.3A83.3 83.3 0 0 0 406.7 510.1ZM406.7 959.2H83.2A42.4 42.4 0 0 1 40.8 916.8V593.3A42.4 42.4 0 0 1 83.2 550.9H406.7A42.4 42.4 0 0 1 449 593.3V916.8H449A42.4 42.4 0 0 1 406.7 959.1ZM916.8 510.1H593.3A83.3 83.3 0 0 0 510.1 593.3V916.8A83.3 83.3 0 0 0 593.3 1000H916.8A83.3 83.3 0 0 0 1000 916.8V593.3A83.3 83.3 0 0 0 916.8 510.1ZM959.1 916.8A42.4 42.4 0 0 1 916.8 959.2H593.3A42.4 42.4 0 0 1 550.9 916.8V593.3A42.4 42.4 0 0 1 593.3 550.9H916.8A42.4 42.4 0 0 1 959.1 593.3Z", + "width": 1000 + }, + "search": [ + "menu_icon" + ] + }, + { + "uid": "174fb3d81ce317465a3bfa96c20a84fa", + "css": "message_icon", + "code": 59398, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M1182.9 44.3A100 100 0 0 0 1099.9 0.1H100A100 100 0 0 0 0 100V900A100 100 0 0 0 100 1000H1110.4A100 100 0 0 0 1200 900V100A100 100 0 0 0 1182.9 44.3ZM99.9 40H1100A60 60 0 0 1 1138.8 54.2L1061.2 128.2 734 440 612.8 555.7A20 20 0 0 1 589 555.7L466 440 60 54.3A60 60 0 0 1 100 40ZM39.9 90.4L423.2 454 40 820V100A59.7 59.7 0 0 1 40 90.4ZM1160 900A60 60 0 0 1 1107.6 960H100A60 60 0 0 1 40 900V874.6L452.2 481.6 562.4 586.4A60 60 0 0 0 571 592.2 58.4 58.4 0 0 0 600 600 63 63 0 0 0 640 586L748.8 482.4 1160 874.2ZM1160 100V819L776.8 454.7 1160 90.1A61.4 61.4 0 0 1 1160 100Z", + "width": 1200 + }, + "search": [ + "message_icon" + ] + }, + { + "uid": "f2ad4d0db965156a40b80bb175e15240", + "css": "discharge_patient", + "code": 59402, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M1080.3 903.6H1059.9V694.9A80.5 80.5 0 0 0 979.6 614.6H929.9A80.5 80.5 0 0 0 899.3 566.4V384.4A59 59 0 0 0 840.5 325.5H733.4A59 59 0 0 0 674.5 384.4V502.2A16.1 16.1 0 1 0 706.6 502.2V384.4A26.8 26.8 0 0 1 733.4 357.6H840.5A26.8 26.8 0 0 1 867.3 384.4V552A80.5 80.5 0 0 0 851.2 550.4H642.4V463.6A80.5 80.5 0 0 0 562.1 383.3H417.6V315.9A59 59 0 0 0 358.7 256.9H251.6A59 59 0 0 0 195.1 299.2 176.8 176.8 0 0 1 32.1 123.1 16.1 16.1 0 0 0 0 123.1 209.1 209.1 0 0 0 192.7 331.2V529.9A112 112 0 0 0 224.7 608.5V771.3L131.1 910.7A16.1 16.1 0 0 0 128.3 919.7V983.9A16.1 16.1 0 0 0 160.5 983.9V924.5L254.2 785.2A16 16 0 0 0 257 776.2V631.5A112.2 112.2 0 0 0 353.4 631.5V962.5A16.1 16.1 0 0 0 364.5 977.7L428.7 999.1A16.1 16.1 0 1 0 438.8 968.6L385.6 950.9V608.5A112 112 0 0 0 417.7 530V415.4H562.3A48.2 48.2 0 0 1 610.4 463.6V625.9A187.3 187.3 0 1 0 810.2 775.1H899.6V841A80.3 80.3 0 1 0 994.3 935.7H1080.5A16.1 16.1 0 0 0 1080.5 903.6ZM305.2 610.3A80.5 80.5 0 0 1 226.5 546H383.8A80.5 80.5 0 0 1 305.2 610.3ZM385.5 513.9H224.7V315.9A26.8 26.8 0 0 1 251.5 289.1H289V337.4A16.1 16.1 0 0 0 321.1 337.4V289.1H358.6A26.8 26.8 0 0 1 385.4 315.9ZM706.7 582.5H851.3A48.2 48.2 0 0 1 899.5 630.7V678.8H786.9A80.5 80.5 0 0 1 706.6 598.6ZM642.5 582.5H674.6V598.5A112 112 0 0 0 680.2 633.1 186 186 0 0 0 642.6 626ZM626.4 967.9A155.4 155.4 0 1 1 781.8 812.5 155.4 155.4 0 0 1 626.4 967.9ZM800.4 743.2A187 187 0 0 0 783.7 711H899.5V743.2ZM915.5 967.9A48.2 48.2 0 1 1 963.7 919.7 48.2 48.2 0 0 1 915.4 967.9ZM1027.9 903.7H994.1A80.5 80.5 0 0 0 931.5 841V646.8H979.7A48.2 48.2 0 0 1 1027.9 695ZM786.9 68.6A112.6 112.6 0 0 0 677.8 154.3 69.6 69.6 0 1 0 726.3 275.6 112.4 112.4 0 1 0 786.9 68.6ZM786.9 100.7A80.5 80.5 0 0 1 865.5 164 174.8 174.8 0 0 1 753.6 108 79.8 79.8 0 0 1 786.9 100.7ZM679.9 261.3A37.5 37.5 0 0 1 674.7 186.7 111.9 111.9 0 0 0 701.7 254.2 37.4 37.4 0 0 1 679.9 261.3ZM786.9 261.3A80.3 80.3 0 0 1 727.4 127.2 206.6 206.6 0 0 0 865.7 196.3 80.5 80.5 0 0 1 786.9 261.3ZM626.4 689.5A123.1 123.1 0 1 0 749.5 812.7 123.3 123.3 0 0 0 626.4 689.5ZM626.4 903.7A91 91 0 1 1 717.4 812.7 91.1 91.1 0 0 1 626.4 903.6ZM337.2 113A23.3 23.3 0 0 1 318.3 103.2 16.1 16.1 0 0 0 292 103.2 23.3 23.3 0 0 1 273 113 16.1 16.1 0 1 0 273 145.2 55.5 55.5 0 0 0 305.1 134.9 55.5 55.5 0 0 0 337.3 145.2 16.1 16.1 0 1 0 337.3 113ZM305.1 0A112.4 112.4 0 1 0 417.5 112.4 112.5 112.5 0 0 0 305.1 0ZM305.1 192.7A80.3 80.3 0 1 1 385.4 112.5 80.5 80.5 0 0 1 305.1 192.7Z", + "width": 1096 + }, + "search": [ + "discharge_patient" + ] + }, + { + "uid": "f94c7f2a567a023799a9f230b749c677", + "css": "schedule_icon", + "code": 59401, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M444.6 698.3A29.5 29.5 0 0 0 486.4 698.3L591.8 592.8A29.5 29.5 0 0 0 550.1 551L465.5 635.6 427 597A29.5 29.5 0 0 0 385.2 638.8ZM444.6 698.3M488.5 859.1A234.4 234.4 0 1 0 254.1 624.7 234.7 234.7 0 0 0 488.5 859.1ZM488.5 449.3A175.4 175.4 0 1 1 313.2 624.7 175.5 175.5 0 0 1 488.5 449.3ZM488.5 449.3M881.5 62.9H827.7V29.5A29.5 29.5 0 1 0 768.6 29.5V62.9H710.6V29.5A29.5 29.5 0 0 0 651.5 29.5V62.9H325.5V29.5A29.5 29.5 0 0 0 266.4 29.5V62.9H208.4V29.5A29.5 29.5 0 0 0 149.4 29.5V62.9H95.5A95.6 95.6 0 0 0 0 158.4V904.5A95.6 95.6 0 0 0 95.5 1000H881.5A95.6 95.6 0 0 0 976.9 904.5V158.4A95.6 95.6 0 0 0 881.5 62.9ZM918 904.5A36.5 36.5 0 0 1 881.5 940.9H95.5A36.5 36.5 0 0 1 59 904.5V308.4H917.9ZM59.1 158.4A36.5 36.5 0 0 1 95.5 121.9H149.4V155.3A29.5 29.5 0 0 0 208.4 155.3V121.9H266.4V155.3A29.5 29.5 0 0 0 325.5 155.3V121.9H651.5V155.3A29.5 29.5 0 0 0 710.6 155.3V121.9H768.6V155.3A29.5 29.5 0 0 0 827.7 155.3V121.9H881.5A36.5 36.5 0 0 1 918 158.4V249.3H59.1ZM59.1 158.4", + "width": 977 + }, + "search": [ + "schedule_icon" + ] + }, + { + "uid": "dbebba4fbd61d05cd5150c5555ab572e", + "css": "scdedule_icon_active", + "code": 59400, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M445.8 693.2A28.8 28.8 0 0 0 486.5 693.2L589.2 590.5A28.8 28.8 0 1 0 548.5 549.8L466.1 632.1 428.6 594.6A28.8 28.8 0 1 0 387.9 635.2ZM445.8 693.2M488.5 849.9A228.4 228.4 0 1 0 260.1 621.5 228.7 228.7 0 0 0 488.5 849.9ZM488.5 450.6A170.8 170.8 0 1 1 317.6 621.5 171 171 0 0 1 488.5 450.6ZM488.5 450.6M881.5 62.9H827.7V29.5A29.5 29.5 0 0 0 768.6 29.5V62.9H710.6V29.5A29.5 29.5 0 0 0 651.5 29.5V62.9H325.5V29.5A29.5 29.5 0 0 0 266.4 29.5V62.9H208.4V29.5A29.5 29.5 0 0 0 149.4 29.5V62.9H95.5A95.6 95.6 0 0 0 0 158.4V904.5A95.6 95.6 0 0 0 95.5 1000H881.5A95.6 95.6 0 0 0 976.9 904.5V158.4A95.6 95.6 0 0 0 881.5 62.9ZM918 904.5A36.5 36.5 0 0 1 881.5 940.9H95.5A36.5 36.5 0 0 1 59 904.5V308.4H917.9ZM59.1 158.4A36.5 36.5 0 0 1 95.5 121.9H149.4V155.3A29.5 29.5 0 0 0 208.4 155.3V121.9H266.4V155.3A29.5 29.5 0 0 0 325.5 155.3V121.9H651.5V155.3A29.5 29.5 0 0 0 710.6 155.3V121.9H768.6V155.3A29.5 29.5 0 0 0 827.7 155.3V121.9H881.5A36.5 36.5 0 0 1 918 158.4V249.3H59.1ZM59.1 158.4", + "width": 977 + }, + "search": [ + "scdedule_icon_active" + ] + }, + { + "uid": "67294966cf1313317b699a3c127bde7e", + "css": "message_icon_active", + "code": 59399, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M1182.9 44.3A100 100 0 0 0 1099.9 0.1H100A100 100 0 0 0 0 100V900A100 100 0 0 0 100 1000H1110.4A100 100 0 0 0 1200 900V100A100 100 0 0 0 1182.9 44.3ZM99.9 40H1100A60 60 0 0 1 1138.8 54.2L1061.2 128.2 734 440 612.8 555.7A20 20 0 0 1 589 555.7L466 440 60 54.3A60 60 0 0 1 100 40ZM39.9 90.4L423.2 454 40 820V100A59.7 59.7 0 0 1 40 90.4ZM1160 900A60 60 0 0 1 1107.6 960H100A60 60 0 0 1 40 900V874.6L452.2 481.6 562.4 586.4A60 60 0 0 0 571 592.2 58.4 58.4 0 0 0 600 600 63 63 0 0 0 640 586L748.8 482.4 1160 874.2ZM1160 100V819L776.8 454.7 1160 90.1A61.4 61.4 0 0 1 1160 100Z", + "width": 1200 + }, + "search": [ + "message_icon_active" + ] + }, + { + "uid": "d5276aeed9a2aead3e8b763de783f04e", + "css": "operations", + "code": 59411, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M166.4 983.8H859.2A452 452 0 0 0 166.4 983.8ZM275.2 471.7L231.5 515.4H230.7A154 154 0 0 0 76.7 669.5V780.4L330.4 526.7ZM335.1 554.4L353.5 536A50 50 0 0 0 385.5 547.8 50.8 50.8 0 0 0 421.1 533L436.4 517.8A50.3 50.3 0 0 0 518 533L575.8 475.3 735.4 547.8H884.3V596.2H1013.5V305.5H884.3V353.9H858.7L718 213.3 691.7 197.8 783.9 105.6A61.8 61.8 0 0 0 696.4 18.2L570.7 144H515.6A64.5 64.5 0 0 0 471.7 161.2L286.5 332.1A49.8 49.8 0 0 0 300.4 414.4L247.7 467ZM293.3 467L336.8 423.6A56.5 56.5 0 0 0 378.5 465.4L335.1 508.8ZM398.3 510.1A18.6 18.6 0 0 1 376.8 512.8L422.6 467H441.5ZM495.2 510.1A18.1 18.1 0 0 1 464.3 497.3 18 18 0 0 1 469.6 484.5L487.1 467H538.4ZM916.7 337.8H981.3V563.9H916.7V337.8ZM696.8 237.7L845.4 386.2H884.4V515.4H742.5L564.8 434.7H391.7A24.2 24.2 0 1 1 391.7 386.2H512.9L554 378.3A69 69 0 0 0 604.8 284.8L668.3 221.3ZM577.3 312.3A37.1 37.1 0 0 1 547.7 346.6L541.9 347.8ZM719.6 41A29.5 29.5 0 0 1 770 61.9 29.3 29.3 0 0 1 761.3 82.8L490 354.1H406.4ZM322.1 386.2H320.3A17.5 17.5 0 0 1 308.4 355.8L493.6 184.9A32.1 32.1 0 0 1 515.5 176.3H538.4L331.3 383.3A17.3 17.3 0 0 1 322.1 386.2ZM1011.2 975.6C1009.6 972.8 841.2 693.1 512.8 693.1S16 972.8 14.3 975.6L0 1000H1025.6ZM58.7 967.7C106.9 901.9 259.6 725.4 512.8 725.4S918.7 901.9 966.8 967.7Z", + "width": 1026 + }, + "search": [ + "operations" + ] + }, + { + "uid": "046c42711da6530ad1b224469263402a", + "css": "lab_results", + "code": 59406, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M258 580.6H225.8A48.5 48.5 0 0 0 274.2 629V596.9A16.1 16.1 0 0 1 258 580.6ZM258 580.6M419.4 758.1H451.5V790.2H419.4ZM419.4 758.1M290.3 822.6H322.5V854.7H290.3ZM290.3 822.6M177.4 903.2H209.6V935.4H177.4ZM177.4 903.2M403.2 887.1H435.4V919.2H403.2ZM403.2 887.1M241.9 725.8H274.1V758H241.9ZM241.9 725.8M290.3 0V225.8H129A32.1 32.1 0 0 0 96.9 258V290.1A32.1 32.1 0 0 0 129 322.3V436.5A81.6 81.6 0 0 1 125.5 460.7L5 852.1A114.3 114.3 0 0 0 114.3 1000H1000V0ZM129 258.1H419.4V290.2H129ZM419.4 322.6A32.1 32.1 0 0 0 451.5 290.4V258.3A32.1 32.1 0 0 0 419.4 226.1H387.2V96.8H645.3V354.8H419.4ZM156.3 470.5A114.3 114.3 0 0 0 161.3 436.9V322.6H387.1V436.9A114.3 114.3 0 0 0 392.1 470.5L436 612.9H382.4A112.8 112.8 0 0 0 387.1 580.8V575.3A113 113 0 0 0 371 517.2L274.2 355.8 177.4 517.1A112.9 112.9 0 0 0 161.3 575.2V580.6A112.2 112.2 0 0 0 166 612.8H112.5ZM274.1 661.3A80.8 80.8 0 0 1 193.5 580.6V575.2A80.6 80.6 0 0 1 205 533.7L274.1 418.4 343.3 533.6A80.7 80.7 0 0 1 354.8 575.1V580.6A80.8 80.8 0 0 1 274.2 661.3ZM114.3 967.9A81.3 81.3 0 0 1 33.8 871.1H145.2V838.9H42.9L52.8 806.8H193.5V774.6H62.8L72.7 742.5H145.2V710.4H82.6L102.5 645.9H181.7A112.6 112.6 0 0 0 366.7 645.9H445.9L512.5 862.3A82.1 82.1 0 0 1 434.1 967.9ZM967.9 967.9H513.5A114 114 0 0 0 543.4 852.2L423 461A81.6 81.6 0 0 1 419.4 436.9V387.1H677.5V64.5H354.8V225.8H322.7V32.1H967.9ZM967.9 967.9M758.1 580.6A177.4 177.4 0 1 0 935.5 758.1 177.6 177.6 0 0 0 758.1 580.6ZM758.1 903.2A145.2 145.2 0 1 1 903.2 758.1 145.3 145.3 0 0 1 758.1 903.2ZM758.1 903.2M806.5 661.3H709.7V709.7H661.3V806.5H709.7V854.9H806.5V806.5H854.9V709.7H806.5ZM822.6 741.9V774.1H774.2V822.5H742.1V774.1H693.4V741.9H741.8V693.4H774V741.8ZM822.6 741.9M709.7 80.6H741.8V112.8H709.7ZM709.7 80.6M774.2 80.6H935.5V112.8H774.2ZM774.2 80.6M709.7 209.7H741.8V241.8H709.7ZM709.7 209.7M774.2 209.7H935.5V241.8H774.2ZM774.2 209.7M709.7 145.2H935.5V177.3H709.7ZM709.7 145.2M709.7 274.2H935.5V306.3H709.7ZM709.7 274.2M709.7 338.7H935.5V370.9H709.7ZM709.7 338.7M483.9 451.6H935.5V483.8H483.9ZM483.9 451.6M483.9 516.1H935.5V548.3H483.9ZM483.9 516.1", + "width": 1000 + }, + "search": [ + "lab_results" + ] + }, + { + "uid": "406cfc8f4e89509892f7e12ecd31b289", + "css": "in_patient_white", + "code": 59405, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M527.4 413H462.3A18.1 18.1 0 1 0 462.3 449.1H527.4A18.1 18.1 0 0 0 527.4 413ZM1189.1 81.7H1134.6V36H1205.1A18.1 18.1 0 0 0 1205.1-0.2H276.4A18.1 18.1 0 0 0 276.4 36H1098.4V81.7H1043.9A34 34 0 0 0 1009.9 115.7V272.9A106.7 106.7 0 0 0 1065.4 366.5L1053.6 385.5A96.9 96.9 0 0 0 1049.3 479.6L1098.4 577.2A60.6 60.6 0 0 1 1085.9 648.1L996 729.3V380.9A50.5 50.5 0 0 0 945.6 330.4H893.4A176.1 176.1 0 0 0 887.3 304.3 45.1 45.1 0 0 1 886.3 281.3L899.6 219.5A35.2 35.2 0 0 0 857.7 177.6C839 180.1 793.2 196.3 774.1 189.3A177.2 177.2 0 0 0 752.2 183.6 18.1 18.1 0 0 0 745.3 219.1 140.6 140.6 0 0 1 762.7 223.6 81 81 0 0 0 805.4 225.9L864.1 213.2 851 273.7C844.2 299.6 859.8 327.5 859.3 357.4V544.3A140.8 140.8 0 0 1 852.7 587 80.6 80.6 0 0 0 849.7 600.4 229.7 229.7 0 0 0 696.9 542.5H619.5V524.7A174.6 174.6 0 0 0 669.7 432.7 98.9 98.9 0 0 0 726.2 371.9 69.3 69.3 0 0 0 687 282.5H687A43.9 43.9 0 0 0 673 280.3V194.2A95.3 95.3 0 0 0 577.8 99H417.5A95.3 95.3 0 0 0 323.3 180.4H276.9C251.4 177.8 225.6 193.3 197.7 190.7L137.6 177.7A35.2 35.2 0 0 0 95.7 219.6L109 281.4A45.1 45.1 0 0 1 108 304.4 176 176 0 0 0 101.9 330.5H56.1V75.1A39 39 0 0 1 95 36H193.3A18.1 18.1 0 0 0 193.3-0.2H95A75.1 75.1 0 0 0 20 75.1V340.8A50.4 50.4 0 0 0 0 380.9L0.5 968.4A31.6 31.6 0 0 0 32.1 1000H964.2A31.6 31.6 0 0 0 995.8 968.4L996.1 778 1110.3 674.7 1110.5 674.5A96.9 96.9 0 0 0 1130.8 561L1081.5 463.3A60.6 60.6 0 0 1 1084.2 404.5L1100.6 378.2A107 107 0 0 0 1116.5 379.4H1116.5A106.7 106.7 0 0 0 1207.7 328 111.8 111.8 0 0 0 1223.1 272.8V115.7A34 34 0 0 0 1189.1 81.7ZM960 380.8V762L940.2 779.9Q934.1 774.3 927.7 769A229.2 229.2 0 0 0 892.5 650.7 116.7 116.7 0 0 1 887.2 597.8 176.8 176.8 0 0 0 895.5 544.2V366.6H945.6A14.3 14.3 0 0 1 960 380.9ZM412 551.5A175.1 175.1 0 0 0 583.3 551.5V584.4A14.9 14.9 0 0 1 568.5 599.2H426.8A14.9 14.9 0 0 1 412 584.4ZM675.9 316.7A33.5 33.5 0 0 1 691.8 360.6C685.7 379.5 666.4 398.7 652.9 399.4A18.1 18.1 0 0 0 635.8 415.3 139.1 139.1 0 0 1 359.5 415.3 18.1 18.1 0 0 0 342.5 399.4C329 398.7 309.6 379.5 303.5 360.6A33.5 33.5 0 0 1 319.5 316.7 6.6 6.6 0 0 1 321.4 316.3C322.6 316.3 323.6 317.1 325.7 320.1A18 18 0 0 0 345.9 326.7C355.3 324 360.3 310.9 358.5 298.3A69.5 69.5 0 0 1 427.9 228.9H567.5A69.5 69.5 0 0 1 636.9 298.3C636.5 307.9 635.8 320.8 649.5 326.7A18 18 0 0 0 669.7 320.1C672.8 315.7 673.6 316 675.9 316.8ZM358.5 194.1A59.2 59.2 0 0 1 417.6 134.9H578A59.2 59.2 0 0 1 637.2 194.1V219A105.2 105.2 0 0 0 567.7 192.9H427.9A105.2 105.2 0 0 0 358.5 219ZM190.1 225.9A81.2 81.2 0 0 0 232.8 223.6 140.4 140.4 0 0 1 277.1 216.5H322.3V280.2A43.7 43.7 0 0 0 308.3 282.4 69.3 69.3 0 0 0 269.2 371.7 98.8 98.8 0 0 0 325.7 432.5 174.6 174.6 0 0 0 375.8 524.6V542.3H298.3A229.7 229.7 0 0 0 145.6 600.3 80.8 80.8 0 0 0 142.6 586.9 140.8 140.8 0 0 1 136 544.1V357.5C134.5 331.6 151.1 303.5 144.4 273.7L131.5 213.3ZM36.2 380.9A14.3 14.3 0 0 1 50.5 366.6H99.8V544.4A176.8 176.8 0 0 0 108.1 598.1 121.6 121.6 0 0 1 102.8 650.7 229.2 229.2 0 0 0 67.7 769Q56.9 778 46.6 787.8A148.1 148.1 0 0 0 36.1 799V380.9ZM959.7 963.9H36.6V896.2A114.3 114.3 0 0 1 71.6 814 359.5 359.5 0 0 1 251.1 720.6 18.1 18.1 0 1 0 244.1 685.1 394.5 394.5 0 0 0 106.5 740.6 194.8 194.8 0 0 1 298.3 578.5H375.9V584.3A51 51 0 0 0 426.8 635.3H568.7A51 51 0 0 0 619.6 584.3V578.5H696.9A194.8 194.8 0 0 1 888.6 740.4 395 395 0 0 0 674.2 677.6H332A18.1 18.1 0 1 0 332 713.8H674.3A358.9 358.9 0 0 1 898.1 791.4L898.6 791.8Q912.2 802.6 924.9 814.8A114.5 114.5 0 0 1 959.7 896.8V963.7ZM1187 117.8V167.6H1046V117.8ZM1181.5 300.3A73.5 73.5 0 0 1 1116.5 343.4 70.6 70.6 0 0 1 1046 272.9V203.6H1187V272.7A70.3 70.3 0 0 1 1181.5 300.3Z", + "width": 1223 + }, + "search": [ + "in_patient_white" + ] + }, + { + "uid": "58949bc191ed8ccb59251e337588f540", + "css": "out_patient", + "code": 59412, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M951.6 483.9H698.5A96.4 96.4 0 0 0 723.3 346.4 305.1 305.1 0 0 0 742 242.1V201.9A201.9 201.9 0 0 0 435.5 29.2 201.9 201.9 0 0 0 129 201.9V205.4L112.9 177.2 42.8 299.9A80.6 80.6 0 0 0 130.2 417.6 96.9 96.9 0 0 0 214.9 499.3 226.4 226.4 0 0 0 355 662.3V696.2L219.7 720.8A267.3 267.3 0 0 0 0 983.8V999.9H871V983.8A267.3 267.3 0 0 0 651.4 720.7L516.1 696.1V662.3A224.7 224.7 0 0 0 603.2 602.2C604 602.6 604.9 602.7 605.7 603.1A92.8 92.8 0 0 0 647.1 612.9H951.6A48.4 48.4 0 0 0 1000 564.5V532.3A48.4 48.4 0 0 0 951.6 483.9ZM660.5 465.7C660.8 461 661.3 456.3 661.3 451.6V341A64.2 64.2 0 0 1 660.5 465.7ZM161.3 242V201.9A169.6 169.6 0 0 1 424.9 60.8L435.5 67.8 446 60.8A169.6 169.6 0 0 1 709.7 201.9V242A273.3 273.3 0 0 1 697.8 322.1 96.2 96.2 0 0 0 661.4 307.9V282.3L596.8 233.9V193.5A32.3 32.3 0 0 0 564.5 161.3H306.5A32.3 32.3 0 0 0 274.3 193.5V233.9L209.7 282.3V307.8A95.4 95.4 0 0 0 189.2 313.9 78.8 78.8 0 0 0 183 299.9L162.2 263.6C161.6 256.4 161.2 249.2 161.2 242ZM564.5 290.3H306.5V193.5H564.5ZM112.1 387.1A47.7 47.7 0 0 1 70.8 316L112.9 242.2 155 316A47.7 47.7 0 0 1 112.1 387.2ZM161.3 403.3A79.4 79.4 0 0 0 192.7 348.1 63.2 63.2 0 0 1 209.7 341V451.6C209.7 456.4 210.1 461 210.4 465.7A64.5 64.5 0 0 1 161.3 403.3ZM242 451.6V298.4L274.3 274.3V290.4A32.3 32.3 0 0 0 306.5 322.7H564.6A32.3 32.3 0 0 0 596.9 290.4V274.3L629.1 298.5V451.7A195.1 195.1 0 0 1 625.7 486.5 92.8 92.8 0 0 0 605.8 493.7 60.6 60.6 0 0 1 578.9 500.1H467.7A48.4 48.4 0 1 0 467.7 596.9H563.1A193.2 193.2 0 0 1 242 451.6ZM467.8 564.5A16.1 16.1 0 1 1 467.8 532.3H483.9V564.5ZM362.7 727.6A80.7 80.7 0 0 0 416.3 771.7 64.5 64.5 0 0 1 354.8 806.5C319.2 806.5 290.2 784.8 290.2 758.1A36.4 36.4 0 0 1 295.4 739.8ZM838.2 967.8H32.8A235 235 0 0 1 225.3 752.6L259.2 746.4A64.8 64.8 0 0 0 258.1 758.1 89.9 89.9 0 0 0 354.8 838.7 102.9 102.9 0 0 0 435.4 802.6 102.9 102.9 0 0 0 516 838.7 89.9 89.9 0 0 0 612.8 758.1 65.9 65.9 0 0 0 611.7 746.4L645.6 752.6A235 235 0 0 1 838.2 967.7ZM575.4 739.8A36.4 36.4 0 0 1 580.6 758.1C580.6 784.8 551.6 806.5 516 806.5A64.5 64.5 0 0 1 454.4 771.7 80.5 80.5 0 0 0 508.1 727.6ZM483.8 677.4V693.6A48.4 48.4 0 1 1 387 693.6V672.1A222.6 222.6 0 0 0 483.8 672.1ZM620 574.3A92.9 92.9 0 0 0 578.6 564.5H516V532.3H578.6A93.1 93.1 0 0 0 620 522.5 60.6 60.6 0 0 1 646.9 516.1H870.8V580.6H647.1A60.6 60.6 0 0 1 620.1 574.3ZM967.7 564.5A16.2 16.2 0 0 1 951.5 580.7H903.3V516.1H951.7A16.2 16.2 0 0 1 967.8 532.3ZM475.1 368.4L493 341.5 589.7 406.1 571.8 432.9ZM281.5 405.8L378.2 341.3 396.1 368.1 299.4 432.7Z", + "width": 1000 + }, + "search": [ + "out_patient" + ] + }, + { + "uid": "31c2eb5f0f3a8d8d17c7b439045d641f", + "css": "menu_icon_active", + "code": 59397, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M406.7 0H83.2A83.3 83.3 0 0 0 0 83.2V406.7A83.3 83.3 0 0 0 83.2 489.9H406.7A83.3 83.3 0 0 0 489.9 406.7V83.2A83.3 83.3 0 0 0 406.7 0ZM406.7 449.1H83.2A42.4 42.4 0 0 1 40.8 406.7V83.2A42.4 42.4 0 0 1 83.2 40.8H406.7A42.4 42.4 0 0 1 449 83.2V406.7H449A42.4 42.4 0 0 1 406.7 449.1ZM916.8 0H593.3A83.3 83.3 0 0 0 510.1 83.2V406.7A83.3 83.3 0 0 0 593.3 489.9H916.8A83.3 83.3 0 0 0 1000 406.7V83.2A83.3 83.3 0 0 0 916.8 0ZM959.1 406.7A42.4 42.4 0 0 1 916.8 449.1H593.3A42.4 42.4 0 0 1 550.9 406.7V83.2A42.4 42.4 0 0 1 593.3 40.8H916.8A42.4 42.4 0 0 1 959.1 83.2ZM406.7 510.1H83.2A83.3 83.3 0 0 0 0 593.3V916.8A83.3 83.3 0 0 0 83.2 1000H406.7A83.3 83.3 0 0 0 489.9 916.8V593.3A83.3 83.3 0 0 0 406.7 510.1ZM406.7 959.2H83.2A42.4 42.4 0 0 1 40.8 916.8V593.3A42.4 42.4 0 0 1 83.2 550.9H406.7A42.4 42.4 0 0 1 449 593.3V916.8H449A42.4 42.4 0 0 1 406.7 959.1ZM916.8 510.1H593.3A83.3 83.3 0 0 0 510.1 593.3V916.8A83.3 83.3 0 0 0 593.3 1000H916.8A83.3 83.3 0 0 0 1000 916.8V593.3A83.3 83.3 0 0 0 916.8 510.1ZM959.1 916.8A42.4 42.4 0 0 1 916.8 959.2H593.3A42.4 42.4 0 0 1 550.9 916.8V593.3A42.4 42.4 0 0 1 593.3 550.9H916.8A42.4 42.4 0 0 1 959.1 593.3Z", + "width": 1000 + }, + "search": [ + "menu_icon_active" + ] + }, + { + "uid": "4a41c9ccf8e162ce37b5cfe9fa8faa79", + "css": "patient", + "code": 59413, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M527.5 413H462.5A18.1 18.1 0 1 0 462.5 449.1H527.5A18.1 18.1 0 1 0 527.5 413ZM1189.1 81.7H1134.5V36.1H1205.1A18.1 18.1 0 0 0 1205.1 0H276.4A18.1 18.1 0 1 0 276.4 36.1H1098.4V81.7H1043.8A34 34 0 0 0 1009.9 115.7V272.9A106.7 106.7 0 0 0 1065.4 366.4L1053.6 385.4A96.9 96.9 0 0 0 1049.3 479.6L1098.4 577.2A60.5 60.5 0 0 1 1085.9 648L996.1 729.3V380.9A50.5 50.5 0 0 0 945.6 330.4H893.5A176.1 176.1 0 0 0 887.4 304.3 45.2 45.2 0 0 1 886.3 281.3L899.6 219.5A35.2 35.2 0 0 0 857.8 177.7C839.2 180.1 793.2 196.3 774.1 189.4A177.3 177.3 0 0 0 752.3 183.6 18.1 18.1 0 0 0 745.4 219.1 140.6 140.6 0 0 1 762.7 223.7 81 81 0 0 0 805.3 225.9L864 213.3 850.9 273.8C844.1 299.7 859.8 327.6 859.3 357.5V544.4A140.8 140.8 0 0 1 852.7 586.9 80.7 80.7 0 0 0 849.7 600.2 229.7 229.7 0 0 0 697 542.3H619.6V524.5A174.6 174.6 0 0 0 669.7 432.4 98.9 98.9 0 0 0 726.3 371.6 69.3 69.3 0 0 0 687.2 282.2H687.2A43.9 43.9 0 0 0 673.1 280.1V194.2A95.3 95.3 0 0 0 577.9 99H417.5A95.3 95.3 0 0 0 323.3 180.4H276.9C251.4 177.8 225.6 193.3 197.7 190.6L137.6 177.7A35.2 35.2 0 0 0 95.7 219.6L109 281.4A45.2 45.2 0 0 1 108 304.4 176 176 0 0 0 101.9 330.4H56.1V75.2A39 39 0 0 1 95 36.2H193.3A18.1 18.1 0 1 0 193.3 0.1H95A75.1 75.1 0 0 0 20 75.1V340.8A50.4 50.4 0 0 0 0 380.9L0.5 968.4A31.6 31.6 0 0 0 32 1000H964.2A31.6 31.6 0 0 0 995.8 968.4L996.1 778 1110.2 674.7 1110.5 674.5A96.9 96.9 0 0 0 1130.7 561L1081.6 463.3A60.5 60.5 0 0 1 1084.3 404.5L1100.6 378.3A107 107 0 0 0 1116.5 379.5H1116.5A106.7 106.7 0 0 0 1207.7 328.2 111.7 111.7 0 0 0 1223.2 272.9V115.7A34 34 0 0 0 1189.1 81.7ZM959.9 380.9V762L940.2 779.9Q934 774.3 927.6 769A229.2 229.2 0 0 0 892.5 650.8 116.7 116.7 0 0 1 887.2 598 176.8 176.8 0 0 0 895.4 544.4V366.6H945.6A14.3 14.3 0 0 1 960 380.9ZM412 551.6A175.1 175.1 0 0 0 583.3 551.6V584.4A14.8 14.8 0 0 1 568.5 599.3H426.8A14.8 14.8 0 0 1 411.9 584.4ZM675.9 316.8A33.5 33.5 0 0 1 691.8 360.7C685.7 379.6 666.4 398.8 652.9 399.4A18.1 18.1 0 0 0 635.8 415.4 139.1 139.1 0 0 1 359.5 415.4 18.1 18.1 0 0 0 342.5 399.4C329 398.8 309.7 379.6 303.5 360.7A33.5 33.5 0 0 1 319.5 316.8 6.5 6.5 0 0 1 321.4 316.4C322.6 316.4 323.6 317.2 325.7 320.2A18.1 18.1 0 0 0 345.9 326.9C355.3 324.2 360.3 311.1 358.5 298.5A69.5 69.5 0 0 1 428 229.1H567.4A69.5 69.5 0 0 1 636.9 298.5C636.5 308.2 635.8 321 649.5 326.9A18.1 18.1 0 0 0 669.7 320.2C672.8 315.8 673.6 316.1 675.9 316.8ZM358.5 194.2A59.1 59.1 0 0 1 417.5 135.2H577.8A59.1 59.1 0 0 1 636.9 194.2V219.1A105.1 105.1 0 0 0 567.4 193H427.9A105.1 105.1 0 0 0 358.5 219.1ZM190.1 225.9A81.2 81.2 0 0 0 232.6 223.6 140.4 140.4 0 0 1 276.9 216.5H322.3V280.3A43.7 43.7 0 0 0 308.2 282.5 69.3 69.3 0 0 0 269.1 371.9 98.8 98.8 0 0 0 325.7 432.7 174.6 174.6 0 0 0 375.8 524.8V542.5H298.3A229.7 229.7 0 0 0 145.6 600.5 80.8 80.8 0 0 0 142.6 587.2 140.9 140.9 0 0 1 136 544.7V357.5C134.5 331.6 151.1 303.5 144.4 273.7L131.4 213.3ZM36.1 380.9A14.3 14.3 0 0 1 50.5 366.6H99.9V544.4A176.8 176.8 0 0 0 108.1 597.9 121.7 121.7 0 0 1 102.8 650.8 229.2 229.2 0 0 0 67.7 769.1Q56.9 778.2 46.6 787.9A148 148 0 0 0 36.1 799.1V380.9ZM959.7 963.9H36.6V896.2A114.3 114.3 0 0 1 71.6 814 359.5 359.5 0 0 1 251.1 720.5 18.1 18.1 0 1 0 244.1 685 394.5 394.5 0 0 0 106.5 740.6 194.8 194.8 0 0 1 298.3 578.4H375.8V584.2A51 51 0 0 0 426.8 635.4H568.5A51 51 0 0 0 619.6 584.4V578.6H697.1A194.8 194.8 0 0 1 888.9 740.5 395 395 0 0 0 674.4 677.7H331.9A18.1 18.1 0 1 0 331.9 713.8H674.3A359 359 0 0 1 898.1 791.5L898.6 791.9Q912.2 802.7 924.9 815A114.3 114.3 0 0 1 959.7 896.9V963.9ZM1187 117.8V167.7H1046.1V117.8ZM1181.5 300.3A73.5 73.5 0 0 1 1116.5 343.4 70.6 70.6 0 0 1 1046 272.9V203.8H1186.9V272.9A70.3 70.3 0 0 1 1181.5 300.3Z", + "width": 1223 + }, + "search": [ + "patient" + ] + }, + { + "uid": "7d90537e42db22c38e8bb2243c8be55a", + "css": "qr-code", + "code": 59414, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M968.8 281.3C951.5 281.3 937.5 267.3 937.5 250V89.8C937.5 74.8 925.2 62.5 910.2 62.5H750C732.7 62.5 718.8 48.5 718.8 31.3S732.7 0 750 0H910.2C959.7 0 1000 40.3 1000 89.8V250C1000 267.3 986 281.3 968.8 281.3ZM31.3 281.3C14 281.3 0 267.3 0 250V89.8C0 40.3 40.3 0 89.8 0H250C267.3 0 281.3 14 281.3 31.3S267.3 62.5 250 62.5H89.8C74.8 62.5 62.5 74.8 62.5 89.8V250C62.5 267.3 48.5 281.3 31.3 281.3ZM250 1000H89.8C40.3 1000 0 959.7 0 910.2V750C0 732.7 14 718.8 31.3 718.8S62.5 732.7 62.5 750V910.2C62.5 925.2 74.8 937.5 89.8 937.5H250C267.3 937.5 281.3 951.5 281.3 968.8S267.3 1000 250 1000ZM910.2 1000H750C732.7 1000 718.8 986 718.8 968.8S732.7 937.5 750 937.5H910.2C925.2 937.5 937.5 925.2 937.5 910.2V750C937.5 732.7 951.5 718.8 968.8 718.8S1000 732.7 1000 750V910.2C1000 959.7 959.7 1000 910.2 1000ZM378.9 468.8H214.8C165.3 468.8 125 428.4 125 378.9V214.8C125 165.3 165.3 125 214.8 125H378.9C428.4 125 468.8 165.3 468.8 214.8V378.9C468.8 428.4 428.4 468.8 378.9 468.8ZM214.8 187.5C199.8 187.5 187.5 199.8 187.5 214.8V378.9C187.5 394 199.8 406.3 214.8 406.3H378.9C394 406.3 406.3 394 406.3 378.9V214.8C406.3 199.8 394 187.5 378.9 187.5ZM378.9 875H214.8C165.3 875 125 834.7 125 785.2V621.1C125 571.6 165.3 531.3 214.8 531.3H378.9C428.4 531.3 468.8 571.6 468.8 621.1V785.2C468.8 834.7 428.4 875 378.9 875ZM214.8 593.8C199.8 593.8 187.5 606 187.5 621.1V785.2C187.5 800.2 199.8 812.5 214.8 812.5H378.9C394 812.5 406.3 800.2 406.3 785.2V621.1C406.3 606 394 593.8 378.9 593.8ZM785.2 468.8H621.1C571.6 468.8 531.3 428.4 531.3 378.9V214.8C531.3 165.3 571.6 125 621.1 125H785.2C834.7 125 875 165.3 875 214.8V378.9C875 428.4 834.7 468.8 785.2 468.8ZM621.1 187.5C606 187.5 593.8 199.8 593.8 214.8V378.9C593.8 394 606 406.3 621.1 406.3H785.2C800.2 406.3 812.5 394 812.5 378.9V214.8C812.5 199.8 800.2 187.5 785.2 187.5ZM824.2 687.5H750V582C750 554 727.2 531.3 699.2 531.3H582C554 531.3 531.3 554 531.3 582V699.2C531.3 727.2 554 750 582 750H687.5V824.2C687.5 852.2 710.3 875 738.3 875H824.2C852.2 875 875 852.2 875 824.2V738.3C875 710.3 852.2 687.5 824.2 687.5ZM593.8 593.8H687.5V687.5H593.8ZM812.5 812.5H750V750H812.5ZM312.5 343.8H281.3C264 343.8 250 329.8 250 312.5V281.3C250 264 264 250 281.3 250H312.5C329.8 250 343.8 264 343.8 281.3V312.5C343.8 329.8 329.8 343.8 312.5 343.8ZM718.8 343.8H687.5C670.2 343.8 656.3 329.8 656.3 312.5V281.3C656.3 264 670.2 250 687.5 250H718.8C736 250 750 264 750 281.3V312.5C750 329.8 736 343.8 718.8 343.8ZM312.5 750H281.3C264 750 250 736 250 718.8V687.5C250 670.2 264 656.3 281.3 656.3H312.5C329.8 656.3 343.8 670.2 343.8 687.5V718.8C343.8 736 329.8 750 312.5 750Z", + "width": 1000 + }, + "search": [ + "qr-code" + ] + }, + { + "uid": "47870853aec32b02cd5a40fbb389baa1", + "css": "radiology", + "code": 59415, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M9.5 420.4A9.5 9.5 0 0 1 2.1 405C147.5 223 255.4 180.6 359.8 139.6L366.3 137C407.7 120.8 430.8 77.5 435.2 8.9A9.6 9.6 0 0 1 445.2 0.1 9.5 9.5 0 0 1 454.1 10.1C449.2 86.8 422 135.5 373.3 154.7L366.8 157.2C264.6 197.2 159.1 238.8 16.9 416.9A9.5 9.5 0 0 1 9.5 420.4ZM216.3 1000L215.2 1000A9.5 9.5 0 0 1 206.9 989.5C207.1 987.8 227.5 820.4 227.4 753.3 227.4 695.6 209.9 542.1 203.5 488.5 178.7 511.9 127.1 560.1 104.3 577.7A458 458 0 0 1 62.3 604.7L49.8 612.2A9.5 9.5 0 1 1 40 596L52.6 588.4A445.8 445.8 0 0 0 92.9 562.6C122.1 540.1 203.5 462.6 204.3 461.8A9.5 9.5 0 0 1 220.2 467.5C221.3 476.2 246.5 682 246.5 753.2 246.5 821.5 226.7 984.8 225.9 991.7A9.5 9.5 0 0 1 216.5 1000.1ZM1058.7 420.4A9.5 9.5 0 0 1 1051.3 416.9C909.1 238.9 803.5 197.4 701.4 157.2L694.9 154.7C646.1 135.5 619 86.8 614.1 10.1A9.5 9.5 0 0 1 633.1 8.9C637.4 77.7 660.6 120.9 701.9 137L708.4 139.6C812.7 180.6 920.8 223 1066.2 405A9.5 9.5 0 0 1 1058.7 420.4ZM852.1 1000A9.5 9.5 0 0 1 842.8 991.7C841.9 984.7 821.8 821.4 821.8 753.2 821.8 681.9 847 476.1 848.1 467.4A9.5 9.5 0 0 1 864 461.8C864.8 462.5 946.2 540 975.4 562.5A448.1 448.1 0 0 0 1015.7 588.3L1028.2 595.9A9.5 9.5 0 0 1 1018.4 612.1L1006 604.6A458.9 458.9 0 0 1 963.9 577.6C941.1 560.1 889.6 511.8 864.8 488.4 858.4 542 840.9 695.5 840.8 753.2 840.8 820.2 861.5 987.7 861.8 989.3A9.5 9.5 0 0 1 853.6 999.8L852.4 999.8ZM399 631.1A96.4 96.4 0 0 1 307 589.4 19 19 0 0 1 341.2 573C350.9 593.3 408.2 604.5 479.4 576.7A19 19 0 1 1 493.3 612.1 263.1 263.1 0 0 1 399 631.1ZM388 705.8A167.6 167.6 0 0 1 333.5 697.1 89.7 89.7 0 0 1 280.3 655.8 19 19 0 1 1 314.5 639.4 53.5 53.5 0 0 0 346 661.3 171.1 171.1 0 0 0 477.9 645 19 19 0 0 1 494.8 679 241.9 241.9 0 0 1 388 705.8ZM348.5 817.7A76.6 76.6 0 0 1 310 808.1 86.8 86.8 0 0 1 276.4 711.3 19 19 0 0 1 313.7 717.8C308.8 746 314.3 766.8 328.8 775.2 349.3 786.9 395.9 778.4 465.4 719.2A19 19 0 0 1 489.9 748.1C425.6 802.7 379.6 817.7 348.4 817.7ZM599.7 557.3Q588.4 557.3 576.4 556.8A19 19 0 0 1 578 518.9C714.7 524.4 772.4 478.5 776.6 464.6A19 19 0 0 1 811.3 449.3 37.2 37.2 0 0 1 807.1 487.8C784.2 523.3 711.8 557.3 599.7 557.3ZM582.6 482.5H579.4A19 19 0 1 1 579.4 444.6C580.4 444.6 581.3 444.6 582.3 444.6 691.4 444.6 710.6 422.1 713.3 417.5 714.1 416.2 716 413 712.7 406.7A19 19 0 1 1 746.2 388.9 47.9 47.9 0 0 1 745.8 437.1C727.4 467.7 674 482.5 582.6 482.5ZM609.9 248.4A19 19 0 0 0 572.3 245.3 67 67 0 0 1 553.3 254.8V205.7A19 19 0 1 0 515.4 205.7V254.7A66.5 66.5 0 0 1 496.4 245.1 19 19 0 0 0 458.7 248.3C458.7 273.4 489.6 287.4 515.4 294.8V594.3A19 19 0 1 0 553.3 594.3V294.9C579.1 287.5 609.9 273.5 609.9 248.4ZM490.1 348.1H491.1A19 19 0 1 0 492 310.1C425.2 306.6 405.2 290 403.1 285A19 19 0 0 0 369.2 268 36.8 36.8 0 0 0 370.2 304C380.3 321.8 409.3 343.9 490.1 348.1ZM490.3 518.9C353.4 524.5 295.9 478.5 291.6 464.6A19 19 0 0 0 257 449.3 37.2 37.2 0 0 0 261.2 487.8C284 523.4 356.4 557.4 468.5 557.4Q479.9 557.4 491.8 556.9A19 19 0 0 0 490.3 519ZM485.8 482.5H488.8A19 19 0 0 0 488.8 444.6H488.8C376.8 444.9 357.7 422.1 354.9 417.5 354.1 416.2 352.2 413 355.6 406.7A19 19 0 0 0 322 388.9 47.9 47.9 0 0 0 322.4 437.1C340.8 467.7 394.3 482.5 485.8 482.5ZM577.1 348.1H578.1C658.8 343.9 687.8 321.8 697.9 304.1A36.8 36.8 0 0 0 698.9 268 19 19 0 0 0 665.1 285.1C662.9 290 642.9 306.8 576.1 310.2A19 19 0 0 0 577.1 348.1ZM491.3 369.3H491.3C385.8 369.7 367.8 348.3 365.2 344.1 364.6 343 363 340.3 365.9 334.8A19 19 0 1 0 332.4 317 46.5 46.5 0 0 0 332.8 363.7C350.4 393 401.4 407.3 488.6 407.3H491.4A19 19 0 0 0 491.4 369.4ZM736.3 317A19 19 0 1 0 702.8 334.8C705.8 340.4 704.2 343 703.5 344.1 700.9 348.4 683 369.4 580.1 369.4 579.2 369.4 578.3 369.4 577.3 369.4A19 19 0 0 0 577.3 407.3H580.2C667.3 407.3 718.3 393.1 736 363.7A46.5 46.5 0 0 0 736.3 317ZM669.3 631.1A263 263 0 0 1 575.1 612 19 19 0 1 1 588.9 576.7C660.1 604.7 717.4 593.3 727.2 572.9A19 19 0 1 1 761.4 589.3 96.5 96.5 0 0 1 669.3 631.1ZM680.2 705.8A241.9 241.9 0 0 1 573.5 679 19 19 0 0 1 590.4 645.1 171 171 0 0 0 722.3 661.3 53.5 53.5 0 0 0 753.8 639.5 19 19 0 1 1 788 655.9 89.7 89.7 0 0 1 734.8 697.1 167.6 167.6 0 0 1 680.3 705.8ZM719.7 817.7C688.5 817.7 642.5 802.7 578.2 748.2A19 19 0 0 1 602.7 719.3C672.3 778.4 718.9 786.9 739.2 775.3 753.8 767 759.3 746 754.4 717.9A19 19 0 1 1 791.7 711.3 86.8 86.8 0 0 1 758.1 808.2 76.7 76.7 0 0 1 719.7 817.7ZM854.3 931.9H215.3A102.8 102.8 0 0 1 112.6 829.2V190.2A102.8 102.8 0 0 1 215.3 87.5H854.3A102.8 102.8 0 0 1 957 190.2V829.2A102.8 102.8 0 0 1 854.3 931.9ZM215.3 106.5A84 84 0 0 0 131.6 190.2V829.2A84 84 0 0 0 215.3 912.9H854.3A84 84 0 0 0 938.1 829.2V190.2A84 84 0 0 0 854.3 106.5Z", + "width": 1068 + }, + "search": [ + "radiology" + ] + }, + { + "uid": "166043ccaa1f7fdaa8ec9a357a798f8c", + "css": "referral", + "code": 59416, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M888.2 752.2A107.4 107.4 0 0 0 944.6 658.3 110.5 110.5 0 0 0 723.6 658.3 107.4 107.4 0 0 0 780 752.2 166.1 166.1 0 0 0 668.1 908.8V983.3A16.7 16.7 0 0 0 684.8 1000H983.3A16.7 16.7 0 0 0 1000 983.3V908.8A166.1 166.1 0 0 0 888.2 752.2ZM756.9 658.3A77.2 77.2 0 1 1 834.1 732.7 75.9 75.9 0 0 1 756.9 658.3ZM966.7 966.7H701.4V908.8A132.6 132.6 0 0 1 966.6 908.8ZM888.2 201.5A107.3 107.3 0 0 0 944.6 107.7 110.5 110.5 0 0 0 723.6 107.7 107.3 107.3 0 0 0 779.9 201.5 166.1 166.1 0 0 0 668.1 358.2V432.7A16.7 16.7 0 0 0 684.8 449.3H983.3A16.7 16.7 0 0 0 1000 432.7V358.2A166.1 166.1 0 0 0 888.2 201.5ZM756.9 107.7A77.2 77.2 0 0 1 911.2 107.7 77.2 77.2 0 0 1 756.9 107.7ZM966.7 416H701.4V358.2A132.6 132.6 0 0 1 966.6 358.2ZM537.3 492.6L631.1 411.9A16.7 16.7 0 0 0 609.3 386.6L505.3 476.3H388A16.7 16.7 0 1 0 388 509.6H505.3L609.5 595A18.6 18.6 0 0 0 632.8 592.7 16.2 16.2 0 0 0 630.5 569.3ZM292.4 452.7A125.9 125.9 0 0 0 323.3 369.9 128.6 128.6 0 0 0 66.1 369.9 125.9 125.9 0 0 0 97.1 452.7 183.8 183.8 0 0 0 0 613.2V711.2A16.7 16.7 0 0 0 16.7 727.9H372.9A16.7 16.7 0 0 0 389.6 711.2V613.2A183.9 183.9 0 0 0 292.4 452.7ZM194.8 276A94 94 0 1 1 99.5 370 94.8 94.8 0 0 1 194.8 275.9ZM176.8 496A130.7 130.7 0 0 0 194.8 497.4 128.1 128.1 0 0 0 212.8 496V574L194.8 597 176.7 573.8ZM356.2 694.7H303.9V612.9A16.7 16.7 0 0 0 270.5 612.9V694.6H119.1V612.9A16.7 16.7 0 0 0 85.7 612.9V694.6H33.3V613.2A150.5 150.5 0 0 1 124.8 476.5 128.9 128.9 0 0 0 143.5 486.5V585.2L181.7 634.1A16.7 16.7 0 0 0 207.9 634.1L246.1 585.2V486.6A129.8 129.8 0 0 0 264.8 476.6 150.5 150.5 0 0 1 356.2 613.3V694.7Z", + "width": 1000 + }, + "search": [ + "referral" + ] + }, + { + "uid": "a1c284f339f4b6bc2d580afc2e7b2639", + "css": "search_patient", + "code": 59418, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M388.6 97.1A291.3 291.3 0 1 0 680 388.4 291.7 291.7 0 0 0 388.6 97.1ZM388.6 647.5A259.1 259.1 0 1 1 647.7 388.4 259.3 259.3 0 0 1 388.6 647.5ZM178.1 404.7H210.4A194.6 194.6 0 0 1 404.7 210.4V178.1A226.7 226.7 0 0 0 178.1 404.7ZM977.2 885.6L1000 862.8 768.3 630.9 745.5 653.7 704.9 613.2A387.8 387.8 0 1 0 613.4 705.1L654 745.7 631.1 768.5 862.5 999.9 885.4 977.1 676.7 768.2 768.2 676.7ZM388.4 744.7A356.1 356.1 0 1 1 744.5 388.6 356.6 356.6 0 0 1 388.4 744.7ZM676.8 722.4L639.2 685A388.2 388.2 0 0 0 685.1 639.1L722.7 676.7Z", + "width": 1000 + }, + "search": [ + "search_patient" + ] + }, + { + "uid": "5a324eddf382f5a1167d7d40325f82c8", + "css": "reject_icon", + "code": 59394, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M681 626.7L554.3 500 681 373.3A38.5 38.5 0 0 0 626.7 318.9L500 445.7 373.3 319A38.5 38.5 0 1 0 318.9 373.3L445.7 500 318.9 626.8A37.2 37.2 0 0 0 318.9 681.1 38.2 38.2 0 0 0 373.3 681.1L500 554.4 626.7 681.1A38.5 38.5 0 0 0 681.1 681.1 38.2 38.2 0 0 0 681 626.7ZM500 67.3A432.5 432.5 0 1 1 194 194 429.8 429.8 0 0 1 500 67.3M500 0A500 500 0 1 0 1000 500 500 500 0 0 0 500 0Z", + "width": 1000 + }, + "search": [ + "reject_icon" + ] + }, + { + "uid": "2742f64b5e69cc4f39a2dcc5a081ad03", + "css": "approved_icon", + "code": 59403, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M756.3 348.3L714 304.8A9.1 9.1 0 0 0 707.2 302H707.2A8.7 8.7 0 0 0 700.5 304.8L407.2 600.3 300.5 493.5A9.3 9.3 0 0 0 287.1 493.5L244.2 536.3A9.6 9.6 0 0 0 244.2 550L378.8 684.5A42.6 42.6 0 0 0 406.9 698.2 44.6 44.6 0 0 0 434.8 685H435L756.5 362A10.3 10.3 0 0 0 756.3 348.3ZM500 67.3A432.5 432.5 0 1 1 194 194 429.8 429.8 0 0 1 500 67.3M500 0A499.9 499.9 0 1 0 999.9 500 499.9 499.9 0 0 0 500 0Z", + "width": 1000 + }, + "search": [ + "approved_icon" + ] + }, + { + "uid": "148de09f7fd22c378cdfdbaacaa8e205", + "css": "pending_icon", + "code": 59404, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M809.8 932H797.3C781.5 932 768.2 929.8 766.5 914V913.7C731 583.9 523.3 577.6 523.3 499.9S731.1 415.9 766.5 86V85.9C768.2 70.1 781.5 68 797.3 68H809.8A34.8 34.8 0 0 0 844.7 35.7 34 34 0 0 0 810.7 0H35A34.8 34.8 0 0 0 0 32.3 34 34 0 0 0 34 68H47.2C63 68 76.3 70.2 78.1 85.9V86.2C113.7 416 321.5 422.3 321.5 500S113.7 584 78.3 913.8V914C76.6 929.8 63.3 932 47.5 932H35A34.8 34.8 0 0 0 0.1 964.3 34 34 0 0 0 34.1 1000H810.7A33.9 33.9 0 0 0 844.7 964.3 34.8 34.8 0 0 0 809.8 932ZM197.4 848.9C267 655.2 390.6 678.7 390.6 602.3V467.5C390.6 420.4 301.2 387.6 245.4 311.1A19 19 0 0 1 261.2 281H583.8A18.9 18.9 0 0 1 600 310.6C545.2 387.3 454.2 420.4 454.2 467.4V602.4C454.2 678.1 572.9 657.5 647.8 849 654.7 866.3 649.5 887.8 631.2 887.8H214.1C195.4 887.8 191.1 866.5 197.4 849Z", + "width": 845 + }, + "search": [ + "pending_icon" + ] + }, + { + "uid": "0bbb324cc39e62b3a4e05639a4f4008f", + "css": "home_icon", + "code": 59407, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M973.1 435L973.1 435 565 27A92 92 0 0 0 434.9 27L27.2 434.7 26.8 435.1A92 92 0 0 0 88 591.9C88.9 591.9 89.9 591.9 90.8 591.9H107.1V892.1A107.9 107.9 0 0 0 214.8 999.9H374.4A29.3 29.3 0 0 0 403.7 970.6V735.3A49.2 49.2 0 0 1 452.9 686.2H547A49.2 49.2 0 0 1 596.2 735.3V970.7A29.3 29.3 0 0 0 625.5 1000H785.1A107.9 107.9 0 0 0 892.8 892.3V592H907.8A92.1 92.1 0 0 0 973 434.9ZM931.6 523.7A33.4 33.4 0 0 1 907.9 533.5H863.5A29.3 29.3 0 0 0 834.2 562.8V892.3A49.2 49.2 0 0 1 785.1 941.4H654.9V735.3A107.9 107.9 0 0 0 547 627.5H452.9A107.9 107.9 0 0 0 345.1 735.2V941.3H215A49.2 49.2 0 0 1 165.8 892.1V562.8A29.3 29.3 0 0 0 136.5 533.5H92.8L91.4 533.5A33.4 33.4 0 0 1 68.4 476.4H68.4L476.3 68.4A33.4 33.4 0 0 1 523.6 68.4L931.4 476.2 931.6 476.4A33.4 33.4 0 0 1 931.6 523.7ZM931.6 523.7", + "width": 1000 + }, + "search": [ + "home_icon" + ] + }, + { + "uid": "d8fc8a6e9f001147307d87b3b620b86f", + "css": "mail", + "code": 59422, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M1055.6 667.9V111.1A111.2 111.2 0 0 0 944.4 0H111.1A111.2 111.2 0 0 0 0 111.1V666.7A111.2 111.2 0 0 0 111.1 777.8H777.8A46 46 0 0 0 789.7 810C819.2 841 869.8 889 914.5 931.2 936.9 952.3 957.3 971.7 972.1 986A48.3 48.3 0 0 0 1006 1000 50.2 50.2 0 0 0 1055.5 949.3V889.4C1198.9 894.6 1277.9 940.2 1277.9 972.2A27.8 27.8 0 1 0 1333.4 972.2 306 306 0 0 0 1055.6 667.9ZM111.1 55.7H944.4C945.6 55.7 946.6 56.2 947.7 56.3L551.3 381.8A46.3 46.3 0 0 1 506.8 383.6L107.9 56.2C109 56.1 110 55.6 111.1 55.6ZM111.1 722.3A55.6 55.6 0 0 1 55.6 666.8V111.1A55 55 0 0 1 60.3 89L474 428.4A98.2 98.2 0 0 0 527.8 444.5 100.7 100.7 0 0 0 584.2 426.5L995.3 89A55 55 0 0 1 1000 111.1V556.8A48.1 48.1 0 0 0 972.1 569.7C957.4 584.1 936.9 603.4 914.6 624.5 879.9 657.3 841.9 693.2 812.7 722.3H111.1ZM1027.9 833.3A27.8 27.8 0 0 0 1000.2 861.1V935.7C986.8 922.8 970.4 907.3 952.9 890.8 911.6 851.7 865 807.8 836 777.8 865 747.8 911.6 703.8 952.9 664.7 971.6 647.1 989 630.6 1000.2 618.2V694.4A27.8 27.8 0 0 0 1027.9 722.2 250.3 250.3 0 0 1 1259.3 877.5 525.9 525.9 0 0 0 1027.9 833.3Z", + "width": 1333 + }, + "search": [ + "mail" + ] + }, + { + "uid": "afe3a55435e46aeeeeae8f60731d4706", + "css": "medicine_search", + "code": 59423, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M986 125.2A171.6 171.6 0 1 0 1157.6 296.8 171.8 171.8 0 0 0 986 125.2ZM986 449.3A152.6 152.6 0 1 1 1138.6 296.8 152.7 152.7 0 0 1 986 449.3ZM862.1 306.4H881.1A114.6 114.6 0 0 1 995.5 192V173A133.5 133.5 0 0 0 862.1 306.4ZM1332.6 589.6L1346.1 576.2 1209.6 439.6 1196.2 453 1172.3 429.1A228.3 228.3 0 1 0 1118.4 483.3L1142.3 507.2 1128.8 520.6 1265.1 657 1278.6 643.5 1155.7 520.6 1209.6 466.7ZM985.9 506.6A209.7 209.7 0 1 1 1195.6 296.9 210 210 0 0 1 985.9 506.6ZM1155.7 493.5L1133.6 471.4A228.6 228.6 0 0 0 1160.6 444.5L1182.7 466.6ZM416.7 700V733.3H100A16.7 16.7 0 0 1 83.3 716.6V566.6A16.7 16.7 0 0 1 100 550H416.7V583.2H116.6V699.9ZM33.3 866.7H416.7V900H33.3A66.7 66.7 0 0 0 99.9 966.5H466.6A67.2 67.2 0 0 0 479.9 965.2L486.6 997.9A100.5 100.5 0 0 1 466.6 999.9H99.9A100.1 100.1 0 0 1-0.1 899.9V583.3H33.2ZM79.2 316.7H83.3V266.7H70.9A37.5 37.5 0 0 1 33.3 229.2V58.3A58.4 58.4 0 0 1 91.7 0H400V33.3H91.7A25 25 0 0 0 66.7 58.3V229.2A4.2 4.2 0 0 0 70.9 233.3H495.9A4.2 4.2 0 0 0 500.1 229.2V58.3A25 25 0 0 0 475.1 33.3H433.4V0H475.1A58.4 58.4 0 0 1 533.4 58.3V229.2A37.5 37.5 0 0 1 495.9 266.7H483.4V316.7H487.6A79.4 79.4 0 0 1 566.8 395.9V400H533.5V395.9A45.9 45.9 0 0 0 487.6 350H79.2A45.9 45.9 0 0 0 33.3 395.9V466.7H450V500H33.3V550H0V395.8A79.4 79.4 0 0 1 79.2 316.7ZM450 316.7V266.7H116.7V316.7ZM466.6 66.7H433.3V200H466.6ZM400 66.7H366.7V200H400ZM333.3 66.7H300V200H333.3ZM266.6 66.7H233.3V200H266.6ZM200 66.7H166.7V200H200ZM133.3 66.7H100V200H133.3ZM416.7 783.3H316.7V816.6H416.7ZM283.3 783.3H83.3V816.6H283.3ZM450 595.8A162.7 162.7 0 0 1 612.5 433.3H620.8A163 163 0 0 1 780 563.3L747.4 570A129.5 129.5 0 0 0 620.8 466.7H612.5A129.3 129.3 0 0 0 483.3 595.8V683.3H583.3V716.6H483.3V749.9H566.7V783.2H483.3V837.3A129.3 129.3 0 0 0 612.5 966.5H620.8A129.1 129.1 0 0 0 661.4 960L671.9 991.6A162.3 162.3 0 0 1 620.8 999.8H612.5A162.7 162.7 0 0 1 450 837.3ZM600 800A200 200 0 1 1 800 1000 200 200 0 0 1 600 800ZM633.3 800A165.6 165.6 0 0 0 652.2 877L877 652.2A166.6 166.6 0 0 0 633.3 800ZM694.5 929L838.2 785.3 861.7 808.9 722.9 947.8A166.6 166.6 0 0 0 947.7 722.9L892.2 778.5 868.6 754.9 928.9 694.6A168.3 168.3 0 0 0 905.4 671L670.9 905.4A168.1 168.1 0 0 0 694.5 929Z", + "width": 1346 + }, + "search": [ + "medicine_search" + ] + }, + { + "uid": "609e74ef20b926b8e212d28a24bf0f36", + "css": "referred", + "code": 59426, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M887.8 751.4A107.7 107.7 0 0 0 944.3 657.2 110.9 110.9 0 0 0 722.6 657.2 107.7 107.7 0 0 0 779.1 751.4 166.6 166.6 0 0 0 666.9 908.6V983.2A16.7 16.7 0 0 0 683.7 999.9H983.3A16.7 16.7 0 0 0 1000 983.2V908.6A166.6 166.6 0 0 0 887.8 751.4ZM756.1 657.2A77.5 77.5 0 1 1 833.5 731.9 76.1 76.1 0 0 1 756.1 657.2ZM966.6 966.5H700.5V908.6A133 133 0 0 1 966.6 908.6ZM887.9 202.2A107.7 107.7 0 0 0 944.4 108.1 110.9 110.9 0 0 0 722.7 108.1 107.7 107.7 0 0 0 779.2 202.2 166.6 166.6 0 0 0 667.1 359.3V434.1A16.7 16.7 0 0 0 683.8 450.8H983.3A16.7 16.7 0 0 0 1000 434.1V359.3A166.6 166.6 0 0 0 887.9 202.2ZM756.2 108.1A77.5 77.5 0 0 1 911 108.1 77.5 77.5 0 0 1 756.2 108.1ZM966.6 417.4H700.5V359.3A133 133 0 0 1 966.6 359.3ZM537.5 492.7L631.5 411.6A16.7 16.7 0 0 0 609.7 386.3L505.4 476.3H387.6A16.7 16.7 0 1 0 387.6 509.7H505.5L610 595.4A18.7 18.7 0 0 0 633.5 593 16.3 16.3 0 0 0 631.1 569.5ZM293.3 452.6A126.3 126.3 0 0 0 324.5 369.6 129.1 129.1 0 0 0 66.4 369.6 126.3 126.3 0 0 0 97.5 452.6 184.4 184.4 0 0 0 0 613.7V712A16.7 16.7 0 0 0 16.7 728.7H374.1A16.7 16.7 0 0 0 390.8 712V613.7A184.4 184.4 0 0 0 293.3 452.6ZM195.5 275.3A94.3 94.3 0 1 1 99.9 369.6 95.1 95.1 0 0 1 195.4 275.3ZM177.5 496A131.1 131.1 0 0 0 195.5 497.4 128.5 128.5 0 0 0 213.6 496V574.2L195.4 597.2 177.4 574.1ZM357.5 695.3H304.8V613.3A16.7 16.7 0 0 0 271.4 613.3V695.3H119.4V613.3A16.7 16.7 0 0 0 86 613.3V695.3H33.4V613.7A151 151 0 0 1 125.2 476.7 129.3 129.3 0 0 0 144 486.7V585.8L182.3 634.8A16.7 16.7 0 0 0 208.6 634.8L246.9 585.7V486.7A130.2 130.2 0 0 0 265.7 476.7 151 151 0 0 1 357.4 613.6V695.2Z", + "width": 1000 + }, + "search": [ + "referred" + ] + }, + { + "uid": "5af6e4cb377acd0ad97c464f6813ab1a", + "css": "sync", + "code": 59428, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M1000 168.7V346.9A62.5 62.5 0 0 1 937.5 409.4H759.3A62.5 62.5 0 0 1 759.3 284.4H807.1A375.4 375.4 0 0 0 150.8 363.4 62.5 62.5 0 0 1 34.3 317.9 500.4 500.4 0 0 1 875 169.1V169.1A62.5 62.5 0 0 1 1000 169.1ZM930.4 601.1A62.5 62.5 0 0 0 849.4 636.5 375.4 375.4 0 0 1 197.4 721.8H240.7A62.5 62.5 0 1 0 240.7 596.8H62.5A62.5 62.5 0 0 0 0 659.3V837.5A62.5 62.5 0 0 0 125 837.5V830.9A503 503 0 0 0 215.2 910.8 500.4 500.4 0 0 0 966 682.2 62.5 62.5 0 0 0 930.3 601.2Z", + "width": 1000 + }, + "search": [ + "sync" + ] + }, + { + "uid": "a0f7dbb184f90f285a9cba8cf09a9b6a", + "css": "drawer_icon", + "code": 59429, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M1564.7 1000H68C30.6 1000 0 958.7 0 908.2H0C0 857.6 30.6 816.3 68 816.3H1564.7C1602 816.3 1632.7 857.6 1632.7 908.2H1632.7C1632.7 958.7 1602 1000 1564.7 1000ZM911.6 591.8H68C30.6 591.8 0 550.5 0 500H0C0 449.5 30.6 408.2 68 408.2H911.6C949 408.2 979.6 449.5 979.6 500H979.6C979.6 550.5 949 591.8 911.6 591.8ZM1238.1 183.7H68C30.6 183.7 0 142.4 0 91.8H0C0 41.3 30.6 0 68 0H1238.1C1275.5 0 1306.1 41.3 1306.1 91.8H1306.1C1306.1 142.4 1275.5 183.7 1238.1 183.7Z", + "width": 1633 + }, + "search": [ + "drawer_icon" + ] + }, + { + "uid": "764baf138776221a3e1e845391b188a4", + "css": "leaves", + "code": 59446, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M968.7 468.7H572.9A31.3 31.3 0 1 1 572.9 406.2H968.7A31.3 31.3 0 1 1 968.7 468.7ZM968.7 468.7M812.5 625A31.3 31.3 0 0 1 790.4 571.6L924.5 437.5 790.4 303.3A31.3 31.3 0 0 1 834.6 259.1L990.9 415.4A31.3 31.3 0 0 1 990.9 459.6L834.6 615.8A31.2 31.2 0 0 1 812.5 625ZM812.5 625M333.3 1000A83.3 83.3 0 0 0 416.7 916.7V166.7A83.9 83.9 0 0 0 360.3 87.5L109.9 4.1A84.2 84.2 0 0 0 0 83.4V833.4A83.9 83.9 0 0 0 56.4 912.4L306.8 995.8A87.2 87.2 0 0 0 333.3 1000ZM83.3 62.5A24.5 24.5 0 0 1 90.8 63.6L340.1 146.7A21.4 21.4 0 0 1 354.2 166.6V916.6A22 22 0 0 1 325.9 936.4L76.6 853.3A21.5 21.5 0 0 1 62.5 833.3V83.3A20.9 20.9 0 0 1 83.3 62.5ZM83.3 62.5M635.4 208.3A31.3 31.3 0 0 0 666.7 177.1V114.6A114.7 114.7 0 0 0 552.1 0H83.3A31.3 31.3 0 0 0 83.3 62.5H552.1A52.1 52.1 0 0 1 604.2 114.6V177.1A31.3 31.3 0 0 0 635.4 208.3ZM635.4 208.3M385.4 875H552.1A114.7 114.7 0 0 0 666.6 760.4V697.9A31.3 31.3 0 0 0 604.1 697.9V760.4A52.1 52.1 0 0 1 552.1 812.5H385.4A31.3 31.3 0 0 0 385.4 875ZM385.4 875", + "width": 1000 + }, + "search": [ + "leaves" + ] + }, + { + "uid": "4477771717c5280f9030b8e410040eda", + "css": "search_patient-1", + "code": 59465, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M1142.7 436.8A165.2 165.2 0 1 0 1307.8 601.9 165.4 165.4 0 0 0 1142.7 436.8ZM1142.7 748.8A146.9 146.9 0 1 1 1289.5 601.9 147 147 0 0 1 1142.7 748.8ZM1023.4 611.1H1041.7A110.3 110.3 0 0 1 1151.8 500.9V482.7A128.5 128.5 0 0 0 1023.4 611.1ZM1476.4 883.8L1489.3 870.9 1357.9 739.4 1345 752.4 1322 729.4A219.8 219.8 0 1 0 1270.1 781.5L1293.1 804.5 1280.2 817.4 1411.4 948.7 1424.4 935.7 1306 817.3 1357.9 765.4ZM1142.6 803.9A201.9 201.9 0 1 1 1344.4 602 202.2 202.2 0 0 1 1142.6 803.9ZM1306 791.3L1284.7 770.1A220.1 220.1 0 0 0 1310.7 744.1L1332.1 765.5ZM48.4 483.9H301.4A96.4 96.4 0 0 1 276.7 346.5 305.1 305.1 0 0 1 257.9 242V201.9A201.8 201.8 0 0 1 564.5 29.2 201.8 201.8 0 0 1 871 201.8V205.4L887 177.2 957.1 299.9A80.6 80.6 0 0 1 869.7 417.5 96.9 96.9 0 0 1 785.1 499.2 226.4 226.4 0 0 1 645.1 662.2V696.2L780.4 720.8A267.4 267.4 0 0 1 999.9 983.9V999.9H129V983.9A267.4 267.4 0 0 1 348.6 720.8L483.9 696.2V662.3A224.6 224.6 0 0 1 396.8 602.3C396 602.6 395.1 602.8 394.3 603.1A92.8 92.8 0 0 1 352.9 612.9H48.4A48.4 48.4 0 0 1 0 564.5V532.3A48.4 48.4 0 0 1 48.4 483.9ZM339.5 465.8C339.3 461.1 338.7 456.4 338.7 451.7V341A64.2 64.2 0 0 0 339.5 465.7ZM838.7 242V201.9A169.6 169.6 0 0 0 575.1 60.8L564.5 67.8 554 60.8A169.6 169.6 0 0 0 290.3 201.9V242A273.2 273.2 0 0 0 302.3 322.2 96.2 96.2 0 0 1 338.7 308.1V282.4L403.2 234V193.5A32.3 32.3 0 0 1 435.5 161.3H693.5A32.3 32.3 0 0 1 725.8 193.5V233.9L790.3 282.3V307.8A95.4 95.4 0 0 1 810.8 313.9 78.8 78.8 0 0 1 817 299.9L837.7 263.6C838.3 256.4 838.7 249.2 838.7 242ZM435.5 290.4H693.6V193.5H435.5ZM887.9 387.2A47.6 47.6 0 0 0 929.3 316L887.1 242.2 844.9 315.9A47.6 47.6 0 0 0 887.6 387.1ZM838.8 403.2A79.4 79.4 0 0 1 807.4 348.1 63.2 63.2 0 0 0 790.4 340.9V451.6C790.4 456.4 790 461 789.7 465.7A64.5 64.5 0 0 0 838.7 403.2ZM758.1 451.6V298.4L725.9 274.3V290.4A32.3 32.3 0 0 1 693.6 322.6H435.5A32.3 32.3 0 0 1 403.2 290.4V274.3L370.9 298.4V451.6A195.2 195.2 0 0 0 374.4 486.4 92.8 92.8 0 0 1 394.3 493.6 60.6 60.6 0 0 0 421.2 500H532.2A48.4 48.4 0 1 1 532.2 596.7H436.9A193.2 193.2 0 0 0 758.1 451.6ZM532.3 564.5A16 16 0 1 0 532.3 532.2H516.3V564.5ZM637.4 727.6A80.7 80.7 0 0 1 583.6 771.6 64.5 64.5 0 0 0 645.1 806.4C680.7 806.4 709.6 784.7 709.6 758A36.4 36.4 0 0 0 704.4 739.7ZM161.8 967.8H967.2A235 235 0 0 0 774.7 752.6L740.8 746.5A64.8 64.8 0 0 1 742 758.2C742 802.6 698.6 838.8 645.2 838.8A102.9 102.9 0 0 1 564.6 802.6 102.9 102.9 0 0 1 483.9 838.7C430.4 838.7 387.1 802.5 387.1 758.1A65.9 65.9 0 0 1 388.2 746.4L354.4 752.6A235 235 0 0 0 161.8 967.8ZM424.5 739.9A36.4 36.4 0 0 0 419.4 758.2C419.4 784.9 448.3 806.6 483.9 806.6A64.5 64.5 0 0 0 545.4 771.8 80.6 80.6 0 0 1 491.6 727.7ZM516 677.4V693.4A48.4 48.4 0 1 0 612.8 693.4V672.1A222.6 222.6 0 0 1 516 672.1ZM379.6 574.3A92.9 92.9 0 0 1 421 564.5H483.9V532.3H421.2A93.1 93.1 0 0 1 379.9 522.5 60.6 60.6 0 0 0 352.9 516H129V580.5H352.9A60.6 60.6 0 0 0 379.9 574.3ZM32.1 564.5A16 16 0 0 0 48.1 580.5H96.8V516H48.4A16 16 0 0 0 32.4 532ZM524.9 368.4L507 341.5 410.3 406.1 428.2 432.9ZM718.5 405.8L621.8 341.3 603.9 368.1 700.6 432.7Z", + "width": 1489 + }, + "search": [ + "search_patient" + ] + }, + { + "uid": "acee3dc68dc70f4b268b59a42fd957ee", + "css": "referral-1", + "code": 59408, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M681.4 793.1L735.5 860.8 683 913.3 659.1 793.7C663.5 793.4 667.9 793.1 672.4 793.1ZM791.7 793.1L758.6 834.3 725.6 793.1ZM835.9 793.1H844.8C849.3 793.1 853.7 793.4 858.1 793.7L834.2 913.3 781.7 860.8ZM913.8 655.1H912.8A154.1 154.1 0 0 0 913.8 637.9V586.2A34.5 34.5 0 0 1 913.8 655.1ZM603.4 482.7A103.6 103.6 0 0 1 706.9 379.3H810.3A103.6 103.6 0 0 1 913.8 482.8V551.7H844.8A34.5 34.5 0 0 1 810.3 517.2V448.3H775.9V465.5A86.3 86.3 0 0 1 689.7 551.7H603.5ZM603.4 655.1A34.5 34.5 0 1 1 603.4 586.2V637.9A154.1 154.1 0 0 0 604.4 655.1ZM637.9 637.9V586.2H689.6A120.4 120.4 0 0 0 781.2 543.9 69 69 0 0 0 844.7 586.2H879.2V637.9A120.6 120.6 0 0 1 637.9 637.9ZM1000 1000H517.2V948.3A155.6 155.6 0 0 1 625.2 800.5L655.4 951.7A17.3 17.3 0 0 0 667.3 964.8 17.6 17.6 0 0 0 672.3 965.5 17.3 17.3 0 0 0 684.5 960.4L758.5 886.4 832.5 960.5A17.2 17.2 0 0 0 861.7 951.7L891.9 800.5A155.6 155.6 0 0 1 999.8 948.3ZM164.1 413.8L218.3 481.5 165.7 534 141.8 414.5C146.3 414.1 150.7 413.8 155.2 413.8ZM274.5 413.8L241.4 455 208.3 413.8ZM318.6 413.8H327.6C332.1 413.8 336.5 414.1 340.9 414.4L317 534 264.5 481.5ZM396.5 275.8H395.5A154 154 0 0 0 396.5 258.6V206.9A34.5 34.5 0 0 1 396.5 275.8ZM86.2 103.5A103.6 103.6 0 0 1 189.7 0H293.1A103.6 103.6 0 0 1 396.6 103.5V172.4H327.6A34.5 34.5 0 0 1 293.1 137.9V69H258.6V86.2A86.3 86.3 0 0 1 172.4 172.4H86.2ZM86.2 275.9A34.5 34.5 0 1 1 86.2 206.9V258.6A154 154 0 0 0 87.2 275.9ZM120.6 258.6V206.9H172.4A120.4 120.4 0 0 0 264 164.6 69 69 0 0 0 327.5 206.9H362V258.6A120.6 120.6 0 1 1 120.7 258.6ZM482.8 620.7H0V569A155.6 155.6 0 0 1 107.9 421.2L138.2 572.3A17.3 17.3 0 0 0 150.1 585.5 17.6 17.6 0 0 0 155.1 586.2 17.3 17.3 0 0 0 167.3 581.1L241.3 507.1 315.3 581.2A17.2 17.2 0 0 0 344.4 572.3L374.7 421.2A155.6 155.6 0 0 1 482.6 569ZM172.4 827.6A17.2 17.2 0 0 0 155.2 810.3H127.8L206.8 731.3 286.1 810.2H258.8A17.2 17.2 0 0 0 241.6 827.4 206.9 206.9 0 0 0 333.6 999.5 172.6 172.6 0 0 1 172.4 827.6Z", + "width": 1000 + }, + "search": [ + "referral" + ] + }, + { + "uid": "7c82c028b3a01309cc1ffd1eaeb1ccf8", + "css": "search", + "code": 59467, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M543.6 353.5A132.3 132.3 0 1 1 411.3 221.2 132.3 132.3 0 0 1 543.6 353.5ZM974.2 974.1A88.2 88.2 0 0 1 849.4 974.1S624.7 749.2 622.9 747A405.4 405.4 0 1 1 747 622.8C749.2 624.6 974.2 849.4 974.2 849.4A88.2 88.2 0 0 1 974.1 974.1ZM726 405.2A320.8 320.8 0 1 0 206.8 657.2 146.9 146.9 0 0 1 352.4 530H470.1A146.9 146.9 0 0 1 614.3 648.4 320 320 0 0 0 726 405.2Z", + "width": 1000 + }, + "search": [ + "search" + ] + }, + { + "uid": "898cfb6ea07e1c004d9173c59903b3c3", + "css": "arrival-patients", + "code": 59469, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M490.4 621.6L473.9 574.9A181.3 181.3 0 0 1 396.3 590.7 177.3 177.3 0 0 1 318 574.2L295.4 620.7A13.4 13.4 0 0 1 287.5 627.5Q281.1 629.6 274.2 631.7A117.4 117.4 0 0 0 304 686.6 127.3 127.3 0 0 0 493.2 682.1 264 264 0 0 1 513.3 634.8C508.1 633.1 503.1 631.4 498.5 629.9A13.2 13.2 0 0 1 490.4 621.6ZM481.4 761.4A266.9 266.9 0 0 1 483.6 727 150.9 150.9 0 0 1 396.3 753.5 149.3 149.3 0 0 1 284.6 705 146.4 146.4 0 0 1 248.5 639.3L233.3 643.5C129.3 672.7 0 708.9 0 820.9V960.9C0 977.4 7.5 1000.1 19.8 1000.1H630.7A265.8 265.8 0 0 1 481.4 761.4ZM401.9 191.2C406.8 191.6 411.8 192 416.4 192.4 457.3 196.1 484.3 198.5 510.1 141.6A13.2 13.2 0 0 1 534.3 141.2L535.6 143.8A198.4 198.4 0 0 1 571.3 227.5C572.5 212.4 573.2 199.6 573.2 194.6S573.2 184.2 573.4 178.7A151.6 151.6 0 0 0 536.5 56.1 193.6 193.6 0 0 0 393.6 0.1 191.6 191.6 0 0 0 255.3 63L251.6 67.2A164.1 164.1 0 0 0 205.3 202.8 286.8 286.8 0 0 0 212.2 239.2 145.9 145.9 0 0 1 243.7 164 70.6 70.6 0 0 1 297.3 140.8C317.2 140.8 324.1 160.7 330.7 179.6 340.6 208.7 352 241.1 399 243.9 374.8 216.8 379 207 381.1 202.3A19.2 19.2 0 0 1 401.9 191.2ZM541.8 420.1A12.9 12.9 0 0 1 549.2 418.1H549.6C571.7 418.1 597.4 385 607.1 343.9A25.6 25.6 0 0 0 599.3 314.8 13.2 13.2 0 0 0 584.1 319.6 13.4 13.4 0 0 1 572.7 328.1L571.6 328.1A13.2 13.2 0 0 1 558.4 315.9 438.1 438.1 0 0 0 524 173C491.9 225.9 452.4 222.6 414.1 219.1H413.5A270.3 270.3 0 0 0 438.7 245.5 13.2 13.2 0 0 1 431.6 268.7C337.9 281.9 317.5 223.2 305.3 188.1A89.3 89.3 0 0 0 296.5 167.3 44.1 44.1 0 0 0 263.2 181.9 131.4 131.4 0 0 0 236.7 255.8 309.2 309.2 0 0 0 235.2 305.5 15.4 15.4 0 0 1 210.2 321.5C204.3 315.3 198 313.3 192.9 316.1A24.5 24.5 0 0 0 185.5 344C195.3 385.1 221 418.2 243.1 418.2H243.7A13.2 13.2 0 0 1 257 431.2 150 150 0 0 0 318.4 544 143.4 143.4 0 0 0 396.2 564.1 146.3 146.3 0 0 0 474.1 544.5L474.3 544.5A145.9 145.9 0 0 0 535.4 431.5 13.2 13.2 0 0 1 541.7 420.4ZM746.8 522.7A238.6 238.6 0 1 0 985.4 761.3 238.6 238.6 0 0 0 746.8 522.7ZM881.7 796.9A17.9 17.9 0 0 1 863.8 814.7H792.4V888.4A17.9 17.9 0 0 1 774.5 906.2H712A17.9 17.9 0 0 1 694.1 888.4V814.7H620.5A17.9 17.9 0 0 1 602.6 796.9V734.4A17.9 17.9 0 0 1 620.5 716.5H694.1V645.1A17.9 17.9 0 0 1 712 627.2H774.5A17.9 17.9 0 0 1 792.4 645.1V716.5H863.8A17.9 17.9 0 0 1 881.7 734.4ZM765.6 725.4V654H721V725.4A17.9 17.9 0 0 1 703.1 743.3H629.5V787.9H703.1A17.9 17.9 0 0 1 721 805.8V879.5H765.6V805.8A17.9 17.9 0 0 1 783.5 787.9H854.9V743.3H783.5A17.9 17.9 0 0 1 765.6 725.4Z", + "width": 985 + }, + "search": [ + "arrival-patients" + ] + }, + { + "uid": "23c2239369a69f752e790de95123b9e9", + "css": "male-2", + "code": 59417, + "src": "mfglabs" + }, + { + "uid": "10b2be8b48bebc1974d6f94bac9de71d", + "css": "female-1", + "code": 59419, + "src": "mfglabs" + }, + { + "uid": "84aaf4992ded44854de2b7090335db03", + "css": "progress-notes", + "code": 59409, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M400 266.7V33.4A33.4 33.4 0 0 1 466.6 33.4V266.7ZM300 933.3A99.3 99.3 0 0 1 229.3 904.1 1011.6 1011.6 0 0 1 0 550.5V966.6A33.4 33.4 0 0 0 33.4 1000H833.3A33.4 33.4 0 0 0 866.7 966.6V933.3ZM1128 809.7A885.7 885.7 0 0 1 866.6 189.5V166.6A33.4 33.4 0 0 0 833.3 133.3H533.3V300A33.4 33.4 0 0 1 500 333.3H366.6A33.4 33.4 0 0 1 333.3 300V133.3H33.4A33.4 33.4 0 0 0 0 166.7V189.6A943.4 943.4 0 0 0 276.4 856.9 33.4 33.4 0 0 0 300 866.7H1104.5A33.4 33.4 0 0 0 1128.1 809.8ZM433.3 400H700A33.4 33.4 0 0 1 700 466.6H433.3A33.4 33.4 0 0 1 433.3 400ZM700 733.3H366.7A33.4 33.4 0 0 1 366.7 666.6H700A33.4 33.4 0 0 1 700 733.3ZM766.7 600H300A33.4 33.4 0 1 1 300 533.3H766.7A33.4 33.4 0 1 1 766.7 600Z", + "width": 1138 + }, + "search": [ + "progress-notes" + ] + }, + { + "uid": "740f78c2b53c8cc100a8b0d283bbd34f", + "css": "home_icon-1", + "code": 59410, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M973.1 435L973.1 435 565 27A92 92 0 0 0 434.9 27L27.2 434.7 26.8 435.1A92 92 0 0 0 88 591.9C88.9 591.9 89.9 591.9 90.8 591.9H107.1V892.1A107.9 107.9 0 0 0 214.8 999.9H374.4A29.3 29.3 0 0 0 403.7 970.6V735.3A49.2 49.2 0 0 1 452.9 686.2H547A49.2 49.2 0 0 1 596.2 735.3V970.7A29.3 29.3 0 0 0 625.5 1000H785.1A107.9 107.9 0 0 0 892.8 892.3V592H907.8A92.1 92.1 0 0 0 973 434.9ZM931.6 523.7A33.4 33.4 0 0 1 907.9 533.5H863.5A29.3 29.3 0 0 0 834.2 562.8V892.3A49.2 49.2 0 0 1 785.1 941.4H654.9V735.3A107.9 107.9 0 0 0 547 627.5H452.9A107.9 107.9 0 0 0 345.1 735.2V941.3H215A49.2 49.2 0 0 1 165.8 892.1V562.8A29.3 29.3 0 0 0 136.5 533.5H92.8L91.4 533.5A33.4 33.4 0 0 1 68.4 476.4H68.4L476.3 68.4A33.4 33.4 0 0 1 523.6 68.4L931.4 476.2 931.6 476.4A33.4 33.4 0 0 1 931.6 523.7ZM931.6 523.7", + "width": 1000 + }, + "search": [ + "home_icon" + ] + }, + { + "uid": "a0ef39403e015fe3fe4252f11df60fda", + "css": "home_icon_active-1", + "code": 59420, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M973.1 435L973.1 435 565 27A92.1 92.1 0 0 0 434.9 27L27.1 434.7 26.7 435.1A92 92 0 0 0 88 592C88.9 592 89.9 592 90.8 592H107.1V892.2A107.9 107.9 0 0 0 214.8 999.9H374.4A29.3 29.3 0 0 0 403.7 970.6V735.4A49.2 49.2 0 0 1 452.9 686.2H547A49.2 49.2 0 0 1 596.2 735.4V970.7A29.3 29.3 0 0 0 625.5 1000H785.1A107.9 107.9 0 0 0 892.8 892.3V592.1H907.8A92.1 92.1 0 0 0 973 434.9ZM931.6 523.7A33.4 33.4 0 0 1 907.9 533.5H863.5A29.3 29.3 0 0 0 834.2 562.8V892.3A49.2 49.2 0 0 1 785.1 941.5H654.9V735.4A107.9 107.9 0 0 0 547 627.5H452.9A107.9 107.9 0 0 0 345.1 735.2V941.3H214.9A49.2 49.2 0 0 1 165.8 892.1V562.8A29.3 29.3 0 0 0 136.5 533.5H92.8L91.4 533.5A33.4 33.4 0 0 1 68.3 476.4H68.3L476.3 68.4A33.4 33.4 0 0 1 523.6 68.4L931.4 476.2 931.6 476.4A33.4 33.4 0 0 1 931.6 523.7ZM931.6 523.7", + "width": 1000 + }, + "search": [ + "home_icon_active" + ] + }, + { + "uid": "9d734a7694af3729960d4b9060982cc0", + "css": "menu_icon-1", + "code": 59421, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M406.7 0H83.2A83.3 83.3 0 0 0 0 83.2V406.7A83.3 83.3 0 0 0 83.2 489.9H406.7A83.3 83.3 0 0 0 489.9 406.7V83.2A83.3 83.3 0 0 0 406.7 0ZM406.7 449.1H83.2A42.4 42.4 0 0 1 40.8 406.7V83.2A42.4 42.4 0 0 1 83.2 40.8H406.7A42.4 42.4 0 0 1 449 83.2V406.7H449A42.4 42.4 0 0 1 406.7 449.1ZM916.8 0H593.3A83.3 83.3 0 0 0 510.1 83.2V406.7A83.3 83.3 0 0 0 593.3 489.9H916.8A83.3 83.3 0 0 0 1000 406.7V83.2A83.3 83.3 0 0 0 916.8 0ZM959.1 406.7A42.4 42.4 0 0 1 916.8 449.1H593.3A42.4 42.4 0 0 1 550.9 406.7V83.2A42.4 42.4 0 0 1 593.3 40.8H916.8A42.4 42.4 0 0 1 959.1 83.2ZM406.7 510.1H83.2A83.3 83.3 0 0 0 0 593.3V916.8A83.3 83.3 0 0 0 83.2 1000H406.7A83.3 83.3 0 0 0 489.9 916.8V593.3A83.3 83.3 0 0 0 406.7 510.1ZM406.7 959.2H83.2A42.4 42.4 0 0 1 40.8 916.8V593.3A42.4 42.4 0 0 1 83.2 550.9H406.7A42.4 42.4 0 0 1 449 593.3V916.8H449A42.4 42.4 0 0 1 406.7 959.1ZM916.8 510.1H593.3A83.3 83.3 0 0 0 510.1 593.3V916.8A83.3 83.3 0 0 0 593.3 1000H916.8A83.3 83.3 0 0 0 1000 916.8V593.3A83.3 83.3 0 0 0 916.8 510.1ZM959.1 916.8A42.4 42.4 0 0 1 916.8 959.2H593.3A42.4 42.4 0 0 1 550.9 916.8V593.3A42.4 42.4 0 0 1 593.3 550.9H916.8A42.4 42.4 0 0 1 959.1 593.3Z", + "width": 1000 + }, + "search": [ + "menu_icon" + ] + }, + { + "uid": "692c2d7a7dd50e46b66699b0e1b27dab", + "css": "height", + "code": 59453, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M400 50V150H600V250H400V350H500V450H400V550H600V650H400V750H500V850H400V950A50 50 0 0 0 450 1000H750A50 50 0 0 0 800 950V50A50 50 0 0 0 750 0H450A50 50 0 0 0 400 50ZM0 200L150 29.3 300 200H200V1000H100V200Z", + "width": 800 + }, + "search": [ + "height" + ] + }, + { + "uid": "9e8380e2a5811e19ab4393d5a252df32", + "css": "qr-code-1", + "code": 59424, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M650 0V350H1000V0ZM900 250H750V100H900ZM350 200V0H0V350H450V200H350ZM250 250H100V100H250ZM700 550H800V700H900V450H550V550H600V650.1H700.1ZM700 800H600V900H500V1000H700V900H800V1000H950V900H900V800H700ZM350 800V650H0V1000H350V900H500V800ZM250 900H100V750H250Z", + "width": 1000 + }, + "search": [ + "qr-code" + ] + }, + { + "uid": "6ec3034cfbe5c91e478ef9b9437647ed", + "css": "arrival-patients-bg", + "code": 59470, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M490.4 621.6L473.9 574.8A181.3 181.3 0 0 1 396.3 590.7 177.3 177.3 0 0 1 318 574.1L295.4 620.6A13.4 13.4 0 0 1 287.5 627.5Q281.1 629.6 274.3 631.6A117.4 117.4 0 0 0 304.2 686.6 127.3 127.3 0 0 0 493.5 682 264 264 0 0 1 513.6 634.6C508.3 633 503.4 631.3 498.7 629.8A13.4 13.4 0 0 1 490.4 621.6ZM481.4 761.4A266.9 266.9 0 0 1 483.6 727 150.9 150.9 0 0 1 396.3 753.3 149.3 149.3 0 0 1 284.6 704.8 146.4 146.4 0 0 1 248.5 639.1L233.3 643.4C129.4 672.5 0 708.8 0 820.7V960.8C0 977.1 7.5 1000 19.9 1000H630.7A265.8 265.8 0 0 1 481.4 761.4ZM401.8 191.2C406.8 191.6 411.6 192 416.4 192.4 457.3 196.1 484.2 198.5 510.1 141.7A13.4 13.4 0 0 1 534.2 141.2L535.5 143.8C552.2 161.8 563.7 195.1 571.3 227.6 572.5 212.4 573.2 199.7 573.2 194.7S573.3 184.3 573.4 178.8C574.2 139.6 575 95.1 536.5 56.1A193.6 193.6 0 0 0 393.6 0 191.5 191.5 0 0 0 255.3 62.7L251.6 67C228.8 92.4 203.1 121.1 205.1 202.5A286.9 286.9 0 0 0 212 238.8 146 146 0 0 1 243.5 163.5 70.6 70.6 0 0 1 297.2 140.4C317.1 140.4 324 160.1 330.5 179.2 340.6 208.3 351.7 240.7 398.9 243.5 374.6 216.4 378.9 206.6 380.9 201.9A19.2 19.2 0 0 1 401.8 191.2ZM541.8 420.1A12.9 12.9 0 0 1 549.2 418.1H549.6C571.7 418.1 597.4 384.9 607.2 343.8A25.6 25.6 0 0 0 599.3 314.8 13.4 13.4 0 0 0 584.2 319.5 13.4 13.4 0 0 1 572.8 328C572.5 328 572.1 328 571.7 328A13.4 13.4 0 0 1 558.3 315.8C555.8 285.8 544.9 209 523.9 172.9 491.9 226 452.4 222.4 414.1 219L413.5 219A270.3 270.3 0 0 0 438.7 245.4 13.4 13.4 0 0 1 431.6 268.5C337.9 281.9 317.5 223.1 305.3 187.9A89.4 89.4 0 0 0 296.5 167.2 44.1 44.1 0 0 0 263.2 181.7 131.4 131.4 0 0 0 236.8 255.7 309.1 309.1 0 0 0 235.3 305.2 15.4 15.4 0 0 1 210.2 321.3C204.3 315.1 198 313.1 192.9 315.9A24.5 24.5 0 0 0 185.6 343.8C195.3 384.9 221 418.1 243.2 418.1H243.8A13.4 13.4 0 0 1 257.2 431C258.1 443.9 265.2 510.1 318.6 543.8A143.4 143.4 0 0 0 396.4 563.9 146.4 146.4 0 0 0 474.3 544.3L474.6 544.1C528.8 510.5 534.9 444.1 535.6 431.1A13.4 13.4 0 0 1 541.9 420.1ZM746.8 522.7A238.6 238.6 0 1 0 985.5 761.3 238.7 238.7 0 0 0 746.8 522.7ZM881.7 796.9A17.9 17.9 0 0 1 863.9 814.7H792.4V888.4A17.9 17.9 0 0 1 774.6 906.2H712.1A17.9 17.9 0 0 1 694.2 888.4V814.7H620.6A17.9 17.9 0 0 1 602.7 796.9V734.4A17.9 17.9 0 0 1 620.6 716.5H694.2V645.1A17.9 17.9 0 0 1 712.1 627.3H774.6A17.9 17.9 0 0 1 792.4 645.1V716.5H863.9A17.9 17.9 0 0 1 881.7 734.4ZM765.6 725.4V654H721V725.4A17.9 17.9 0 0 1 703.1 743.3H629.4V787.9H703.1A17.9 17.9 0 0 1 721 805.8V879.4H765.6V805.8A17.9 17.9 0 0 1 783.5 787.9H854.9V743.3H783.5A17.9 17.9 0 0 1 765.6 725.4Z", + "width": 985 + }, + "search": [ + "arrival-patients-bg" + ] + }, + { + "uid": "961571413453d8de8d1d6325705ef204", + "css": "search-bg", + "code": 59468, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M543.6 353.5A132.3 132.3 0 1 1 411.3 221.2 132.3 132.3 0 0 1 543.6 353.5ZM974.2 974.2A88.2 88.2 0 0 1 849.4 974.2S624.7 749.2 622.9 747A405.4 405.4 0 1 1 747 622.9C749.2 624.6 974.2 849.4 974.2 849.4A88.2 88.2 0 0 1 974.2 974.2ZM726 405.2A320.8 320.8 0 1 0 206.8 657.2 147 147 0 0 1 352.4 530H470A147.1 147.1 0 0 1 614.3 648.5 320 320 0 0 0 726 405.2Z", + "width": 1000 + }, + "search": [ + "search-bg" + ] + }, + { + "uid": "2661cb62f53ed61755aa809d5280808e", + "css": "referral-bg", + "code": 59466, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M681.4 793.1L735.5 860.8 683 913.3 659.1 793.8C663.5 793.4 667.9 793.1 672.4 793.1ZM791.7 793.1L758.6 834.5 725.5 793.1ZM835.9 793.1H844.8C849.4 793.1 853.7 793.4 858.1 793.8L834.2 913.3 781.7 860.8ZM913.8 655.2H912.8A154 154 0 0 0 913.8 637.9V586.2A34.5 34.5 0 0 1 913.8 655.2ZM603.4 482.8A103.6 103.6 0 0 1 706.9 379.3H810.3A103.6 103.6 0 0 1 913.8 482.8V551.7H844.8A34.5 34.5 0 0 1 810.3 517.3V448.3H775.9V465.5A86.3 86.3 0 0 1 689.7 551.7H603.4ZM603.4 655.2A34.5 34.5 0 0 1 603.4 586.2V637.9A154 154 0 0 0 604.5 655.2ZM637.9 637.9V586.2H689.6A120.4 120.4 0 0 0 781.2 543.9 69 69 0 0 0 844.8 586.2H879.3V637.9A120.7 120.7 0 1 1 637.9 637.9ZM1000 1000H517.2V948.3A155.4 155.4 0 0 1 625.3 800.5L655.5 951.7A17.3 17.3 0 0 0 667.4 964.8 17.6 17.6 0 0 0 672.4 965.5 17.3 17.3 0 0 0 684.6 960.5L758.6 886.5 832.6 960.5A17.2 17.2 0 0 0 861.7 951.7L891.9 800.5A155.5 155.5 0 0 1 999.9 948.3ZM164.1 413.8L218.3 481.5 165.8 534 141.9 414.5C146.3 414.1 150.7 413.8 155.2 413.8ZM274.5 413.8L241.4 455.2 208.3 413.8ZM318.6 413.8H327.6C332.1 413.8 336.5 414.1 340.9 414.5L317 534 264.5 481.5ZM396.6 275.9H395.5A154 154 0 0 0 396.5 258.6V206.9A34.5 34.5 0 0 1 396.5 275.9ZM86.2 103.5A103.6 103.6 0 0 1 189.7 0H293.1A103.6 103.6 0 0 1 396.6 103.5V172.4H327.6A34.5 34.5 0 0 1 293.1 137.9V69H258.6V86.2A86.3 86.3 0 0 1 172.4 172.4H86.2ZM86.2 275.9A34.5 34.5 0 1 1 86.2 206.9V258.6A154 154 0 0 0 87.2 275.9ZM120.7 258.6V206.9H172.4A120.4 120.4 0 0 0 264 164.6 69 69 0 0 0 327.6 206.9H362V258.6A120.7 120.7 0 1 1 120.7 258.6ZM482.8 620.7H0V569A155.4 155.4 0 0 1 108 421.2L138.2 572.4A17.3 17.3 0 0 0 150.2 585.5 17.6 17.6 0 0 0 155.1 586.2 17.3 17.3 0 0 0 167.3 581.2L241.3 507.2 315.3 581.2A17.2 17.2 0 0 0 344.4 572.3L374.6 421.2A155.5 155.5 0 0 1 482.7 569ZM172.4 827.6A17.2 17.2 0 0 0 155.2 810.3H127.8L206.9 731.3 286 810.3H258.6A17.2 17.2 0 0 0 241.4 827.6 206.9 206.9 0 0 0 333.5 999.6 172.6 172.6 0 0 1 172.4 827.6Z", + "width": 1000 + }, + "search": [ + "referral-bg" + ] + }, + { + "uid": "f7fb556e96e9f2dfe8d87fafd4952bc8", + "css": "search-1", + "code": 59425, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M402.7 804.7A401.8 401.8 0 0 0 649.6 719.9L915.7 986A50 50 0 0 0 986.5 915.3L720.3 649.2A402.6 402.6 0 1 0 402.7 804.7ZM188.8 188.6A302.4 302.4 0 1 1 188.8 616.2H188.8A301.2 301.2 0 0 1 187.1 190.2L188.6 188.6Z", + "width": 1001 + }, + "search": [ + "search" + ] + }, + { + "uid": "d158c7d34d65d4d174f62fd0e4a85721", + "css": "send", + "code": 59427, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M1000.1 0L0 562.5 319.4 680.9 812.5 218.8 437.6 724.5 437.9 724.5 437.5 724.5V1000.1L616.7 790.9 843.7 875Z", + "width": 1000 + }, + "search": [ + "send" + ] + }, + { + "uid": "29b6fa307d6eeddd2d501aa1fbe72411", + "css": "view", + "code": 59430, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M776.8 250A250 250 0 1 0 1026.8 500 250.2 250.2 0 0 0 776.8 250ZM757.8 425.9A57.4 57.4 0 0 0 700.9 482.8H618.1A141.3 141.3 0 0 1 757.8 343.1ZM1535.4 448.3C1450.9 343.1 1149.2-0.1 776.8-0.1S102.6 342.9 18.1 448.3A82.9 82.9 0 0 0 18.1 551.8C102.6 657 404.3 1000.1 776.8 1000.1S1450.9 657 1535.4 551.8A82.9 82.9 0 0 0 1535.4 448.3ZM776.8 862.1A362 362 0 1 1 1138.8 500 362 362 0 0 1 776.8 862.1Z", + "width": 1553 + }, + "search": [ + "view" + ] + }, + { + "uid": "6dd961ddeafa6f1221c571e3a96c5e0d", + "css": "warning", + "code": 59431, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M1165.9 890.7L649.9 34.8A72.1 72.1 0 0 0 526.5 34.8L10.4 890.7A72.1 72.1 0 0 0 72.1 1000H1104.2A72.1 72.1 0 0 0 1165.9 890.7ZM588.5 296.1A48.8 48.8 0 0 1 643.3 342.4C643.3 432.8 632.7 562.8 632.7 653.2 632.7 676.8 606.8 686.9 588.6 686.9 564.3 686.9 543.7 677 543.7 653.2 543.7 562.8 533.1 432.8 533.1 342.4 533.1 312.8 557.3 296.1 588.5 296.1ZM589.3 856.1A58.5 58.5 0 1 1 647.1 797.6 59.4 59.4 0 0 1 589.3 856.1Z", + "width": 1176 + }, + "search": [ + "warning" + ] + }, + { + "uid": "1a56c6056532ad852281ae8316f6ac0a", + "css": "add", + "code": 59432, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M769.7 0H230.3A230.9 230.9 0 0 0 0 230.3V769.7A230.9 230.9 0 0 0 230.3 1000H769.7A230.9 230.9 0 0 0 1000 769.7V230.3A230.9 230.9 0 0 0 769.7 0ZM705.2 543.1H553.6A8.8 8.8 0 0 0 544.8 551.9V704A44.7 44.7 0 0 1 455.4 704V552A8.8 8.8 0 0 0 446.6 543.2H294.7A44.7 44.7 0 0 1 294.7 453.8H446.4A8.8 8.8 0 0 0 455.2 445V293.1A44.7 44.7 0 1 1 544.6 293.1V444.9A8.8 8.8 0 0 0 553.4 453.9H705.2A44.7 44.7 0 1 1 705.2 543.3Z", + "width": 1000 + }, + "search": [ + "add" + ] + }, + { + "uid": "84f81a72b1b0ffb0132cd1bbe1c22ca7", + "css": "close", + "code": 59433, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M591.6 500L981.2 110.4A64.8 64.8 0 1 0 889.4 19L499.8 408.6 110.2 19A64.8 64.8 0 0 0 19 110.6L408.6 500.2 19 889.8A64.8 64.8 0 1 0 110.6 981.4L500.2 591.8 889.8 981.4A64.8 64.8 0 1 0 981.4 889.8ZM591.6 500", + "width": 1000 + }, + "search": [ + "close" + ] + }, + { + "uid": "77819ffd4aac6bbd19e5760b252d420a", + "css": "back", + "code": 59434, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M14.6 535.8L464.3 985.3A50.5 50.5 0 1 0 535.8 914L121.8 500.1 535.8 86.2A50.5 50.5 0 0 0 464.3 14.7L14.6 464.3A51 51 0 0 0 14.6 535.8Z", + "width": 551 + }, + "search": [ + "back" + ] + }, + { + "uid": "c6bf117fcd1f7bb313ba6e9c3c2577ee", + "css": "qr-code-2", + "code": 59437, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M650 0V350H1000V0ZM900 250H750V100H900ZM350 200V0H0V350H450V200H350ZM250 250H100V100H250ZM700 550H800V700H900V450H550V550H600V650.1H700.1ZM700 800H600V900H500V1000H700V900H800V1000H950V900H900V800H700ZM350 800V650H0V1000H350V900H500V800ZM250 900H100V750H250Z", + "width": 1000 + }, + "search": [ + "qr-code" + ] + }, + { + "uid": "db7c621524e167c8d42abc9418ae711d", + "css": "health-summary", + "code": 59435, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M714.1 956.9H146.5A97 97 0 0 1 47.4 862.1V79.8A63 63 0 0 0 0 137.9V939.7A62.5 62.5 0 0 0 64.7 1000H652A63.3 63.3 0 0 0 714.1 956.9ZM714.1 956.9M799.6 862.1V435.3H312.3L312 462C312 462.3 312 461.2 312 463.4H519.4A17.2 17.2 0 1 1 519.4 497.9H310.1A32.1 32.1 0 0 1 287.8 487.8 38 38 0 0 1 277.5 461.2L277.7 435.4H241.3A16.9 16.9 0 0 1 224.1 418.5V416H172.3A17.2 17.2 0 0 1 155.1 398.9L154.5 324A17.8 17.8 0 0 1 171.8 306.2H171.8L224 307.2V304.9A18 18 0 0 1 241.2 286.6H799.6V209.1H653.6A56.2 56.2 0 0 1 597 152.5V0H146.4A63.1 63.1 0 0 0 81.4 58.1 16.8 16.8 0 0 1 81.9 60.3C81.9 61.2 81.9 62.1 81.9 63V862.1A62.6 62.6 0 0 0 146.4 922.4H733.8A63.6 63.6 0 0 0 799.6 862.1ZM172.5 543.1H456A17.2 17.2 0 1 1 456 577.6H172.5A17.2 17.2 0 0 1 172.5 543.1ZM665.8 829.7H172.5A17.2 17.2 0 0 1 172.5 795.2H665.8A17.2 17.2 0 0 1 665.8 829.7ZM665.8 745.6H172.5A17.2 17.2 0 0 1 172.5 711.2H665.8A17.2 17.2 0 1 1 665.8 745.6ZM665.8 661.6H172.5A17.2 17.2 0 0 1 172.5 627.1H665.8A17.2 17.2 0 1 1 665.8 661.6ZM665.8 661.6M773.5 174.6L631.5 27.6V152.5A21.8 21.8 0 0 0 653.6 174.5ZM773.5 174.6M898.7 336.6V386.6L937.2 361.6ZM898.7 336.6M258.6 321.1H864.2V400.9H258.6ZM258.6 321.1M224.1 381.5V341.5L189.2 341.1 189.4 381.5ZM224.1 381.5", + "width": 937 + }, + "search": [ + "health-summary" + ] + }, + { + "uid": "50d667f8b7f88d80bebfb19c6d88f412", + "css": "powered-by-cs", + "code": 59436, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M5611.5 942.8L5603.8 947.4A13.5 13.5 0 0 0 5599.7 942.5 9.5 9.5 0 0 0 5594.5 941.2 9.7 9.7 0 0 0 5587.9 943.5 6.9 6.9 0 0 0 5585.4 949C5585.4 952 5587.6 954.5 5592.2 956.3L5598.4 958.7A26.4 26.4 0 0 1 5609.6 966.3 16.8 16.8 0 0 1 5613.1 977.1 19.1 19.1 0 0 1 5607.4 991.4 19.7 19.7 0 0 1 5593 997.1 19.2 19.2 0 0 1 5579.5 992.2 22.3 22.3 0 0 1 5572.9 978.6L5582.5 976.5A16.5 16.5 0 0 0 5584.8 984.2 10.8 10.8 0 0 0 5600.7 985.3 10.2 10.2 0 0 0 5603.6 977.7 11 11 0 0 0 5603.1 974.4 9 9 0 0 0 5601.5 971.6 12.9 12.9 0 0 0 5598.7 969.2 27.3 27.3 0 0 0 5594.7 967L5588.6 964.6A17.4 17.4 0 0 1 5575.7 948.9 15.1 15.1 0 0 1 5581.1 937.1 19.5 19.5 0 0 1 5594.6 932.3 18.8 18.8 0 0 1 5611.6 942.8M5623.8 964.5A30.6 30.6 0 0 1 5633.5 941.8 31.8 31.8 0 0 1 5656.8 932.3 32.7 32.7 0 0 1 5689.3 964.9 30.8 30.8 0 0 1 5679.6 987.9 33.1 33.1 0 0 1 5634.4 988.9 30.8 30.8 0 0 1 5623.8 964.6M5633.3 964.7A23.2 23.2 0 0 0 5673 981.7 24.3 24.3 0 0 0 5673 948.1 22.2 22.2 0 0 0 5656.5 941.3 22.4 22.4 0 0 0 5640 948.1 22.6 22.6 0 0 0 5633.2 964.8M5713.1 933.5V987.3H5731.5V996.2H5703.5V933.5ZM5750.4 933.5V971.3A20.8 20.8 0 0 0 5753.1 983.1 14.1 14.1 0 0 0 5775.3 983.1 20.5 20.5 0 0 0 5777.9 971.3V933.5H5787.4V973.8A22.6 22.6 0 0 1 5781.2 990.2 23.8 23.8 0 0 1 5747.1 990.2 22.6 22.6 0 0 1 5740.9 973.8V933.5ZM5822.1 942.4V996.2H5812.6V942.4H5798.2V933.5H5836.5V942.4ZM5871.1 964.5A30.6 30.6 0 0 1 5880.8 941.8 31.8 31.8 0 0 1 5904 932.3 32.7 32.7 0 0 1 5936.6 964.9 30.8 30.8 0 0 1 5926.9 987.9 33.1 33.1 0 0 1 5881.7 988.9 30.8 30.8 0 0 1 5871 964.6M5880.6 964.7A23.2 23.2 0 0 0 5920.2 981.7 24.3 24.3 0 0 0 5920.2 948.1 22.2 22.2 0 0 0 5903.8 941.3 22.4 22.4 0 0 0 5887.2 948.1 22.6 22.6 0 0 0 5880.5 964.8M5950.9 996.2V929.2L5996.6 977.1V933.5H6006.1V1000L5960.4 952.3V996.1ZM6058.9 942.8L6051.3 947.4A13.8 13.8 0 0 0 6047.2 942.5 9.5 9.5 0 0 0 6041.9 941.2 9.7 9.7 0 0 0 6035.4 943.5 6.9 6.9 0 0 0 6032.8 949C6032.8 952 6035.1 954.5 6039.6 956.3L6045.9 958.7A26.4 26.4 0 0 1 6057 966.3 16.8 16.8 0 0 1 6060.5 977.1 19.1 19.1 0 0 1 6054.8 991.4 19.8 19.8 0 0 1 6040.4 997.1 19.2 19.2 0 0 1 6026.9 992.2 22.2 22.2 0 0 1 6020.4 978.6L6030 976.5A16.5 16.5 0 0 0 6032.2 984.2 9.9 9.9 0 0 0 6040.7 988.2 9.7 9.7 0 0 0 6048 985.3 10.1 10.1 0 0 0 6051 977.7 11 11 0 0 0 6050.5 974.4 9 9 0 0 0 6048.9 971.6 12.9 12.9 0 0 0 6046.1 969.2 27.3 27.3 0 0 0 6042 967L6036 964.6A17.4 17.4 0 0 1 6023.2 948.9 15.1 15.1 0 0 1 6028.6 937.1 19.5 19.5 0 0 1 6042 932.3 18.8 18.8 0 0 1 6059 942.8M5307.1 772.3A43.1 43.1 0 0 0 5292 754.6 42 42 0 0 0 5267.6 747.8 55.5 55.5 0 0 0 5245.7 752.3 61 61 0 0 0 5227.1 764.7 68.4 68.4 0 0 0 5213.5 783.5 71.1 71.1 0 0 0 5206.5 807.5 65.9 65.9 0 0 0 5207.7 831.8 49 49 0 0 0 5216.9 850.5 43 43 0 0 0 5232.4 862.7 49.2 49.2 0 0 0 5253.5 867 49.2 49.2 0 0 0 5279 860.1 64.7 64.7 0 0 0 5298.9 841.7L5327.2 860.1A101.6 101.6 0 0 1 5295.8 887 89.4 89.4 0 0 1 5251.4 897.6 90 90 0 0 1 5215.8 890.7 78.4 78.4 0 0 1 5188.5 871.8 75.1 75.1 0 0 1 5172.1 843.2 85.8 85.8 0 0 1 5168.8 807.5 103.1 103.1 0 0 1 5179.8 771.3 99.5 99.5 0 0 1 5201.9 742.7 102.6 102.6 0 0 1 5270.1 717.2 77.9 77.9 0 0 1 5312.2 727.9 73.7 73.7 0 0 1 5338.2 754.7ZM5455.3 892.5H5346.6L5384.6 722.3H5422.1L5391 862.4H5462.2ZM5669.4 843.6A98.2 98.2 0 0 1 5647.5 872 99.3 99.3 0 0 1 5617.3 890.8 97.5 97.5 0 0 1 5580.9 897.6 85.2 85.2 0 0 1 5546 890.6 76.5 76.5 0 0 1 5519.2 871.3 77.4 77.4 0 0 1 5503.3 842.7 83 83 0 0 1 5500.5 807.5 105.7 105.7 0 0 1 5511.2 771.6 98.4 98.4 0 0 1 5563.1 724 97 97 0 0 1 5599.5 717.2 84.4 84.4 0 0 1 5634.4 724.3 76.4 76.4 0 0 1 5677 772.4 82.7 82.7 0 0 1 5679.8 807.5 105.8 105.8 0 0 1 5669.1 843.6M5641.6 784.3A50.6 50.6 0 0 0 5633.7 765.3 40.1 40.1 0 0 0 5618.9 752.5 46.2 46.2 0 0 0 5597.4 747.8 51.9 51.9 0 0 0 5575.2 752.5 59.4 59.4 0 0 0 5557.3 765.3 66.2 66.2 0 0 0 5544.5 784.3 80.3 80.3 0 0 0 5538 807.5 69.2 69.2 0 0 0 5538.7 830.6 50.7 50.7 0 0 0 5546.7 849.5 40.2 40.2 0 0 0 5561.5 862.2 46.2 46.2 0 0 0 5582.9 866.9 52.2 52.2 0 0 0 5605.1 862.2 60.8 60.8 0 0 0 5623.1 849.5 67.1 67.1 0 0 0 5635.8 830.6 78.5 78.5 0 0 0 5642.4 807.5 70.2 70.2 0 0 0 5641.6 784.3M5864.8 834.8A84.6 84.6 0 0 1 5854.8 859.3 76.6 76.6 0 0 1 5813.5 892.7 93.5 93.5 0 0 1 5782.5 897.6 76.3 76.3 0 0 1 5751.1 891.5 62.6 62.6 0 0 1 5728.4 874.9 58.7 58.7 0 0 1 5716 850.5 64.1 64.1 0 0 1 5715.9 821.3Q5722.3 792.1 5726.2 773.1C5728.8 760.5 5730.9 750.8 5732.3 743.9S5734.8 732 5735.4 728.8 5736.4 723.4 5736.5 722.4H5774.8L5752.6 825.4A39.5 39.5 0 0 0 5752.2 840 32.9 32.9 0 0 0 5757.3 853.4 30 30 0 0 0 5768.2 863.2 33.9 33.9 0 0 0 5785 867 41.7 41.7 0 0 0 5800.7 864.1 45.6 45.6 0 0 0 5813.6 856.3 48.7 48.7 0 0 0 5823.2 845.1 42.6 42.6 0 0 0 5828.6 831.5L5853.4 722.3H5891.7ZM6063.9 842.6A90.3 90.3 0 0 1 6042.6 869.4 93.8 93.8 0 0 1 6012.6 886.4 108.4 108.4 0 0 1 5976.1 892.4H5896.7L5934.5 722.2H5993A94.2 94.2 0 0 1 6028.4 728.6 74.2 74.2 0 0 1 6055.1 746.3 71.1 71.1 0 0 1 6071.2 773.2 78.9 78.9 0 0 1 6074.4 807.3 98.4 98.4 0 0 1 6063.8 842.4M6035.4 785.5A44.4 44.4 0 0 0 6027.3 768 39.2 39.2 0 0 0 6012.6 756.4 49.2 49.2 0 0 0 5991.5 752.2H5965.3L5940.8 862.1H5976.8A55 55 0 0 0 5998.4 857.8 63.4 63.4 0 0 0 6016.7 846.1 62.3 62.3 0 0 0 6030 828.6 59.9 59.9 0 0 0 6036.5 807.3 65.7 65.7 0 0 0 6035.5 785.4M5877.9 372.8S5868.5 321.5 5791.5 321.5A102.2 102.2 0 0 0 5714.5 228.1S5701.4 135.9 5642.7 114.9L5844.1 166.3S5881.4 166.3 5877.9 231.6ZM5591.9 98.6L5226.6 0.6S5174.1-7.6 5172.9 40.2 5172.9 312.1 5172.9 312.1 5224.3 228.1 5359.7 243.9C5359.7 243.9 5384.2 98.6 5521.9 165.1A82.7 82.7 0 0 1 5591.9 98.6M5591.3 395S5599.4 347.1 5636.8 360 5739.5 403.1 5739.5 403.1A54 54 0 0 1 5766.2 460.4L5759.6 516.3A27.3 27.3 0 0 1 5719.6 537.4L5600.5 487.1A35 35 0 0 1 5586.5 448.2ZM5441.9 434.5S5448.3 407.5 5469.2 416.2 5526.2 444.5 5526.2 444.5A30.8 30.8 0 0 1 5539.4 478.1L5533.6 509.7A15.6 15.6 0 0 1 5510 520.3L5443.9 487.3A20 20 0 0 1 5437.4 464.5ZM5832.1 408.8S5838.5 381.8 5859.3 390.4 5916.3 418.8 5916.3 418.8A30.9 30.9 0 0 1 5929.5 452.4L5923.7 484A15.6 15.6 0 0 1 5900.1 494.6L5834 461.6A20 20 0 0 1 5827.5 438.8ZM5520.3 255.2S5525.7 232.5 5543.2 239.8 5591.3 263.7 5591.3 263.7A26 26 0 0 1 5602.5 292L5597.6 318.7A13.2 13.2 0 0 1 5577.7 327.6L5522 299.9A16.9 16.9 0 0 1 5516.4 280.6ZM5687.2 300.9S5691.8 281.5 5706.7 287.7 5747.5 308 5747.5 308A22.1 22.1 0 0 1 5757 332.1L5752.8 354.8A11.2 11.2 0 0 1 5735.9 362.3L5688.6 338.7A14.3 14.3 0 0 1 5683.9 322.4ZM5600.9 555S5605.4 535.7 5620.3 541.9 5661.1 562.2 5661.1 562.2A22 22 0 0 1 5670.6 586.2L5666.4 608.9A11.1 11.1 0 0 1 5649.6 616.5L5602.3 592.9A14.3 14.3 0 0 1 5597.6 576.6ZM5403.2 300.9S5407.7 281.5 5422.6 287.7 5463.4 308 5463.4 308A22.1 22.1 0 0 1 5472.9 332.1L5468.7 354.8A11.2 11.2 0 0 1 5451.9 362.3L5404.6 338.7A14.3 14.3 0 0 1 5399.9 322.4ZM5943.5 607.8S5948.1 588.5 5963 594.7 6003.8 615 6003.8 615A22.1 22.1 0 0 1 6013.3 639L6009.1 661.7A11.1 11.1 0 0 1 5992.2 669.2L5944.9 645.7A14.4 14.4 0 0 1 5940.2 629.4ZM5785 603.8S5787.7 592.4 5796.5 596.1 5820.5 608.1 5820.5 608.1A13 13 0 0 1 5826.1 622.2L5823.7 635.6A6.6 6.6 0 0 1 5813.7 640L5785.9 626.1A8.5 8.5 0 0 1 5783.1 616.5ZM5332.2 445.1S5334.9 433.7 5343.7 437.4 5367.7 449.4 5367.7 449.4A13 13 0 0 1 5373.3 463.5L5370.8 476.9A6.6 6.6 0 0 1 5360.9 481.3L5333 467.4A8.4 8.4 0 0 1 5330.3 457.7ZM5261 326.8S5263.7 315.5 5272.5 319.1 5296.5 331.1 5296.5 331.1A13 13 0 0 1 5302.1 345.2L5299.6 358.6A6.6 6.6 0 0 1 5289.7 363L5261.8 349.1A8.4 8.4 0 0 1 5259.1 339.5ZM5218.3 680.7H5212.9C5206.5 680.7 5202.4 678.7 5200.8 674.5A11.8 11.8 0 0 1 5188.6 680.7C5178.1 680.7 5172.9 673.9 5172.9 660.3 5172.9 647 5178.1 640.4 5188.6 640.4H5205.3V664.3C5205.3 670.4 5208 673.4 5213.4 673.4H5218.2ZM5197.4 647.2H5189.1A7.1 7.1 0 0 0 5182.3 650.7 20.4 20.4 0 0 0 5180.7 660.2 21.1 21.1 0 0 0 5182.3 669.7 7 7 0 0 0 5189.1 673.3 6.9 6.9 0 0 0 5195.8 669.7 21 21 0 0 0 5197.5 660.2ZM5190.1 627.8A4.5 4.5 0 0 1 5185.7 632.4 4.5 4.5 0 0 1 5181.6 627.8 4.5 4.5 0 0 1 5185.9 623.2 4.5 4.5 0 0 1 5190.3 627.8M5201.3 627.8A4.6 4.6 0 0 1 5197 632.4 4.5 4.5 0 0 1 5192.8 627.8 4.4 4.4 0 0 1 5197 623.2 4.5 4.5 0 0 1 5201.3 627.8M5238.1 664.9A15.8 15.8 0 0 1 5233.9 676.3 14.8 14.8 0 0 1 5222.6 680.7H5216.3V673.4H5222.2Q5230.3 673.4 5230.3 664.3V643L5238.1 640.5ZM5233.2 693.3A4.3 4.3 0 1 1 5224.7 693.3 4.3 4.3 0 1 1 5233.2 693.3M5268.4 680.7H5259.7A10.4 10.4 0 0 1 5248.8 669.2V625.8L5256.6 623.1V668.9C5256.6 671.8 5257.9 673.2 5260.6 673.2H5268.4ZM5321.5 680.7H5266.3V673.4H5303.3V670.2A45.7 45.7 0 0 0 5301.6 655.5 10.6 10.6 0 0 0 5290.7 647.9 16.4 16.4 0 0 0 5278.2 654.9L5272.6 649.2A24.6 24.6 0 0 1 5290.7 640.5 17.5 17.5 0 0 1 5308 650.2 46.9 46.9 0 0 1 5311.3 670.1V673.1H5321.5ZM5394.5 680.7H5319.6V673.2H5329.4V650.6L5337.2 648.2V673.2H5353.5V646.9L5361.3 644.4V673.3H5377.8V642.9L5385.6 640.5V673.3H5394.5ZM5413.5 664.9A16.2 16.2 0 0 1 5409.3 676.3 14.9 14.9 0 0 1 5398 680.7H5392.7V673.2H5397.6C5402.9 673.2 5405.7 670.2 5405.7 664.1V625.8L5413.5 623.4ZM5432 680.7H5424.2V625.8L5432 623.1ZM5527.1 678.3C5527.1 691.4 5519.8 697.8 5505 697.8A20.9 20.9 0 0 1 5487.1 690.4 40.6 40.6 0 0 1 5481.3 670L5489.2 667.2A31.6 31.6 0 0 0 5492.7 684.8 14.4 14.4 0 0 0 5505.1 689.9 18.8 18.8 0 0 0 5515.3 687.7 10.7 10.7 0 0 0 5519.2 678.4V625.9L5527 623.3ZM5578.7 680.7H5568.9A21.9 21.9 0 0 1 5563.5 692.7 15.2 15.2 0 0 1 5551.6 697.9 17 17 0 0 1 5541.9 695.4L5538.4 687.2A27 27 0 0 0 5551.4 690.4 10.4 10.4 0 0 0 5561.1 680.6H5554.7A16.3 16.3 0 0 1 5541.9 675.3 18.9 18.9 0 0 1 5537.7 662.4 25.8 25.8 0 0 1 5541.3 648.1 14.3 14.3 0 0 1 5554.1 641.5C5564.5 641.5 5569.8 648.5 5569.8 662.4 5569.8 665.2 5569.8 668.8 5569.6 673.3H5578.6ZM5562 662.5A26.2 26.2 0 0 0 5560.9 653.5 6.7 6.7 0 0 0 5554.1 649C5548.4 649 5545.6 653.5 5545.6 662.5 5545.6 669.8 5548.6 673.4 5554.7 673.4H5562ZM5611.8 680.7H5606.4A14.6 14.6 0 0 1 5594.9 675.9 14.2 14.2 0 0 1 5583.3 680.7H5576.7V673.2H5582.8C5588.3 673.2 5591 670.2 5591 664.1V625.8L5598.8 623.1V664.5C5598.8 670.3 5601.5 673.1 5606.9 673.1H5611.7ZM5653.5 680.7H5609.7V673.4H5645.6V670.2A45.5 45.5 0 0 0 5643.8 655.5 10.6 10.6 0 0 0 5633.1 647.9 16.6 16.6 0 0 0 5620.5 654.9L5614.9 649.2A24.7 24.7 0 0 1 5633.1 640.5 17.6 17.6 0 0 1 5650.3 650.2 48.7 48.7 0 0 1 5653.5 670.1ZM6139 744.3A28.9 28.9 0 0 1 6130.3 765.5 29.7 29.7 0 0 1 6088.2 765.5 29 29 0 0 1 6079.5 744.3 27.8 27.8 0 0 1 6082.3 731.7 28.9 28.9 0 0 1 6090.3 721.5 28.5 28.5 0 0 1 6109 714.6 29.2 29.2 0 0 1 6121.4 717.2 28.6 28.6 0 0 1 6134.2 728.1 29.6 29.6 0 0 1 6139 744.4M6109.1 718.9A23.5 23.5 0 0 0 6091.6 726.4 25.8 25.8 0 0 0 6091.6 762.5 24.5 24.5 0 0 0 6126.9 762.5 25.1 25.1 0 0 0 6134.2 744.3 27.6 27.6 0 0 0 6131.4 732.6 24 24 0 0 0 6123.8 723.5 24.9 24.9 0 0 0 6109.1 718.8M6112.2 747.2L6123.4 761.6H6115.4L6105.1 748V761.6H6098.6V727.2H6105.5A17.3 17.3 0 0 1 6116 729.7 9.5 9.5 0 0 1 6119.6 737.4 10.2 10.2 0 0 1 6117.7 743.4 9.4 9.4 0 0 1 6112.7 747ZM6105.1 742.4H6106.2C6110.9 742.4 6113.3 740.7 6113.3 737.5S6111 732.9 6106.5 732.9H6105Z", + "width": 6139 + }, + "search": [ + "powered-by-cs" + ] + }, + { + "uid": "d22e70eb076c0432112b21f188078144", + "css": "ecg", + "code": 59438, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M34.6 0H965.4A34.6 34.6 0 0 1 1000 34.6V464.3L698.3 464.3A35.7 35.7 0 0 0 665 487.3L598.8 660.6 433.1 226.5A35.5 35.5 0 0 0 399.8 203.5H399.8A35.5 35.5 0 0 0 366.4 226.4L275.4 464.5 0 464.3V34.6A34.6 34.6 0 0 1 34.6 0ZM965.4 1000A34.6 34.6 0 0 0 1000 965.4V535.7L722.9 535.7 632.2 773.5A35.7 35.7 0 0 1 565.4 773.5L399.7 339.3 333.4 512.8A35.7 35.7 0 0 1 300 535.8H300L0.2 535.8V965.4A34.6 34.6 0 0 0 34.8 1000H965.4Z", + "width": 1000 + }, + "search": [ + "ecg" + ] + }, + { + "uid": "742f19f79dc108f718fea3d8f79078b1", + "css": "create-episode", + "code": 59439, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M825.8 83.3A125 125 0 0 0 708.4 0H125A125.4 125.4 0 0 0 0 125V708.4A125 125 0 0 0 83.3 825.9V291.7A208.3 208.3 0 0 1 291.7 83.3ZM875 166.7H291.6A125.4 125.4 0 0 0 166.7 291.6V875A125.4 125.4 0 0 0 291.6 1000H875A125.4 125.4 0 0 0 1000 875V291.6A125.4 125.4 0 0 0 875 166.7ZM750 625H625V750A41.7 41.7 0 0 1 541.7 750V625H416.7A41.7 41.7 0 1 1 416.7 541.7H541.7V416.7A41.7 41.7 0 1 1 625 416.7V541.7H750A41.7 41.7 0 0 1 750 625Z", + "width": 1000 + }, + "search": [ + "create-episode" + ] + }, + { + "uid": "2ba8ebad7ef116f8bea385f28153e2d1", + "css": "booked", + "code": 59440, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M907.9 1000H162.7A163.1 163.1 0 0 1 0 837.9V321.9H1070.7V837.9A163.1 163.1 0 0 1 907.9 1000.3ZM71.4 393.3V837.9A91.7 91.7 0 0 0 162.7 928.8H907.9A91.7 91.7 0 0 0 999.2 837.9V393.3ZM1070.7 393H0V235.7A163.1 163.1 0 0 1 162.7 72.1H907.9A163.1 163.1 0 0 1 1070.6 235.7ZM71.4 321.9H999.2V235.7A91.7 91.7 0 0 0 907.9 143.6H162.7A91.7 91.7 0 0 0 71.4 235.7ZM46.8 357.6V937.5H1017.1V357.6ZM356.9 717.3A35.7 35.7 0 1 1 392.6 681.6 35.7 35.7 0 0 1 356.9 717.3ZM535.3 717.3A35.7 35.7 0 1 1 571 681.6 35.7 35.7 0 0 1 535.3 717.3ZM713.8 717.3A35.7 35.7 0 1 1 749.4 681.6 35.7 35.7 0 0 1 713.8 717.3Z", + "width": 1071 + }, + "search": [ + "booked" + ] + }, + { + "uid": "2b6d9d51ce00485109e1548f1318cd5c", + "css": "admission-req", + "code": 59441, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M0 1000H1101.9V598.3H0ZM518.7 689.9H583.2V762.6H655.9V827.1H583.2V899.8H518.7V827.1H445.9V762.6H518.6ZM64.5 458.4H1037.3V533.7H64.5ZM422.6 178C422.6 176.1 422.6 174.2 422.4 172.3H219.5C219.5 174.2 219.3 176.1 219.3 178A101.7 101.7 0 0 0 309.7 278.9H332.1A101.7 101.7 0 0 0 422.6 178ZM288.7 279H258.4A129.4 129.4 0 0 0 129.9 393.8H288.7V279ZM383.6 279H353.3V393.8H512.1A129.4 129.4 0 0 0 383.6 279ZM425.1 107.8L444.1 22.7A344.4 344.4 0 0 0 198.1 22.7L217 107.8ZM639.1 241.7H972.7V393.9H639.1Z", + "width": 1102 + }, + "search": [ + "admission-req" + ] + }, + { + "uid": "68d26212e04d7c6eb8c87d3d2c656220", + "css": "walkin", + "code": 59442, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M271.2 118.6H305.1A50.4 50.4 0 0 0 334.2 164.4 101.6 101.6 0 1 0 254.2 203.4 100 100 0 0 0 307.5 188.3 85.2 85.2 0 0 1 271.2 118.6ZM168 639.4L135.6 779.7 33.9 932.2 118.6 1000 254.2 813.6 274.5 746.2 171.1 642.8C170 641.7 169.1 640.5 168 639.4ZM108.3 529.8A238 238 0 0 1 101.7 475.1V385L0 508.4 67.8 576.4ZM383.6 583.9L227.8 498.8 155.6 335.8 186.6 322 254.4 474.6 372.9 539.4 440.7 576.4 491.6 491.4 373 420.2V271.2A67.8 67.8 0 0 0 305.1 203.4H203.4A67.8 67.8 0 0 0 135.6 271.2V475.2A203.2 203.2 0 0 0 195.1 618.9L339.1 762.9 389.9 983.2H491.6L440.8 712Z", + "width": 492 + }, + "search": [ + "walkin" + ] + }, + { + "uid": "579dfe811674561f24e9f789ce658182", + "css": "health-bmi", + "code": 59450, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M215.7 571.7C214.2 589.1 226 680.9 232 716.9 234.9 734 242.9 761.8 240 776.5A216.6 216.6 0 0 0 237 839.2C238.4 848.6 242.9 892 236.5 907.9A500.9 500.9 0 0 0 227.1 958.9C211.1 999.1 220.1 997.1 220.1 997.1 225 1003.2 233.5 997.6 233.5 997.6A8.2 8.2 0 0 0 244.4 996.6 9.9 9.9 0 0 0 256.4 996.1 12.2 12.2 0 0 0 269.8 993C273.7 995 274.7 992.5 274.7 992.5 286.7 991.7 268 953.5 268 953.5A104.5 104.5 0 0 1 272.5 900C301.6 813.7 303 790.8 291.4 758.3 288.1 748.9 287.3 745.2 288.8 741.1 292.3 731.7 289.8 693.9 294 678.8 302.2 649.9 310.3 576.4 314.5 542.1 320.1 495.9 294.4 434 294.4 434 288.8 408.8 297 319 297 319 308.6 336.9 308.1 368.6 308.1 368.6 306.3 401.9 335 452.7 335 452.7A135.3 135.3 0 0 1 354 495.1C354 501.1 352.7 515.8 352.7 515.8L353.2 528.5A181.9 181.9 0 0 1 354.9 548.4C352.8 581.7 358 575.4 358 575.4 362.5 575.4 367.4 548.6 367.4 548.6A114.7 114.7 0 0 0 369.5 584C373.9 593.2 377.2 582.4 377.2 580.2 378.4 537.8 381 548.9 381 548.9 383.4 583.3 386.5 591 391.9 588.3 396.1 586.4 392.3 547.1 392.3 547.1 399.4 570.4 404.7 574.1 404.7 574.1 416.4 582.4 409.2 559.7 407.6 555.2A128.9 128.9 0 0 1 398.7 523.1C409.5 544.5 417.6 543.7 417.6 543.7 428.1 540.3 408.4 510 396.8 495.5A118.2 118.2 0 0 1 381.1 472.2 280.5 280.5 0 0 1 374.8 430.2 126.3 126.3 0 0 0 364.3 375.9C348.3 350.3 345.3 302.6 345.3 302.6L344.6 222C339 167 298.5 166.6 298.5 166.6 257.5 160.5 251.8 147.3 251.8 147.3 243.2 134.8 248.1 110.8 248.1 110.8A43.5 43.5 0 0 0 258.1 89.4C270 80.3 269.4 66.9 263.9 67 259.5 67.1 260.5 63.4 260.5 63.4 268 3.1 214.4 0 214.4 0H206.2S152.6 3.1 160.1 63.4C160.1 63.4 161.1 67.1 156.6 67 151.1 66.8 150.6 80.3 162.5 89.4A43.5 43.5 0 0 0 172.5 110.8S177.4 134.8 168.8 147.2C168.8 147.2 163.1 160.5 122.1 166.6 122.1 166.6 81.5 167 76 222L75.2 302.6S72.3 350.3 56.2 375.9A126.8 126.8 0 0 0 45.8 430.2 282.3 282.3 0 0 1 39.5 472.3 116.9 116.9 0 0 1 23.8 495.5C12.1 510-7.5 540.2 3 543.7 3 543.7 11.2 544.5 21.9 523.1A127.6 127.6 0 0 1 13.1 555.2C11.4 559.6 4.1 582.3 15.8 574.2 15.8 574.2 21.2 570.4 28.3 547.1 28.3 547.1 24.5 586.4 28.7 588.4 34.2 591 37.2 583.3 39.7 548.9 39.7 548.9 42.2 537.8 43.4 580.2 43.5 582.4 46.7 593.3 51.1 584A113.1 113.1 0 0 0 53.2 548.6S58 575.4 62.6 575.4C62.6 575.4 67.9 581.7 65.7 548.4A167.4 167.4 0 0 1 67.4 528.6L68 515.8S66.6 501.2 66.6 495.1A135.1 135.1 0 0 1 85.6 452.7S114.3 401.9 112.4 368.7C112.4 368.7 112 337 123.6 319 123.6 319 131.8 408.8 126.2 434 126.2 434 100.4 496 106.1 542.2 110.3 576.5 118.4 649.9 126.6 678.9 130.9 693.9 128.4 731.7 131.8 741.2 133.3 745.3 132.5 749.1 129.2 758.4 117.6 790.9 119.1 813.8 148.2 900.1A103.5 103.5 0 0 1 152.6 953.6S134 991.8 145.9 992.6C145.9 992.6 146.9 995.1 150.9 993.1A12.3 12.3 0 0 0 164.3 996.1 9.9 9.9 0 0 0 176.2 996.7 8.2 8.2 0 0 0 187.1 997.7S195.5 1003.4 200.5 997.2C200.5 997.2 209.4 999.2 193.6 959A498.5 498.5 0 0 0 184.1 908C177.8 892.1 182.3 848.6 183.6 839.3A220.4 220.4 0 0 0 180.7 776.5C177.8 761.8 185.7 734 188.7 716.9 194.7 680.9 206.5 589.1 205.1 571.7L209.9 573.4A9.9 9.9 0 0 0 215.7 571.7Z", + "width": 421 + }, + "search": [ + "health-bmi" + ] + }, + { + "uid": "389526f53cb47083744673fb25e56e5e", + "css": "health-bmi-r", + "code": 59451, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M215.7 571.7C214.2 589.1 226 680.9 232 716.9 234.9 734 242.9 761.8 240 776.5A216.6 216.6 0 0 0 237 839.2C238.4 848.6 242.9 892 236.5 907.9A500.9 500.9 0 0 0 227.1 958.9C211.1 999.1 220.1 997.1 220.1 997.1 225 1003.2 233.5 997.6 233.5 997.6A8.2 8.2 0 0 0 244.4 996.6 9.9 9.9 0 0 0 256.4 996.1 12.2 12.2 0 0 0 269.8 993C273.7 995 274.7 992.5 274.7 992.5 286.7 991.7 268 953.5 268 953.5A104.5 104.5 0 0 1 272.5 900C301.6 813.7 303 790.8 291.4 758.3 288.1 748.9 287.3 745.2 288.8 741.1 292.3 731.7 289.8 693.9 294 678.8 302.2 649.9 310.3 576.4 314.5 542.1 320.1 495.9 294.4 434 294.4 434 288.8 408.8 297 319 297 319 308.6 336.9 308.1 368.6 308.1 368.6 306.3 401.9 335 452.7 335 452.7A135.3 135.3 0 0 1 354 495.1C354 501.1 352.7 515.8 352.7 515.8L353.2 528.5A181.9 181.9 0 0 1 354.9 548.4C352.8 581.7 358 575.4 358 575.4 362.5 575.4 367.4 548.6 367.4 548.6A114.7 114.7 0 0 0 369.5 584C373.9 593.2 377.2 582.4 377.2 580.2 378.4 537.8 381 548.9 381 548.9 383.4 583.3 386.5 591 391.9 588.3 396.1 586.4 392.3 547.1 392.3 547.1 399.4 570.4 404.7 574.1 404.7 574.1 416.4 582.4 409.2 559.7 407.6 555.2A128.9 128.9 0 0 1 398.7 523.1C409.5 544.5 417.6 543.7 417.6 543.7 428.1 540.3 408.4 510 396.8 495.5A118.2 118.2 0 0 1 381.1 472.2 280.5 280.5 0 0 1 374.8 430.2 126.3 126.3 0 0 0 364.3 375.9C348.3 350.3 345.3 302.6 345.3 302.6L344.6 222C339 167 298.5 166.6 298.5 166.6 257.5 160.5 251.8 147.3 251.8 147.3 243.2 134.8 248.1 110.8 248.1 110.8A43.5 43.5 0 0 0 258.1 89.4C270 80.3 269.4 66.9 263.9 67 259.5 67.1 260.5 63.4 260.5 63.4 268 3.1 214.4 0 214.4 0H206.2S152.6 3.1 160.1 63.4C160.1 63.4 161.1 67.1 156.6 67 151.1 66.8 150.6 80.3 162.5 89.4A43.5 43.5 0 0 0 172.5 110.8S177.4 134.8 168.8 147.2C168.8 147.2 163.1 160.5 122.1 166.6 122.1 166.6 81.5 167 76 222L75.2 302.6S72.3 350.3 56.2 375.9A126.8 126.8 0 0 0 45.8 430.2 282.3 282.3 0 0 1 39.5 472.3 116.9 116.9 0 0 1 23.8 495.5C12.1 510-7.5 540.2 3 543.7 3 543.7 11.2 544.5 21.9 523.1A127.6 127.6 0 0 1 13.1 555.2C11.4 559.6 4.1 582.3 15.8 574.2 15.8 574.2 21.2 570.4 28.3 547.1 28.3 547.1 24.5 586.4 28.7 588.4 34.2 591 37.2 583.3 39.7 548.9 39.7 548.9 42.2 537.8 43.4 580.2 43.5 582.4 46.7 593.3 51.1 584A113.1 113.1 0 0 0 53.2 548.6S58 575.4 62.6 575.4C62.6 575.4 67.9 581.7 65.7 548.4A167.4 167.4 0 0 1 67.4 528.6L68 515.8S66.6 501.2 66.6 495.1A135.1 135.1 0 0 1 85.6 452.7S114.3 401.9 112.4 368.7C112.4 368.7 112 337 123.6 319 123.6 319 131.8 408.8 126.2 434 126.2 434 100.4 496 106.1 542.2 110.3 576.5 118.4 649.9 126.6 678.9 130.9 693.9 128.4 731.7 131.8 741.2 133.3 745.3 132.5 749.1 129.2 758.4 117.6 790.9 119.1 813.8 148.2 900.1A103.5 103.5 0 0 1 152.6 953.6S134 991.8 145.9 992.6C145.9 992.6 146.9 995.1 150.9 993.1A12.3 12.3 0 0 0 164.3 996.1 9.9 9.9 0 0 0 176.2 996.7 8.2 8.2 0 0 0 187.1 997.7S195.5 1003.4 200.5 997.2C200.5 997.2 209.4 999.2 193.6 959A498.5 498.5 0 0 0 184.1 908C177.8 892.1 182.3 848.6 183.6 839.3A220.4 220.4 0 0 0 180.7 776.5C177.8 761.8 185.7 734 188.7 716.9 194.7 680.9 206.5 589.1 205.1 571.7L209.9 573.4A9.9 9.9 0 0 0 215.7 571.7Z", + "width": 421 + }, + "search": [ + "health-bmi-r" + ] + }, + { + "uid": "b10e8135ab3032dd84d104a1d1600e59", + "css": "reschedule-", + "code": 59443, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M484.5 67.2L7.6 3.6A17.9 17.9 0 0 0 0 17.9V920.2A17.9 17.9 0 0 0 15.5 937.9L479.8 999.8A17.9 17.9 0 0 0 493.8 995.7 17.5 17.5 0 0 0 500 982.3V84.9A17.9 17.9 0 0 0 484.5 67.2ZM423.3 512.6L369.7 566.3A17.9 17.9 0 0 1 344.4 541L367.5 518H89.3A17.9 17.9 0 1 1 89.3 482.3H367.6L344.5 459.2A17.9 17.9 0 0 1 369.8 433.9L423.5 487.6A17.9 17.9 0 0 1 423.5 512.8ZM535.7 201.4A336 336 0 0 1 643 165V17.9A17.9 17.9 0 0 0 625.2 0H251.5L489.4 31.7A53.7 53.7 0 0 1 535.9 84.9V201.4ZM535.7 928.5H625A17.9 17.9 0 0 0 642.9 910.6V834.8A336 336 0 0 1 535.5 798.4ZM696.4 196.4A301.3 301.3 0 0 0 535.7 242.9V286.2A267.5 267.5 0 1 1 831.7 730.9C831.2 731.2 830.9 731.7 830.4 732A13.8 13.8 0 0 1 828.6 732.7 266.1 266.1 0 0 1 535.7 713.9V757.2A303.5 303.5 0 1 0 696.4 196.4ZM598.2 329.9A17.9 17.9 0 0 1 573.8 323.3L565.3 308.5A234.4 234.4 0 0 0 535.7 332.9V667.1A234.5 234.5 0 0 0 565.3 691.5L573.8 676.7A17.9 17.9 0 1 1 604.8 694.5L596.3 709.2A229.9 229.9 0 0 0 678.6 731.3V714.3A17.9 17.9 0 1 1 714.3 714.3V731.2A229.9 229.9 0 0 0 796.6 709.1L788.3 694.5A17.9 17.9 0 1 1 819.2 676.6L827.7 691.4A233.9 233.9 0 0 0 888 631.1L873.3 622.6A17.9 17.9 0 1 1 891.2 591.7L905.8 599.9A229.7 229.7 0 0 0 927.9 517.7H910.9A17.9 17.9 0 0 1 910.9 482H927.8A229.7 229.7 0 0 0 905.7 399.7L891.1 408A17.9 17.9 0 1 1 873.2 377.1L887.9 368.6A233.9 233.9 0 0 0 827.7 308.3L819.2 323A17.9 17.9 0 1 1 788.2 305.1L796.5 290.5A229.8 229.8 0 0 0 714.2 268.4V285.4A17.9 17.9 0 1 1 678.5 285.4V268.4A229.9 229.9 0 0 0 596.2 290.4L604.7 305.1A17.9 17.9 0 0 1 598.2 329.9ZM678.6 449.6V374.9A17.9 17.9 0 0 1 714.3 374.9V449.6A53.7 53.7 0 0 1 746.8 482H785.8A17.9 17.9 0 1 1 785.8 517.7H746.8A53.5 53.5 0 1 1 678.7 449.6Z", + "width": 1000 + }, + "search": [ + "reschedule-" + ] + }, + { + "uid": "b3149ed370567049bc19ff11fb449d92", + "css": "edit", + "code": 59444, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M571.4 635.7A88.7 88.7 0 0 1 537 657L412.7 698.4A87.7 87.7 0 0 1 384.9 702.9H384.9A87.9 87.9 0 0 1 301.5 587.2L342.9 462.9A88.3 88.3 0 0 1 364.1 428.6L632.7 160.1H107.4A107.5 107.5 0 0 0 0 267.6V892.6A107.5 107.5 0 0 0 107.4 999.8H732.4A107.5 107.5 0 0 0 839.9 892.4V367.3ZM405.7 469.9A29.3 29.3 0 0 0 398.6 481.4L357.2 605.7A29.3 29.3 0 0 0 394.2 642.7L518.5 601.3A29.3 29.3 0 0 0 530 594.2L895.9 228.2 771.7 103.9ZM930.5 14.3A48.8 48.8 0 0 0 861.4 14.3L813.1 62.6 937.4 186.9 985.7 138.6A48.8 48.8 0 0 0 985.7 69.5Z", + "width": 1000 + }, + "search": [ + "edit" + ] + }, + { + "uid": "62eceb513690fcf588af5818c18d0094", + "css": "lab-results", + "code": 59445, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M633.4 0L547 23.2 523.8 109.6 587 172.8 673.4 149.6C681.4 120.9 688.9 92.1 696.6 63.3ZM206.2 20.1V53.8H239.8C240.2 143.1 239.8 232.1 239.8 321.2 237.7 325.8 72 689.9 4.2 893.4A102.8 102.8 0 0 0 6.2 957.1 75.5 75.5 0 0 0 22.3 985.5 44.5 44.5 0 0 0 54.1 1000H628.1A44.5 44.5 0 0 0 659.9 985.5 75.5 75.5 0 0 0 676.1 957.1 102.8 102.8 0 0 0 678 893.4C610.2 689.9 444.4 325.9 442.5 321.2 442.8 232.1 442.7 143 442.7 53.8H476.5V20.1ZM815 52.1L728.6 75.2 705.6 161.6 768.8 224.9 855.2 201.7C862.7 172.9 870.6 144.1 878.4 115.3ZM408.8 53.8V222.8L273.6 223.2 273.6 54.3ZM684.3 177L597.9 200.2 574.7 286.6 638 349.8 724.4 326.6Q735.9 283.4 747.4 240.2ZM712.8 391.5V425.3H746.6V847.5A357 357 0 0 0 753 948 70.1 70.1 0 0 0 779.3 985.8 89.1 89.1 0 0 0 831 999.4 89 89 0 0 0 882.7 985.8 69.7 69.7 0 0 0 908.9 948 356.8 356.8 0 0 0 915.4 847.5V425.3H949.1V391.6ZM780.2 425.3H881.7V560.4H780.3ZM464.5 611.6A46.1 46.1 0 0 1 433.7 669.3 45.5 45.5 0 0 1 416.8 671L398.3 713.8A65.5 65.5 0 0 1 419 780.9L461.3 804.7A45.3 45.3 0 0 1 476.3 796.7 46.3 46.3 0 1 1 445.4 854.4 45.3 45.3 0 0 1 444.2 833.8L402.6 810.4A66.5 66.5 0 0 1 373.6 828.7 67.5 67.5 0 0 1 289.6 783.9 66.7 66.7 0 0 1 289.3 746.5L260.3 730.2A45.3 45.3 0 0 1 242.9 740.3 46.2 46.2 0 1 1 273.6 682.6 45.3 45.3 0 0 1 275.3 700L306.3 717.5A64.3 64.3 0 0 1 368 698.9L386.4 656.5A45.3 45.3 0 0 1 375.9 638.7 48.8 48.8 0 0 1 418.7 579.7 43.1 43.1 0 0 1 464.5 611.8Z", + "width": 949 + }, + "search": [ + "lab-results" + ] + }, + { + "uid": "b8c24ee4205dd048e10770f7e63b6315", + "css": "logout", + "code": 59447, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M500 0A500 500 0 1 0 1000 500 500.5 500.5 0 0 0 500 0ZM470.7 167.9A29.3 29.3 0 1 1 529.3 167.9V402.3A29.3 29.3 0 0 1 470.7 402.3ZM500 822.3A322.2 322.2 0 0 1 371.2 204.7 29.3 29.3 0 0 1 394.7 258.4 263.7 263.7 0 1 0 605.6 258.4 29.3 29.3 0 0 1 629.1 204.8 322.2 322.2 0 0 1 500 822.3Z", + "width": 1000 + }, + "search": [ + "logout" + ] + }, + { + "uid": "64a64005d594ba0971f9384a182f3e62", + "css": "obese-bmi", + "code": 59448, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M307.3 571.7C305.2 589.1 322 680.9 330.6 716.9 334.8 734 346.1 761.8 342 776.5A153.3 153.3 0 0 0 337.7 839.2C339.7 848.6 346 892 337 907.9A369.5 369.5 0 0 0 323.5 958.9C300.8 999.1 313.6 997.1 313.6 997.1 320.6 1003.2 332.7 997.6 332.7 997.6A15.3 15.3 0 0 0 348.1 996.6 18.9 18.9 0 0 0 365.2 996.1 22.4 22.4 0 0 0 384.2 993C389.9 995 391.3 992.5 391.3 992.5 408.3 991.7 381.8 953.5 381.8 953.5A76.3 76.3 0 0 1 388.1 900C429.5 813.7 431.7 790.8 415.1 758.3 410.4 748.9 409.2 745.2 411.4 741.1 416.3 731.7 412.7 693.9 418.8 678.8 430.5 649.9 442 576.4 448 542.1 456.1 495.9 419.4 434 419.4 434 411.4 408.8 423.1 319 423.1 319 439.6 336.9 439 368.6 439 368.6 436.4 401.9 477.2 452.7 477.2 452.7A118.4 118.4 0 0 1 504.3 495.1C504.3 501.1 502.4 515.8 502.4 515.8L503.2 528.5A129.3 129.3 0 0 1 505.7 548.3C502.6 581.6 510.2 575.3 510.2 575.3 516.5 575.3 523.5 548.5 523.5 548.5 523.5 555.4 521.1 576.1 526.4 583.9 532.7 593.2 537.4 582.3 537.5 580.1 539.2 537.8 542.8 548.9 542.8 548.9 546.3 583.2 550.7 591 558.4 588.3 564.3 586.3 558.9 547.1 558.9 547.1 569 570.4 576.7 574.1 576.7 574.1 593.3 582.3 583 559.6 580.7 555.1A99.2 99.2 0 0 1 568 523C583.4 544.5 595 543.6 595 543.6 610 540.3 581.9 509.9 565.4 495.4A126 126 0 0 1 543 472.2 203.5 203.5 0 0 1 534 430.1C532.4 392.3 519.1 375.9 519.1 375.9 496.3 350.3 492 302.5 492 302.5L491 221.9C483 166.9 425.3 166.5 425.3 166.5 366.9 160.4 358.8 147.2 358.8 147.2 346.4 134.7 353.5 110.8 353.5 110.8A38.7 38.7 0 0 0 367.7 89.4C384.7 80.2 383.9 66.8 376 66.9 369.7 67 371.2 63.4 371.2 63.4 381.9 3.1 305.5 0 305.5 0H293.9S217.5 3.1 228.1 63.4C228.1 63.4 229.6 67.1 223.2 67 215.4 66.8 214.6 80.3 231.6 89.4A38.7 38.7 0 0 0 245.8 110.8S252.9 134.8 240.5 147.2C240.5 147.2 232.4 160.5 174 166.6 174 166.6 116.2 167 108.3 222L107.2 302.6S103 350.3 80.2 375.9C80.2 375.9 66.9 392.4 65.4 430.2A204.8 204.8 0 0 1 56.4 472.3 124.6 124.6 0 0 1 33.9 495.5C17.3 510-10.7 540.2 4.3 543.7 4.3 543.7 16 544.5 31.3 523.1A98.1 98.1 0 0 1 18.7 555.2C16.3 559.6 6 582.3 22.6 574.2 22.6 574.2 30.3 570.4 40.4 547.1 40.4 547.1 35 586.4 41 588.4 48.8 591 53.1 583.3 56.6 548.9 56.6 548.9 60.2 537.8 61.9 580.2 62 582.4 66.5 593.3 72.9 584 78.3 576.2 75.9 555.5 75.9 548.6 75.9 548.6 82.8 575.4 89.2 575.4 89.2 575.4 96.8 581.7 93.7 548.4A119.1 119.1 0 0 1 96.2 528.5L96.9 515.8S95 501.1 95 495.1A118.3 118.3 0 0 1 122.1 452.7S162.9 401.8 160.3 368.6C160.3 368.6 159.7 336.9 176.2 319 176.2 319 187.9 408.8 180 434 180 434 143.2 495.9 151.3 542.1 157.3 576.5 168.8 649.9 180.5 678.8 186.6 693.8 183 731.7 187.9 741.1 190.1 745.2 188.9 749 184.2 758.3 167.7 790.8 169.8 813.7 211.3 900A75.6 75.6 0 0 1 217.6 953.5S191.1 991.7 208.1 992.5C208.1 992.5 209.4 995 215.1 993A22.4 22.4 0 0 0 234.2 996.1 18.8 18.8 0 0 0 251.2 996.6 15.2 15.2 0 0 0 266.7 997.6S278.7 1003.3 285.8 997.1C285.8 997.1 298.5 999.1 275.9 958.9A367.7 367.7 0 0 0 262.5 907.9C253.4 892.1 259.9 848.6 261.8 839.2A155.9 155.9 0 0 0 257.5 776.5C253.3 761.8 264.7 734 268.9 716.9 277.5 680.9 294.3 589.1 292.2 571.7L299.2 573.4A18.3 18.3 0 0 0 307.3 571.7Z", + "width": 599 + }, + "search": [ + "obese-bmi" + ] + }, + { + "uid": "8def4a3c24de0ce8f44b7815c2c60e8b", + "css": "livecare", + "code": 59449, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M359.7 999.9H201.4A198.3 198.3 0 0 1 123.3 984 203.2 203.2 0 0 1 16.1 877 197.1 197.1 0 0 1 0.2 799.1V200.7A197.7 197.7 0 0 1 16.1 122.7 203 203 0 0 1 123.2 15.8 197.7 197.7 0 0 1 201 0H943.2A197.7 197.7 0 0 1 1021.2 15.9 202.9 202.9 0 0 1 1128.1 123 197.7 197.7 0 0 1 1143.3 200.8V348.4A165.5 165.5 0 0 0 1143.3 658.1V798.8A198.3 198.3 0 0 1 1127.7 876.9 202.3 202.3 0 0 1 1020.9 984.1 197.7 197.7 0 0 1 943 1000H769.8A523.4 523.4 0 0 0 826.4 943.9 52.2 52.2 0 0 0 837.9 902.6 762.6 762.6 0 0 0 945.5 700.1 735.6 735.6 0 0 0 974.8 593.4 534.2 534.2 0 0 0 985 493.3 353.7 353.7 0 0 0 969.2 377.4 151.4 151.4 0 0 0 923.5 309.3 216.9 216.9 0 0 0 851 271.4C822.4 261.7 789.4 254.2 754.4 246.2H754.4L754.4 246.2A54 54 0 0 0 706.1 215.5 54.9 54.9 0 1 0 706.1 325.4 52.7 52.7 0 0 0 738.4 313.3L739.7 313.7H739.7L740.6 313.7C775.5 321.8 803.1 328.4 826 335.7A149.3 149.3 0 0 1 880.4 363.5 93 93 0 0 1 908.6 411.4 320 320 0 0 1 916.7 493.8 460.9 460.9 0 0 1 907.2 582.5 666.4 666.4 0 0 1 880.5 677.7 743.1 743.1 0 0 1 838.7 772.4 656 656 0 0 1 784.3 859 52.4 52.4 0 0 0 748.2 876.5 370.9 370.9 0 0 1 670.2 946.2 179.5 179.5 0 0 1 459.8 946.2 368 368 0 0 1 381.8 876.9 52.4 52.4 0 0 0 345.7 859.4 659.1 659.1 0 0 1 291.2 772.5 747 747 0 0 1 249.4 677.3 664.2 664.2 0 0 1 222.6 582.1 463.2 463.2 0 0 1 213.1 493.3 323.7 323.7 0 0 1 221.1 410.8 92.7 92.7 0 0 1 249.2 362.9 148.8 148.8 0 0 1 303.6 335.1C326.8 327.8 355.9 321 389.6 313.1L390.3 313.1H390.3L390.8 312.7A54.1 54.1 0 0 0 423.8 324.9 54.8 54.8 0 1 0 423.8 215 53.1 53.1 0 0 0 394.5 223.7 59.5 59.5 0 0 0 374.6 245.6H374.6L373.9 245.6C230.3 278.8 143.6 298.8 143.6 492.9A534.1 534.1 0 0 0 153.9 593.2 737.8 737.8 0 0 0 183.2 700 757.5 757.5 0 0 0 291.6 902.9 52 52 0 0 0 303.2 944.1 529.8 529.8 0 0 0 359.1 999.6H359.1ZM1787.8 895.3H1706.6A70 70 0 0 1 1669.9 884.8L1332 671.5A33.4 33.4 0 0 1 1316.4 643.4V622.6A165.3 165.3 0 0 0 1316.4 384.5V347A33.4 33.4 0 0 1 1332 318.9L1669.9 105.6A66.9 66.9 0 0 1 1706.6 95.1H1787.8A33.5 33.5 0 0 1 1821.5 128.2V862.6A32.9 32.9 0 0 1 1811.7 886 33.5 33.5 0 0 1 1787.9 895.7ZM467.9 673.5H485.2L539.5 673.5C546 673.5 551.4 666.6 551.7 656.7V611.6C551.7 601.9 556 594.4 562.7 593.9L579.3 593.9C586.1 594.4 590.7 602 590.7 611.6V656.8C590.7 666.8 595.5 673.2 602.1 673.2L675.3 673.2 675.3 617.1C675.3 607.5 670.7 600 663.9 599.6L634.6 599.6C628.1 599.6 623.1 592.7 622.8 582.7L622.8 567.6C622.8 557.6 628.2 550.8 634.7 550.8H664C670.7 550.3 675.1 542.4 675.1 532.8V463.3A29.8 29.8 0 0 1 652.4 477.4H602.8C596.3 477.4 590.9 484.7 590.6 494.4V539.7C590.6 549.6 585.3 556.6 578.8 556.6L564.1 556.6C557.6 556.6 552.4 549.8 552.1 539.9V494C552.1 484.1 546.7 477.4 540.2 477.4H468.1V533.3C468.1 543 472.6 550.6 479.4 551.2L508.7 551.2C515.3 551.6 520.1 559.6 520.1 569.2V582.1C520.1 591.8 515.6 599.5 508.8 599.9H479.5C472.8 600.4 468.3 608.1 468.3 617.6ZM716 459.1V693.1A29.7 29.7 0 0 1 686 721.3H455.4A29.3 29.3 0 0 1 425.6 693.1V459.1A29.7 29.7 0 0 1 455.4 430.5H685.9A30.2 30.2 0 0 1 716 459.1ZM468.1 673.5H485.5L539.7 673.5C546.2 673.5 551.6 666.6 551.9 656.7V611.6C551.9 601.9 556.2 594.4 562.9 593.9L579.6 593.9C586.2 594.4 590.8 602 590.8 611.6V657.2C590.8 667.2 595.7 673.6 602.2 673.6L675.4 673.6 675.4 617.5C675.4 607.8 670.8 600.4 664.1 599.9L634.8 599.9C628.3 599.9 623.2 593 622.9 583.1L622.9 567.9C622.9 558 628.3 551.2 634.9 551.2H664.2C670.9 550.7 675.2 542.8 675.2 533.2V463.3A29.8 29.8 0 0 1 652.6 477.4H602.9C596.5 477.4 591.1 484.7 590.8 494.4V539.4C590.8 549.3 585.4 556.3 578.9 556.3L563.9 556.3C557.4 556.3 552.2 549.5 551.9 539.6V494.2C551.9 484.2 546.5 477.6 539.9 477.6H468.1V533.4C468.1 543.1 472.6 550.8 479.4 551.3L508.7 551.3C515.3 551.7 520.1 559.7 520.1 569.3V582.3C520.1 591.9 515.6 599.6 508.8 600.1H479.5C472.8 600.5 468.3 608.2 468.3 617.8ZM1202.1 400.4A96.2 96.2 0 1 1 1106 496.6H1106A96.2 96.2 0 0 1 1202.1 400.4Z", + "width": 1821 + }, + "search": [ + "livecare" + ] + }, + { + "uid": "a02f08ac7cc84e1f52f4753adda54c87", + "css": "modify-episode", + "code": 59452, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M825.8 83.3A125 125 0 0 0 708.3 0H125A125.4 125.4 0 0 0 0 125V708.3A125 125 0 0 0 83.3 825.8V291.7A208.3 208.3 0 0 1 291.7 83.3ZM875 1000H291.7A125.8 125.8 0 0 1 166.7 875V291.6A125.7 125.7 0 0 1 291.7 166.6H875A125.7 125.7 0 0 1 1000 291.6V875A125.7 125.7 0 0 1 875 1000ZM650.9 428.6H650.9L370.5 709A21.9 21.9 0 0 0 365.1 717.8L333.1 813A22.3 22.3 0 0 0 338.6 836 22.6 22.6 0 0 0 354.6 842.5 21.4 21.4 0 0 0 361.7 841.4L456.9 809.7A22.5 22.5 0 0 0 465.6 804.3L746 523.8 650.8 428.6ZM746.2 349A37.4 37.4 0 0 0 719.7 359.9L682.7 397 777.9 492.1 814.9 455.1A37.1 37.1 0 0 0 825.9 428.6 36.8 36.8 0 0 0 814.9 402.2L772.6 359.8A37.4 37.4 0 0 0 746.1 349.1Z", + "width": 1000 + }, + "search": [ + "modify-episode" + ] + }, + { + "uid": "abc3d36a67f52088185b185d6ec822cd", + "css": "obese-bmi-r", + "code": 59454, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M307.3 571.7C305.2 589.1 322 680.9 330.6 716.9 334.8 734 346.1 761.8 342 776.5A153.3 153.3 0 0 0 337.7 839.2C339.7 848.6 346 892 337 907.9A369.5 369.5 0 0 0 323.5 958.9C300.8 999.1 313.6 997.1 313.6 997.1 320.6 1003.2 332.7 997.6 332.7 997.6A15.3 15.3 0 0 0 348.1 996.6 18.9 18.9 0 0 0 365.2 996.1 22.4 22.4 0 0 0 384.2 993C389.9 995 391.3 992.5 391.3 992.5 408.3 991.7 381.8 953.5 381.8 953.5A76.3 76.3 0 0 1 388.1 900C429.5 813.7 431.7 790.8 415.1 758.3 410.4 748.9 409.2 745.2 411.4 741.1 416.3 731.7 412.7 693.9 418.8 678.8 430.5 649.9 442 576.4 448 542.1 456.1 495.9 419.4 434 419.4 434 411.4 408.8 423.1 319 423.1 319 439.6 336.9 439 368.6 439 368.6 436.4 401.9 477.2 452.7 477.2 452.7A118.4 118.4 0 0 1 504.3 495.1C504.3 501.1 502.4 515.8 502.4 515.8L503.2 528.5A129.3 129.3 0 0 1 505.7 548.3C502.6 581.6 510.2 575.3 510.2 575.3 516.5 575.3 523.5 548.5 523.5 548.5 523.5 555.4 521.1 576.1 526.4 583.9 532.7 593.2 537.4 582.3 537.5 580.1 539.2 537.8 542.8 548.9 542.8 548.9 546.3 583.2 550.7 591 558.4 588.3 564.3 586.3 558.9 547.1 558.9 547.1 569 570.4 576.7 574.1 576.7 574.1 593.3 582.3 583 559.6 580.7 555.1A99.2 99.2 0 0 1 568 523C583.4 544.5 595 543.6 595 543.6 610 540.3 581.9 509.9 565.4 495.4A126 126 0 0 1 543 472.2 203.5 203.5 0 0 1 534 430.1C532.4 392.3 519.1 375.9 519.1 375.9 496.3 350.3 492 302.5 492 302.5L491 221.9C483 166.9 425.3 166.5 425.3 166.5 366.9 160.4 358.8 147.2 358.8 147.2 346.4 134.7 353.5 110.8 353.5 110.8A38.7 38.7 0 0 0 367.7 89.4C384.7 80.2 383.9 66.8 376 66.9 369.7 67 371.2 63.4 371.2 63.4 381.9 3.1 305.5 0 305.5 0H293.9S217.5 3.1 228.1 63.4C228.1 63.4 229.6 67.1 223.2 67 215.4 66.8 214.6 80.3 231.6 89.4A38.7 38.7 0 0 0 245.8 110.8S252.9 134.8 240.5 147.2C240.5 147.2 232.4 160.5 174 166.6 174 166.6 116.2 167 108.3 222L107.2 302.6S103 350.3 80.2 375.9C80.2 375.9 66.9 392.4 65.4 430.2A204.8 204.8 0 0 1 56.4 472.3 124.6 124.6 0 0 1 33.9 495.5C17.3 510-10.7 540.2 4.3 543.7 4.3 543.7 16 544.5 31.3 523.1A98.1 98.1 0 0 1 18.7 555.2C16.3 559.6 6 582.3 22.6 574.2 22.6 574.2 30.3 570.4 40.4 547.1 40.4 547.1 35 586.4 41 588.4 48.8 591 53.1 583.3 56.6 548.9 56.6 548.9 60.2 537.8 61.9 580.2 62 582.4 66.5 593.3 72.9 584 78.3 576.2 75.9 555.5 75.9 548.6 75.9 548.6 82.8 575.4 89.2 575.4 89.2 575.4 96.8 581.7 93.7 548.4A119.1 119.1 0 0 1 96.2 528.5L96.9 515.8S95 501.1 95 495.1A118.3 118.3 0 0 1 122.1 452.7S162.9 401.8 160.3 368.6C160.3 368.6 159.7 336.9 176.2 319 176.2 319 187.9 408.8 180 434 180 434 143.2 495.9 151.3 542.1 157.3 576.5 168.8 649.9 180.5 678.8 186.6 693.8 183 731.7 187.9 741.1 190.1 745.2 188.9 749 184.2 758.3 167.7 790.8 169.8 813.7 211.3 900A75.6 75.6 0 0 1 217.6 953.5S191.1 991.7 208.1 992.5C208.1 992.5 209.4 995 215.1 993A22.4 22.4 0 0 0 234.2 996.1 18.8 18.8 0 0 0 251.2 996.6 15.2 15.2 0 0 0 266.7 997.6S278.7 1003.3 285.8 997.1C285.8 997.1 298.5 999.1 275.9 958.9A367.7 367.7 0 0 0 262.5 907.9C253.4 892.1 259.9 848.6 261.8 839.2A155.9 155.9 0 0 0 257.5 776.5C253.3 761.8 264.7 734 268.9 716.9 277.5 680.9 294.3 589.1 292.2 571.7L299.2 573.4A18.3 18.3 0 0 0 307.3 571.7Z", + "width": 599 + }, + "search": [ + "obese-bmi-r" + ] + }, + { + "uid": "6155f39d20a8f84da651fa66bdcabfeb", + "css": "ovrweight-bmi", + "code": 59455, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M240.4 571.7C238.7 589.1 251.9 680.9 258.6 716.9 261.9 734 270.7 761.8 267.5 776.5A194.7 194.7 0 0 0 264.2 839.2C265.7 848.6 270.7 892 263.6 907.9A454.8 454.8 0 0 0 253.1 958.9C235.3 999.1 245.3 997.1 245.3 997.1 250.8 1003.2 260.3 997.6 260.3 997.6A9.9 9.9 0 0 0 272.4 996.6 12 12 0 0 0 285.7 996.1 14.6 14.6 0 0 0 300.6 993C305.1 995 306.1 992.5 306.1 992.5 319.5 991.7 298.7 953.5 298.7 953.5A94.6 94.6 0 0 1 303.6 900C336.1 813.7 337.7 790.8 324.7 758.3 321.1 748.9 320.2 745.2 321.8 741.1 325.7 731.7 322.9 693.9 327.6 678.8 336.8 649.9 345.8 576.4 350.5 542.1 356.8 495.9 328.1 434 328.1 434 321.9 408.8 331.1 319 331.1 319 343.9 336.9 343.4 368.6 343.4 368.6 341.4 401.9 373.3 452.7 373.3 452.7A128.3 128.3 0 0 1 394.5 495.1C394.5 501.1 393 515.8 393 515.8L393.6 528.5A163.7 163.7 0 0 1 395.6 548.4C393.2 581.6 399.1 575.4 399.1 575.4 404.1 575.4 409.5 548.6 409.5 548.6 409.5 555.5 407.6 576.1 411.8 583.9 416.8 593.2 420.4 582.3 420.5 580.1 421.8 537.8 424.6 548.9 424.6 548.9 427.4 583.2 430.8 591 436.8 588.3 441.4 586.3 437.2 547.1 437.2 547.1 445.1 570.4 451.1 574.1 451.1 574.1 464.1 582.3 456.1 559.7 454.3 555.2A118.2 118.2 0 0 1 444.3 523C456.4 544.5 465.4 543.7 465.4 543.7 477.2 540.3 455.1 510 442.3 495.4A118.3 118.3 0 0 1 424.7 472.2 253.7 253.7 0 0 1 417.7 430.2C416.5 392.3 406.1 375.9 406.1 375.9 388.2 350.3 384.9 302.5 384.9 302.5L384.1 221.9C377.8 166.9 332.7 166.5 332.7 166.5 287.1 160.5 280.7 147.3 280.7 147.3 271 134.8 276.6 110.8 276.6 110.8A41.5 41.5 0 0 0 287.7 89.4C301 80.3 300.4 66.9 294.2 67 289.3 67.1 290.4 63.4 290.4 63.4 298.7 3.1 239 0 239 0H229.9S170.1 3.1 178.4 63.4C178.4 63.4 179.6 67.1 174.6 67 168.4 66.8 167.9 80.3 181.1 89.4A41.4 41.4 0 0 0 192.3 110.8S197.8 134.8 188.1 147.2C188.1 147.2 181.8 160.5 136.1 166.6 136.1 166.6 90.9 167 84.7 222L83.8 302.6S80.5 350.3 62.6 375.9C62.6 375.9 52.3 392.4 51.1 430.2A255.3 255.3 0 0 1 44 472.3 117.1 117.1 0 0 1 26.5 495.5C13.5 510-8.4 540.2 3.3 543.7 3.3 543.7 12.5 544.5 24.4 523.1A117 117 0 0 1 14.6 555.2C12.7 559.6 4.6 582.3 17.7 574.2 17.7 574.2 23.7 570.4 31.5 547.1 31.5 547.1 27.3 586.4 32 588.4 38.1 591 41.5 583.3 44.2 548.9 44.2 548.9 47.1 537.8 48.4 580.2 48.4 582.4 52 593.3 57 584 61.2 576.2 59.3 555.5 59.3 548.6 59.3 548.6 64.7 575.4 69.7 575.4 69.7 575.4 75.7 581.7 73.2 548.4A150.7 150.7 0 0 1 75.2 528.6L75.8 515.8S74.3 501.2 74.3 495.1A128.1 128.1 0 0 1 95.5 452.7S127.5 401.9 125.4 368.7C125.4 368.7 125 337 137.8 319 137.8 319 146.9 408.8 140.7 434 140.7 434 112 496 118.3 542.2 123 576.5 132 649.9 141.2 678.9 145.9 693.9 143.1 731.7 146.9 741.2 148.7 745.3 147.8 749.1 144 758.4 131.2 790.8 132.9 813.7 165.3 900A93.8 93.8 0 0 1 170.2 953.5S149.5 991.7 162.7 992.5C162.7 992.5 163.8 995 168.3 993A14.6 14.6 0 0 0 183.2 996.1 12 12 0 0 0 196.5 996.6 9.9 9.9 0 0 0 208.6 997.6S218 1003.3 223.6 997.1C223.6 997.1 233.5 999.1 215.8 958.9A452.6 452.6 0 0 0 205.3 907.9C198.2 892 203.2 848.5 204.7 839.2A198.1 198.1 0 0 0 201.4 776.5C198.1 761.8 207 734 210.2 716.9 217 680.9 230.2 589.1 228.5 571.7L233.9 573.4A11.9 11.9 0 0 0 240.4 571.7Z", + "width": 469 + }, + "search": [ + "ovrweight-bmi" + ] + }, + { + "uid": "2d2f5e7a3046c40afa3ccb117d321149", + "css": "order-prescription", + "code": 59456, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M596.3 192.4A28.8 28.8 0 0 0 588.5 172.7L434.6 9.1A28.9 28.9 0 0 0 413.6 0H404V202H596.3ZM596.3 192.4M567.2 567.5A164.8 164.8 0 0 1 596.3 570.1V259.7H375.1A28.9 28.9 0 0 1 346.3 230.8V0H28.9A28.9 28.9 0 0 0 0 28.9V769.5A28.9 28.9 0 0 0 28.9 798.3H271.5A163.6 163.6 0 0 1 288.4 778.6L451.6 615.5A162.4 162.4 0 0 1 567.2 567.5ZM240.4 336.6H269.3V307.8A28.9 28.9 0 1 1 327 307.8V336.6H355.9A28.9 28.9 0 1 1 355.9 394.3H327V423.2A28.9 28.9 0 0 1 269.3 423.2V394.3H240.4A28.9 28.9 0 0 1 240.4 336.6ZM144.3 509.8H452A28.9 28.9 0 1 1 452 567.5H144.3A28.9 28.9 0 0 1 144.3 509.8ZM336.6 682.9H144.3A28.9 28.9 0 1 1 144.3 625.2H336.6A28.9 28.9 0 1 1 336.6 682.9ZM336.6 682.9M329.1 819.4A105.8 105.8 0 1 0 478.8 969L540 907.8 390.4 758.1ZM329.1 819.4M642 656.2A105.8 105.8 0 0 0 492.4 656.2L431.2 717.4 580.8 867 642 805.8A105.9 105.9 0 0 0 642 656.2ZM642 656.2", + "width": 673 + }, + "search": [ + "order-prescription" + ] + }, + { + "uid": "6e8d360bfcc0238a6164f21160b4203f", + "css": "order-procedures", + "code": 59457, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M1040.4 721.4L997.6 778.4 1054.8 821.3H926A142.7 142.7 0 0 0 788.2 714.3H430.9A142.7 142.7 0 0 0 293.1 821.3H214.3A142.8 142.8 0 0 1 214.3 535.6H293.1A142.7 142.7 0 0 0 430.9 642.6H788.1A142.7 142.7 0 0 0 925.9 535.6H1004.8A214.3 214.3 0 1 0 1004.8 107H926A142.7 142.7 0 0 0 788.1 0H430.9A142.7 142.7 0 0 0 293.1 107H261.9L128.6 7.2 85.7 64.3 142.8 107H0V178.6H142.8L85.7 221.4 128.6 278.6 261.9 178.6H293.2A142.7 142.7 0 0 0 431 285.5H788.1A142.7 142.7 0 0 0 926 178.6H1004.9A142.8 142.8 0 1 1 1004.9 464.3H926A142.7 142.7 0 0 0 788.2 357.3H430.9A142.7 142.7 0 0 0 293.1 464.3H214.3A214.3 214.3 0 1 0 214.3 892.8H293.1A142.7 142.7 0 0 0 430.9 999.8H788.1A142.7 142.7 0 0 0 926 892.8H1054.9L997.7 935.7 1040.4 992.8 1218.9 857.2ZM1040.4 721.4", + "width": 1219 + }, + "search": [ + "order-procedures" + ] + }, + { + "uid": "d6fe7b7abad6762bf429e2025e6db5d5", + "css": "ovrweight-bmi-r", + "code": 59458, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M240.4 571.7C238.7 589.1 251.9 680.9 258.6 716.9 261.9 734 270.7 761.8 267.5 776.5A194.7 194.7 0 0 0 264.2 839.2C265.7 848.6 270.7 892 263.6 907.9A454.8 454.8 0 0 0 253.1 958.9C235.3 999.1 245.3 997.1 245.3 997.1 250.8 1003.2 260.3 997.6 260.3 997.6A9.9 9.9 0 0 0 272.4 996.6 12 12 0 0 0 285.7 996.1 14.6 14.6 0 0 0 300.6 993C305.1 995 306.1 992.5 306.1 992.5 319.5 991.7 298.7 953.5 298.7 953.5A94.6 94.6 0 0 1 303.6 900C336.1 813.7 337.7 790.8 324.7 758.3 321.1 748.9 320.2 745.2 321.8 741.1 325.7 731.7 322.9 693.9 327.6 678.8 336.8 649.9 345.8 576.4 350.5 542.1 356.8 495.9 328.1 434 328.1 434 321.9 408.8 331.1 319 331.1 319 343.9 336.9 343.4 368.6 343.4 368.6 341.4 401.9 373.3 452.7 373.3 452.7A128.3 128.3 0 0 1 394.5 495.1C394.5 501.1 393 515.8 393 515.8L393.6 528.5A163.7 163.7 0 0 1 395.6 548.4C393.2 581.6 399.1 575.4 399.1 575.4 404.1 575.4 409.5 548.6 409.5 548.6 409.5 555.5 407.6 576.1 411.8 583.9 416.8 593.2 420.4 582.3 420.5 580.1 421.8 537.8 424.6 548.9 424.6 548.9 427.4 583.2 430.8 591 436.8 588.3 441.4 586.3 437.2 547.1 437.2 547.1 445.1 570.4 451.1 574.1 451.1 574.1 464.1 582.3 456.1 559.7 454.3 555.2A118.2 118.2 0 0 1 444.3 523C456.4 544.5 465.4 543.7 465.4 543.7 477.2 540.3 455.1 510 442.3 495.4A118.3 118.3 0 0 1 424.7 472.2 253.7 253.7 0 0 1 417.7 430.2C416.5 392.3 406.1 375.9 406.1 375.9 388.2 350.3 384.9 302.5 384.9 302.5L384.1 221.9C377.8 166.9 332.7 166.5 332.7 166.5 287.1 160.5 280.7 147.3 280.7 147.3 271 134.8 276.6 110.8 276.6 110.8A41.5 41.5 0 0 0 287.7 89.4C301 80.3 300.4 66.9 294.2 67 289.3 67.1 290.4 63.4 290.4 63.4 298.7 3.1 239 0 239 0H229.9S170.1 3.1 178.4 63.4C178.4 63.4 179.6 67.1 174.6 67 168.4 66.8 167.9 80.3 181.1 89.4A41.4 41.4 0 0 0 192.3 110.8S197.8 134.8 188.1 147.2C188.1 147.2 181.8 160.5 136.1 166.6 136.1 166.6 90.9 167 84.7 222L83.8 302.6S80.5 350.3 62.6 375.9C62.6 375.9 52.3 392.4 51.1 430.2A255.3 255.3 0 0 1 44 472.3 117.1 117.1 0 0 1 26.5 495.5C13.5 510-8.4 540.2 3.3 543.7 3.3 543.7 12.5 544.5 24.4 523.1A117 117 0 0 1 14.6 555.2C12.7 559.6 4.6 582.3 17.7 574.2 17.7 574.2 23.7 570.4 31.5 547.1 31.5 547.1 27.3 586.4 32 588.4 38.1 591 41.5 583.3 44.2 548.9 44.2 548.9 47.1 537.8 48.4 580.2 48.4 582.4 52 593.3 57 584 61.2 576.2 59.3 555.5 59.3 548.6 59.3 548.6 64.7 575.4 69.7 575.4 69.7 575.4 75.7 581.7 73.2 548.4A150.7 150.7 0 0 1 75.2 528.6L75.8 515.8S74.3 501.2 74.3 495.1A128.1 128.1 0 0 1 95.5 452.7S127.5 401.9 125.4 368.7C125.4 368.7 125 337 137.8 319 137.8 319 146.9 408.8 140.7 434 140.7 434 112 496 118.3 542.2 123 576.5 132 649.9 141.2 678.9 145.9 693.9 143.1 731.7 146.9 741.2 148.7 745.3 147.8 749.1 144 758.4 131.2 790.8 132.9 813.7 165.3 900A93.8 93.8 0 0 1 170.2 953.5S149.5 991.7 162.7 992.5C162.7 992.5 163.8 995 168.3 993A14.6 14.6 0 0 0 183.2 996.1 12 12 0 0 0 196.5 996.6 9.9 9.9 0 0 0 208.6 997.6S218 1003.3 223.6 997.1C223.6 997.1 233.5 999.1 215.8 958.9A452.6 452.6 0 0 0 205.3 907.9C198.2 892 203.2 848.5 204.7 839.2A198.1 198.1 0 0 0 201.4 776.5C198.1 761.8 207 734 210.2 716.9 217 680.9 230.2 589.1 228.5 571.7L233.9 573.4A11.9 11.9 0 0 0 240.4 571.7Z", + "width": 469 + }, + "search": [ + "ovrweight-bmi-r" + ] + }, + { + "uid": "d3a35963df4d21d3ec3cf69077ac511e", + "css": "respiration-rate", + "code": 59459, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M989.3 410.2C907.2 230.7 805.1 123.6 716.1 123.6A91.6 91.6 0 0 0 667.3 137C595.3 181.3 592 319.6 591.9 334.9 591.9 339.7 590.8 377.9 590 431.1L560.9 420.4V20.1A20.3 20.3 0 0 0 540.6-0.2H499.9A20.3 20.3 0 0 0 479.6 20.1V420.4L450.5 431.1C449.7 378 448.7 339.9 448.6 335.3 448.6 319.6 445.2 181.3 373.2 137A91.6 91.6 0 0 0 324.4 123.6C235.5 123.6 133.3 230.8 51.2 410.3-57.1 647.8 39 972 43.2 985.6A20.1 20.1 0 0 0 67.1 999.3 1776.9 1776.9 0 0 0 243.4 946.2C369.2 900.2 434.5 855.1 442.6 808.2A2836.5 2836.5 0 0 0 451.6 473.7L506.5 453.4H534.7L589.6 473.7A2835.8 2835.8 0 0 0 598.6 808.2C606.7 855.1 671.8 900.2 797.8 946.2A1778.4 1778.4 0 0 0 974.1 999.5 20.1 20.1 0 0 0 998 985.7C1001.8 972 1097.9 647.8 989.3 410.2ZM393.1 500.5L249.7 574.6V634.8L260.7 668.2 288.1 694.8A20.3 20.3 0 0 1 260.1 723.7L230.5 695.2 197 732.2A20.3 20.3 0 0 1 167.2 705.1L209.4 658.4V595.3L130.2 636.3A20.3 20.3 0 1 1 111.7 600.5L129.3 591.4 97.8 566.3A20.3 20.3 0 0 1 122.9 534.8L168.5 571.2 278.8 514.3 184.4 442.5A20.3 20.3 0 0 1 208.8 410.4L239.3 433.5 241.9 410.2A20.3 20.3 0 0 1 281.9 414.6L276.5 461.8 318.5 493.7 374.5 464.8A20.3 20.3 0 1 1 393 500.5ZM942.9 566.3L911.4 591.4 929 600.5A20.3 20.3 0 1 1 910.5 636.3L831.4 595.3V658.2L873.7 705A20.3 20.3 0 0 1 843.8 732.1L810.3 695.1 780.8 723.6A20.3 20.3 0 0 1 752.7 694.7L780.1 668.1 791.1 634.7V574.5L647.7 500.4A20.3 20.3 0 1 1 666.2 464.6L722.2 493.6 764.2 461.7 759 414.5A20.3 20.3 0 1 1 799 410L801.6 433.4 832.1 410.2A20.3 20.3 0 0 1 856.5 442.3L761.9 514 872.2 570.9 917.9 534.5A20.3 20.3 0 0 1 943 566Z", + "width": 1041 + }, + "search": [ + "respiration-rate" + ] + }, + { + "uid": "230620f957b8bbd4c6ea89c460c5c676", + "css": "patient-sick-leave", + "code": 59460, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M664.4 0H92.6A92.7 92.7 0 0 0 0 92.6V907.4A92.7 92.7 0 0 0 92.6 1000H664.3A92.7 92.7 0 0 0 756.9 907.4V92.6A92.7 92.7 0 0 0 664.4 0ZM118.7 167.8L176.4 68.5A20.8 20.8 0 1 1 212.4 89.3L173 157.2H587.9L556.4 87.4A20.8 20.8 0 1 1 594.4 70.1L639.1 169.5A20.8 20.8 0 0 1 620.1 198.9H136.8A20.8 20.8 0 0 1 118.7 167.8ZM644.6 608.6H492.4A20.8 20.8 0 0 1 472.7 594.7L458.3 554.1 423.7 813.6A20.8 20.8 0 0 1 403.7 831.6H403.1A20.8 20.8 0 0 1 382.7 814.7L312.5 452.1 266.5 606.1A20.8 20.8 0 0 1 246.6 621H112.3A20.8 20.8 0 1 1 112.3 579.5H231.1L296.8 358.9A20.8 20.8 0 0 1 337.2 360.9L399.1 681.8 428.4 463.2A20.8 20.8 0 0 1 446.8 445.3 21.3 21.3 0 0 1 468.7 459.1L507 567.1H644.5A20.8 20.8 0 1 1 644.5 608.6Z", + "width": 757 + }, + "search": [ + "patient-sick-leave" + ] + }, + { + "uid": "9990a08bacced53295a9059a091f3dca", + "css": "progress-notes-1", + "code": 59461, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M400 266.7V33.4A33.4 33.4 0 0 1 466.6 33.4V266.7ZM300 933.3A99.3 99.3 0 0 1 229.3 904.1 1011.6 1011.6 0 0 1 0 550.5V966.6A33.4 33.4 0 0 0 33.4 1000H833.3A33.4 33.4 0 0 0 866.7 966.6V933.3ZM1128 809.7A885.7 885.7 0 0 1 866.6 189.5V166.6A33.4 33.4 0 0 0 833.3 133.3H533.3V300A33.4 33.4 0 0 1 500 333.3H366.6A33.4 33.4 0 0 1 333.3 300V133.3H33.4A33.4 33.4 0 0 0 0 166.7V189.6A943.4 943.4 0 0 0 276.4 856.9 33.4 33.4 0 0 0 300 866.7H1104.5A33.4 33.4 0 0 0 1128.1 809.8ZM433.3 400H700A33.4 33.4 0 0 1 700 466.6H433.3A33.4 33.4 0 0 1 433.3 400ZM700 733.3H366.7A33.4 33.4 0 0 1 366.7 666.6H700A33.4 33.4 0 0 1 700 733.3ZM766.7 600H300A33.4 33.4 0 1 1 300 533.3H766.7A33.4 33.4 0 1 1 766.7 600Z", + "width": 1138 + }, + "search": [ + "progress-notes" + ] + }, + { + "uid": "626836408cae9059f8c1866b3a23b23f", + "css": "temperature", + "code": 59462, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M394.7 0A131.7 131.7 0 0 1 526.3 131.8V686.9A187 187 0 0 1 579 815.8 184.2 184.2 0 1 1 263.2 686.9V131.6A131.4 131.4 0 0 1 394.7 0ZM394.7 315.8A26.5 26.5 0 0 0 368.4 342.1V741.3A79 79 0 1 0 473.7 815.8 79.9 79.9 0 0 0 421.1 741.3V342.1A26.7 26.7 0 0 0 394.7 315.8ZM184.2 631.6A26.3 26.3 0 1 1 184.2 684.3H52.6A26.3 26.3 0 1 1 52.6 631.6ZM710.6 289.6A105.3 105.3 0 0 1 815.7 394.7 25.8 25.8 0 0 1 789.5 422.3 26.5 26.5 0 0 1 763.1 394.9 52.6 52.6 0 0 0 657.9 394.9V553A52.6 52.6 0 1 0 763.2 553 26.3 26.3 0 0 1 815.8 553 105.3 105.3 0 0 1 605.3 553V394.7A105.3 105.3 0 0 1 710.6 289.6ZM184.2 552.6A26.3 26.3 0 1 1 184.2 605.3H157.9A26.3 26.3 0 0 1 157.9 552.6ZM184.2 447.4A26.3 26.3 0 0 1 210.6 473.7 26.7 26.7 0 0 1 184.2 500H105.3A26.3 26.3 0 0 1 78.9 473.7 26 26 0 0 1 105.3 447.4ZM921.1 289.5A52.6 52.6 0 1 1 868.5 342.1 52.6 52.6 0 0 1 921.1 289.6ZM184.2 342.1A26.3 26.3 0 1 1 184.2 394.8H78.9A26.3 26.3 0 0 1 78.9 342.1ZM184.2 236.9A26.3 26.3 0 0 1 184.2 289.5H131.6A26.3 26.3 0 0 1 131.6 236.9ZM184.2 131.6A26.3 26.3 0 1 1 184.2 184.3H26.3A26.3 26.3 0 1 1 26.3 131.6Z", + "width": 974 + }, + "search": [ + "temperature" + ] + }, + { + "uid": "66b89e853c3e2b07f694e387fd756780", + "css": "underweight-bmi", + "code": 59463, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M182.4 571.7C181.1 589.1 191.1 680.9 196.2 716.9 198.7 734 205.4 761.8 203 776.5A255.5 255.5 0 0 0 200.4 839.2C201.6 848.6 205.4 892 200 907.9 197.2 916.3 192 958.9 192 958.9 178.6 999.1 186.1 997.1 186.1 997.1 190.3 1003.2 197.5 997.6 197.5 997.6A6.3 6.3 0 0 0 206.7 996.6C211.4 1001.2 216.8 996.1 216.8 996.1 222.7 999.7 228.1 993 228.1 993 231.5 995 232.3 992.5 232.3 992.5 242.4 991.7 226.7 953.5 226.7 953.5A122.1 122.1 0 0 1 230.4 900C255 813.7 256.3 790.8 246.5 758.3 243.7 748.9 243 745.2 244.3 741.1 247.2 731.7 245.1 693.9 248.7 678.8 255.6 649.9 262.4 576.4 266 542.1 270.7 495.9 249 434 249 434 244.2 408.8 251.2 319 251.2 319A126.2 126.2 0 0 1 260.6 368.6C259 401.9 283.2 452.7 283.2 452.7A149.5 149.5 0 0 1 299.3 495.1C299.3 501.1 298.2 515.8 298.2 515.8L298.6 528.5C298.8 531.8 300.4 543 300.1 548.4 298.3 581.6 302.8 575.4 302.8 575.4 306.5 575.4 310.7 548.6 310.7 548.6A135.2 135.2 0 0 0 312.4 583.9C316.2 593.2 318.9 582.3 319 580.1 320 537.8 322.1 548.9 322.1 548.9 324.2 583.2 326.8 591 331.4 588.3 334.9 586.3 331.7 547.1 331.7 547.1 337.7 570.4 342.2 574.1 342.2 574.1 352.1 582.3 346 559.7 344.6 555.2A148.3 148.3 0 0 1 337.1 523C346.2 544.5 353.1 543.7 353.1 543.7 362 540.3 345.3 510 335.6 495.4A121.6 121.6 0 0 1 322.3 472.2 328.7 328.7 0 0 1 317 430.2 145.7 145.7 0 0 0 308.1 375.9C294.6 350.3 292.1 302.5 292.1 302.5L291.5 221.9C286.7 166.9 252.5 166.5 252.5 166.5 217.8 160.4 213 147.2 213 147.2 205.7 134.7 209.9 110.8 209.9 110.8A47.8 47.8 0 0 0 218.3 89.4C228.4 80.2 227.9 66.8 223.3 66.9 219.5 67.1 220.4 63.4 220.4 63.4 226.6 3.1 181.3 0 181.3 0H174.4S129 3.1 135.4 63.4C135.4 63.4 136.2 67.1 132.5 67 127.8 66.8 127.4 80.3 137.4 89.4A47.7 47.7 0 0 0 145.9 110.8S150.1 134.8 142.8 147.2C142.8 147.2 138 160.5 103.3 166.6 103.3 166.6 69 167 64.3 222L63.7 302.6S61.1 350.3 47.5 375.9A146.2 146.2 0 0 0 38.8 430.2 330.8 330.8 0 0 1 33.4 472.3 120.2 120.2 0 0 1 20.1 495.5C10.2 510-6.3 540.2 2.5 543.7 2.5 543.7 9.4 544.5 18.5 523.1A146.9 146.9 0 0 1 11.1 555.2C9.6 559.6 3.5 582.3 13.4 574.2 13.4 574.2 18 570.4 23.9 547.1 23.9 547.1 20.7 586.4 24.3 588.4 28.9 591 31.5 583.3 33.6 548.9 33.6 548.9 35.7 537.8 36.7 580.2 36.7 582.4 39.4 593.3 43.2 584A133.3 133.3 0 0 0 45 548.6S49.1 575.4 52.9 575.4C52.9 575.4 57.4 581.7 55.6 548.4A197.2 197.2 0 0 1 57.1 528.6L57.5 515.8S56.4 501.2 56.4 495.1A149.3 149.3 0 0 1 72.5 452.7S96.7 401.8 95.2 368.6A126.5 126.5 0 0 1 104.6 319S111.5 408.8 106.8 434C106.8 434 85 495.9 89.8 542.1 93.4 576.5 100.2 649.9 107.2 678.8 110.8 693.8 108.6 731.7 111.5 741.1 112.9 745.2 112.2 749 109.4 758.3 99.6 790.8 100.8 813.7 125.4 900A121 121 0 0 1 129.2 953.5S113.5 991.8 123.5 992.5C123.5 992.5 124.3 995.1 127.7 993.1 127.7 993.1 133.2 999.7 139.1 996.1 139.1 996.1 144.5 1001.3 149.2 996.7A6.2 6.2 0 0 0 158.3 997.6S165.5 1003.3 169.7 997.2C169.7 997.2 177.2 999.2 163.8 959 163.8 959 158.6 916.3 155.8 908 150.4 892.1 154.2 848.6 155.4 839.3A260 260 0 0 0 152.8 776.6C150.4 761.8 157.1 734 159.6 717 164.7 681 174.7 589.1 173.4 571.8L177.5 573.5A7.6 7.6 0 0 0 182.4 571.7Z", + "width": 356 + }, + "search": [ + "underweight-bmi" + ] + }, + { + "uid": "cbeed016e1b47a377550d4184cfaf42b", + "css": "radiology-1", + "code": 59464, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M1218.7 937.5H906.2V812.6C1109.3 812.6 1107.4 817.2 1119.6 798.6L1174 718.9A93.7 93.7 0 0 0 1185.6 537.8 187.5 187.5 0 0 0 1000 375H870.2A437.5 437.5 0 0 0 437.4 0C10.4 0-162.9 552.5 187.4 795.9V937.5H93.7A31.4 31.4 0 1 0 93.7 1000H1218.7A31.4 31.4 0 1 0 1218.7 937.5ZM159 476.2A281.3 281.3 0 0 1 679.3 294.1 273.1 273.1 0 0 1 710.7 375C637.5 375 655.7 403.1 648.2 376.9 653.8 393.8 651.3 384.7 635.4 398.7A125 125 0 0 0 423.9 531.3 93.8 93.8 0 0 0 428.5 718.8 281.3 281.3 0 0 1 159.2 476.3ZM1156.2 593.7A31.4 31.4 0 0 1 1177.7 647.1C1164.9 660.6 1218.7 656.2 437.4 656.2A31.4 31.4 0 0 1 415.9 602.8C428.4 589.4 377.4 593.8 1156.2 593.8ZM579.3 750L558.4 718.6H724A99.1 99.1 0 0 0 718.7 750ZM468.7 468.7A62.5 62.5 0 1 1 531.2 531.2 62.5 62.5 0 0 1 468.7 468.7ZM687.4 812.6H718.8V937.5H687.4ZM1076.8 750.1H906.2A93.7 93.7 0 0 0 900.9 718.7H1097.8ZM1120.8 531.3C667.7 531.3 693.7 534.4 677.7 523.8A46.6 46.6 0 0 1 669.9 451.3C687.4 431.6 689 437.6 999.9 437.6A125 125 0 0 1 1120.9 531.3ZM406.2 843.7H468.7V937.5H406.2Z", + "width": 1250 + }, + "search": [ + "radiology" + ] + }, + { + "uid": "0ad7e861726e4de71ae412435ca73f8a", + "css": "refer-patient", + "code": 59471, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M264.4 666.7L351.6 775.7 267.1 860.3 228.5 667.7C235.7 667.1 242.9 666.7 250.1 666.7ZM442.2 666.7L388.9 733.3 335.6 666.6ZM513.4 666.7H527.7C534.9 666.7 542.1 667.1 549.3 667.7L510.8 860.3 426.2 775.7ZM638.9 444.4H637.2A248 248 0 0 0 638.9 416.7V333.3A55.6 55.6 0 0 1 638.9 444.4ZM138.9 166.7A166.8 166.8 0 0 1 305.5 0H472.2A166.8 166.8 0 0 1 638.9 166.7V277.8H527.8A55.6 55.6 0 0 1 472.2 222.2V111.1H416.7V138.9A139 139 0 0 1 277.8 277.8H138.9ZM138.9 444.4A55.6 55.6 0 1 1 138.9 333.3V416.7A248 248 0 0 0 140.5 444.4ZM194.5 416.7V333.3H277.8A194.1 194.1 0 0 0 425.3 265.1 111.4 111.4 0 0 0 527.8 333.3H583.3V416.7A194.5 194.5 0 0 1 194.5 416.7ZM777.8 1000H0V916.6A250.4 250.4 0 0 1 174 678.5L222.9 922.1A27.8 27.8 0 0 0 242 943.2 28.4 28.4 0 0 0 250.1 944.4 27.8 27.8 0 0 0 269.7 936.3L389 817 508.2 936.3A27.8 27.8 0 0 0 554.9 922.1L603.9 678.5A250.5 250.5 0 0 1 777.8 916.6ZM943.7 123A22 22 0 0 1 965.7 101H1000.6L899.6 0 798.6 101H833.5A22 22 0 0 1 855.6 123 264.2 264.2 0 0 1 738 342.7 220.4 220.4 0 0 0 943.7 123Z", + "width": 1001 + }, + "search": [ + "refer-patient" + ] + }, + { + "uid": "ca99a2d770f0d7e6ba7a90eb792ebd4d", + "css": "underweight-bmi-r", + "code": 59472, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M182.4 571.7C181.1 589.1 191.1 680.9 196.2 716.9 198.7 734 205.4 761.8 203 776.5A255.5 255.5 0 0 0 200.4 839.2C201.6 848.6 205.4 892 200 907.9 197.2 916.3 192 958.9 192 958.9 178.6 999.1 186.1 997.1 186.1 997.1 190.3 1003.2 197.5 997.6 197.5 997.6A6.3 6.3 0 0 0 206.7 996.6C211.4 1001.2 216.8 996.1 216.8 996.1 222.7 999.7 228.1 993 228.1 993 231.5 995 232.3 992.5 232.3 992.5 242.4 991.7 226.7 953.5 226.7 953.5A122.1 122.1 0 0 1 230.4 900C255 813.7 256.3 790.8 246.5 758.3 243.7 748.9 243 745.2 244.3 741.1 247.2 731.7 245.1 693.9 248.7 678.8 255.6 649.9 262.4 576.4 266 542.1 270.7 495.9 249 434 249 434 244.2 408.8 251.2 319 251.2 319A126.2 126.2 0 0 1 260.6 368.6C259 401.9 283.2 452.7 283.2 452.7A149.5 149.5 0 0 1 299.3 495.1C299.3 501.1 298.2 515.8 298.2 515.8L298.6 528.5C298.8 531.8 300.4 543 300.1 548.4 298.3 581.6 302.8 575.4 302.8 575.4 306.5 575.4 310.7 548.6 310.7 548.6A135.2 135.2 0 0 0 312.4 583.9C316.2 593.2 318.9 582.3 319 580.1 320 537.8 322.1 548.9 322.1 548.9 324.2 583.2 326.8 591 331.4 588.3 334.9 586.3 331.7 547.1 331.7 547.1 337.7 570.4 342.2 574.1 342.2 574.1 352.1 582.3 346 559.7 344.6 555.2A148.3 148.3 0 0 1 337.1 523C346.2 544.5 353.1 543.7 353.1 543.7 362 540.3 345.3 510 335.6 495.4A121.6 121.6 0 0 1 322.3 472.2 328.7 328.7 0 0 1 317 430.2 145.7 145.7 0 0 0 308.1 375.9C294.6 350.3 292.1 302.5 292.1 302.5L291.5 221.9C286.7 166.9 252.5 166.5 252.5 166.5 217.8 160.4 213 147.2 213 147.2 205.7 134.7 209.9 110.8 209.9 110.8A47.8 47.8 0 0 0 218.3 89.4C228.4 80.2 227.9 66.8 223.3 66.9 219.5 67.1 220.4 63.4 220.4 63.4 226.6 3.1 181.3 0 181.3 0H174.4S129 3.1 135.4 63.4C135.4 63.4 136.2 67.1 132.5 67 127.8 66.8 127.4 80.3 137.4 89.4A47.7 47.7 0 0 0 145.9 110.8S150.1 134.8 142.8 147.2C142.8 147.2 138 160.5 103.3 166.6 103.3 166.6 69 167 64.3 222L63.7 302.6S61.1 350.3 47.5 375.9A146.2 146.2 0 0 0 38.8 430.2 330.8 330.8 0 0 1 33.4 472.3 120.2 120.2 0 0 1 20.1 495.5C10.2 510-6.3 540.2 2.5 543.7 2.5 543.7 9.4 544.5 18.5 523.1A146.9 146.9 0 0 1 11.1 555.2C9.6 559.6 3.5 582.3 13.4 574.2 13.4 574.2 18 570.4 23.9 547.1 23.9 547.1 20.7 586.4 24.3 588.4 28.9 591 31.5 583.3 33.6 548.9 33.6 548.9 35.7 537.8 36.7 580.2 36.7 582.4 39.4 593.3 43.2 584A133.3 133.3 0 0 0 45 548.6S49.1 575.4 52.9 575.4C52.9 575.4 57.4 581.7 55.6 548.4A197.2 197.2 0 0 1 57.1 528.6L57.5 515.8S56.4 501.2 56.4 495.1A149.3 149.3 0 0 1 72.5 452.7S96.7 401.8 95.2 368.6A126.5 126.5 0 0 1 104.6 319S111.5 408.8 106.8 434C106.8 434 85 495.9 89.8 542.1 93.4 576.5 100.2 649.9 107.2 678.8 110.8 693.8 108.6 731.7 111.5 741.1 112.9 745.2 112.2 749 109.4 758.3 99.6 790.8 100.8 813.7 125.4 900A121 121 0 0 1 129.2 953.5S113.5 991.8 123.5 992.5C123.5 992.5 124.3 995.1 127.7 993.1 127.7 993.1 133.2 999.7 139.1 996.1 139.1 996.1 144.5 1001.3 149.2 996.7A6.2 6.2 0 0 0 158.3 997.6S165.5 1003.3 169.7 997.2C169.7 997.2 177.2 999.2 163.8 959 163.8 959 158.6 916.3 155.8 908 150.4 892.1 154.2 848.6 155.4 839.3A260 260 0 0 0 152.8 776.6C150.4 761.8 157.1 734 159.6 717 164.7 681 174.7 589.1 173.4 571.8L177.5 573.5A7.6 7.6 0 0 0 182.4 571.7Z", + "width": 356 + }, + "search": [ + "underweight-bmi-r" + ] + }, + { + "uid": "0fd731d3861d150403acb49569e7c904", + "css": "weight", + "code": 59473, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M909.1 0H90.9A91 91 0 0 0 0 90.9V909.1A91 91 0 0 0 90.9 1000H909.1A91 91 0 0 0 1000 909.1V90.9A91 91 0 0 0 909.1 0ZM789.3 288.3L660.8 416.9A22.7 22.7 0 0 1 628.6 416.9 184.8 184.8 0 0 0 455.8 371.1L407 263.5A22.7 22.7 0 1 0 365.7 282.3L413.4 387.2A169.3 169.3 0 0 0 371.6 416.9 22.7 22.7 0 0 1 339.5 416.9L210.7 288.3A22.7 22.7 0 0 1 210.7 256.2 409 409 0 0 1 789.3 256.2 22.7 22.7 0 0 1 789.3 288.3Z", + "width": 1000 + }, + "search": [ + "weight" + ] + }, + { + "uid": "ac386cc9c3278233c6dacad80c722da5", + "css": "blood-pressure", + "code": 59474, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M672.7 709.1A145.5 145.5 0 1 0 818.2 854.6 145.5 145.5 0 0 0 672.7 709.1ZM724.2 828.9L685.6 867.5A18.2 18.2 0 1 1 659.8 841.7L698.4 803.1A18.2 18.2 0 0 1 724.2 828.9ZM872.7 236.4C770.7 236.4 690.9 292.4 690.9 363.7S770.7 491 872.7 491 1054.5 435 1054.5 363.7 974.7 236.4 872.7 236.4ZM972.7 381.8A18.2 18.2 0 0 1 954.6 363.7C954.6 350 914.9 327.3 872.7 327.3A18.2 18.2 0 1 1 872.7 291C921.1 291 990.9 316.8 990.9 363.7A18.2 18.2 0 0 1 972.7 381.8ZM655.8 345.5H563.7V18.2A18.2 18.2 0 0 0 545.4 0H218.2A18.2 18.2 0 0 0 200 18.2V109.1H18.2A18.2 18.2 0 0 0 0 127.3V781.8A18.2 18.2 0 0 0 18.2 800H200V854.5A18.2 18.2 0 0 0 218.2 872.7H491.8C491.8 866.7 490.9 860.7 490.9 854.5A120.6 120.6 0 0 1 491.8 836.4H236.4V800H418.2A18.2 18.2 0 0 0 436.4 781.8V127.3A18.2 18.2 0 0 0 418.2 109.1H236.4V36.4H527.3V363.6A18.2 18.2 0 0 0 545.5 381.8H655.9A130.5 130.5 0 0 1 655.8 345.5ZM272.7 272.7H345.5A18.2 18.2 0 1 1 345.5 309.1H272.7A18.2 18.2 0 1 1 272.7 272.7ZM272.7 600H345.5A18.2 18.2 0 1 1 345.5 636.4H272.7A18.2 18.2 0 1 1 272.7 600Z", + "width": 1055 + }, + "search": [ + "blood-pressure" + ] + }, + { + "uid": "3c9cc9a4258d3d419d7ad9e579cd42c3", + "css": "vital-signs", + "code": 59475, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M0 532.1V608.1H205.7A689.9 689.9 0 0 1 145.8 532.1ZM1151 532.1A690.1 690.1 0 0 1 1091 608.1H1296.7V532.1ZM420.4 222L545.9 598.4 590 532.1H699L802.2 284.8 913.5 532.3H1151A366.1 366.1 0 0 0 1218.2 324.2 318.2 318.2 0 0 0 971.8 5C843.9-20.1 726.9 46.1 648.4 183.9 570 46.6 453.5-19.1 325.8 5.6A322.2 322.2 0 0 0 78.5 324.2 366.1 366.1 0 0 0 145.8 532H317.1ZM804.8 475.7L749.7 608.1H630.7L522.9 769.6 420.5 462.3 371.9 608.1H205.7A2720.4 2720.4 0 0 0 486.1 863C529.5 899.1 648.4 1000 648.4 1000S767.4 899.1 810.6 863A2720.7 2720.7 0 0 0 1091 608.1H864.5Z", + "width": 1297 + }, + "search": [ + "vital-signs" + ] + }, + { + "uid": "a0eacf70f79e61160a5bdf698b3358bc", + "css": "ucaf", + "code": 59476, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M529.3 60V0H470.7V60C201.6 73.3 0 271.4 0 529.3V576.7L42.3 555.7A289.7 289.7 0 0 1 148.4 529.5 171.9 171.9 0 0 1 245.1 579.5L265.8 600 286.4 579.5A171.9 171.9 0 0 1 383.1 529.5 159.1 159.1 0 0 1 471 571.7V912.1A87.9 87.9 0 0 0 646.8 912.1V853.5H587.9V912.1A29.3 29.3 0 0 1 529.3 912.1V571.5A159.1 159.1 0 0 1 617.2 529.3 171.9 171.9 0 0 1 713.9 579.3L734.6 599.8 755.2 579.3A178.1 178.1 0 0 1 853.7 529.3 274.1 274.1 0 0 1 957.8 555.5L1000 576.7V529.3C1000 271.4 798.4 73.3 529.3 60Z", + "width": 1000 + }, + "search": [ + "ucaf" + ] + }, + { + "uid": "daaef425e99170daae1e6c67b843e599", + "css": "filter", + "code": 59477, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M376.3 472.5A61.7 61.7 0 0 1 392.5 514.3V969.1A30.9 30.9 0 0 0 445.1 991.1L572 845.7C589 825.4 598.4 815.2 598.4 795.1V514.4A62.2 62.2 0 0 1 614.6 472.6L978.6 77.6A46.4 46.4 0 0 0 944.5 0H46.5A46.3 46.3 0 0 0 12.4 77.6Z", + "width": 991 + }, + "search": [ + "filter" + ] + }, + { + "uid": "3c0db424e9aa58cd0ee5c3424b718630", + "css": "male-1", + "code": 59478, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M975.4 0H569.5A24.6 24.6 0 0 0 544.9 24.6V133.4A24.6 24.6 0 0 0 569.5 158H725.6L545 338.6A357.4 357.4 0 1 0 661.6 455.3L842.1 274.7V430.5A24.6 24.6 0 0 0 866.7 455.1H975.3A24.6 24.6 0 0 0 999.8 430.5V24.6A24.6 24.6 0 0 0 975.3 0ZM357.6 878.2A235.5 235.5 0 1 1 593.1 642.7 235.5 235.5 0 0 1 357.6 878.2Z", + "width": 1000 + }, + "search": [ + "male" + ] + }, + { + "uid": "d23d330639c6d971f3c52dafedcfc6c8", + "css": "female", + "code": 59479, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M864.9 747.5C966.6 645.7 999.8 626 975.5 601.7L892.8 518.9A24.6 24.6 0 0 0 857.8 518.9L746.8 629.8 666.7 549.7A359.2 359.2 0 1 0 549.9 667.8L629.7 747.5C528 849.3 494.8 869 519.1 893.3L601.4 975.9A24.6 24.6 0 0 0 636.4 975.9L746.8 865.3C866.3 984.8 884.6 1016.8 909 992.5 988.6 912.9 999.3 908.8 999.3 892.2S994.5 877.2 864.9 747.5ZM360.5 598.5A237.9 237.9 0 1 1 598.5 360.5 237.9 237.9 0 0 1 360.5 598.5Z", + "width": 999 + }, + "search": [ + "female" + ] + }, + { + "uid": "9909d0074e2de36b9ceca4513d5a81a2", + "css": "external-link", + "code": 59480, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M945 55A180.6 180.6 0 0 0 812.5 0H187.5A180.6 180.6 0 0 0 55 55 180.6 180.6 0 0 0-0.2 187.5V812.5A180.7 180.7 0 0 0 54.9 945 180.6 180.6 0 0 0 187.4 1000.1H812.5A187.9 187.9 0 0 0 1000 812.5V187.5A180.7 180.7 0 0 0 945 55ZM833.4 520.8A39 39 0 0 1 808 559.2 45.3 45.3 0 0 1 791.7 562.5 38.7 38.7 0 0 1 762.6 550.3L668.6 456.4 321 804A40.9 40.9 0 0 1 262.4 804L196 737.6A40.9 40.9 0 0 1 196 679.1L543.6 331.4 449.9 237.6A37.6 37.6 0 0 1 440.8 192.1 39 39 0 0 1 479.3 166.7H791.8A42.2 42.2 0 0 1 833.5 208.3V520.8Z", + "width": 1000 + }, + "search": [ + "external-link" + ] + }, + { + "uid": "f0593bb8f5b8b0b186421ee68844bdf4", + "css": "verify-face-2", + "code": 59481, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M724.2 694.2L587.6 666.9A31.2 31.2 0 0 1 562.5 636.3V604.9A369.6 369.6 0 0 0 588.7 558.3 267.2 267.2 0 0 1 609.9 520.3 201.7 201.7 0 0 0 673.3 420.4 93.1 93.1 0 0 0 664.2 347 551.6 551.6 0 0 0 653.6 220.2 137.4 137.4 0 0 0 621.1 119.6 96.5 96.5 0 0 0 563.1 95.2 96.8 96.8 0 0 1 541.9 90.3 218.8 218.8 0 0 0 436.3 62.5 245.8 245.8 0 0 0 218.7 212 367.2 367.2 0 0 0 210.1 325.2L209.3 347.1A99.4 99.4 0 0 0 201.4 420.4 201.2 201.2 0 0 0 264.7 520.4 275.4 275.4 0 0 1 286.2 558.3 379.2 379.2 0 0 0 312.6 604.9V636.2A31.4 31.4 0 0 1 287.5 666.9L150.8 694.2A188.1 188.1 0 0 0 0 878.1V937.5A62.6 62.6 0 0 0 62.5 1000.2H812.5A62.5 62.5 0 0 0 875 937.7V878.1A188.2 188.2 0 0 0 724.2 694.2ZM156.3 0H31.3A31.3 31.3 0 0 0 0 31.3V218.8A31.3 31.3 0 0 0 62.5 218.8V62.5H156.3A31.3 31.3 0 0 0 156.3 0ZM156.3 562.5H62.5V406.2A31.3 31.3 0 0 0 0 406.2V593.7A31.3 31.3 0 0 0 31.3 625H156.3A31.3 31.3 0 1 0 156.3 562.5ZM843.8 0H718.8A31.3 31.3 0 0 0 718.8 62.5H812.5V218.8A31.3 31.3 0 0 0 875 218.8V31.3A31.3 31.3 0 0 0 843.8 0ZM843.8 375A31.3 31.3 0 0 0 812.5 406.2V562.5H718.7A31.3 31.3 0 0 0 718.7 625H843.7A31.3 31.3 0 0 0 875 593.7V406.2A31.3 31.3 0 0 0 843.8 375Z", + "width": 875 + }, + "search": [ + "verify-face" + ] + }, + { + "uid": "e69ad471bed67e4f9115dc1e2980e44f", + "css": "verify-sms-2", + "code": 59482, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M900 0H100A100.3 100.3 0 0 0 0 100V1000L200 800H900A100.3 100.3 0 0 0 1000 700V100A100.3 100.3 0 0 0 900 0ZM350 450H250V350H350ZM550 450H450V350H550ZM750 450H650V350H750Z", + "width": 1000 + }, + "search": [ + "verify-sms" + ] + }, + { + "uid": "0736a51e3060fb655273b1c12012240d", + "css": "home", + "code": 59483, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M1066.3 519.6A79.1 79.1 0 0 1 991.7 571.5H964.4V964.3A35.7 35.7 0 0 1 928.7 1000H714.4V750A178.6 178.6 0 0 0 357.2 750V1000H142.9A35.7 35.7 0 0 1 107.2 964.3V571.5H79.9A80 80 0 0 1 27.4 431.5L444.5 36.3A132.8 132.8 0 0 1 627.1 36.3L1045.2 432.3A78.7 78.7 0 0 1 1066.3 519.6Z", + "width": 1072 + }, + "search": [ + "home" + ] + }, + { + "uid": "3f56029b468ab7c3e63c354d71d9928a", + "css": "verify-finger-2", + "code": 59484, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M891.9 0H108.1A108.2 108.2 0 0 0 0 108.1V891.9A108.2 108.2 0 0 0 108.1 1000H891.9A108.2 108.2 0 0 0 1000 891.9V108.1A108.2 108.2 0 0 0 891.9 0ZM185.9 192.6C393.8 41.7 612.9 43.3 817.7 195.2A29.3 29.3 0 0 1 800.1 248.1C766.9 248.1 540.5 7.4 220.2 240A29.3 29.3 0 0 1 185.7 192.6ZM459 946A29.3 29.3 0 0 1 418.2 938.6C377.1 878.9 283.2 812.1 283.2 687.5A225.3 225.3 0 0 1 500 454.9 225.3 225.3 0 0 1 716.8 687.5V718.9A29.3 29.3 0 0 1 658.2 718.9V687.6A166.8 166.8 0 0 0 500 513.8 166.8 166.8 0 0 0 341.8 687.5C341.8 828.8 521.5 902.7 459 946ZM823.1 794.4A153.5 153.5 0 0 1 533.2 718.9C533.2 592.6 446.8 635.1 465.9 711.8A29.3 29.3 0 0 1 409.1 725.9C369.2 566.3 591.8 501.6 591.8 718.9A94.5 94.5 0 0 0 665.2 816.5C800.8 848.5 841 624.8 705.8 480.7 518.8 281.3 216.8 435 216.8 671.9A237 237 0 0 0 258.2 826.8 29.3 29.3 0 0 1 210.6 860.8 298.5 298.5 0 0 1 158.2 671.9 347.5 347.5 0 0 1 500.1 330.1C752.9 330.1 913.6 613.5 823.1 794.3ZM842.7 431.8A29.3 29.3 0 0 1 802.7 420.9C744.4 318.7 603.2 263.8 500 263.8A419.4 419.4 0 0 0 196.2 422.6 29.3 29.3 0 0 1 147.5 390.1 474.9 474.9 0 0 1 499.9 205.2C716.9 205.2 910.7 392.8 842.5 431.8Z", + "width": 1000 + }, + "search": [ + "verify-finger" + ] + }, + { + "uid": "0227a760fc30f34a1e45269b42063066", + "css": "dr-reply-active", + "code": 59485, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M1023.2 547.7H1029.4A86.7 86.7 0 0 1 1162.4 438.2L1200.4 476.2V101.1A101.2 101.2 0 0 0 1099.2 0H101.2A101.2 101.2 0 0 0 0 101.1V799A101.2 101.2 0 0 0 101.2 900.2H798.6A247.7 247.7 0 0 1 1023.1 547.8ZM251.2 136.3H949.2L600.1 392.2ZM1266.6 603.7L1131.7 468.8A43.4 43.4 0 1 0 1070.5 529.9L1131.5 590.9H1023.1A204.5 204.5 0 0 0 1023.1 999.9 43.4 43.4 0 1 0 1023.1 913.2 117.9 117.9 0 0 1 1023.1 677.1H1131.5L1070.5 738A43.4 43.4 0 0 0 1131.7 799.2L1266.6 664.3A43.4 43.4 0 0 0 1266.6 603.1Z", + "width": 1279 + }, + "search": [ + "dr-reply-active" + ] + }, + { + "uid": "127b8293712c90eb2fb4157aa01060d7", + "css": "dr-reply", + "code": 59486, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M1023.2 547.7H1029.4A86.7 86.7 0 0 1 1162.4 438.2L1200.4 476.2V101.1A101.2 101.2 0 0 0 1099.2 0H101.2A101.2 101.2 0 0 0 0 101.1V799A101.2 101.2 0 0 0 101.2 900.2H798.6A247.7 247.7 0 0 1 1023.1 547.8ZM251.2 136.3H949.2L600.1 392.2ZM1266.6 603.7L1131.7 468.8A43.4 43.4 0 1 0 1070.5 529.9L1131.5 590.9H1023.1A204.5 204.5 0 0 0 1023.1 999.9 43.4 43.4 0 1 0 1023.1 913.2 117.9 117.9 0 0 1 1023.1 677.1H1131.5L1070.5 738A43.4 43.4 0 0 0 1131.7 799.2L1266.6 664.3A43.4 43.4 0 0 0 1266.6 603.1Z", + "width": 1279 + }, + "search": [ + "dr-reply" + ] + }, + { + "uid": "5a9d08cf650294b80c159706c83a5dd9", + "css": "schedule-active", + "code": 59487, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M900 0H99.9A100.3 100.3 0 0 0 0 99.9V900A100.3 100.3 0 0 0 99.9 999.8H900A100.3 100.3 0 0 0 999.8 900V99.9A100.3 100.3 0 0 0 900 0ZM269.9 880H116.7V743.8H269.9V880ZM269.9 698.1H116.7V561.9H269.9V698.1ZM258.3 151.6A42.5 42.5 0 1 1 300.8 109.1 42.4 42.4 0 0 1 258.3 151.6ZM474.3 880H321.1V743.8H474.3ZM474.3 698.1H321.1V561.9H474.3ZM474.3 516.3H321.1V380H474.3ZM457.6 109.1A42.4 42.4 0 1 1 500 151.5 42.4 42.4 0 0 1 457.6 109.1ZM678.9 698.1H525.6V561.9H679.1V698.1ZM678.9 516.3H525.6V380H679.1V516.3ZM699 109.1A42.4 42.4 0 1 1 741.5 151.5 42.4 42.4 0 0 1 699 109.1ZM883.2 698.1H730.1V561.9H883.3ZM883.2 516.3H730.1V380H883.3Z", + "width": 1000 + }, + "search": [ + "schedule-active" + ] + }, + { + "uid": "819759b0d0d7626d8231f54569a21da4", + "css": "schedule", + "code": 59488, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M900 0H99.9A100.3 100.3 0 0 0 0 99.9V900A100.3 100.3 0 0 0 99.9 999.8H900A100.3 100.3 0 0 0 999.8 900V99.9A100.3 100.3 0 0 0 900 0ZM269.9 880H116.7V743.8H269.9V880ZM269.9 698.1H116.7V561.9H269.9V698.1ZM258.3 151.6A42.5 42.5 0 1 1 300.8 109.1 42.4 42.4 0 0 1 258.3 151.6ZM474.3 880H321.1V743.8H474.3ZM474.3 698.1H321.1V561.9H474.3ZM474.3 516.3H321.1V380H474.3ZM457.6 109.1A42.4 42.4 0 1 1 500 151.5 42.4 42.4 0 0 1 457.6 109.1ZM678.9 698.1H525.6V561.9H679.1V698.1ZM678.9 516.3H525.6V380H679.1V516.3ZM699 109.1A42.4 42.4 0 1 1 741.5 151.5 42.4 42.4 0 0 1 699 109.1ZM883.2 698.1H730.1V561.9H883.3ZM883.2 516.3H730.1V380H883.3Z", + "width": 1000 + }, + "search": [ + "schedule" + ] + }, + { + "uid": "0de3ebd2d27563050dd71e75e23835d6", + "css": "qr-reader-active", + "code": 59489, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M50 400A50 50 0 0 0 100 350V150A50 50 0 0 1 150 100H350A50 50 0 1 0 350 0H150A150 150 0 0 0 0 150V350A50 50 0 0 0 50 400ZM850 0H650A50 50 0 0 0 650 100H850A50 50 0 0 1 900 150V350A50 50 0 1 0 1000 350V150A150 150 0 0 0 850 0ZM950 600A50 50 0 0 0 900 650V850A50 50 0 0 1 850 900H650A50 50 0 0 0 650 1000H850A150 150 0 0 0 1000 850V650A50 50 0 0 0 950 600ZM350 900H150A50 50 0 0 1 100 850V650A50 50 0 0 0 0 650V850A150 150 0 0 0 150 1000H350A50 50 0 1 0 350 900Z", + "width": 1000 + }, + "search": [ + "qr-reader-active" + ] + }, + { + "uid": "0ea0e7f32832e2d0fbafc766c3c26d93", + "css": "qr-reader", + "code": 59490, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M50 400A50 50 0 0 0 100 350V150A50 50 0 0 1 150 100H350A50 50 0 1 0 350 0H150A150 150 0 0 0 0 150V350A50 50 0 0 0 50 400ZM850 0H650A50 50 0 0 0 650 100H850A50 50 0 0 1 900 150V350A50 50 0 1 0 1000 350V150A150 150 0 0 0 850 0ZM950 600A50 50 0 0 0 900 650V850A50 50 0 0 1 850 900H650A50 50 0 0 0 650 1000H850A150 150 0 0 0 1000 850V650A50 50 0 0 0 950 600ZM350 900H150A50 50 0 0 1 100 850V650A50 50 0 0 0 0 650V850A150 150 0 0 0 150 1000H350A50 50 0 1 0 350 900Z", + "width": 1000 + }, + "search": [ + "qr-reader" + ] + }, + { + "uid": "8f9c01cc9212f68e9b591223b5e08f55", + "css": "home-active", + "code": 59491, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M1066.3 519.6A79.1 79.1 0 0 1 991.7 571.5H964.4V964.3A35.7 35.7 0 0 1 928.7 1000H714.4V750A178.6 178.6 0 0 0 357.2 750V1000H142.9A35.7 35.7 0 0 1 107.2 964.3V571.5H79.9A80 80 0 0 1 27.4 431.5L444.5 36.3A132.8 132.8 0 0 1 627.1 36.3L1045.2 432.3A78.7 78.7 0 0 1 1066.3 519.6Z", + "width": 1072 + }, + "search": [ + "home-active" + ] + }, + { + "uid": "70489544a83221e1141db519826351b5", + "css": "arrow-forward", + "code": 59492, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M1357 455.8L919.2 18.3A62.5 62.5 0 1 0 830.8 106.7L1161.6 437.6H62.5A62.5 62.5 0 1 0 62.5 562.6H1161.7L830.9 893.4A62.5 62.5 0 1 0 919.3 981.8L1357 544.2A62.5 62.5 0 0 0 1357 455.8Z", + "width": 1375 + }, + "search": [ + "arrow-forward" + ] + }, + { + "uid": "d8e875c19306114380e834be3d91f71e", + "css": "heart-rate", + "code": 59493, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M0 532.1V608.1H205.7A689.9 689.9 0 0 1 145.8 532.1ZM1151 532.1A690.1 690.1 0 0 1 1091 608.1H1296.7V532.1ZM420.4 222L545.9 598.4 590 532.1H699L802.2 284.8 913.5 532.3H1151A366.1 366.1 0 0 0 1218.2 324.2 318.2 318.2 0 0 0 971.8 5C843.9-20.1 726.9 46.1 648.4 183.9 570 46.6 453.5-19.1 325.8 5.6A322.2 322.2 0 0 0 78.5 324.2 366.1 366.1 0 0 0 145.8 532H317.1ZM804.8 475.7L749.7 608.1H630.7L522.9 769.6 420.5 462.3 371.9 608.1H205.7A2720.4 2720.4 0 0 0 486.1 863C529.5 899.1 648.4 1000 648.4 1000S767.4 899.1 810.6 863A2720.7 2720.7 0 0 0 1091 608.1H864.5Z", + "width": 1297 + }, + "search": [ + "heart-rate" + ] + }, + { + "uid": "e2f6f0a56d4570c777c8bd5c50e38ea7", + "css": "menu_icon_active-1", + "code": 59494, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M406.7 0H83.2A83.3 83.3 0 0 0 0 83.2V406.7A83.3 83.3 0 0 0 83.2 489.9H406.7A83.3 83.3 0 0 0 489.9 406.7V83.2A83.3 83.3 0 0 0 406.7 0ZM406.7 449.1H83.2A42.4 42.4 0 0 1 40.8 406.7V83.2A42.4 42.4 0 0 1 83.2 40.8H406.7A42.4 42.4 0 0 1 449 83.2V406.7H449A42.4 42.4 0 0 1 406.7 449.1ZM916.8 0H593.3A83.3 83.3 0 0 0 510.1 83.2V406.7A83.3 83.3 0 0 0 593.3 489.9H916.8A83.3 83.3 0 0 0 1000 406.7V83.2A83.3 83.3 0 0 0 916.8 0ZM959.1 406.7A42.4 42.4 0 0 1 916.8 449.1H593.3A42.4 42.4 0 0 1 550.9 406.7V83.2A42.4 42.4 0 0 1 593.3 40.8H916.8A42.4 42.4 0 0 1 959.1 83.2ZM406.7 510.1H83.2A83.3 83.3 0 0 0 0 593.3V916.8A83.3 83.3 0 0 0 83.2 1000H406.7A83.3 83.3 0 0 0 489.9 916.8V593.3A83.3 83.3 0 0 0 406.7 510.1ZM406.7 959.2H83.2A42.4 42.4 0 0 1 40.8 916.8V593.3A42.4 42.4 0 0 1 83.2 550.9H406.7A42.4 42.4 0 0 1 449 593.3V916.8H449A42.4 42.4 0 0 1 406.7 959.1ZM916.8 510.1H593.3A83.3 83.3 0 0 0 510.1 593.3V916.8A83.3 83.3 0 0 0 593.3 1000H916.8A83.3 83.3 0 0 0 1000 916.8V593.3A83.3 83.3 0 0 0 916.8 510.1ZM959.1 916.8A42.4 42.4 0 0 1 916.8 959.2H593.3A42.4 42.4 0 0 1 550.9 916.8V593.3A42.4 42.4 0 0 1 593.3 550.9H916.8A42.4 42.4 0 0 1 959.1 593.3Z", + "width": 1000 + }, + "search": [ + "menu_icon_active" + ] + }, + { + "uid": "f7eb1344b3a40f36bb4d32cdd0d76496", + "css": "message_icon-1", + "code": 59495, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M1182.9 44.3A100 100 0 0 0 1099.9 0.1H100A100 100 0 0 0 0 100V900A100 100 0 0 0 100 1000H1110.4A100 100 0 0 0 1200 900V100A100 100 0 0 0 1182.9 44.3ZM99.9 40H1100A60 60 0 0 1 1138.8 54.2L1061.2 128.2 734 440 612.8 555.7A20 20 0 0 1 589 555.7L466 440 60 54.3A60 60 0 0 1 100 40ZM39.9 90.4L423.2 454 40 820V100A59.7 59.7 0 0 1 40 90.4ZM1160 900A60 60 0 0 1 1107.6 960H100A60 60 0 0 1 40 900V874.6L452.2 481.6 562.4 586.4A60 60 0 0 0 571 592.2 58.4 58.4 0 0 0 600 600 63 63 0 0 0 640 586L748.8 482.4 1160 874.2ZM1160 100V819L776.8 454.7 1160 90.1A61.4 61.4 0 0 1 1160 100Z", + "width": 1200 + }, + "search": [ + "message_icon" + ] + }, + { + "uid": "ed4536ee2a51bde352570554ae089661", + "css": "message_icon_active-1", + "code": 59496, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M1182.9 44.3A100 100 0 0 0 1099.9 0.1H100A100 100 0 0 0 0 100V900A100 100 0 0 0 100 1000H1110.4A100 100 0 0 0 1200 900V100A100 100 0 0 0 1182.9 44.3ZM99.9 40H1100A60 60 0 0 1 1138.8 54.2L1061.2 128.2 734 440 612.8 555.7A20 20 0 0 1 589 555.7L466 440 60 54.3A60 60 0 0 1 100 40ZM39.9 90.4L423.2 454 40 820V100A59.7 59.7 0 0 1 40 90.4ZM1160 900A60 60 0 0 1 1107.6 960H100A60 60 0 0 1 40 900V874.6L452.2 481.6 562.4 586.4A60 60 0 0 0 571 592.2 58.4 58.4 0 0 0 600 600 63 63 0 0 0 640 586L748.8 482.4 1160 874.2ZM1160 100V819L776.8 454.7 1160 90.1A61.4 61.4 0 0 1 1160 100Z", + "width": 1200 + }, + "search": [ + "message_icon_active" + ] + }, + { + "uid": "f585c0032b4aa288a0dfb78f502d4d1c", + "css": "scdedule_icon_active-1", + "code": 59497, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M445.8 693.2A28.8 28.8 0 0 0 486.5 693.2L589.2 590.5A28.8 28.8 0 1 0 548.5 549.8L466.1 632.1 428.6 594.6A28.8 28.8 0 1 0 387.9 635.2ZM445.8 693.2M488.5 849.9A228.4 228.4 0 1 0 260.1 621.5 228.7 228.7 0 0 0 488.5 849.9ZM488.5 450.6A170.8 170.8 0 1 1 317.6 621.5 171 171 0 0 1 488.5 450.6ZM488.5 450.6M881.5 62.9H827.7V29.5A29.5 29.5 0 0 0 768.6 29.5V62.9H710.6V29.5A29.5 29.5 0 0 0 651.5 29.5V62.9H325.5V29.5A29.5 29.5 0 0 0 266.4 29.5V62.9H208.4V29.5A29.5 29.5 0 0 0 149.4 29.5V62.9H95.5A95.6 95.6 0 0 0 0 158.4V904.5A95.6 95.6 0 0 0 95.5 1000H881.5A95.6 95.6 0 0 0 976.9 904.5V158.4A95.6 95.6 0 0 0 881.5 62.9ZM918 904.5A36.5 36.5 0 0 1 881.5 940.9H95.5A36.5 36.5 0 0 1 59 904.5V308.4H917.9ZM59.1 158.4A36.5 36.5 0 0 1 95.5 121.9H149.4V155.3A29.5 29.5 0 0 0 208.4 155.3V121.9H266.4V155.3A29.5 29.5 0 0 0 325.5 155.3V121.9H651.5V155.3A29.5 29.5 0 0 0 710.6 155.3V121.9H768.6V155.3A29.5 29.5 0 0 0 827.7 155.3V121.9H881.5A36.5 36.5 0 0 1 918 158.4V249.3H59.1ZM59.1 158.4", + "width": 977 + }, + "search": [ + "scdedule_icon_active" + ] + }, + { + "uid": "cc3ade5c55f86a777648c695856d7bb6", + "css": "ovrweight-bmi-r-1", + "code": 59498, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M240.4 571.7C238.7 589.1 251.9 680.9 258.6 716.9 261.9 734 270.7 761.8 267.5 776.5A194.7 194.7 0 0 0 264.2 839.2C265.7 848.6 270.7 892 263.6 907.9A454.8 454.8 0 0 0 253.1 958.9C235.3 999.1 245.3 997.1 245.3 997.1 250.8 1003.2 260.3 997.6 260.3 997.6A9.9 9.9 0 0 0 272.4 996.6 12 12 0 0 0 285.7 996.1 14.6 14.6 0 0 0 300.6 993C305.1 995 306.1 992.5 306.1 992.5 319.5 991.7 298.7 953.5 298.7 953.5A94.6 94.6 0 0 1 303.6 900C336.1 813.7 337.7 790.8 324.7 758.3 321.1 748.9 320.2 745.2 321.8 741.1 325.7 731.7 322.9 693.9 327.6 678.8 336.8 649.9 345.8 576.4 350.5 542.1 356.8 495.9 328.1 434 328.1 434 321.9 408.8 331.1 319 331.1 319 343.9 336.9 343.4 368.6 343.4 368.6 341.4 401.9 373.3 452.7 373.3 452.7A128.3 128.3 0 0 1 394.5 495.1C394.5 501.1 393 515.8 393 515.8L393.6 528.5A163.7 163.7 0 0 1 395.6 548.4C393.2 581.6 399.1 575.4 399.1 575.4 404.1 575.4 409.5 548.6 409.5 548.6 409.5 555.5 407.6 576.1 411.8 583.9 416.8 593.2 420.4 582.3 420.5 580.1 421.8 537.8 424.6 548.9 424.6 548.9 427.4 583.2 430.8 591 436.8 588.3 441.4 586.3 437.2 547.1 437.2 547.1 445.1 570.4 451.1 574.1 451.1 574.1 464.1 582.3 456.1 559.7 454.3 555.2A118.2 118.2 0 0 1 444.3 523C456.4 544.5 465.4 543.7 465.4 543.7 477.2 540.3 455.1 510 442.3 495.4A118.3 118.3 0 0 1 424.7 472.2 253.7 253.7 0 0 1 417.7 430.2C416.5 392.3 406.1 375.9 406.1 375.9 388.2 350.3 384.9 302.5 384.9 302.5L384.1 221.9C377.8 166.9 332.7 166.5 332.7 166.5 287.1 160.5 280.7 147.3 280.7 147.3 271 134.8 276.6 110.8 276.6 110.8A41.5 41.5 0 0 0 287.7 89.4C301 80.3 300.4 66.9 294.2 67 289.3 67.1 290.4 63.4 290.4 63.4 298.7 3.1 239 0 239 0H229.9S170.1 3.1 178.4 63.4C178.4 63.4 179.6 67.1 174.6 67 168.4 66.8 167.9 80.3 181.1 89.4A41.4 41.4 0 0 0 192.3 110.8S197.8 134.8 188.1 147.2C188.1 147.2 181.8 160.5 136.1 166.6 136.1 166.6 90.9 167 84.7 222L83.8 302.6S80.5 350.3 62.6 375.9C62.6 375.9 52.3 392.4 51.1 430.2A255.3 255.3 0 0 1 44 472.3 117.1 117.1 0 0 1 26.5 495.5C13.5 510-8.4 540.2 3.3 543.7 3.3 543.7 12.5 544.5 24.4 523.1A117 117 0 0 1 14.6 555.2C12.7 559.6 4.6 582.3 17.7 574.2 17.7 574.2 23.7 570.4 31.5 547.1 31.5 547.1 27.3 586.4 32 588.4 38.1 591 41.5 583.3 44.2 548.9 44.2 548.9 47.1 537.8 48.4 580.2 48.4 582.4 52 593.3 57 584 61.2 576.2 59.3 555.5 59.3 548.6 59.3 548.6 64.7 575.4 69.7 575.4 69.7 575.4 75.7 581.7 73.2 548.4A150.7 150.7 0 0 1 75.2 528.6L75.8 515.8S74.3 501.2 74.3 495.1A128.1 128.1 0 0 1 95.5 452.7S127.5 401.9 125.4 368.7C125.4 368.7 125 337 137.8 319 137.8 319 146.9 408.8 140.7 434 140.7 434 112 496 118.3 542.2 123 576.5 132 649.9 141.2 678.9 145.9 693.9 143.1 731.7 146.9 741.2 148.7 745.3 147.8 749.1 144 758.4 131.2 790.8 132.9 813.7 165.3 900A93.8 93.8 0 0 1 170.2 953.5S149.5 991.7 162.7 992.5C162.7 992.5 163.8 995 168.3 993A14.6 14.6 0 0 0 183.2 996.1 12 12 0 0 0 196.5 996.6 9.9 9.9 0 0 0 208.6 997.6S218 1003.3 223.6 997.1C223.6 997.1 233.5 999.1 215.8 958.9A452.6 452.6 0 0 0 205.3 907.9C198.2 892 203.2 848.5 204.7 839.2A198.1 198.1 0 0 0 201.4 776.5C198.1 761.8 207 734 210.2 716.9 217 680.9 230.2 589.1 228.5 571.7L233.9 573.4A11.9 11.9 0 0 0 240.4 571.7Z", + "width": 469 + }, + "search": [ + "ovrweight-bmi-r" + ] + }, + { + "uid": "0032e9701d42cc0d1967b6a1256c2bbe", + "css": "temperature-1", + "code": 59500, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M394.7 0A131.7 131.7 0 0 1 526.3 131.8V686.9A187 187 0 0 1 579 815.8 184.2 184.2 0 1 1 263.2 686.9V131.6A131.4 131.4 0 0 1 394.7 0ZM394.7 315.8A26.5 26.5 0 0 0 368.4 342.1V741.3A79 79 0 1 0 473.7 815.8 79.9 79.9 0 0 0 421.1 741.3V342.1A26.7 26.7 0 0 0 394.7 315.8ZM184.2 631.6A26.3 26.3 0 1 1 184.2 684.3H52.6A26.3 26.3 0 1 1 52.6 631.6ZM710.6 289.6A105.3 105.3 0 0 1 815.7 394.7 25.8 25.8 0 0 1 789.5 422.3 26.5 26.5 0 0 1 763.1 394.9 52.6 52.6 0 0 0 657.9 394.9V553A52.6 52.6 0 1 0 763.2 553 26.3 26.3 0 0 1 815.8 553 105.3 105.3 0 0 1 605.3 553V394.7A105.3 105.3 0 0 1 710.6 289.6ZM184.2 552.6A26.3 26.3 0 1 1 184.2 605.3H157.9A26.3 26.3 0 0 1 157.9 552.6ZM184.2 447.4A26.3 26.3 0 0 1 210.6 473.7 26.7 26.7 0 0 1 184.2 500H105.3A26.3 26.3 0 0 1 78.9 473.7 26 26 0 0 1 105.3 447.4ZM921.1 289.5A52.6 52.6 0 1 1 868.5 342.1 52.6 52.6 0 0 1 921.1 289.6ZM184.2 342.1A26.3 26.3 0 1 1 184.2 394.8H78.9A26.3 26.3 0 0 1 78.9 342.1ZM184.2 236.9A26.3 26.3 0 0 1 184.2 289.5H131.6A26.3 26.3 0 0 1 131.6 236.9ZM184.2 131.6A26.3 26.3 0 1 1 184.2 184.3H26.3A26.3 26.3 0 1 1 26.3 131.6Z", + "width": 974 + }, + "search": [ + "temperature" + ] + }, + { + "uid": "208bf58358a06153619709f72e19051d", + "css": "underweight-bmi-1", + "code": 59499, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M182.4 571.7C181.1 589.1 191.1 680.9 196.2 716.9 198.7 734 205.4 761.8 203 776.5A255.5 255.5 0 0 0 200.4 839.2C201.6 848.6 205.4 892 200 907.9 197.2 916.3 192 958.9 192 958.9 178.6 999.1 186.1 997.1 186.1 997.1 190.3 1003.2 197.5 997.6 197.5 997.6A6.3 6.3 0 0 0 206.7 996.6C211.4 1001.2 216.8 996.1 216.8 996.1 222.7 999.7 228.1 993 228.1 993 231.5 995 232.3 992.5 232.3 992.5 242.4 991.7 226.7 953.5 226.7 953.5A122.1 122.1 0 0 1 230.4 900C255 813.7 256.3 790.8 246.5 758.3 243.7 748.9 243 745.2 244.3 741.1 247.2 731.7 245.1 693.9 248.7 678.8 255.6 649.9 262.4 576.4 266 542.1 270.7 495.9 249 434 249 434 244.2 408.8 251.2 319 251.2 319A126.2 126.2 0 0 1 260.6 368.6C259 401.9 283.2 452.7 283.2 452.7A149.5 149.5 0 0 1 299.3 495.1C299.3 501.1 298.2 515.8 298.2 515.8L298.6 528.5C298.8 531.8 300.4 543 300.1 548.4 298.3 581.6 302.8 575.4 302.8 575.4 306.5 575.4 310.7 548.6 310.7 548.6A135.2 135.2 0 0 0 312.4 583.9C316.2 593.2 318.9 582.3 319 580.1 320 537.8 322.1 548.9 322.1 548.9 324.2 583.2 326.8 591 331.4 588.3 334.9 586.3 331.7 547.1 331.7 547.1 337.7 570.4 342.2 574.1 342.2 574.1 352.1 582.3 346 559.7 344.6 555.2A148.3 148.3 0 0 1 337.1 523C346.2 544.5 353.1 543.7 353.1 543.7 362 540.3 345.3 510 335.6 495.4A121.6 121.6 0 0 1 322.3 472.2 328.7 328.7 0 0 1 317 430.2 145.7 145.7 0 0 0 308.1 375.9C294.6 350.3 292.1 302.5 292.1 302.5L291.5 221.9C286.7 166.9 252.5 166.5 252.5 166.5 217.8 160.4 213 147.2 213 147.2 205.7 134.7 209.9 110.8 209.9 110.8A47.8 47.8 0 0 0 218.3 89.4C228.4 80.2 227.9 66.8 223.3 66.9 219.5 67.1 220.4 63.4 220.4 63.4 226.6 3.1 181.3 0 181.3 0H174.4S129 3.1 135.4 63.4C135.4 63.4 136.2 67.1 132.5 67 127.8 66.8 127.4 80.3 137.4 89.4A47.7 47.7 0 0 0 145.9 110.8S150.1 134.8 142.8 147.2C142.8 147.2 138 160.5 103.3 166.6 103.3 166.6 69 167 64.3 222L63.7 302.6S61.1 350.3 47.5 375.9A146.2 146.2 0 0 0 38.8 430.2 330.8 330.8 0 0 1 33.4 472.3 120.2 120.2 0 0 1 20.1 495.5C10.2 510-6.3 540.2 2.5 543.7 2.5 543.7 9.4 544.5 18.5 523.1A146.9 146.9 0 0 1 11.1 555.2C9.6 559.6 3.5 582.3 13.4 574.2 13.4 574.2 18 570.4 23.9 547.1 23.9 547.1 20.7 586.4 24.3 588.4 28.9 591 31.5 583.3 33.6 548.9 33.6 548.9 35.7 537.8 36.7 580.2 36.7 582.4 39.4 593.3 43.2 584A133.3 133.3 0 0 0 45 548.6S49.1 575.4 52.9 575.4C52.9 575.4 57.4 581.7 55.6 548.4A197.2 197.2 0 0 1 57.1 528.6L57.5 515.8S56.4 501.2 56.4 495.1A149.3 149.3 0 0 1 72.5 452.7S96.7 401.8 95.2 368.6A126.5 126.5 0 0 1 104.6 319S111.5 408.8 106.8 434C106.8 434 85 495.9 89.8 542.1 93.4 576.5 100.2 649.9 107.2 678.8 110.8 693.8 108.6 731.7 111.5 741.1 112.9 745.2 112.2 749 109.4 758.3 99.6 790.8 100.8 813.7 125.4 900A121 121 0 0 1 129.2 953.5S113.5 991.8 123.5 992.5C123.5 992.5 124.3 995.1 127.7 993.1 127.7 993.1 133.2 999.7 139.1 996.1 139.1 996.1 144.5 1001.3 149.2 996.7A6.2 6.2 0 0 0 158.3 997.6S165.5 1003.3 169.7 997.2C169.7 997.2 177.2 999.2 163.8 959 163.8 959 158.6 916.3 155.8 908 150.4 892.1 154.2 848.6 155.4 839.3A260 260 0 0 0 152.8 776.6C150.4 761.8 157.1 734 159.6 717 164.7 681 174.7 589.1 173.4 571.8L177.5 573.5A7.6 7.6 0 0 0 182.4 571.7Z", + "width": 356 + }, + "search": [ + "underweight-bmi" + ] + }, + { + "uid": "0790b855889a2e90bc58c10bf62b18b7", + "css": "underweight-bmi-r-1", + "code": 59501, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M182.4 571.7C181.1 589.1 191.1 680.9 196.2 716.9 198.7 734 205.4 761.8 203 776.5A255.5 255.5 0 0 0 200.4 839.2C201.6 848.6 205.4 892 200 907.9 197.2 916.3 192 958.9 192 958.9 178.6 999.1 186.1 997.1 186.1 997.1 190.3 1003.2 197.5 997.6 197.5 997.6A6.3 6.3 0 0 0 206.7 996.6C211.4 1001.2 216.8 996.1 216.8 996.1 222.7 999.7 228.1 993 228.1 993 231.5 995 232.3 992.5 232.3 992.5 242.4 991.7 226.7 953.5 226.7 953.5A122.1 122.1 0 0 1 230.4 900C255 813.7 256.3 790.8 246.5 758.3 243.7 748.9 243 745.2 244.3 741.1 247.2 731.7 245.1 693.9 248.7 678.8 255.6 649.9 262.4 576.4 266 542.1 270.7 495.9 249 434 249 434 244.2 408.8 251.2 319 251.2 319A126.2 126.2 0 0 1 260.6 368.6C259 401.9 283.2 452.7 283.2 452.7A149.5 149.5 0 0 1 299.3 495.1C299.3 501.1 298.2 515.8 298.2 515.8L298.6 528.5C298.8 531.8 300.4 543 300.1 548.4 298.3 581.6 302.8 575.4 302.8 575.4 306.5 575.4 310.7 548.6 310.7 548.6A135.2 135.2 0 0 0 312.4 583.9C316.2 593.2 318.9 582.3 319 580.1 320 537.8 322.1 548.9 322.1 548.9 324.2 583.2 326.8 591 331.4 588.3 334.9 586.3 331.7 547.1 331.7 547.1 337.7 570.4 342.2 574.1 342.2 574.1 352.1 582.3 346 559.7 344.6 555.2A148.3 148.3 0 0 1 337.1 523C346.2 544.5 353.1 543.7 353.1 543.7 362 540.3 345.3 510 335.6 495.4A121.6 121.6 0 0 1 322.3 472.2 328.7 328.7 0 0 1 317 430.2 145.7 145.7 0 0 0 308.1 375.9C294.6 350.3 292.1 302.5 292.1 302.5L291.5 221.9C286.7 166.9 252.5 166.5 252.5 166.5 217.8 160.4 213 147.2 213 147.2 205.7 134.7 209.9 110.8 209.9 110.8A47.8 47.8 0 0 0 218.3 89.4C228.4 80.2 227.9 66.8 223.3 66.9 219.5 67.1 220.4 63.4 220.4 63.4 226.6 3.1 181.3 0 181.3 0H174.4S129 3.1 135.4 63.4C135.4 63.4 136.2 67.1 132.5 67 127.8 66.8 127.4 80.3 137.4 89.4A47.7 47.7 0 0 0 145.9 110.8S150.1 134.8 142.8 147.2C142.8 147.2 138 160.5 103.3 166.6 103.3 166.6 69 167 64.3 222L63.7 302.6S61.1 350.3 47.5 375.9A146.2 146.2 0 0 0 38.8 430.2 330.8 330.8 0 0 1 33.4 472.3 120.2 120.2 0 0 1 20.1 495.5C10.2 510-6.3 540.2 2.5 543.7 2.5 543.7 9.4 544.5 18.5 523.1A146.9 146.9 0 0 1 11.1 555.2C9.6 559.6 3.5 582.3 13.4 574.2 13.4 574.2 18 570.4 23.9 547.1 23.9 547.1 20.7 586.4 24.3 588.4 28.9 591 31.5 583.3 33.6 548.9 33.6 548.9 35.7 537.8 36.7 580.2 36.7 582.4 39.4 593.3 43.2 584A133.3 133.3 0 0 0 45 548.6S49.1 575.4 52.9 575.4C52.9 575.4 57.4 581.7 55.6 548.4A197.2 197.2 0 0 1 57.1 528.6L57.5 515.8S56.4 501.2 56.4 495.1A149.3 149.3 0 0 1 72.5 452.7S96.7 401.8 95.2 368.6A126.5 126.5 0 0 1 104.6 319S111.5 408.8 106.8 434C106.8 434 85 495.9 89.8 542.1 93.4 576.5 100.2 649.9 107.2 678.8 110.8 693.8 108.6 731.7 111.5 741.1 112.9 745.2 112.2 749 109.4 758.3 99.6 790.8 100.8 813.7 125.4 900A121 121 0 0 1 129.2 953.5S113.5 991.8 123.5 992.5C123.5 992.5 124.3 995.1 127.7 993.1 127.7 993.1 133.2 999.7 139.1 996.1 139.1 996.1 144.5 1001.3 149.2 996.7A6.2 6.2 0 0 0 158.3 997.6S165.5 1003.3 169.7 997.2C169.7 997.2 177.2 999.2 163.8 959 163.8 959 158.6 916.3 155.8 908 150.4 892.1 154.2 848.6 155.4 839.3A260 260 0 0 0 152.8 776.6C150.4 761.8 157.1 734 159.6 717 164.7 681 174.7 589.1 173.4 571.8L177.5 573.5A7.6 7.6 0 0 0 182.4 571.7Z", + "width": 356 + }, + "search": [ + "underweight-bmi-r" + ] + }, + { + "uid": "28c921a73f854e0b9d7882278180cb1c", + "css": "weight-1", + "code": 59502, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M909.1 0H90.9A91 91 0 0 0 0 90.9V909.1A91 91 0 0 0 90.9 1000H909.1A91 91 0 0 0 1000 909.1V90.9A91 91 0 0 0 909.1 0ZM789.3 288.3L660.8 416.9A22.7 22.7 0 0 1 628.6 416.9 184.8 184.8 0 0 0 455.8 371.1L407 263.5A22.7 22.7 0 1 0 365.7 282.3L413.4 387.2A169.3 169.3 0 0 0 371.6 416.9 22.7 22.7 0 0 1 339.5 416.9L210.7 288.3A22.7 22.7 0 0 1 210.7 256.2 409 409 0 0 1 789.3 256.2 22.7 22.7 0 0 1 789.3 288.3Z", + "width": 1000 + }, + "search": [ + "weight" + ] + }, + { + "uid": "b2fce7f0f65f22d51853206d59bbe9f5", + "css": "blood-pressure-1", + "code": 59503, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M672.7 709.1A145.5 145.5 0 1 0 818.2 854.6 145.5 145.5 0 0 0 672.7 709.1ZM724.2 828.9L685.6 867.5A18.2 18.2 0 1 1 659.8 841.7L698.4 803.1A18.2 18.2 0 0 1 724.2 828.9ZM872.7 236.4C770.7 236.4 690.9 292.4 690.9 363.7S770.7 491 872.7 491 1054.5 435 1054.5 363.7 974.7 236.4 872.7 236.4ZM972.7 381.8A18.2 18.2 0 0 1 954.6 363.7C954.6 350 914.9 327.3 872.7 327.3A18.2 18.2 0 1 1 872.7 291C921.1 291 990.9 316.8 990.9 363.7A18.2 18.2 0 0 1 972.7 381.8ZM655.8 345.5H563.7V18.2A18.2 18.2 0 0 0 545.4 0H218.2A18.2 18.2 0 0 0 200 18.2V109.1H18.2A18.2 18.2 0 0 0 0 127.3V781.8A18.2 18.2 0 0 0 18.2 800H200V854.5A18.2 18.2 0 0 0 218.2 872.7H491.8C491.8 866.7 490.9 860.7 490.9 854.5A120.6 120.6 0 0 1 491.8 836.4H236.4V800H418.2A18.2 18.2 0 0 0 436.4 781.8V127.3A18.2 18.2 0 0 0 418.2 109.1H236.4V36.4H527.3V363.6A18.2 18.2 0 0 0 545.5 381.8H655.9A130.5 130.5 0 0 1 655.8 345.5ZM272.7 272.7H345.5A18.2 18.2 0 1 1 345.5 309.1H272.7A18.2 18.2 0 1 1 272.7 272.7ZM272.7 600H345.5A18.2 18.2 0 1 1 345.5 636.4H272.7A18.2 18.2 0 1 1 272.7 600Z", + "width": 1055 + }, + "search": [ + "blood-pressure" + ] + }, + { + "uid": "2c5321439f574f1b3d74a71ae040512c", + "css": "filter-1", + "code": 59532, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M376.3 472.5A61.7 61.7 0 0 1 392.5 514.3V969.1A30.9 30.9 0 0 0 445.1 991.1L572 845.7C589 825.4 598.4 815.2 598.4 795.1V514.4A62.2 62.2 0 0 1 614.6 472.6L978.6 77.6A46.4 46.4 0 0 0 944.5 0H46.5A46.3 46.3 0 0 0 12.4 77.6Z", + "width": 991 + }, + "search": [ + "filter" + ] + }, + { + "uid": "d4c35e5489591eb085e2936014910df8", + "css": "male-3", + "code": 59533, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M975.4 0H569.5A24.6 24.6 0 0 0 544.9 24.6V133.4A24.6 24.6 0 0 0 569.5 158H725.6L545 338.6A357.4 357.4 0 1 0 661.6 455.3L842.1 274.7V430.5A24.6 24.6 0 0 0 866.7 455.1H975.3A24.6 24.6 0 0 0 999.8 430.5V24.6A24.6 24.6 0 0 0 975.3 0ZM357.6 878.2A235.5 235.5 0 1 1 593.1 642.7 235.5 235.5 0 0 1 357.6 878.2Z", + "width": 1000 + }, + "search": [ + "male" + ] + }, + { + "uid": "cb1acb9603d7bf118642dcc8374a07c8", + "css": "search-2", + "code": 59534, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M402.7 804.7A401.8 401.8 0 0 0 649.6 719.9L915.7 986A50 50 0 0 0 986.5 915.3L720.3 649.2A402.6 402.6 0 1 0 402.7 804.7ZM188.8 188.6A302.4 302.4 0 1 1 188.8 616.2H188.8A301.2 301.2 0 0 1 187.1 190.2L188.6 188.6Z", + "width": 1001 + }, + "search": [ + "search" + ] + }, + { + "uid": "cfca37b29e6fa5d9ef1531bfae25b687", + "css": "send-1", + "code": 59535, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M1000.1 0L0 562.5 319.4 680.9 812.5 218.8 437.6 724.5 437.9 724.5 437.5 724.5V1000.1L616.7 790.9 843.7 875Z", + "width": 1000 + }, + "search": [ + "send" + ] + }, + { + "uid": "20326e34220e9e1dac3393ba9b386734", + "css": "female-2", + "code": 59531, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M864.9 747.5C966.6 645.7 999.8 626 975.5 601.7L892.8 518.9A24.6 24.6 0 0 0 857.8 518.9L746.8 629.8 666.7 549.7A359.2 359.2 0 1 0 549.9 667.8L629.7 747.5C528 849.3 494.8 869 519.1 893.3L601.4 975.9A24.6 24.6 0 0 0 636.4 975.9L746.8 865.3C866.3 984.8 884.6 1016.8 909 992.5 988.6 912.9 999.3 908.8 999.3 892.2S994.5 877.2 864.9 747.5ZM360.5 598.5A237.9 237.9 0 1 1 598.5 360.5 237.9 237.9 0 0 1 360.5 598.5Z", + "width": 999 + }, + "search": [ + "female" + ] + }, + { + "uid": "342382cdcec431ecf1c796b8fe0426c2", + "css": "create-episode-1", + "code": 59527, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M825.8 83.3A125 125 0 0 0 708.4 0H125A125.4 125.4 0 0 0 0 125V708.4A125 125 0 0 0 83.3 825.9V291.7A208.3 208.3 0 0 1 291.7 83.3ZM875 166.7H291.6A125.4 125.4 0 0 0 166.7 291.6V875A125.4 125.4 0 0 0 291.6 1000H875A125.4 125.4 0 0 0 1000 875V291.6A125.4 125.4 0 0 0 875 166.7ZM750 625H625V750A41.7 41.7 0 0 1 541.7 750V625H416.7A41.7 41.7 0 1 1 416.7 541.7H541.7V416.7A41.7 41.7 0 1 1 625 416.7V541.7H750A41.7 41.7 0 0 1 750 625Z", + "width": 1000 + }, + "search": [ + "create-episode" + ] + }, + { + "uid": "59afe1ac64e42bf7f65ca1f02f61239b", + "css": "health-bmi-r-1", + "code": 59504, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M215.7 571.7C214.2 589.1 226 680.9 232 716.9 234.9 734 242.9 761.8 240 776.5A216.6 216.6 0 0 0 237 839.2C238.4 848.6 242.9 892 236.5 907.9A500.9 500.9 0 0 0 227.1 958.9C211.1 999.1 220.1 997.1 220.1 997.1 225 1003.2 233.5 997.6 233.5 997.6A8.2 8.2 0 0 0 244.4 996.6 9.9 9.9 0 0 0 256.4 996.1 12.2 12.2 0 0 0 269.8 993C273.7 995 274.7 992.5 274.7 992.5 286.7 991.7 268 953.5 268 953.5A104.5 104.5 0 0 1 272.5 900C301.6 813.7 303 790.8 291.4 758.3 288.1 748.9 287.3 745.2 288.8 741.1 292.3 731.7 289.8 693.9 294 678.8 302.2 649.9 310.3 576.4 314.5 542.1 320.1 495.9 294.4 434 294.4 434 288.8 408.8 297 319 297 319 308.6 336.9 308.1 368.6 308.1 368.6 306.3 401.9 335 452.7 335 452.7A135.3 135.3 0 0 1 354 495.1C354 501.1 352.7 515.8 352.7 515.8L353.2 528.5A181.9 181.9 0 0 1 354.9 548.4C352.8 581.7 358 575.4 358 575.4 362.5 575.4 367.4 548.6 367.4 548.6A114.7 114.7 0 0 0 369.5 584C373.9 593.2 377.2 582.4 377.2 580.2 378.4 537.8 381 548.9 381 548.9 383.4 583.3 386.5 591 391.9 588.3 396.1 586.4 392.3 547.1 392.3 547.1 399.4 570.4 404.7 574.1 404.7 574.1 416.4 582.4 409.2 559.7 407.6 555.2A128.9 128.9 0 0 1 398.7 523.1C409.5 544.5 417.6 543.7 417.6 543.7 428.1 540.3 408.4 510 396.8 495.5A118.2 118.2 0 0 1 381.1 472.2 280.5 280.5 0 0 1 374.8 430.2 126.3 126.3 0 0 0 364.3 375.9C348.3 350.3 345.3 302.6 345.3 302.6L344.6 222C339 167 298.5 166.6 298.5 166.6 257.5 160.5 251.8 147.3 251.8 147.3 243.2 134.8 248.1 110.8 248.1 110.8A43.5 43.5 0 0 0 258.1 89.4C270 80.3 269.4 66.9 263.9 67 259.5 67.1 260.5 63.4 260.5 63.4 268 3.1 214.4 0 214.4 0H206.2S152.6 3.1 160.1 63.4C160.1 63.4 161.1 67.1 156.6 67 151.1 66.8 150.6 80.3 162.5 89.4A43.5 43.5 0 0 0 172.5 110.8S177.4 134.8 168.8 147.2C168.8 147.2 163.1 160.5 122.1 166.6 122.1 166.6 81.5 167 76 222L75.2 302.6S72.3 350.3 56.2 375.9A126.8 126.8 0 0 0 45.8 430.2 282.3 282.3 0 0 1 39.5 472.3 116.9 116.9 0 0 1 23.8 495.5C12.1 510-7.5 540.2 3 543.7 3 543.7 11.2 544.5 21.9 523.1A127.6 127.6 0 0 1 13.1 555.2C11.4 559.6 4.1 582.3 15.8 574.2 15.8 574.2 21.2 570.4 28.3 547.1 28.3 547.1 24.5 586.4 28.7 588.4 34.2 591 37.2 583.3 39.7 548.9 39.7 548.9 42.2 537.8 43.4 580.2 43.5 582.4 46.7 593.3 51.1 584A113.1 113.1 0 0 0 53.2 548.6S58 575.4 62.6 575.4C62.6 575.4 67.9 581.7 65.7 548.4A167.4 167.4 0 0 1 67.4 528.6L68 515.8S66.6 501.2 66.6 495.1A135.1 135.1 0 0 1 85.6 452.7S114.3 401.9 112.4 368.7C112.4 368.7 112 337 123.6 319 123.6 319 131.8 408.8 126.2 434 126.2 434 100.4 496 106.1 542.2 110.3 576.5 118.4 649.9 126.6 678.9 130.9 693.9 128.4 731.7 131.8 741.2 133.3 745.3 132.5 749.1 129.2 758.4 117.6 790.9 119.1 813.8 148.2 900.1A103.5 103.5 0 0 1 152.6 953.6S134 991.8 145.9 992.6C145.9 992.6 146.9 995.1 150.9 993.1A12.3 12.3 0 0 0 164.3 996.1 9.9 9.9 0 0 0 176.2 996.7 8.2 8.2 0 0 0 187.1 997.7S195.5 1003.4 200.5 997.2C200.5 997.2 209.4 999.2 193.6 959A498.5 498.5 0 0 0 184.1 908C177.8 892.1 182.3 848.6 183.6 839.3A220.4 220.4 0 0 0 180.7 776.5C177.8 761.8 185.7 734 188.7 716.9 194.7 680.9 206.5 589.1 205.1 571.7L209.9 573.4A9.9 9.9 0 0 0 215.7 571.7Z", + "width": 421 + }, + "search": [ + "health-bmi-r" + ] + }, + { + "uid": "e5c5250bddfcb33a1d4f8c2948b754e4", + "css": "health-bmi-1", + "code": 59505, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M215.7 571.7C214.2 589.1 226 680.9 232 716.9 234.9 734 242.9 761.8 240 776.5A216.6 216.6 0 0 0 237 839.2C238.4 848.6 242.9 892 236.5 907.9A500.9 500.9 0 0 0 227.1 958.9C211.1 999.1 220.1 997.1 220.1 997.1 225 1003.2 233.5 997.6 233.5 997.6A8.2 8.2 0 0 0 244.4 996.6 9.9 9.9 0 0 0 256.4 996.1 12.2 12.2 0 0 0 269.8 993C273.7 995 274.7 992.5 274.7 992.5 286.7 991.7 268 953.5 268 953.5A104.5 104.5 0 0 1 272.5 900C301.6 813.7 303 790.8 291.4 758.3 288.1 748.9 287.3 745.2 288.8 741.1 292.3 731.7 289.8 693.9 294 678.8 302.2 649.9 310.3 576.4 314.5 542.1 320.1 495.9 294.4 434 294.4 434 288.8 408.8 297 319 297 319 308.6 336.9 308.1 368.6 308.1 368.6 306.3 401.9 335 452.7 335 452.7A135.3 135.3 0 0 1 354 495.1C354 501.1 352.7 515.8 352.7 515.8L353.2 528.5A181.9 181.9 0 0 1 354.9 548.4C352.8 581.7 358 575.4 358 575.4 362.5 575.4 367.4 548.6 367.4 548.6A114.7 114.7 0 0 0 369.5 584C373.9 593.2 377.2 582.4 377.2 580.2 378.4 537.8 381 548.9 381 548.9 383.4 583.3 386.5 591 391.9 588.3 396.1 586.4 392.3 547.1 392.3 547.1 399.4 570.4 404.7 574.1 404.7 574.1 416.4 582.4 409.2 559.7 407.6 555.2A128.9 128.9 0 0 1 398.7 523.1C409.5 544.5 417.6 543.7 417.6 543.7 428.1 540.3 408.4 510 396.8 495.5A118.2 118.2 0 0 1 381.1 472.2 280.5 280.5 0 0 1 374.8 430.2 126.3 126.3 0 0 0 364.3 375.9C348.3 350.3 345.3 302.6 345.3 302.6L344.6 222C339 167 298.5 166.6 298.5 166.6 257.5 160.5 251.8 147.3 251.8 147.3 243.2 134.8 248.1 110.8 248.1 110.8A43.5 43.5 0 0 0 258.1 89.4C270 80.3 269.4 66.9 263.9 67 259.5 67.1 260.5 63.4 260.5 63.4 268 3.1 214.4 0 214.4 0H206.2S152.6 3.1 160.1 63.4C160.1 63.4 161.1 67.1 156.6 67 151.1 66.8 150.6 80.3 162.5 89.4A43.5 43.5 0 0 0 172.5 110.8S177.4 134.8 168.8 147.2C168.8 147.2 163.1 160.5 122.1 166.6 122.1 166.6 81.5 167 76 222L75.2 302.6S72.3 350.3 56.2 375.9A126.8 126.8 0 0 0 45.8 430.2 282.3 282.3 0 0 1 39.5 472.3 116.9 116.9 0 0 1 23.8 495.5C12.1 510-7.5 540.2 3 543.7 3 543.7 11.2 544.5 21.9 523.1A127.6 127.6 0 0 1 13.1 555.2C11.4 559.6 4.1 582.3 15.8 574.2 15.8 574.2 21.2 570.4 28.3 547.1 28.3 547.1 24.5 586.4 28.7 588.4 34.2 591 37.2 583.3 39.7 548.9 39.7 548.9 42.2 537.8 43.4 580.2 43.5 582.4 46.7 593.3 51.1 584A113.1 113.1 0 0 0 53.2 548.6S58 575.4 62.6 575.4C62.6 575.4 67.9 581.7 65.7 548.4A167.4 167.4 0 0 1 67.4 528.6L68 515.8S66.6 501.2 66.6 495.1A135.1 135.1 0 0 1 85.6 452.7S114.3 401.9 112.4 368.7C112.4 368.7 112 337 123.6 319 123.6 319 131.8 408.8 126.2 434 126.2 434 100.4 496 106.1 542.2 110.3 576.5 118.4 649.9 126.6 678.9 130.9 693.9 128.4 731.7 131.8 741.2 133.3 745.3 132.5 749.1 129.2 758.4 117.6 790.9 119.1 813.8 148.2 900.1A103.5 103.5 0 0 1 152.6 953.6S134 991.8 145.9 992.6C145.9 992.6 146.9 995.1 150.9 993.1A12.3 12.3 0 0 0 164.3 996.1 9.9 9.9 0 0 0 176.2 996.7 8.2 8.2 0 0 0 187.1 997.7S195.5 1003.4 200.5 997.2C200.5 997.2 209.4 999.2 193.6 959A498.5 498.5 0 0 0 184.1 908C177.8 892.1 182.3 848.6 183.6 839.3A220.4 220.4 0 0 0 180.7 776.5C177.8 761.8 185.7 734 188.7 716.9 194.7 680.9 206.5 589.1 205.1 571.7L209.9 573.4A9.9 9.9 0 0 0 215.7 571.7Z", + "width": 421 + }, + "search": [ + "health-bmi" + ] + }, + { + "uid": "e72be05611e51608304a7c6f3b837607", + "css": "heart-rate-1", + "code": 59506, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M0 532.1V608.1H205.7A689.9 689.9 0 0 1 145.8 532.1ZM1151 532.1A690.1 690.1 0 0 1 1091 608.1H1296.7V532.1ZM420.4 222L545.9 598.4 590 532.1H699L802.2 284.8 913.5 532.3H1151A366.1 366.1 0 0 0 1218.2 324.2 318.2 318.2 0 0 0 971.8 5C843.9-20.1 726.9 46.1 648.4 183.9 570 46.6 453.5-19.1 325.8 5.6A322.2 322.2 0 0 0 78.5 324.2 366.1 366.1 0 0 0 145.8 532H317.1ZM804.8 475.7L749.7 608.1H630.7L522.9 769.6 420.5 462.3 371.9 608.1H205.7A2720.4 2720.4 0 0 0 486.1 863C529.5 899.1 648.4 1000 648.4 1000S767.4 899.1 810.6 863A2720.7 2720.7 0 0 0 1091 608.1H864.5Z", + "width": 1297 + }, + "search": [ + "heart-rate" + ] + }, + { + "uid": "344d3323e746d922961f90699be37942", + "css": "height-1", + "code": 59507, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M400 50V150H600V250H400V350H500V450H400V550H600V650H400V750H500V850H400V950A50 50 0 0 0 450 1000H750A50 50 0 0 0 800 950V50A50 50 0 0 0 750 0H450A50 50 0 0 0 400 50ZM0 200L150 29.3 300 200H200V1000H100V200Z", + "width": 800 + }, + "search": [ + "height" + ] + }, + { + "uid": "ec7c3d4c3a1a3a5c781fafdfc80d80b2", + "css": "obese-bmi-1", + "code": 59508, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M307.3 571.7C305.2 589.1 322 680.9 330.6 716.9 334.8 734 346.1 761.8 342 776.5A153.3 153.3 0 0 0 337.7 839.2C339.7 848.6 346 892 337 907.9A369.5 369.5 0 0 0 323.5 958.9C300.8 999.1 313.6 997.1 313.6 997.1 320.6 1003.2 332.7 997.6 332.7 997.6A15.3 15.3 0 0 0 348.1 996.6 18.9 18.9 0 0 0 365.2 996.1 22.4 22.4 0 0 0 384.2 993C389.9 995 391.3 992.5 391.3 992.5 408.3 991.7 381.8 953.5 381.8 953.5A76.3 76.3 0 0 1 388.1 900C429.5 813.7 431.7 790.8 415.1 758.3 410.4 748.9 409.2 745.2 411.4 741.1 416.3 731.7 412.7 693.9 418.8 678.8 430.5 649.9 442 576.4 448 542.1 456.1 495.9 419.4 434 419.4 434 411.4 408.8 423.1 319 423.1 319 439.6 336.9 439 368.6 439 368.6 436.4 401.9 477.2 452.7 477.2 452.7A118.4 118.4 0 0 1 504.3 495.1C504.3 501.1 502.4 515.8 502.4 515.8L503.2 528.5A129.3 129.3 0 0 1 505.7 548.3C502.6 581.6 510.2 575.3 510.2 575.3 516.5 575.3 523.5 548.5 523.5 548.5 523.5 555.4 521.1 576.1 526.4 583.9 532.7 593.2 537.4 582.3 537.5 580.1 539.2 537.8 542.8 548.9 542.8 548.9 546.3 583.2 550.7 591 558.4 588.3 564.3 586.3 558.9 547.1 558.9 547.1 569 570.4 576.7 574.1 576.7 574.1 593.3 582.3 583 559.6 580.7 555.1A99.2 99.2 0 0 1 568 523C583.4 544.5 595 543.6 595 543.6 610 540.3 581.9 509.9 565.4 495.4A126 126 0 0 1 543 472.2 203.5 203.5 0 0 1 534 430.1C532.4 392.3 519.1 375.9 519.1 375.9 496.3 350.3 492 302.5 492 302.5L491 221.9C483 166.9 425.3 166.5 425.3 166.5 366.9 160.4 358.8 147.2 358.8 147.2 346.4 134.7 353.5 110.8 353.5 110.8A38.7 38.7 0 0 0 367.7 89.4C384.7 80.2 383.9 66.8 376 66.9 369.7 67 371.2 63.4 371.2 63.4 381.9 3.1 305.5 0 305.5 0H293.9S217.5 3.1 228.1 63.4C228.1 63.4 229.6 67.1 223.2 67 215.4 66.8 214.6 80.3 231.6 89.4A38.7 38.7 0 0 0 245.8 110.8S252.9 134.8 240.5 147.2C240.5 147.2 232.4 160.5 174 166.6 174 166.6 116.2 167 108.3 222L107.2 302.6S103 350.3 80.2 375.9C80.2 375.9 66.9 392.4 65.4 430.2A204.8 204.8 0 0 1 56.4 472.3 124.6 124.6 0 0 1 33.9 495.5C17.3 510-10.7 540.2 4.3 543.7 4.3 543.7 16 544.5 31.3 523.1A98.1 98.1 0 0 1 18.7 555.2C16.3 559.6 6 582.3 22.6 574.2 22.6 574.2 30.3 570.4 40.4 547.1 40.4 547.1 35 586.4 41 588.4 48.8 591 53.1 583.3 56.6 548.9 56.6 548.9 60.2 537.8 61.9 580.2 62 582.4 66.5 593.3 72.9 584 78.3 576.2 75.9 555.5 75.9 548.6 75.9 548.6 82.8 575.4 89.2 575.4 89.2 575.4 96.8 581.7 93.7 548.4A119.1 119.1 0 0 1 96.2 528.5L96.9 515.8S95 501.1 95 495.1A118.3 118.3 0 0 1 122.1 452.7S162.9 401.8 160.3 368.6C160.3 368.6 159.7 336.9 176.2 319 176.2 319 187.9 408.8 180 434 180 434 143.2 495.9 151.3 542.1 157.3 576.5 168.8 649.9 180.5 678.8 186.6 693.8 183 731.7 187.9 741.1 190.1 745.2 188.9 749 184.2 758.3 167.7 790.8 169.8 813.7 211.3 900A75.6 75.6 0 0 1 217.6 953.5S191.1 991.7 208.1 992.5C208.1 992.5 209.4 995 215.1 993A22.4 22.4 0 0 0 234.2 996.1 18.8 18.8 0 0 0 251.2 996.6 15.2 15.2 0 0 0 266.7 997.6S278.7 1003.3 285.8 997.1C285.8 997.1 298.5 999.1 275.9 958.9A367.7 367.7 0 0 0 262.5 907.9C253.4 892.1 259.9 848.6 261.8 839.2A155.9 155.9 0 0 0 257.5 776.5C253.3 761.8 264.7 734 268.9 716.9 277.5 680.9 294.3 589.1 292.2 571.7L299.2 573.4A18.3 18.3 0 0 0 307.3 571.7Z", + "width": 599 + }, + "search": [ + "obese-bmi" + ] + }, + { + "uid": "4f949a0351be7f1870efaf1172e1e0a8", + "css": "ovrweight-bmi-1", + "code": 59509, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M240.4 571.7C238.7 589.1 251.9 680.9 258.6 716.9 261.9 734 270.7 761.8 267.5 776.5A194.7 194.7 0 0 0 264.2 839.2C265.7 848.6 270.7 892 263.6 907.9A454.8 454.8 0 0 0 253.1 958.9C235.3 999.1 245.3 997.1 245.3 997.1 250.8 1003.2 260.3 997.6 260.3 997.6A9.9 9.9 0 0 0 272.4 996.6 12 12 0 0 0 285.7 996.1 14.6 14.6 0 0 0 300.6 993C305.1 995 306.1 992.5 306.1 992.5 319.5 991.7 298.7 953.5 298.7 953.5A94.6 94.6 0 0 1 303.6 900C336.1 813.7 337.7 790.8 324.7 758.3 321.1 748.9 320.2 745.2 321.8 741.1 325.7 731.7 322.9 693.9 327.6 678.8 336.8 649.9 345.8 576.4 350.5 542.1 356.8 495.9 328.1 434 328.1 434 321.9 408.8 331.1 319 331.1 319 343.9 336.9 343.4 368.6 343.4 368.6 341.4 401.9 373.3 452.7 373.3 452.7A128.3 128.3 0 0 1 394.5 495.1C394.5 501.1 393 515.8 393 515.8L393.6 528.5A163.7 163.7 0 0 1 395.6 548.4C393.2 581.6 399.1 575.4 399.1 575.4 404.1 575.4 409.5 548.6 409.5 548.6 409.5 555.5 407.6 576.1 411.8 583.9 416.8 593.2 420.4 582.3 420.5 580.1 421.8 537.8 424.6 548.9 424.6 548.9 427.4 583.2 430.8 591 436.8 588.3 441.4 586.3 437.2 547.1 437.2 547.1 445.1 570.4 451.1 574.1 451.1 574.1 464.1 582.3 456.1 559.7 454.3 555.2A118.2 118.2 0 0 1 444.3 523C456.4 544.5 465.4 543.7 465.4 543.7 477.2 540.3 455.1 510 442.3 495.4A118.3 118.3 0 0 1 424.7 472.2 253.7 253.7 0 0 1 417.7 430.2C416.5 392.3 406.1 375.9 406.1 375.9 388.2 350.3 384.9 302.5 384.9 302.5L384.1 221.9C377.8 166.9 332.7 166.5 332.7 166.5 287.1 160.5 280.7 147.3 280.7 147.3 271 134.8 276.6 110.8 276.6 110.8A41.5 41.5 0 0 0 287.7 89.4C301 80.3 300.4 66.9 294.2 67 289.3 67.1 290.4 63.4 290.4 63.4 298.7 3.1 239 0 239 0H229.9S170.1 3.1 178.4 63.4C178.4 63.4 179.6 67.1 174.6 67 168.4 66.8 167.9 80.3 181.1 89.4A41.4 41.4 0 0 0 192.3 110.8S197.8 134.8 188.1 147.2C188.1 147.2 181.8 160.5 136.1 166.6 136.1 166.6 90.9 167 84.7 222L83.8 302.6S80.5 350.3 62.6 375.9C62.6 375.9 52.3 392.4 51.1 430.2A255.3 255.3 0 0 1 44 472.3 117.1 117.1 0 0 1 26.5 495.5C13.5 510-8.4 540.2 3.3 543.7 3.3 543.7 12.5 544.5 24.4 523.1A117 117 0 0 1 14.6 555.2C12.7 559.6 4.6 582.3 17.7 574.2 17.7 574.2 23.7 570.4 31.5 547.1 31.5 547.1 27.3 586.4 32 588.4 38.1 591 41.5 583.3 44.2 548.9 44.2 548.9 47.1 537.8 48.4 580.2 48.4 582.4 52 593.3 57 584 61.2 576.2 59.3 555.5 59.3 548.6 59.3 548.6 64.7 575.4 69.7 575.4 69.7 575.4 75.7 581.7 73.2 548.4A150.7 150.7 0 0 1 75.2 528.6L75.8 515.8S74.3 501.2 74.3 495.1A128.1 128.1 0 0 1 95.5 452.7S127.5 401.9 125.4 368.7C125.4 368.7 125 337 137.8 319 137.8 319 146.9 408.8 140.7 434 140.7 434 112 496 118.3 542.2 123 576.5 132 649.9 141.2 678.9 145.9 693.9 143.1 731.7 146.9 741.2 148.7 745.3 147.8 749.1 144 758.4 131.2 790.8 132.9 813.7 165.3 900A93.8 93.8 0 0 1 170.2 953.5S149.5 991.7 162.7 992.5C162.7 992.5 163.8 995 168.3 993A14.6 14.6 0 0 0 183.2 996.1 12 12 0 0 0 196.5 996.6 9.9 9.9 0 0 0 208.6 997.6S218 1003.3 223.6 997.1C223.6 997.1 233.5 999.1 215.8 958.9A452.6 452.6 0 0 0 205.3 907.9C198.2 892 203.2 848.5 204.7 839.2A198.1 198.1 0 0 0 201.4 776.5C198.1 761.8 207 734 210.2 716.9 217 680.9 230.2 589.1 228.5 571.7L233.9 573.4A11.9 11.9 0 0 0 240.4 571.7Z", + "width": 469 + }, + "search": [ + "ovrweight-bmi" + ] + }, + { + "uid": "05061dddffce90689cd95cb5ae8590b3", + "css": "qr-code-3", + "code": 59511, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M650 0V350H1000V0ZM900 250H750V100H900ZM350 200V0H0V350H450V200H350ZM250 250H100V100H250ZM700 550H800V700H900V450H550V550H600V650.1H700.1ZM700 800H600V900H500V1000H700V900H800V1000H950V900H900V800H700ZM350 800V650H0V1000H350V900H500V800ZM250 900H100V750H250Z", + "width": 1000 + }, + "search": [ + "qr-code" + ] + }, + { + "uid": "638a9ad84d757d58f60e640ad7a8a992", + "css": "lab-results-1", + "code": 59530, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M633.4 0L547 23.2 523.8 109.6 587 172.8 673.4 149.6C681.4 120.9 688.9 92.1 696.6 63.3ZM206.2 20.1V53.8H239.8C240.2 143.1 239.8 232.1 239.8 321.2 237.7 325.8 72 689.9 4.2 893.4A102.8 102.8 0 0 0 6.2 957.1 75.5 75.5 0 0 0 22.3 985.5 44.5 44.5 0 0 0 54.1 1000H628.1A44.5 44.5 0 0 0 659.9 985.5 75.5 75.5 0 0 0 676.1 957.1 102.8 102.8 0 0 0 678 893.4C610.2 689.9 444.4 325.9 442.5 321.2 442.8 232.1 442.7 143 442.7 53.8H476.5V20.1ZM815 52.1L728.6 75.2 705.6 161.6 768.8 224.9 855.2 201.7C862.7 172.9 870.6 144.1 878.4 115.3ZM408.8 53.8V222.8L273.6 223.2 273.6 54.3ZM684.3 177L597.9 200.2 574.7 286.6 638 349.8 724.4 326.6Q735.9 283.4 747.4 240.2ZM712.8 391.5V425.3H746.6V847.5A357 357 0 0 0 753 948 70.1 70.1 0 0 0 779.3 985.8 89.1 89.1 0 0 0 831 999.4 89 89 0 0 0 882.7 985.8 69.7 69.7 0 0 0 908.9 948 356.8 356.8 0 0 0 915.4 847.5V425.3H949.1V391.6ZM780.2 425.3H881.7V560.4H780.3ZM464.5 611.6A46.1 46.1 0 0 1 433.7 669.3 45.5 45.5 0 0 1 416.8 671L398.3 713.8A65.5 65.5 0 0 1 419 780.9L461.3 804.7A45.3 45.3 0 0 1 476.3 796.7 46.3 46.3 0 1 1 445.4 854.4 45.3 45.3 0 0 1 444.2 833.8L402.6 810.4A66.5 66.5 0 0 1 373.6 828.7 67.5 67.5 0 0 1 289.6 783.9 66.7 66.7 0 0 1 289.3 746.5L260.3 730.2A45.3 45.3 0 0 1 242.9 740.3 46.2 46.2 0 1 1 273.6 682.6 45.3 45.3 0 0 1 275.3 700L306.3 717.5A64.3 64.3 0 0 1 368 698.9L386.4 656.5A45.3 45.3 0 0 1 375.9 638.7 48.8 48.8 0 0 1 418.7 579.7 43.1 43.1 0 0 1 464.5 611.8Z", + "width": 949 + }, + "search": [ + "lab-results" + ] + }, + { + "uid": "42b7a4fc84d097a747fb78e47ffc89b8", + "css": "health-summary-1", + "code": 59529, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M714.1 956.9H146.5A97 97 0 0 1 47.4 862.1V79.8A63 63 0 0 0 0 137.9V939.7A62.5 62.5 0 0 0 64.7 1000H652A63.3 63.3 0 0 0 714.1 956.9ZM714.1 956.9M799.6 862.1V435.3H312.3L312 462C312 462.3 312 461.2 312 463.4H519.4A17.2 17.2 0 1 1 519.4 497.9H310.1A32.1 32.1 0 0 1 287.8 487.8 38 38 0 0 1 277.5 461.2L277.7 435.4H241.3A16.9 16.9 0 0 1 224.1 418.5V416H172.3A17.2 17.2 0 0 1 155.1 398.9L154.5 324A17.8 17.8 0 0 1 171.8 306.2H171.8L224 307.2V304.9A18 18 0 0 1 241.2 286.6H799.6V209.1H653.6A56.2 56.2 0 0 1 597 152.5V0H146.4A63.1 63.1 0 0 0 81.4 58.1 16.8 16.8 0 0 1 81.9 60.3C81.9 61.2 81.9 62.1 81.9 63V862.1A62.6 62.6 0 0 0 146.4 922.4H733.8A63.6 63.6 0 0 0 799.6 862.1ZM172.5 543.1H456A17.2 17.2 0 1 1 456 577.6H172.5A17.2 17.2 0 0 1 172.5 543.1ZM665.8 829.7H172.5A17.2 17.2 0 0 1 172.5 795.2H665.8A17.2 17.2 0 0 1 665.8 829.7ZM665.8 745.6H172.5A17.2 17.2 0 0 1 172.5 711.2H665.8A17.2 17.2 0 1 1 665.8 745.6ZM665.8 661.6H172.5A17.2 17.2 0 0 1 172.5 627.1H665.8A17.2 17.2 0 1 1 665.8 661.6ZM665.8 661.6M773.5 174.6L631.5 27.6V152.5A21.8 21.8 0 0 0 653.6 174.5ZM773.5 174.6M898.7 336.6V386.6L937.2 361.6ZM898.7 336.6M258.6 321.1H864.2V400.9H258.6ZM258.6 321.1M224.1 381.5V341.5L189.2 341.1 189.4 381.5ZM224.1 381.5", + "width": 937 + }, + "search": [ + "health-summary" + ] + }, + { + "uid": "cbf3ee4dea491660e9f9dd8d3db58b7d", + "css": "ecg-1", + "code": 59528, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M34.6 0H965.4A34.6 34.6 0 0 1 1000 34.6V464.3L698.3 464.3A35.7 35.7 0 0 0 665 487.3L598.8 660.6 433.1 226.5A35.5 35.5 0 0 0 399.8 203.5H399.8A35.5 35.5 0 0 0 366.4 226.4L275.4 464.5 0 464.3V34.6A34.6 34.6 0 0 1 34.6 0ZM965.4 1000A34.6 34.6 0 0 0 1000 965.4V535.7L722.9 535.7 632.2 773.5A35.7 35.7 0 0 1 565.4 773.5L399.7 339.3 333.4 512.8A35.7 35.7 0 0 1 300 535.8H300L0.2 535.8V965.4A34.6 34.6 0 0 0 34.8 1000H965.4Z", + "width": 1000 + }, + "search": [ + "ecg" + ] + }, + { + "uid": "72c30fde2a53eed52ca204cb3f2f3da5", + "css": "admission-req-1", + "code": 59525, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M0 1000H1101.9V598.3H0ZM518.7 689.9H583.2V762.6H655.9V827.1H583.2V899.8H518.7V827.1H445.9V762.6H518.6ZM64.5 458.4H1037.3V533.7H64.5ZM422.6 178C422.6 176.1 422.6 174.2 422.4 172.3H219.5C219.5 174.2 219.3 176.1 219.3 178A101.7 101.7 0 0 0 309.7 278.9H332.1A101.7 101.7 0 0 0 422.6 178ZM288.7 279H258.4A129.4 129.4 0 0 0 129.9 393.8H288.7V279ZM383.6 279H353.3V393.8H512.1A129.4 129.4 0 0 0 383.6 279ZM425.1 107.8L444.1 22.7A344.4 344.4 0 0 0 198.1 22.7L217 107.8ZM639.1 241.7H972.7V393.9H639.1Z", + "width": 1102 + }, + "search": [ + "admission-req" + ] + }, + { + "uid": "e323582b66d81cd517a4e1eb7bf1f399", + "css": "booked-1", + "code": 59526, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M907.9 1000H162.7A163.1 163.1 0 0 1 0 837.9V321.9H1070.7V837.9A163.1 163.1 0 0 1 907.9 1000.3ZM71.4 393.3V837.9A91.7 91.7 0 0 0 162.7 928.8H907.9A91.7 91.7 0 0 0 999.2 837.9V393.3ZM1070.7 393H0V235.7A163.1 163.1 0 0 1 162.7 72.1H907.9A163.1 163.1 0 0 1 1070.6 235.7ZM71.4 321.9H999.2V235.7A91.7 91.7 0 0 0 907.9 143.6H162.7A91.7 91.7 0 0 0 71.4 235.7ZM46.8 357.6V937.5H1017.1V357.6ZM356.9 717.3A35.7 35.7 0 1 1 392.6 681.6 35.7 35.7 0 0 1 356.9 717.3ZM535.3 717.3A35.7 35.7 0 1 1 571 681.6 35.7 35.7 0 0 1 535.3 717.3ZM713.8 717.3A35.7 35.7 0 1 1 749.4 681.6 35.7 35.7 0 0 1 713.8 717.3Z", + "width": 1071 + }, + "search": [ + "booked" + ] + }, + { + "uid": "17d952ce25a93720aba9a7695bd1d3eb", + "css": "walkin-1", + "code": 59524, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M271.2 118.6H305.1A50.4 50.4 0 0 0 334.2 164.4 101.6 101.6 0 1 0 254.2 203.4 100 100 0 0 0 307.5 188.3 85.2 85.2 0 0 1 271.2 118.6ZM168 639.4L135.6 779.7 33.9 932.2 118.6 1000 254.2 813.6 274.5 746.2 171.1 642.8C170 641.7 169.1 640.5 168 639.4ZM108.3 529.8A238 238 0 0 1 101.7 475.1V385L0 508.4 67.8 576.4ZM383.6 583.9L227.8 498.8 155.6 335.8 186.6 322 254.4 474.6 372.9 539.4 440.7 576.4 491.6 491.4 373 420.2V271.2A67.8 67.8 0 0 0 305.1 203.4H203.4A67.8 67.8 0 0 0 135.6 271.2V475.2A203.2 203.2 0 0 0 195.1 618.9L339.1 762.9 389.9 983.2H491.6L440.8 712Z", + "width": 492 + }, + "search": [ + "walkin" + ] + }, + { + "uid": "7a3477a769ec5811e772756dc57b7622", + "css": "vital-signs-1", + "code": 59523, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M0 532.1V608.1H205.7A689.9 689.9 0 0 1 145.8 532.1ZM1151 532.1A690.1 690.1 0 0 1 1091 608.1H1296.7V532.1ZM420.4 222L545.9 598.4 590 532.1H699L802.2 284.8 913.5 532.3H1151A366.1 366.1 0 0 0 1218.2 324.2 318.2 318.2 0 0 0 971.8 5C843.9-20.1 726.9 46.1 648.4 183.9 570 46.6 453.5-19.1 325.8 5.6A322.2 322.2 0 0 0 78.5 324.2 366.1 366.1 0 0 0 145.8 532H317.1ZM804.8 475.7L749.7 608.1H630.7L522.9 769.6 420.5 462.3 371.9 608.1H205.7A2720.4 2720.4 0 0 0 486.1 863C529.5 899.1 648.4 1000 648.4 1000S767.4 899.1 810.6 863A2720.7 2720.7 0 0 0 1091 608.1H864.5Z", + "width": 1297 + }, + "search": [ + "vital-signs" + ] + }, + { + "uid": "d3660bff417230e14b3ddaa868eee919", + "css": "ucaf-1", + "code": 59522, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M529.3 60V0H470.7V60C201.6 73.3 0 271.4 0 529.3V576.7L42.3 555.7A289.7 289.7 0 0 1 148.4 529.5 171.9 171.9 0 0 1 245.1 579.5L265.8 600 286.4 579.5A171.9 171.9 0 0 1 383.1 529.5 159.1 159.1 0 0 1 471 571.7V912.1A87.9 87.9 0 0 0 646.8 912.1V853.5H587.9V912.1A29.3 29.3 0 0 1 529.3 912.1V571.5A159.1 159.1 0 0 1 617.2 529.3 171.9 171.9 0 0 1 713.9 579.3L734.6 599.8 755.2 579.3A178.1 178.1 0 0 1 853.7 529.3 274.1 274.1 0 0 1 957.8 555.5L1000 576.7V529.3C1000 271.4 798.4 73.3 529.3 60Z", + "width": 1000 + }, + "search": [ + "ucaf" + ] + }, + { + "uid": "6a176d9d936657bf21eb9de1201f5a1c", + "css": "radiology-2", + "code": 59520, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M1218.7 937.5H906.2V812.6C1109.3 812.6 1107.4 817.2 1119.6 798.6L1174 718.9A93.7 93.7 0 0 0 1185.6 537.8 187.5 187.5 0 0 0 1000 375H870.2A437.5 437.5 0 0 0 437.4 0C10.4 0-162.9 552.5 187.4 795.9V937.5H93.7A31.4 31.4 0 1 0 93.7 1000H1218.7A31.4 31.4 0 1 0 1218.7 937.5ZM159 476.2A281.3 281.3 0 0 1 679.3 294.1 273.1 273.1 0 0 1 710.7 375C637.5 375 655.7 403.1 648.2 376.9 653.8 393.8 651.3 384.7 635.4 398.7A125 125 0 0 0 423.9 531.3 93.8 93.8 0 0 0 428.5 718.8 281.3 281.3 0 0 1 159.2 476.3ZM1156.2 593.7A31.4 31.4 0 0 1 1177.7 647.1C1164.9 660.6 1218.7 656.2 437.4 656.2A31.4 31.4 0 0 1 415.9 602.8C428.4 589.4 377.4 593.8 1156.2 593.8ZM579.3 750L558.4 718.6H724A99.1 99.1 0 0 0 718.7 750ZM468.7 468.7A62.5 62.5 0 1 1 531.2 531.2 62.5 62.5 0 0 1 468.7 468.7ZM687.4 812.6H718.8V937.5H687.4ZM1076.8 750.1H906.2A93.7 93.7 0 0 0 900.9 718.7H1097.8ZM1120.8 531.3C667.7 531.3 693.7 534.4 677.7 523.8A46.6 46.6 0 0 1 669.9 451.3C687.4 431.6 689 437.6 999.9 437.6A125 125 0 0 1 1120.9 531.3ZM406.2 843.7H468.7V937.5H406.2Z", + "width": 1250 + }, + "search": [ + "radiology" + ] + }, + { + "uid": "0347a4fbc965dd15778a1025d6ec56a0", + "css": "progress-notes-2", + "code": 59519, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M400 266.7V33.4A33.4 33.4 0 0 1 466.6 33.4V266.7ZM300 933.3A99.3 99.3 0 0 1 229.3 904.1 1011.6 1011.6 0 0 1 0 550.5V966.6A33.4 33.4 0 0 0 33.4 1000H833.3A33.4 33.4 0 0 0 866.7 966.6V933.3ZM1128 809.7A885.7 885.7 0 0 1 866.6 189.5V166.6A33.4 33.4 0 0 0 833.3 133.3H533.3V300A33.4 33.4 0 0 1 500 333.3H366.6A33.4 33.4 0 0 1 333.3 300V133.3H33.4A33.4 33.4 0 0 0 0 166.7V189.6A943.4 943.4 0 0 0 276.4 856.9 33.4 33.4 0 0 0 300 866.7H1104.5A33.4 33.4 0 0 0 1128.1 809.8ZM433.3 400H700A33.4 33.4 0 0 1 700 466.6H433.3A33.4 33.4 0 0 1 433.3 400ZM700 733.3H366.7A33.4 33.4 0 0 1 366.7 666.6H700A33.4 33.4 0 0 1 700 733.3ZM766.7 600H300A33.4 33.4 0 1 1 300 533.3H766.7A33.4 33.4 0 1 1 766.7 600Z", + "width": 1138 + }, + "search": [ + "progress-notes" + ] + }, + { + "uid": "9ef83ec11b2967f90944d218ac5b94af", + "css": "patient-sick-leave-1", + "code": 59518, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M664.4 0H92.6A92.7 92.7 0 0 0 0 92.6V907.4A92.7 92.7 0 0 0 92.6 1000H664.3A92.7 92.7 0 0 0 756.9 907.4V92.6A92.7 92.7 0 0 0 664.4 0ZM118.7 167.8L176.4 68.5A20.8 20.8 0 1 1 212.4 89.3L173 157.2H587.9L556.4 87.4A20.8 20.8 0 1 1 594.4 70.1L639.1 169.5A20.8 20.8 0 0 1 620.1 198.9H136.8A20.8 20.8 0 0 1 118.7 167.8ZM644.6 608.6H492.4A20.8 20.8 0 0 1 472.7 594.7L458.3 554.1 423.7 813.6A20.8 20.8 0 0 1 403.7 831.6H403.1A20.8 20.8 0 0 1 382.7 814.7L312.5 452.1 266.5 606.1A20.8 20.8 0 0 1 246.6 621H112.3A20.8 20.8 0 1 1 112.3 579.5H231.1L296.8 358.9A20.8 20.8 0 0 1 337.2 360.9L399.1 681.8 428.4 463.2A20.8 20.8 0 0 1 446.8 445.3 21.3 21.3 0 0 1 468.7 459.1L507 567.1H644.5A20.8 20.8 0 1 1 644.5 608.6Z", + "width": 757 + }, + "search": [ + "patient-sick-leave" + ] + }, + { + "uid": "f7865ba708db3b174c76175ee117fc7c", + "css": "refer-patient-1", + "code": 59521, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M264.4 666.7L351.6 775.7 267.1 860.3 228.5 667.7C235.7 667.1 242.9 666.7 250.1 666.7ZM442.2 666.7L388.9 733.3 335.6 666.6ZM513.4 666.7H527.7C534.9 666.7 542.1 667.1 549.3 667.7L510.8 860.3 426.2 775.7ZM638.9 444.4H637.2A248 248 0 0 0 638.9 416.7V333.3A55.6 55.6 0 0 1 638.9 444.4ZM138.9 166.7A166.8 166.8 0 0 1 305.5 0H472.2A166.8 166.8 0 0 1 638.9 166.7V277.8H527.8A55.6 55.6 0 0 1 472.2 222.2V111.1H416.7V138.9A139 139 0 0 1 277.8 277.8H138.9ZM138.9 444.4A55.6 55.6 0 1 1 138.9 333.3V416.7A248 248 0 0 0 140.5 444.4ZM194.5 416.7V333.3H277.8A194.1 194.1 0 0 0 425.3 265.1 111.4 111.4 0 0 0 527.8 333.3H583.3V416.7A194.5 194.5 0 0 1 194.5 416.7ZM777.8 1000H0V916.6A250.4 250.4 0 0 1 174 678.5L222.9 922.1A27.8 27.8 0 0 0 242 943.2 28.4 28.4 0 0 0 250.1 944.4 27.8 27.8 0 0 0 269.7 936.3L389 817 508.2 936.3A27.8 27.8 0 0 0 554.9 922.1L603.9 678.5A250.5 250.5 0 0 1 777.8 916.6ZM943.7 123A22 22 0 0 1 965.7 101H1000.6L899.6 0 798.6 101H833.5A22 22 0 0 1 855.6 123 264.2 264.2 0 0 1 738 342.7 220.4 220.4 0 0 0 943.7 123Z", + "width": 1001 + }, + "search": [ + "refer-patient" + ] + }, + { + "uid": "7c6d81832f8802ae84362cefea6d9585", + "css": "order-procedures-1", + "code": 59517, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M1040.4 721.4L997.6 778.4 1054.8 821.3H926A142.7 142.7 0 0 0 788.2 714.3H430.9A142.7 142.7 0 0 0 293.1 821.3H214.3A142.8 142.8 0 0 1 214.3 535.6H293.1A142.7 142.7 0 0 0 430.9 642.6H788.1A142.7 142.7 0 0 0 925.9 535.6H1004.8A214.3 214.3 0 1 0 1004.8 107H926A142.7 142.7 0 0 0 788.1 0H430.9A142.7 142.7 0 0 0 293.1 107H261.9L128.6 7.2 85.7 64.3 142.8 107H0V178.6H142.8L85.7 221.4 128.6 278.6 261.9 178.6H293.2A142.7 142.7 0 0 0 431 285.5H788.1A142.7 142.7 0 0 0 926 178.6H1004.9A142.8 142.8 0 1 1 1004.9 464.3H926A142.7 142.7 0 0 0 788.2 357.3H430.9A142.7 142.7 0 0 0 293.1 464.3H214.3A214.3 214.3 0 1 0 214.3 892.8H293.1A142.7 142.7 0 0 0 430.9 999.8H788.1A142.7 142.7 0 0 0 926 892.8H1054.9L997.7 935.7 1040.4 992.8 1218.9 857.2ZM1040.4 721.4", + "width": 1219 + }, + "search": [ + "order-procedures" + ] + }, + { + "uid": "fc33e99d336b9a8766b950e84d6bd2d0", + "css": "order-prescription-1", + "code": 59516, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M596.3 192.4A28.8 28.8 0 0 0 588.5 172.7L434.6 9.1A28.9 28.9 0 0 0 413.6 0H404V202H596.3ZM596.3 192.4M567.2 567.5A164.8 164.8 0 0 1 596.3 570.1V259.7H375.1A28.9 28.9 0 0 1 346.3 230.8V0H28.9A28.9 28.9 0 0 0 0 28.9V769.5A28.9 28.9 0 0 0 28.9 798.3H271.5A163.6 163.6 0 0 1 288.4 778.6L451.6 615.5A162.4 162.4 0 0 1 567.2 567.5ZM240.4 336.6H269.3V307.8A28.9 28.9 0 1 1 327 307.8V336.6H355.9A28.9 28.9 0 1 1 355.9 394.3H327V423.2A28.9 28.9 0 0 1 269.3 423.2V394.3H240.4A28.9 28.9 0 0 1 240.4 336.6ZM144.3 509.8H452A28.9 28.9 0 1 1 452 567.5H144.3A28.9 28.9 0 0 1 144.3 509.8ZM336.6 682.9H144.3A28.9 28.9 0 1 1 144.3 625.2H336.6A28.9 28.9 0 1 1 336.6 682.9ZM336.6 682.9M329.1 819.4A105.8 105.8 0 1 0 478.8 969L540 907.8 390.4 758.1ZM329.1 819.4M642 656.2A105.8 105.8 0 0 0 492.4 656.2L431.2 717.4 580.8 867 642 805.8A105.9 105.9 0 0 0 642 656.2ZM642 656.2", + "width": 673 + }, + "search": [ + "order-prescription" + ] + }, + { + "uid": "3c62b35ba91d956be23daa4542e78fd1", + "css": "modify-episode-1", + "code": 59515, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M825.8 83.3A125 125 0 0 0 708.3 0H125A125.4 125.4 0 0 0 0 125V708.3A125 125 0 0 0 83.3 825.8V291.7A208.3 208.3 0 0 1 291.7 83.3ZM875 1000H291.7A125.8 125.8 0 0 1 166.7 875V291.6A125.7 125.7 0 0 1 291.7 166.6H875A125.7 125.7 0 0 1 1000 291.6V875A125.7 125.7 0 0 1 875 1000ZM650.9 428.6H650.9L370.5 709A21.9 21.9 0 0 0 365.1 717.8L333.1 813A22.3 22.3 0 0 0 338.6 836 22.6 22.6 0 0 0 354.6 842.5 21.4 21.4 0 0 0 361.7 841.4L456.9 809.7A22.5 22.5 0 0 0 465.6 804.3L746 523.8 650.8 428.6ZM746.2 349A37.4 37.4 0 0 0 719.7 359.9L682.7 397 777.9 492.1 814.9 455.1A37.1 37.1 0 0 0 825.9 428.6 36.8 36.8 0 0 0 814.9 402.2L772.6 359.8A37.4 37.4 0 0 0 746.1 349.1Z", + "width": 1000 + }, + "search": [ + "modify-episode" + ] + }, + { + "uid": "d905b0ec32bad6997ccde356f970af67", + "css": "livecare-1", + "code": 59514, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M359.7 999.9H201.4A198.3 198.3 0 0 1 123.3 984 203.2 203.2 0 0 1 16.1 877 197.1 197.1 0 0 1 0.2 799.1V200.7A197.7 197.7 0 0 1 16.1 122.7 203 203 0 0 1 123.2 15.8 197.7 197.7 0 0 1 201 0H943.2A197.7 197.7 0 0 1 1021.2 15.9 202.9 202.9 0 0 1 1128.1 123 197.7 197.7 0 0 1 1143.3 200.8V348.4A165.5 165.5 0 0 0 1143.3 658.1V798.8A198.3 198.3 0 0 1 1127.7 876.9 202.3 202.3 0 0 1 1020.9 984.1 197.7 197.7 0 0 1 943 1000H769.8A523.4 523.4 0 0 0 826.4 943.9 52.2 52.2 0 0 0 837.9 902.6 762.6 762.6 0 0 0 945.5 700.1 735.6 735.6 0 0 0 974.8 593.4 534.2 534.2 0 0 0 985 493.3 353.7 353.7 0 0 0 969.2 377.4 151.4 151.4 0 0 0 923.5 309.3 216.9 216.9 0 0 0 851 271.4C822.4 261.7 789.4 254.2 754.4 246.2H754.4L754.4 246.2A54 54 0 0 0 706.1 215.5 54.9 54.9 0 1 0 706.1 325.4 52.7 52.7 0 0 0 738.4 313.3L739.7 313.7H739.7L740.6 313.7C775.5 321.8 803.1 328.4 826 335.7A149.3 149.3 0 0 1 880.4 363.5 93 93 0 0 1 908.6 411.4 320 320 0 0 1 916.7 493.8 460.9 460.9 0 0 1 907.2 582.5 666.4 666.4 0 0 1 880.5 677.7 743.1 743.1 0 0 1 838.7 772.4 656 656 0 0 1 784.3 859 52.4 52.4 0 0 0 748.2 876.5 370.9 370.9 0 0 1 670.2 946.2 179.5 179.5 0 0 1 459.8 946.2 368 368 0 0 1 381.8 876.9 52.4 52.4 0 0 0 345.7 859.4 659.1 659.1 0 0 1 291.2 772.5 747 747 0 0 1 249.4 677.3 664.2 664.2 0 0 1 222.6 582.1 463.2 463.2 0 0 1 213.1 493.3 323.7 323.7 0 0 1 221.1 410.8 92.7 92.7 0 0 1 249.2 362.9 148.8 148.8 0 0 1 303.6 335.1C326.8 327.8 355.9 321 389.6 313.1L390.3 313.1H390.3L390.8 312.7A54.1 54.1 0 0 0 423.8 324.9 54.8 54.8 0 1 0 423.8 215 53.1 53.1 0 0 0 394.5 223.7 59.5 59.5 0 0 0 374.6 245.6H374.6L373.9 245.6C230.3 278.8 143.6 298.8 143.6 492.9A534.1 534.1 0 0 0 153.9 593.2 737.8 737.8 0 0 0 183.2 700 757.5 757.5 0 0 0 291.6 902.9 52 52 0 0 0 303.2 944.1 529.8 529.8 0 0 0 359.1 999.6H359.1ZM1787.8 895.3H1706.6A70 70 0 0 1 1669.9 884.8L1332 671.5A33.4 33.4 0 0 1 1316.4 643.4V622.6A165.3 165.3 0 0 0 1316.4 384.5V347A33.4 33.4 0 0 1 1332 318.9L1669.9 105.6A66.9 66.9 0 0 1 1706.6 95.1H1787.8A33.5 33.5 0 0 1 1821.5 128.2V862.6A32.9 32.9 0 0 1 1811.7 886 33.5 33.5 0 0 1 1787.9 895.7ZM467.9 673.5H485.2L539.5 673.5C546 673.5 551.4 666.6 551.7 656.7V611.6C551.7 601.9 556 594.4 562.7 593.9L579.3 593.9C586.1 594.4 590.7 602 590.7 611.6V656.8C590.7 666.8 595.5 673.2 602.1 673.2L675.3 673.2 675.3 617.1C675.3 607.5 670.7 600 663.9 599.6L634.6 599.6C628.1 599.6 623.1 592.7 622.8 582.7L622.8 567.6C622.8 557.6 628.2 550.8 634.7 550.8H664C670.7 550.3 675.1 542.4 675.1 532.8V463.3A29.8 29.8 0 0 1 652.4 477.4H602.8C596.3 477.4 590.9 484.7 590.6 494.4V539.7C590.6 549.6 585.3 556.6 578.8 556.6L564.1 556.6C557.6 556.6 552.4 549.8 552.1 539.9V494C552.1 484.1 546.7 477.4 540.2 477.4H468.1V533.3C468.1 543 472.6 550.6 479.4 551.2L508.7 551.2C515.3 551.6 520.1 559.6 520.1 569.2V582.1C520.1 591.8 515.6 599.5 508.8 599.9H479.5C472.8 600.4 468.3 608.1 468.3 617.6ZM716 459.1V693.1A29.7 29.7 0 0 1 686 721.3H455.4A29.3 29.3 0 0 1 425.6 693.1V459.1A29.7 29.7 0 0 1 455.4 430.5H685.9A30.2 30.2 0 0 1 716 459.1ZM468.1 673.5H485.5L539.7 673.5C546.2 673.5 551.6 666.6 551.9 656.7V611.6C551.9 601.9 556.2 594.4 562.9 593.9L579.6 593.9C586.2 594.4 590.8 602 590.8 611.6V657.2C590.8 667.2 595.7 673.6 602.2 673.6L675.4 673.6 675.4 617.5C675.4 607.8 670.8 600.4 664.1 599.9L634.8 599.9C628.3 599.9 623.2 593 622.9 583.1L622.9 567.9C622.9 558 628.3 551.2 634.9 551.2H664.2C670.9 550.7 675.2 542.8 675.2 533.2V463.3A29.8 29.8 0 0 1 652.6 477.4H602.9C596.5 477.4 591.1 484.7 590.8 494.4V539.4C590.8 549.3 585.4 556.3 578.9 556.3L563.9 556.3C557.4 556.3 552.2 549.5 551.9 539.6V494.2C551.9 484.2 546.5 477.6 539.9 477.6H468.1V533.4C468.1 543.1 472.6 550.8 479.4 551.3L508.7 551.3C515.3 551.7 520.1 559.7 520.1 569.3V582.3C520.1 591.9 515.6 599.6 508.8 600.1H479.5C472.8 600.5 468.3 608.2 468.3 617.8ZM1202.1 400.4A96.2 96.2 0 1 1 1106 496.6H1106A96.2 96.2 0 0 1 1202.1 400.4Z", + "width": 1821 + }, + "search": [ + "livecare" + ] + }, + { + "uid": "18574a405555b8e83d46a43a1e755ea7", + "css": "logout-1", + "code": 59513, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M500 0A500 500 0 1 0 1000 500 500.5 500.5 0 0 0 500 0ZM470.7 167.9A29.3 29.3 0 1 1 529.3 167.9V402.3A29.3 29.3 0 0 1 470.7 402.3ZM500 822.3A322.2 322.2 0 0 1 371.2 204.7 29.3 29.3 0 0 1 394.7 258.4 263.7 263.7 0 1 0 605.6 258.4 29.3 29.3 0 0 1 629.1 204.8 322.2 322.2 0 0 1 500 822.3Z", + "width": 1000 + }, + "search": [ + "logout" + ] + }, + { + "uid": "540c904ee995ff64cca5493caae9c2db", + "css": "reschedule--1", + "code": 59512, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M484.5 67.2L7.6 3.6A17.9 17.9 0 0 0 0 17.9V920.2A17.9 17.9 0 0 0 15.5 937.9L479.8 999.8A17.9 17.9 0 0 0 493.8 995.7 17.5 17.5 0 0 0 500 982.3V84.9A17.9 17.9 0 0 0 484.5 67.2ZM423.3 512.6L369.7 566.3A17.9 17.9 0 0 1 344.4 541L367.5 518H89.3A17.9 17.9 0 1 1 89.3 482.3H367.6L344.5 459.2A17.9 17.9 0 0 1 369.8 433.9L423.5 487.6A17.9 17.9 0 0 1 423.5 512.8ZM535.7 201.4A336 336 0 0 1 643 165V17.9A17.9 17.9 0 0 0 625.2 0H251.5L489.4 31.7A53.7 53.7 0 0 1 535.9 84.9V201.4ZM535.7 928.5H625A17.9 17.9 0 0 0 642.9 910.6V834.8A336 336 0 0 1 535.5 798.4ZM696.4 196.4A301.3 301.3 0 0 0 535.7 242.9V286.2A267.5 267.5 0 1 1 831.7 730.9C831.2 731.2 830.9 731.7 830.4 732A13.8 13.8 0 0 1 828.6 732.7 266.1 266.1 0 0 1 535.7 713.9V757.2A303.5 303.5 0 1 0 696.4 196.4ZM598.2 329.9A17.9 17.9 0 0 1 573.8 323.3L565.3 308.5A234.4 234.4 0 0 0 535.7 332.9V667.1A234.5 234.5 0 0 0 565.3 691.5L573.8 676.7A17.9 17.9 0 1 1 604.8 694.5L596.3 709.2A229.9 229.9 0 0 0 678.6 731.3V714.3A17.9 17.9 0 1 1 714.3 714.3V731.2A229.9 229.9 0 0 0 796.6 709.1L788.3 694.5A17.9 17.9 0 1 1 819.2 676.6L827.7 691.4A233.9 233.9 0 0 0 888 631.1L873.3 622.6A17.9 17.9 0 1 1 891.2 591.7L905.8 599.9A229.7 229.7 0 0 0 927.9 517.7H910.9A17.9 17.9 0 0 1 910.9 482H927.8A229.7 229.7 0 0 0 905.7 399.7L891.1 408A17.9 17.9 0 1 1 873.2 377.1L887.9 368.6A233.9 233.9 0 0 0 827.7 308.3L819.2 323A17.9 17.9 0 1 1 788.2 305.1L796.5 290.5A229.8 229.8 0 0 0 714.2 268.4V285.4A17.9 17.9 0 1 1 678.5 285.4V268.4A229.9 229.9 0 0 0 596.2 290.4L604.7 305.1A17.9 17.9 0 0 1 598.2 329.9ZM678.6 449.6V374.9A17.9 17.9 0 0 1 714.3 374.9V449.6A53.7 53.7 0 0 1 746.8 482H785.8A17.9 17.9 0 1 1 785.8 517.7H746.8A53.5 53.5 0 1 1 678.7 449.6Z", + "width": 1000 + }, + "search": [ + "reschedule-" + ] + }, + { + "uid": "973fdf63aeccbd095872d42af142b109", + "css": "dr-reply-active-1", + "code": 59552, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M1023.2 547.7H1029.4A86.7 86.7 0 0 1 1162.4 438.2L1200.4 476.2V101.1A101.2 101.2 0 0 0 1099.2 0H101.2A101.2 101.2 0 0 0 0 101.1V799A101.2 101.2 0 0 0 101.2 900.2H798.6A247.7 247.7 0 0 1 1023.1 547.8ZM251.2 136.3H949.2L600.1 392.2ZM1266.6 603.7L1131.7 468.8A43.4 43.4 0 1 0 1070.5 529.9L1131.5 590.9H1023.1A204.5 204.5 0 0 0 1023.1 999.9 43.4 43.4 0 1 0 1023.1 913.2 117.9 117.9 0 0 1 1023.1 677.1H1131.5L1070.5 738A43.4 43.4 0 0 0 1131.7 799.2L1266.6 664.3A43.4 43.4 0 0 0 1266.6 603.1Z", + "width": 1279 + }, + "search": [ + "dr-reply-active" + ] + }, + { + "uid": "796f61b873eb713c3cb184c49e70853f", + "css": "home-1", + "code": 59553, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M1066.3 519.6A79.1 79.1 0 0 1 991.7 571.5H964.4V964.3A35.7 35.7 0 0 1 928.7 1000H714.4V750A178.6 178.6 0 0 0 357.2 750V1000H142.9A35.7 35.7 0 0 1 107.2 964.3V571.5H79.9A80 80 0 0 1 27.4 431.5L444.5 36.3A132.8 132.8 0 0 1 627.1 36.3L1045.2 432.3A78.7 78.7 0 0 1 1066.3 519.6Z", + "width": 1072 + }, + "search": [ + "home" + ] + }, + { + "uid": "897422687ecd85c646013dbd38e16548", + "css": "home-active-1", + "code": 59554, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M1066.3 519.6A79.1 79.1 0 0 1 991.7 571.5H964.4V964.3A35.7 35.7 0 0 1 928.7 1000H714.4V750A178.6 178.6 0 0 0 357.2 750V1000H142.9A35.7 35.7 0 0 1 107.2 964.3V571.5H79.9A80 80 0 0 1 27.4 431.5L444.5 36.3A132.8 132.8 0 0 1 627.1 36.3L1045.2 432.3A78.7 78.7 0 0 1 1066.3 519.6Z", + "width": 1072 + }, + "search": [ + "home-active" + ] + }, + { + "uid": "5ca2a97037189bebb49149bf4e66c560", + "css": "view-1", + "code": 59536, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M776.8 250A250 250 0 1 0 1026.8 500 250.2 250.2 0 0 0 776.8 250ZM757.8 425.9A57.4 57.4 0 0 0 700.9 482.8H618.1A141.3 141.3 0 0 1 757.8 343.1ZM1535.4 448.3C1450.9 343.1 1149.2-0.1 776.8-0.1S102.6 342.9 18.1 448.3A82.9 82.9 0 0 0 18.1 551.8C102.6 657 404.3 1000.1 776.8 1000.1S1450.9 657 1535.4 551.8A82.9 82.9 0 0 0 1535.4 448.3ZM776.8 862.1A362 362 0 1 1 1138.8 500 362 362 0 0 1 776.8 862.1Z", + "width": 1553 + }, + "search": [ + "view" + ] + }, + { + "uid": "e7141300a3db6362879b519165a6692a", + "css": "warning-1", + "code": 59537, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M1165.9 890.7L649.9 34.8A72.1 72.1 0 0 0 526.5 34.8L10.4 890.7A72.1 72.1 0 0 0 72.1 1000H1104.2A72.1 72.1 0 0 0 1165.9 890.7ZM588.5 296.1A48.8 48.8 0 0 1 643.3 342.4C643.3 432.8 632.7 562.8 632.7 653.2 632.7 676.8 606.8 686.9 588.6 686.9 564.3 686.9 543.7 677 543.7 653.2 543.7 562.8 533.1 432.8 533.1 342.4 533.1 312.8 557.3 296.1 588.5 296.1ZM589.3 856.1A58.5 58.5 0 1 1 647.1 797.6 59.4 59.4 0 0 1 589.3 856.1Z", + "width": 1176 + }, + "search": [ + "warning" + ] + }, + { + "uid": "57ebf92cfa756dbc36d62f99da7427c8", + "css": "add-1", + "code": 59538, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M769.7 0H230.3A230.9 230.9 0 0 0 0 230.3V769.7A230.9 230.9 0 0 0 230.3 1000H769.7A230.9 230.9 0 0 0 1000 769.7V230.3A230.9 230.9 0 0 0 769.7 0ZM705.2 543.1H553.6A8.8 8.8 0 0 0 544.8 551.9V704A44.7 44.7 0 0 1 455.4 704V552A8.8 8.8 0 0 0 446.6 543.2H294.7A44.7 44.7 0 0 1 294.7 453.8H446.4A8.8 8.8 0 0 0 455.2 445V293.1A44.7 44.7 0 1 1 544.6 293.1V444.9A8.8 8.8 0 0 0 553.4 453.9H705.2A44.7 44.7 0 1 1 705.2 543.3Z", + "width": 1000 + }, + "search": [ + "add" + ] + }, + { + "uid": "701ccc7879b5b7e2395223f67ee3fed6", + "css": "arrow-forward-1", + "code": 59539, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M1357 455.8L919.2 18.3A62.5 62.5 0 1 0 830.8 106.7L1161.6 437.6H62.5A62.5 62.5 0 1 0 62.5 562.6H1161.7L830.9 893.4A62.5 62.5 0 1 0 919.3 981.8L1357 544.2A62.5 62.5 0 0 0 1357 455.8Z", + "width": 1375 + }, + "search": [ + "arrow-forward" + ] + }, + { + "uid": "fd40af0f29902301b193447a13ab5659", + "css": "back-1", + "code": 59540, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M14.6 535.8L464.3 985.3A50.5 50.5 0 1 0 535.8 914L121.8 500.1 535.8 86.2A50.5 50.5 0 0 0 464.3 14.7L14.6 464.3A51 51 0 0 0 14.6 535.8Z", + "width": 551 + }, + "search": [ + "back" + ] + }, + { + "uid": "baed05d36f0b6e141e441451248ebbe4", + "css": "close-1", + "code": 59541, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M591.6 500L981.2 110.4A64.8 64.8 0 1 0 889.4 19L499.8 408.6 110.2 19A64.8 64.8 0 0 0 19 110.6L408.6 500.2 19 889.8A64.8 64.8 0 1 0 110.6 981.4L500.2 591.8 889.8 981.4A64.8 64.8 0 1 0 981.4 889.8ZM591.6 500", + "width": 1000 + }, + "search": [ + "close" + ] + }, + { + "uid": "b5a7f641f7cea4777506552ec8be6ad6", + "css": "edit-1", + "code": 59542, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M571.4 635.7A88.7 88.7 0 0 1 537 657L412.7 698.4A87.7 87.7 0 0 1 384.9 702.9H384.9A87.9 87.9 0 0 1 301.5 587.2L342.9 462.9A88.3 88.3 0 0 1 364.1 428.6L632.7 160.1H107.4A107.5 107.5 0 0 0 0 267.6V892.6A107.5 107.5 0 0 0 107.4 999.8H732.4A107.5 107.5 0 0 0 839.9 892.4V367.3ZM405.7 469.9A29.3 29.3 0 0 0 398.6 481.4L357.2 605.7A29.3 29.3 0 0 0 394.2 642.7L518.5 601.3A29.3 29.3 0 0 0 530 594.2L895.9 228.2 771.7 103.9ZM930.5 14.3A48.8 48.8 0 0 0 861.4 14.3L813.1 62.6 937.4 186.9 985.7 138.6A48.8 48.8 0 0 0 985.7 69.5Z", + "width": 1000 + }, + "search": [ + "edit" + ] + }, + { + "uid": "c70dff422511b1412c9cb64f63d8c659", + "css": "external-link-1", + "code": 59543, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M945 55A180.6 180.6 0 0 0 812.5 0H187.5A180.6 180.6 0 0 0 55 55 180.6 180.6 0 0 0-0.2 187.5V812.5A180.7 180.7 0 0 0 54.9 945 180.6 180.6 0 0 0 187.4 1000.1H812.5A187.9 187.9 0 0 0 1000 812.5V187.5A180.7 180.7 0 0 0 945 55ZM833.4 520.8A39 39 0 0 1 808 559.2 45.3 45.3 0 0 1 791.7 562.5 38.7 38.7 0 0 1 762.6 550.3L668.6 456.4 321 804A40.9 40.9 0 0 1 262.4 804L196 737.6A40.9 40.9 0 0 1 196 679.1L543.6 331.4 449.9 237.6A37.6 37.6 0 0 1 440.8 192.1 39 39 0 0 1 479.3 166.7H791.8A42.2 42.2 0 0 1 833.5 208.3V520.8Z", + "width": 1000 + }, + "search": [ + "external-link" + ] + }, + { + "uid": "4d39d4d5f8ce4a22a6541b02dd4c63df", + "css": "verify-finger-1", + "code": 59544, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M891.9 0H108.1A108.2 108.2 0 0 0 0 108.1V891.9A108.2 108.2 0 0 0 108.1 1000H891.9A108.2 108.2 0 0 0 1000 891.9V108.1A108.2 108.2 0 0 0 891.9 0ZM185.9 192.6C393.8 41.7 612.9 43.3 817.7 195.2A29.3 29.3 0 0 1 800.1 248.1C766.9 248.1 540.5 7.4 220.2 240A29.3 29.3 0 0 1 185.7 192.6ZM459 946A29.3 29.3 0 0 1 418.2 938.6C377.1 878.9 283.2 812.1 283.2 687.5A225.3 225.3 0 0 1 500 454.9 225.3 225.3 0 0 1 716.8 687.5V718.9A29.3 29.3 0 0 1 658.2 718.9V687.6A166.8 166.8 0 0 0 500 513.8 166.8 166.8 0 0 0 341.8 687.5C341.8 828.8 521.5 902.7 459 946ZM823.1 794.4A153.5 153.5 0 0 1 533.2 718.9C533.2 592.6 446.8 635.1 465.9 711.8A29.3 29.3 0 0 1 409.1 725.9C369.2 566.3 591.8 501.6 591.8 718.9A94.5 94.5 0 0 0 665.2 816.5C800.8 848.5 841 624.8 705.8 480.7 518.8 281.3 216.8 435 216.8 671.9A237 237 0 0 0 258.2 826.8 29.3 29.3 0 0 1 210.6 860.8 298.5 298.5 0 0 1 158.2 671.9 347.5 347.5 0 0 1 500.1 330.1C752.9 330.1 913.6 613.5 823.1 794.3ZM842.7 431.8A29.3 29.3 0 0 1 802.7 420.9C744.4 318.7 603.2 263.8 500 263.8A419.4 419.4 0 0 0 196.2 422.6 29.3 29.3 0 0 1 147.5 390.1 474.9 474.9 0 0 1 499.9 205.2C716.9 205.2 910.7 392.8 842.5 431.8Z", + "width": 1000 + }, + "search": [ + "verify-finger" + ] + }, + { + "uid": "74c58b33ed0f729dac0b04e0f633144b", + "css": "verify-sms-1", + "code": 59545, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M900 0H100A100.3 100.3 0 0 0 0 100V1000L200 800H900A100.3 100.3 0 0 0 1000 700V100A100.3 100.3 0 0 0 900 0ZM350 450H250V350H350ZM550 450H450V350H550ZM750 450H650V350H750Z", + "width": 1000 + }, + "search": [ + "verify-sms" + ] + }, + { + "uid": "0e20d240c0f8396c7076464e122f8e1b", + "css": "verify-face-1", + "code": 59546, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M724.2 694.2L587.6 666.9A31.2 31.2 0 0 1 562.5 636.3V604.9A369.6 369.6 0 0 0 588.7 558.3 267.2 267.2 0 0 1 609.9 520.3 201.7 201.7 0 0 0 673.3 420.4 93.1 93.1 0 0 0 664.2 347 551.6 551.6 0 0 0 653.6 220.2 137.4 137.4 0 0 0 621.1 119.6 96.5 96.5 0 0 0 563.1 95.2 96.8 96.8 0 0 1 541.9 90.3 218.8 218.8 0 0 0 436.3 62.5 245.8 245.8 0 0 0 218.7 212 367.2 367.2 0 0 0 210.1 325.2L209.3 347.1A99.4 99.4 0 0 0 201.4 420.4 201.2 201.2 0 0 0 264.7 520.4 275.4 275.4 0 0 1 286.2 558.3 379.2 379.2 0 0 0 312.6 604.9V636.2A31.4 31.4 0 0 1 287.5 666.9L150.8 694.2A188.1 188.1 0 0 0 0 878.1V937.5A62.6 62.6 0 0 0 62.5 1000.2H812.5A62.5 62.5 0 0 0 875 937.7V878.1A188.2 188.2 0 0 0 724.2 694.2ZM156.3 0H31.3A31.3 31.3 0 0 0 0 31.3V218.8A31.3 31.3 0 0 0 62.5 218.8V62.5H156.3A31.3 31.3 0 0 0 156.3 0ZM156.3 562.5H62.5V406.2A31.3 31.3 0 0 0 0 406.2V593.7A31.3 31.3 0 0 0 31.3 625H156.3A31.3 31.3 0 1 0 156.3 562.5ZM843.8 0H718.8A31.3 31.3 0 0 0 718.8 62.5H812.5V218.8A31.3 31.3 0 0 0 875 218.8V31.3A31.3 31.3 0 0 0 843.8 0ZM843.8 375A31.3 31.3 0 0 0 812.5 406.2V562.5H718.7A31.3 31.3 0 0 0 718.7 625H843.7A31.3 31.3 0 0 0 875 593.7V406.2A31.3 31.3 0 0 0 843.8 375Z", + "width": 875 + }, + "search": [ + "verify-face" + ] + }, + { + "uid": "6087d36029eda9021846e21ed70401ad", + "css": "qr-reader-active-1", + "code": 59548, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M50 400A50 50 0 0 0 100 350V150A50 50 0 0 1 150 100H350A50 50 0 1 0 350 0H150A150 150 0 0 0 0 150V350A50 50 0 0 0 50 400ZM850 0H650A50 50 0 0 0 650 100H850A50 50 0 0 1 900 150V350A50 50 0 1 0 1000 350V150A150 150 0 0 0 850 0ZM950 600A50 50 0 0 0 900 650V850A50 50 0 0 1 850 900H650A50 50 0 0 0 650 1000H850A150 150 0 0 0 1000 850V650A50 50 0 0 0 950 600ZM350 900H150A50 50 0 0 1 100 850V650A50 50 0 0 0 0 650V850A150 150 0 0 0 150 1000H350A50 50 0 1 0 350 900Z", + "width": 1000 + }, + "search": [ + "qr-reader-active" + ] + }, + { + "uid": "5131f993095debb39e88eddafbe54f5a", + "css": "qr-reader-1", + "code": 59547, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M50 400A50 50 0 0 0 100 350V150A50 50 0 0 1 150 100H350A50 50 0 1 0 350 0H150A150 150 0 0 0 0 150V350A50 50 0 0 0 50 400ZM850 0H650A50 50 0 0 0 650 100H850A50 50 0 0 1 900 150V350A50 50 0 1 0 1000 350V150A150 150 0 0 0 850 0ZM950 600A50 50 0 0 0 900 650V850A50 50 0 0 1 850 900H650A50 50 0 0 0 650 1000H850A150 150 0 0 0 1000 850V650A50 50 0 0 0 950 600ZM350 900H150A50 50 0 0 1 100 850V650A50 50 0 0 0 0 650V850A150 150 0 0 0 150 1000H350A50 50 0 1 0 350 900Z", + "width": 1000 + }, + "search": [ + "qr-reader" + ] + }, + { + "uid": "90a143d3da24d4bddb6eefb8cb5036dc", + "css": "schedule-1", + "code": 59549, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M900 0H99.9A100.3 100.3 0 0 0 0 99.9V900A100.3 100.3 0 0 0 99.9 999.8H900A100.3 100.3 0 0 0 999.8 900V99.9A100.3 100.3 0 0 0 900 0ZM269.9 880H116.7V743.8H269.9V880ZM269.9 698.1H116.7V561.9H269.9V698.1ZM258.3 151.6A42.5 42.5 0 1 1 300.8 109.1 42.4 42.4 0 0 1 258.3 151.6ZM474.3 880H321.1V743.8H474.3ZM474.3 698.1H321.1V561.9H474.3ZM474.3 516.3H321.1V380H474.3ZM457.6 109.1A42.4 42.4 0 1 1 500 151.5 42.4 42.4 0 0 1 457.6 109.1ZM678.9 698.1H525.6V561.9H679.1V698.1ZM678.9 516.3H525.6V380H679.1V516.3ZM699 109.1A42.4 42.4 0 1 1 741.5 151.5 42.4 42.4 0 0 1 699 109.1ZM883.2 698.1H730.1V561.9H883.3ZM883.2 516.3H730.1V380H883.3Z", + "width": 1000 + }, + "search": [ + "schedule" + ] + }, + { + "uid": "9cd17bfbecffdbb2c87645848f62a267", + "css": "dr-reply-1", + "code": 59551, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M1023.2 547.7H1029.4A86.7 86.7 0 0 1 1162.4 438.2L1200.4 476.2V101.1A101.2 101.2 0 0 0 1099.2 0H101.2A101.2 101.2 0 0 0 0 101.1V799A101.2 101.2 0 0 0 101.2 900.2H798.6A247.7 247.7 0 0 1 1023.1 547.8ZM251.2 136.3H949.2L600.1 392.2ZM1266.6 603.7L1131.7 468.8A43.4 43.4 0 1 0 1070.5 529.9L1131.5 590.9H1023.1A204.5 204.5 0 0 0 1023.1 999.9 43.4 43.4 0 1 0 1023.1 913.2 117.9 117.9 0 0 1 1023.1 677.1H1131.5L1070.5 738A43.4 43.4 0 0 0 1131.7 799.2L1266.6 664.3A43.4 43.4 0 0 0 1266.6 603.1Z", + "width": 1279 + }, + "search": [ + "dr-reply" + ] + }, + { + "uid": "3841d430a51b3781fd60835bb120fd57", + "css": "schedule-active-1", + "code": 59550, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M900 0H99.9A100.3 100.3 0 0 0 0 99.9V900A100.3 100.3 0 0 0 99.9 999.8H900A100.3 100.3 0 0 0 999.8 900V99.9A100.3 100.3 0 0 0 900 0ZM269.9 880H116.7V743.8H269.9V880ZM269.9 698.1H116.7V561.9H269.9V698.1ZM258.3 151.6A42.5 42.5 0 1 1 300.8 109.1 42.4 42.4 0 0 1 258.3 151.6ZM474.3 880H321.1V743.8H474.3ZM474.3 698.1H321.1V561.9H474.3ZM474.3 516.3H321.1V380H474.3ZM457.6 109.1A42.4 42.4 0 1 1 500 151.5 42.4 42.4 0 0 1 457.6 109.1ZM678.9 698.1H525.6V561.9H679.1V698.1ZM678.9 516.3H525.6V380H679.1V516.3ZM699 109.1A42.4 42.4 0 1 1 741.5 151.5 42.4 42.4 0 0 1 699 109.1ZM883.2 698.1H730.1V561.9H883.3ZM883.2 516.3H730.1V380H883.3Z", + "width": 1000 + }, + "search": [ + "schedule-active" + ] + }, + { + "uid": "3375043683ed20c80d3307cef405e3ff", + "css": "verify-face", + "code": 59555, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M181.3 0H36.2A36.3 36.3 0 0 0 0 36.2V253.7A36.2 36.2 0 0 0 72.5 253.7V72.5H181.3A36.2 36.2 0 1 0 181.3 0ZM181.3 927.5H72.5V746.2A36.2 36.2 0 1 0 0 746.2V963.7A36.3 36.3 0 0 0 36.2 1000H181.3A36.2 36.2 0 1 0 181.3 927.5ZM978.8 0H833.7A36.2 36.2 0 0 0 833.7 72.5H942.5V253.8A36.2 36.2 0 0 0 1015 253.8V36.2A36.3 36.3 0 0 0 978.8 0ZM978.8 710A36.3 36.3 0 0 0 942.5 746.2V927.5H833.8A36.2 36.2 0 0 0 833.8 1000H978.8A36.3 36.3 0 0 0 1015 963.8V746.3A36.3 36.3 0 0 0 978.8 710ZM507.5 144.9A350.9 350.9 0 1 0 858.4 495.8 350.9 350.9 0 0 0 507.5 144.9ZM637 378.9A50.3 50.3 0 1 1 586.7 429.2 50.3 50.3 0 0 1 637 378.9ZM378 378.9A50.3 50.3 0 1 1 327.7 429.2 50.3 50.3 0 0 1 378 378.9ZM696.8 617.8A229.7 229.7 0 0 1 318.1 617.8 30.7 30.7 0 1 1 368.8 582.9 168.3 168.3 0 0 0 646.3 582.9 30.7 30.7 0 1 1 696.8 617.8Z", + "width": 1015 + }, + "search": [ + "verify-face" + ] + }, + { + "uid": "49b31d628bdc0d2127dc489c84c7101b", + "css": "verify-finger", + "code": 59556, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M792.5 147.2H237.8A76.6 76.6 0 0 0 161.3 223.7V778.4A76.6 76.6 0 0 0 237.8 854.9H792.5A76.6 76.6 0 0 0 869.1 778.4V223.7A76.6 76.6 0 0 0 792.5 147.2ZM292.8 283.5C439.9 176.7 595 177.8 739.9 285.4A20.8 20.8 0 0 1 727.6 322.8C704.1 322.8 543.8 152.4 317.1 317.1A20.7 20.7 0 0 1 292.8 283.5ZM486.1 816.8A20.7 20.7 0 0 1 457.2 811.5C428 769.3 361.6 722.1 361.6 633.8A159.5 159.5 0 0 1 515.1 469.3 159.5 159.5 0 0 1 668.7 633.8V655.9A20.7 20.7 0 0 1 627.2 655.9V633.8A118 118 0 0 0 515.2 510.7 118 118 0 0 0 403.3 633.8C403.3 733.7 530.5 786.1 486.2 816.8ZM743.8 709.5A108.7 108.7 0 0 1 538.7 656C538.7 566.5 477.5 596.6 491.1 650.9A20.7 20.7 0 0 1 450.8 661C422.6 548 580.2 502.2 580.2 656A66.9 66.9 0 0 0 632.1 725C728.1 747.7 756.6 589.3 660.8 487.4 528.5 346.3 314.7 455.1 314.7 622.8A167.7 167.7 0 0 0 344.1 732.4 20.7 20.7 0 0 1 310.4 756.5 211.3 211.3 0 0 1 273.3 622.8 245.9 245.9 0 0 1 515.3 380.8C694.1 380.8 807.9 581.4 744.1 709.6ZM757.7 452.8A20.7 20.7 0 0 1 729.4 445.1C688.2 372.8 588.3 333.9 515.3 333.9A296.7 296.7 0 0 0 300.3 446.4 20.7 20.7 0 0 1 265.8 423.4 336.1 336.1 0 0 1 515.3 292.5C668.9 292.5 806 425.3 757.8 452.9ZM181.3 0H36.2A36.3 36.3 0 0 0 0 36.2V253.7A36.2 36.2 0 0 0 72.5 253.7V72.5H181.3A36.2 36.2 0 1 0 181.3 0ZM181.3 927.5H72.5V746.2A36.2 36.2 0 1 0 0 746.2V963.7A36.3 36.3 0 0 0 36.2 1000H181.3A36.2 36.2 0 1 0 181.3 927.5ZM978.8 0H833.7A36.2 36.2 0 0 0 833.7 72.5H942.5V253.8A36.2 36.2 0 0 0 1015 253.8V36.2A36.3 36.3 0 0 0 978.8 0ZM978.8 710A36.3 36.3 0 0 0 942.5 746.2V927.5H833.8A36.2 36.2 0 0 0 833.8 1000H978.8A36.3 36.3 0 0 0 1015 963.8V746.3A36.3 36.3 0 0 0 978.8 710Z", + "width": 1015 + }, + "search": [ + "verify-finger" + ] + }, + { + "uid": "f57a7cc9bc5e75095215adfc141a8b17", + "css": "verify-whtsapp", + "code": 59557, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M132.6 857.5L196.3 666.3A364.2 364.2 0 1 1 340.1 802.9ZM742 601.7C725.1 569.9 663.1 533.6 663.1 533.6 649 525.7 632.1 524.7 624.1 538.8A321.2 321.2 0 0 1 598.8 566.5 47.1 47.1 0 0 1 531.8 559.8L481 508.9 430.1 458A47.1 47.1 0 0 1 423.5 391.3 321.3 321.3 0 0 1 451.1 366C465.4 358.1 464.5 341.1 456.4 327.1 456.4 327.1 420 265 388.2 248.2A34.8 34.8 0 0 0 347.3 254.3L324.8 276.8C253.6 348 288.6 428.5 359.9 499.8L425.3 564.9 490.5 630C561.7 701.3 642.2 736.4 713.5 665.1L735.9 642.6A34.9 34.9 0 0 0 742 601.7ZM181.3 0H36.2A36.3 36.3 0 0 0 0 36.2V253.7A36.2 36.2 0 0 0 72.5 253.7V72.5H181.3A36.2 36.2 0 1 0 181.3 0ZM181.3 927.5H72.5V746.3A36.2 36.2 0 1 0 0 746.3V963.8A36.3 36.3 0 0 0 36.2 1000H181.3A36.2 36.2 0 1 0 181.3 927.5ZM978.8 0H833.7A36.2 36.2 0 0 0 833.7 72.5H942.5V253.8A36.2 36.2 0 0 0 1015 253.8V36.2A36.3 36.3 0 0 0 978.8 0ZM978.8 710A36.3 36.3 0 0 0 942.5 746.3V927.5H833.8A36.2 36.2 0 0 0 833.8 1000H978.8A36.3 36.3 0 0 0 1015 963.8V746.3A36.3 36.3 0 0 0 978.8 710Z", + "width": 1015 + }, + "search": [ + "verify-whtsapp" + ] + }, + { + "uid": "89f9e9928bf0aa0ec55c15055f8ce27a", + "css": "verify-sms", + "code": 59558, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M766.3 175.1H252.2A64.5 64.5 0 0 0 187.9 239.4V817.7L316.4 689.2H766.1A64.5 64.5 0 0 0 830.5 624.8V239.4A64.5 64.5 0 0 0 766.3 175.1ZM412.8 464.4H348.5V400H412.8ZM541.3 464.4H477.2V400H541.3ZM669.8 464.4H605.6V400H669.9ZM181.3 0H36.2A36.3 36.3 0 0 0 0 36.2V253.7A36.2 36.2 0 0 0 72.5 253.7V72.5H181.3A36.2 36.2 0 1 0 181.3 0ZM181.3 927.5H72.5V746.2A36.2 36.2 0 1 0 0 746.2V963.7A36.3 36.3 0 0 0 36.2 1000H181.3A36.2 36.2 0 1 0 181.3 927.5ZM978.8 0H833.7A36.2 36.2 0 0 0 833.7 72.5H942.5V253.8A36.2 36.2 0 0 0 1015 253.8V36.2A36.3 36.3 0 0 0 978.8 0ZM978.8 710A36.3 36.3 0 0 0 942.5 746.2V927.5H833.8A36.2 36.2 0 0 0 833.8 1000H978.8A36.3 36.3 0 0 0 1015 963.8V746.3A36.3 36.3 0 0 0 978.8 710Z", + "width": 1015 + }, + "search": [ + "verify-sms" + ] + }, + { + "uid": "efc8c6ed2dab146bc55ca80fdd9bc511", + "css": "124", + "code": 59559, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M315.2 3.2L315.2 3.2A45.2 45.2 0 0 1 322.4 3.2S326 3.2 328.4 3.2H328.4A42.4 42.4 0 0 1 336 3.2H336A26.4 26.4 0 0 1 342 3.2H342A37.6 37.6 0 0 1 346.8 6.8 40 40 0 0 1 353.6 11.6L353.6 11.6 600.8 278.8A40 40 0 0 1 604.4 335.2 40 40 0 0 1 547.6 335.2L370 142.8V920H1250A40 40 0 0 1 1250 1000H330A40 40 0 0 1 290 960V129.2L66.4 329.2A40 40 0 0 1 10 325.6 40 40 0 0 1 0 299.2 40 40 0 0 1 13.2 269.2L304.8 10.4A36.4 36.4 0 0 1 310 7.2 40 40 0 0 1 315.2 3.2Z", + "width": 1290 + }, + "search": [ + "124" + ] + }, + { + "uid": "2251120e332d8914aca7fb2d3fbe00f2", + "css": "123", + "code": 59560, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M773 755.3S773 755.3 773 755.3A38.8 38.8 0 0 0 773 749.5 21.7 21.7 0 0 0 773 745.1V745.1A55.8 55.8 0 0 0 773 739.2H773A25.7 25.7 0 0 0 773 734.6V734.6S770.9 732.1 769.9 730.5A31 31 0 0 0 766.2 725.3H766.2L558.1 529.6A31 31 0 0 0 514.1 531.5 31 31 0 0 0 516 575.2L665.1 713.2H62V31A31 31 0 0 0 0 31V744.2A31 31 0 0 0 31 775.2H675.3L520.3 948.5A31 31 0 1 0 566.8 989.5L766.2 764.7S766.2 762.2 768.4 760.9A33.5 33.5 0 0 0 773 755.3Z", + "width": 775 + }, + "search": [ + "123" + ] + }, + { + "uid": "bffd96d1421ef42e3a097855b3820d42", + "css": "obese-bmi-r-1", + "code": 59561, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M307.3 571.7C305.2 589.1 322 680.9 330.6 716.9 334.8 734 346.1 761.8 342 776.5A153.3 153.3 0 0 0 337.7 839.2C339.7 848.6 346 892 337 907.9A369.5 369.5 0 0 0 323.5 958.9C300.8 999.1 313.6 997.1 313.6 997.1 320.6 1003.2 332.7 997.6 332.7 997.6A15.3 15.3 0 0 0 348.1 996.6 18.9 18.9 0 0 0 365.2 996.1 22.4 22.4 0 0 0 384.2 993C389.9 995 391.3 992.5 391.3 992.5 408.3 991.7 381.8 953.5 381.8 953.5A76.3 76.3 0 0 1 388.1 900C429.5 813.7 431.7 790.8 415.1 758.3 410.4 748.9 409.2 745.2 411.4 741.1 416.3 731.7 412.7 693.9 418.8 678.8 430.5 649.9 442 576.4 448 542.1 456.1 495.9 419.4 434 419.4 434 411.4 408.8 423.1 319 423.1 319 439.6 336.9 439 368.6 439 368.6 436.4 401.9 477.2 452.7 477.2 452.7A118.4 118.4 0 0 1 504.3 495.1C504.3 501.1 502.4 515.8 502.4 515.8L503.2 528.5A129.3 129.3 0 0 1 505.7 548.3C502.6 581.6 510.2 575.3 510.2 575.3 516.5 575.3 523.5 548.5 523.5 548.5 523.5 555.4 521.1 576.1 526.4 583.9 532.7 593.2 537.4 582.3 537.5 580.1 539.2 537.8 542.8 548.9 542.8 548.9 546.3 583.2 550.7 591 558.4 588.3 564.3 586.3 558.9 547.1 558.9 547.1 569 570.4 576.7 574.1 576.7 574.1 593.3 582.3 583 559.6 580.7 555.1A99.2 99.2 0 0 1 568 523C583.4 544.5 595 543.6 595 543.6 610 540.3 581.9 509.9 565.4 495.4A126 126 0 0 1 543 472.2 203.5 203.5 0 0 1 534 430.1C532.4 392.3 519.1 375.9 519.1 375.9 496.3 350.3 492 302.5 492 302.5L491 221.9C483 166.9 425.3 166.5 425.3 166.5 366.9 160.4 358.8 147.2 358.8 147.2 346.4 134.7 353.5 110.8 353.5 110.8A38.7 38.7 0 0 0 367.7 89.4C384.7 80.2 383.9 66.8 376 66.9 369.7 67 371.2 63.4 371.2 63.4 381.9 3.1 305.5 0 305.5 0H293.9S217.5 3.1 228.1 63.4C228.1 63.4 229.6 67.1 223.2 67 215.4 66.8 214.6 80.3 231.6 89.4A38.7 38.7 0 0 0 245.8 110.8S252.9 134.8 240.5 147.2C240.5 147.2 232.4 160.5 174 166.6 174 166.6 116.2 167 108.3 222L107.2 302.6S103 350.3 80.2 375.9C80.2 375.9 66.9 392.4 65.4 430.2A204.8 204.8 0 0 1 56.4 472.3 124.6 124.6 0 0 1 33.9 495.5C17.3 510-10.7 540.2 4.3 543.7 4.3 543.7 16 544.5 31.3 523.1A98.1 98.1 0 0 1 18.7 555.2C16.3 559.6 6 582.3 22.6 574.2 22.6 574.2 30.3 570.4 40.4 547.1 40.4 547.1 35 586.4 41 588.4 48.8 591 53.1 583.3 56.6 548.9 56.6 548.9 60.2 537.8 61.9 580.2 62 582.4 66.5 593.3 72.9 584 78.3 576.2 75.9 555.5 75.9 548.6 75.9 548.6 82.8 575.4 89.2 575.4 89.2 575.4 96.8 581.7 93.7 548.4A119.1 119.1 0 0 1 96.2 528.5L96.9 515.8S95 501.1 95 495.1A118.3 118.3 0 0 1 122.1 452.7S162.9 401.8 160.3 368.6C160.3 368.6 159.7 336.9 176.2 319 176.2 319 187.9 408.8 180 434 180 434 143.2 495.9 151.3 542.1 157.3 576.5 168.8 649.9 180.5 678.8 186.6 693.8 183 731.7 187.9 741.1 190.1 745.2 188.9 749 184.2 758.3 167.7 790.8 169.8 813.7 211.3 900A75.6 75.6 0 0 1 217.6 953.5S191.1 991.7 208.1 992.5C208.1 992.5 209.4 995 215.1 993A22.4 22.4 0 0 0 234.2 996.1 18.8 18.8 0 0 0 251.2 996.6 15.2 15.2 0 0 0 266.7 997.6S278.7 1003.3 285.8 997.1C285.8 997.1 298.5 999.1 275.9 958.9A367.7 367.7 0 0 0 262.5 907.9C253.4 892.1 259.9 848.6 261.8 839.2A155.9 155.9 0 0 0 257.5 776.5C253.3 761.8 264.7 734 268.9 716.9 277.5 680.9 294.3 589.1 292.2 571.7L299.2 573.4A18.3 18.3 0 0 0 307.3 571.7Z", + "width": 599 + }, + "search": [ + "obese-bmi-r" + ] + }, + { + "uid": "e3578bfad1396ea9b38bd70c249fa1e5", + "css": "inpatient", + "code": 59737, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M970.7 470.7A29.3 29.3 0 0 0 941.5 500V646.3H878A145.5 145.5 0 0 0 735.6 529.2H421.9V557.4L361.6 556.4A149.2 149.2 0 0 0 235.9 525.1 87.8 87.8 0 1 0 64.6 493.3L58.6 489.5V380.8A29.3 29.3 0 0 0 0 380.8V970.7A29.3 29.3 0 0 0 58.6 970.7V824.3H941.5V970.7A29.3 29.3 0 0 0 1000 970.7V500A29.3 29.3 0 0 0 970.7 470.7ZM58.5 646.3V558.5L197.7 646.3ZM294.9 89.9H353.4V148.4H324.1A29.3 29.3 0 0 0 294.9 177.7V236.2A87.8 87.8 0 0 0 470.5 236.2V177.7A29.3 29.3 0 0 0 441.2 148.4H412V89.9H529V470.7H587.6V29.3A29.3 29.3 0 1 0 529 31.2H294.9A29.3 29.3 0 0 0 294.9 89.8Z", + "width": 1000 + }, + "search": [ + "inpatient" + ] + }, + { + "uid": "1ca5ef3569be282fb05f15395a81d2a0", + "css": "discharge", + "code": 59738, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M985.1 464.6H985.1L535.1 14.6A49.8 49.8 0 0 0 464.8 14.6L14.6 464.6A50.1 50.1 0 0 0 14.6 535.4L464.6 985.1V985.4A50.1 50.1 0 0 0 535.4 985.4L985.3 535.4A49.9 49.9 0 0 0 985.1 464.6ZM599.7 624.9V500H399.7V650H299.7V450A49.8 49.8 0 0 1 349.7 400H599.7V274.9L774.7 449.9Z", + "width": 1000 + }, + "search": [ + "discharge" + ] + }, + { + "uid": "1738fd6466298efa6012247ca0941077", + "css": "order-sheets", + "code": 59739, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M736 84.4A87.2 87.2 0 0 0 673.9 58.6H635V97.6A78.2 78.2 0 0 1 556.9 175.8H205.8A78.2 78.2 0 0 1 127.7 97.6V58.6H88.6A87.9 87.9 0 0 0 0.9 146.4L0 912A87.9 87.9 0 0 0 87.8 1000.1H673A87.9 87.9 0 0 0 760.7 912.3L761.6 146.7A87.4 87.4 0 0 0 736 84.4ZM390.7 351.6H598.7A29.3 29.3 0 0 1 598.7 410.1H390.8A29.3 29.3 0 0 1 390.8 351.6ZM390.7 546.9H598.7A29.3 29.3 0 0 1 598.7 605.5H390.8A29.3 29.3 0 0 1 390.8 546.9ZM390.7 742.2H599.6A29.3 29.3 0 0 1 599.6 800.8H390.7A29.3 29.3 0 0 1 390.7 742.2ZM141.5 352.7A29.2 29.2 0 0 1 182.8 352.7L198.7 368.6 266.2 301.1A29.3 29.3 0 1 1 307.6 342.5L219.4 430.8A29.2 29.2 0 0 1 178.1 430.8L141.6 394.2A29.3 29.3 0 0 1 141.5 352.7ZM141.5 562.9A29.2 29.2 0 0 1 182.8 562.9L198.7 578.8 266.2 511.3A29.3 29.3 0 0 1 307.6 552.7L219.4 641A29.2 29.2 0 0 1 178.1 641L141.6 604.4A29.3 29.3 0 0 1 141.5 562.9ZM141.5 758.2A29.2 29.2 0 0 1 182.8 758.2L198.7 774.2 266.2 706.6A29.3 29.3 0 0 1 307.6 748.1L219.5 836.3A29.2 29.2 0 0 1 178.1 836.3L141.6 799.7A29.3 29.3 0 0 1 141.5 758.2ZM186.2 97.7A19.5 19.5 0 0 0 205.8 117.2H556.9A19.5 19.5 0 0 0 576.4 97.7V19.5A19.5 19.5 0 0 0 556.9 0H205.7A19.5 19.5 0 0 0 186.2 19.5Z", + "width": 762 + }, + "search": [ + "order-sheets" + ] + }, + { + "uid": "37fe23c97ab802ea172b84fc8a0ee196", + "css": "call", + "code": 59740, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M763.9 671.3L986.8 745.6A19.2 19.2 0 0 1 1000 763.8V846.1A153.8 153.8 0 0 1 846.2 1000 846.1 846.1 0 0 1 0 153.6 153.6 153.6 0 0 1 153.6 0H236A19.2 19.2 0 0 1 254.2 13.2L328.7 236A19.2 19.2 0 0 1 321.1 258.1L221.2 324.5A19.7 19.7 0 0 0 213.7 347.6 800 800 0 0 0 652.2 786 19.7 19.7 0 0 0 675.3 778.5L741.8 678.6A19.2 19.2 0 0 1 763.9 671Z", + "width": 1000 + }, + "search": [ + "call" + ] + }, + { + "uid": "ebce1ce36215365ca8c3dd958beaac65", + "css": "medical-report", + "code": 59741, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M764.6 1000H58.8A58.9 58.9 0 0 1 0 941.1V59A58.9 58.9 0 0 1 58.8 0.1H764.6A58.9 58.9 0 0 1 823.5 59V941.3A58.9 58.9 0 0 1 764.6 1000ZM617.4 690.9A112.6 112.6 0 0 0 504.9 803.4 112.6 112.6 0 0 0 617.4 915.9 112.6 112.6 0 0 0 729.9 803.4V795.9H624.8V690.9ZM640.9 659.9V779.9H760.9V772.4A112.6 112.6 0 0 0 648.4 659.9ZM176.6 417.3A29.5 29.5 0 0 0 147.1 446.7 29.5 29.5 0 0 0 176.6 476.2H647.2A29.4 29.4 0 0 0 676.6 446.7 29.4 29.4 0 0 0 647.2 417.3ZM176.6 276.2A29.4 29.4 0 0 0 147.1 305.6 29.5 29.5 0 0 0 176.6 335.1H647.2A29.4 29.4 0 0 0 676.6 305.6 29.4 29.4 0 0 0 647.2 276.2ZM176.6 147.1A29.4 29.4 0 0 0 147.1 176.5 29.5 29.5 0 0 0 176.6 205.9H382.3A29.5 29.5 0 0 0 411.7 176.5 29.4 29.4 0 0 0 382.3 147.1Z", + "width": 823 + }, + "search": [ + "medical-report" + ] + }, + { + "uid": "c8478a11a2d4271b16c1e1f0464ea1ff", + "css": "painscale", + "code": 59742, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M77 120.3L120.2 77 271.7 228.5 228.4 271.8ZM243.6 24.1L299.8 0 364.8 151.4 308.5 175.6ZM0 299.9L24.1 243.6 175.6 308.6 151.4 364.8ZM726 769.4L769.3 726.2 920.7 877.6 877.4 920.9ZM633.1 846.2L689.3 822.1 754.2 973.6 698 997.7ZM822.2 689.5L846.4 633.3 997.8 698.2 973.7 754.5ZM242.5 415.6A122.4 122.4 0 0 1 415.6 588.7 122.4 122.4 0 1 1 415.6 761.8L177.4 1000 4.3 827.1 242.5 588.9A122.4 122.4 0 0 1 242.5 415.8ZM588.7 415.6A122.4 122.4 0 1 1 588.7 242.5L827 4.3 1000.1 177.4 761.7 415.6A122.4 122.4 0 1 1 588.6 415.6Z", + "width": 1000 + }, + "search": [ + "painscale" + ] + }, + { + "uid": "5a0bdc9deb49171daf7251717ac6d715", + "css": "oxygenation", + "code": 59743, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M498.2 186.2A406.9 406.9 0 1 0 905.1 593.1 407.3 407.3 0 0 0 498.2 186.2ZM498.2 926.9A333.9 333.9 0 1 1 832.1 593 334.3 334.3 0 0 1 498.2 927.1ZM380.8 421A161 161 0 0 0 261.9 463.9 161.5 161.5 0 0 0 219.1 583.5 177.3 177.3 0 0 0 240.7 675 131.7 131.7 0 0 0 297 728.4 201.4 201.4 0 0 0 384.8 745.2 176.5 176.5 0 0 0 472 725.7 133 133 0 0 0 525.5 671 193.7 193.7 0 0 0 544 580.8 158.4 158.4 0 0 0 501.6 463 164 164 0 0 0 380.8 421ZM429.8 652.4A59.8 59.8 0 0 1 381.5 672.7 59.6 59.6 0 0 1 333.5 652 105 105 0 0 1 315.8 583.7 105.3 105.3 0 0 1 333.8 514.9 58.9 58.9 0 0 1 380.8 494.1 61.3 61.3 0 0 1 429.3 514.6 97 97 0 0 1 447.2 579.3 116.6 116.6 0 0 1 430 652.4ZM650.7 682.9C654.7 679.8 662.4 672.9 674.1 664.7A154.2 154.2 0 0 0 714.3 626.2 67.5 67.5 0 0 0 725.3 589.8 57.1 57.1 0 0 0 689 536.1 128.1 128.1 0 0 0 641.6 529 115.3 115.3 0 0 0 595.9 536.3 56.8 56.8 0 0 0 570.4 557.2 91.8 91.8 0 0 0 558 595.2L615.8 600A42.6 42.6 0 0 1 625.2 575.4 26.8 26.8 0 0 1 660.9 575.2 21.6 21.6 0 0 1 667.9 591.4 32.1 32.1 0 0 1 660.8 609.9 169.6 169.6 0 0 1 628.3 638.5 247.6 247.6 0 0 0 571.8 689.1 384.4 384.4 0 0 0 553.6 734.7H711.6V698.3H637.1C642.2 698.3 646.8 686.1 650.7 682.9Z", + "width": 1041 + }, + "search": [ + "oxygenation" + ] + }, + { + "uid": "169c700bad100df58cf4c5f69c96a27e", + "css": "speechtotext", + "code": 59744, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M499.8 132A97.3 97.3 0 0 1 597 229.1V248.1A102.7 102.7 0 0 1 708.8 292.8 98.7 98.7 0 0 1 714 388.3L775.6 461.6A281 281 0 0 0 859.7 261.2V261.2A261 261 0 0 0 598.7 0H317.4V60.6A142.4 142.4 0 0 0 336.6 132ZM816.3 680.9L506.4 787.5 439 1000H1001.6A365.8 365.8 0 0 0 816.3 680.9ZM514.7 722.7L769.6 635 749 552.7A92.8 92.8 0 0 1 747.1 518.5L639.5 390.9 655.3 372A41.8 41.8 0 0 0 614 304.4L538.4 321.9V229.1A38.6 38.6 0 0 0 499.9 190.6H359.1V272.6L275.7 411.6 317.4 453.3V488.2L400.4 522.6 325.7 579.1 332 613.1A41.6 41.6 0 0 0 380 646.6L505.6 625ZM231.1 479.7A81.3 81.3 0 0 0 231.1 594.4L272.5 553A22.6 22.6 0 0 1 272.5 521.1ZM157.7 406.3A185 185 0 0 0 157.7 667.7L199.1 626.2A126.4 126.4 0 0 1 199.1 447.7ZM125.8 374.5L84.4 333.1A288.8 288.8 0 0 0 84.4 741.1L125.8 699.7A230.2 230.2 0 0 1 125.8 374.5Z", + "width": 1002 + }, + "search": [ + "speechtotext" + ] + }, + { + "uid": "4c794fd235deed1e405c7a0d77262155", + "css": "search-medicines", + "code": 59748, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M299 341.8L384.4 427.2 341.6 470A60.5 60.5 0 1 1 256.1 384.6ZM384.6 256.1A60.5 60.5 0 1 1 470 341.6L427.3 384.7 341.8 299.2ZM363.2 0A362.9 362.9 0 0 1 640.3 597.5L747.7 704.9 704.9 747.7 597.5 640.3A363.1 363.1 0 1 1 363.2 0ZM213.3 512.9A121.2 121.2 0 0 0 384.6 512.9L513 384.5A121.1 121.1 0 1 0 341.8 213.3L213.4 341.9A121.2 121.2 0 0 0 213.4 513.1ZM998.2 914.4L811 727.3 725.4 812.9 912.6 1000Z", + "width": 998 + }, + "search": [ + "search-medicines" + ] + }, + { + "uid": "deaae97b03da57c5c739ce04877b4d6e", + "css": "discharge-patients", + "code": 59749, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M44.4 4.2A29.3 29.3 0 0 0 0 29.3V794.9A29.3 29.3 0 0 0 14.2 820.1L248.6 995.9A29.3 29.3 0 0 0 293 970.8V205.1A29.3 29.3 0 0 0 278.8 180ZM205 587.9A29.3 29.3 0 1 1 234.3 558.6 29.3 29.3 0 0 1 205 587.9ZM205 587.9M807.3 329.1A29.3 29.3 0 0 0 761.7 353.5V382.8H498A29.3 29.3 0 0 0 468.8 412.1V470.7A29.3 29.3 0 0 0 498 500H761.7V529.3A29.3 29.3 0 0 0 807.3 553.7L924.4 465.8A29.3 29.3 0 0 0 924.4 417.1ZM807.3 329.1M410.2 470.7V412.1A88 88 0 0 1 498 324.2H644.5V29.3A29.3 29.3 0 0 0 615.3 0H136.4L312.2 131.8A88.4 88.4 0 0 1 351.6 205.1V824.2H615.3A29.3 29.3 0 0 0 644.5 794.9V558.6H498A88 88 0 0 1 410.2 470.7ZM410.2 470.7", + "width": 938 + }, + "search": [ + "discharge-patients" + ] + }, + { + "uid": "1c6f710dc04109a0329ee1f833784815", + "css": "referral-discharge", + "code": 59750, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M681.4 793.1L735.5 860.8 683 913.3 659.1 793.7C663.5 793.4 667.9 793.1 672.4 793.1ZM791.7 793.1L758.6 834.3 725.6 793.1ZM835.9 793.1H844.8C849.3 793.1 853.7 793.4 858.1 793.7L834.2 913.3 781.7 860.8ZM913.8 655.1H912.8A154.1 154.1 0 0 0 913.8 637.9V586.2A34.5 34.5 0 0 1 913.8 655.1ZM603.4 482.7A103.6 103.6 0 0 1 706.9 379.3H810.3A103.6 103.6 0 0 1 913.8 482.8V551.7H844.8A34.5 34.5 0 0 1 810.3 517.2V448.3H775.9V465.5A86.3 86.3 0 0 1 689.7 551.7H603.5ZM603.4 655.1A34.5 34.5 0 1 1 603.4 586.2V637.9A154.1 154.1 0 0 0 604.4 655.1ZM637.9 637.9V586.2H689.6A120.4 120.4 0 0 0 781.2 543.9 69 69 0 0 0 844.7 586.2H879.2V637.9A120.6 120.6 0 0 1 637.9 637.9ZM1000 1000H517.2V948.3A155.6 155.6 0 0 1 625.2 800.5L655.4 951.7A17.3 17.3 0 0 0 667.3 964.8 17.6 17.6 0 0 0 672.3 965.5 17.3 17.3 0 0 0 684.5 960.4L758.5 886.4 832.5 960.5A17.2 17.2 0 0 0 861.7 951.7L891.9 800.5A155.6 155.6 0 0 1 999.8 948.3ZM164.1 413.8L218.3 481.5 165.7 534 141.8 414.5C146.3 414.1 150.7 413.8 155.2 413.8ZM274.5 413.8L241.4 455 208.3 413.8ZM318.6 413.8H327.6C332.1 413.8 336.5 414.1 340.9 414.4L317 534 264.5 481.5ZM396.5 275.8H395.5A154 154 0 0 0 396.5 258.6V206.9A34.5 34.5 0 0 1 396.5 275.8ZM86.2 103.5A103.6 103.6 0 0 1 189.7 0H293.1A103.6 103.6 0 0 1 396.6 103.5V172.4H327.6A34.5 34.5 0 0 1 293.1 137.9V69H258.6V86.2A86.3 86.3 0 0 1 172.4 172.4H86.2ZM86.2 275.9A34.5 34.5 0 1 1 86.2 206.9V258.6A154 154 0 0 0 87.2 275.9ZM120.6 258.6V206.9H172.4A120.4 120.4 0 0 0 264 164.6 69 69 0 0 0 327.5 206.9H362V258.6A120.6 120.6 0 1 1 120.7 258.6ZM482.8 620.7H0V569A155.6 155.6 0 0 1 107.9 421.2L138.2 572.3A17.3 17.3 0 0 0 150.1 585.5 17.6 17.6 0 0 0 155.1 586.2 17.3 17.3 0 0 0 167.3 581.1L241.3 507.1 315.3 581.2A17.2 17.2 0 0 0 344.4 572.3L374.7 421.2A155.6 155.6 0 0 1 482.6 569ZM172.4 827.6A17.2 17.2 0 0 0 155.2 810.3H127.8L206.8 731.3 286.1 810.2H258.8A17.2 17.2 0 0 0 241.6 827.4 206.9 206.9 0 0 0 333.6 999.5 172.6 172.6 0 0 1 172.4 827.6ZM816 71.1A20.5 20.5 0 0 0 784.2 88.1V108.6H599.9A20.5 20.5 0 0 0 579.5 129.1V170A20.5 20.5 0 0 0 599.9 190.5H784.2V211A20.5 20.5 0 0 0 816 228L897.9 166.6A20.5 20.5 0 0 0 897.9 132.5ZM816 71.1", + "width": 1000 + }, + "search": [ + "referral-discharge" + ] + }, + { + "uid": "fbbe1c278b442a4840b03064fe4a2ea4", + "css": "respiration-rate-1", + "code": 59510, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M989.3 410.2C907.2 230.7 805.1 123.6 716.1 123.6A91.6 91.6 0 0 0 667.3 137C595.3 181.3 592 319.6 591.9 334.9 591.9 339.7 590.8 377.9 590 431.1L560.9 420.4V20.1A20.3 20.3 0 0 0 540.6-0.2H499.9A20.3 20.3 0 0 0 479.6 20.1V420.4L450.5 431.1C449.7 378 448.7 339.9 448.6 335.3 448.6 319.6 445.2 181.3 373.2 137A91.6 91.6 0 0 0 324.4 123.6C235.5 123.6 133.3 230.8 51.2 410.3-57.1 647.8 39 972 43.2 985.6A20.1 20.1 0 0 0 67.1 999.3 1776.9 1776.9 0 0 0 243.4 946.2C369.2 900.2 434.5 855.1 442.6 808.2A2836.5 2836.5 0 0 0 451.6 473.7L506.5 453.4H534.7L589.6 473.7A2835.8 2835.8 0 0 0 598.6 808.2C606.7 855.1 671.8 900.2 797.8 946.2A1778.4 1778.4 0 0 0 974.1 999.5 20.1 20.1 0 0 0 998 985.7C1001.8 972 1097.9 647.8 989.3 410.2ZM393.1 500.5L249.7 574.6V634.8L260.7 668.2 288.1 694.8A20.3 20.3 0 0 1 260.1 723.7L230.5 695.2 197 732.2A20.3 20.3 0 0 1 167.2 705.1L209.4 658.4V595.3L130.2 636.3A20.3 20.3 0 1 1 111.7 600.5L129.3 591.4 97.8 566.3A20.3 20.3 0 0 1 122.9 534.8L168.5 571.2 278.8 514.3 184.4 442.5A20.3 20.3 0 0 1 208.8 410.4L239.3 433.5 241.9 410.2A20.3 20.3 0 0 1 281.9 414.6L276.5 461.8 318.5 493.7 374.5 464.8A20.3 20.3 0 1 1 393 500.5ZM942.9 566.3L911.4 591.4 929 600.5A20.3 20.3 0 1 1 910.5 636.3L831.4 595.3V658.2L873.7 705A20.3 20.3 0 0 1 843.8 732.1L810.3 695.1 780.8 723.6A20.3 20.3 0 0 1 752.7 694.7L780.1 668.1 791.1 634.7V574.5L647.7 500.4A20.3 20.3 0 1 1 666.2 464.6L722.2 493.6 764.2 461.7 759 414.5A20.3 20.3 0 1 1 799 410L801.6 433.4 832.1 410.2A20.3 20.3 0 0 1 856.5 442.3L761.9 514 872.2 570.9 917.9 534.5A20.3 20.3 0 0 1 943 566Z", + "width": 1041 + }, + "search": [ + "respiration-rate" + ] + }, + { + "uid": "002f9ea7269e8e2ca9a28d0e87f09a2c", + "css": "end-call", + "code": 59604, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M282.4 546.3L133.8 620.6A13.6 13.6 0 0 1 118.2 618L77 576.8A108.8 108.8 0 0 1 77 423 598.3 598.3 0 0 1 923.2 423.2 108.6 108.6 0 0 1 923.2 576.8L882 618A13.6 13.6 0 0 1 866.4 620.6L717.6 546.3A13.6 13.6 0 0 1 710.4 531.5L727.1 448.2A13.8 13.8 0 0 0 719.3 432.9 565.7 565.7 0 0 0 280.8 432.9 13.8 13.8 0 0 0 273 448.3L289.6 531.4A13.6 13.6 0 0 1 282.3 546.2Z", + "width": 1000 + }, + "search": [ + "end-call" + ] + }, + { + "uid": "ace119a586c0a290d5da68f59038e160", + "css": "end-consultaion", + "code": 59605, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M664.4 0H92.6A92.7 92.7 0 0 0 0 92.6V907.4A92.7 92.7 0 0 0 92.6 1000H664.3A92.7 92.7 0 0 0 756.9 907.4V92.6A92.7 92.7 0 0 0 664.4 0ZM118.7 167.8L176.4 68.5A20.8 20.8 0 1 1 212.4 89.3L173 157.2H587.9L556.4 87.4A20.8 20.8 0 1 1 594.4 70.1L639.1 169.5A20.8 20.8 0 0 1 620.1 198.9H136.8A20.8 20.8 0 0 1 118.7 167.8ZM644.6 608.6H492.4A20.8 20.8 0 0 1 472.7 594.7L458.3 554.1 423.7 813.6A20.8 20.8 0 0 1 403.7 831.6H403.1A20.8 20.8 0 0 1 382.7 814.7L312.5 452.1 266.5 606.1A20.8 20.8 0 0 1 246.6 621H112.3A20.8 20.8 0 1 1 112.3 579.5H231.1L296.8 358.9A20.8 20.8 0 0 1 337.2 360.9L399.1 681.8 428.4 463.2A20.8 20.8 0 0 1 446.8 445.3 21.3 21.3 0 0 1 468.7 459.1L507 567.1H644.5A20.8 20.8 0 1 1 644.5 608.6Z", + "width": 757 + }, + "search": [ + "end-consultaion" + ] + }, + { + "uid": "62a5ade64a871b2006d088b4e107506f", + "css": "folder-open", + "code": 59606, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M1130.2 347.1A103.3 103.3 0 0 0 1027.1 244.8H565.1L102.7 246.1A103.3 103.3 0 0 0 0 349.8 17.1 17.1 0 0 0 0 352.4L89.8 898.2A103.3 103.3 0 0 0 192.8 999.9H1117.6A103.3 103.3 0 0 0 1220.7 896.8 17.1 17.1 0 0 0 1220.7 894.2ZM1269.1 113.6H814.5L724.6 6.1A16.8 16.8 0 0 0 711.3 0H344.3A103.3 103.3 0 0 0 241.2 101.7L225.3 197.9H259.5L1027.4 197.9A151.5 151.5 0 0 1 1178.1 342.7L1239.5 715.6 1254.8 807.5A102.5 102.5 0 0 0 1263.6 767.2L1371.6 220.2A16.8 16.8 0 0 0 1371.6 216.9 103.3 103.3 0 0 0 1269.1 113.6Z", + "width": 1372 + }, + "search": [ + "folder-open" + ] + }, + { + "uid": "f696b8dc00777a69a4e1e52df2955ec4", + "css": "folder", + "code": 59607, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M1029 245.6H572.9L482 137.6A15.5 15.5 0 0 0 469.6 132H101.5A102.3 102.3 0 0 0 0 234.4V897.8A102.3 102.3 0 0 0 102.2 1000H1029A102.3 102.3 0 0 0 1131.2 897.8V347.7A102.3 102.3 0 0 0 1029 245.6ZM1163 113.4H706.6L615.9 5.6A15.5 15.5 0 0 0 603.5 0H235.5A102.2 102.2 0 0 0 134.5 88H470.1A59.4 59.4 0 0 1 515.7 109.2L593.2 201.2H1029A146.5 146.5 0 0 1 1175.1 347.8V867A102.2 102.2 0 0 0 1264.6 765.7V215.4A102.3 102.3 0 0 0 1163 113.4Z", + "width": 1265 + }, + "search": [ + "folder" + ] + }, + { + "uid": "e794f7865351585b57f62ec43bba8aff", + "css": "link-in", + "code": 59608, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M333.3 750L916.6 750A83.6 83.6 0 0 0 999.9 666.6V83.3A83.6 83.6 0 0 0 916.6 0L333.3 0A83.6 83.6 0 0 0 250 83.3V666.6A83.6 83.6 0 0 0 333.3 750ZM479.1 375V476.6L789.1 166.6 833.2 210.9 523.8 520.7 625.3 520.7V583.3H458.1A41.6 41.6 0 0 1 416.5 541.6V374.9ZM416.7 833.4V916.7H83.3V583.4H166.6V500H41.7A41.8 41.8 0 0 0 0 541.7V958.4A41.9 41.9 0 0 0 41.7 1000.1H458.3A41.9 41.9 0 0 0 500 958.4V833.4Z", + "width": 1000 + }, + "search": [ + "link-in" + ] + }, + { + "uid": "8cbd9cb0e30a60dbfcd1425cb5dbc06d", + "css": "link-out", + "code": 59609, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M916.7 0H333.5A83.4 83.4 0 0 0 250 83.4V666.8A83.4 83.4 0 0 0 333.5 750.2H916.8A83.4 83.4 0 0 0 1000.2 666.8V83.4A83.4 83.4 0 0 0 916.7 0ZM770.8 375V273.3L460.8 583.3 416.7 539 726.7 229.1 625.1 229.1V166.7H791.7A41.6 41.6 0 0 1 833.4 208.3L833.4 375.2ZM416.7 833.3V916.8H83.4V583.4H166.9V500H41.6A41.8 41.8 0 0 0 0 541.6V958.3A41.8 41.8 0 0 0 41.6 1000H458.4A41.8 41.8 0 0 0 500 958.3V833.3Z", + "width": 1000 + }, + "search": [ + "link-out" + ] + }, + { + "uid": "ed96dd3085af227cc96170408b84c816", + "css": "mute-microphone", + "code": 59610, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M584.7 579.6V448.4L305.8 727.3A178.5 178.5 0 0 0 584.7 579.6ZM693 472.9H657.5A20.7 20.7 0 0 0 636.8 493.6V566.3A230.7 230.7 0 0 1 276.1 756.9L221.8 811.2A302.3 302.3 0 0 0 367.6 871.6V923.1H208.8A20.7 20.7 0 0 0 188.1 943.8V979.4A20.7 20.7 0 0 0 208.8 1000H603.3A20.7 20.7 0 0 0 624 979.4V943.8A20.7 20.7 0 0 0 603.3 923.1H444.5V871.6A312.1 312.1 0 0 0 713.8 566.4V493.7A20.7 20.7 0 0 0 693 472.9ZM795.4 79.6A56.9 56.9 0 0 0 715 79.6L584.7 209.9V178.6A178.6 178.6 0 0 0 227.4 178.6V567.1L180.4 614.2A230 230 0 0 1 175.2 566.3V493.6A20.7 20.7 0 0 0 154.5 472.9H119A20.7 20.7 0 0 0 98.3 493.6V566.3A298.4 298.4 0 0 0 119.3 675.3L16.7 777.9A56.9 56.9 0 0 0 97.1 858.4L795.4 160.1A56.9 56.9 0 0 0 795.4 79.6Z", + "width": 812 + }, + "search": [ + "mute-microphone" + ] + }, + { + "uid": "7c8fce018306529b3c40386a8e946374", + "css": "no-video", + "code": 59611, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M69.3 676.7L620.8 125.2H204A135.1 135.1 0 0 0 69.3 260.4ZM1179.1 184.9A135.9 135.9 0 0 0 1052.4 172.5L926.1 225.1A129.2 129.2 0 0 0 904.5 180.5L982.5 102.6A59.9 59.9 0 1 0 897.7 17.9L17.4 898.1A59.5 59.5 0 0 0 17.6 982.4 59.8 59.8 0 0 0 102.3 982.4L210 874.9H796.2A134.6 134.6 0 0 0 926.1 775L1052.4 827.4A134.4 134.4 0 0 0 1179.1 815 134.9 134.9 0 0 0 1239.1 702.7V297.4A134.9 134.9 0 0 0 1179.1 184.9ZM1119.1 702.7A13.7 13.7 0 0 1 1112.3 715 14.6 14.6 0 0 1 1098.4 716.6L930.9 647.5V352.6L1098.2 283.5A14.6 14.6 0 0 1 1112.1 285 13.7 13.7 0 0 1 1119 297.4Z", + "width": 1239 + }, + "search": [ + "no-video" + ] + }, + { + "uid": "7be786f4ac20cbacd06a26d712accfff", + "css": "send-instruction", + "code": 59612, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M436.7 0A436.7 436.7 0 0 0 226.4 819.5L221.3 1000 427.3 873C430.4 873 433.5 873.5 436.7 873.5A436.7 436.7 0 0 0 436.7 0ZM492.4 691.3H380.4V331H492.4ZM435.7 286.9A54.7 54.7 0 0 1 377.5 231 54.7 54.7 0 0 1 436.4 174.2 56.5 56.5 0 1 1 435.6 287Z", + "width": 873 + }, + "search": [ + "send-instruction" + ] + }, + { + "uid": "926041acc7150e19895e12f7bba3d07a", + "css": "transfer-to-admin", + "code": 59613, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M202.7 517.8L148.9 463.9A52.2 52.2 0 0 1 148.9 390.3L414.1 125 342.5 53.3A31.2 31.2 0 0 1 364.6 0H635.4A31.3 31.3 0 0 1 666.7 31.2V302.1A31.2 31.2 0 0 1 613.3 324.2L541.7 252.5 276.4 517.7A52.2 52.2 0 0 1 202.8 517.7ZM302.1 1000H31.2A31.3 31.3 0 0 1 0 968.8V697.9A31.2 31.2 0 0 1 53.3 675.8L125 747.5 390.3 482.2A52.2 52.2 0 0 1 463.9 482.2L517.8 536.1A52.2 52.2 0 0 1 517.8 609.7L252.5 875 324.1 946.7A31.2 31.2 0 0 1 302 1000Z", + "width": 667 + }, + "search": [ + "transfer-to-admin" + ] + } + ] +} \ No newline at end of file diff --git a/lib/widgets/icons_app/doctor_app_icons.dart b/lib/widgets/icons_app/doctor_app_icons.dart new file mode 100644 index 0000000..113fcba --- /dev/null +++ b/lib/widgets/icons_app/doctor_app_icons.dart @@ -0,0 +1,407 @@ +/// Flutter icons DoctorApp +/// Copyright (C) 2021 by original authors @ fluttericon.com, fontello.com +/// This font was generated by FlutterIcon.com, which is derived from Fontello. +/// +/// To use this font, place it in your fonts/ directory and include the +/// following in your pubspec.yaml +/// +/// flutter: +/// fonts: +/// - family: DoctorApp +/// fonts: +/// - asset: fonts/DoctorApp.ttf +/// +/// +/// * MFG Labs, Copyright (C) 2012 by Daniel Bruce +/// Author: MFG Labs +/// License: SIL (http://scripts.sil.org/OFL) +/// Homepage: http://www.mfglabs.com/ +/// +import 'package:flutter/widgets.dart'; + +class DoctorApp { + DoctorApp._(); + + static const _kFontFam = 'DoctorApp'; + static const String _kFontPkg = ""; + + static const IconData female_icon = + IconData(0xe800, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData male = + IconData(0xe801, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData reject_icon = + IconData(0xe802, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData home_icon_active = + IconData(0xe803, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData menu_icon = + IconData(0xe804, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData menu_icon_active = + IconData(0xe805, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData message_icon = + IconData(0xe806, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData message_icon_active = + IconData(0xe807, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData scdedule_icon_active = + IconData(0xe808, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData schedule_icon = + IconData(0xe809, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData discharge_patient = + IconData(0xe80a, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData approved_icon = + IconData(0xe80b, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData pending_icon = + IconData(0xe80c, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData in_patient_white = + IconData(0xe80d, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData lab_results = + IconData(0xe80e, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData home_icon = + IconData(0xe80f, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData referral_1 = + IconData(0xe810, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData progress_notes = + IconData(0xe811, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData home_icon_1 = + IconData(0xe812, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData operations = + IconData(0xe813, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData out_patient = + IconData(0xe814, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData patient = + IconData(0xe815, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData qr_code = + IconData(0xe816, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData radiology = + IconData(0xe817, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData referral = + IconData(0xe818, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData male_2 = + IconData(0xe819, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData search_patient = + IconData(0xe81a, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData female_1 = + IconData(0xe81b, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData home_icon_active_1 = + IconData(0xe81c, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData menu_icon_1 = + IconData(0xe81d, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData mail = + IconData(0xe81e, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData medicine_search = + IconData(0xe81f, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData qr_code_1 = + IconData(0xe820, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData search_1 = + IconData(0xe821, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData referred = + IconData(0xe822, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData send = + IconData(0xe823, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData sync_icon = + IconData(0xe824, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData drawer_icon = + IconData(0xe825, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData view = + IconData(0xe826, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData warning = + IconData(0xe827, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData add = + IconData(0xe828, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData close = + IconData(0xe829, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData back = + IconData(0xe82a, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData health_summary = + IconData(0xe82b, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData powered_by_cs = + IconData(0xe82c, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData qr_code_2 = + IconData(0xe82d, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData ecg = + IconData(0xe82e, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData create_episode = + IconData(0xe82f, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData booked = + IconData(0xe830, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData admission_req = + IconData(0xe831, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData walkin = + IconData(0xe832, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData reschedule_ = + IconData(0xe833, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData edit = + IconData(0xe834, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData leaves = + IconData(0xe836, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData logout = + IconData(0xe837, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData obese_bmi = + IconData(0xe838, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData livecare = + IconData(0xe839, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData health_bmi = + IconData(0xe83a, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData health_bmi_r = + IconData(0xe83b, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData modify_episode = + IconData(0xe83c, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData height = + IconData(0xe83d, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData obese_bmi_r = + IconData(0xe83e, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData ovrweight_bmi = + IconData(0xe83f, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData order_prescription = + IconData(0xe840, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData order_procedures = + IconData(0xe841, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData ovrweight_bmi_r = + IconData(0xe842, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData respiration_rate = + IconData(0xe843, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData patient_sick_leave = + IconData(0xe844, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData progress_notes_1 = + IconData(0xe845, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData temperature = + IconData(0xe846, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData underweight_bmi = + IconData(0xe847, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData radiology_1 = + IconData(0xe848, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData search_patient_1 = + IconData(0xe849, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData referral_bg = + IconData(0xe84a, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData search = + IconData(0xe84b, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData search_bg = + IconData(0xe84c, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData arrival_patients = + IconData(0xe84d, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData arrival_patients_bg = + IconData(0xe84e, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData refer_patient = + IconData(0xe84f, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData underweight_bmi_r = + IconData(0xe850, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData weight = + IconData(0xe851, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData blood_pressure = + IconData(0xe852, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData vital_signs = + IconData(0xe853, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData ucaf = + IconData(0xe854, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData filter = + IconData(0xe855, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData male_1 = + IconData(0xe856, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData female = + IconData(0xe857, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData external_link = + IconData(0xe858, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData verify_face_2 = + IconData(0xe859, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData verify_sms_2 = + IconData(0xe85a, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData home = + IconData(0xe85b, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData verify_finger_2 = + IconData(0xe85c, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData dr_reply_active = + IconData(0xe85d, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData dr_reply = + IconData(0xe85e, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData schedule_active = + IconData(0xe85f, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData schedule = + IconData(0xe860, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData qr_reader_active = + IconData(0xe861, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData qr_reader = + IconData(0xe862, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData home_active = + IconData(0xe863, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData arrow_forward = + IconData(0xe864, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData heart_rate = + IconData(0xe865, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData menu_icon_active_1 = + IconData(0xe866, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData message_icon_1 = + IconData(0xe867, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData message_icon_active_1 = + IconData(0xe868, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData scdedule_icon_active_1 = + IconData(0xe869, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData ovrweight_bmi_r_1 = + IconData(0xe86a, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData underweight_bmi_1 = + IconData(0xe86b, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData temperature_1 = + IconData(0xe86c, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData underweight_bmi_r_1 = + IconData(0xe86d, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData weight_1 = + IconData(0xe86e, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData blood_pressure_1 = + IconData(0xe86f, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData health_bmi_r_1 = + IconData(0xe870, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData health_bmi_1 = + IconData(0xe871, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData heart_rate_1 = + IconData(0xe872, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData height_1 = + IconData(0xe873, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData obese_bmi_1 = + IconData(0xe874, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData ovrweight_bmi_1 = + IconData(0xe875, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData respiration_rate_1 = + IconData(0xe876, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData qr_code_3 = + IconData(0xe877, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData reschedule__1 = + IconData(0xe878, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData logout_1 = + IconData(0xe879, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData livecare_1 = + IconData(0xe87a, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData modify_episode_1 = + IconData(0xe87b, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData order_prescription_1 = + IconData(0xe87c, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData order_procedures_1 = + IconData(0xe87d, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData patient_sick_leave_1 = + IconData(0xe87e, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData progress_notes_2 = + IconData(0xe87f, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData radiology_2 = + IconData(0xe880, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData refer_patient_1 = + IconData(0xe881, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData ucaf_1 = + IconData(0xe882, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData vital_signs_1 = + IconData(0xe883, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData walkin_1 = + IconData(0xe884, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData admission_req_1 = + IconData(0xe885, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData booked_1 = + IconData(0xe886, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData create_episode_1 = + IconData(0xe887, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData ecg_1 = + IconData(0xe888, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData health_summary_1 = + IconData(0xe889, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData lab_results_1 = + IconData(0xe88a, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData female_2 = + IconData(0xe88b, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData filter_1 = + IconData(0xe88c, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData male_3 = + IconData(0xe88d, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData search_2 = + IconData(0xe88e, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData send_1 = + IconData(0xe88f, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData view_1 = + IconData(0xe890, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData warning_1 = + IconData(0xe891, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData add_1 = + IconData(0xe892, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData arrow_forward_1 = + IconData(0xe893, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData back_1 = + IconData(0xe894, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData close_1 = + IconData(0xe895, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData edit_1 = + IconData(0xe896, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData external_link_1 = + IconData(0xe897, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData verify_finger_1 = + IconData(0xe898, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData verify_sms_1 = + IconData(0xe899, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData verify_face_1 = + IconData(0xe89a, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData qr_reader_1 = + IconData(0xe89b, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData qr_reader_active_1 = + IconData(0xe89c, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData schedule_1 = + IconData(0xe89d, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData schedule_active_1 = + IconData(0xe89e, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData dr_reply_1 = + IconData(0xe89f, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData dr_reply_active_1 = + IconData(0xe8a0, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData home_1 = + IconData(0xe8a1, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData home_active_1 = + IconData(0xe8a2, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData verify_face = + IconData(0xe8a3, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData verify_finger = + IconData(0xe8a4, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData verify_whtsapp = + IconData(0xe8a5, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData verify_sms = + IconData(0xe8a6, fontFamily: _kFontFam, fontPackage: _kFontPkg); + + /// static const IconData 124 = IconData(0xe8a7, fontFamily: _kFontFam, fontPackage: _kFontPkg); + ///static const IconData 123 = IconData(0xe8a8, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData obese_bmi_r_1 = + IconData(0xe8a9, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData end_call = + IconData(0xe8d4, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData end_consultaion = + IconData(0xe8d5, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData folder_open = + IconData(0xe8d6, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData folder = + IconData(0xe8d7, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData link_in = + IconData(0xe8d8, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData link_out = + IconData(0xe8d9, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData mute_microphone = + IconData(0xe8da, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData no_video = + IconData(0xe8db, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData send_instruction = + IconData(0xe8dc, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData transfer_to_admin = + IconData(0xe8dd, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData inpatient = + IconData(0xe959, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData discharge = + IconData(0xe95a, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData order_sheets = + IconData(0xe95b, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData call = + IconData(0xe95c, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData medical_report = + IconData(0xe95d, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData painscale = + IconData(0xe95e, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData oxygenation = + IconData(0xe95f, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData speechtotext = + IconData(0xe960, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData search_medicines = + IconData(0xe964, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData discharge_patients = + IconData(0xe965, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData referral_discharge = + IconData(0xe966, fontFamily: _kFontFam, fontPackage: _kFontPkg); +} diff --git a/lib/widgets/input_widget.dart b/lib/widgets/input_widget.dart new file mode 100644 index 0000000..c503ef5 --- /dev/null +++ b/lib/widgets/input_widget.dart @@ -0,0 +1,163 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:hmg_flutter_template/classes/colors.dart'; +import 'package:hmg_flutter_template/extensions/int_extensions.dart'; +import 'package:hmg_flutter_template/extensions/widget_extensions.dart'; +import 'package:sizer/sizer.dart'; + +class CustomTextField extends StatefulWidget { + final String labelText; + final String? hintText; + final TextEditingController controller; + final VoidCallback? suffixTap; + final IconData? suffixIcon; + final bool isEnable; + final bool hasSelection; + final int? lines; + final bool isInputTypeNum; + final bool isTextIsPassword; + final bool isBackgroundEnable; + final bool isEnableBorder; + final double verticalPadding; + final double horizontalPadding; + final Function(String)? onChange; + final Function()? onEditComplete; + final Function(String)? onSubmit; + final Function? onClick; + final FocusNode? focusNode; + List? inputFormatters; + + CustomTextField( + this.labelText, + this.controller, { + Key? key, + this.isTextIsPassword = false, + this.suffixTap, + this.suffixIcon, + this.hintText, + this.isEnable = true, + this.hasSelection = false, + this.isEnableBorder = true, + this.lines = 1, + this.onChange, + this.onEditComplete, + this.onSubmit, + this.onClick, + this.isInputTypeNum = false, + this.isBackgroundEnable = false, + this.focusNode, + this.verticalPadding = 15, + this.horizontalPadding = 16, + this.inputFormatters, + }) : super(key: key); + + @override + CustomTextFieldState createState() => CustomTextFieldState(); +} + +class CustomTextFieldState extends State { + late bool isObscureText; + late FocusNode focusNode; + + @override + void initState() { + super.initState(); + focusNode = FocusNode(); + isObscureText = widget.isTextIsPassword; + } + + @override + void dispose() { + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return InkWell( + onTap: () { + focusNode.requestFocus(); + if (widget.hasSelection) widget.onClick!(); + }, + child: Container( + padding: EdgeInsets.only(left: widget.horizontalPadding, right: widget.horizontalPadding, bottom: widget.verticalPadding, top: widget.verticalPadding), + alignment: Alignment.center, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(15), + color: widget.isBackgroundEnable ? const Color(0xffF7F7F7) : Colors.white, + border: Border.all(color: widget.isEnableBorder ? Colors.grey.shade300 : Colors.transparent, width: 1), + ), + child: Row( + children: [ + Expanded( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Text( + widget.labelText, + style: TextStyle( + fontSize: 9.sp, + fontWeight: FontWeight.w600, + color: const Color(0xff2B353E), + letterSpacing: -0.44, + ), + ), + TextField( + focusNode: focusNode, + autofocus: false, + enabled: widget.isEnable, + scrollPadding: EdgeInsets.zero, + keyboardType: widget.isInputTypeNum ? TextInputType.number : TextInputType.text, + controller: widget.controller, + maxLines: widget.lines, + obscuringCharacter: "*", + obscureText: isObscureText, + onChanged: widget.onChange, + onEditingComplete: widget.onEditComplete, + onSubmitted: widget.onSubmit, + inputFormatters: widget.inputFormatters, + style: const TextStyle( + fontSize: 14, + height: 21 / 14, + fontWeight: FontWeight.w400, + color: Color(0xff2B353E), + letterSpacing: -0.44, + ), + decoration: InputDecoration( + isDense: true, + hintText: widget.hintText, + hintStyle: const TextStyle( + fontSize: 14, + height: 21 / 14, + fontWeight: FontWeight.w400, + color: Color(0xff575757), + letterSpacing: -0.56, + ), + suffixIconConstraints: const BoxConstraints(minWidth: 50), + suffixIcon: widget.suffixTap == null ? null : IconButton(icon: Icon(Icons.mic, color: MyColors.darkTextColor), onPressed: widget.suffixTap), + contentPadding: EdgeInsets.zero, + border: InputBorder.none, + focusedBorder: InputBorder.none, + enabledBorder: InputBorder.none, + ), + ), + ], + ), + ), + if (widget.isTextIsPassword) ...[ + 16.width, + Icon(isObscureText ? Icons.visibility_rounded : Icons.visibility_off_rounded).onPress(() { + setState(() { + isObscureText = !isObscureText; + }); + }) + ], + if (widget.hasSelection) const Icon(Icons.keyboard_arrow_down_outlined), + if (widget.suffixIcon != null && widget.suffixTap == null) Icon(widget.suffixIcon!), + ], + ), + ), + ); + } +} diff --git a/lib/widgets/item_detail_view_widget.dart b/lib/widgets/item_detail_view_widget.dart new file mode 100644 index 0000000..c1137da --- /dev/null +++ b/lib/widgets/item_detail_view_widget.dart @@ -0,0 +1,149 @@ +import 'dart:convert'; + +import 'package:flutter/material.dart'; +import 'package:hmg_flutter_template/classes/colors.dart'; +import 'package:hmg_flutter_template/extensions/int_extensions.dart'; +import 'package:hmg_flutter_template/extensions/string_extensions.dart'; +import 'package:hmg_flutter_template/extensions/widget_extensions.dart'; + + +class ItemDetailView extends StatelessWidget { + final String title; + final String value; + + const ItemDetailView(this.title, this.value, {Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + "$title:".toText12(isBold: true, color: const Color(0xff2D3238)), + 6.width, + (value.isEmpty ? "--" : value).toText12(color: MyColors.normalTextColor).expanded, + ], + ); + } +} + +class ItemDetailViewCol extends StatelessWidget { + final String title; + final String value; + + const ItemDetailViewCol(this.title, this.value, {Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + "$title:".toText12(isBold: true, color: const Color(0xff2BB8A6)), + 4.width, + (value.isEmpty ? "--" : value).toText12(color: MyColors.normalTextColor), + ], + ); + } +} + +class ItemDetailViewGridItem extends StatelessWidget { + int index; + final String? title; + final String? value; + final String? type; + final bool isNeedToShowEmptyDivider; + + ItemDetailViewGridItem(this.index, this.title, this.value, {Key? key, this.isNeedToShowEmptyDivider = false, this.type = ""}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + padding: EdgeInsets.only(left: index % 2 != 0 ? 12 : 0), + decoration: BoxDecoration( + color: Colors.transparent, + border: Border( + left: BorderSide( + //MyColors.lightGreyEFColor + // <--- left side + color: index % 2 != 0 ? MyColors.lightGreyEFColor : Colors.transparent, + width: 1.5, + ), + top: BorderSide( + // <--- left side + color: index > 1 ? MyColors.lightGreyEFColor : Colors.transparent, + width: 1.5, + ), + ), + ), + child: isNeedToShowEmptyDivider + ? Container() + : Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + title != null ? Flexible(child: "$title:".toText12Auto(isBold: true, color: const Color(0xff2BB8A6))) : Container(), + 4.width, + type != null + + ?Flexible(child: (value!.isEmpty ? "--" : value).toString().toText12Auto(color: MyColors.normalTextColor)) + : Container(), + ], + ), + ); + } +} + +class ItemDetailGrid extends StatelessWidget { + Widget child1, child2; + + bool isItLast; + + ItemDetailGrid(this.child1, this.child2, {this.isItLast = false}); + + @override + Widget build(BuildContext context) { + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + IntrinsicHeight( + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Expanded( + flex: 1, + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 8), + child: child1, + ), + ), + Container( + width: 1, + height: double.infinity, + color: MyColors.lightGreyEFColor, + margin: EdgeInsets.symmetric(horizontal: 8), + ), + Expanded( + flex: 1, + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 8), + child: child2, + ), + ), + ], + ), + ), + if (!isItLast) 1.divider, + ], + ); + } +} + +// Widget getStringFromJSON(String jsonString) { +// var body = json.decode(jsonString); +// ITGWorkListTableModel itgWorkListTableModel = ITGWorkListTableModel(); +// if (body.length != 0) { +// itgWorkListTableModel = ITGWorkListTableModel.fromJson(body[0][0]); +// return Flexible(child: (itgWorkListTableModel.textvalue).toString().toText12Auto(color: MyColors.normalTextColor)); +// } else { +// return Flexible(child: ("-").toString().toText12Auto(color: MyColors.normalTextColor)); +// } +// } diff --git a/lib/widgets/loading_dialog.dart b/lib/widgets/loading_dialog.dart new file mode 100644 index 0000000..540c094 --- /dev/null +++ b/lib/widgets/loading_dialog.dart @@ -0,0 +1,47 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/rendering.dart'; + +class LoadingDialog extends StatefulWidget { + LoadingDialog({Key? key}) : super(key: key); + + @override + _LoadingDialogState createState() { + return _LoadingDialogState(); + } +} + +class _LoadingDialogState extends State { + @override + void initState() { + super.initState(); + } + + @override + void dispose() { + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Dialog( + insetPadding: const EdgeInsets.symmetric(horizontal: 60.0, vertical: 24.0), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(16), + ), + elevation: 0, + backgroundColor: Colors.transparent, + child: Directionality( + textDirection: TextDirection.rtl, + child: Center( + child: Image.asset( + "assets/images/loading_mohemm_logo.gif", + height: 96.0, + width: 96.0, + ), + ), + ), + ); + } +} diff --git a/lib/widgets/otp_widget.dart b/lib/widgets/otp_widget.dart new file mode 100644 index 0000000..e90308d --- /dev/null +++ b/lib/widgets/otp_widget.dart @@ -0,0 +1,373 @@ +import 'dart:async'; + +import 'package:flutter/animation.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/rendering.dart'; +import 'package:flutter/services.dart'; + +typedef OnDone = void Function(String text); + +class ProvidedPinBoxTextAnimation { + static AnimatedSwitcherTransitionBuilder scalingTransition = (child, animation) { + return ScaleTransition( + child: child, + scale: animation, + ); + }; + + static AnimatedSwitcherTransitionBuilder defaultNoTransition = (Widget child, Animation animation) { + return child; + }; +} + +class OTPWidget extends StatefulWidget { + final int maxLength; + final TextEditingController? controller; + + final Color defaultBorderColor; + final Color pinBoxColor; + final double pinBoxBorderWidth; + final double pinBoxRadius; + final bool hideDefaultKeyboard; + + final TextStyle? pinTextStyle; + final double pinBoxHeight; + final double pinBoxWidth; + final OnDone? onDone; + final bool hasError; + final Color errorBorderColor; + final Color textBorderColor; + final Function(String)? onTextChanged; + final bool autoFocus; + final FocusNode? focusNode; + final AnimatedSwitcherTransitionBuilder? pinTextAnimatedSwitcherTransition; + final Duration pinTextAnimatedSwitcherDuration; + final TextDirection textDirection; + final TextInputType keyboardType; + final EdgeInsets pinBoxOuterPadding; + + const OTPWidget({ + Key? key, + this.maxLength: 4, + this.controller, + this.pinBoxWidth: 70.0, + this.pinBoxHeight: 70.0, + this.pinTextStyle, + this.onDone, + this.defaultBorderColor: Colors.black, + this.textBorderColor: Colors.black, + this.pinTextAnimatedSwitcherTransition, + this.pinTextAnimatedSwitcherDuration: const Duration(), + this.hasError: false, + this.errorBorderColor: Colors.red, + this.onTextChanged, + this.autoFocus: false, + this.focusNode, + this.textDirection: TextDirection.ltr, + this.keyboardType: TextInputType.number, + this.pinBoxOuterPadding = const EdgeInsets.symmetric(horizontal: 4.0), + this.pinBoxColor = Colors.white, + this.pinBoxBorderWidth = 2.0, + this.pinBoxRadius = 0, + this.hideDefaultKeyboard = false, + }) : super(key: key); + + @override + State createState() { + return OTPWidgetState(); + } +} + +class OTPWidgetState extends State with SingleTickerProviderStateMixin { + AnimationController? _highlightAnimationController; + FocusNode? focusNode; + String text = ""; + int currentIndex = 0; + List strList = []; + bool hasFocus = false; + + @override + void didUpdateWidget(OTPWidget oldWidget) { + super.didUpdateWidget(oldWidget); + focusNode = widget.focusNode ?? focusNode; + + if (oldWidget.maxLength < widget.maxLength) { + setState(() { + currentIndex = text.length; + }); + widget.controller?.text = text; + widget.controller?.selection = TextSelection.collapsed(offset: text.length); + } else if (oldWidget.maxLength > widget.maxLength && widget.maxLength > 0 && text.length > 0 && text.length > widget.maxLength) { + setState(() { + text = text.substring(0, widget.maxLength); + currentIndex = text.length; + }); + widget.controller?.text = text; + widget.controller?.selection = TextSelection.collapsed(offset: text.length); + } + } + + void calculateStrList() { + if (strList.length > widget.maxLength) { + strList.length = widget.maxLength; + } + while (strList.length < widget.maxLength) { + strList.add(""); + } + } + + @override + void initState() { + super.initState(); + focusNode = widget.focusNode ?? FocusNode(); + + _initTextController(); + calculateStrList(); + widget.controller?.addListener(_controllerListener); + focusNode?.addListener(_focusListener); + } + + void _controllerListener() { + if (mounted == true) { + setState(() { + _initTextController(); + }); + var onTextChanged = widget.onTextChanged; + if (onTextChanged != null) { + onTextChanged(widget.controller?.text ?? ""); + } + } + } + + void _focusListener() { + if (mounted == true) { + setState(() { + hasFocus = focusNode?.hasFocus ?? false; + }); + } + } + + void _initTextController() { + if (widget.controller == null) { + return; + } + strList.clear(); + var text = widget.controller?.text ?? ""; + if (text.isNotEmpty) { + if (text.length > widget.maxLength) { + throw Exception("TextEditingController length exceeded maxLength!"); + } + } + for (var i = 0; i < text.length; i++) { + strList.add(text[i]); + } + } + + double get _width { + var width = 0.0; + for (var i = 0; i < widget.maxLength; i++) { + width += widget.pinBoxWidth; + if (i == 0) { + width += widget.pinBoxOuterPadding.left; + } else if (i + 1 == widget.maxLength) { + width += widget.pinBoxOuterPadding.right; + } else { + width += widget.pinBoxOuterPadding.left; + } + } + return width; + } + + @override + void dispose() { + if (widget.focusNode == null) { + focusNode?.dispose(); + } else { + focusNode?.removeListener(_focusListener); + } + _highlightAnimationController?.dispose(); + widget.controller?.removeListener(_controllerListener); + + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Stack( + children: [ + _otpTextInput(), + _touchPinBoxRow(), + ], + ); + } + + Widget _touchPinBoxRow() { + return widget.hideDefaultKeyboard + ? _pinBoxRow(context) + : GestureDetector( + behavior: HitTestBehavior.opaque, + onTap: () { + if (hasFocus) { + FocusScope.of(context).requestFocus(FocusNode()); + Future.delayed(Duration(milliseconds: 100), () { + FocusScope.of(context).requestFocus(focusNode); + }); + } else { + FocusScope.of(context).requestFocus(focusNode); + } + }, + child: _pinBoxRow(context), + ); + } + + Widget _otpTextInput() { + var transparentBorder = OutlineInputBorder( + borderSide: BorderSide( + color: Colors.transparent, + width: 0.0, + ), + ); + return Container( + width: _width, + height: widget.pinBoxHeight, + child: TextField( + autofocus: !kIsWeb ? widget.autoFocus : false, + enableInteractiveSelection: false, + focusNode: focusNode, + controller: widget.controller, + keyboardType: widget.keyboardType, + inputFormatters: widget.keyboardType == TextInputType.number ? [FilteringTextInputFormatter.digitsOnly] : null, + style: TextStyle( + height: 0.1, + color: Colors.transparent, + ), + decoration: InputDecoration( + contentPadding: EdgeInsets.all(0), + focusedErrorBorder: transparentBorder, + errorBorder: transparentBorder, + disabledBorder: transparentBorder, + enabledBorder: transparentBorder, + focusedBorder: transparentBorder, + counterText: null, + counterStyle: null, + helperStyle: TextStyle( + height: 0.0, + color: Colors.transparent, + ), + labelStyle: TextStyle(height: 0.1), + fillColor: Colors.transparent, + border: InputBorder.none, + ), + cursorColor: Colors.transparent, + showCursor: false, + maxLength: widget.maxLength, + onChanged: _onTextChanged, + ), + ); + } + + void _onTextChanged(text) { + var onTextChanged = widget.onTextChanged; + if (onTextChanged != null) { + onTextChanged(text); + } + setState(() { + this.text = text; + if (text.length >= currentIndex) { + for (int i = currentIndex; i < text.length; i++) { + strList[i] = text[i]; + } + } + currentIndex = text.length; + }); + if (text.length == widget.maxLength) { + FocusScope.of(context).requestFocus(FocusNode()); + var onDone = widget.onDone; + if (onDone != null) { + onDone(text); + } + } + } + + Widget _pinBoxRow(BuildContext context) { + calculateStrList(); + List pinCodes = List.generate(widget.maxLength, (int i) { + return _buildPinCode(i, context); + }); + return Row(children: pinCodes, mainAxisSize: MainAxisSize.min); + } + + Widget _buildPinCode(int i, BuildContext context) { + Color borderColor; + Color pinBoxColor = widget.pinBoxColor; + + if (widget.hasError) { + borderColor = widget.errorBorderColor; + } else if (i < text.length) { + borderColor = widget.textBorderColor; + } else { + borderColor = widget.defaultBorderColor; + pinBoxColor = widget.pinBoxColor; + } + + EdgeInsets insets; + if (i == 0) { + insets = EdgeInsets.only( + left: 0, + top: widget.pinBoxOuterPadding.top, + right: widget.pinBoxOuterPadding.right, + bottom: widget.pinBoxOuterPadding.bottom, + ); + } else if (i == strList.length - 1) { + insets = EdgeInsets.only( + left: widget.pinBoxOuterPadding.left, + top: widget.pinBoxOuterPadding.top, + right: 0, + bottom: widget.pinBoxOuterPadding.bottom, + ); + } else { + insets = widget.pinBoxOuterPadding; + } + return Container( + key: ValueKey("container$i"), + alignment: Alignment.center, + padding: EdgeInsets.symmetric(vertical: 4.0, horizontal: 1.0), + margin: insets, + child: _animatedTextBox(strList[i], i), + decoration: BoxDecoration( + border: Border.all( + color: borderColor, + width: widget.pinBoxBorderWidth, + ), + color: pinBoxColor, + borderRadius: BorderRadius.circular(widget.pinBoxRadius), + ), + width: widget.pinBoxWidth, + height: widget.pinBoxHeight, + ); + } + + Widget _animatedTextBox(String text, int i) { + if (widget.pinTextAnimatedSwitcherTransition != null) { + return AnimatedSwitcher( + duration: widget.pinTextAnimatedSwitcherDuration, + transitionBuilder: widget.pinTextAnimatedSwitcherTransition ?? + (Widget child, Animation animation) { + return child; + }, + child: Text( + text, + key: ValueKey("$text$i"), + style: widget.pinTextStyle, + ), + ); + } else { + return Text( + text, + key: ValueKey("${strList[i]}$i"), + style: widget.pinTextStyle, + ); + } + } +} diff --git a/lib/widgets/radio/show_radio.dart b/lib/widgets/radio/show_radio.dart new file mode 100644 index 0000000..659bc42 --- /dev/null +++ b/lib/widgets/radio/show_radio.dart @@ -0,0 +1,45 @@ +import 'package:flutter/material.dart'; +import 'package:hmg_flutter_template/classes/colors.dart'; +import 'package:hmg_flutter_template/extensions/int_extensions.dart'; +import 'package:hmg_flutter_template/extensions/string_extensions.dart'; + +class ShowRadio extends StatelessWidget { + String title, value, groupValue; + Color selectedColor; + + ShowRadio({ + required this.title, + required this.value, + required this.groupValue, + this.selectedColor = Colors.black, + }); + + @override + Widget build(BuildContext context) { + return Row( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + width: 24, + height: 24, + decoration: BoxDecoration( + color: Colors.transparent, + border: Border.all(color: MyColors.grey98Color, width: 0.5), + borderRadius: BorderRadius.all(Radius.circular(100)), + ), + padding: EdgeInsets.all(4), + child: Container( + width: double.infinity, + height: double.infinity, + decoration: BoxDecoration( + color: value == groupValue ? selectedColor : Colors.transparent, + borderRadius: BorderRadius.all(Radius.circular(100)), + ), + ), + ), + 12.width, + title.toText12(maxLine: 2) + ], + ); + } +} diff --git a/lib/widgets/shimmer/dashboard_shimmer_widget.dart b/lib/widgets/shimmer/dashboard_shimmer_widget.dart new file mode 100644 index 0000000..a134c44 --- /dev/null +++ b/lib/widgets/shimmer/dashboard_shimmer_widget.dart @@ -0,0 +1,256 @@ +// import 'package:easy_localization/src/public_ext.dart'; +// import 'package:flutter/material.dart'; +// import 'package:flutter_svg/svg.dart'; +// import 'package:hmg_flutter_template/extensions/int_extensions.dart'; +// import 'package:hmg_flutter_template/extensions/string_extensions.dart'; +// import 'package:hmg_flutter_template/extensions/widget_extensions.dart'; +// +// import 'package:shimmer/shimmer.dart'; +// +// class GetAttendanceTrackingShimmer extends StatelessWidget { +// @override +// Widget build(BuildContext context) { +// return Container( +// width: double.infinity, +// height: double.infinity, +// clipBehavior: Clip.antiAlias, +// decoration: BoxDecoration( +// color: Colors.white, +// borderRadius: BorderRadius.circular(15), +// boxShadow: [ +// BoxShadow( +// color: const Color(0xff000000).withOpacity(.05), +// blurRadius: 26, +// offset: const Offset(0, -3), +// ), +// ], +// ), +// child: Stack( +// alignment: Alignment.center, +// children: [ +// // SvgPicture.asset("assets/images/"), +// Column( +// crossAxisAlignment: CrossAxisAlignment.start, +// children: [ +// Expanded( +// child: Column( +// mainAxisSize: MainAxisSize.min, +// crossAxisAlignment: CrossAxisAlignment.start, +// children: [ +// LocaleKeys.markAttendance.tr().toText14(color: Colors.white, isBold: true).toShimmer(), +// 16.height, +// "07:55:12".toText10(color: Colors.white, isBold: true).toShimmer(), +// 3.height, +// LocaleKeys.timeLeftToday.tr().toText10(color: Colors.white).toShimmer(), +// 9.height, +// const ClipRRect( +// borderRadius: BorderRadius.all( +// Radius.circular(20), +// ), +// child: LinearProgressIndicator( +// value: 0.7, +// minHeight: 8, +// valueColor: const AlwaysStoppedAnimation(Colors.white), +// backgroundColor: const Color(0xff196D73), +// ), +// ).toShimmer(), +// ], +// ).paddingOnly(top: 12, right: 15, left: 12), +// ), +// Row( +// children: [ +// Expanded( +// child: Column( +// mainAxisSize: MainAxisSize.min, +// crossAxisAlignment: CrossAxisAlignment.start, +// children: [ +// LocaleKeys.checkIn.tr().toText12(color: Colors.white).toShimmer(), +// ], +// ).paddingOnly(left: 12), +// ), +// Container( +// width: 45, +// height: 45, +// // color: Colors.blue, +// padding: const EdgeInsets.only(left: 14, right: 14), +// ).toShimmer(), +// ], +// ), +// ], +// ), +// ], +// ), +// ); +// } +// } +// +// class MenuShimmer extends StatelessWidget { +// @override +// Widget build(BuildContext context) { +// return Container( +// clipBehavior: Clip.antiAlias, +// decoration: BoxDecoration( +// color: Colors.white, +// borderRadius: BorderRadius.circular(15), +// boxShadow: [ +// BoxShadow( +// color: const Color(0xff000000).withOpacity(.05), +// blurRadius: 26, +// offset: const Offset(0, -3), +// ), +// ], +// ), +// child: Column( +// mainAxisAlignment: MainAxisAlignment.spaceBetween, +// crossAxisAlignment: CrossAxisAlignment.start, +// children: [ +// LocaleKeys.workList.tr().toText12(color: Colors.white).toShimmer(), +// Row( +// children: [ +// Expanded( +// flex: 3, +// child: 123.toString().toText10(color: Colors.white, isBold: true).toShimmer(), +// ), +// 12.width, +// SvgPicture.asset("assets/images/arrow_next.svg", color: Colors.white).toShimmer() +// ], +// ) +// ], +// ).paddingOnly(left: 10, right: 10, bottom: 6, top: 6), +// ); +// } +// } +// +// class ServicesHeaderShimmer extends StatelessWidget { +// @override +// Widget build(BuildContext context) { +// return Row( +// crossAxisAlignment: CrossAxisAlignment.center, +// children: [ +// Expanded( +// child: Column( +// crossAxisAlignment: CrossAxisAlignment.start, +// mainAxisSize: MainAxisSize.min, +// children: [ +// "Other".tr().toText10().toShimmer(), +// 6.height, +// LocaleKeys.services.tr().toText12(isBold: true).toShimmer(), +// ], +// ), +// ), +// LocaleKeys.viewAllServices.tr().toText12(isUnderLine: true).toShimmer(), +// ], +// ); +// } +// } +// +// class ServicesMenuShimmer extends StatelessWidget { +// @override +// Widget build(BuildContext context) { +// return Container( +// decoration: BoxDecoration( +// color: Colors.white, +// borderRadius: BorderRadius.circular(15), +// boxShadow: [ +// BoxShadow( +// color: const Color(0xff000000).withOpacity(.05), +// blurRadius: 26, +// offset: const Offset(0, -3), +// ), +// ], +// ), +// child: Column( +// mainAxisAlignment: MainAxisAlignment.spaceBetween, +// crossAxisAlignment: CrossAxisAlignment.start, +// children: [ +// SvgPicture.asset("assets/images/monthly_attendance.svg").toShimmer(), +// Column( +// crossAxisAlignment: CrossAxisAlignment.start, +// mainAxisAlignment: MainAxisAlignment.start, +// children: [ +// "Attendan".toText11(isBold: false).toShimmer(), +// 5.height, +// Row( +// crossAxisAlignment: CrossAxisAlignment.end, +// children: [ +// Expanded( +// child: LocaleKeys.attendance.tr().toText11(isBold: false).toShimmer(), +// ), +// 6.width, +// SvgPicture.asset("assets/images/arrow_next.svg").paddingOnly(bottom: 4).toShimmer() +// ], +// ), +// ], +// ) +// ], +// ).paddingOnly(left: 10, right: 10, bottom: 10, top: 12), +// ); +// } +// } +// +// class ChatHomeShimmer extends StatelessWidget { +// @override +// Widget build(BuildContext context) { +// return Container( +// width: double.infinity, +// padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 16.0), +// child: Column( +// mainAxisSize: MainAxisSize.max, +// children: [ +// Expanded( +// child: Shimmer.fromColors( +// baseColor: Colors.white, +// highlightColor: Colors.grey.shade100, +// child: ListView.builder( +// itemBuilder: (_, __) => Padding( +// padding: const EdgeInsets.only(bottom: 8.0), +// child: Row( +// crossAxisAlignment: CrossAxisAlignment.start, +// children: [ +// Container( +// width: 48.0, +// height: 48.0, +// decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.all(Radius.circular(40))), +// ), +// const Padding( +// padding: EdgeInsets.symmetric(horizontal: 8.0), +// ), +// Expanded( +// child: Column( +// crossAxisAlignment: CrossAxisAlignment.start, +// children: [ +// Container( +// width: double.infinity, +// height: 8.0, +// color: Colors.white, +// ), +// const Padding( +// padding: EdgeInsets.symmetric(vertical: 2.0), +// ), +// Container( +// width: double.infinity, +// height: 8.0, +// color: Colors.white, +// ), +// const Padding( +// padding: EdgeInsets.symmetric(vertical: 2.0), +// ), +// Container( +// width: 40.0, +// height: 8.0, +// color: Colors.white, +// ), +// ], +// ), +// ) +// ], +// ), +// ), +// itemCount: 6, +// ), +// ), +// ), +// ], +// )); +// } +// } diff --git a/lib/widgets/swipe/nfc_reader_sheet.dart b/lib/widgets/swipe/nfc_reader_sheet.dart new file mode 100644 index 0000000..3dc357d --- /dev/null +++ b/lib/widgets/swipe/nfc_reader_sheet.dart @@ -0,0 +1,194 @@ +// import 'dart:async'; +// +// import 'package:flutter/material.dart'; +// +// +// void showNfcReader(BuildContext context, {Function onNcfScan}) { +// showModalBottomSheet( +// context: context, +// enableDrag: false, +// isDismissible: false, +// shape: RoundedRectangleBorder( +// borderRadius: BorderRadius.only(topLeft: Radius.circular(12), topRight: Radius.circular(12)), +// ), +// backgroundColor: Colors.white, +// builder: (context) { +// return NfcLayout( +// onNcfScan: onNcfScan, +// ); +// }); +// } +// +// class NfcLayout extends StatefulWidget { +// Function onNcfScan; +// +// NfcLayout({this.onNcfScan}); +// +// @override +// _NfcLayoutState createState() => _NfcLayoutState(); +// } +// +// class _NfcLayoutState extends State { +// StreamSubscription _stream; +// bool _reading = false; +// Widget mainWidget; +// String nfcId; +// +// @override +// void initState() { +// super.initState(); +// +// setState(() { +// // _reading = true; +// // Start reading using NFC.readNDEF() +// _stream = NFC.readNDEF(once: false, throwOnUserCancel: false, readerMode: NFCDispatchReaderMode()).listen((NDEFMessage message) { +// setState(() { +// _reading = true; +// mainWidget = doneNfc(); +// }); +// Future.delayed(const Duration(milliseconds: 500), () { +// _stream?.cancel(); +// widget.onNcfScan(nfcId); +// Navigator.pop(context); +// }); +// print("read NDEF id: ${message.id}"); +// print("NFC Record " + message.payload); +// print("NFC Record Lenght " + message.records.length.toString()); +// print("NFC Record " + message.records.first.id); +// print("NFC Record " + message.records.first.payload); +// print("NFC Record " + message.records.first.data); +// print("NFC Record " + message.records.first.type); +// // widget.onNcfScan(message.id); +// nfcId = message.id; +// }, onError: (e) { +// // Check error handling guide below +// }); +// }); +// } +// +// @override +// Widget build(BuildContext context) { +// (mainWidget == null && !_reading) ? mainWidget = scanNfc() : mainWidget = doneNfc(); +// return AnimatedSwitcher(duration: Duration(milliseconds: 500), child: mainWidget); +// } +// +// Widget scanNfc() { +// return Container( +// key: ValueKey(1), +// child: Column( +// mainAxisSize: MainAxisSize.min, +// children: [ +// SizedBox( +// height: 30, +// ), +// Text( +// "Ready To Scan", +// style: TextStyle( +// fontWeight: FontWeight.bold, +// fontSize: 24, +// ), +// ), +// SizedBox( +// height: 30, +// ), +// Image.asset( +// "assets/images/nfc/ic_nfc.png", +// height: MediaQuery.of(context).size.width / 3, +// ), +// SizedBox( +// height: 30, +// ), +// Text( +// "Approach an NFC Tag", +// style: TextStyle( +// fontSize: 18, +// ), +// ), +// SizedBox( +// height: 30, +// ), +// ButtonTheme( +// minWidth: MediaQuery.of(context).size.width / 1.2, +// height: 45.0, +// buttonColor: Colors.grey[300], +// shape: RoundedRectangleBorder( +// borderRadius: BorderRadius.circular(6), +// ), +// child: RaisedButton( +// onPressed: () { +// _stream?.cancel(); +// Navigator.pop(context); +// }, +// elevation: 0, +// child: Text("CANCEL"), +// ), +// ), +// SizedBox( +// height: 30, +// ), +// ], +// ), +// ); +// } +// +// Widget doneNfc() { +// return Container( +// key: ValueKey(2), +// child: Column( +// mainAxisSize: MainAxisSize.min, +// children: [ +// SizedBox( +// height: 30, +// ), +// Text( +// "Successfully Scanned", +// style: TextStyle( +// fontWeight: FontWeight.bold, +// fontSize: 24, +// ), +// ), +// SizedBox( +// height: 30, +// ), +// Image.asset( +// "assets/images/nfc/ic_done.png", +// height: MediaQuery.of(context).size.width / 3, +// ), +// SizedBox( +// height: 30, +// ), +// Text( +// "Approach an NFC Tag", +// style: TextStyle( +// fontSize: 18, +// ), +// ), +// SizedBox( +// height: 30, +// ), +// ButtonTheme( +// minWidth: MediaQuery.of(context).size.width / 1.2, +// height: 45.0, +// buttonColor: Colors.grey[300], +// shape: RoundedRectangleBorder( +// borderRadius: BorderRadius.circular(6), +// ), +// child: RaisedButton( +// // onPressed: () { +// // _stream?.cancel(); +// // widget.onNcfScan(nfcId); +// // Navigator.pop(context); +// // }, +// onPressed: null, +// elevation: 0, +// child: Text("DONE"), +// ), +// ), +// SizedBox( +// height: 30, +// ), +// ], +// ), +// ); +// } +// } diff --git a/pubspec.lock b/pubspec.lock new file mode 100644 index 0000000..69f0e01 --- /dev/null +++ b/pubspec.lock @@ -0,0 +1,745 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.10" + args: + dependency: transitive + description: + name: args + url: "https://pub.dartlang.org" + source: hosted + version: "2.3.1" + async: + dependency: transitive + description: + name: async + url: "https://pub.dartlang.org" + source: hosted + version: "2.9.0" + auto_size_text: + dependency: "direct main" + description: + name: auto_size_text + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + cached_network_image: + dependency: "direct main" + description: + name: cached_network_image + url: "https://pub.dartlang.org" + source: hosted + version: "3.2.3" + cached_network_image_platform_interface: + dependency: transitive + description: + name: cached_network_image_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + cached_network_image_web: + dependency: transitive + description: + name: cached_network_image_web + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.2" + characters: + dependency: transitive + description: + name: characters + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.1" + clock: + dependency: transitive + description: + name: clock + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.1" + cloud_firestore_platform_interface: + dependency: transitive + description: + name: cloud_firestore_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "5.9.2" + cloud_firestore_web: + dependency: transitive + description: + name: cloud_firestore_web + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.1" + collection: + dependency: transitive + description: + name: collection + url: "https://pub.dartlang.org" + source: hosted + version: "1.16.0" + crypto: + dependency: transitive + description: + name: crypto + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.2" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.5" + easy_localization: + dependency: "direct main" + description: + name: easy_localization + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.1" + easy_logger: + dependency: transitive + description: + name: easy_logger + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.2" + fake_async: + dependency: transitive + description: + name: fake_async + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.1" + ffi: + dependency: transitive + description: + name: ffi + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.1" + file: + dependency: transitive + description: + name: file + url: "https://pub.dartlang.org" + source: hosted + version: "6.1.4" + firebase_core: + dependency: "direct main" + description: + name: firebase_core + url: "https://pub.dartlang.org" + source: hosted + version: "2.4.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "4.5.2" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.2" + firebase_messaging: + dependency: "direct main" + description: + name: firebase_messaging + url: "https://pub.dartlang.org" + source: hosted + version: "14.1.4" + firebase_messaging_platform_interface: + dependency: transitive + description: + name: firebase_messaging_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "4.2.8" + firebase_messaging_web: + dependency: transitive + description: + name: firebase_messaging_web + url: "https://pub.dartlang.org" + source: hosted + version: "3.2.9" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_blurhash: + dependency: transitive + description: + name: flutter_blurhash + url: "https://pub.dartlang.org" + source: hosted + version: "0.7.0" + flutter_cache_manager: + dependency: transitive + description: + name: flutter_cache_manager + url: "https://pub.dartlang.org" + source: hosted + version: "3.3.0" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.1" + flutter_localizations: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + flutter_plugin_android_lifecycle: + dependency: transitive + description: + name: flutter_plugin_android_lifecycle + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.7" + flutter_svg: + dependency: "direct main" + description: + name: flutter_svg + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.6" + 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" + fluttertoast: + dependency: "direct main" + description: + name: fluttertoast + url: "https://pub.dartlang.org" + source: hosted + version: "8.1.2" + hexcolor: + dependency: "direct main" + description: + name: hexcolor + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.7" + http: + dependency: "direct main" + description: + name: http + url: "https://pub.dartlang.org" + source: hosted + version: "0.13.5" + http_parser: + dependency: transitive + description: + name: http_parser + url: "https://pub.dartlang.org" + source: hosted + version: "4.0.2" + injector: + dependency: "direct main" + description: + name: injector + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + intl: + dependency: transitive + description: + name: intl + url: "https://pub.dartlang.org" + source: hosted + version: "0.17.0" + js: + dependency: transitive + description: + name: js + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.4" + lints: + dependency: transitive + description: + name: lints + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.1" + local_auth: + dependency: "direct main" + description: + name: local_auth + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.11" + logger: + dependency: "direct main" + description: + name: logger + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + matcher: + dependency: transitive + description: + name: matcher + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.12" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.5" + meta: + dependency: transitive + description: + name: meta + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.0" + nested: + dependency: transitive + description: + name: nested + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" + octo_image: + dependency: transitive + description: + name: octo_image + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.2" + path: + dependency: transitive + description: + name: path + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.2" + path_drawing: + dependency: transitive + description: + name: path_drawing + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + path_parsing: + dependency: transitive + description: + name: path_parsing + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + path_provider: + dependency: "direct main" + description: + name: path_provider + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.11" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.22" + path_provider_ios: + dependency: transitive + description: + name: path_provider_ios + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.11" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.7" + path_provider_macos: + dependency: transitive + description: + name: path_provider_macos + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.6" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.5" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.3" + pedantic: + dependency: transitive + description: + name: pedantic + url: "https://pub.dartlang.org" + source: hosted + version: "1.11.1" + permission_handler: + dependency: "direct main" + description: + name: permission_handler + url: "https://pub.dartlang.org" + source: hosted + version: "9.2.0" + permission_handler_android: + dependency: transitive + description: + name: permission_handler_android + url: "https://pub.dartlang.org" + source: hosted + version: "9.0.2+1" + permission_handler_apple: + dependency: transitive + description: + name: permission_handler_apple + url: "https://pub.dartlang.org" + source: hosted + version: "9.0.7" + permission_handler_platform_interface: + dependency: transitive + description: + name: permission_handler_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "3.9.0" + permission_handler_windows: + dependency: transitive + description: + name: permission_handler_windows + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.2" + petitparser: + dependency: transitive + description: + name: petitparser + url: "https://pub.dartlang.org" + source: hosted + version: "5.1.0" + platform: + dependency: transitive + description: + name: platform + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.0" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.3" + process: + dependency: transitive + description: + name: process + url: "https://pub.dartlang.org" + source: hosted + version: "4.2.4" + provider: + dependency: "direct main" + description: + name: provider + url: "https://pub.dartlang.org" + source: hosted + version: "6.0.5" + rxdart: + dependency: transitive + description: + name: rxdart + url: "https://pub.dartlang.org" + source: hosted + version: "0.27.7" + shared_preferences: + dependency: "direct main" + description: + name: shared_preferences + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.15" + shared_preferences_android: + dependency: transitive + description: + name: shared_preferences_android + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.14" + shared_preferences_ios: + dependency: transitive + description: + name: shared_preferences_ios + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.1" + shared_preferences_linux: + dependency: transitive + description: + name: shared_preferences_linux + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.2" + shared_preferences_macos: + dependency: transitive + description: + name: shared_preferences_macos + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.4" + shared_preferences_platform_interface: + dependency: transitive + description: + name: shared_preferences_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + shared_preferences_web: + dependency: transitive + description: + name: shared_preferences_web + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.4" + shared_preferences_windows: + dependency: transitive + description: + name: shared_preferences_windows + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.2" + shimmer: + dependency: "direct main" + description: + name: shimmer + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + sizer: + dependency: "direct main" + description: + name: sizer + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.15" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + url: "https://pub.dartlang.org" + source: hosted + version: "1.9.0" + sqflite: + dependency: transitive + description: + name: sqflite + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.2" + sqflite_common: + dependency: transitive + description: + name: sqflite_common + url: "https://pub.dartlang.org" + source: hosted + version: "2.4.0+2" + stack_trace: + dependency: transitive + description: + name: stack_trace + url: "https://pub.dartlang.org" + source: hosted + version: "1.10.0" + stream_channel: + dependency: transitive + description: + name: stream_channel + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.1" + synchronized: + dependency: transitive + description: + name: synchronized + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.0+3" + term_glyph: + dependency: transitive + description: + name: term_glyph + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.1" + test_api: + dependency: transitive + description: + name: test_api + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.12" + typed_data: + dependency: transitive + description: + name: typed_data + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.1" + universal_io: + dependency: transitive + description: + name: universal_io + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.4" + url_launcher: + dependency: "direct main" + description: + name: url_launcher + url: "https://pub.dartlang.org" + source: hosted + version: "6.1.7" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + url: "https://pub.dartlang.org" + source: hosted + version: "6.0.22" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + url: "https://pub.dartlang.org" + source: hosted + version: "6.0.17" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.1" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.1" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.1" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.13" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.1" + uuid: + dependency: transitive + description: + name: uuid + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.7" + vector_math: + dependency: transitive + description: + name: vector_math + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.2" + win32: + dependency: transitive + description: + name: win32 + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.3" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.0+2" + xml: + dependency: transitive + description: + name: xml + url: "https://pub.dartlang.org" + source: hosted + version: "6.1.0" +sdks: + dart: ">=2.18.2 <3.0.0" + flutter: ">=3.3.0" diff --git a/pubspec.yaml b/pubspec.yaml new file mode 100644 index 0000000..a068e30 --- /dev/null +++ b/pubspec.yaml @@ -0,0 +1,112 @@ +name: hmg_flutter_template +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 + +# The following defines the version and build number for your application. +# A version number is three numbers separated by dots, like 1.2.43 +# followed by an optional build number separated by a +. +# Both the version and the builder number may be overridden in flutter +# build by specifying --build-name and --build-number, respectively. +# In Android, build-name is used as versionName while build-number used as versionCode. +# Read more about Android versioning at https://developer.android.com/studio/publish/versioning +# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. +# Read more about iOS versioning at +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +# In Windows, build-name is used as the major, minor, and patch parts +# of the product and file versions while build-number is used as the build suffix. +version: 1.0.0+1 + +environment: + sdk: '>=2.18.2 <3.0.0' + +# 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.2 + path_provider: ^2.0.8 + injector: ^2.0.0 + provider: ^6.0.1 + easy_localization: ^3.0.0 + http: ^0.13.4 + permission_handler: ^9.2.0 + flutter_svg: any + fluttertoast: ^8.0.8 + shared_preferences: ^2.0.12 + logger: ^1.1.0 + auto_size_text: ^3.0.0 + shimmer: ^2.0.0 + sizer: ^2.0.15 + local_auth: ^1.1.9 + hexcolor: ^2.0.4 + cached_network_image: ^3.2.3 + url_launcher: ^6.1.7 + + + + # Firebase + firebase_messaging: ^14.1.0 + firebase_core: ^2.2.0 + + +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: ^2.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/ + - assets/langs/ + - assets/images/svgs/ + - assets/images/svgs/profile_screen/ + - assets/images/svgs/bottom_nav/ + - assets/images/svgs/verification/ + - assets/images/login/ + - assets/images/ + + + + fonts: + - family: Poppins + fonts: + - asset: assets/fonts/Poppins/Poppins-Regular.ttf + weight: 400 + - asset: assets/fonts/Poppins/Poppins-Medium.ttf + weight: 500 + - asset: assets/fonts/Poppins/Poppins-SemiBold.ttf + weight: 600 + - asset: assets/fonts/Poppins/Poppins-Bold.ttf + weight: 700 + - asset: assets/fonts/Poppins/Poppins-Bold.ttf + weight: 800 + - asset: assets/fonts/Poppins/Poppins-Bold.ttf + weight: 900 diff --git a/test/widget_test.dart b/test/widget_test.dart new file mode 100644 index 0000000..b78d57b --- /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:hmg_flutter_template/main.dart'; + +void main() { + testWidgets('Counter increments smoke test', (WidgetTester tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget( MyApp()); + + // 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); + }); +}