Merge branch 'master' into dev_aamir

# Conflicts:
#	lib/core/app_assets.dart
#	lib/core/enums.dart
#	lib/core/utils/calender_utils_new.dart
#	lib/main.dart
#	lib/presentation/hmg_services/services_page.dart
#	lib/presentation/hmg_services/services_view.dart
#	lib/routes/app_routes.dart
pull/118/head
aamir-csol 1 month ago
commit 7d71d994ea

@ -0,0 +1,3 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="mapbox_access_token" translatable="false" tools:ignore="UnusedResources">sk.eyJ1IjoicndhaWQiLCJhIjoiY2x6NWo0bTMzMWZodzJrcGZpemYzc3Z4dSJ9.uSSZuwNSGCcCdPAiORECmg</string>
</resources>

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 224 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

@ -0,0 +1,5 @@
<svg width="35" height="36" viewBox="0 0 35 36" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M24.7655 2.68793e-05C22.4959 -0.000446999 20.3022 0.831603 18.5867 2.3436C16.8712 3.8556 15.7488 5.94619 15.4254 8.23203C15.4016 8.40311 15.4144 8.5774 15.4629 8.74298C15.5115 8.90856 15.5945 9.06152 15.7065 9.19141C15.8185 9.32131 15.9567 9.42506 16.1117 9.49558C16.2667 9.56611 16.4349 9.60173 16.6047 9.60003C16.8891 9.6033 17.1651 9.50187 17.3818 9.31443C17.5985 9.127 17.7414 8.86617 17.784 8.58003C18.0405 6.6832 19.027 4.96773 20.5265 3.81101C22.026 2.65428 23.9156 2.15105 25.7797 2.41203C27.6439 2.673 29.3298 3.6768 30.4665 5.20259C31.6033 6.72839 32.0979 8.6512 31.8414 10.548C31.573 12.3164 30.6823 13.9254 29.3352 15.0755C27.988 16.2256 26.276 16.8385 24.5179 16.8H1.17931C0.866538 16.8 0.566576 16.9265 0.345412 17.1515C0.124248 17.3765 0 17.6818 0 18C0 18.3183 0.124248 18.6235 0.345412 18.8486C0.566576 19.0736 0.866538 19.2 1.17931 19.2H24.4353C26.8716 19.2402 29.2327 18.3408 31.044 16.6824C32.8554 15.024 33.9829 12.7296 34.2 10.26C34.2891 8.94494 34.111 7.62528 33.6769 6.38328C33.2429 5.14127 32.562 4.00355 31.6769 3.04099C30.7918 2.07843 29.7214 1.31167 28.5323 0.788485C27.3432 0.265302 26.061 -0.00309236 24.7655 2.68793e-05Z" fill="#3B355A"/>
<path d="M19.8006 21.5996H1.17931C0.866538 21.5996 0.566576 21.726 0.345412 21.9511C0.124248 22.1761 0 22.4814 0 22.7996C0 23.1179 0.124248 23.4231 0.345412 23.6481C0.566576 23.8732 0.866538 23.9996 1.17931 23.9996H19.8006C20.5146 23.9992 21.2194 24.1638 21.8618 24.4809C22.5041 24.7979 23.0674 25.2592 23.5091 25.83C23.9509 26.4008 24.2595 27.0662 24.4117 27.776C24.564 28.4858 24.5559 29.2215 24.3881 29.9276C24.1363 30.985 23.5389 31.924 22.6939 32.5907C21.8488 33.2573 20.8062 33.612 19.7371 33.5967C18.6679 33.5814 17.6356 33.1969 16.8093 32.5062C15.9831 31.8156 15.4119 30.8598 15.1895 29.7956C15.1418 29.5139 14.9968 29.2587 14.7805 29.0761C14.5643 28.8935 14.2912 28.7955 14.0102 28.7996C13.8393 28.7976 13.6699 28.8335 13.514 28.9047C13.358 28.976 13.2191 29.0809 13.1069 29.2121C12.9948 29.3434 12.912 29.4979 12.8643 29.665C12.8166 29.832 12.8052 30.0076 12.8309 30.1796C13.0878 31.5182 13.7131 32.755 14.6339 33.746C15.5547 34.7371 16.7332 35.4416 18.0323 35.7776C19.3313 36.1137 20.6974 36.0673 21.9716 35.644C23.2457 35.2208 24.3756 34.438 25.2295 33.3867C26.0834 32.3355 26.6264 31.0591 26.7951 29.7061C26.9639 28.3531 26.7515 26.9791 26.1827 25.7441C25.6139 24.5092 24.7121 23.464 23.5822 22.7303C22.4524 21.9965 21.141 21.6044 19.8006 21.5996Z" fill="#3B355A"/>
<path d="M7.77155 11.8205H1.27355C0.960777 11.8205 0.660814 11.947 0.439651 12.172C0.218487 12.3971 0.0942383 12.7023 0.0942383 13.0205C0.0942383 13.3388 0.218487 13.644 0.439651 13.8691C0.660814 14.0941 0.960777 14.2205 1.27355 14.2205H7.71259C9.06084 14.2431 10.3698 13.7583 11.3884 12.8592C12.407 11.9601 13.0634 10.7099 13.2318 9.34854C13.3614 8.0124 12.9972 6.67504 12.2103 5.59734C11.4233 4.51964 10.27 3.7789 8.97535 3.51963C7.68071 3.26035 6.33757 3.50113 5.20795 4.195C4.07832 4.88887 3.24325 5.98606 2.86562 7.27253C2.81077 7.45608 2.79996 7.65032 2.83411 7.83899C2.86825 8.02765 2.94635 8.20524 3.06186 8.35686C3.17737 8.50848 3.32691 8.62971 3.49796 8.71038C3.66901 8.79106 3.85658 8.82883 4.04493 8.82054C4.31433 8.82852 4.57828 8.74238 4.79286 8.57644C5.00743 8.4105 5.15967 8.17479 5.22424 7.90854C5.44561 7.20326 5.91546 6.60618 6.54341 6.23217C7.17136 5.85817 7.91304 5.73365 8.62578 5.88257C9.33852 6.03149 9.97197 6.44333 10.4043 7.03887C10.8366 7.6344 11.0372 8.37156 10.9675 9.10854C10.865 9.88557 10.4799 10.5952 9.88817 11.0974C9.29645 11.5995 8.54118 11.8575 7.77155 11.8205Z" fill="#3B355A"/>
</svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

@ -0,0 +1,3 @@
<svg width="30" height="41" viewBox="0 0 30 41" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M29.943 24.2303L29.9145 23.8321C29.4563 17.7622 26.6788 13.9572 24.2285 10.601C21.9596 7.49317 20 4.80939 20 0.849479C20 0.531496 19.825 0.24086 19.5475 0.0950652C19.2691 -0.0515247 18.9347 -0.027517 18.6816 0.159695C15.0016 2.83933 11.9312 7.35572 10.8586 11.665C10.114 14.6652 10.0155 18.0379 10.0016 20.2655C6.6032 19.5268 5.83336 14.3538 5.82523 14.2975C5.78695 14.0292 5.62586 13.7957 5.39148 13.6681C5.15469 13.5423 4.87633 13.5332 4.63625 13.6541C4.45805 13.7418 0.262031 15.9114 0.0178903 24.5748C0.000780959 24.863 0 25.1511 0 25.4401C0 33.8559 6.7293 40.7033 15 40.7033C23.2707 40.7033 30 33.8559 30 25.4401C30 25.0178 29.9716 24.6237 29.943 24.2303ZM15 39.0074C12.2428 39.0074 10 36.5762 10 33.5876C10 33.4858 9.99922 33.3831 10.0065 33.2572C10.0398 31.9969 10.2751 31.1365 10.533 30.5643C11.0165 31.621 11.8815 32.5922 13.2845 32.5922C13.7452 32.5922 14.1179 32.213 14.1179 31.7443C14.1179 30.5369 14.1423 29.1441 14.4377 27.887C14.7006 26.7716 15.3288 25.5866 16.1248 24.636C16.4788 25.8698 17.1689 26.8685 17.8427 27.8432C18.8071 29.2377 19.804 30.6793 19.979 33.1379C19.9895 33.2836 20.0002 33.4302 20.0002 33.5875C20 36.5762 17.7572 39.0074 15 39.0074ZM20.2666 37.8994C21.1316 36.6991 21.6667 35.2154 21.6667 33.5876C21.6667 33.3881 21.6545 33.2025 21.6301 32.8556C21.4323 30.0873 20.2498 28.3765 19.2058 26.867C18.3163 25.5818 17.5489 24.4714 17.5489 22.8963C17.5489 22.5742 17.3698 22.2802 17.0866 22.137C16.8051 21.9928 16.4649 22.0252 16.2134 22.2198C14.6152 23.4486 13.2821 25.5172 12.8166 27.4922C12.579 28.505 12.496 29.6005 12.4667 30.5014C11.8889 29.8688 11.7098 28.6962 11.7083 28.6805C11.6709 28.4081 11.5065 28.1704 11.2664 28.0437C11.028 27.9179 10.7423 27.9146 10.5023 28.0404C10.2923 28.1497 8.44742 29.2262 8.34164 33.1861C8.3343 33.3203 8.33352 33.4544 8.33352 33.5877C8.33352 35.2155 8.86867 36.6992 9.73367 37.8995C4.9943 35.8171 1.66687 31.0181 1.66687 25.4403C1.66687 25.186 1.66609 24.9327 1.68312 24.6502C1.82633 19.5674 3.42469 17.0468 4.46797 15.9347C5.19547 18.5846 7.10141 22.0484 10.8335 22.0484C11.2941 22.0484 11.6669 21.6691 11.6669 21.2004C11.6669 18.3626 11.7295 15.0834 12.475 12.0808C13.3213 8.679 15.6398 5.00567 18.4385 2.51897C18.9032 6.15096 20.8473 8.81406 22.8909 11.6121C25.3201 14.9393 27.8315 18.3799 28.2522 23.9513L28.2807 24.357C28.3067 24.7098 28.3336 25.0618 28.3336 25.4402C28.3334 31.0181 25.0059 35.8171 20.2666 37.8994Z" fill="#D59E95"/>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

@ -0,0 +1,3 @@
<svg width="27" height="35" viewBox="0 0 27 35" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M17.7188 6.51163C19.575 6.51163 21.0938 5.04651 21.0938 3.25581C21.0938 1.46512 19.575 0 17.7188 0C15.8625 0 14.3438 1.46512 14.3438 3.25581C14.3438 5.04651 15.8625 6.51163 17.7188 6.51163ZM12.3188 26.0465L13.3312 21.9767L16.875 25.2326V33.3721C16.875 34.186 17.55 35 18.5625 35C19.575 35 20.25 34.186 20.25 33.3721V24.2558C20.25 23.2791 19.9125 22.4651 19.2375 21.9767L16.7062 19.6977L17.7188 14.814C19.575 16.7674 22.1062 18.2326 25.1437 18.7209C26.1562 18.8837 27 18.0698 27 17.093C27 16.2791 26.325 15.6279 25.4813 15.4651C22.95 14.9767 20.7563 13.6744 19.7437 11.7209L18.0562 9.11628C17.3813 8.13953 16.3687 7.48837 15.1875 7.48837C14.6812 7.48837 14.3438 7.65116 13.8375 7.65116L7.0875 10.4186C5.7375 10.7442 5.0625 11.8837 5.0625 13.186V17.093C5.0625 18.0698 5.7375 18.7209 6.75 18.7209C7.7625 18.7209 8.4375 18.0698 8.4375 17.093V13.186L11.475 12.0465L8.775 25.2326L2.025 23.9302C1.18125 23.7674 0.16875 24.2558 0 25.2326C0 26.0465 0.50625 26.8605 1.35 27.186L8.4375 28.4884C10.125 28.814 11.9813 27.6744 12.3188 26.0465Z" fill="#6A46F5"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 189 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

@ -0,0 +1,3 @@
<svg width="29" height="25" viewBox="0 0 29 25" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M14.5 25C14.3533 25 14.2066 24.9622 14.0752 24.8866C13.9325 24.8045 10.5414 22.8419 7.10161 19.8848C5.06289 18.1322 3.4355 16.3939 2.26474 14.7182C0.749726 12.5499 -0.0121446 10.4643 0.000146364 8.51917C0.014533 6.2558 0.827833 4.12725 2.2904 2.52556C3.77767 0.89688 5.76246 0 7.87928 0C10.5922 0 13.0725 1.51475 14.5 3.91429C15.9275 1.5148 18.4079 0 21.1208 0C23.1207 0 25.0287 0.809258 26.4937 2.27873C28.1013 3.89131 29.0148 6.16982 28.9998 8.5299C28.9875 10.4716 28.2113 12.5541 26.693 14.7194C25.5186 16.3942 23.8935 18.1318 21.8627 19.8838C18.4355 22.8407 15.0688 24.8032 14.9271 24.8853C14.7951 24.9617 14.6475 25 14.5 25Z" fill="#6A46F5"/>
</svg>

After

Width:  |  Height:  |  Size: 764 B

@ -0,0 +1,4 @@
<svg width="23" height="36" viewBox="0 0 23 36" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M13.5555 6.567C15.3689 6.567 16.839 5.09693 16.839 3.2835C16.839 1.47007 15.3689 0 13.5555 0C11.742 0 10.272 1.47007 10.272 3.2835C10.272 5.09693 11.742 6.567 13.5555 6.567Z" fill="#3263B8"/>
<path d="M21.8875 16.0899L17.66 14.6945C17.66 14.6945 15.3205 9.27668 15.2384 9.11251C14.6638 8.08642 13.5967 7.38867 12.3654 7.38867C11.8728 7.38867 11.3803 7.5118 10.9699 7.71702L5.22376 9.97443C4.81332 10.1386 4.48497 10.467 4.3208 10.8774L2.26861 15.8026C1.94026 16.6235 2.30966 17.6086 3.17157 17.9369C3.37679 18.019 3.58201 18.06 3.78723 18.06C4.44393 18.06 5.05959 17.6907 5.30585 17.034L6.98864 12.7654L8.71248 12.1087L5.88046 25.9404L0.380599 32.6306C-0.194014 33.3283 -0.111926 34.3544 0.585818 34.929C0.873124 35.1753 1.24252 35.2984 1.61191 35.2984C2.10444 35.2984 2.55592 35.0932 2.88427 34.6828L8.63039 27.7053C8.79457 27.5001 8.9177 27.2538 8.95874 27.0076L9.94379 22.2465L14.3765 25.4479V33.6567C14.3765 34.5596 15.1153 35.2984 16.0183 35.2984C16.9212 35.2984 17.66 34.5596 17.66 33.6567V24.627C17.66 24.0935 17.4138 23.601 17.0033 23.3136L13.0221 20.3995L14.1303 14.8586L14.9101 16.6646C15.1153 17.075 15.4437 17.4033 15.8951 17.5675L20.8204 19.2093C20.9846 19.2503 21.1487 19.2914 21.354 19.2914C22.0517 19.2914 22.6674 18.8399 22.9136 18.1832C23.2009 17.3213 22.7494 16.3773 21.8875 16.0899Z" fill="#3263B8"/>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

@ -0,0 +1,5 @@
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="40" height="40" rx="10" fill="#EFEFF0"/>
<path d="M14.0753 9.25021C13.2113 9.25016 12.4632 9.25011 11.8634 9.33132C11.2162 9.41894 10.5997 9.61694 10.1035 10.1166C9.61238 10.6111 9.42254 11.2171 9.33787 11.8513C9.2582 12.448 9.25824 13.1949 9.25828 14.0698L9.25828 14.1308C9.25828 14.3712 9.2561 14.6022 9.25402 14.8221C9.24862 15.3915 9.24394 15.8867 9.27973 16.2795C9.33543 16.8907 9.49919 17.4598 9.99582 17.9599C10.3701 18.3368 10.9888 18.3482 11.3777 17.9854C11.7665 17.6225 11.7783 17.0228 11.4039 16.6458C11.3286 16.5699 11.2602 16.48 11.2267 16.1128C11.1997 15.8167 11.2031 15.4635 11.208 14.9542C11.2103 14.717 11.2128 14.4458 11.2128 14.1308C11.2128 13.1779 11.2148 12.5551 11.2763 12.0945C11.3346 11.6576 11.4308 11.5121 11.5116 11.4306C11.5875 11.3542 11.7172 11.2642 12.1337 11.2078C12.5823 11.1471 13.1922 11.145 14.1415 11.145L25.8593 11.145C26.8086 11.145 27.4185 11.1471 27.867 11.2078C28.2835 11.2642 28.4133 11.3542 28.4891 11.4306C28.57 11.5121 28.6662 11.6576 28.7245 12.0945C28.786 12.5551 28.7879 13.1779 28.7879 14.1308C28.7879 14.444 28.7905 14.7139 28.7927 14.9501C28.7975 15.4613 28.8009 15.8159 28.7737 16.1125C28.7402 16.4796 28.6717 16.5697 28.5961 16.6458C28.2218 17.0228 28.2336 17.6225 28.6224 17.9854C29.0113 18.3482 29.6299 18.3368 30.0043 17.9599C30.5007 17.4599 30.6647 16.8911 30.7207 16.2798C30.7567 15.8861 30.752 15.3898 30.7467 14.8191C30.7446 14.6001 30.7425 14.3702 30.7425 14.1308L30.7425 14.0698C30.7425 13.1949 30.7425 12.448 30.6629 11.8513C30.5782 11.2171 30.3884 10.6111 29.8972 10.1166C29.4011 9.61695 28.7845 9.41894 28.1374 9.33132C27.5376 9.25012 26.7894 9.25016 25.9255 9.25021L14.0753 9.25021Z" fill="#8F9AA3"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.9847 29.8165C15.9786 31.0614 17.9981 31.0614 18.9921 29.8165C19.2106 29.5428 19.6488 29.2974 20.0003 29.2974C20.3518 29.2974 20.79 29.5428 21.0086 29.8165C22.0025 31.0614 24.022 31.0614 25.016 29.8165L25.5671 29.1263C25.6367 29.0391 25.7683 28.9739 25.9361 28.9818C26.1042 28.9898 26.2188 29.0662 26.2713 29.1496C26.6934 29.8193 27.4142 30.0602 28.0409 30.0126C28.65 29.9663 29.3162 29.6346 29.6255 28.9757C29.8189 28.6746 29.7452 27.999 29.6842 27.6989L27.7532 18.5617C27.5206 17.4608 27.3318 16.5674 27.0926 15.8695C26.8432 15.1417 26.5131 14.5436 25.9479 14.0868C25.3832 13.6304 24.7289 13.4325 23.9643 13.3395C23.2301 13.2502 22.3142 13.2502 21.1841 13.2502L18.8166 13.2502C17.6864 13.2502 16.7705 13.2502 16.0363 13.3395C15.2717 13.4325 14.6175 13.6304 14.0527 14.0868C13.4875 14.5436 13.1575 15.1417 12.908 15.8695C12.6688 16.5674 12.4801 17.4608 12.2474 18.5617L10.3164 27.6989C10.2554 27.999 10.1818 28.6746 10.3751 28.9757C10.6844 29.6346 11.3506 29.9663 11.9597 30.0126C12.5865 30.0602 13.3072 29.8193 13.7293 29.1496C13.7819 29.0662 13.8965 28.9898 14.0645 28.9818C14.2323 28.9739 14.3639 29.0391 14.4336 29.1263L14.9847 29.8165ZM20.0003 17.2502C20.4145 17.2502 20.7503 17.586 20.7503 18.0002C20.7503 18.4144 20.4145 18.7502 20.0003 18.7502L17.0003 18.7502C16.5861 18.7502 16.2503 18.4144 16.2503 18.0002C16.2503 17.586 16.5861 17.2502 17.0003 17.2502L20.0003 17.2502ZM22.7503 22.0002C22.7503 21.586 22.4145 21.2502 22.0003 21.2502L16.0003 21.2502C15.5861 21.2502 15.2503 21.586 15.2503 22.0002C15.2503 22.4144 15.5861 22.7502 16.0003 22.7502L22.0003 22.7502C22.4145 22.7502 22.7503 22.4144 22.7503 22.0002Z" fill="#8F9AA3"/>
</svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

@ -0,0 +1,4 @@
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="40" height="40" rx="10" fill="#EFEFF0"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.25 19.5667C9.25 13.8384 14.0952 9.25 20 9.25C25.9048 9.25 30.75 13.8384 30.75 19.5667C30.75 25.295 25.9048 29.8834 20 29.8834C19.3041 29.8843 18.6103 29.8199 17.927 29.6916C17.6898 29.647 17.5391 29.6189 17.427 29.6036C17.3433 29.5907 17.2593 29.6219 17.2277 29.6391C17.1132 29.6935 16.9607 29.7744 16.7271 29.8986C15.2954 30.66 13.625 30.93 12.014 30.6303C11.7538 30.5819 11.5384 30.4 11.4471 30.1517C11.3559 29.9033 11.4022 29.6252 11.5692 29.4199C12.037 28.8445 12.3586 28.1513 12.5009 27.4052C12.5394 27.2 12.4523 26.9213 12.1845 26.6494C10.3697 24.8065 9.25 22.3144 9.25 19.5667ZM19 17.2582C19 16.9566 19.3228 16.5 20 16.5C20.6772 16.5 21 16.9566 21 17.2582C21 17.3803 20.9608 17.5021 20.8762 17.6178C20.7622 17.7734 20.6156 17.9397 20.4303 18.1422L20.3414 18.239C20.1863 18.4076 20.0087 18.6007 19.847 18.796C19.4761 19.2443 19 19.9172 19 20.7747V21.2143C19 21.7666 19.4477 22.2143 20 22.2143C20.5523 22.2143 21 21.7666 21 21.2143V20.7747C21 20.6612 21.0666 20.4593 21.3878 20.0712C21.5131 19.9198 21.6484 19.7726 21.8027 19.6046L21.9056 19.4925C22.092 19.2889 22.3051 19.0517 22.4901 18.799C22.8065 18.3667 23 17.8363 23 17.2582C23 15.6177 21.5319 14.5 20 14.5C18.4681 14.5 17 15.6177 17 17.2582C17 17.8105 17.4477 18.2582 18 18.2582C18.5523 18.2582 19 17.8105 19 17.2582ZM20 23.5C19.4477 23.5 19 23.9477 19 24.5C19 25.0523 19.4477 25.5 20 25.5H20.012C20.5643 25.5 21.012 25.0523 21.012 24.5C21.012 23.9477 20.5643 23.5 20.012 23.5H20Z" fill="#8F9AA3"/>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

@ -0,0 +1,4 @@
<svg width="18" height="22" viewBox="0 0 18 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M11.0245 0.677785C10.0169 -0.225928 8.48311 -0.225928 7.47553 0.677785C6.78675 1.29557 5.93331 2.15517 5.24695 3.14951C4.5675 4.13383 4 5.32467 4 6.58902C4 9.04684 6.0323 11.5 9.25 11.5C12.4677 11.5 14.5 9.04684 14.5 6.58902C14.5 5.32467 13.9325 4.13383 13.2531 3.14951C12.5667 2.15517 11.7133 1.29557 11.0245 0.677785Z" fill="white"/>
<path d="M1.5528 12.0433C1.87561 11.9999 2.27244 12 2.70526 12L3.14482 12C3.55136 12 3.95322 12.0915 4.31883 12.2684L6.36081 13.2564C6.52138 13.3341 6.69974 13.3751 6.8815 13.3751L7.92409 13.3752C9.32329 13.3752 10.5 13.7342 10.5 15.1473C10.5 15.5384 10.2337 15.8583 9.88361 15.9551L7.3427 16.6576C6.71218 16.832 6.03692 16.7717 5.44831 16.4869L3.82802 15.7029C3.5173 15.5526 3.14354 15.6826 2.9932 15.9933C2.84286 16.304 2.97288 16.6778 3.28359 16.8281L4.90388 17.6121C5.76687 18.0296 6.75412 18.1173 7.6758 17.8624L10.2167 17.1599C11.081 16.921 11.75 16.1286 11.75 15.1473C11.7621 15.0127 11.7537 14.7736 11.6828 14.5243C11.5898 14.1974 11.5433 14.0339 11.5822 13.9622C11.6212 13.8905 11.7456 13.8523 11.9942 13.7759L14.1197 13.1229L14.1212 13.1224C15.2517 12.7709 16.4623 13.1937 17.1551 14.1532C17.7766 15.0138 17.5365 16.2554 16.6033 16.7938L9.08771 21.1302C8.43272 21.5081 7.65626 21.6016 6.93181 21.3866L1.93291 19.9033C1.6183 19.81 1.32351 19.7225 1.08569 19.6207C0.821024 19.5074 0.554741 19.3479 0.347562 19.0703C0.140382 18.7927 0.0632054 18.4921 0.0298745 18.2061C-7.46753e-05 17.9492 -3.65283e-05 17.6417 3.52604e-06 17.3135V14.7053C-4.79724e-05 14.2724 -9.37469e-05 13.8756 0.0433061 13.5528C0.0910985 13.1973 0.203546 12.8216 0.512569 12.5126C0.821594 12.2035 1.19732 12.0911 1.5528 12.0433Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

@ -0,0 +1,5 @@
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="40" height="40" rx="10" fill="#EFEFF0"/>
<path d="M13.4058 10.1574C14.5835 8.94752 16.4165 8.94752 17.5942 10.1574C18.054 10.6299 18.5719 11.2016 19.0817 11.8477C19.233 12.0394 19.3087 12.1353 19.3025 12.2484C19.2964 12.3615 19.2078 12.4518 19.0307 12.6323C18.0071 13.675 16.8174 15.04 15.8309 16.6019C14.7234 18.3553 13.75 20.5486 13.75 22.9263C13.75 23.1554 13.7589 23.3852 13.7765 23.6151C13.8106 24.0582 13.8276 24.2797 13.6884 24.378C13.5492 24.4762 13.3692 24.3962 13.0093 24.2361C10.6089 23.1688 9.25 20.608 9.25 18.1746C9.25 16.5195 9.90101 14.9267 10.7194 13.5687C11.5421 12.2036 12.5698 11.0164 13.4058 10.1574Z" fill="#8F9AA3"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M20.4937 13.2908C21.9094 11.9031 24.0906 11.9031 25.5063 13.2908C26.5644 14.3279 27.8628 15.7593 28.9009 17.403C29.9341 19.0387 30.75 20.9482 30.75 22.9263C30.75 26.7556 27.8319 30.75 23 30.75C18.1681 30.75 15.25 26.7556 15.25 22.9263C15.25 20.9482 16.0659 19.0387 17.0991 17.403C18.1372 15.7593 19.4356 14.3279 20.4937 13.2908ZM26.5 22.5C27.0523 22.5 27.5 22.9477 27.5 23.5C27.5 24.8503 27.0299 25.8998 26.2068 26.5932C25.4132 27.2618 24.4095 27.5 23.5 27.5C22.9477 27.5 22.5 27.0523 22.5 26.5C22.5 25.9477 22.9477 25.5 23.5 25.5C24.0905 25.5 24.5868 25.3428 24.9182 25.0636C25.2201 24.8094 25.5 24.3589 25.5 23.5C25.5 22.9477 25.9477 22.5 26.5 22.5Z" fill="#8F9AA3"/>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

@ -0,0 +1,10 @@
<svg width="34" height="34" viewBox="0 0 34 34" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1_27024)">
<path d="M16.9795 19.2095C16.93 19.7925 17.3257 22.8783 17.5299 24.0883C17.6272 24.6615 17.8937 25.5955 17.7978 26.0914C17.6609 26.7825 17.6213 27.6769 17.6967 28.1976C17.7442 28.5139 17.8939 29.9725 17.6798 30.506C17.5677 30.7858 17.3624 32.2195 17.3624 32.2195C16.8274 33.5702 17.1293 33.5038 17.1293 33.5038C17.2949 33.707 17.5786 33.5197 17.5786 33.5197C17.7947 33.6575 17.9444 33.487 17.9444 33.487C18.1299 33.6405 18.3461 33.4681 18.3461 33.4681C18.5792 33.5891 18.7953 33.366 18.7953 33.366C18.9291 33.4334 18.9619 33.3482 18.9619 33.3482C19.3635 33.3225 18.7378 32.0373 18.7378 32.0373C18.588 30.883 18.8865 30.2406 18.8865 30.2406C19.8642 27.3411 19.9139 26.5716 19.5231 25.4789C19.413 25.1634 19.3851 25.0385 19.4358 24.9016C19.5529 24.5855 19.4675 23.3141 19.6103 22.8093C19.8859 21.8356 20.1577 19.3663 20.2994 18.2142C20.4897 16.6622 19.625 14.5813 19.625 14.5813C19.4356 13.7345 19.7133 10.7174 19.7133 10.7174C20.101 11.3208 20.0862 12.3858 20.0862 12.3858C20.0246 13.5028 20.9885 15.2099 20.9885 15.2099C21.4517 15.9154 21.6271 16.5847 21.6271 16.6344C21.6271 16.8376 21.5826 17.3296 21.5826 17.3296L21.6004 17.758C21.6083 17.8671 21.6697 18.2428 21.6598 18.4244C21.5875 19.5419 21.765 19.3317 21.765 19.3317C21.9148 19.3317 22.0795 18.4324 22.0795 18.4324C22.0795 18.6643 22.0228 19.3585 22.1479 19.6204C22.2975 19.9327 22.4076 19.5668 22.4095 19.4934C22.4491 18.0705 22.5346 18.4433 22.5346 18.4433C22.6178 19.5976 22.7201 19.8583 22.9035 19.7681C23.0424 19.7018 22.9154 18.3829 22.9154 18.3829C23.1533 19.1664 23.3337 19.2911 23.3337 19.2911C23.7263 19.5668 23.4835 18.8053 23.429 18.6545C23.1385 17.8533 23.1295 17.5757 23.1295 17.5757C23.4925 18.2956 23.7661 18.2689 23.7661 18.2689C24.1201 18.1559 23.4567 17.1364 23.0679 16.6481C22.8696 16.3992 22.6138 16.066 22.5395 15.8682C22.4185 15.533 22.3271 14.4556 22.3271 14.4556C22.2905 13.1843 21.9762 12.632 21.9762 12.632C21.4388 11.7719 21.3377 10.1673 21.3377 10.1673L21.3139 7.45832C21.1255 5.61048 19.7639 5.59712 19.7639 5.59712C18.3877 5.39226 18.1962 4.94768 18.1962 4.94768C17.9047 4.52818 18.0712 3.72403 18.0712 3.72403C18.3131 3.52731 18.4064 3.00505 18.4064 3.00505C18.808 2.69711 18.7883 2.2465 18.6028 2.25139C18.4539 2.2553 18.4877 2.13202 18.4877 2.13202C18.7388 0.103572 16.938 0 16.938 0H16.6631C16.6631 0 14.8615 0.103572 15.1123 2.13153C15.1123 2.13153 15.146 2.25497 14.9958 2.2509C14.8108 2.24601 14.7936 2.69662 15.1937 3.00457C15.1937 3.00457 15.2869 3.52666 15.5289 3.72354C15.5289 3.72354 15.6954 4.52769 15.4039 4.94719C15.4039 4.94719 15.2131 5.39177 13.8362 5.59663C13.8362 5.59663 12.4723 5.60999 12.2869 7.45784L12.2611 10.1668C12.2611 10.1668 12.1619 11.7714 11.6224 12.6316C11.6224 12.6316 11.3096 13.1839 11.2734 14.4551C11.2734 14.4551 11.1818 15.5325 11.0612 15.8677C10.9878 16.0646 10.7321 16.3978 10.5322 16.6476C10.14 17.135 9.48096 18.1523 9.83353 18.2684C9.83353 18.2684 10.1086 18.2951 10.4701 17.5752C10.4701 17.5752 10.4626 17.8509 10.1726 18.654C10.1156 18.8029 9.8731 19.5644 10.2659 19.2906C10.2659 19.2906 10.4478 19.1657 10.6843 18.3824C10.6843 18.3824 10.5574 19.7013 10.6986 19.7676C10.8831 19.858 10.9837 19.5971 11.0669 18.4428C11.0669 18.4428 11.1523 18.0701 11.1919 19.4929C11.1938 19.5663 11.3015 19.9322 11.4518 19.6199C11.5786 19.358 11.5216 18.6649 11.5216 18.4319C11.5216 18.4319 11.6843 19.3312 11.8364 19.3312C11.8364 19.3312 12.0154 19.5414 11.9419 18.4239C11.93 18.2414 11.994 17.8667 12.002 17.7576L12.0193 17.3291C12.0193 17.3291 11.9747 16.8383 11.9747 16.6339C11.9747 16.5832 12.1502 15.9149 12.6132 15.2095C12.6132 15.2095 13.5761 13.5015 13.5141 12.3853C13.5141 12.3853 13.5007 11.3203 13.8885 10.7169C13.8885 10.7169 14.1637 13.7339 13.9772 14.5809C13.9772 14.5809 13.111 16.6617 13.3021 18.2137C13.4428 19.3689 13.7141 21.835 13.9903 22.8088C14.1345 23.3127 14.0492 24.5837 14.1648 24.9011C14.2169 25.039 14.1896 25.166 14.0775 25.4784C13.6888 26.5711 13.7383 27.3407 14.7161 30.2401C14.7161 30.2401 15.017 30.8825 14.8649 32.0368C14.8649 32.0368 14.2402 33.322 14.6403 33.3477C14.6403 33.3477 14.6716 33.4329 14.8069 33.3655C14.8069 33.3655 15.023 33.5886 15.2566 33.4676C15.2566 33.4676 15.4728 33.6402 15.6577 33.4865C15.6577 33.4865 15.8059 33.657 16.022 33.5192C16.022 33.5192 16.3056 33.7106 16.4742 33.5033C16.4742 33.5033 16.7737 33.5697 16.2405 32.219C16.2405 32.219 16.0363 30.7871 15.9238 30.5055C15.7091 29.9722 15.8607 28.5105 15.9065 28.1972C15.9803 27.6734 15.9407 26.7812 15.8059 26.0909C15.7072 25.5961 15.9744 24.662 16.0731 24.0878C16.2758 22.879 16.6732 19.793 16.6235 19.209L16.7877 19.2667C16.9053 19.267 16.9795 19.2095 16.9795 19.2095Z" fill="#2E3039"/>
</g>
<defs>
<clipPath id="clip0_1_27024">
<rect width="33.6" height="33.6" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 4.8 KiB

@ -0,0 +1,5 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M5 10.4189C5 6.60727 8.12437 3.5 12 3.5C15.8756 3.5 19 6.60727 19 10.4189C19 11.7227 18.6361 12.94 18.003 13.98C17.7158 14.4518 17.8654 15.067 18.3372 15.3542C18.8089 15.6414 19.4242 15.4917 19.7113 15.02C20.5292 13.6763 21 12.1008 21 10.4189C21 5.48352 16.9609 1.5 12 1.5C7.03907 1.5 3 5.48352 3 10.4189C3 12.1008 3.47075 13.6763 4.28867 15.02C4.57584 15.4917 5.19107 15.6414 5.66283 15.3542C6.13458 15.067 6.28421 14.4518 5.99704 13.98C5.36394 12.94 5 11.7227 5 10.4189Z" fill="#FFAF15"/>
<path d="M16.2105 15.755C16.1022 15.75 15.9736 15.75 15.8432 15.75L13 15.75L13 12.3377C13.6525 12.122 14.2312 11.7074 14.7242 11.1896C15.1051 10.7896 15.0896 10.1567 14.6896 9.77581C14.2896 9.39495 13.6567 9.41044 13.2758 9.81041C12.783 10.3279 12.3512 10.5 12 10.5C11.6488 10.5 11.217 10.3279 10.7242 9.81041C10.3433 9.41045 9.71037 9.39495 9.31041 9.77581C8.91044 10.1567 8.89495 10.7896 9.27581 11.1896C9.76884 11.7074 10.3475 12.122 11 12.3377L11 15.75H8.15684C8.02643 15.75 7.89781 15.75 7.78945 15.755C7.67503 15.7602 7.52127 15.7728 7.3611 15.8212C6.8626 15.9717 6.5267 16.3363 6.50126 16.7498C6.49309 16.8826 6.52614 16.9996 6.55585 17.0857C6.8873 18.7676 7.57151 19.25 8.1569 19.25L15.8431 19.25C16.4285 19.25 17.1127 18.7676 17.4441 17.0857C17.4739 16.9996 17.5069 16.8826 17.4987 16.7498C17.4733 16.3363 17.1374 15.9717 16.6389 15.8212C16.4787 15.7728 16.325 15.7602 16.2105 15.755Z" fill="#FFAF15"/>
<path d="M10.3321 22.4013C10.6774 22.5018 11.0856 22.5018 11.9019 22.5018C12.7182 22.5018 13.1264 22.5018 13.4717 22.4013C14.0057 22.2458 14.4551 21.9204 14.7324 21.4884C14.8356 21.3276 14.906 21.1423 14.9776 20.8791C15.0674 20.5491 15.1123 20.3841 15.0223 20.2663C14.9322 20.1484 14.7551 20.1484 14.4009 20.1484L9.40295 20.1484C9.04873 20.1484 8.87162 20.1484 8.78156 20.2663C8.69151 20.3841 8.73641 20.5491 8.82623 20.8791C8.89786 21.1423 8.96819 21.3276 9.07142 21.4884C9.34876 21.9204 9.79812 22.2458 10.3321 22.4013Z" fill="#FFAF15"/>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

@ -0,0 +1,8 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8 11.75C7.30964 11.75 6.75 12.3096 6.75 13C6.75 13.6904 7.30964 14.25 8 14.25H8.00897C8.69933 14.25 9.25897 13.6904 9.25897 13C9.25897 12.3096 8.69933 11.75 8.00897 11.75H8Z" fill="#8F9AA3"/>
<path d="M11.9955 11.75C11.3052 11.75 10.7455 12.3096 10.7455 13C10.7455 13.6904 11.3052 14.25 11.9955 14.25H12.0045C12.6948 14.25 13.2545 13.6904 13.2545 13C13.2545 12.3096 12.6948 11.75 12.0045 11.75H11.9955Z" fill="#8F9AA3"/>
<path d="M15.991 11.75C15.3007 11.75 14.741 12.3096 14.741 13C14.741 13.6904 15.3007 14.25 15.991 14.25H16C16.6904 14.25 17.25 13.6904 17.25 13C17.25 12.3096 16.6904 11.75 16 11.75H15.991Z" fill="#8F9AA3"/>
<path d="M8 15.75C7.30964 15.75 6.75 16.3096 6.75 17C6.75 17.6904 7.30964 18.25 8 18.25H8.00897C8.69933 18.25 9.25897 17.6904 9.25897 17C9.25897 16.3096 8.69933 15.75 8.00897 15.75H8Z" fill="#8F9AA3"/>
<path d="M11.9955 15.75C11.3052 15.75 10.7455 16.3096 10.7455 17C10.7455 17.6904 11.3052 18.25 11.9955 18.25H12.0045C12.6948 18.25 13.2545 17.6904 13.2545 17C13.2545 16.3096 12.6948 15.75 12.0045 15.75H11.9955Z" fill="#8F9AA3"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7 2C7 1.44772 6.55229 1 6 1C5.44772 1 5 1.44772 5 2V2.44885C4.23882 2.6903 3.57734 3.06994 3.01802 3.6746C2.18949 4.57031 1.83279 5.69272 1.66416 7.04866C1.49997 8.36894 1.49998 10.0541 1.5 12.1739L1.5 12.8261C1.49998 14.9459 1.49997 16.6311 1.66416 17.9513C1.83279 19.3073 2.18949 20.4297 3.01802 21.3254C3.8568 22.2322 4.92535 22.6329 6.21533 22.8204C7.45141 23.0001 9.02291 23 10.9712 23H13.0288C14.977 23 16.5486 23.0001 17.7847 22.8204C19.0747 22.6329 20.1432 22.2322 20.982 21.3254C21.8105 20.4297 22.1672 19.3073 22.3358 17.9513C22.5 16.6311 22.5 14.9459 22.5 12.8261V12.1739C22.5 10.0541 22.5 8.36895 22.3358 7.04866C22.1672 5.69272 21.8105 4.57031 20.982 3.6746C20.4227 3.06993 19.7612 2.6903 19 2.44885V2C19 1.44772 18.5523 1 18 1C17.4477 1 17 1.44772 17 2V2.09173C15.903 1.99995 14.5863 1.99998 13.0288 2L10.9712 2C9.41376 1.99998 8.09704 1.99995 7 2.09173V2ZM4.49783 9C4.03921 9 3.8099 9 3.66385 9.14417C3.51781 9.28833 3.51487 9.51472 3.509 9.96751C3.50027 10.6407 3.5 11.3942 3.5 12.2432V12.7568C3.5 14.9616 3.50182 16.5221 3.64887 17.7045C3.79327 18.8656 4.06263 19.5094 4.48622 19.9673C4.89956 20.4142 5.4647 20.6903 6.503 20.8412C7.57858 20.9975 9.00425 21 11.05 21H12.95C14.9957 21 16.4214 20.9975 17.497 20.8412C18.5353 20.6903 19.1004 20.4142 19.5138 19.9673C19.9374 19.5094 20.2067 18.8656 20.3511 17.7045C20.4982 16.5221 20.5 14.9616 20.5 12.7568V12.2432C20.5 11.3942 20.4997 10.6407 20.491 9.96751C20.4851 9.51472 20.4822 9.28833 20.3362 9.14417C20.1901 9 19.9608 9 19.5022 9L4.49783 9Z" fill="#8F9AA3"/>
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

@ -0,0 +1,4 @@
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6.14286 7.27526C6.06081 7.19321 5.94953 7.14712 5.8335 7.14712C5.68326 7.14712 5.53722 7.14711 5.396 7.14757V9.54083C6.06931 9.73127 6.56266 10.3503 6.56266 11.0846V11.668C6.56266 11.9096 6.36679 12.1055 6.12516 12.1055C5.88354 12.1055 5.68766 11.9096 5.68766 11.668V11.0846C5.68766 10.6819 5.3612 10.3555 4.9585 10.3555C4.55579 10.3555 4.22933 10.6819 4.22933 11.0846V11.668C4.22933 11.9096 4.03345 12.1055 3.79183 12.1055C3.55021 12.1055 3.35433 11.9096 3.35433 11.668V11.0846C3.35433 10.3503 3.84768 9.73127 4.521 9.54083V7.16254C4.27509 7.17241 4.05216 7.18858 3.85498 7.21509C3.32991 7.28568 2.88782 7.4367 2.5367 7.78782C2.18558 8.13894 2.03456 8.58103 1.96397 9.1061C1.89598 9.61182 1.89598 10.2548 1.896 11.0526V12.8346C1.896 13.0762 2.09187 13.2721 2.3335 13.2721H11.6668C11.9085 13.2721 12.1043 13.0762 12.1043 12.8346V11.0526C12.1043 10.2548 12.1044 9.61183 12.0364 9.1061C11.9658 8.58103 11.8147 8.13894 11.4636 7.78782C11.1125 7.4367 10.6704 7.28568 10.1454 7.21509C10.0293 7.19949 9.90432 7.18746 9.771 7.1782V10.4725C10.0325 10.6238 10.2085 10.9066 10.2085 11.2305C10.2085 11.7137 9.81675 12.1055 9.3335 12.1055C8.85025 12.1055 8.4585 11.7137 8.4585 11.2305C8.4585 10.9066 8.63446 10.6238 8.896 10.4725V7.14936C8.66672 7.14711 8.42324 7.14711 8.16711 7.14712C8.05108 7.14712 7.93952 7.19321 7.85747 7.27526L7.00016 8.13257L6.14286 7.27526Z" fill="#18C273"/>
<path d="M7.00016 0.730469C5.63096 0.730469 4.521 1.84043 4.521 3.20964V3.79297C4.521 5.16217 5.63096 6.27214 7.00016 6.27214C8.36937 6.27214 9.47933 5.16217 9.47933 3.79297V3.20964C9.47933 1.84043 8.36937 0.730469 7.00016 0.730469Z" fill="#18C273"/>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

@ -0,0 +1,4 @@
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M11.5658 1.95717C9.82689 0.890531 8.26692 1.31563 7.32452 2.02335C7.26938 2.06476 7.22039 2.10153 7.17659 2.13413C7.08676 2.20099 7.04185 2.23442 6.98387 2.23442C6.92589 2.23442 6.88098 2.20099 6.79115 2.13413C6.74735 2.10153 6.69836 2.06476 6.64322 2.02335C5.70082 1.31563 4.14085 0.890531 2.40195 1.95717C1.53619 2.48823 0.943044 3.43564 0.767402 4.5853C0.741775 4.75304 0.728961 4.83691 0.781341 4.89789C0.83372 4.95888 0.923033 4.95887 1.10166 4.95885L3.00095 4.95868C3.24133 4.95767 3.64619 4.95596 4.03964 5.0991C4.19392 5.15522 4.33336 5.22877 4.4573 5.3094C4.63656 5.42602 4.72618 5.48433 4.79864 5.46761C4.87109 5.45089 4.92018 5.36908 5.01835 5.20545L5.44147 4.50026C5.71062 4.05168 6.19943 3.78162 6.72246 3.79256C7.24549 3.80349 7.72259 4.09374 7.97275 4.55319L8.72948 5.94294C8.77795 6.03196 8.80218 6.07647 8.8435 6.10102C8.88482 6.12557 8.9355 6.12557 9.03686 6.12557H9.31698C10.1224 6.12557 10.7753 6.77849 10.7753 7.5839C10.7753 8.38932 10.1224 9.04224 9.31698 9.04224L8.66574 9.04348C8.42373 9.04908 7.69714 9.06588 7.06184 8.57794C7.0432 8.56363 7.02501 8.54906 7.00725 8.5343C6.81047 8.37075 6.71208 8.28898 6.63276 8.30247C6.55344 8.31596 6.49635 8.41111 6.38218 8.6014L6.19249 8.91754C5.93991 9.33851 5.49248 9.60414 5.00197 9.62434C4.51146 9.64453 4.0437 9.41658 3.75738 9.0178L3.04199 8.02146C2.99064 7.94995 2.96497 7.91419 2.92736 7.8949C2.88975 7.8756 2.84573 7.8756 2.75769 7.8756L1.88603 7.87559C1.63453 7.87558 1.50878 7.87558 1.45819 7.96269C1.40759 8.0498 1.46788 8.15548 1.58846 8.36685C2.2106 9.45742 3.18686 10.5632 4.58832 11.6005C5.43495 12.2275 6.05634 12.6877 6.98387 12.6877C7.91141 12.6877 8.53279 12.2275 9.37943 11.6005C11.8175 9.79586 12.9688 7.78416 13.2073 6.00548C13.4447 4.23535 12.7682 2.69472 11.5658 1.95717Z" fill="#ED1C2B"/>
<path d="M7.20469 4.97105C7.10463 4.78727 6.91379 4.67117 6.70458 4.66679C6.49537 4.66242 6.29984 4.77044 6.19218 4.94988L4.8987 7.10568L4.50819 6.5618C4.50002 6.55043 4.49145 6.53935 4.48248 6.52859C4.47338 6.51766 4.4634 6.50547 4.45255 6.49222C4.32787 6.33991 4.08822 6.04716 3.74091 5.92081C3.49697 5.83206 3.23003 5.83265 2.965 5.83324L2.90072 5.83333H1.73405C1.41188 5.83333 1.15072 6.0945 1.15072 6.41667C1.15072 6.73883 1.41188 7 1.73405 7H2.90072C3.27245 7 3.31696 7.00823 3.34111 7.01684C3.34329 7.01792 3.36229 7.02776 3.40145 7.06546C3.45005 7.11226 3.4979 7.16947 3.57276 7.25931L4.46854 8.50689C4.58307 8.6664 4.77018 8.75758 4.96638 8.74951C5.16258 8.74143 5.34156 8.63518 5.44259 8.46679L6.66782 6.42473L7.16648 7.34054C7.17206 7.35078 7.17794 7.36086 7.18412 7.37075L7.20842 7.40983C7.30282 7.56206 7.41744 7.74688 7.59523 7.88343C7.98366 8.18176 8.4448 8.17225 8.67006 8.16761C8.69423 8.16711 8.71569 8.16667 8.73405 8.16667H9.31738C9.63955 8.16667 9.90072 7.9055 9.90072 7.58333C9.90072 7.26117 9.63955 7 9.31738 7H8.73405C8.69863 7 8.66723 7.00017 8.63892 7.00032C8.53614 7.00086 8.47421 7.00119 8.40933 6.99253C8.35288 6.98499 8.32768 6.97346 8.31135 6.96218C8.30864 6.95892 8.30403 6.95313 8.29726 6.94384C8.27206 6.90926 8.24113 6.86063 8.18271 6.76722L7.20469 4.97105Z" fill="#ED1C2B"/>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

@ -0,0 +1,4 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M17.3339 15.9992H13.3339V11.1992C13.3339 10.9365 13.3343 10.7929 13.34 10.6886L13.341 10.673L13.3565 10.6721C13.4609 10.6664 13.6045 10.6659 13.8672 10.6659H17.3339C18.8066 10.6659 20.0005 11.8598 20.0005 13.3326C20.0005 14.8053 18.8066 15.9992 17.3339 15.9992Z" fill="#2E3039"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.0684 2.33203H15.9316C13.1698 2.33202 11.005 2.33201 9.30102 2.53899C7.55973 2.75051 6.16606 3.19084 5.02088 4.16892C4.71548 4.42976 4.43104 4.71419 4.1702 5.0196C3.19212 6.16478 2.75179 7.55845 2.54027 9.29974C2.33329 11.0037 2.3333 13.1684 2.33331 15.9304V16.067C2.3333 18.829 2.33329 20.9937 2.54027 22.6977C2.75179 24.4389 3.19212 25.8326 4.1702 26.9778C4.43104 27.2832 4.71547 27.5676 5.02088 27.8285C6.16606 28.8066 7.55973 29.2469 9.30102 29.4584C11.005 29.6654 13.1697 29.6654 15.9316 29.6654H16.0683C18.8302 29.6654 20.995 29.6654 22.6989 29.4584C24.4402 29.2469 25.8339 28.8066 26.9791 27.8285C27.2845 27.5676 27.5689 27.2832 27.8298 26.9778C28.8078 25.8326 29.2482 24.4389 29.4597 22.6977C29.6667 20.9937 29.6667 18.829 29.6666 16.067V15.9304C29.6667 13.1684 29.6667 11.0037 29.4597 9.29974C29.2482 7.55845 28.8078 6.16478 27.8298 5.0196C27.5689 4.71419 27.2845 4.42976 26.9791 4.16892C25.8339 3.19084 24.4402 2.75051 22.6989 2.53899C20.995 2.33201 18.8303 2.33202 16.0684 2.33203ZM13.8672 7.99925L13.7592 7.99898C13.3835 7.99761 12.9217 7.99593 12.5098 8.12976C11.698 8.39355 11.0615 9.03003 10.7977 9.84187C10.6639 10.2538 10.6656 10.7156 10.6669 11.0913L10.6672 11.1992V23.9993C10.6672 24.7356 11.2642 25.3326 12.0005 25.3326C12.7369 25.3326 13.3339 24.7356 13.3339 23.9993V18.6659H17.3339C20.2794 18.6659 22.6672 16.2781 22.6672 13.3326C22.6672 10.3871 20.2794 7.99925 17.3339 7.99925H13.8672Z" fill="#2E3039"/>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

@ -0,0 +1,5 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M5.48916 2.45087C5.77706 2.18304 6.22294 2.18304 6.51084 2.45087L6.51224 2.45218L6.51473 2.4545L6.52292 2.46219L6.55163 2.48944C6.57607 2.51278 6.6109 2.54636 6.65464 2.58935C6.74206 2.67527 6.86535 2.79908 7.01259 2.95413C7.30624 3.26334 7.6993 3.70117 8.09421 4.21395C8.48746 4.72459 8.89375 5.32393 9.20436 5.95598C9.51149 6.58095 9.75 7.28776 9.75 8C9.75 9.28885 9.3037 10.2635 8.54571 10.902C7.80987 11.5219 6.86965 11.75 6 11.75C5.13035 11.75 4.19013 11.5219 3.45429 10.902C2.6963 10.2635 2.25 9.28885 2.25 8C2.25 7.28776 2.48851 6.58095 2.79564 5.95598C3.10625 5.32393 3.51254 4.72459 3.90579 4.21395C4.3007 3.70117 4.69376 3.26334 4.98741 2.95413C5.13465 2.79908 5.25794 2.67527 5.34536 2.58935C5.3891 2.54636 5.42393 2.51278 5.44837 2.48944L5.47708 2.46219L5.48527 2.4545L5.48776 2.45218L5.48916 2.45087Z" fill="#0B85F7"/>
<path d="M17.4892 2.45087C17.7771 2.18304 18.2229 2.18304 18.5108 2.45087L18.5147 2.4545L18.5229 2.46219L18.5516 2.48944C18.5761 2.51278 18.6109 2.54636 18.6546 2.58935C18.7421 2.67527 18.8654 2.79908 19.0126 2.95413C19.3062 3.26334 19.6993 3.70117 20.0942 4.21395C20.4875 4.72459 20.8937 5.32393 21.2044 5.95598C21.5115 6.58095 21.75 7.28776 21.75 8C21.75 9.28885 21.3037 10.2635 20.5457 10.902C19.8099 11.5219 18.8697 11.75 18 11.75C17.1304 11.75 16.1901 11.5219 15.4543 10.902C14.6963 10.2635 14.25 9.28885 14.25 8C14.25 7.28776 14.4885 6.58095 14.7956 5.95598C15.1063 5.32393 15.5125 4.72459 15.9058 4.21395C16.3007 3.70117 16.6938 3.26334 16.9874 2.95413C17.1346 2.79908 17.2579 2.67527 17.3454 2.58935C17.3891 2.54636 17.4239 2.51278 17.4484 2.48944L17.4771 2.46219L17.4853 2.4545L17.4878 2.45218L17.4892 2.45087Z" fill="#0B85F7"/>
<path d="M11.4892 12.4509C11.7771 12.183 12.2229 12.183 12.5108 12.4509L12.5122 12.4522L12.5147 12.4545L12.5229 12.4622L12.5516 12.4894C12.5761 12.5128 12.6109 12.5464 12.6546 12.5893C12.7421 12.6753 12.8654 12.7991 13.0126 12.9541C13.3062 13.2633 13.6993 13.7012 14.0942 14.214C14.4875 14.7246 14.8937 15.3239 15.2044 15.956C15.5115 16.5809 15.75 17.2878 15.75 18C15.75 19.2888 15.3037 20.2635 14.5457 20.902C13.8099 21.5219 12.8697 21.75 12 21.75C11.1303 21.75 10.1901 21.5219 9.45429 20.902C8.6963 20.2635 8.25 19.2888 8.25 18C8.25 17.2878 8.48851 16.5809 8.79564 15.956C9.10625 15.3239 9.51254 14.7246 9.90579 14.214C10.3007 13.7012 10.6938 13.2633 10.9874 12.9541C11.1346 12.7991 11.2579 12.6753 11.3454 12.5893C11.3891 12.5464 11.4239 12.5128 11.4484 12.4894L11.4771 12.4622L11.4853 12.4545L11.4878 12.4522L11.4892 12.4509Z" fill="#0B85F7"/>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

@ -1,7 +1,7 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M14.0493 1.25C14.7141 1.24997 15.287 1.24994 15.7457 1.31161C16.2373 1.37771 16.7086 1.52677 17.0908 1.90902C17.4731 2.29126 17.6222 2.76253 17.6883 3.25416C17.7499 3.7129 17.7499 4.28574 17.7499 4.95059V6.04937C17.7499 6.71423 17.7499 7.28712 17.6883 7.74585C17.6222 8.23749 17.4731 8.70875 17.0908 9.091C16.7086 9.47324 16.2373 9.6223 15.7457 9.6884C15.287 9.75008 14.7141 9.75004 14.0492 9.75001L13.2269 9.75001L10.4159 11.624C10.1857 11.7775 9.88983 11.7918 9.64597 11.6613C9.4021 11.5307 9.24986 11.2766 9.24986 11V9.7469C8.87641 9.74158 8.54263 9.7272 8.25402 9.6884C7.76238 9.6223 7.29112 9.47324 6.90887 9.091C6.52662 8.70875 6.37756 8.23749 6.31147 7.74585C6.24979 7.28712 6.24982 6.71427 6.24986 6.04943V4.95063C6.24982 4.28579 6.24979 3.7129 6.31147 3.25416C6.37756 2.76253 6.52662 2.29126 6.90887 1.90902C7.29112 1.52677 7.76238 1.37771 8.25402 1.31161C8.71274 1.24994 9.28556 1.24997 9.95039 1.25L14.0493 1.25Z" fill="white"/>
<path d="M3.17258 18.1177C4.89963 16.9608 7.10028 16.9608 8.82733 18.1177C9.13739 18.3137 9.84338 18.7614 10.2141 19.1697C10.4495 19.4288 10.6975 19.7967 10.7428 20.2626C10.7914 20.7627 10.5934 21.2221 10.2316 21.6099C9.68447 22.1963 8.95287 22.75 7.95957 22.75H4.04034C3.04704 22.75 2.31543 22.1963 1.76831 21.6099C1.40651 21.2221 1.20853 20.7627 1.25712 20.2626C1.30239 19.7967 1.55044 19.4288 1.78577 19.1697C2.15652 18.7614 2.86252 18.3137 3.17258 18.1177Z" fill="white"/>
<path d="M20.8273 18.1177C19.1003 16.9608 16.8996 16.9608 15.1726 18.1177C14.8625 18.3137 14.1565 18.7614 13.7858 19.1697C13.5504 19.4288 13.3024 19.7967 13.2571 20.2626C13.2085 20.7627 13.4065 21.2221 13.7683 21.6099C14.3154 22.1963 15.047 22.75 16.0403 22.75H19.9596C20.9529 22.75 21.6845 22.1963 22.2316 21.6099C22.5934 21.2221 22.7914 20.7627 22.7428 20.2626C22.6975 19.7967 22.4495 19.4288 22.2141 19.1697C21.8434 18.7614 21.1374 18.3137 20.8273 18.1177Z" fill="white"/>
<path d="M3.24986 13.5C3.24986 11.9812 4.48107 10.75 5.99986 10.75C7.51864 10.75 8.74986 11.9812 8.74986 13.5C8.74986 15.0188 7.51864 16.25 5.99986 16.25C4.48107 16.25 3.24986 15.0188 3.24986 13.5Z" fill="white"/>
<path d="M17.9999 10.75C16.4811 10.75 15.2499 11.9812 15.2499 13.5C15.2499 15.0188 16.4811 16.25 17.9999 16.25C19.5186 16.25 20.7499 15.0188 20.7499 13.5C20.7499 11.9812 19.5186 10.75 17.9999 10.75Z" fill="white"/>
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12.7994 1.57429e-06C13.4643 -3.22217e-05 14.0371 -6.13406e-05 14.4958 0.0616123C14.9875 0.127711 15.4587 0.27677 15.841 0.659017C16.2232 1.04126 16.3723 1.51253 16.4384 2.00416C16.5001 2.4629 16.5 3.03574 16.5 3.70059V4.79937C16.5 5.46423 16.5001 6.03712 16.4384 6.49585C16.3723 6.98749 16.2232 7.45875 15.841 7.841C15.4587 8.22324 14.9875 8.3723 14.4958 8.4384C14.0371 8.50008 13.4642 8.50004 12.7994 8.50001L11.9771 8.50001L9.16603 10.374C8.93589 10.5275 8.63998 10.5418 8.39611 10.4113C8.15224 10.2807 8 10.0266 8 9.75001V8.4969C7.62656 8.49158 7.29278 8.4772 7.00416 8.4384C6.51252 8.3723 6.04126 8.22324 5.65902 7.841C5.27677 7.45875 5.12771 6.98749 5.06161 6.49585C4.99994 6.03712 4.99997 5.46427 5 4.79943V3.70063C4.99997 3.03579 4.99994 2.4629 5.06161 2.00416C5.12771 1.51253 5.27677 1.04126 5.65901 0.659016C6.04126 0.27677 6.51252 0.127711 7.00416 0.0616123C7.46288 -6.13369e-05 8.03571 -3.22217e-05 8.70053 1.57429e-06L12.7994 1.57429e-06Z" fill="white"/>
<path d="M1.92273 16.8677C3.64978 15.7108 5.85042 15.7108 7.57747 16.8677C7.88753 17.0637 8.59353 17.5114 8.96428 17.9197C9.19961 18.1788 9.44766 18.5467 9.49293 19.0126C9.54153 19.5127 9.34354 19.9721 8.98174 20.3599C8.43462 20.9463 7.70301 21.5 6.70971 21.5H2.79048C1.79719 21.5 1.06558 20.9463 0.518458 20.3599C0.156653 19.9721 -0.0413295 19.5127 0.00726341 19.0126C0.0525343 18.5467 0.300586 18.1788 0.535918 17.9197C0.906669 17.5114 1.61266 17.0637 1.92273 16.8677Z" fill="white"/>
<path d="M19.5775 16.8677C17.8504 15.7108 15.6498 15.7108 13.9227 16.8677C13.6127 17.0637 12.9067 17.5114 12.5359 17.9197C12.3006 18.1788 12.0525 18.5467 12.0073 19.0126C11.9587 19.5127 12.1567 19.9721 12.5185 20.3599C13.0656 20.9463 13.7972 21.5 14.7905 21.5H18.7097C19.703 21.5 20.4346 20.9463 20.9817 20.3599C21.3435 19.9721 21.5415 19.5127 21.4929 19.0126C21.4477 18.5467 21.1996 18.1788 20.9643 17.9197C20.5935 17.5114 19.8875 17.0637 19.5775 16.8677Z" fill="white"/>
<path d="M2 12.25C2 10.7312 3.23122 9.5 4.75 9.5C6.26878 9.5 7.5 10.7312 7.5 12.25C7.5 13.7688 6.26878 15 4.75 15C3.23122 15 2 13.7688 2 12.25Z" fill="white"/>
<path d="M16.75 9.5C15.2312 9.5 14 10.7312 14 12.25C14 13.7688 15.2312 15 16.75 15C18.2688 15 19.5 13.7688 19.5 12.25C19.5 10.7312 18.2688 9.5 16.75 9.5Z" fill="white"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

@ -0,0 +1,4 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M11.9998 1.25C9.92869 1.25 8.24976 2.92893 8.24976 5C8.24976 6.07361 8.80491 7.11878 9.47398 7.87011C9.81596 8.25412 10.2117 8.58958 10.6283 8.8334C11.0379 9.07316 11.5124 9.25 11.9998 9.25C12.4871 9.25 12.9616 9.07316 13.3712 8.8334C13.7878 8.58958 14.1836 8.25412 14.5255 7.87011C15.1946 7.11878 15.7498 6.07361 15.7498 5C15.7498 2.92893 14.0708 1.25 11.9998 1.25Z" fill="#8F9AA3"/>
<path d="M7.91515 8.34597C7.94794 8.37041 7.98252 8.41503 8.05168 8.50427C8.15094 8.63235 8.25213 8.75374 8.35378 8.86789C8.7849 9.35201 9.29974 9.79407 9.87058 10.1282C10.4203 10.4499 11.1584 10.7502 11.9998 10.7502C12.8411 10.7502 13.5792 10.4499 14.1289 10.1282C14.6998 9.79407 15.2146 9.35201 15.6457 8.86789C15.7474 8.75376 15.8485 8.63238 15.9478 8.50432C16.0171 8.41483 16.0518 8.37008 16.0847 8.34559C16.1822 8.27306 16.3055 8.26531 16.4114 8.32507C16.4471 8.34525 16.483 8.38124 16.5549 8.45323C18.2219 9.92647 19.404 12.5039 18.3564 14.9962C18.0511 15.7227 17.3445 16.2043 16.5513 16.2043L16.2745 16.2021C16.0468 16.2002 15.933 16.1993 15.8506 16.2633C15.7683 16.3274 15.7412 16.438 15.6869 16.6592L14.7228 20.5913C14.4139 21.851 13.2977 22.7504 11.9999 22.7504C10.7021 22.7504 9.58598 21.851 9.2771 20.5913L8.31293 16.6592C8.25869 16.438 8.23157 16.3274 8.14925 16.2633C8.06692 16.1993 7.95305 16.2002 7.72532 16.2021L7.44856 16.2043C6.6554 16.2043 5.94881 15.7227 5.64342 14.9962C4.59582 12.5039 5.77798 9.92648 7.44498 8.45325C7.51667 8.38147 7.55251 8.34558 7.58811 8.32543C7.69403 8.26548 7.81756 8.27324 7.91515 8.34597Z" fill="#8F9AA3"/>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.052 1.75H11.948C9.75288 1.74999 8.03639 1.74998 6.69787 1.91195C5.33462 2.0769 4.24953 2.42064 3.38952 3.19465C2.5182 3.97883 2.12077 4.98563 1.93214 6.24835C1.74997 7.46783 1.74998 9.02533 1.75 10.9878L1.75 13.0122C1.74998 14.9746 1.74997 16.5322 1.93214 17.7516C2.12077 19.0144 2.5182 20.0212 3.38952 20.8054C4.24953 21.5794 5.33462 21.9231 6.69787 22.0881C8.03639 22.25 9.75287 22.25 11.948 22.25H12.052C14.2471 22.25 15.9636 22.25 17.3021 22.0881C18.6654 21.9231 19.7505 21.5794 20.6105 20.8054C21.4818 20.0212 21.8792 19.0144 22.0679 17.7516C22.25 16.5322 22.25 14.9747 22.25 13.0123V10.9877C22.25 9.02532 22.25 7.46783 22.0679 6.24835C21.8792 4.98563 21.4818 3.97883 20.6105 3.19465C19.7505 2.42064 18.6654 2.0769 17.3021 1.91195C15.9636 1.74998 14.2471 1.74999 12.052 1.75ZM16.75 6C16.75 5.58579 16.4142 5.25 16 5.25C15.5858 5.25 15.25 5.58579 15.25 6V7.25L14 7.25C13.5858 7.25 13.25 7.58579 13.25 8C13.25 8.41421 13.5858 8.75 14 8.75H15.25V10C15.25 10.4142 15.5858 10.75 16 10.75C16.4142 10.75 16.75 10.4142 16.75 10V8.75H18C18.4142 8.75 18.75 8.41421 18.75 8C18.75 7.58579 18.4142 7.25 18 7.25H16.75V6ZM13.25 17.5C13.25 17.0858 13.5858 16.75 14 16.75H18C18.4142 16.75 18.75 17.0858 18.75 17.5C18.75 17.9142 18.4142 18.25 18 18.25H14C13.5858 18.25 13.25 17.9142 13.25 17.5ZM14 13.75C13.5858 13.75 13.25 14.0858 13.25 14.5C13.25 14.9142 13.5858 15.25 14 15.25H18C18.4142 15.25 18.75 14.9142 18.75 14.5C18.75 14.0858 18.4142 13.75 18 13.75H14ZM10.5303 13.4697C10.8232 13.7626 10.8232 14.2374 10.5303 14.5303L9.31066 15.75L10.5303 16.9697C10.8232 17.2626 10.8232 17.7374 10.5303 18.0303C10.2374 18.3232 9.76256 18.3232 9.46967 18.0303L8.25 16.8107L7.03033 18.0303C6.73744 18.3232 6.26256 18.3232 5.96967 18.0303C5.67678 17.7374 5.67678 17.2626 5.96967 16.9697L7.18934 15.75L5.96967 14.5303C5.67678 14.2374 5.67678 13.7626 5.96967 13.4697C6.26256 13.1768 6.73744 13.1768 7.03033 13.4697L8.25 14.6893L9.46967 13.4697C9.76256 13.1768 10.2374 13.1768 10.5303 13.4697ZM6 7.25C5.58579 7.25 5.25 7.58579 5.25 8C5.25 8.41421 5.58579 8.75 6 8.75L10 8.75C10.4142 8.75 10.75 8.41421 10.75 8C10.75 7.58579 10.4142 7.25 10 7.25L6 7.25Z" fill="#18C273"/>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

@ -0,0 +1,4 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M10.2215 4.19823C10.7926 4.06863 11.3878 4 12.0002 4C16.4185 4 20.0002 7.58172 20.0002 12C20.0002 14.0411 19.2363 15.904 17.9769 17.3181V16C17.9769 15.4477 17.5292 15 16.9769 15C16.4246 15 15.9769 15.4477 15.9769 16V19.5C15.9769 20.0523 16.4246 20.5 16.9769 20.5H20.5002C21.0525 20.5 21.5002 20.0523 21.5002 19.5C21.5002 18.9477 21.0525 18.5 20.5002 18.5H19.5996C21.0955 16.7526 22.0002 14.482 22.0002 12C22.0002 6.47715 17.5231 2 12.0002 2C11.2379 2 10.4943 2.08549 9.77893 2.24781C9.24034 2.37002 8.9028 2.90571 9.02501 3.4443C9.14722 3.9829 9.68291 4.32044 10.2215 4.19823Z" fill="#ED1C2B"/>
<path d="M3.5 3.51562C2.94772 3.51562 2.5 3.96334 2.5 4.51562C2.5 5.06791 2.94772 5.51562 3.5 5.51562H4.3873C2.89933 7.26098 2 9.5254 2 12.0001C2 17.5229 6.47715 22.0001 12 22.0001C12.7623 22.0001 13.5059 21.9146 14.2213 21.7523C14.7599 21.6301 15.0974 21.0944 14.9752 20.5558C14.853 20.0172 14.3173 19.6796 13.7787 19.8019C13.2076 19.9314 12.6124 20.0001 12 20.0001C7.58172 20.0001 4 16.4184 4 12.0001C4 9.97161 4.75451 8.11915 6 6.70824L6 8.00008C6 8.55236 6.44772 9.00008 7 9.00008C7.55228 9.00008 8 8.55236 8 8.00008L8 4.51562C8 3.96334 7.55228 3.51562 7 3.51562L3.5 3.51562Z" fill="#ED1C2B"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

@ -0,0 +1,6 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8.82036 3.05573C8.44569 2.37573 7.84432 1.86907 7.08832 1.7224C6.32566 1.5624 5.55766 1.78899 4.927 2.30899C2.639 4.17565 1.18165 7.16237 1.81365 10.2957C2.20298 12.229 2.84964 14.1224 4.16964 16.429C6.81631 21.0424 10.959 25.189 15.579 27.829C17.879 29.149 19.7803 29.8024 21.707 30.1891C24.8417 30.8157 27.831 29.3623 29.695 27.069C30.2097 26.4423 30.443 25.6823 30.2844 24.909C30.1284 24.1623 29.6203 23.5624 28.9497 23.1891L26.8137 21.9891C26.027 21.5491 25.3643 21.189 24.7883 20.949C24.1777 20.6823 23.5763 20.5357 22.9097 20.6023C22.2443 20.669 21.6856 20.9491 21.1416 21.3224C20.6283 21.6824 20.0563 22.1757 19.3763 22.7624L17.3657 24.5224L17.3344 24.549C16.995 24.8383 16.8177 24.9894 16.6003 25.0023C16.3826 25.0152 16.1949 24.8913 15.8362 24.6544L15.7977 24.629C12.5164 22.4424 9.56301 19.4823 7.37101 16.2023L7.35404 16.1769C7.10805 15.8074 6.98596 15.624 6.999 15.4023C7.01318 15.1833 7.1606 15.014 7.45328 14.678L9.235 12.629C9.827 11.949 10.3243 11.3757 10.679 10.8557C11.055 10.3224 11.3284 9.76237 11.3977 9.09571C11.467 8.42904 11.315 7.82896 11.0603 7.21563C10.819 6.64229 10.4496 5.97573 10.011 5.18907L8.82036 3.05573Z" fill="#2E3039"/>
<path d="M15.9992 10.3356H17.2846V10.4423C17.2846 11.0023 17.2832 11.3089 17.2526 11.5356C17.2503 11.5468 17.2481 11.5602 17.246 11.5731C17.243 11.591 17.2402 11.6078 17.2379 11.6156H17.2353C17.1366 11.6422 16.9712 11.6556 16.6632 11.6689H16.6326C16.4979 11.6689 16.3166 11.669 16.1579 11.6956C15.9659 11.7223 15.6566 11.8023 15.3912 12.0689C15.1259 12.3223 15.0486 12.6423 15.0206 12.8423C14.9993 13.0023 14.9992 13.1756 14.9992 13.3089V14.9356C14.9992 15.1623 14.9992 15.4156 15.0299 15.6423C15.0672 15.9089 15.1646 16.2556 15.4699 16.5623C15.7712 16.8556 16.1246 16.9356 16.3859 16.9756C16.6072 17.0023 16.8685 17.0023 17.1005 17.0023H18.2846C18.8379 17.0023 19.2846 16.5489 19.2846 16.0023C19.2846 15.4556 18.8379 15.0023 18.2846 15.0023H16.9992V13.6557C17.5419 13.629 18.1659 13.5223 18.6472 13.0557C19.0366 12.6823 19.1752 12.2156 19.2339 11.8023C19.2846 11.4289 19.2846 10.9756 19.2846 10.5089L19.2846 10.3756C19.2847 10.1559 19.2847 9.91346 19.2552 9.69564C19.2179 9.42897 19.1206 9.08225 18.8153 8.77559C18.5139 8.48225 18.1606 8.40231 17.8992 8.3623C17.6766 8.33564 17.4153 8.33561 17.1846 8.33561H15.9992C15.4472 8.33561 14.9992 8.78895 14.9992 9.33561C14.9992 9.88228 15.4472 10.3356 15.9992 10.3356Z" fill="#2E3039"/>
<path d="M21.1418 8.33561C21.6938 8.33561 22.1418 8.78895 22.1418 9.33561V11.6689H22.9992V9.33561C22.9992 8.78895 23.4472 8.33561 23.9992 8.33561C24.5512 8.33561 24.9992 8.78895 24.9992 9.33561V16.0023C24.9992 16.5489 24.5512 17.0023 23.9992 17.0023C23.4472 17.0023 22.9992 16.5489 22.9992 16.0023V13.6689H22.0192C21.8378 13.6689 21.6165 13.6689 21.4245 13.6423C21.1952 13.6156 20.8632 13.5357 20.5792 13.2557C20.2899 12.9757 20.2005 12.6423 20.1685 12.4023C20.1419 12.2156 20.1418 11.9889 20.1418 11.8156V9.33561C20.1418 8.78895 20.5898 8.33561 21.1418 8.33561Z" fill="#2E3039"/>
<path d="M14.4095 6.05561C17.5948 2.86895 22.7588 2.86895 25.9428 6.05561C29.1282 9.24228 29.1282 14.4023 25.9428 17.5889C25.8295 17.7089 25.7121 17.8156 25.5935 17.9223C25.1815 18.2956 25.1442 18.9222 25.5122 19.3356C25.8788 19.7489 26.5108 19.7888 26.9241 19.4155C27.0708 19.2822 27.2161 19.1489 27.3575 19.0022C31.3241 15.0422 31.3241 8.61553 27.3575 4.6422C23.3908 0.6822 16.9615 0.6822 12.9948 4.6422C12.8535 4.78887 12.7175 4.93551 12.5855 5.08217C12.2175 5.49551 12.2548 6.12225 12.6668 6.49559C13.0801 6.85559 13.7122 6.81556 14.0788 6.40223C14.1503 6.32179 14.223 6.24736 14.2977 6.17088C14.3345 6.13328 14.3717 6.09517 14.4095 6.05561Z" fill="#2E3039"/>
</svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

@ -0,0 +1,4 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12.75 15C12.75 14.5858 12.4142 14.25 12 14.25C11.5858 14.25 11.25 14.5858 11.25 15V18C11.25 18.4142 11.5858 18.75 12 18.75C12.4142 18.75 12.75 18.4142 12.75 18V15Z" fill="#2E3039"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M12 1.25C11.1339 1.25 10.3597 1.52688 9.52381 1.99594C8.7139 2.45043 7.78586 3.12145 6.61887 3.96524L5.10984 5.05632C4.1733 5.73346 3.42528 6.27429 2.86109 6.77487C2.27855 7.29173 1.84274 7.807 1.5663 8.45513C1.28925 9.10469 1.22225 9.77045 1.25941 10.5381C1.29528 11.2789 1.43264 12.1727 1.60393 13.2872L1.91918 15.3387C2.16256 16.9225 2.35635 18.1836 2.64105 19.1662C2.93544 20.1821 3.35016 20.9887 4.0914 21.6052C4.82957 22.2192 5.7089 22.4926 6.78306 22.6231C7.828 22.75 9.14615 22.75 10.8111 22.75H13.1889C14.8539 22.75 16.172 22.75 17.2169 22.6231C18.2911 22.4926 19.1704 22.2192 19.9086 21.6052C20.6499 20.9887 21.0646 20.1821 21.359 19.1662C21.6437 18.1837 21.8374 16.9225 22.0808 15.3387L22.3961 13.2871C22.5674 12.1726 22.7047 11.2789 22.7406 10.5381C22.7778 9.77045 22.7108 9.10469 22.4337 8.45513C22.1573 7.807 21.7215 7.29173 21.1389 6.77487C20.5747 6.2743 19.8267 5.73347 18.8902 5.05633L17.3811 3.96525C16.2142 3.12146 15.2861 2.45043 14.4762 1.99594C13.6403 1.52688 12.8661 1.25 12 1.25ZM7.46043 5.20777C8.67318 4.33092 9.53198 3.7114 10.2579 3.30406C10.9664 2.90645 11.483 2.75 12 2.75C12.517 2.75 13.0336 2.90645 13.7421 3.30406C14.468 3.7114 15.3268 4.33092 16.5396 5.20777L17.9794 6.24884C18.9551 6.95427 19.6418 7.45189 20.1434 7.8969C20.633 8.33129 20.8961 8.6735 21.054 9.04362C21.2112 9.41232 21.2731 9.83 21.2423 10.4655C21.2107 11.119 21.0862 11.9356 20.9073 13.0995L20.6063 15.0585C20.353 16.7066 20.1726 17.8709 19.9182 18.7487C19.6704 19.6038 19.3761 20.0971 18.9494 20.452C18.5197 20.8094 17.9613 21.0217 17.0361 21.134C16.0921 21.2487 14.865 21.25 13.1388 21.25H10.8612C9.13497 21.25 7.90793 21.2487 6.96392 21.134C6.03868 21.0217 5.48034 20.8094 5.0506 20.452C4.62394 20.0971 4.32959 19.6038 4.08178 18.7487C3.82742 17.8709 3.647 16.7066 3.39373 15.0585L3.09269 13.0995C2.91382 11.9356 2.7893 11.119 2.75766 10.4655C2.72689 9.83 2.78878 9.41232 2.94604 9.04362C3.1039 8.6735 3.36702 8.33129 3.85661 7.8969C4.35817 7.45189 5.04492 6.95427 6.02058 6.24884L7.46043 5.20777Z" fill="#2E3039"/>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

@ -0,0 +1,4 @@
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="40" height="40" rx="10" fill="#EFEFF0"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M19.999 9.25C18.3178 9.25 16.9509 9.81794 15.7588 10.4355C15.3986 10.6222 15.0639 10.8068 14.7441 10.9832C13.9617 11.4148 13.2681 11.7974 12.5066 12.0404C12.0593 12.1831 11.6631 12.3095 11.3821 12.4196C11.1177 12.5232 10.8035 12.6652 10.5805 12.913C10.3802 13.1356 10.2773 13.3855 10.2091 13.6245C10.1472 13.8415 10.0943 14.1352 10.0435 14.417C8.80553 21.2827 11.5125 27.787 18.123 30.3179C18.7727 30.5667 19.2513 30.75 20.0023 30.75C20.7534 30.75 21.2319 30.5667 21.8816 30.3179C28.4919 27.7869 31.1962 21.2824 29.9579 14.417C29.9071 14.1352 29.8541 13.8413 29.7922 13.6243C29.7239 13.3853 29.621 13.1354 29.4207 12.9128C29.1977 12.665 28.8835 12.523 28.619 12.4195C28.3381 12.3094 27.9419 12.1831 27.4946 12.0404C26.7327 11.7974 26.0386 11.4148 25.2555 10.9831C24.9356 10.8067 24.6007 10.6221 24.2405 10.4355C23.0477 9.81795 21.6803 9.25 19.999 9.25ZM25.3338 17.9429C25.8544 17.7585 26.127 17.187 25.9426 16.6664C25.7582 16.1458 25.1868 15.8733 24.6662 16.0576C23.788 16.3686 22.9486 16.9618 22.212 17.6078C21.465 18.2629 20.7666 19.0235 20.1733 19.7347C19.734 20.2613 19.3456 20.7689 19.0304 21.1997C18.7416 20.8538 18.454 20.6011 18.1797 20.4182C17.9053 20.2353 17.5523 20.0003 17 20.0003C16.4477 20.0003 16 20.448 16 21.0003C16 21.521 16.398 21.9487 16.9064 21.9959C17.1104 22.0149 17.6649 22.5661 18.1056 23.4475C18.2668 23.7698 18.5889 23.9805 18.9489 23.999C19.3087 24.0174 19.6508 23.8406 19.8441 23.5365C19.8441 23.5365 20.1922 23.0141 20.3574 22.7801C20.6885 22.3111 21.1572 21.6774 21.7091 21.0159C22.2628 20.3521 22.888 19.6751 23.5307 19.1115C24.1837 18.5388 24.8002 18.1319 25.3338 17.9429Z" fill="#8F9AA3"/>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

@ -0,0 +1,7 @@
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="40" height="40" rx="10" fill="#EFEFF0"/>
<path d="M30.6452 16.7358C27.3379 13.9431 23.695 12.5 20 12.5C16.3051 12.5 12.6621 13.9432 9.35484 16.736C8.93288 17.0923 8.87967 17.7232 9.23599 18.1452C9.59231 18.5671 10.2232 18.6204 10.6452 18.264C13.6537 15.7235 16.8529 14.5 20 14.5C23.1472 14.5 26.3463 15.7234 29.3548 18.2639C29.7768 18.6202 30.4077 18.567 30.7641 18.1451C31.1204 17.7231 31.0672 17.0922 30.6452 16.7358Z" fill="#8F9AA3"/>
<path d="M12.8598 19.7318C17.2191 16.099 23.0058 16.0734 27.1626 19.751C27.5763 20.117 27.6149 20.749 27.249 21.1626C26.883 21.5763 26.251 21.6149 25.8374 21.249C22.459 18.26 17.7809 18.2343 14.1402 21.2682C13.7159 21.6218 13.0854 21.5645 12.7318 21.1402C12.3782 20.7159 12.4356 20.0853 12.8598 19.7318Z" fill="#8F9AA3"/>
<path d="M24.4571 22.7929C22.0666 20.4024 17.9334 20.4024 15.5429 22.7929C15.1524 23.1834 15.1524 23.8166 15.5429 24.2071C15.9334 24.5976 16.5666 24.5976 16.9571 24.2071C18.5666 22.5976 21.4334 22.5976 23.0429 24.2071C23.4334 24.5976 24.0666 24.5976 24.4571 24.2071C24.8476 23.8166 24.8476 23.1834 24.4571 22.7929Z" fill="#8F9AA3"/>
<path d="M20 25C19.1716 25 18.5 25.6716 18.5 26.5C18.5 27.3284 19.1716 28 20 28H20.0118C20.8402 28 21.5118 27.3284 21.5118 26.5C21.5118 25.6716 20.8402 25 20.0118 25H20Z" fill="#8F9AA3"/>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

@ -0,0 +1,4 @@
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="40" height="40" rx="10" fill="#EFEFF0"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M18 30.75C17.7007 30.75 17.4476 30.6611 17.2239 30.5507C17.0235 30.4518 16.8014 30.3117 16.5667 30.1637L14.6291 28.9417C14.3742 28.7809 14.2283 28.6899 14.114 28.6327C14.0083 28.5747 13.9326 28.6033 13.9079 28.6249C13.7948 28.678 13.6438 28.7696 13.371 28.9417L12.8622 29.2911C12.6515 29.4359 12.3974 29.6033 12.1271 29.7447C11.655 29.9917 10.8144 30.3299 10.0558 29.8414C9.54247 29.5107 9.38152 28.9658 9.3149 28.487C9.24992 28.0198 9.24996 27.4095 9.25 26.7008L9.25 15.9998C9.24998 14.6191 9.24997 13.5075 9.36641 12.6336C9.48716 11.7274 9.74526 10.9648 10.346 10.3587C10.9476 9.75161 11.706 9.48992 12.6074 9.36764C13.4748 9.24997 14.5775 9.24998 15.9446 9.25L28.016 9.25C28.4911 9.25 28.8802 9.4793 29.1687 9.7609C29.4541 10.0395 29.6847 10.4083 29.8722 10.8101C30.2537 11.6272 30.5229 12.7386 30.6684 13.9644C30.7158 14.3637 30.7614 14.7478 30.7473 15.0722C30.7309 15.4502 30.6325 15.8306 30.3326 16.1652C30.0239 16.5095 29.6366 16.6432 29.2576 16.6998C28.921 16.7501 28.5084 16.7501 28.0646 16.75L26.75 16.75L26.75 26.7008C26.75 27.4095 26.7501 28.0198 26.6851 28.487C26.6185 28.9658 26.4575 29.5107 25.9441 29.8414C25.1856 30.3299 24.345 29.9917 23.8729 29.7447C23.6025 29.6033 23.3485 29.4359 23.1377 29.2911L22.629 28.9417C22.3562 28.7696 22.2052 28.678 22.0921 28.6249C22.0674 28.6033 21.9917 28.5747 21.8859 28.6327C21.7717 28.6899 21.6258 28.7809 21.3709 28.9417L19.4333 30.1636C19.1987 30.3116 18.9765 30.4518 18.7761 30.5507C18.5524 30.6611 18.2993 30.75 18 30.75ZM28.121 10.8343C28.0611 10.7759 27.9721 10.7748 27.9121 10.8329C27.8853 10.8591 27.854 10.8934 27.8186 10.938C27.652 11.1477 27.469 11.4974 27.3014 11.9962C27.0311 12.8006 26.836 13.8859 26.7724 15.1219C26.7702 15.1644 26.7682 15.2071 26.7663 15.25H28.016C28.5254 15.25 28.8236 15.248 29.0358 15.2163C29.2003 15.1917 29.2417 15.1699 29.2487 15.0072C29.2569 14.8192 29.2283 14.5588 29.173 14.0921C29.0404 12.9728 28.7989 12.0569 28.513 11.4445C28.3694 11.1368 28.2313 10.942 28.121 10.8343ZM18.75 15C18.75 14.5858 18.4142 14.25 18 14.25C17.5858 14.25 17.25 14.5858 17.25 15V15.3336C16.8358 15.4281 16.4543 15.6005 16.1358 15.8393C15.6318 16.2173 15.25 16.7968 15.25 17.5C15.25 18.2032 15.6318 18.7827 16.1358 19.1607C16.6396 19.5385 17.3011 19.75 18 19.75C18.4057 19.75 18.7441 19.8743 18.9642 20.0393C19.1841 20.2042 19.25 20.3748 19.25 20.5C19.25 20.6252 19.1841 20.7958 18.9642 20.9607C18.7441 21.1257 18.4057 21.25 18 21.25C17.3316 21.25 16.9095 20.929 16.7922 20.6803C16.6157 20.3056 16.1688 20.145 15.7941 20.3216C15.4194 20.4981 15.2588 20.945 15.4354 21.3197C15.7653 22.0197 16.4613 22.4848 17.25 22.6655V23C17.25 23.4142 17.5858 23.75 18 23.75C18.4142 23.75 18.75 23.4142 18.75 23V22.6664C19.1642 22.5719 19.5457 22.3995 19.8642 22.1607C20.3682 21.7827 20.75 21.2032 20.75 20.5C20.75 19.7968 20.3682 19.2173 19.8642 18.8393C19.3604 18.4615 18.6989 18.25 18 18.25C17.5943 18.25 17.2559 18.1257 17.0358 17.9607C16.8159 17.7958 16.75 17.6252 16.75 17.5C16.75 17.3748 16.8159 17.2042 17.0358 17.0393C17.2559 16.8743 17.5943 16.75 18 16.75C18.6684 16.75 19.0905 17.071 19.2078 17.3197C19.3843 17.6944 19.8312 17.855 20.2059 17.6784C20.5806 17.5019 20.7412 17.055 20.5646 16.6803C20.2347 15.9803 19.5387 15.5152 18.75 15.3345V15Z" fill="#8F9AA3"/>
</svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

@ -0,0 +1,3 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.0921 3C17.8565 2.99996 19.3114 2.99992 20.463 3.15438C21.672 3.31655 22.7397 3.67011 23.5946 4.52305C24.4496 5.37599 24.8039 6.44124 24.9665 7.64742C25.0404 8.19577 25.079 8.81308 25.0992 9.50001C25.0992 9.50001 26.8197 9.49985 27.4395 9.58299C28.1163 9.67376 28.8105 9.88454 29.3792 10.4519C29.9479 11.0193 30.1592 11.7119 30.2502 12.3871C30.3335 13.0055 30.3334 13.7695 30.3334 14.6199L30.3333 25.1C30.3333 27.2539 28.5832 29 26.4243 29L10.696 29C8.9315 29.0001 7.47651 29.0001 6.32494 28.8456C5.11595 28.6835 4.04822 28.3299 3.19329 27.477C2.33836 26.624 1.98398 25.5588 1.82143 24.3526C1.66661 23.2037 1.66665 21.7521 1.66669 19.9918L1.66669 12.0082C1.66665 10.2479 1.66661 8.79629 1.82143 7.64742C1.98398 6.44124 2.33836 5.37599 3.19329 4.52305C4.04822 3.67011 5.11595 3.31655 6.32494 3.15438C7.47649 2.99992 8.93149 2.99996 10.6959 3L16.0921 3ZM26.4255 26.3999C27.1451 26.3999 27.7285 25.8179 27.7285 25.0999L27.7285 14.6999C27.7285 13.7439 27.7257 13.1577 27.6685 12.7335C27.6183 12.3606 27.5468 12.2983 27.5383 12.2909L27.537 12.2896C27.5297 12.2812 27.4673 12.2099 27.0935 12.1597C26.6682 12.1027 26.0806 12.0999 25.1224 12.0999L25.1224 25.0999C25.1224 25.8179 25.7058 26.3999 26.4255 26.3999ZM8.00002 9.66667C7.44774 9.66667 7.00002 10.1144 7.00002 10.6667C7.00002 11.219 7.44774 11.6667 8.00002 11.6667L18.6667 11.6667C19.219 11.6667 19.6667 11.219 19.6667 10.6667C19.6667 10.1144 19.219 9.66667 18.6667 9.66667L8.00002 9.66667ZM8.00002 15C7.44774 15 7.00002 15.4477 7.00002 16C7.00002 16.5523 7.44774 17 8.00002 17L18.6667 17C19.219 17 19.6667 16.5523 19.6667 16C19.6667 15.4477 19.219 15 18.6667 15L8.00002 15ZM8.00002 20.3333C7.44774 20.3333 7.00002 20.781 7.00002 21.3333C7.00002 21.8856 7.44774 22.3333 8.00002 22.3333L13.3334 22.3333C13.8856 22.3333 14.3334 21.8856 14.3334 21.3333C14.3334 20.781 13.8856 20.3333 13.3334 20.3333L8.00002 20.3333Z" fill="#2E3039"/>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

@ -0,0 +1,5 @@
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="40" height="40" rx="10" fill="#EFEFF0"/>
<path d="M19.3977 30.75C17.8566 30.7501 15.2938 30.75 14.3115 30.6472C13.3021 30.5416 12.4409 30.3186 11.6961 29.7919C11.3058 29.5159 10.9572 29.1871 10.662 28.8146C10.0922 28.0955 9.84896 27.2576 9.73485 26.2842C9.62496 25.3469 9.62498 24.1743 9.625 22.7262V20.1427C9.625 18.7244 9.625 17.6117 9.68419 16.711C9.74444 15.7942 9.86898 15.0295 10.1501 14.3175C10.9935 12.1815 12.7672 10.5187 14.9872 9.73655C16.3696 9.24947 18.0563 9.24968 20.8959 9.25005C22.4509 9.2495 23.923 9.24911 24.7818 9.5517C26.1584 10.0367 27.2668 11.071 27.7956 12.4103C27.9789 12.8744 28.0545 13.3601 28.0903 13.9047C28.125 14.4333 28.125 15.0809 28.125 15.88V17.0263C28.125 17.5641 27.6891 18 27.1513 18C26.6136 18 26.1776 17.5641 26.1776 17.0263V15.9132C26.1776 15.073 26.1771 14.49 26.1471 14.0333C26.1177 13.5854 26.0628 13.327 25.9852 13.1303C25.6751 12.345 25.0094 11.7033 24.1368 11.3959C23.6334 11.2185 22.9663 11.2046 21.1322 11.2046C20.8341 11.2046 20.4773 11.2057 20.1392 11.2073C19.801 11.2088 19.2476 11.2113 18.7855 11.4802C18.4807 11.6575 18.26 11.8594 18.1333 12.08C17.9159 12.4584 17.7915 12.8655 17.7915 13.3332L17.828 14.3736C17.8359 14.7537 17.8239 15.1972 17.7092 15.6254C17.4857 16.4593 16.8343 17.1107 16.0004 17.3342C15.5722 17.4489 15.1287 17.4609 14.7486 17.453L13.7082 17.4165C13.2615 17.4165 12.8414 17.5299 12.4748 17.7294C12.2474 17.8532 12.026 18.0963 11.853 18.3873C11.5724 18.8595 11.5723 19.4981 11.5723 19.7651L11.5724 22.6653C11.5724 24.1887 11.5739 25.246 11.6689 26.0558C11.7611 26.8426 11.9305 27.2754 12.1861 27.5979C12.3639 27.8222 12.5763 28.0233 12.8177 28.1941C13.1756 28.4471 13.6595 28.6139 14.5134 28.7032C15.3828 28.7942 17.7891 28.7954 19.3977 28.7954C19.9375 28.7954 20.375 29.233 20.375 29.7727C20.375 30.3125 19.9375 30.75 19.3977 30.75Z" fill="#8F9AA3"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M25.8795 19.5736C25.7039 19.2011 25.3179 18.9743 24.907 19.0023C24.4962 19.0303 24.1445 19.3073 24.021 19.7002L22.5883 24.2588L22.071 23.1615C21.9375 22.8782 21.8079 22.6032 21.6745 22.3809C21.5251 22.1319 21.3276 21.8718 21.0217 21.6712C20.712 21.4682 20.3934 21.393 20.1018 21.3611C19.8477 21.3332 19.5513 21.3333 19.2556 21.3333L18.375 21.3333C17.8227 21.3333 17.375 21.781 17.375 22.3333C17.375 22.8856 17.8227 23.3333 18.375 23.3333H19.2153C19.5679 23.3333 19.7521 23.3347 19.8838 23.3491C19.9001 23.3509 19.9134 23.3527 19.9241 23.3544C19.9331 23.3674 19.9449 23.3855 19.9595 23.4098C20.035 23.5356 20.1221 23.7177 20.2785 24.0496L21.8705 27.4264C22.0461 27.7989 22.4321 28.0257 22.843 27.9977C23.2538 27.9697 23.6055 27.6927 23.729 27.2998L25.1617 22.7412L25.679 23.8385C25.8125 24.1218 25.9421 24.3968 26.0755 24.6191C26.2249 24.8681 26.4224 25.1282 26.7283 25.3288C27.038 25.5318 27.3566 25.6069 27.6482 25.6389C27.9023 25.6668 28.1987 25.6667 28.4944 25.6667L29.375 25.6667C29.9273 25.6667 30.375 25.2189 30.375 24.6667C30.375 24.1144 29.9273 23.6667 29.375 23.6667H28.5347C28.1822 23.6667 27.9979 23.6653 27.8662 23.6508C27.8499 23.6491 27.8366 23.6473 27.8259 23.6456C27.8169 23.6325 27.8051 23.6145 27.7905 23.5902C27.715 23.4643 27.6279 23.2823 27.4715 22.9504L25.8795 19.5736ZM19.9028 23.3262L19.9013 23.3246C19.9012 23.3245 19.9018 23.325 19.9028 23.3262ZM27.8472 23.6738L27.8487 23.6754C27.8488 23.6755 27.8483 23.675 27.8472 23.6738Z" fill="#8F9AA3"/>
</svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

@ -0,0 +1,4 @@
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="40" height="40" rx="10" fill="#EFEFF0"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M25.312 9.93059C23.9686 9.74998 22.2479 9.74999 20.0572 9.75H19.9428C17.7521 9.74999 16.0314 9.74998 14.688 9.93059C13.3114 10.1157 12.2191 10.5027 11.3609 11.3609C10.5027 12.2191 10.1157 13.3114 9.93059 14.688C9.74998 16.0314 9.74999 17.7521 9.75 19.9428V20.0572C9.74999 22.2479 9.74998 23.9686 9.93059 25.312C10.1157 26.6886 10.5027 27.7809 11.3609 28.6391C12.2191 29.4973 13.3114 29.8843 14.688 30.0694C16.0314 30.25 17.7521 30.25 19.9428 30.25H20.0572C22.2479 30.25 23.9686 30.25 25.312 30.0694C26.6886 29.8843 27.7809 29.4973 28.6391 28.6391C29.4973 27.7809 29.8843 26.6886 30.0694 25.312C30.25 23.9686 30.25 22.2479 30.25 20.0572V19.9428C30.25 17.7521 30.25 16.0314 30.0694 14.688C29.8843 13.3114 29.4973 12.2191 28.6391 11.3609C27.7809 10.5027 26.6886 10.1157 25.312 9.93059ZM15.75 21C15.75 20.5858 15.4142 20.25 15 20.25C14.5858 20.25 14.25 20.5858 14.25 21V25C14.25 25.4142 14.5858 25.75 15 25.75C15.4142 25.75 15.75 25.4142 15.75 25V21ZM20 14.25C20.4142 14.25 20.75 14.5858 20.75 15L20.75 25C20.75 25.4142 20.4142 25.75 20 25.75C19.5858 25.75 19.25 25.4142 19.25 25L19.25 15C19.25 14.5858 19.5858 14.25 20 14.25ZM25.75 19C25.75 18.5858 25.4142 18.25 25 18.25C24.5858 18.25 24.25 18.5858 24.25 19L24.25 25C24.25 25.4142 24.5858 25.75 25 25.75C25.4142 25.75 25.75 25.4142 25.75 25V19Z" fill="#8F9AA3"/>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

@ -0,0 +1,4 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M14.0404 16.6255C13.8528 16.438 13.5985 16.3326 13.3333 16.3326C12.9899 16.3326 12.656 16.3326 12.3333 16.3337V21.804C13.8723 22.2393 14.9999 23.6543 14.9999 25.3326V26.666C14.9999 27.2183 14.5522 27.666 13.9999 27.666C13.4476 27.666 12.9999 27.2183 12.9999 26.666V25.3326C12.9999 24.4122 12.2537 23.666 11.3333 23.666C10.4128 23.666 9.66659 24.4122 9.66659 25.3326V26.666C9.66659 27.2183 9.21887 27.666 8.66659 27.666C8.1143 27.666 7.66659 27.2183 7.66659 26.666V25.3326C7.66659 23.6543 8.79425 22.2393 10.3333 21.804V16.3679C9.77118 16.3904 9.26164 16.4274 8.81092 16.488C7.61078 16.6494 6.60028 16.9946 5.79772 17.7971C4.99517 18.5997 4.64997 19.6102 4.48862 20.8103C4.33321 21.9663 4.33323 23.436 4.33325 25.2594V29.3326C4.33325 29.8849 4.78097 30.3326 5.33325 30.3326H26.6666C27.2189 30.3326 27.6666 29.8849 27.6666 29.3326V25.2595C27.6666 23.436 27.6666 21.9663 27.5112 20.8103C27.3499 19.6102 27.0047 18.5997 26.2021 17.7971C25.3996 16.9946 24.3891 16.6494 23.1889 16.488C22.9237 16.4523 22.638 16.4249 22.3333 16.4037V23.9335C22.9311 24.2793 23.3333 24.9257 23.3333 25.666C23.3333 26.7705 22.4378 27.666 21.3333 27.666C20.2287 27.666 19.3333 26.7705 19.3333 25.666C19.3333 24.9257 19.7355 24.2793 20.3333 23.9335V16.3378C19.8092 16.3326 19.2527 16.3326 18.6672 16.3326C18.402 16.3326 18.147 16.438 17.9595 16.6255L15.9999 18.5851L14.0404 16.6255Z" fill="#2E3039"/>
<path d="M15.9999 1.66602C12.8703 1.66602 10.3333 4.20307 10.3333 7.33268V8.66602C10.3333 11.7956 12.8703 14.3327 15.9999 14.3327C19.1295 14.3327 21.6666 11.7956 21.6666 8.66602V7.33268C21.6666 4.20307 19.1295 1.66602 15.9999 1.66602Z" fill="#2E3039"/>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

@ -0,0 +1,3 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M28.835 8.71465C29 10.2375 29 12.157 29 14.6057L29 17.393V17.3931C29 19.8418 29 21.7612 28.835 23.284C28.6667 24.8381 28.3169 26.0973 27.5358 27.1724C27.0629 27.8232 26.4905 28.3956 25.8397 28.8685C24.7646 29.6496 23.5054 29.9993 21.9514 30.1677C20.4285 30.3327 18.5091 30.3327 16.0604 30.3327H16.0603H15.9397C13.491 30.3327 11.5715 30.3327 10.0486 30.1677C8.49458 29.9993 7.23541 29.6496 6.16031 28.8685C5.50945 28.3956 4.93708 27.8232 4.4642 27.1724C3.6831 26.0973 3.33334 24.8381 3.16497 23.284C2.99998 21.7612 2.99999 19.8418 3 17.3931V17.393L3 14.6056V14.6056C2.99999 12.1569 2.99998 10.2375 3.16497 8.71465C3.33334 7.1606 3.6831 5.90143 4.4642 4.82633C4.93708 4.17547 5.50945 3.6031 6.16032 3.13022C7.23541 2.34911 8.49459 1.99936 10.0486 1.83099C11.5715 1.666 13.4909 1.666 15.9395 1.66602H15.9396H16.0604H16.0605C18.5091 1.66601 20.4285 1.666 21.9514 1.83099C23.5054 1.99936 24.7646 2.34911 25.8397 3.13022C26.4905 3.6031 27.0629 4.17547 27.5358 4.82633C28.3169 5.90143 28.6667 7.1606 28.835 8.71465ZM16 5.66602C16.7364 5.66602 17.3333 6.26297 17.3333 6.99935V9.24299C17.6276 9.59842 17.8786 9.66602 18 9.66602C18.1485 9.66602 18.4909 9.56487 18.8693 8.95942C19.2595 8.33494 20.0821 8.14507 20.7066 8.53531C21.3311 8.92555 21.521 9.74814 21.1307 10.3726C20.4782 11.4167 19.4088 12.3327 18 12.3327C17.7685 12.3327 17.5462 12.3079 17.3333 12.262L17.3333 13.0409C17.8948 13.4337 18.584 13.666 19.3333 13.666C20.2769 13.666 21.1252 13.2976 21.7432 12.7042C22.2744 12.1942 23.1185 12.2114 23.6285 12.7426C24.1385 13.2738 24.1213 14.1178 23.5901 14.6278C22.49 15.6841 20.9852 16.3327 19.3333 16.3327C18.6338 16.3327 17.9606 16.2163 17.3333 16.002V18.0531C18.0392 17.9934 18.7108 17.8873 19.335 17.7423C21.0296 17.3485 23 18.5587 23 20.5393C23 21.5265 22.4537 22.5524 21.4063 22.9419C20.935 23.1172 20.4345 23.269 19.911 23.3954C19.3839 23.5228 18.9627 23.8554 18.7618 24.3012L18.6199 24.6159C18.1546 25.6483 17.1409 26.3327 16 26.3327C14.8591 26.3327 13.8454 25.6483 13.3801 24.6159L13.2382 24.3012C13.0373 23.8554 12.6161 23.5228 12.089 23.3954C11.5655 23.269 11.065 23.1172 10.5937 22.9419C9.54632 22.5524 9 21.5265 9 20.5393C9 18.5587 10.9704 17.3485 12.665 17.7423C13.2892 17.8873 13.9608 17.9934 14.6667 18.0531V16.002C14.0394 16.2164 13.3662 16.3327 12.6667 16.3327C11.0148 16.3327 9.51001 15.6841 8.4099 14.6278C7.87872 14.1178 7.86154 13.2738 8.37154 12.7426C8.88155 12.2114 9.72559 12.1942 10.2568 12.7042C10.8748 13.2976 11.7231 13.666 12.6667 13.666C13.416 13.666 14.1052 13.4337 14.6667 13.0409V12.262C14.4538 12.3079 14.2315 12.3327 14 12.3327C12.5912 12.3327 11.5218 11.4167 10.8693 10.3726C10.4791 9.74814 10.6689 8.92555 11.2934 8.53531C11.9179 8.14507 12.7405 8.33494 13.1307 8.95942C13.5091 9.56487 13.8515 9.66602 14 9.66602C14.1214 9.66602 14.3724 9.59842 14.6667 9.24299L14.6667 6.99935C14.6667 6.26297 15.2636 5.66602 16 5.66602Z" fill="#2E3039"/>
</svg>

After

Width:  |  Height:  |  Size: 3.0 KiB

@ -0,0 +1,5 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M22.6653 22.6661C22.6653 23.4025 22.0683 23.9994 21.332 23.9994H11.9986C11.2622 23.9994 10.6653 23.4025 10.6653 22.6661C10.6653 21.9297 11.2622 21.3328 11.9986 21.3328L21.332 21.3328C22.0683 21.3328 22.6653 21.9297 22.6653 22.6661Z" fill="#2E3039"/>
<path d="M21.332 18.6661C22.0683 18.6661 22.6653 18.0691 22.6653 17.3328C22.6653 16.5964 22.0683 15.9994 21.332 15.9994H17.332C16.5956 15.9994 15.9986 16.5964 15.9986 17.3328C15.9986 18.0691 16.5956 18.6661 17.332 18.6661H21.332Z" fill="#2E3039"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.914 30.1957C11.2237 30.3327 12.8674 30.3327 14.9222 30.3326H16.0893C18.6133 30.3327 20.6318 30.3327 22.2158 30.1315C23.8485 29.9242 25.2156 29.4832 26.3074 28.4519C27.4103 27.41 27.8922 26.0876 28.1169 24.5088C28.332 22.9972 28.332 21.0775 28.3319 18.7058V10.5061C28.332 9.44052 28.332 8.57711 28.2856 7.87234C28.2379 7.14617 28.1371 6.4986 27.8927 5.87972C27.1877 4.09398 25.7098 2.71495 23.8744 2.06828C22.7293 1.66483 20.7665 1.66535 18.6932 1.66608C14.907 1.6656 12.6581 1.66531 10.8149 2.31475C7.8549 3.35765 5.48993 5.57464 4.3654 8.42272C3.99058 9.372 3.82454 10.3916 3.7442 11.6141C3.66528 12.815 3.66528 14.2985 3.66528 16.1895L3.66528 19.6342C3.66526 21.565 3.66523 23.1286 3.81175 24.3783C3.9639 25.6762 4.28823 26.7934 5.04801 27.7521C5.44158 28.2488 5.90631 28.6871 6.4268 29.0552C7.41982 29.7574 8.56811 30.0549 9.914 30.1957ZM24.5279 26.5541C24.0036 27.0494 23.2622 27.3717 21.8899 27.546C20.4879 27.7241 18.6342 27.7265 15.9986 27.7265H14.9954C12.8506 27.7265 11.3424 27.7249 10.1831 27.6036C9.04458 27.4845 8.39935 27.2622 7.92225 26.9248C7.6003 26.6971 7.31714 26.429 7.08008 26.1298C6.73933 25.6999 6.51341 25.1228 6.39043 24.0737C6.26385 22.9941 6.26175 21.5843 6.26175 19.553L6.26164 15.6861C6.26162 15.3301 6.26185 14.4787 6.63601 13.8491C6.86658 13.4611 7.1618 13.137 7.46507 12.9719C7.95375 12.7059 8.51401 12.5547 9.10957 12.5547L10.4967 12.6034C11.0035 12.6139 11.5949 12.5979 12.1658 12.4449C13.2777 12.147 14.1463 11.2784 14.4442 10.1665C14.5972 9.59562 14.6132 9.00423 14.6027 8.49744L14.554 7.11029C14.554 6.4867 14.7199 5.94386 15.0097 5.43931C15.1786 5.14519 15.4729 4.87601 15.8792 4.63959C16.4954 4.28105 17.2333 4.27772 17.6842 4.27569C18.1351 4.27366 18.6108 4.2721 19.0082 4.2721C21.4537 4.2721 22.3432 4.2907 23.0143 4.52717C24.1778 4.93711 25.0654 5.79264 25.4789 6.83979C25.5824 7.10198 25.6555 7.44654 25.6948 8.0438C25.7348 8.6527 25.7354 9.42996 25.7354 10.5503V18.6054C25.7354 21.1014 25.7323 22.8344 25.5465 24.1402C25.3672 25.4 25.041 26.0694 24.5279 26.5541Z" fill="#2E3039"/>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

@ -0,0 +1,4 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M10.1661 3.95442C10.7553 3.82074 11.369 3.75 12.0002 3.75C16.5565 3.75 20.2502 7.44365 20.2502 12C20.2502 14.3316 19.2833 16.4376 17.7269 17.9387V16C17.7269 15.5858 17.3911 15.25 16.9769 15.25C16.5626 15.25 16.2269 15.5858 16.2269 16V19.5C16.2269 19.9142 16.5626 20.25 16.9769 20.25H20.5002C20.9144 20.25 21.2502 19.9142 21.2502 19.5C21.2502 19.0858 20.9144 18.75 20.5002 18.75H19.0357C20.7162 16.9987 21.7502 14.6202 21.7502 12C21.7502 6.61522 17.3849 2.25 12.0002 2.25C11.2566 2.25 10.5315 2.33338 9.8342 2.49161C9.43025 2.58327 9.1771 2.98504 9.26876 3.38898C9.36042 3.79293 9.76218 4.04608 10.1661 3.95442Z" fill="#2B353E"/>
<path d="M3.5 3.76562C3.08579 3.76562 2.75 4.10141 2.75 4.51562C2.75 4.92984 3.08579 5.26562 3.5 5.26562H4.94958C3.27784 7.01543 2.25 9.38763 2.25 12.0001C2.25 17.3849 6.61522 21.7501 12 21.7501C12.7436 21.7501 13.4687 21.6667 14.166 21.5085C14.5699 21.4168 14.8231 21.015 14.7314 20.6111C14.6397 20.2071 14.238 19.954 13.834 20.0457C13.2449 20.1793 12.6312 20.2501 12 20.2501C7.44365 20.2501 3.75 16.5564 3.75 12.0001C3.75 9.68013 4.70717 7.58354 6.25 6.0839L6.25 8.00008C6.25 8.41429 6.58579 8.75008 7 8.75008C7.41421 8.75008 7.75 8.41429 7.75 8.00008L7.75 4.51562C7.75 4.10141 7.41421 3.76562 7 3.76562L3.5 3.76562Z" fill="#2B353E"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

@ -0,0 +1,3 @@
<svg width="29" height="29" viewBox="0 0 29 29" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M20.3286 2.69938C20.35 2.69897 20.3714 2.69933 20.3928 2.70045C23.661 2.87123 26.0252 4.18642 26.9215 6.63726C27.7812 8.98782 27.1501 12.0533 25.3157 15.4357C25.0787 15.8726 24.5324 16.0347 24.0955 15.7977C23.6585 15.5608 23.4964 15.0145 23.7334 14.5775C25.4808 11.3556 25.8242 8.87752 25.231 7.25551C24.6766 5.73949 23.1698 4.65557 20.3309 4.49971C16.1883 4.58993 11.818 6.83789 8.27071 10.4289C6.7718 11.9463 5.31466 13.7628 4.36882 15.6822C3.42279 17.602 3.02302 19.55 3.50569 21.3927C3.69277 22.1069 4.04066 22.589 4.67608 23.0939C5.57342 23.807 6.41967 24.1687 7.46019 24.2696C8.53543 24.3738 9.86963 24.2049 11.75 23.7446C15.4014 22.631 17.6813 20.9756 19.6272 19.2448C19.7876 19.0443 20.034 18.9097 20.331 18.9097C20.8232 18.9097 21.1638 19.272 21.2279 19.6827C21.7111 21.2628 21.3119 22.6974 20.5801 24.8969C20.4232 25.3685 19.9137 25.6237 19.442 25.4668C18.9704 25.3098 18.7153 24.8003 18.8722 24.3287C19.28 23.1028 19.5184 22.2748 19.6042 21.6215C17.7553 23.0989 15.4915 24.489 12.25 25.4739C12.2344 25.4786 12.2187 25.483 12.2029 25.4868C10.2524 25.9657 8.67373 26.1956 7.28654 26.0612C5.86012 25.9229 4.69201 25.4057 3.55624 24.5032C2.67855 23.8057 2.06862 23.0101 1.76444 21.8488C1.13472 19.4447 1.69385 17.0384 2.75421 14.8865C3.81477 12.7343 5.4115 10.7621 6.99014 9.16393C10.7681 5.33933 15.5731 2.79018 20.3286 2.69938ZM19.4866 20.1101C19.4865 20.11 19.4865 20.11 19.4865 20.1099L20.3284 19.8253L19.4866 20.1101ZM20.3284 19.8253L20.3223 19.8184L20.2584 19.7472M20.3284 19.8253L20.3223 19.8184Z" fill="#2E3039"/>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.8011 1.62239C15.6024 1.12587 14.2555 1.12587 13.0568 1.62239C12.5696 1.8242 12.1382 2.13201 11.673 2.53776C11.2173 2.93519 10.6906 3.46195 10.0247 4.12781L10.0247 4.12784L10.0246 4.12791L4.12791 10.0246L4.1279 10.0246L4.1278 10.0247C3.46194 10.6906 2.93519 11.2174 2.53776 11.673C2.13201 12.1382 1.8242 12.5696 1.62239 13.0568C1.12587 14.2555 1.12587 15.6024 1.62239 16.8011C1.8242 17.2883 2.13201 17.7197 2.53776 18.1849C2.9352 18.6405 3.46199 19.1673 4.12788 19.8332L4.16671 19.872C4.83264 20.538 5.35945 21.0648 5.81512 21.4622C6.28029 21.868 6.71171 22.1758 7.19893 22.3776C8.39764 22.8741 9.7445 22.8741 10.9432 22.3776C11.4304 22.1758 11.8618 21.868 12.327 21.4622C12.4628 21.3438 12.5307 21.2846 12.5566 21.2077C12.575 21.1533 12.5771 21.091 12.5625 21.0355C12.5419 20.9571 12.4759 20.8911 12.3441 20.7593L10.913 19.3282C10.5225 18.9377 10.5225 18.3045 10.913 17.914C11.3035 17.5235 11.9367 17.5235 12.3272 17.914L13.7061 19.2928C13.9061 19.4928 14.0061 19.5928 14.1304 19.5928C14.2546 19.5928 14.3546 19.4928 14.5546 19.2928L15.7919 18.0556C15.9919 17.8556 16.0919 17.7556 16.0919 17.6313C16.0919 17.5071 15.9919 17.4071 15.7919 17.2071L14.413 15.8282C14.0225 15.4377 14.0225 14.8045 14.413 14.414C14.8035 14.0235 15.4367 14.0235 15.8272 14.414L17.2061 15.7928C17.4061 15.9928 17.5061 16.0928 17.6304 16.0928C17.7546 16.0928 17.8546 15.9928 18.0546 15.7928L19.2919 14.5556C19.4919 14.3556 19.5919 14.2556 19.5919 14.1313C19.5919 14.0071 19.4919 13.9071 19.2919 13.7071L17.913 12.3282C17.5225 11.9377 17.5225 11.3045 17.913 10.914C18.3035 10.5235 18.9367 10.5235 19.3272 10.914L20.7574 12.3441C20.8902 12.4769 20.9566 12.5433 21.0357 12.5638C21.0905 12.578 21.152 12.5759 21.2057 12.558C21.2833 12.5322 21.3429 12.4638 21.4622 12.327C21.868 11.8618 22.1758 11.4304 22.3776 10.9432C22.8741 9.7445 22.8741 8.39764 22.3776 7.19893C22.1758 6.71171 21.868 6.28029 21.4622 5.81512C21.0648 5.35945 20.538 4.83264 19.872 4.16671L19.8332 4.12788L19.8331 4.12777C19.1673 3.46193 18.6405 2.93518 18.1849 2.53776C17.7197 2.13201 17.2883 1.8242 16.8011 1.62239Z" fill="#8F9AA3"/>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

@ -0,0 +1,4 @@
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="40" height="40" rx="10" fill="#EFEFF0"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.25 20C9.25 25.928 14.072 30.75 20 30.75C25.928 30.75 30.75 25.928 30.75 20C30.75 14.0721 25.9282 9.25021 20.0004 9.25C14.0724 9.25 9.25 14.072 9.25 20ZM28.9732 17.75C29.154 18.4705 29.25 19.2243 29.25 20C29.25 20.7757 29.154 21.5295 28.9732 22.25H24.5746C24.687 21.5359 24.751 20.7846 24.751 19.9997C24.751 19.2151 24.687 18.464 24.5747 17.75H28.9732ZM28.4553 16.25H24.2585C23.6395 13.9132 22.5564 12.0788 21.7158 10.9096C24.7331 11.4779 27.2382 13.5166 28.4553 16.25ZM23.049 17.75C23.1761 18.4613 23.25 19.213 23.25 19.9997C23.25 20.7866 23.1761 21.5386 23.049 22.25H16.9511C16.8239 21.5386 16.75 20.7866 16.75 19.9997C16.75 19.2131 16.8239 18.4613 16.9509 17.75H23.049ZM17.309 16.25H22.6909C21.966 13.828 20.7108 12.0282 20 11.1427C19.2892 12.0276 18.0339 13.8277 17.309 16.25ZM15.4263 17.75C15.314 18.464 15.25 19.2151 15.25 19.9997C15.25 20.7846 15.3141 21.5359 15.4264 22.25H11.0268C10.846 21.5295 10.75 20.7757 10.75 20C10.75 19.2243 10.846 18.4705 11.0268 17.75H15.4263ZM11.5447 16.25H15.7424C16.3613 13.9131 17.4442 12.0786 18.2848 10.9094C15.2672 11.4776 12.7619 13.5164 11.5447 16.25ZM21.7159 29.0904C24.7331 28.522 27.2382 26.4834 28.4553 23.75H24.2584C23.6395 26.0869 22.5565 27.9213 21.7159 29.0904ZM20 28.8568C20.7107 27.9719 21.9659 26.1721 22.6908 23.75H17.3093C18.0342 26.1717 19.2893 27.9713 20 28.8568ZM18.2858 29.0907C17.4451 27.9217 16.3618 26.0871 15.7427 23.75H11.5447C12.7621 26.4839 15.2678 28.5228 18.2858 29.0907Z" fill="#8F9AA3"/>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

@ -0,0 +1,8 @@
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="40" height="40" rx="10" fill="#EFEFF0"/>
<path d="M28.0364 20.3057C27.2038 20.0739 26.0073 20.0061 25.1332 19.9906C25.7837 20.5597 26.2471 21.3366 26.4231 22.2212C26.501 22.6129 26.5004 23.0277 26.5 23.3707L26.4999 29.0016C26.4999 29.2673 26.4481 29.5209 26.3541 29.7528H29.4999C29.9141 29.7528 30.2499 29.417 30.2499 29.0028L30.2499 23.4295C30.2501 23.0368 30.2503 22.7338 30.1971 22.4663C29.9801 21.3754 29.1273 20.5227 28.0364 20.3057Z" fill="#8F9AA3"/>
<path d="M12.9999 20.2517C13.3852 20.2517 13.7079 20.5437 13.7462 20.9271C13.9745 23.2102 14.9885 24.5354 15.9142 25.2978C16.384 25.6847 16.8396 25.9329 17.1743 26.0831C17.3042 26.1414 17.4149 26.1846 17.4999 26.2151C17.5849 26.1846 17.6956 26.1414 17.8255 26.0831C18.1602 25.9328 18.6158 25.6845 19.0856 25.2975C20.0113 24.5351 21.0253 23.2098 21.2536 20.9271C21.292 20.5437 21.6146 20.2517 21.9999 20.2517C21.9999 20.2517 22.8619 20.2698 23.0364 20.3045C24.1273 20.5215 24.9801 21.3743 25.1971 22.4652C25.2503 22.7327 25.2501 23.0357 25.25 23.4284L25.2499 29.0017C25.2499 29.4159 24.9141 29.7517 24.4999 29.7517H10.4999C10.0857 29.7517 9.74993 29.4159 9.74993 29.0017L9.7499 23.4284C9.74971 23.0357 9.74956 22.7327 9.80277 22.4652C10.0198 21.3743 10.8725 20.5215 11.9634 20.3045C12.138 20.2698 12.9999 20.2517 12.9999 20.2517Z" fill="#8F9AA3"/>
<path d="M17.4999 10.2517C15.4143 10.2517 13.7499 11.9733 13.7499 14.0642V14.9392C13.7499 17.0301 15.4143 18.7517 17.4999 18.7517C19.5854 18.7517 21.2499 17.0301 21.2499 14.9392V14.0642C21.2499 11.9733 19.5854 10.2517 17.4999 10.2517Z" fill="#8F9AA3"/>
<path d="M19.8942 19.8635C20.1153 20.0002 20.2499 20.2416 20.2499 20.5015V22.5015C20.2499 22.7615 20.1153 23.0029 19.8942 23.1395C19.6731 23.2762 19.397 23.2886 19.1645 23.1723L17.4999 22.3401L15.8353 23.1725C15.6029 23.2888 15.3267 23.2764 15.1056 23.1397C14.8845 23.0031 14.7499 22.7617 14.7499 22.5017V20.5017C14.7499 20.2418 14.8845 20.0004 15.1056 19.8638C15.3266 19.7271 15.6027 19.7147 15.8352 19.8309L17.4998 20.663L19.1645 19.8307C19.397 19.7145 19.6731 19.7269 19.8942 19.8635Z" fill="#8F9AA3"/>
<path d="M22.4997 14.0625C22.4997 13.1095 22.2367 12.2101 21.7767 11.4412C22.4579 10.7092 23.4227 10.25 24.4997 10.25C26.5853 10.25 28.2497 11.9716 28.2497 14.0625V14.9375C28.2497 17.0284 26.5853 18.75 24.4997 18.75C23.4227 18.75 22.4579 18.2908 21.7767 17.5588C22.2367 16.7899 22.4997 15.8905 22.4997 14.9375V14.0625Z" fill="#8F9AA3"/>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

@ -0,0 +1,5 @@
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="40" height="40" rx="10" fill="#EFEFF0"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.75 15C17.75 12.659 18.86 10.576 20.582 9.251C20.262 9.25 19.929 9.25 19.583 9.25H18.417C16.466 9.25 14.929 9.25 13.729 9.402C12.5 9.558 11.51 9.886 10.726 10.626C9.93498 11.373 9.58099 12.325 9.41299 13.505C9.25 14.6469 9.25 16.1048 9.25 17.9406L9.25 22.059C9.25 23.8948 9.25 25.3531 9.41299 26.495C9.58099 27.675 9.93498 28.627 10.726 29.374C11.51 30.114 12.5 30.442 13.729 30.598C14.929 30.75 16.466 30.75 18.417 30.75H19.583C21.534 30.75 23.071 30.75 24.271 30.598C25.5 30.442 26.49 30.114 27.274 29.374C28.065 28.627 28.419 27.675 28.587 26.495C28.75 25.3531 28.75 23.8952 28.75 22.0594V21.206C27.656 21.869 26.372 22.25 25 22.25C20.996 22.25 17.75 19.004 17.75 15ZM14 20C13.448 20 13 20.448 13 21C13 21.552 13.448 22 14 22H17.108C17.661 22 18.108 21.552 18.108 21C18.108 20.448 17.661 20 17.108 20H14ZM13 25C13 24.448 13.448 24 14 24L22 24C22.552 24 23 24.448 23 25C23 25.552 22.552 26 22 26L14 26C13.448 26 13 25.552 13 25Z" fill="#8F9AA3"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M19.25 15C19.25 11.824 21.824 9.25 25 9.25C28.176 9.25 30.75 11.824 30.75 15C30.75 18.176 28.176 20.75 25 20.75C21.824 20.75 19.25 18.176 19.25 15ZM27.707 13.25C27.845 13.64 27.641 14.069 27.25 14.207C27.027 14.286 26.746 14.467 26.43 14.744C26.122 15.014 25.818 15.342 25.547 15.668C25.276 15.992 24.796 16.671 24.633 16.902C24.488 17.13 24.232 17.263 23.962 17.249C23.692 17.235 23.45 17.077 23.329 16.836C23.124 16.425 22.952 16.286 22.896 16.249C22.892 16.246 22.887 16.243 22.884 16.241C22.525 16.185 22.25 15.875 22.25 15.5C22.25 15.086 22.586 14.75 23 14.75C23.352 14.75 23.565 14.892 23.723 14.998L23.729 15.001C23.816 15.06 23.905 15.129 23.993 15.212C24.114 15.053 24.249 14.882 24.395 14.707C24.696 14.346 25.055 13.955 25.441 13.616C25.82 13.284 26.267 12.964 26.75 12.793C27.14 12.655 27.569 12.859 27.707 13.25Z" fill="#8F9AA3"/>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M13.7261 1.30124C13.2614 1.24995 12.6972 1.24998 12.0513 1.25001L11.9543 1.25001C11.3136 1.24992 10.74 1.24984 10.2743 1.30124C9.77418 1.35644 9.2886 1.47932 8.84157 1.79219C8.32719 2.15219 7.98746 2.67118 7.77073 3.256C7.60828 3.69434 7.47147 4.24173 7.31484 4.86839L7.07918 5.81104C7.53006 5.57385 8.04089 5.4428 8.60822 5.36652C7.70812 5.48754 6.95027 5.74644 6.34835 6.34835C5.74644 6.95027 5.48754 7.70814 5.36653 8.60825C5.24997 9.47521 5.24998 10.5775 5.25 11.9451V12.0549C5.24998 13.4224 5.24997 14.5248 5.36653 15.3918C5.48754 16.2919 5.74644 17.0497 6.34835 17.6517C6.57086 17.8742 6.81467 18.0498 7.0791 18.1889L7.31487 19.132C7.47149 19.7586 7.6083 20.306 7.77073 20.7443C7.98746 21.3291 8.32719 21.8481 8.84157 22.2081C9.2886 22.5209 9.77418 22.6438 10.2743 22.699C10.739 22.7503 11.3032 22.7503 11.9491 22.7503H12.0513C12.6972 22.7503 13.2614 22.7503 13.7261 22.699C14.2262 22.6438 14.7118 22.5209 15.1589 22.2081C15.6732 21.8481 16.013 21.3291 16.2297 20.7443C16.3921 20.306 16.5289 19.7586 16.6855 19.132L16.9214 18.1887C17.1856 18.0496 17.4293 17.874 17.6517 17.6517C18.2536 17.0497 18.5125 16.2919 18.6335 15.3918C18.75 14.5248 18.75 13.4225 18.75 12.0549V11.9451C18.75 10.5776 18.75 9.47521 18.6335 8.60825C18.5125 7.70814 18.2536 6.95027 17.6517 6.34835C17.4293 6.12596 17.1856 5.9504 16.9213 5.81131L16.6853 4.86739C16.5288 4.24115 16.3921 3.69411 16.2297 3.256C16.013 2.67118 15.6732 2.15219 15.1589 1.79219C14.7118 1.47932 14.2262 1.35644 13.7261 1.30124ZM14.7323 5.30154C14.5739 4.66885 14.4679 4.25742 14.3543 3.951C14.211 3.5642 14.1259 3.50722 14.0377 3.44819C14.0292 3.4425 14.0207 3.43677 14.0121 3.43074C13.9426 3.38216 13.8252 3.32432 13.5067 3.28916C13.1648 3.25143 12.7121 3.25002 12.0002 3.25002C11.2883 3.25002 10.8356 3.25143 10.4938 3.28916C10.1752 3.32432 10.0578 3.38216 9.98837 3.43074C9.97975 3.43677 9.97122 3.44248 9.96272 3.44818C9.87454 3.50722 9.78944 3.5642 9.64609 3.951C9.53254 4.25741 9.42652 4.66884 9.26813 5.3015C10.0153 5.24997 10.9032 5.24999 11.9451 5.25H12.0549C13.0969 5.24999 13.985 5.24997 14.7323 5.30154ZM8.60823 18.6335C8.60822 18.6335 8.60823 18.6335 8.60823 18.6335V18.6335ZM9.26806 18.6985C9.42649 19.3313 9.53252 19.7428 9.64609 20.0493C9.78944 20.4361 9.87453 20.493 9.9627 20.5521C9.97114 20.5577 9.97981 20.5635 9.98836 20.5695C10.0578 20.6181 10.1752 20.6759 10.4938 20.7111C10.8356 20.7488 11.2883 20.7503 12.0002 20.7503C12.7121 20.7503 13.1648 20.7488 13.5067 20.7111C13.8252 20.6759 13.9426 20.6181 14.0121 20.5695L14.0251 20.5606L14.0377 20.5521C14.1259 20.493 14.211 20.4361 14.3543 20.0493C14.4679 19.7428 14.5739 19.3313 14.7324 18.6985C13.9851 18.75 13.097 18.75 12.0549 18.75M12 9C12.5523 9 13 9.44772 13 10L13 11.5893L13.7053 12.2911C14.0968 12.6807 14.0984 13.3138 13.7089 13.7053C13.3193 14.0968 12.6862 14.0984 12.2947 13.7089L11.2947 12.7139C11.1061 12.5262 11 12.2711 11 12.005L11 10C11 9.44772 11.4477 9 12 9Z" fill="#FFB027"/>
</svg>

After

Width:  |  Height:  |  Size: 3.0 KiB

@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M19.6905 5.77665C20.09 6.15799 20.1047 6.79098 19.7234 7.19048L9.22336 18.1905C9.03745 18.3852 8.78086 18.4968 8.51163 18.4999C8.2424 18.5031 7.98328 18.3975 7.79289 18.2071L4.29289 14.7071C3.90237 14.3166 3.90237 13.6834 4.29289 13.2929C4.68342 12.9024 5.31658 12.9024 5.70711 13.2929L8.48336 16.0692L18.2766 5.80953C18.658 5.41003 19.291 5.39531 19.6905 5.77665Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 533 B

@ -0,0 +1,5 @@
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="40" height="40" rx="10" fill="#EFEFF0"/>
<path d="M18.2215 12.1982C18.7926 12.0686 19.3878 12 20.0002 12C24.4185 12 28.0002 15.5817 28.0002 20C28.0002 22.0411 27.2363 23.904 25.9769 25.3181V24C25.9769 23.4477 25.5292 23 24.9769 23C24.4246 23 23.9769 23.4477 23.9769 24V27.5C23.9769 28.0523 24.4246 28.5 24.9769 28.5H28.5002C29.0525 28.5 29.5002 28.0523 29.5002 27.5C29.5002 26.9477 29.0525 26.5 28.5002 26.5H27.5996C29.0955 24.7526 30.0002 22.482 30.0002 20C30.0002 14.4772 25.5231 10 20.0002 10C19.2379 10 18.4943 10.0855 17.7789 10.2478C17.2403 10.37 16.9028 10.9057 17.025 11.4443C17.1472 11.9829 17.6829 12.3204 18.2215 12.1982Z" fill="#8F9AA3"/>
<path d="M11.5 11.5156C10.9477 11.5156 10.5 11.9633 10.5 12.5156C10.5 13.0679 10.9477 13.5156 11.5 13.5156H12.3873C10.8993 15.261 10 17.5254 10 20.0001C10 25.5229 14.4772 30.0001 20 30.0001C20.7623 30.0001 21.5059 29.9146 22.2213 29.7523C22.7599 29.6301 23.0974 29.0944 22.9752 28.5558C22.853 28.0172 22.3173 27.6796 21.7787 27.8019C21.2076 27.9314 20.6124 28.0001 20 28.0001C15.5817 28.0001 12 24.4184 12 20.0001C12 17.9716 12.7545 16.1191 14 14.7082L14 16.0001C14 16.5524 14.4477 17.0001 15 17.0001C15.5523 17.0001 16 16.5524 16 16.0001V12.5156C16 11.9633 15.5523 11.5156 15 11.5156L11.5 11.5156Z" fill="#8F9AA3"/>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

@ -0,0 +1,3 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M20.3865 4.00002C17.4622 4.00209 14.5379 4.00209 11.6135 4.00002C9.35786 3.99842 7.23864 4.10199 5.5256 5.7098C4.54176 6.63321 3.88939 7.96334 2.90817 9.96396C2.83281 10.1176 2.75608 10.2711 2.67924 10.4248C2.30703 11.1693 1.93223 11.919 1.69854 12.7176C1.59525 13.0706 1.51357 13.4313 1.45389 13.7969C1.33317 14.5363 1.33324 15.2911 1.33336 16.4884C1.33336 16.5262 1.33337 16.5645 1.33337 16.6032L1.33337 17.7467C1.32961 18.1191 1.33069 18.4917 1.33177 18.8638C1.33228 19.0395 1.33279 19.2152 1.33279 19.3906C1.33278 20.7127 1.33277 21.7867 1.40428 22.6547C1.47799 23.5492 1.63474 24.3496 2.02143 25.0863C2.47537 25.9512 3.13668 26.6853 3.95132 27.2027C4.66111 27.6535 5.43641 27.8356 6.28065 27.9197C7.83511 28.0747 9.60573 28.1722 11.1601 27.92C12.4778 27.7061 13.692 27.0741 14.6581 26.1239C14.9713 25.8159 15.2489 25.4736 15.5158 25.1228C15.7846 24.7695 15.9191 24.5929 16.1082 24.586C16.2973 24.5791 16.4423 24.7433 16.7325 25.0717C17.0905 25.4769 17.4535 25.8793 17.846 26.246C18.9038 27.2342 20.2349 27.8478 21.6562 27.9753C22.9851 28.0944 24.3957 28.0516 25.7183 27.9197C26.5625 27.8356 27.3378 27.6535 28.0476 27.2027C28.8622 26.6854 29.5235 25.9512 29.9775 25.0863C30.3642 24.3496 30.5209 23.5492 30.5946 22.6547C30.6539 21.9359 30.664 21.0758 30.6658 20.0506C30.6664 20.0339 30.6667 20.0171 30.6667 20.0002L30.6667 19.0211C30.6668 18.9688 30.667 18.9164 30.6671 18.8641C30.6681 18.5368 30.669 18.2087 30.6667 17.8811L30.6667 16.4884C30.6668 15.2911 30.6669 14.5363 30.5462 13.7969C30.4865 13.4313 30.4048 13.0706 30.3015 12.7176C30.0676 11.9183 29.6939 11.1708 29.3219 10.4268C29.2447 10.2725 29.1676 10.1184 29.0919 9.96398C28.1107 7.96335 27.4583 6.63322 26.4745 5.70981C24.7614 4.10199 22.6422 3.99842 20.3865 4.00002ZM26.5777 10.8951C25.6038 8.92041 25.1889 8.16046 24.6495 7.65421C23.5518 6.62393 22.1081 6.64298 20.6826 6.6618C20.492 6.66432 20.3018 6.66683 20.1127 6.66683L11.8873 6.66683C11.6983 6.66683 11.5081 6.66432 11.3175 6.6618C9.89193 6.64298 8.44826 6.62393 7.35055 7.65421C6.81121 8.16043 6.39633 8.92032 5.42248 10.8947C5.69939 10.8257 5.98587 10.7763 6.28065 10.7469C7.08623 10.6666 8.07676 10.6666 9.26632 10.6667L22.7326 10.6667C23.9222 10.6666 24.9127 10.6666 25.7183 10.7469C26.0135 10.7764 26.3004 10.8259 26.5777 10.8951ZM20.0001 17.3336C20.0001 16.5972 20.5971 16.0003 21.3335 16.0003H24.0001C24.7365 16.0003 25.3335 16.5972 25.3335 17.3336C25.3335 18.07 24.7365 18.6669 24.0001 18.6669H21.3335C20.5971 18.6669 20.0001 18.07 20.0001 17.3336Z" fill="#2E3039"/>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.6439 1.25L13.3561 1.25C14.259 1.24997 15.0211 1.24994 15.6249 1.32042C16.255 1.39396 16.8707 1.55847 17.3706 2.00915C17.5958 2.21222 17.7873 2.44899 17.9376 2.71113C18.2326 3.22573 18.2812 3.77334 18.2347 4.31609C19.2103 4.4287 20.0196 4.68604 20.6521 5.31966C21.2538 5.92238 21.5125 6.68113 21.6335 7.58241C21.75 8.4507 21.75 9.55477 21.75 10.9249V16.043C21.75 17.4131 21.75 18.5172 21.6335 19.3855C21.5125 20.2867 21.2538 21.0455 20.6521 21.6482C20.0502 22.2511 19.2923 22.5105 18.3919 22.6318C17.5249 22.7486 16.4225 22.7486 15.055 22.7485L8.94504 22.7485C7.57752 22.7486 6.47513 22.7486 5.60808 22.6318C4.70774 22.5105 3.94976 22.2511 3.3479 21.6482C2.74621 21.0455 2.48747 20.2867 2.3665 19.3855C2.24997 18.5172 2.24998 17.4131 2.25 16.0431L2.25 10.9248C2.24998 9.55478 2.24997 8.45069 2.3665 7.58241C2.48747 6.68113 2.74621 5.92238 3.3479 5.31966C3.98043 4.68604 4.78975 4.4287 5.76534 4.31608C5.71879 3.77334 5.76736 3.22573 6.06239 2.71113C6.21268 2.44899 6.40422 2.21222 6.62944 2.00915C7.1293 1.55847 7.74503 1.39396 8.37506 1.32042C8.97893 1.24994 9.74097 1.24997 10.6439 1.25ZM8.60067 3.2073C8.13641 3.26149 7.99252 3.35241 7.92575 3.4126C7.8493 3.48154 7.78534 3.56095 7.73568 3.64756C7.69637 3.71613 7.64027 3.8608 7.69746 4.30137C7.75673 4.75797 7.91092 5.36081 8.14823 6.27796C8.33725 7.00848 8.46246 7.48783 8.59555 7.84684C8.72171 8.18716 8.82647 8.33584 8.9287 8.43308C9.00978 8.51021 9.10016 8.57847 9.1982 8.63631C9.32461 8.71091 9.5056 8.77465 9.88389 8.81094C10.1378 8.83531 10.4406 8.84448 10.8301 8.84793L11.5514 6.68404C11.726 6.1601 12.2924 5.87694 12.8163 6.05159C13.3402 6.22624 13.6234 6.79256 13.4488 7.3165L12.9378 8.84935C13.4424 8.84743 13.8138 8.83994 14.1161 8.81094C14.4944 8.77465 14.6754 8.71091 14.8018 8.63631C14.8998 8.57847 14.9902 8.51021 15.0713 8.43308C15.1735 8.33584 15.2783 8.18716 15.4045 7.84684C15.5375 7.48783 15.6628 7.00848 15.8518 6.27796C16.0891 5.36081 16.2433 4.75797 16.3025 4.30137C16.3597 3.8608 16.3036 3.71613 16.2643 3.64756C16.2147 3.56095 16.1507 3.48153 16.0742 3.4126C16.0075 3.35241 15.8636 3.26149 15.3993 3.2073C14.9218 3.15157 14.2747 3.15 13.2979 3.15L10.7021 3.15C9.72532 3.15 9.07816 3.15157 8.60067 3.2073ZM10 17C9.44772 17 9 17.4477 9 18C9 18.5523 9.44772 19 10 19H14C14.5523 19 15 18.5523 15 18C15 17.4477 14.5523 17 14 17L10 17Z" fill="#8F9AA3"/>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

@ -0,0 +1,4 @@
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="40" height="40" rx="10" fill="#EFEFF0"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M18.6439 9.25L21.3561 9.25C22.259 9.24997 23.0211 9.24994 23.6249 9.32042C24.255 9.39396 24.8707 9.55847 25.3706 10.0092C25.5958 10.2122 25.7873 10.449 25.9376 10.7111C26.2326 11.2257 26.2812 11.7733 26.2347 12.3161C27.2103 12.4287 28.0196 12.686 28.6521 13.3197C29.2538 13.9224 29.5125 14.6811 29.6335 15.5824C29.75 16.4507 29.75 17.5548 29.75 18.9249V24.043C29.75 25.4131 29.75 26.5172 29.6335 27.3855C29.5125 28.2867 29.2538 29.0455 28.6521 29.6482C28.0502 30.2511 27.2923 30.5105 26.3919 30.6318C25.5249 30.7486 24.4225 30.7486 23.055 30.7485L16.945 30.7485C15.5775 30.7486 14.4751 30.7486 13.6081 30.6318C12.7077 30.5105 11.9498 30.2511 11.3479 29.6482C10.7462 29.0455 10.4875 28.2867 10.3665 27.3855C10.25 26.5172 10.25 25.4131 10.25 24.0431L10.25 18.9248C10.25 17.5548 10.25 16.4507 10.3665 15.5824C10.4875 14.6811 10.7462 13.9224 11.3479 13.3197C11.9804 12.686 12.7898 12.4287 13.7653 12.3161C13.7188 11.7733 13.7674 11.2257 14.0624 10.7111C14.2127 10.449 14.4042 10.2122 14.6294 10.0092C15.1293 9.55847 15.745 9.39396 16.3751 9.32042C16.9789 9.24994 17.741 9.24997 18.6439 9.25ZM16.6007 11.2073C16.1364 11.2615 15.9925 11.3524 15.9258 11.4126C15.8493 11.4815 15.7853 11.5609 15.7357 11.6476C15.6964 11.7161 15.6403 11.8608 15.6975 12.3014C15.7567 12.758 15.9109 13.3608 16.1482 14.278C16.3373 15.0085 16.4625 15.4878 16.5955 15.8468C16.7217 16.1872 16.8265 16.3358 16.9287 16.4331C17.0098 16.5102 17.1002 16.5785 17.1982 16.6363C17.3246 16.7109 17.5056 16.7746 17.8839 16.8109C18.1378 16.8353 18.4406 16.8445 18.8301 16.8479L19.5514 14.684C19.726 14.1601 20.2924 13.8769 20.8163 14.0516C21.3402 14.2262 21.6234 14.7926 21.4488 15.3165L20.9378 16.8493C21.4424 16.8474 21.8138 16.8399 22.1161 16.8109C22.4944 16.7746 22.6754 16.7109 22.8018 16.6363C22.8998 16.5785 22.9902 16.5102 23.0713 16.4331C23.1735 16.3358 23.2783 16.1872 23.4045 15.8468C23.5375 15.4878 23.6628 15.0085 23.8518 14.278C24.0891 13.3608 24.2433 12.758 24.3025 12.3014C24.3597 11.8608 24.3036 11.7161 24.2643 11.6476C24.2147 11.5609 24.1507 11.4815 24.0742 11.4126C24.0075 11.3524 23.8636 11.2615 23.3993 11.2073C22.9218 11.1516 22.2747 11.15 21.2979 11.15L18.7021 11.15C17.7253 11.15 17.0782 11.1516 16.6007 11.2073ZM18 25C17.4477 25 17 25.4477 17 26C17 26.5523 17.4477 27 18 27H22C22.5523 27 23 26.5523 23 26C23 25.4477 22.5523 25 22 25L18 25Z" fill="#8F9AA3"/>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

File diff suppressed because it is too large Load Diff

@ -0,0 +1,73 @@
import 'dart:convert';
import 'dart:io';
void main() async {
final file = File('assets/json/body_symptoms_data.json');
final content = await file.readAsString();
print('File size: ${content.length} characters');
// Split into two parts
final parts = content.split('export const SymptomsData = [');
if (parts.length != 2) {
print('ERROR: Could not split file properly');
exit(1);
}
print('Split into ${parts.length} parts');
// Process BodySymptomsData
var bodyPart = parts[0]
.replaceAll('export const BodySymptomsData = ', '')
.trim()
.replaceAll(RegExp(r';$'), '');
print('Parsing body symptoms...');
Map<String, dynamic> bodySymptomsData;
try {
bodySymptomsData = json.decode(bodyPart);
print('✅ Body symptoms parsed: ${bodySymptomsData.length} body parts');
} catch (e) {
print('❌ Error parsing body symptoms: $e');
exit(1);
}
// Process SymptomsData
print('Processing symptoms data...');
var symptomsPart = parts[1]
.trim()
.replaceAll(RegExp(r'\];$'), '')
.replaceAllMapped(RegExp(r'\n(\s*)id:'), (m) => '\n${m.group(1)}"id":')
.replaceAllMapped(RegExp(r'\n(\s*)type:'), (m) => '\n${m.group(1)}"type":')
.replaceAllMapped(RegExp(r'\n(\s*)name:'), (m) => '\n${m.group(1)}"name":')
.replaceAllMapped(RegExp(r'\n(\s*)common_name:'), (m) => '\n${m.group(1)}"common_name":');
print('Parsing symptoms...');
List<dynamic> symptomsData;
try {
symptomsData = json.decode('[$symptomsPart]');
print('✅ Symptoms parsed: ${symptomsData.length} symptoms');
} catch (e) {
print('❌ Error parsing symptoms: $e');
print('First 1000 chars:');
print('[$symptomsPart]'.substring(0, 1000));
exit(1);
}
// Create final JSON
print('Creating final JSON structure...');
final jsonStructure = {
'bodySymptoms': bodySymptomsData,
'symptoms': symptomsData,
};
// Write to file
print('Writing to file...');
final encoder = JsonEncoder.withIndent(' ');
await file.writeAsString(encoder.convert(jsonStructure));
print('\n✅ SUCCESS! File converted to proper JSON');
print('✅ Body parts: ${bodySymptomsData.length}');
print('✅ Symptoms: ${symptomsData.length}');
}

@ -71,6 +71,8 @@
<string>This app requires contacts access to show incoming virtual consultation request.</string>
<key>NSFaceIDUsageDescription</key>
<string>This app requires Face ID to allow biometric authentication for app login.</string>
<key>NSHealthClinicalHealthRecordsShareUsageDescription</key>
<string>This App need access to HealthKit to read heart rate &amp; other data from your smart watch.</string>
<key>NSHealthShareUsageDescription</key>
<string>This App need access to HealthKit to read heart rate &amp; other data from your smart watch.</string>
<key>NSHealthUpdateUsageDescription</key>

@ -4,6 +4,14 @@
<dict>
<key>aps-environment</key>
<string>development</string>
<key>com.apple.developer.healthkit</key>
<true/>
<key>com.apple.developer.healthkit.access</key>
<array>
<string>health-records</string>
</array>
<key>com.apple.developer.healthkit.background-delivery</key>
<true/>
<key>com.apple.developer.in-app-payments</key>
<array>
<string>merchant.com.hmgwebservices</string>

@ -14,7 +14,7 @@ var PACKAGES_ORDERS = '/api/orders';
var PACKAGES_ORDER_HISTORY = '/api/orders/items';
var PACKAGES_TAMARA_OPT = '/api/orders/paymentoptions/tamara';
// var BASE_URL = 'http://10.50.100.198:2018/';
var BASE_URL = 'https://uat.hmgwebservices.com/';
var BASE_URL = 'https://uat.hmgwebservices.com/';
// var BASE_URL = 'https://hmgwebservices.com/';
// var BASE_URL = 'http://10.201.204.103/';
// var BASE_URL = 'https://orash.cloudsolutions.com.sa/';
@ -181,6 +181,7 @@ var GET_TABLE_REQUEST = 'Services/Community.svc/REST/CreateVaccinationTable';
///
/// use get all cities from the e-referral, already calling this api there don't use multiple same api calls
var GET_CITIES_REQUEST = 'Services/Lists.svc/REST/GetAllCities';
///
///
///
@ -444,8 +445,6 @@ var H2O_UPDATE_USER_DETAIL = "Services/H2ORemainder.svc/REST/H2O_UpdateUserDetai
var H2O_UNDO_USER_ACTIVITY = "Services/H2ORemainder.svc/REST/H2o_UndoUserActivity";
//E_Referral Services
// Encillary Orders
var GET_ANCILLARY_ORDERS = 'Services/Doctors.svc/REST/GetOnlineAncillaryOrderList';
@ -512,12 +511,6 @@ var PATIENT_ER_INSERT_PRES_ORDER = 'Services/Patients.svc/REST/PatientER_InsertP
var BLOOD_DONATION_REGISTER_BLOOD_TYPE = 'Services/PatientVarification.svc/REST/BloodDonation_RegisterBloodType';
var ADD_USER_AGREEMENT_FOR_BLOOD_DONATION = 'Services/PatientVarification.svc/REST/AddUserAgreementForBloodDonation';
// HHC RC SERVICES
var HHC_GET_ALL_SERVICES_RC = "api/HHC/getallhhc";
var ADD_HHC_ORDER_RC = "api/HHC/add";
var GET_ALL_HHC_ORDERS_RC = 'api/hhc/list';
var UPDATE_HHC_ORDER_RC = 'api/hhc/update';
// RRT RC SERVICES
var ADD_RRT_ORDER_RC = "api/rrt/add";
var GET_ALL_RRT_ORDERS_RC = "api/rrt/list";
@ -716,7 +709,9 @@ class ApiConsts {
static String baseUrl = 'https://hmgwebservices.com/'; // HIS API URL PROD
static String rcBaseUrl = 'https://rc.hmg.com/'; // RC API URL PROD
static String rcBaseUrl = 'https://rc.hmg.com/'; // dRC API URL PROD
static String hmgPharmacyApiBaseUrl = 'https://hmgpharmacyapi.hmg.com/'; // dRC API URL PROD
static String symptomsCheckerApi = '${hmgPharmacyApiBaseUrl}symptomsapi/api/SymptomChecker'; // dRC API URL PROD
static var payFortEnvironment = FortEnvironment.production;
static var applePayMerchantId = "merchant.com.hmgwebservices";
@ -728,6 +723,8 @@ class ApiConsts {
static String GET_TAMARA_INSTALLMENTS_URL = "https://mdlaboratories.com/tamaralive/Home/GetInstallments";
static String GET_TAMARA_PAYMENT_STATUS = 'https://mdlaboratories.com/tamaralive/api/OnlineTamara/order_status?orderid=';
static String QLINE_URL = "https://ms.hmg.com/nscapi/api/PatientCall/PatientInQueue_Detail";
// static String GET_TAMARA_INSTALLMENTS_URL = "https://epharmacy.hmg.com/tamara/Home/getinstallments";
// var payFortEnvironment = FortEnvironment.test;
@ -744,6 +741,7 @@ class ApiConsts {
GET_TAMARA_INSTALLMENTS_URL = "https://mdlaboratories.com/tamaralive/Home/GetInstallments";
GET_TAMARA_PAYMENT_STATUS = 'https://mdlaboratories.com/tamaralive/api/OnlineTamara/order_status?orderid=';
rcBaseUrl = 'https://rc.hmg.com/';
QLINE_URL = "https://ms.hmg.com/nscapi/api/PatientCall/PatientInQueue_Detail";
break;
case AppEnvironmentTypeEnum.dev:
baseUrl = "https://uat.hmgwebservices.com/";
@ -754,6 +752,7 @@ class ApiConsts {
GET_TAMARA_INSTALLMENTS_URL = "https://epharmacy.hmg.com/tamara/Home/getinstallments";
GET_TAMARA_PAYMENT_STATUS = 'https://epharmacy.hmg.com/tamara/api/OnlineTamara/order_status?orderid=';
rcBaseUrl = 'https://rc.hmg.com/uat/';
QLINE_URL = "https://ms.hmg.com/nscapi/api/PatientCall/PatientInQueue_Detail";
break;
case AppEnvironmentTypeEnum.uat:
baseUrl = "https://uat.hmgwebservices.com/";
@ -764,6 +763,7 @@ class ApiConsts {
GET_TAMARA_INSTALLMENTS_URL = "https://epharmacy.hmg.com/tamara/Home/getinstallments";
GET_TAMARA_PAYMENT_STATUS = 'https://epharmacy.hmg.com/tamara/api/OnlineTamara/order_status?orderid=';
rcBaseUrl = 'https://rc.hmg.com/uat/';
QLINE_URL = "https://ms.hmg.com/nscapi/api/PatientCall/PatientInQueue_Detail";
break;
case AppEnvironmentTypeEnum.preProd:
baseUrl = "https://webservices.hmg.com/";
@ -774,6 +774,7 @@ class ApiConsts {
GET_TAMARA_INSTALLMENTS_URL = "https://epharmacy.hmg.com/tamara/Home/getinstallments";
GET_TAMARA_PAYMENT_STATUS = 'https://epharmacy.hmg.com/tamara/api/OnlineTamara/order_status?orderid=';
rcBaseUrl = 'https://rc.hmg.com/';
QLINE_URL = "https://ms.hmg.com/nscapi/api/PatientCall/PatientInQueue_Detail";
break;
case AppEnvironmentTypeEnum.qa:
baseUrl = "https://uat.hmgwebservices.com/";
@ -784,6 +785,7 @@ class ApiConsts {
GET_TAMARA_INSTALLMENTS_URL = "https://epharmacy.hmg.com/tamara/Home/getinstallments";
GET_TAMARA_PAYMENT_STATUS = 'https://epharmacy.hmg.com/tamara/api/OnlineTamara/order_status?orderid=';
rcBaseUrl = 'https://rc.hmg.com/uat/';
QLINE_URL = "https://ms.hmg.com/nscapi/api/PatientCall/PatientInQueue_Detail";
break;
case AppEnvironmentTypeEnum.staging:
baseUrl = "https://uat.hmgwebservices.com/";
@ -794,6 +796,7 @@ class ApiConsts {
GET_TAMARA_INSTALLMENTS_URL = "https://epharmacy.hmg.com/tamara/Home/getinstallments";
GET_TAMARA_PAYMENT_STATUS = 'https://epharmacy.hmg.com/tamara/api/OnlineTamara/order_status?orderid=';
rcBaseUrl = 'https://rc.hmg.com/uat/';
QLINE_URL = "https://ms.hmg.com/nscapi/api/PatientCall/PatientInQueue_Detail";
break;
}
}
@ -850,6 +853,12 @@ class ApiConsts {
static final String updateHHCOrder = 'api/hhc/update';
static final String addHHCOrder = 'api/HHC/add';
// SYMPTOMS CHECKER
static final String getBodySymptomsByName = '$symptomsCheckerApi/GetBodySymptomsByName';
static final String getRiskFactors = '$symptomsCheckerApi/GetRiskFactors';
static final String getGeneralSuggestion = '$symptomsCheckerApi/GetGeneralSggestion';
static final String diagnosis = '$symptomsCheckerApi/diagnosis';
static final String explain = '$symptomsCheckerApi/explain';
//E-REFERRAL SERVICES
@ -860,7 +869,6 @@ class ApiConsts {
static final createEReferral = "Services/Patients.svc/REST/CreateEReferral";
static final getEReferrals = "Services/Patients.svc/REST/GetEReferrals";
// ************ static values for Api ****************
static final double appVersionID = 50.3;
static final int appChannelId = 3;
@ -868,3 +876,7 @@ class ApiConsts {
static final String appGeneralId = "Cs2020@2016\$2958";
static final String sessionID = 'TMRhVmkGhOsvamErw';
}
class ApiKeyConstants {
static final String googleMapsApiKey = 'AIzaSyB6TERnxIr0yJ3qG4ULBZbu0sAD4tGqtng';
}

@ -178,6 +178,34 @@ class AppAssets {
static const String doctor_profile_rating_icon = '$svgBasePath/doctor_profile_rating_icon.svg';
static const String doctor_profile_reviews_icon = '$svgBasePath/doctor_profile_reviews_icon.svg';
static const String waiting_appointment_icon = '$svgBasePath/waitingAppo.svg';
static const String call_for_vitals = '$svgBasePath/call_for_vitals.svg';
static const String call_for_doctor = '$svgBasePath/call_for_doctor.svg';
static const String bulb_icon = '$svgBasePath/bulb_icon.svg';
static const String select_city_icon = '$svgBasePath/select_city_icon.svg';
static const String blood_donation_icon = '$svgBasePath/blood_donation_icon.svg';
static const String virtual_tour_icon = '$svgBasePath/virtual_tour_icon.svg';
static const String car_parking_icon = '$svgBasePath/car_parking_icon.svg';
static const String latest_news_icon = '$svgBasePath/latest_news_icon.svg';
static const String hmg_contact_icon = '$svgBasePath/hmg_contact_icon.svg';
static const String services_medical_file_icon = '$svgBasePath/services_medical_file_icon.svg';
static const String blood_sugar_icon = '$svgBasePath/blood_sugar_icon.svg';
static const String weight_tracker_icon = '$svgBasePath/weight_tracker_icon.svg';
static const String ask_doctor_medical_file_icon = '$svgBasePath/ask_doctor_medical_file_icon.svg';
static const String internet_pairing_icon = '$svgBasePath/internet_pairing_icon.svg';
static const String my_doctors_icon = '$svgBasePath/my_doctors_icon.svg';
static const String my_sick_leave_icon = '$svgBasePath/my_sick_leave_icon.svg';
static const String my_radiology_icon = '$svgBasePath/my_radiology_icon.svg';
static const String monthly_reports_icon = '$svgBasePath/monthly_reports_icon.svg';
static const String medical_reports_icon = '$svgBasePath/medical_reports_icon.svg';
static const String sick_leave_report_icon = '$svgBasePath/sick_leave_report_icon.svg';
static const String update_insurance_icon = '$svgBasePath/update_insurance_icon.svg';
static const String insurance_approval_icon = '$svgBasePath/insurance_approval_icon.svg';
static const String invoices_list_icon = '$svgBasePath/invoices_list_icon.svg';
static const String ancillary_orders_list_icon = '$svgBasePath/ancillary_orders_list_icon.svg';
static const String daily_water_monitor_icon = '$svgBasePath/daily_water_monitor.svg';
static const String health_calculators_services_icon = '$svgBasePath/health_calculators_services_icon.svg';
static const String health_converters_icon = '$svgBasePath/health_converters_icon.svg';
static const String smartwatch_icon = '$svgBasePath/smartwatch_icon.svg';
static const String bmi = '$svgBasePath/bmi.svg';
static const String bmr = '$svgBasePath/bmr.svg';
static const String calories = '$svgBasePath/calories.svg';
@ -206,23 +234,39 @@ class AppAssets {
static const String heart = '$svgBasePath/heart.svg';
static const String alertSquare = '$svgBasePath/alert-square.svg';
static const String arrowRight = '$svgBasePath/arrow-right.svg';
static const String tickIcon = '$svgBasePath/tick.svg';
// Symptoms Checker
static const String calendarGrey = '$svgBasePath/calendar-grey.svg';
static const String weightScale = '$svgBasePath/weight-scale.svg';
static const String rulerIcon = '$svgBasePath/ruler.svg';
static const String genderIcon = '$svgBasePath/gender.svg';
static const String bodyIcon = '$svgBasePath/body_icon.svg';
static const String rotateIcon = '$svgBasePath/rotate_icon.svg';
static const String refreshIcon = '$svgBasePath/refresh.svg';
static const String homeBorderedIcon = '$svgBasePath/home_bordered.svg';
// PNGS //
static const String hmg_logo = '$pngBasePath/hmg_logo.png';
static const String livecare_service = '$pngBasePath/livecare_service.png';
static const String male_img = '$pngBasePath/male_img.png';
static const String hmgLogo = '$pngBasePath/hmg_logo.png';
static const String liveCareService = '$pngBasePath/livecare_service.png';
static const String maleImg = '$pngBasePath/male_img.png';
static const String femaleImg = '$pngBasePath/female_img.png';
static const String babyGirlImg = '$pngBasePath/baby_girl_img.png';
static const String babyBoyImg = '$pngBasePath/baby_img.png';
static const String apple_pay = '$pngBasePath/Apple_Pay.png';
static const String applePay = '$pngBasePath/Apple_Pay.png';
static const String mada = '$pngBasePath/Mada.png';
static const String Mastercard = '$pngBasePath/Mastercard.png';
static const String tamara_en = '$pngBasePath/tamara_en.png';
static const String mastercard = '$pngBasePath/Mastercard.png';
static const String tamaraEng = '$pngBasePath/tamara_en.png';
static const String visa = '$pngBasePath/visa.png';
static const String lockIcon = '$pngBasePath/lock-icon.png';
static const String dummy_user = '$pngBasePath/dummy_user.png';
static const String dummyUser = '$pngBasePath/dummy_user.png';
static const String comprehensiveCheckupEn = '$pngBasePath/cc_en.png';
static const String comprehensiveCheckupAr = '$pngBasePath/cc_er.png';
static const String maleIcon = '$pngBasePath/male_icon.png';
static const String femaleIcon = '$pngBasePath/female_icon.png';
static const String fullBodyFront = '$pngBasePath/full_body_front.png';
static const String fullBodyBack = '$pngBasePath/full_body_back.png';
}
class AppAnimations {
@ -238,9 +282,9 @@ class AppAnimations {
static const String splashLaunching = '$lottieBasePath/splash_launching.json';
static const String noData = '$lottieBasePath/Nodata.json';
static const String ripple = '$lottieBasePath/Ripple.json';
static const String pending_loading_animation = '$lottieBasePath/pending_loading_animation.json';
static const String pendingLoadingAnimation = '$lottieBasePath/pending_loading_animation.json';
static const String ambulance = '$lottieBasePath/ambulance.json';
static const String ambulance_alert = '$lottieBasePath/ambulance_alert.json';
static const String rrt_ambulance = '$lottieBasePath/rrt_ambulance.json';
static const String ambulanceAlert = '$lottieBasePath/ambulance_alert.json';
static const String rrtAmbulance = '$lottieBasePath/rrt_ambulance.json';
}

@ -5,6 +5,8 @@ import 'package:hmg_patient_app_new/core/app_state.dart';
import 'package:hmg_patient_app_new/core/location_util.dart';
import 'package:hmg_patient_app_new/features/authentication/authentication_repo.dart';
import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart';
import 'package:hmg_patient_app_new/features/blood_donation/blood_donation_repo.dart';
import 'package:hmg_patient_app_new/features/blood_donation/blood_donation_view_model.dart';
import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_repo.dart';
import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_view_model.dart';
import 'package:hmg_patient_app_new/features/common/common_repo.dart';
@ -37,6 +39,9 @@ import 'package:hmg_patient_app_new/features/prescriptions/prescriptions_view_mo
import 'package:hmg_patient_app_new/features/profile_settings/profile_settings_view_model.dart';
import 'package:hmg_patient_app_new/features/radiology/radiology_repo.dart';
import 'package:hmg_patient_app_new/features/radiology/radiology_view_model.dart';
import 'package:hmg_patient_app_new/features/smartwatch_health_data/health_provider.dart';
import 'package:hmg_patient_app_new/features/symptoms_checker/symptoms_checker_repo.dart';
import 'package:hmg_patient_app_new/features/symptoms_checker/symptoms_checker_view_model.dart';
import 'package:hmg_patient_app_new/features/todo_section/todo_section_repo.dart';
import 'package:hmg_patient_app_new/features/todo_section/todo_section_view_model.dart';
import 'package:hmg_patient_app_new/presentation/health_calculators/health_calculator_view_model.dart';
@ -95,6 +100,9 @@ class AppDependencies {
final sharedPreferences = await SharedPreferences.getInstance();
getIt.registerLazySingleton<CacheService>(() => CacheServiceImp(sharedPreferences: sharedPreferences, loggerService: getIt()));
getIt.registerLazySingleton<ApiClient>(() => ApiClientImp(appState: getIt()));
getIt.registerLazySingleton<LocalAuthService>(
() => LocalAuthService(loggerService: getIt<LoggerService>(), localAuth: getIt<LocalAuthentication>()),
);
// Repositories
getIt.registerLazySingleton<CommonRepo>(() => CommonRepoImp(loggerService: getIt()));
@ -106,9 +114,6 @@ class AppDependencies {
getIt.registerLazySingleton<PrescriptionsRepo>(() => PrescriptionsRepoImp(loggerService: getIt<LoggerService>(), apiClient: getIt()));
getIt.registerLazySingleton<InsuranceRepo>(() => InsuranceRepoImp(loggerService: getIt<LoggerService>(), apiClient: getIt()));
getIt.registerLazySingleton<PayfortRepo>(() => PayfortRepoImp(loggerService: getIt<LoggerService>(), apiClient: getIt()));
getIt.registerLazySingleton<LocalAuthService>(
() => LocalAuthService(loggerService: getIt<LoggerService>(), localAuth: getIt<LocalAuthentication>()),
);
getIt.registerLazySingleton<HabibWalletRepo>(() => HabibWalletRepoImp(loggerService: getIt<LoggerService>(), apiClient: getIt()));
getIt.registerLazySingleton<MedicalFileRepo>(() => MedicalFileRepoImp(loggerService: getIt<LoggerService>(), apiClient: getIt()));
getIt.registerLazySingleton<ImmediateLiveCareRepo>(() => ImmediateLiveCareRepoImp(loggerService: getIt<LoggerService>(), apiClient: getIt()));
@ -117,6 +122,8 @@ class AppDependencies {
getIt.registerLazySingleton<LocationRepo>(() => LocationRepoImpl(apiClient: getIt()));
getIt.registerLazySingleton<ContactUsRepo>(() => ContactUsRepoImp(loggerService: getIt<LoggerService>(), apiClient: getIt()));
getIt.registerLazySingleton<HmgServicesRepo>(() => HmgServicesRepoImp(loggerService: getIt<LoggerService>(), apiClient: getIt()));
getIt.registerLazySingleton<SymptomsCheckerRepo>(() => SymptomsCheckerRepoImp(loggerService: getIt<LoggerService>(), apiClient: getIt()));
getIt.registerLazySingleton<BloodDonationRepo>(() => BloodDonationRepoImp(loggerService: getIt<LoggerService>(), apiClient: getIt()));
// ViewModels
// Global/shared VMs LazySingleton
@ -127,7 +134,8 @@ class AppDependencies {
() => RadiologyViewModel(radiologyRepo: getIt(), errorHandlerService: getIt(), navigationService: getIt()),
);
getIt.registerLazySingleton<PrescriptionsViewModel>(() => PrescriptionsViewModel(prescriptionsRepo: getIt(), errorHandlerService: getIt(), navServices: getIt()));
getIt.registerLazySingleton<PrescriptionsViewModel>(
() => PrescriptionsViewModel(prescriptionsRepo: getIt(), errorHandlerService: getIt(), navServices: getIt()));
getIt.registerLazySingleton<InsuranceViewModel>(() => InsuranceViewModel(insuranceRepo: getIt(), errorHandlerService: getIt()));
@ -201,10 +209,19 @@ class AppDependencies {
() => TodoSectionViewModel(todoSectionRepo: getIt(), errorHandlerService: getIt()),
);
getIt.registerLazySingleton<SymptomsCheckerViewModel>(() => SymptomsCheckerViewModel(errorHandlerService: getIt(), symptomsCheckerRepo: getIt()));
getIt.registerLazySingleton<HmgServicesViewModel>(
() => HmgServicesViewModel(bookAppointmentsRepo: getIt(), hmgServicesRepo: getIt(), errorHandlerService: getIt(), navigationService: getIt()),
);
getIt.registerLazySingleton<BloodDonationViewModel>(
() => BloodDonationViewModel(bloodDonationRepo: getIt(), errorHandlerService: getIt(), navigationService: getIt(), dialogService: getIt(), appState: getIt()),
);
getIt.registerLazySingleton<HealthProvider>(
() => HealthProvider(),
);
// Screen-specific VMs Factory
// getIt.registerFactory<BookAppointmentsViewModel>(
// () => BookAppointmentsViewModel(

@ -32,6 +32,8 @@ enum AppEnvironmentTypeEnum { dev, uat, preProd, qa, staging, prod }
enum FamilyFileEnum { active, inactive, blocked, deleted, pending, rejected }
enum BodyView { front, back }
enum HealthCalculatorEnum { general, women }
enum HealthCalculatorsTypeEnum { bmi, calories, bmr, idealBodyWeight, bodyFat, crabsProteinFat, ovulation, deliveryDueDate }
@ -283,3 +285,7 @@ extension ServiceTypeEnumExt on ServiceTypeEnum {
}
}
}
// SymptomsChecker
enum PossibleConditionsSeverityEnum { seekMedicalAdvice, monitorOnly, emergency }

@ -25,7 +25,13 @@ class CalenderUtilsNew {
});
}
FutureOr<bool> createOrUpdateEvent({required String title, required String description, required String location, DateTime? scheduleDateTime, String? eventId, int? reminderMinutes}) async {
FutureOr<bool> createOrUpdateEvent(
{required String title,
required String description,
required String location,
DateTime? scheduleDateTime,
String? eventId,
int? reminderMinutes}) async {
if (writableCalender.isEmpty) {
await getCalenders();
}
@ -38,12 +44,13 @@ class CalenderUtilsNew {
// String eventId = await getEventIdIfEventExist(title!.split("#").last);
// if (eventId.isEmpty) {
eventResult = await DeviceCalendar.instance.createEvent(
calendarId: writableCalendars!.id,
title: title,
description: description,
startDate: scheduleDateTime!,
endDate: scheduleDateTime!.add(Duration(minutes: 30)),
// reminderMinutes: reminderMinutes
calendarId: writableCalendars!.id,
title: title,
description: description,
startDate: scheduleDateTime!,
endDate: scheduleDateTime!.add(Duration(minutes: 30)),
// reminderMinutes: reminderMinutes, // TODO : NEED TO CONFIRM THIS FROM TAHA
);
return eventResult.isNotEmpty;
// }

@ -8,7 +8,6 @@ import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:crypto/crypto.dart' as crypto;
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:google_api_availability/google_api_availability.dart';
@ -723,10 +722,10 @@ class Utils {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Image.asset(AppAssets.mada, width: 25.h, height: 25.h),
Image.asset(AppAssets.tamara_en, width: 25.h, height: 25.h),
Image.asset(AppAssets.tamaraEng, width: 25.h, height: 25.h),
Image.asset(AppAssets.visa, width: 25.h, height: 25.h),
Image.asset(AppAssets.Mastercard, width: 25.h, height: 25.h),
Image.asset(AppAssets.apple_pay, width: 25.h, height: 25.h),
Image.asset(AppAssets.mastercard, width: 25.h, height: 25.h),
Image.asset(AppAssets.applePay, width: 25.h, height: 25.h),
],
);
}
@ -871,8 +870,59 @@ class Utils {
}
return isHavePrivilege;
}
static void openWebView({ required String url}) {
static void openWebView({required String url}) {
Uri uri = Uri.parse(url);
launchUrl(uri, mode: LaunchMode.inAppBrowserView);
}
static Color getCardBorderColor(int currentQueueStatus) {
switch (currentQueueStatus) {
case 0:
return AppColors.ratingColorYellow;
case 1:
return AppColors.primaryRedColor;
case 2:
return AppColors.successColor;
}
return AppColors.textColor;
}
static Color getCardButtonColor(int currentQueueStatus) {
switch (currentQueueStatus) {
case 0:
return AppColors.textColor.withValues(alpha: 0.08);
case 1:
return AppColors.primaryRedColor;
case 2:
return AppColors.successColor;
}
return AppColors.primaryRedColor;
}
static Color getCardButtonTextColor(int currentQueueStatus) {
switch (currentQueueStatus) {
case 0:
return Color(0xFFA2A2A2);
case 1:
return AppColors.whiteColor;
case 2:
return AppColors.whiteColor;
}
return AppColors.primaryRedColor;
}
static String getCardButtonText(int currentQueueStatus, String roomNumber) {
switch (currentQueueStatus) {
case 0:
return "Please wait! you will be called for vital signs".needTranslation;
case 1:
return "Please visit Room $roomNumber for vital signs".needTranslation;
case 2:
return "Please visit Room $roomNumber to the Doctor".needTranslation;
}
return "";
}
}

@ -17,7 +17,7 @@ extension NavigationExtensions on BuildContext {
Navigator.of(this).pop();
}
void navigateTo(Widget page) {
void pushNavigateTo(Widget page) {
Navigator.push(this, MaterialPageRoute(builder: (context) => page));
}

@ -262,10 +262,10 @@ class AuthenticationRepoImp implements AuthenticationRepo {
newRequest.forRegisteration = newRequest.isRegister ?? false;
newRequest.isRegister = false;
//silent login case removed token and login token
if(newRequest.logInTokenID.isEmpty && newRequest.isSilentLogin == true) {
newRequest.logInTokenID = null;
newRequest.deviceToken = null;
}
// if(newRequest.logInTokenID.isEmpty && newRequest.isSilentLogin == true) {
// newRequest.logInTokenID = null;
// newRequest.deviceToken = null;
// }
}

@ -586,6 +586,7 @@ class AuthenticationViewModel extends ChangeNotifier {
activation.list!.first.bloodGroup = activation.patientBlodType;
_appState.setAuthenticatedUser(activation.list!.first);
_appState.setPrivilegeModelList(activation.list!.first.listPrivilege!);
_appState.setUserBloodGroup = activation.patientBlodType ?? "N/A";
}
// _appState.setUserBloodGroup = (activation.patientBlodType ?? "");
_appState.setAppAuthToken = activation.authenticationTokenId;

@ -0,0 +1,95 @@
import 'package:dartz/dartz.dart';
import 'package:hmg_patient_app_new/core/api/api_client.dart';
import 'package:hmg_patient_app_new/core/api_consts.dart';
import 'package:hmg_patient_app_new/core/common_models/generic_api_model.dart';
import 'package:hmg_patient_app_new/core/exceptions/api_failure.dart';
import 'package:hmg_patient_app_new/features/blood_donation/models/blood_group_response_model.dart';
import 'package:hmg_patient_app_new/features/blood_donation/models/cities_model.dart';
import 'package:hmg_patient_app_new/services/logger_service.dart';
abstract class BloodDonationRepo {
Future<Either<Failure, GenericApiModel<List<CitiesModel>>>> getAllCities();
Future<Either<Failure, GenericApiModel<List_BloodGroupDetailsModel>>> getPatientBloodGroupDetails();
}
class BloodDonationRepoImp implements BloodDonationRepo {
final ApiClient apiClient;
final LoggerService loggerService;
BloodDonationRepoImp({required this.loggerService, required this.apiClient});
@override
Future<Either<Failure, GenericApiModel<List<CitiesModel>>>> getAllCities() async {
Map<String, dynamic> mapDevice = {};
try {
GenericApiModel<List<CitiesModel>>? apiResponse;
Failure? failure;
await apiClient.post(
GET_CITIES_REQUEST,
body: mapDevice,
onFailure: (error, statusCode, {messageStatus, failureType}) {
failure = failureType;
},
onSuccess: (response, statusCode, {messageStatus, errorMessage}) {
try {
final list = response['ListCities'];
final citiesList = list.map((item) => CitiesModel.fromJson(item as Map<String, dynamic>)).toList().cast<CitiesModel>();
apiResponse = GenericApiModel<List<CitiesModel>>(
messageStatus: messageStatus,
statusCode: statusCode,
errorMessage: null,
data: citiesList,
);
} catch (e) {
failure = DataParsingFailure(e.toString());
}
},
);
if (failure != null) return Left(failure!);
if (apiResponse == null) return Left(ServerFailure("Unknown error"));
return Right(apiResponse!);
} catch (e) {
return Left(UnknownFailure(e.toString()));
}
}
@override
Future<Either<Failure, GenericApiModel<List_BloodGroupDetailsModel>>> getPatientBloodGroupDetails() async {
Map<String, dynamic> mapDevice = {};
try {
GenericApiModel<List_BloodGroupDetailsModel>? apiResponse;
Failure? failure;
await apiClient.post(
GET_BLOOD_REQUEST,
body: mapDevice,
onFailure: (error, statusCode, {messageStatus, failureType}) {
failure = failureType;
},
onSuccess: (response, statusCode, {messageStatus, errorMessage}) {
try {
final list = response['List_BloodGroupDetails'][0];
final patientBloodGroup = List_BloodGroupDetailsModel.fromJson(list);
apiResponse = GenericApiModel<List_BloodGroupDetailsModel>(
messageStatus: messageStatus,
statusCode: statusCode,
errorMessage: null,
data: patientBloodGroup,
);
} catch (e) {
failure = DataParsingFailure(e.toString());
}
},
);
if (failure != null) return Left(failure!);
if (apiResponse == null) return Left(ServerFailure("Unknown error"));
return Right(apiResponse!);
} catch (e) {
return Left(UnknownFailure(e.toString()));
}
}
}

@ -0,0 +1,146 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:hmg_patient_app_new/core/app_state.dart';
import 'package:hmg_patient_app_new/features/blood_donation/blood_donation_repo.dart';
import 'package:hmg_patient_app_new/features/blood_donation/models/blood_group_list_model.dart';
import 'package:hmg_patient_app_new/features/blood_donation/models/blood_group_response_model.dart';
import 'package:hmg_patient_app_new/features/blood_donation/models/cities_model.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/services/dialog_service.dart';
import 'package:hmg_patient_app_new/services/error_handler_service.dart';
import 'package:hmg_patient_app_new/services/navigation_service.dart';
class BloodDonationViewModel extends ChangeNotifier {
final DialogService dialogService;
BloodDonationRepo bloodDonationRepo;
ErrorHandlerService errorHandlerService;
final NavigationService navigationService;
final AppState appState;
List<CitiesModel> citiesList = [];
List<BloodGroupListModel> bloodGroupList = [
BloodGroupListModel("O+", 0),
BloodGroupListModel("O-", 1),
BloodGroupListModel("AB+", 2),
BloodGroupListModel("AB-", 3),
BloodGroupListModel("A+", 4),
BloodGroupListModel("A-", 5),
BloodGroupListModel("B+", 6),
BloodGroupListModel("B-", 7),
];
List<BloodGroupListModel> genderList = [
BloodGroupListModel(LocaleKeys.malE.tr(), 1),
BloodGroupListModel(LocaleKeys.female.tr(), 2),
];
late CitiesModel selectedCity;
late BloodGroupListModel selectedBloodGroup;
int _selectedHospitalIndex = 0;
int _selectedBloodTypeIndex = 0;
String selectedBloodType = '';
List_BloodGroupDetailsModel patientBloodGroupDetailsModel = List_BloodGroupDetailsModel();
BloodDonationViewModel({required this.bloodDonationRepo, required this.errorHandlerService, required this.navigationService, required this.dialogService, required this.appState});
setSelectedCity(CitiesModel city) {
selectedCity = city;
notifyListeners();
}
setSelectedBloodGroup(BloodGroupListModel bloodGroup) {
selectedBloodGroup = bloodGroup;
selectedBloodType = selectedBloodGroup.name;
notifyListeners();
}
Future<void> getRegionSelectedClinics({Function(dynamic)? onSuccess, Function(String)? onError}) async {
citiesList.clear();
selectedCity = CitiesModel();
notifyListeners();
final result = await bloodDonationRepo.getAllCities();
result.fold(
(failure) async {
onError!(failure.message);
},
(apiResponse) {
if (apiResponse.messageStatus == 2) {
onError!(apiResponse.errorMessage ?? 'An unexpected error occurred');
} else if (apiResponse.messageStatus == 1) {
citiesList = apiResponse.data!;
notifyListeners();
if (onSuccess != null) {
onSuccess(apiResponse);
}
}
},
);
}
Future<void> getPatientBloodGroupDetails({Function(dynamic)? onSuccess, Function(String)? onError}) async {
final result = await bloodDonationRepo.getPatientBloodGroupDetails();
result.fold(
(failure) async {
onError!(failure.message);
},
(apiResponse) {
if (apiResponse.messageStatus == 2) {
onError!(apiResponse.errorMessage ?? 'An unexpected error occurred');
} else if (apiResponse.messageStatus == 1) {
patientBloodGroupDetailsModel = apiResponse.data!;
CitiesModel citiesModel = CitiesModel();
citiesModel.iD = getSelectedCityID();
_selectedHospitalIndex = (citiesModel.iD! - 1);
citiesModel.description = citiesList[_selectedHospitalIndex].description;
citiesModel.descriptionN = citiesList[_selectedHospitalIndex].descriptionN;
selectedCity = citiesModel;
selectedBloodType = patientBloodGroupDetailsModel.bloodGroup!;
_selectedBloodTypeIndex = getBloodIndex(selectedBloodType);
notifyListeners();
if (onSuccess != null) {
onSuccess(apiResponse);
}
}
},
);
}
int getSelectedCityID() {
int cityID = 1;
citiesList.forEach((element) {
if (element.description == patientBloodGroupDetailsModel.city) {
cityID = element.iD!;
}
});
return cityID;
}
int getBloodIndex(String type) {
switch (type) {
case "O+":
return 0;
case "O-":
return 1;
case "AB+":
return 2;
case "AB-":
return 3;
case "A+":
return 4;
case "A-":
return 5;
case "B+":
return 6;
case "B-":
return 7;
default:
return 0;
}
}
}

@ -0,0 +1,6 @@
class BloodGroupListModel {
String name;
int value;
BloodGroupListModel(this.name, this.value);
}

@ -0,0 +1,61 @@
class List_BloodGroupDetailsModel {
int? iD;
int? patientID;
int? patientType;
bool? patientOutSA;
int? zipCode;
String? cellNumber;
String? cityCode;
String? city;
int? gender;
String? bloodGroup;
String? nationalID;
bool? isActive;
List_BloodGroupDetailsModel({
this.iD,
this.patientID,
this.patientType,
this.patientOutSA,
this.zipCode,
this.cellNumber,
this.cityCode,
this.city,
this.gender,
this.bloodGroup,
this.nationalID,
this.isActive,
});
List_BloodGroupDetailsModel.fromJson(Map<String, dynamic> json) {
iD = json['ID'];
patientID = json['PatientID'];
patientType = json['PatientType'];
patientOutSA = json['PatientOutSA'];
zipCode = json['ZipCode'];
cellNumber = json['CellNumber'];
cityCode = json['CityCode'];
city = json['City'];
gender = json['Gender'];
bloodGroup = json['BloodGroup'];
nationalID = json['NationalID'];
isActive = json['IsActive'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['ID'] = this.iD;
data['PatientID'] = this.patientID;
data['PatientType'] = this.patientType;
data['PatientOutSA'] = this.patientOutSA;
data['ZipCode'] = this.zipCode;
data['CellNumber'] = this.cellNumber;
data['CityCode'] = this.cityCode;
data['City'] = this.city;
data['Gender'] = this.gender;
data['BloodGroup'] = this.bloodGroup;
data['NationalID'] = this.nationalID;
data['IsActive'] = this.isActive;
return data;
}
}

@ -0,0 +1,21 @@
class CitiesModel {
int? iD;
String? description;
String? descriptionN;
CitiesModel({this.iD, this.description, this.descriptionN});
CitiesModel.fromJson(Map<String, dynamic> json) {
iD = json['ID'];
description = json['Description'];
descriptionN = json['DescriptionN'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['ID'] = this.iD;
data['Description'] = this.description;
data['DescriptionN'] = this.descriptionN;
return data;
}
}

@ -497,8 +497,8 @@ class BookAppointmentsViewModel extends ChangeNotifier {
}
initialSlotDuration = apiResponse.data["InitialSlotDuration"];
freeSlotsResponse = apiResponse.data['FreeTimeSlots'];
// isWaitingAppointmentAvailable = apiResponse.data["IsAllowToBookWaitingAppointment"];
isWaitingAppointmentAvailable = true;
isWaitingAppointmentAvailable = apiResponse.data["IsAllowToBookWaitingAppointment"];
// isWaitingAppointmentAvailable = true;
freeSlotsResponse.forEach((element) {
// date = (isLiveCareSchedule != null && isLiveCareSchedule)

@ -0,0 +1,37 @@
class GetAllergiesResponseModel {
int? patientID;
int? allergyDiseaseType;
int? allergyDiseaseID;
String? description;
String? descriptionN;
String? remarks;
GetAllergiesResponseModel({
this.patientID,
this.allergyDiseaseType,
this.allergyDiseaseID,
this.description,
this.descriptionN,
this.remarks,
});
GetAllergiesResponseModel.fromJson(Map<String, dynamic> json) {
patientID = json['PatientID'];
allergyDiseaseType = json['AllergyDiseaseType'];
allergyDiseaseID = json['AllergyDiseaseID'];
description = json['Description'];
descriptionN = json['DescriptionN'];
remarks = json['Remarks'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['PatientID'] = this.patientID;
data['AllergyDiseaseType'] = this.allergyDiseaseType;
data['AllergyDiseaseID'] = this.allergyDiseaseID;
data['Description'] = this.description;
data['DescriptionN'] = this.descriptionN;
data['Remarks'] = this.remarks;
return data;
}
}

@ -3,12 +3,10 @@ import 'dart:async';
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart' as GMSMapServices;
import 'package:hmg_patient_app_new/core/app_assets.dart';
import 'package:hmg_patient_app_new/core/app_state.dart';
import 'package:hmg_patient_app_new/core/dependencies.dart';
import 'package:hmg_patient_app_new/core/location_util.dart';
import 'package:hmg_patient_app_new/core/utils/date_util.dart';
import 'package:hmg_patient_app_new/core/utils/doctor_response_mapper.dart';
import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
import 'package:hmg_patient_app_new/core/utils/utils.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
@ -16,29 +14,24 @@ import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart';
import 'package:hmg_patient_app_new/features/authentication/models/resp_models/authenticated_user_resp_model.dart';
import 'package:hmg_patient_app_new/features/emergency_services/emergency_services_repo.dart';
import 'package:hmg_patient_app_new/features/emergency_services/models/OrderDisplay.dart';
import 'package:hmg_patient_app_new/features/emergency_services/models/request_model/RRTRequestModel.dart';
import 'package:hmg_patient_app_new/features/emergency_services/models/resp_model/EROnlineCheckInPaymentDetailsResponse.dart';
import 'package:hmg_patient_app_new/features/emergency_services/models/resp_model/RRTServiceData.dart';
import 'package:hmg_patient_app_new/features/location/location_view_model.dart';
import 'package:hmg_patient_app_new/features/my_appointments/models/facility_selection.dart';
import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/hospital_model.dart';
import 'package:hmg_patient_app_new/features/emergency_services/models/AmbulanceCallingPlace.dart';
import 'package:hmg_patient_app_new/features/emergency_services/models/OrderDisplay.dart';
import 'package:hmg_patient_app_new/features/emergency_services/models/request_model/PatientER_RC.dart';
import 'package:hmg_patient_app_new/features/emergency_services/models/request_model/RRTRequestModel.dart';
import 'package:hmg_patient_app_new/features/emergency_services/models/resp_model/AmbulanceRequestOrdersModel.dart';
import 'package:hmg_patient_app_new/features/emergency_services/models/resp_model/EROnlineCheckInPaymentDetailsResponse.dart';
import 'package:hmg_patient_app_new/features/emergency_services/models/resp_model/PatientERTransportationMethod.dart'
show PatientERTransportationMethod;
import 'package:hmg_patient_app_new/features/emergency_services/models/resp_model/ProjectAvgERWaitingTime.dart';
import 'package:hmg_patient_app_new/features/emergency_services/models/resp_model/RRTServiceData.dart';
import 'package:hmg_patient_app_new/features/emergency_services/models/resp_model/rrt_procedures_response_model.dart';
import 'package:hmg_patient_app_new/features/location/PlaceDetails.dart' show PlaceDetails;
import 'package:hmg_patient_app_new/features/location/PlacePrediction.dart';
import 'package:hmg_patient_app_new/features/location/location_view_model.dart';
import 'package:hmg_patient_app_new/features/my_appointments/models/facility_selection.dart';
import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/hospital_model.dart';
import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/patient_appointment_history_response_model.dart';
import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_repo.dart';
import 'package:hmg_patient_app_new/presentation/authentication/login.dart';
import 'package:hmg_patient_app_new/presentation/emergency_services/RRT/rrt_map_screen.dart';
import 'package:hmg_patient_app_new/presentation/emergency_services/RRT/rrt_request_type_select.dart';
import 'package:hmg_patient_app_new/presentation/emergency_services/RRT/terms_and_condition.dart';
import 'package:hmg_patient_app_new/presentation/emergency_services/call_ambulance/call_ambulance_page.dart';
@ -85,7 +78,6 @@ class EmergencyServicesViewModel extends ChangeNotifier {
List<ProjectAvgERWaitingTime> nearestERList = [];
List<ProjectAvgERWaitingTime> nearestERFilteredList = [];
List<HospitalsModel>? hospitalList;
List<HospitalsModel>? hmgHospitalList;
List<HospitalsModel>? hmcHospitalList;
@ -104,7 +96,6 @@ class EmergencyServicesViewModel extends ChangeNotifier {
AmbulanceCallingPlace callingPlace = AmbulanceCallingPlace.FROM_HOSPITAL;
AmbulanceDirection ambulanceDirection = AmbulanceDirection.ONE_WAY;
bool patientHasAdvanceERBalance = false;
bool isERBookAppointment = false;
late EROnlineCheckInPaymentDetailsResponse erOnlineCheckInPaymentDetailsResponse;
@ -118,14 +109,11 @@ class EmergencyServicesViewModel extends ChangeNotifier {
RRTServiceData? ordersRRT;
TextEditingController rrtNotes = TextEditingController();
List allOrders = [];
List orderDisplayList = [];
bool historyLoading= false;
bool historyLoading = false;
OrderDislpay currentlyDisplayedOrder = OrderDislpay.ALL;
setSelectedRRTProcedure(RRTProceduresResponseModel procedure) {
selectedRRTProcedure = procedure;
notifyListeners();
@ -161,7 +149,6 @@ class EmergencyServicesViewModel extends ChangeNotifier {
String? termsAndConditions;
Future<void> getRRTProcedures({Function(dynamic)? onSuccess, Function(String)? onError}) async {
print("the app state is ${appState.isAuthenticated}");
if (!appState.isAuthenticated) {
dialogService.showErrorBottomSheet(
@ -797,8 +784,8 @@ class EmergencyServicesViewModel extends ChangeNotifier {
historyLoading = false;
ambulanceOrders = apiResponse.data;
allOrders.clear();
allOrders.addAll(ambulanceOrders??[]);
allOrders.addAll(ordersRRT?.completedOrders??[]);
allOrders.addAll(ambulanceOrders ?? []);
allOrders.addAll(ordersRRT?.completedOrders ?? []);
changeOrderDisplayItems(OrderDislpay.ALL);
notifyListeners();
},
@ -889,8 +876,7 @@ class EmergencyServicesViewModel extends ChangeNotifier {
});
}
RRTRequestModel createRRTRequest(GeocodeResult? result, PlaceDetails? place, PlacePrediction? placePrediction){
RRTRequestModel createRRTRequest(GeocodeResult? result, PlaceDetails? place, PlacePrediction? placePrediction) {
AuthenticatedUser? user = appState.getAuthenticatedUser();
if (user == null) throw Exception("Authentication Required to Continue");
@ -898,7 +884,6 @@ class EmergencyServicesViewModel extends ChangeNotifier {
Procedures procedures = new Procedures();
rrtRequestModel.procedures = [];
procedures.serviceID = selectedRRTProcedure?.procedureID;
rrtRequestModel.latitude = ((result?.geometry.location.lat) ?? place?.lat);
@ -920,7 +905,7 @@ class EmergencyServicesViewModel extends ChangeNotifier {
notifyListeners();
}
FutureOr<void> submitRRTRequest(GeocodeResult? result, PlaceDetails? place, PlacePrediction? placePrediction) async {
FutureOr<void> submitRRTRequest(GeocodeResult? result, PlaceDetails? place, PlacePrediction? placePrediction) async {
RRTRequestModel request = createRRTRequest(result, place, placePrediction);
navServices.push(CustomPageRoute(page: RequestingServicesPage()));
@ -929,9 +914,9 @@ class EmergencyServicesViewModel extends ChangeNotifier {
navServices.pushAndRemoveUntil(
CustomPageRoute(
page: TrackingScreen(
isRRTOrder: true,
state: OrderTrackingState.failed,
)),
isRRTOrder: true,
state: OrderTrackingState.failed,
)),
ModalRoute.withName("/EmergencyServicesPage"));
}, (success) {
getRRTOrders(shouldNavigateToTrackingScreen: true);
@ -939,7 +924,7 @@ class EmergencyServicesViewModel extends ChangeNotifier {
}
Future<void> getRRTOrders({bool shouldNavigateToTrackingScreen = false, bool showLoader = false}) async {
if(shouldNavigateToTrackingScreen == false && showLoader ) {
if (shouldNavigateToTrackingScreen == false && showLoader) {
LoaderBottomSheet.showLoader(loadingText: "Fetching Orders");
}
historyLoading = true;
@ -947,39 +932,40 @@ class EmergencyServicesViewModel extends ChangeNotifier {
int? id = appState.getAuthenticatedUser()?.patientId;
var response = await emergencyServicesRepo.getRRTOrders(id: id);
if(shouldNavigateToTrackingScreen == false && showLoader ) {
LoaderBottomSheet.hideLoader();}
if (shouldNavigateToTrackingScreen == false && showLoader) {
LoaderBottomSheet.hideLoader();
}
response.fold(
(failure) async {
historyLoading = false;
notifyListeners();
(failure) async {
historyLoading = false;
notifyListeners();
if (shouldNavigateToTrackingScreen) {
navServices.pushAndRemoveUntil(CustomPageRoute(page: TrackingScreen(isRRTOrder: true,state: OrderTrackingState.waitingForCall)), ModalRoute.withName("/EmergencyServicesPage"));
navServices.pushAndRemoveUntil(CustomPageRoute(page: TrackingScreen(isRRTOrder: true, state: OrderTrackingState.waitingForCall)),
ModalRoute.withName("/EmergencyServicesPage"));
}
},
(apiResponse) {
(apiResponse) {
if (shouldNavigateToTrackingScreen) {
navServices.pushAndRemoveUntil(
CustomPageRoute(
page: TrackingScreen(
state: OrderTrackingState.waitingForCall,
isRRTOrder: true,
rrtOrder: apiResponse.data?.pendingOrders.first,
)),
state: OrderTrackingState.waitingForCall,
isRRTOrder: true,
rrtOrder: apiResponse.data?.pendingOrders.first,
)),
ModalRoute.withName("/EmergencyServicesPage"));
}
historyLoading = false;
ordersRRT = apiResponse.data;
allOrders.clear();
allOrders.addAll(ambulanceOrders??[]);
allOrders.addAll(ordersRRT?.completedOrders??[]);
allOrders.addAll(ambulanceOrders ?? []);
allOrders.addAll(ordersRRT?.completedOrders ?? []);
changeOrderDisplayItems(OrderDislpay.ALL);
notifyListeners();
},
);
}
FutureOr<void> cancelRRTOrder(int? orderID, {bool shouldPop = false}) async {
dialogService.showCommonBottomSheetWithoutH(
message: "Do you want to cancel the request".needTranslation,
@ -998,52 +984,54 @@ class EmergencyServicesViewModel extends ChangeNotifier {
});
}
void changeOrderDisplayItems(OrderDislpay currentlyDisplayedOrder){
void changeOrderDisplayItems(OrderDislpay currentlyDisplayedOrder) {
this.currentlyDisplayedOrder = currentlyDisplayedOrder;
switch(currentlyDisplayedOrder){
switch (currentlyDisplayedOrder) {
case OrderDislpay.ALL:
orderDisplayList = allOrders;
break;
orderDisplayList = allOrders;
break;
case OrderDislpay.RRT:
orderDisplayList = ordersRRT?.completedOrders ?? [];
break;
case OrderDislpay.AMBULANCE:
orderDisplayList = ambulanceOrders??[];
orderDisplayList = ambulanceOrders ?? [];
break;
}
notifyListeners();
}
void openRRT(){
void openRRT() {
print("the app state is ${appState.isAuthenticated}");
if (appState.isAuthenticated) {
if(agreedToTermsAndCondition == false){
dialogService.showErrorBottomSheet(message: "You Need To Agree To Terms And Conditions".needTranslation, onOkPressed: (){
if(navServices.context == null ) return;
showCommonBottomSheetWithoutHeight(
navServices.context!,
padding: EdgeInsets.only(top: 24.h),
titleWidget: Transform.flip(
flipX: isArabic,
child: Utils.buildSvgWithAssets(
icon: AppAssets.arrow_back,
iconColor: Color(0xff2B353E),
fit: BoxFit.contain,
),
).onPress(() {
navServices.pop();
}),
// title: "Rapid Response Team (RRT)".needTranslation,
child: RrtRequestTypeSelect(),
isFullScreen: false,
isCloseButtonVisible: true,
hasBottomPadding: false,
backgroundColor: AppColors.bottomSheetBgColor,
callBackFunc: () {
navServices.pop();
},
);
});
if (agreedToTermsAndCondition == false) {
dialogService.showErrorBottomSheet(
message: "You Need To Agree To Terms And Conditions".needTranslation,
onOkPressed: () {
if (navServices.context == null) return;
showCommonBottomSheetWithoutHeight(
navServices.context!,
padding: EdgeInsets.only(top: 24.h),
titleWidget: Transform.flip(
flipX: isArabic,
child: Utils.buildSvgWithAssets(
icon: AppAssets.arrow_back,
iconColor: Color(0xff2B353E),
fit: BoxFit.contain,
),
).onPress(() {
navServices.pop();
}),
// title: "Rapid Response Team (RRT)".needTranslation,
child: RrtRequestTypeSelect(),
isFullScreen: false,
isCloseButtonVisible: true,
hasBottomPadding: false,
backgroundColor: AppColors.bottomSheetBgColor,
callBackFunc: () {
navServices.pop();
},
);
});
return;
}
placeValueInController();
@ -1051,7 +1039,7 @@ class EmergencyServicesViewModel extends ChangeNotifier {
isShowConfirmDialog: true,
onSuccess: (position) async {
updateBottomSheetState(BottomSheetType.FIXED);
bool result = await navServices.push(
bool result = await navServices.push(
CustomPageRoute(
page: MapUtilityScreen(
confirmButtonString: "Submit Request".needTranslation,
@ -1061,16 +1049,15 @@ class EmergencyServicesViewModel extends ChangeNotifier {
),
direction: AxisDirection.down),
);
if(result){
LocationViewModel locationViewModel = getIt.get<LocationViewModel>();
GeocodeResponse? response = locationViewModel.geocodeResponse;
PlaceDetails? placeDetails = locationViewModel.placeDetails;
PlacePrediction? placePrediction = locationViewModel.selectedPrediction;
submitRRTRequest(response?.results.first, placeDetails, placePrediction);
}
if (result) {
LocationViewModel locationViewModel = getIt.get<LocationViewModel>();
GeocodeResponse? response = locationViewModel.geocodeResponse;
PlaceDetails? placeDetails = locationViewModel.placeDetails;
PlacePrediction? placePrediction = locationViewModel.selectedPrediction;
submitRRTRequest(response?.results.first, placeDetails, placePrediction);
}
});
} else{
} else {
dialogService.showErrorBottomSheet(
message: "You Need To Login First To Continue".needTranslation,
onOkPressed: () {
@ -1079,24 +1066,22 @@ class EmergencyServicesViewModel extends ChangeNotifier {
});
}
}
clearRRTData(){
clearRRTData() {
selectedRRTProcedure = null;
}
FutureOr<void> getTermsAndConditions() async {
LoaderBottomSheet.showLoader(loadingText: "Fetching Terms And Conditions".needTranslation);
var response = await emergencyServicesRepo.getTermsAndCondition();
LoaderBottomSheet.hideLoader();
response.fold((failure)=>errorHandlerService.handleError(failure: failure),(success){
response.fold((failure) => errorHandlerService.handleError(failure: failure), (success) {
termsAndConditions = success.data;
print("the response terms are $termsAndConditions");
notifyListeners();
navServices.push(
CustomPageRoute(
page: TermsAndCondition(termsAndCondition:success.data??""), direction: AxisDirection.down),
CustomPageRoute(page: TermsAndCondition(termsAndCondition: success.data ?? ""), direction: AxisDirection.down),
);
});
}
}

@ -9,7 +9,6 @@ class HmgServicesComponentModel {
bool isLogin;
bool isLocked;
Color bgColor;
Color textColor;
String? route;
Function? onTap;
@ -22,7 +21,6 @@ class HmgServicesComponentModel {
this.isLogin, {
this.isLocked = false,
this.bgColor = Colors.white,
this.textColor = Colors.black,
this.iconColor = Colors.white,
this.route,
this.onTap

@ -1,3 +1,4 @@
import 'dart:collection';
import 'dart:core';
import 'dart:math';
@ -39,6 +40,13 @@ class LabViewModel extends ChangeNotifier {
String labSpecialResult = "";
List<String> labOrderTests = [];
String patientLabResultReportPDFBase64 = "";
String? flagForHighReferenceRange;
double highRefrenceValue = double.negativeInfinity;
double lowRefenceValue = double.infinity;
double highTransformedReferenceValue = double.negativeInfinity;
double lowTransformedReferenceValue = double.infinity;
String? flagForLowReferenceRange;
PatientLabOrdersResponseModel? currentlySelectedPatientOrder;
@ -67,8 +75,11 @@ class LabViewModel extends ChangeNotifier {
List<String> get labSuggestions => _labSuggestionsList;
Set<TestDetails> uniqueTests = {};
List<TestDetails> uniqueTestsList = [];
List<String> indexedCharacterForUniqueTest = [];
double maxY = 0.0;
double minY = double.infinity;
double maxX = double.infinity;
LabViewModel(
@ -195,6 +206,19 @@ class LabViewModel extends ChangeNotifier {
createdOn: item.createdOn,
model: item))
};
var sortedResult = SplayTreeSet<TestDetails>.from(uniqueTests, (a, b) => a.description?[0].toUpperCase().compareTo(b.description?[0] ?? "") ?? -1);
uniqueTestsList = uniqueTests.toList();
uniqueTestsList.sort((a, b) {
return a.description!.toLowerCase().compareTo(b.description!.toLowerCase());
});
indexedCharacterForUniqueTest.clear();
for (var test in uniqueTestsList) {
String label = test.description ?? "";
if (label.isEmpty) continue;
if (indexedCharacterForUniqueTest.contains(label[0].toLowerCase())) continue;
indexedCharacterForUniqueTest.add(label[0].toLowerCase());
}
for (var element in uniqueTests) {
labOrderTests.add(element.description ?? "");
}
@ -294,7 +318,8 @@ class LabViewModel extends ChangeNotifier {
mainLabResults.clear();
filteredGraphValues.clear();
maxY = double.negativeInfinity;
minY = double.infinity;
maxX = double.infinity;
final result = await labRepo.getPatientLabResults(
laborder,
Utils.isVidaPlusProject(int.parse(laborder.projectID ?? "0")),
@ -313,7 +338,12 @@ class LabViewModel extends ChangeNotifier {
var recentThree = sort(sortedResponse);
mainLabResults = recentThree;
double counter = 1;
double highRefrenceValue = double.negativeInfinity;
String? flagForHighReferenceRange;
double lowRefenceValue = double.infinity;
String? flagForLowReferenceRange;
recentThree.reversed.forEach((element) {
try {
var dateTime =
@ -324,6 +354,17 @@ class LabViewModel extends ChangeNotifier {
maxY = resultValue;
maxX = maxY;
}
if (resultValue < minY) {
minY = resultValue;
}
if (highRefrenceValue < double.parse(element.referenceHigh ?? "0.0")) {
highRefrenceValue = double.parse(element.referenceHigh ?? "0.0");
flagForHighReferenceRange = element.calculatedResultFlag;
}
if (lowRefenceValue > double.parse(element.referenceLow ?? "0.0")) {
lowRefenceValue = double.parse(element.referenceLow ?? "0.0");
flagForLowReferenceRange = element.calculatedResultFlag;
}
filteredGraphValues.add(DataPoint(
value: transformedValue,
@ -335,9 +376,25 @@ class LabViewModel extends ChangeNotifier {
referenceValue: element.calculatedResultFlag ?? "",
));
counter++;
} catch (e) {}
});
if (flagForLowReferenceRange == null && flagForHighReferenceRange == null) {
highRefrenceValue = maxY;
lowRefenceValue = minY;
}
this.flagForHighReferenceRange = flagForHighReferenceRange;
this.flagForLowReferenceRange = flagForLowReferenceRange;
highTransformedReferenceValue = double.parse(transformValueInRange(highRefrenceValue, flagForHighReferenceRange ?? "").toStringAsFixed(1));
lowTransformedReferenceValue = double.parse(transformValueInRange(lowRefenceValue, flagForLowReferenceRange ?? "").toStringAsFixed(1));
this.highRefrenceValue = double.parse(highRefrenceValue.toStringAsFixed(1));
this.lowRefenceValue = double.parse(lowRefenceValue.toStringAsFixed(1));
if(maxY< highRefrenceValue) {
maxY = highRefrenceValue;
}
maxY += 25;
minY -= 25;
LabResult recentResult = recentThree.first;
recentResult.uOM = unitOfMeasure;
checkIfGraphShouldBeDisplayed(recentResult);

@ -250,4 +250,7 @@ class TestDetails {
data['CreatedOn'] = this.createdOn;
return data;
}
@override
String toString() { return description??"";}
}

@ -5,6 +5,7 @@ import 'package:hmg_patient_app_new/core/common_models/generic_api_model.dart';
import 'package:hmg_patient_app_new/core/exceptions/api_failure.dart';
import 'package:hmg_patient_app_new/core/utils/date_util.dart';
import 'package:hmg_patient_app_new/core/utils/utils.dart';
import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/get_allergies_response_model.dart';
import 'package:hmg_patient_app_new/features/medical_file/models/patient_medical_response_model.dart';
import 'package:hmg_patient_app_new/features/medical_file/models/patient_sickleave_response_model.dart';
import 'package:hmg_patient_app_new/features/medical_file/models/patient_vaccine_response_model.dart';
@ -38,6 +39,8 @@ abstract class MedicalFileRepo {
Future<Either<Failure, GenericApiModel<dynamic>>> removeFamilyFile({required int? id});
Future<Either<Failure, GenericApiModel<dynamic>>> acceptRejectFamilyFile({required int? id, required int? status});
Future<Either<Failure, GenericApiModel<List<GetAllergiesResponseModel>>>> getPatientAllergiesList({Function(dynamic)? onSuccess, Function(String)? onError});
}
class MedicalFileRepoImp implements MedicalFileRepo {
@ -549,4 +552,42 @@ class MedicalFileRepoImp implements MedicalFileRepo {
return Left(UnknownFailure(e.toString()));
}
}
@override
Future<Either<Failure, GenericApiModel<List<GetAllergiesResponseModel>>>> getPatientAllergiesList({Function(dynamic)? onSuccess, Function(String)? onError}) async {
Map<String, dynamic> mapDevice = {"isDentalAllowedBackend": false, "OutSA": 0};
try {
GenericApiModel<List<GetAllergiesResponseModel>>? apiResponse;
Failure? failure;
await apiClient.post(
GET_PATIENT_ALLERGIES,
body: mapDevice,
onFailure: (error, statusCode, {messageStatus, failureType}) {
failure = failureType;
},
onSuccess: (response, statusCode, {messageStatus, errorMessage}) {
try {
final list = response['Patient_Allergies'];
final vaccinesList = list.map((item) => GetAllergiesResponseModel.fromJson(item as Map<String, dynamic>)).toList().cast<GetAllergiesResponseModel>();
apiResponse = GenericApiModel<List<GetAllergiesResponseModel>>(
messageStatus: messageStatus,
statusCode: statusCode,
errorMessage: null,
data: vaccinesList,
);
} catch (e) {
failure = DataParsingFailure(e.toString());
}
},
);
if (failure != null) return Left(failure!);
if (apiResponse == null) return Left(ServerFailure("Unknown error"));
return Right(apiResponse!);
} catch (e) {
return Left(UnknownFailure(e.toString()));
}
}
}

@ -9,6 +9,7 @@ import 'package:hmg_patient_app_new/core/utils/request_utils.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart';
import 'package:hmg_patient_app_new/features/authentication/models/resp_models/authenticated_user_resp_model.dart';
import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/get_allergies_response_model.dart';
import 'package:hmg_patient_app_new/features/common/models/family_file_request.dart';
import 'package:hmg_patient_app_new/features/medical_file/medical_file_repo.dart';
import 'package:hmg_patient_app_new/features/medical_file/models/family_file_response_model.dart';
@ -27,6 +28,7 @@ class MedicalFileViewModel extends ChangeNotifier {
bool isPatientSickLeaveListLoading = false;
bool isPatientSickLeavePDFLoading = false;
bool isPatientMedicalReportsListLoading = false;
bool isPatientAllergiesListLoading = false;
MedicalFileRepo medicalFileRepo;
ErrorHandlerService errorHandlerService;
@ -34,6 +36,8 @@ class MedicalFileViewModel extends ChangeNotifier {
List<PatientVaccineResponseModel> patientVaccineList = [];
List<PatientSickLeavesResponseModel> patientSickLeaveList = [];
List<GetAllergiesResponseModel> patientAllergiesList = [];
List<PatientMedicalReportResponseModel> patientMedicalReportList = [];
List<PatientMedicalReportResponseModel> patientMedicalReportRequestedList = [];
@ -69,8 +73,10 @@ class MedicalFileViewModel extends ChangeNotifier {
initMedicalFileProvider() {
patientMedicalReportAppointmentHistoryList.clear();
patientAllergiesList.clear();
isPatientVaccineListLoading = true;
isPatientMedicalReportsListLoading = true;
isPatientAllergiesListLoading = true;
notifyListeners();
}
@ -161,6 +167,32 @@ class MedicalFileViewModel extends ChangeNotifier {
);
}
Future<void> getPatientAllergiesList({Function(dynamic)? onSuccess, Function(String)? onError}) async {
isPatientAllergiesListLoading = true;
patientAllergiesList.clear();
notifyListeners();
final result = await medicalFileRepo.getPatientAllergiesList();
result.fold(
(failure) async {
isPatientAllergiesListLoading = false;
notifyListeners();
},
(apiResponse) {
if (apiResponse.messageStatus == 2) {
// dialogService.showErrorDialog(message: apiResponse.errorMessage!, onOkPressed: () {});
} else if (apiResponse.messageStatus == 1) {
patientAllergiesList = apiResponse.data!;
isPatientAllergiesListLoading = false;
notifyListeners();
if (onSuccess != null) {
onSuccess(apiResponse);
}
}
},
);
}
Future<void> getPatientSickLeaveList({Function(dynamic)? onSuccess, Function(String)? onError}) async {
patientSickLeaveList.clear();
final result = await medicalFileRepo.getPatientSickLeavesList();

@ -0,0 +1,40 @@
class PatientQueueDetails {
int? patientID;
String? patientName;
String? queueNo;
int? callType;
String? roomNo;
String? calledOn;
bool? servingNow;
PatientQueueDetails(
{this.patientID,
this.patientName,
this.queueNo,
this.callType,
this.roomNo,
this.calledOn,
this.servingNow});
PatientQueueDetails.fromJson(Map<String, dynamic> json) {
patientID = json['patientID'];
patientName = json['patientName'];
queueNo = json['queueNo'];
callType = json['callType'];
roomNo = json['roomNo'];
calledOn = json['calledOn'];
servingNow = json['servingNow'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['patientID'] = this.patientID;
data['patientName'] = this.patientName;
data['queueNo'] = this.queueNo;
data['callType'] = this.callType;
data['roomNo'] = this.roomNo;
data['calledOn'] = this.calledOn;
data['servingNow'] = this.servingNow;
return data;
}
}

@ -13,6 +13,7 @@ import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/
import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/hospital_model.dart' show HospitalsModel;
import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/patient_appointment_history_response_model.dart';
import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/patient_appointment_share_response_model.dart';
import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/patient_queue_details_response_model.dart';
import 'package:hmg_patient_app_new/services/logger_service.dart';
abstract class MyAppointmentsRepo {
@ -58,6 +59,8 @@ abstract class MyAppointmentsRepo {
Future<Either<Failure, GenericApiModel<dynamic>>> sendAskDocCallRequest(
{required PatientAppointmentHistoryResponseModel patientAppointmentHistoryResponseModel, required String requestType, required String remarks, required String userMobileNumber});
Future<Either<Failure, GenericApiModel<List<PatientQueueDetails>>>> getPatientAppointmentQueueDetails({required int appointmentNo, required int patientID});
}
class MyAppointmentsRepoImp implements MyAppointmentsRepo {
@ -746,4 +749,35 @@ class MyAppointmentsRepoImp implements MyAppointmentsRepo {
return Left(UnknownFailure(e.toString()));
}
}
@override
Future<Either<Failure, GenericApiModel<List<PatientQueueDetails>>>> getPatientAppointmentQueueDetails({required int appointmentNo, required int patientID}) async {
Map<String, dynamic> mapDevice = {"appointmentNo": appointmentNo, "patientID": patientID, "apiKey": "EE17D21C7943485D9780223CCE55DCE5"};
try {
GenericApiModel<List<PatientQueueDetails>>? apiResponse;
Failure? failure;
await apiClient.post(ApiConsts.QLINE_URL, onFailure: (error, statusCode, {messageStatus, failureType}) {
failure = failureType;
}, onSuccess: (response, statusCode, {messageStatus, errorMessage}) {
try {
final list = response['data'];
final queueList = list.map((item) => PatientQueueDetails.fromJson(item as Map<String, dynamic>)).toList().cast<PatientQueueDetails>();
apiResponse = GenericApiModel<List<PatientQueueDetails>>(
messageStatus: messageStatus,
statusCode: statusCode,
errorMessage: null,
data: queueList,
);
} catch (e) {
failure = DataParsingFailure(e.toString());
}
}, body: mapDevice, isExternal: true, isAllowAny: true);
if (failure != null) return Left(failure!);
if (apiResponse == null) return Left(ServerFailure("Unknown error"));
return Right(apiResponse!);
} catch (e) {
return Left(UnknownFailure(e.toString()));
}
}
}

@ -6,6 +6,7 @@ import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/
import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/get_tamara_installments_details_response_model.dart';
import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/patient_appointment_history_response_model.dart';
import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/patient_appointment_share_response_model.dart';
import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/patient_queue_details_response_model.dart';
import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_repo.dart';
import 'package:hmg_patient_app_new/features/my_appointments/utils/appointment_type.dart';
import 'package:hmg_patient_app_new/services/error_handler_service.dart';
@ -37,6 +38,12 @@ class MyAppointmentsViewModel extends ChangeNotifier {
DateTime? start = null;
DateTime? end = null;
bool isAppointmentQueueDetailsLoading = false;
bool isPatientHasQueueAppointment = false;
int currentQueueStatus = 0;
List<PatientQueueDetails> patientQueueDetailsList = [];
late PatientQueueDetails currentPatientQueueDetails;
List<PatientAppointmentHistoryResponseModel> patientAppointmentsHistoryList = [];
List<PatientAppointmentHistoryResponseModel> filteredAppointmentList = [];
@ -85,6 +92,12 @@ class MyAppointmentsViewModel extends ChangeNotifier {
isTamaraDetailsLoading = true;
isAppointmentPatientShareLoading = true;
isEyeMeasurementsAppointmentsLoading = true;
notifyListeners();
}
setCurrentQueueStatus(int currentQueueStatus) {
this.currentQueueStatus = currentQueueStatus;
notifyListeners();
}
@ -209,6 +222,10 @@ class MyAppointmentsViewModel extends ChangeNotifier {
patientAppointmentsHistoryList.addAll(patientArrivedAppointmentsHistoryList);
filteredAppointmentList.addAll(patientAppointmentsHistoryList);
if (patientArrivedAppointmentsHistoryList.isNotEmpty) {
getPatientAppointmentQueueDetails(appointmentNo: patientArrivedAppointmentsHistoryList.first.appointmentNo, patientID: patientArrivedAppointmentsHistoryList.first.patientID);
}
print('Upcoming Appointments: ${patientUpcomingAppointmentsHistoryList.length}');
print('Arrived Appointments: ${patientArrivedAppointmentsHistoryList.length}');
print('All Appointments: ${patientAppointmentsHistoryList.length}');
@ -650,6 +667,50 @@ class MyAppointmentsViewModel extends ChangeNotifier {
);
}
Future<void> getPatientAppointmentQueueDetails({required int appointmentNo, required int patientID, Function(dynamic)? onSuccess, Function(String)? onError}) async {
isAppointmentQueueDetailsLoading = true;
notifyListeners();
final result = await myAppointmentsRepo.getPatientAppointmentQueueDetails(appointmentNo: appointmentNo, patientID: patientID);
isAppointmentQueueDetailsLoading = false;
result.fold(
// (failure) async => await errorHandlerService.handleError(failure: failure),
(failure) async {
if (onError != null) {
onError(failure.message);
}
},
(apiResponse) {
if (apiResponse.messageStatus == 2) {
onError!(apiResponse.errorMessage!);
} else if (apiResponse.messageStatus == 1) {
if (apiResponse.data != null && apiResponse.data!.isNotEmpty) {
isPatientHasQueueAppointment = true;
patientQueueDetailsList = apiResponse.data!;
for (var element in patientQueueDetailsList) {
if (element.patientID == patientID) {
currentPatientQueueDetails = element;
currentQueueStatus = element.callType!;
// currentQueueStatus = 2;
break;
}
}
// patientQueueDetailsList.first.callType = 1;
patientQueueDetailsList.removeWhere((element) => element.patientID == patientID);
} else {
isPatientHasQueueAppointment = false;
}
notifyListeners();
if (onSuccess != null) {
onSuccess(apiResponse.data);
}
}
},
);
}
Future<void> sendAskDocCallRequest({
required PatientAppointmentHistoryResponseModel patientAppointmentHistoryResponseModel,
required String requestType,

@ -0,0 +1,85 @@
import 'package:flutter/foundation.dart';
import 'package:health/health.dart';
import 'package:hmg_patient_app_new/features/smartwatch_health_data/health_service.dart';
class HealthProvider with ChangeNotifier {
final HealthService _healthService = HealthService();
Map<HealthDataType, List<HealthDataPoint>> healthData = {};
bool isLoading = false;
String? error;
String selectedTimeRange = '7D';
int selectedTabIndex = 0;
void onTabChanged(int index) {
selectedTabIndex = index;
notifyListeners();
}
Future<void> fetchHealthData() async {
isLoading = true;
error = null;
notifyListeners();
healthData.clear();
try {
final authorized = await _healthService.requestAuthorization();
if (!authorized) {
error = 'Health data access not authorized';
isLoading = false;
notifyListeners();
return;
}
final startTime = _getStartDate();
final endTime = DateTime.now();
healthData = await _healthService.getAllHealthData(startTime, endTime);
isLoading = false;
notifyListeners();
} catch (e) {
error = 'Error fetching health data: $e';
isLoading = false;
notifyListeners();
}
}
Future<void> refreshMetric(HealthDataType type) async {
try {
final startTime = _getStartDate();
final endTime = DateTime.now();
final data = await _healthService.getSpecificHealthData(
type,
startTime,
endTime,
);
healthData[type] = data;
notifyListeners();
} catch (e) {
print('Error refreshing metric $type: $e');
}
}
void updateTimeRange(String range) {
selectedTimeRange = range;
fetchHealthData();
}
DateTime _getStartDate() {
switch (selectedTimeRange) {
case '1D':
return DateTime.now().subtract(const Duration(days: 1));
case '7D':
return DateTime.now().subtract(const Duration(days: 7));
case '1M':
return DateTime.now().subtract(const Duration(days: 30));
case '3M':
return DateTime.now().subtract(const Duration(days: 90));
case '1Y':
return DateTime.now().subtract(const Duration(days: 365));
default:
return DateTime.now().subtract(const Duration(days: 7));
}
}
}

@ -0,0 +1,166 @@
import 'dart:io';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/cupertino.dart';
import 'package:health/health.dart';
import 'package:permission_handler/permission_handler.dart';
import 'health_utils.dart';
class HealthService {
static final HealthService _instance = HealthService._internal();
factory HealthService() => _instance;
HealthService._internal();
final Health health = Health();
final List<HealthDataType> _healthMetrics = [
HealthDataType.HEART_RATE,
// HealthDataType.STEPS,
// HealthDataType.BLOOD_OXYGEN,
// HealthDataType.BLOOD_PRESSURE_SYSTOLIC,
// HealthDataType.BLOOD_PRESSURE_DIASTOLIC,
// HealthDataType.BODY_TEMPERATURE,
// HealthDataType.DISTANCE_WALKING_RUNNING,
// HealthDataType.ACTIVE_ENERGY_BURNED,
];
final List<HealthDataType> _healthMetricsAndroid = [
HealthDataType.HEART_RATE,
HealthDataType.STEPS,
HealthDataType.BLOOD_OXYGEN,
// HealthDataType.BLOOD_PRESSURE_SYSTOLIC,
// HealthDataType.BLOOD_PRESSURE_DIASTOLIC,
// HealthDataType.BODY_TEMPERATURE,
HealthDataType.DISTANCE_DELTA,
HealthDataType.ACTIVE_ENERGY_BURNED,
HealthDataType.BASAL_ENERGY_BURNED,
HealthDataType.TOTAL_CALORIES_BURNED
];
final List<HealthDataType> _healthPermissions = [
HealthDataType.HEART_RATE,
HealthDataType.STEPS,
HealthDataType.BLOOD_OXYGEN,
// HealthDataType.BLOOD_PRESSURE_SYSTOLIC,
// HealthDataType.BLOOD_PRESSURE_DIASTOLIC,
// HealthDataType.BODY_TEMPERATURE,
Platform.isAndroid ? HealthDataType.DISTANCE_DELTA : HealthDataType.DISTANCE_WALKING_RUNNING,
HealthDataType.ACTIVE_ENERGY_BURNED,
HealthDataType.BASAL_ENERGY_BURNED,
HealthDataType.TOTAL_CALORIES_BURNED
];
final List<HealthDataType> _healthMetricsCumulative = [
HealthDataType.BLOOD_OXYGEN,
HealthDataType.STEPS,
Platform.isAndroid ? HealthDataType.DISTANCE_DELTA : HealthDataType.DISTANCE_WALKING_RUNNING,
HealthDataType.ACTIVE_ENERGY_BURNED,
HealthDataType.BASAL_ENERGY_BURNED,
HealthDataType.TOTAL_CALORIES_BURNED
];
Future<bool> requestAuthorization() async {
try {
final types = (Platform.isAndroid) ? dataTypesAndroid : _healthPermissions;
final granted = await health.requestAuthorization(types);
await Permission.activityRecognition.request();
await Permission.location.request();
// request access to read historic data
await Health().requestHealthDataHistoryAuthorization();
// await authorize();
return granted;
} catch (e) {
print('Authorization error: $e');
return false;
}
}
Future<Map<HealthDataType, List<HealthDataPoint>>> getAllHealthData(
DateTime startTime,
DateTime endTime,
) async {
final Map<HealthDataType, List<HealthDataPoint>> allData = {};
try {
for (var type in _healthMetricsCumulative) {
try {
final data = await health.getHealthIntervalDataFromTypes(
startDate: startTime,
endDate: endTime,
types: [type],
interval: 86400,
);
if (type == HealthDataType.BLOOD_OXYGEN) {
for (var point in data) {
if (point.value is NumericHealthValue) {
final numericValue = (point.value as NumericHealthValue).numericValue;
point.value = NumericHealthValue(
numericValue: numericValue * 100,
);
}
}
}
if (type == HealthDataType.DISTANCE_WALKING_RUNNING) {
for (var point in data) {
if (point.value is NumericHealthValue) {
final numericValue = (point.value as NumericHealthValue).numericValue;
point.value = NumericHealthValue(
numericValue: numericValue / 1000,
);
}
}
}
allData[type] = data;
} catch (e) {
print('Error fetching $type: $e');
allData[type] = [];
}
}
for (var type in Platform.isIOS ? _healthMetrics : _healthMetricsAndroid) {
try {
final data = await health.getHealthDataFromTypes(
startTime: startTime,
endTime: endTime,
types: [type],
// includeManualEntry: false
// interval: 86400,
);
allData[type] = data;
} catch (e) {
print('Error fetching $type: $e');
allData[type] = [];
}
}
} catch (e) {
print('Error fetching health data: $e');
}
return allData;
}
Future<List<HealthDataPoint>> getSpecificHealthData(
HealthDataType type,
DateTime startTime,
DateTime endTime,
) async {
try {
final data = await health.getHealthDataFromTypes(
startTime: startTime,
endTime: endTime,
types: [type],
);
return data;
} catch (e) {
print('Error fetching $type: $e');
return [];
}
}
}

@ -0,0 +1,109 @@
import 'package:health/health.dart';
/// Data types available on iOS via Apple Health.
const List<HealthDataType> dataTypesIOS = [
HealthDataType.ACTIVE_ENERGY_BURNED,
HealthDataType.APPLE_STAND_TIME,
HealthDataType.APPLE_STAND_HOUR,
HealthDataType.APPLE_MOVE_TIME,
HealthDataType.AUDIOGRAM,
HealthDataType.BASAL_ENERGY_BURNED,
HealthDataType.BLOOD_GLUCOSE,
HealthDataType.BLOOD_OXYGEN,
HealthDataType.BLOOD_PRESSURE_DIASTOLIC,
HealthDataType.BLOOD_PRESSURE_SYSTOLIC,
HealthDataType.BODY_FAT_PERCENTAGE,
HealthDataType.BODY_MASS_INDEX,
HealthDataType.BODY_TEMPERATURE,
HealthDataType.DIETARY_CARBS_CONSUMED,
HealthDataType.DIETARY_CAFFEINE,
HealthDataType.DIETARY_ENERGY_CONSUMED,
HealthDataType.DIETARY_FATS_CONSUMED,
HealthDataType.DIETARY_PROTEIN_CONSUMED,
HealthDataType.ELECTRODERMAL_ACTIVITY,
HealthDataType.FORCED_EXPIRATORY_VOLUME,
HealthDataType.HEART_RATE,
HealthDataType.HEART_RATE_VARIABILITY_SDNN,
HealthDataType.HEIGHT,
HealthDataType.INSULIN_DELIVERY,
HealthDataType.RESPIRATORY_RATE,
HealthDataType.PERIPHERAL_PERFUSION_INDEX,
HealthDataType.STEPS,
HealthDataType.WAIST_CIRCUMFERENCE,
HealthDataType.WEIGHT,
HealthDataType.FLIGHTS_CLIMBED,
HealthDataType.DISTANCE_WALKING_RUNNING,
HealthDataType.WALKING_SPEED,
HealthDataType.MINDFULNESS,
HealthDataType.SLEEP_AWAKE,
HealthDataType.SLEEP_ASLEEP,
HealthDataType.SLEEP_IN_BED,
HealthDataType.SLEEP_LIGHT,
HealthDataType.SLEEP_DEEP,
HealthDataType.SLEEP_REM,
HealthDataType.WATER,
HealthDataType.EXERCISE_TIME,
HealthDataType.WORKOUT,
HealthDataType.HEADACHE_NOT_PRESENT,
HealthDataType.HEADACHE_MILD,
HealthDataType.HEADACHE_MODERATE,
HealthDataType.HEADACHE_SEVERE,
HealthDataType.HEADACHE_UNSPECIFIED,
HealthDataType.LEAN_BODY_MASS,
// note that a phone cannot write these ECG-based types - only read them
// HealthDataType.ELECTROCARDIOGRAM,
// HealthDataType.HIGH_HEART_RATE_EVENT,
// HealthDataType.IRREGULAR_HEART_RATE_EVENT,
// HealthDataType.LOW_HEART_RATE_EVENT,
// HealthDataType.RESTING_HEART_RATE,
// HealthDataType.WALKING_HEART_RATE,
// HealthDataType.ATRIAL_FIBRILLATION_BURDEN,
HealthDataType.NUTRITION,
HealthDataType.GENDER,
HealthDataType.BLOOD_TYPE,
HealthDataType.BIRTH_DATE,
HealthDataType.MENSTRUATION_FLOW,
HealthDataType.WATER_TEMPERATURE,
HealthDataType.UNDERWATER_DEPTH,
HealthDataType.UV_INDEX,
];
/// Data types available on Android via the Google Health Connect API.
const List<HealthDataType> dataTypesAndroid = [
HealthDataType.ACTIVE_ENERGY_BURNED,
// HealthDataType.BASAL_ENERGY_BURNED,
// HealthDataType.BLOOD_GLUCOSE,
HealthDataType.BLOOD_OXYGEN,
// HealthDataType.BLOOD_PRESSURE_DIASTOLIC,
// HealthDataType.BLOOD_PRESSURE_SYSTOLIC,
// HealthDataType.BODY_FAT_PERCENTAGE,
// HealthDataType.HEIGHT,
// HealthDataType.WEIGHT,
// HealthDataType.LEAN_BODY_MASS,
// HealthDataType.BODY_MASS_INDEX,
// HealthDataType.BODY_TEMPERATURE,
HealthDataType.HEART_RATE,
// HealthDataType.HEART_RATE_VARIABILITY_RMSSD,
HealthDataType.STEPS,
HealthDataType.DISTANCE_DELTA,
// HealthDataType.SPEED,
HealthDataType.RESPIRATORY_RATE,
// HealthDataType.SLEEP_ASLEEP,
// HealthDataType.SLEEP_AWAKE_IN_BED,
// HealthDataType.SLEEP_AWAKE,
// HealthDataType.SLEEP_DEEP,
// HealthDataType.SLEEP_LIGHT,
// HealthDataType.SLEEP_OUT_OF_BED,
// HealthDataType.SLEEP_REM,
// HealthDataType.SLEEP_UNKNOWN,
// HealthDataType.SLEEP_SESSION,
// HealthDataType.WATER,
// HealthDataType.WORKOUT,
HealthDataType.RESTING_HEART_RATE,
// HealthDataType.FLIGHTS_CLIMBED,
// HealthDataType.NUTRITION,
HealthDataType.TOTAL_CALORIES_BURNED,
// HealthDataType.MENSTRUATION_FLOW,
];

@ -0,0 +1,422 @@
import 'package:hmg_patient_app_new/core/enums.dart';
import 'package:hmg_patient_app_new/features/symptoms_checker/models/organ_model.dart';
class OrganData {
// ==================== FRONT VIEW ====================
static const List<OrganModel> frontViewOrgans = [
// ========== HEAD & FACE ==========
OrganModel(
id: 'head',
name: 'whole_head',
description: 'Head',
bodyView: BodyView.front,
position: OrganPosition(x: 0.50, y: 0.03),
),
OrganModel(
id: 'left_eye',
name: 'eyes',
description: 'Left Eye',
bodyView: BodyView.front,
position: OrganPosition(x: 0.43, y: 0.07),
),
OrganModel(
id: 'right_eye',
name: 'eyes',
description: 'Right Eye',
bodyView: BodyView.front,
position: OrganPosition(x: 0.57, y: 0.07),
),
OrganModel(
id: 'nose_mouth',
name: 'oral_cavity',
description: 'Nose/Mouth',
bodyView: BodyView.front,
position: OrganPosition(x: 0.50, y: 0.09),
),
// ========== NECK ==========
OrganModel(
id: 'throat',
name: 'neck_or_throat',
description: 'Throat',
bodyView: BodyView.front,
position: OrganPosition(x: 0.50, y: 0.15),
),
// ========== SHOULDERS ==========
OrganModel(
id: 'left_shoulder',
name: 'upper_arm',
description: 'Left Shoulder',
bodyView: BodyView.front,
position: OrganPosition(x: 0.22, y: 0.22),
),
OrganModel(
id: 'right_shoulder',
name: 'upper_arm',
description: 'Right Shoulder',
bodyView: BodyView.front,
position: OrganPosition(x: 0.8, y: 0.22),
),
// ========== CHEST ==========
OrganModel(
id: 'left_chest',
name: 'chest',
description: 'Left Chest',
bodyView: BodyView.front,
position: OrganPosition(x: 0.38, y: 0.22),
),
OrganModel(
id: 'center_chest',
name: 'chest',
description: 'Center Chest',
bodyView: BodyView.front,
position: OrganPosition(x: 0.52, y: 0.25),
),
OrganModel(
id: 'right_chest',
name: 'chest',
description: 'Right Chest',
bodyView: BodyView.front,
position: OrganPosition(x: 0.65, y: 0.22),
),
// ========== RIBS ==========
OrganModel(
id: 'left_ribs',
name: 'chest',
description: 'Left Ribs',
bodyView: BodyView.front,
position: OrganPosition(x: 0.38, y: 0.35),
),
OrganModel(
id: 'right_ribs',
name: 'chest',
description: 'Right Ribs',
bodyView: BodyView.front,
position: OrganPosition(x: 0.64, y: 0.35),
),
// ========== ABDOMEN ==========
OrganModel(
id: 'upper_abdomen',
name: 'upper_abdomen',
description: 'Upper Abdomen',
bodyView: BodyView.front,
position: OrganPosition(x: 0.51, y: 0.31),
),
OrganModel(
id: 'navel',
name: 'mid_abdomen',
description: 'Navel',
bodyView: BodyView.front,
position: OrganPosition(x: 0.51, y: 0.38),
),
OrganModel(
id: 'lower_abdomen',
name: 'lower_abdomen',
description: 'Lower Abdomen',
bodyView: BodyView.front,
position: OrganPosition(x: 0.51, y: 0.44),
),
// ========== PELVIS ==========
OrganModel(
id: 'left_groin',
name: 'sexual_organs',
description: 'Left Groin',
bodyView: BodyView.front,
position: OrganPosition(x: 0.42, y: 0.49),
),
OrganModel(
id: 'right_groin',
name: 'sexual_organs',
description: 'Right Groin',
bodyView: BodyView.front,
position: OrganPosition(x: 0.59, y: 0.49),
),
// ========== LEFT ARM ==========
OrganModel(
id: 'left_elbow',
name: 'elbow',
description: 'Left Elbow',
bodyView: BodyView.front,
position: OrganPosition(x: 0.21, y: 0.35),
),
OrganModel(
id: 'left_forearm',
name: 'forearm',
description: 'Left Forearm',
bodyView: BodyView.front,
position: OrganPosition(x: 0.19, y: 0.43),
),
OrganModel(
id: 'left_wrist',
name: 'hand',
description: 'Left Wrist',
bodyView: BodyView.front,
position: OrganPosition(x: 0.14, y: 0.5),
),
// ========== RIGHT ARM ==========
OrganModel(
id: 'right_elbow',
name: 'elbow',
description: 'Right Elbow',
bodyView: BodyView.front,
position: OrganPosition(x: 0.79, y: 0.35),
),
OrganModel(
id: 'right_forearm',
name: 'forearm',
description: 'Right Forearm',
bodyView: BodyView.front,
position: OrganPosition(x: 0.81, y: 0.43),
),
OrganModel(
id: 'right_wrist',
name: 'hand',
description: 'Right Wrist',
bodyView: BodyView.front,
position: OrganPosition(x: 0.85, y: 0.5),
),
// ========== LEFT LEG ==========
OrganModel(
id: 'left_thigh',
name: 'thigh',
description: 'Left Thigh',
bodyView: BodyView.front,
position: OrganPosition(x: 0.4, y: 0.60),
),
OrganModel(
id: 'left_knee',
name: 'knee',
description: 'Left Knee',
bodyView: BodyView.front,
position: OrganPosition(x: 0.4, y: 0.72),
),
OrganModel(
id: 'left_shin',
name: 'lower_leg',
description: 'Left Shin',
bodyView: BodyView.front,
position: OrganPosition(x: 0.41, y: 0.82),
),
OrganModel(
id: 'left_ankle',
name: 'foot',
description: 'Left Ankle',
bodyView: BodyView.front,
position: OrganPosition(x: 0.43, y: 0.91),
),
// ========== RIGHT LEG ==========
OrganModel(
id: 'right_thigh',
name: 'thigh',
description: 'Right Thigh',
bodyView: BodyView.front,
position: OrganPosition(x: 0.65, y: 0.60),
),
OrganModel(
id: 'right_knee',
name: 'knee',
description: 'Right Knee',
bodyView: BodyView.front,
position: OrganPosition(x: 0.6, y: 0.72),
),
OrganModel(
id: 'right_shin',
name: 'lower_leg',
description: 'Right Shin',
bodyView: BodyView.front,
position: OrganPosition(x: 0.57, y: 0.82),
),
OrganModel(
id: 'right_ankle',
name: 'foot',
description: 'Right Ankle',
bodyView: BodyView.front,
position: OrganPosition(x: 0.57, y: 0.91),
),
];
// ==================== BACK VIEW ====================
static const List<OrganModel> backViewOrgans = [
// ========== HEAD & NECK ==========
OrganModel(
id: 'back_of_head',
name: 'whole_head',
description: 'Back of Head',
bodyView: BodyView.back,
position: OrganPosition(x: 0.50, y: 0.04),
),
OrganModel(
id: 'neck_back',
name: 'nape_of_neck',
description: 'Neck',
bodyView: BodyView.back,
position: OrganPosition(x: 0.50, y: 0.14),
),
// ========== SHOULDERS ==========
OrganModel(
id: 'left_shoulder_back',
name: 'upper_arm',
description: 'Left Shoulder',
bodyView: BodyView.back,
position: OrganPosition(x: 0.33, y: 0.19),
),
OrganModel(
id: 'right_shoulder_back',
name: 'upper_arm',
description: 'Right Shoulder',
bodyView: BodyView.back,
position: OrganPosition(x: 0.67, y: 0.19),
),
// ========== UPPER BACK ==========
OrganModel(
id: 'upper_spine',
name: 'back',
description: 'Upper Spine',
bodyView: BodyView.back,
position: OrganPosition(x: 0.50, y: 0.23),
),
OrganModel(
id: 'left_upper_back',
name: 'back',
description: 'Left Upper Back',
bodyView: BodyView.back,
position: OrganPosition(x: 0.38, y: 0.28),
),
OrganModel(
id: 'right_upper_back',
name: 'back',
description: 'Right Upper Back',
bodyView: BodyView.back,
position: OrganPosition(x: 0.62, y: 0.28),
),
// ========== MID BACK ==========
OrganModel(
id: 'mid_spine',
name: 'back',
description: 'Mid Spine',
bodyView: BodyView.back,
position: OrganPosition(x: 0.50, y: 0.35),
),
OrganModel(
id: 'left_mid_back',
name: 'back',
description: 'Left Mid Back',
bodyView: BodyView.back,
position: OrganPosition(x: 0.38, y: 0.35),
),
OrganModel(
id: 'right_mid_back',
name: 'back',
description: 'Right Mid Back',
bodyView: BodyView.back,
position: OrganPosition(x: 0.62, y: 0.35),
),
// ========== LOWER BACK ==========
OrganModel(
id: 'lower_spine',
name: 'lower_back',
description: 'Lower Back',
bodyView: BodyView.back,
position: OrganPosition(x: 0.50, y: 0.43),
),
OrganModel(
id: 'left_lower_back',
name: 'lower_back',
description: 'Left Lower Back',
bodyView: BodyView.back,
position: OrganPosition(x: 0.40, y: 0.43),
),
OrganModel(
id: 'right_lower_back',
name: 'lower_back',
description: 'Right Lower Back',
bodyView: BodyView.back,
position: OrganPosition(x: 0.60, y: 0.43),
),
// ========== GLUTES ==========
OrganModel(
id: 'sacrum',
name: 'lower_back',
description: 'Sacrum',
bodyView: BodyView.back,
position: OrganPosition(x: 0.50, y: 0.52),
),
OrganModel(
id: 'left_glute',
name: 'buttocks',
description: 'Left Glute',
bodyView: BodyView.back,
position: OrganPosition(x: 0.45, y: 0.56),
),
OrganModel(
id: 'right_glute',
name: 'buttocks',
description: 'Right Glute',
bodyView: BodyView.back,
position: OrganPosition(x: 0.55, y: 0.56),
),
// ========== LEGS ==========
OrganModel(
id: 'left_hamstring',
name: 'thigh',
description: 'Left Hamstring',
bodyView: BodyView.back,
position: OrganPosition(x: 0.43, y: 0.65),
),
OrganModel(
id: 'right_hamstring',
name: 'thigh',
description: 'Right Hamstring',
bodyView: BodyView.back,
position: OrganPosition(x: 0.57, y: 0.65),
),
OrganModel(
id: 'left_calf',
name: 'lower_leg',
description: 'Left Calf',
bodyView: BodyView.back,
position: OrganPosition(x: 0.43, y: 0.79),
),
OrganModel(
id: 'right_calf',
name: 'lower_leg',
description: 'Right Calf',
bodyView: BodyView.back,
position: OrganPosition(x: 0.57, y: 0.79),
),
];
// Helper methods
static List<OrganModel> getOrgansForView(BodyView view) {
return view == BodyView.front ? frontViewOrgans : backViewOrgans;
}
static List<OrganModel> getAllOrgans() {
return [...frontViewOrgans, ...backViewOrgans];
}
static OrganModel? getOrganById(String id) {
try {
return getAllOrgans().firstWhere((organ) => organ.id == id);
} catch (e) {
return null;
}
}
}

@ -0,0 +1,323 @@
import 'package:hmg_patient_app_new/features/symptoms_checker/models/symptom_model.dart';
class SymptomsMappingData {
// Map of organ IDs to their possible symptoms
static final Map<String, List<SymptomModel>> organSymptomsMap = {
// HEAD & FACE
'head': [
SymptomModel(id: 'head_s1', name: 'Headache', organId: 'head'),
SymptomModel(id: 'head_s2', name: 'Dizziness', organId: 'head'),
SymptomModel(id: 'head_s3', name: 'Migraine', organId: 'head'),
SymptomModel(id: 'head_s4', name: 'Head pressure', organId: 'head'),
SymptomModel(id: 'head_s5', name: 'Vertigo', organId: 'head'),
SymptomModel(id: 'head_s6', name: 'Confusion', organId: 'head'),
SymptomModel(id: 'head_s7', name: 'Memory problems', organId: 'head'),
],
'left_eye': [
SymptomModel(id: 'left_eye_s1', name: 'Blurred vision', organId: 'left_eye'),
SymptomModel(id: 'left_eye_s2', name: 'Eye pain', organId: 'left_eye'),
SymptomModel(id: 'left_eye_s3', name: 'Redness', organId: 'left_eye'),
SymptomModel(id: 'left_eye_s4', name: 'Itching', organId: 'left_eye'),
SymptomModel(id: 'left_eye_s5', name: 'Watering', organId: 'left_eye'),
SymptomModel(id: 'left_eye_s6', name: 'Sensitivity to light', organId: 'left_eye'),
SymptomModel(id: 'left_eye_s7', name: 'Double vision', organId: 'left_eye'),
],
'right_eye': [
SymptomModel(id: 'right_eye_s1', name: 'Blurred vision', organId: 'right_eye'),
SymptomModel(id: 'right_eye_s2', name: 'Eye pain', organId: 'right_eye'),
SymptomModel(id: 'right_eye_s3', name: 'Redness', organId: 'right_eye'),
SymptomModel(id: 'right_eye_s4', name: 'Itching', organId: 'right_eye'),
SymptomModel(id: 'right_eye_s5', name: 'Watering', organId: 'right_eye'),
SymptomModel(id: 'right_eye_s6', name: 'Sensitivity to light', organId: 'right_eye'),
SymptomModel(id: 'right_eye_s7', name: 'Double vision', organId: 'right_eye'),
],
'nose_mouth': [
SymptomModel(id: 'nose_mouth_s1', name: 'Nasal congestion', organId: 'nose_mouth'),
SymptomModel(id: 'nose_mouth_s2', name: 'Runny nose', organId: 'nose_mouth'),
SymptomModel(id: 'nose_mouth_s3', name: 'Nosebleed', organId: 'nose_mouth'),
SymptomModel(id: 'nose_mouth_s4', name: 'Loss of smell', organId: 'nose_mouth'),
SymptomModel(id: 'nose_mouth_s5', name: 'Mouth pain', organId: 'nose_mouth'),
SymptomModel(id: 'nose_mouth_s6', name: 'Dry mouth', organId: 'nose_mouth'),
SymptomModel(id: 'nose_mouth_s7', name: 'Difficulty swallowing', organId: 'nose_mouth'),
],
// NECK & THROAT
'throat': [
SymptomModel(id: 'throat_s1', name: 'Sore throat', organId: 'throat'),
SymptomModel(id: 'throat_s2', name: 'Difficulty swallowing', organId: 'throat'),
SymptomModel(id: 'throat_s3', name: 'Hoarseness', organId: 'throat'),
SymptomModel(id: 'throat_s4', name: 'Throat pain', organId: 'throat'),
SymptomModel(id: 'throat_s5', name: 'Swollen glands', organId: 'throat'),
SymptomModel(id: 'throat_s6', name: 'Cough', organId: 'throat'),
SymptomModel(id: 'throat_s7', name: 'Difficulty breathing', organId: 'throat'),
],
// SHOULDERS
'left_shoulder': [
SymptomModel(id: 'left_shoulder_s1', name: 'Shoulder pain', organId: 'left_shoulder'),
SymptomModel(id: 'left_shoulder_s2', name: 'Stiffness', organId: 'left_shoulder'),
SymptomModel(id: 'left_shoulder_s3', name: 'Limited mobility', organId: 'left_shoulder'),
SymptomModel(id: 'left_shoulder_s4', name: 'Swelling', organId: 'left_shoulder'),
SymptomModel(id: 'left_shoulder_s5', name: 'Weakness', organId: 'left_shoulder'),
SymptomModel(id: 'left_shoulder_s6', name: 'Clicking sound', organId: 'left_shoulder'),
],
'right_shoulder': [
SymptomModel(id: 'right_shoulder_s1', name: 'Shoulder pain', organId: 'right_shoulder'),
SymptomModel(id: 'right_shoulder_s2', name: 'Stiffness', organId: 'right_shoulder'),
SymptomModel(id: 'right_shoulder_s3', name: 'Limited mobility', organId: 'right_shoulder'),
SymptomModel(id: 'right_shoulder_s4', name: 'Swelling', organId: 'right_shoulder'),
SymptomModel(id: 'right_shoulder_s5', name: 'Weakness', organId: 'right_shoulder'),
SymptomModel(id: 'right_shoulder_s6', name: 'Clicking sound', organId: 'right_shoulder'),
],
// CHEST
'left_chest': [
SymptomModel(id: 'left_chest_s1', name: 'Chest pain', organId: 'left_chest'),
SymptomModel(id: 'left_chest_s2', name: 'Tightness', organId: 'left_chest'),
SymptomModel(id: 'left_chest_s3', name: 'Pressure', organId: 'left_chest'),
SymptomModel(id: 'left_chest_s4', name: 'Sharp pain', organId: 'left_chest'),
SymptomModel(id: 'left_chest_s5', name: 'Burning sensation', organId: 'left_chest'),
SymptomModel(id: 'left_chest_s6', name: 'Palpitations', organId: 'left_chest'),
SymptomModel(id: 'left_chest_s7', name: 'Shortness of breath', organId: 'left_chest'),
],
'center_chest': [
SymptomModel(id: 'center_chest_s1', name: 'Chest pain', organId: 'center_chest'),
SymptomModel(id: 'center_chest_s2', name: 'Tightness', organId: 'center_chest'),
SymptomModel(id: 'center_chest_s3', name: 'Pressure', organId: 'center_chest'),
SymptomModel(id: 'center_chest_s4', name: 'Sharp pain', organId: 'center_chest'),
SymptomModel(id: 'center_chest_s5', name: 'Burning sensation', organId: 'center_chest'),
SymptomModel(id: 'center_chest_s6', name: 'Heartburn', organId: 'center_chest'),
SymptomModel(id: 'center_chest_s7', name: 'Difficulty breathing', organId: 'center_chest'),
SymptomModel(id: 'center_chest_s8', name: 'Palpitations', organId: 'center_chest'),
],
'right_chest': [
SymptomModel(id: 'right_chest_s1', name: 'Chest pain', organId: 'right_chest'),
SymptomModel(id: 'right_chest_s2', name: 'Tightness', organId: 'right_chest'),
SymptomModel(id: 'right_chest_s3', name: 'Pressure', organId: 'right_chest'),
SymptomModel(id: 'right_chest_s4', name: 'Sharp pain', organId: 'right_chest'),
SymptomModel(id: 'right_chest_s5', name: 'Burning sensation', organId: 'right_chest'),
SymptomModel(id: 'right_chest_s6', name: 'Shortness of breath', organId: 'right_chest'),
],
// RIBS
'left_ribs': [
SymptomModel(id: 'left_ribs_s1', name: 'Rib pain', organId: 'left_ribs'),
SymptomModel(id: 'left_ribs_s2', name: 'Pain when breathing', organId: 'left_ribs'),
SymptomModel(id: 'left_ribs_s3', name: 'Tenderness', organId: 'left_ribs'),
SymptomModel(id: 'left_ribs_s4', name: 'Bruising', organId: 'left_ribs'),
SymptomModel(id: 'left_ribs_s5', name: 'Difficulty moving', organId: 'left_ribs'),
],
'right_ribs': [
SymptomModel(id: 'right_ribs_s1', name: 'Rib pain', organId: 'right_ribs'),
SymptomModel(id: 'right_ribs_s2', name: 'Pain when breathing', organId: 'right_ribs'),
SymptomModel(id: 'right_ribs_s3', name: 'Tenderness', organId: 'right_ribs'),
SymptomModel(id: 'right_ribs_s4', name: 'Bruising', organId: 'right_ribs'),
SymptomModel(id: 'right_ribs_s5', name: 'Difficulty moving', organId: 'right_ribs'),
],
// ABDOMEN
'upper_abdomen': [
SymptomModel(id: 'upper_abdomen_s1', name: 'Abdominal pain', organId: 'upper_abdomen'),
SymptomModel(id: 'upper_abdomen_s2', name: 'Bloating', organId: 'upper_abdomen'),
SymptomModel(id: 'upper_abdomen_s3', name: 'Nausea', organId: 'upper_abdomen'),
SymptomModel(id: 'upper_abdomen_s4', name: 'Vomiting', organId: 'upper_abdomen'),
SymptomModel(id: 'upper_abdomen_s5', name: 'Heartburn', organId: 'upper_abdomen'),
SymptomModel(id: 'upper_abdomen_s6', name: 'Loss of appetite', organId: 'upper_abdomen'),
SymptomModel(id: 'upper_abdomen_s7', name: 'Indigestion', organId: 'upper_abdomen'),
],
'navel': [
SymptomModel(id: 'navel_s1', name: 'Abdominal pain', organId: 'navel'),
SymptomModel(id: 'navel_s2', name: 'Cramping', organId: 'navel'),
SymptomModel(id: 'navel_s3', name: 'Bloating', organId: 'navel'),
SymptomModel(id: 'navel_s4', name: 'Gas', organId: 'navel'),
SymptomModel(id: 'navel_s5', name: 'Tenderness', organId: 'navel'),
],
'lower_abdomen': [
SymptomModel(id: 'lower_abdomen_s1', name: 'Lower abdominal pain', organId: 'lower_abdomen'),
SymptomModel(id: 'lower_abdomen_s2', name: 'Cramping', organId: 'lower_abdomen'),
SymptomModel(id: 'lower_abdomen_s3', name: 'Bloating', organId: 'lower_abdomen'),
SymptomModel(id: 'lower_abdomen_s4', name: 'Constipation', organId: 'lower_abdomen'),
SymptomModel(id: 'lower_abdomen_s5', name: 'Diarrhea', organId: 'lower_abdomen'),
SymptomModel(id: 'lower_abdomen_s6', name: 'Urinary discomfort', organId: 'lower_abdomen'),
],
// PELVIS & GROIN
'left_groin': [
SymptomModel(id: 'left_groin_s1', name: 'Groin pain', organId: 'left_groin'),
SymptomModel(id: 'left_groin_s2', name: 'Swelling', organId: 'left_groin'),
SymptomModel(id: 'left_groin_s3', name: 'Tenderness', organId: 'left_groin'),
SymptomModel(id: 'left_groin_s4', name: 'Limited mobility', organId: 'left_groin'),
],
'right_groin': [
SymptomModel(id: 'right_groin_s1', name: 'Groin pain', organId: 'right_groin'),
SymptomModel(id: 'right_groin_s2', name: 'Swelling', organId: 'right_groin'),
SymptomModel(id: 'right_groin_s3', name: 'Tenderness', organId: 'right_groin'),
SymptomModel(id: 'right_groin_s4', name: 'Limited mobility', organId: 'right_groin'),
],
// ARMS - LEFT
'left_elbow': [
SymptomModel(id: 'left_elbow_s1', name: 'Elbow pain', organId: 'left_elbow'),
SymptomModel(id: 'left_elbow_s2', name: 'Stiffness', organId: 'left_elbow'),
SymptomModel(id: 'left_elbow_s3', name: 'Swelling', organId: 'left_elbow'),
SymptomModel(id: 'left_elbow_s4', name: 'Limited mobility', organId: 'left_elbow'),
SymptomModel(id: 'left_elbow_s5', name: 'Tingling', organId: 'left_elbow'),
],
'left_forearm': [
SymptomModel(id: 'left_forearm_s1', name: 'Forearm pain', organId: 'left_forearm'),
SymptomModel(id: 'left_forearm_s2', name: 'Weakness', organId: 'left_forearm'),
SymptomModel(id: 'left_forearm_s3', name: 'Numbness', organId: 'left_forearm'),
SymptomModel(id: 'left_forearm_s4', name: 'Tingling', organId: 'left_forearm'),
SymptomModel(id: 'left_forearm_s5', name: 'Swelling', organId: 'left_forearm'),
],
'left_wrist': [
SymptomModel(id: 'left_wrist_s1', name: 'Wrist pain', organId: 'left_wrist'),
SymptomModel(id: 'left_wrist_s2', name: 'Stiffness', organId: 'left_wrist'),
SymptomModel(id: 'left_wrist_s3', name: 'Swelling', organId: 'left_wrist'),
SymptomModel(id: 'left_wrist_s4', name: 'Limited mobility', organId: 'left_wrist'),
SymptomModel(id: 'left_wrist_s5', name: 'Tingling', organId: 'left_wrist'),
SymptomModel(id: 'left_wrist_s6', name: 'Numbness', organId: 'left_wrist'),
],
// ARMS - RIGHT
'right_elbow': [
SymptomModel(id: 'right_elbow_s1', name: 'Elbow pain', organId: 'right_elbow'),
SymptomModel(id: 'right_elbow_s2', name: 'Stiffness', organId: 'right_elbow'),
SymptomModel(id: 'right_elbow_s3', name: 'Swelling', organId: 'right_elbow'),
SymptomModel(id: 'right_elbow_s4', name: 'Limited mobility', organId: 'right_elbow'),
SymptomModel(id: 'right_elbow_s5', name: 'Tingling', organId: 'right_elbow'),
],
'right_forearm': [
SymptomModel(id: 'right_forearm_s1', name: 'Forearm pain', organId: 'right_forearm'),
SymptomModel(id: 'right_forearm_s2', name: 'Weakness', organId: 'right_forearm'),
SymptomModel(id: 'right_forearm_s3', name: 'Numbness', organId: 'right_forearm'),
SymptomModel(id: 'right_forearm_s4', name: 'Tingling', organId: 'right_forearm'),
SymptomModel(id: 'right_forearm_s5', name: 'Swelling', organId: 'right_forearm'),
],
'right_wrist': [
SymptomModel(id: 'right_wrist_s1', name: 'Wrist pain', organId: 'right_wrist'),
SymptomModel(id: 'right_wrist_s2', name: 'Stiffness', organId: 'right_wrist'),
SymptomModel(id: 'right_wrist_s3', name: 'Swelling', organId: 'right_wrist'),
SymptomModel(id: 'right_wrist_s4', name: 'Limited mobility', organId: 'right_wrist'),
SymptomModel(id: 'right_wrist_s5', name: 'Tingling', organId: 'right_wrist'),
SymptomModel(id: 'right_wrist_s6', name: 'Numbness', organId: 'right_wrist'),
],
// LEGS - LEFT
'left_thigh': [
SymptomModel(id: 'left_thigh_s1', name: 'Thigh pain', organId: 'left_thigh'),
SymptomModel(id: 'left_thigh_s2', name: 'Muscle cramps', organId: 'left_thigh'),
SymptomModel(id: 'left_thigh_s3', name: 'Weakness', organId: 'left_thigh'),
SymptomModel(id: 'left_thigh_s4', name: 'Numbness', organId: 'left_thigh'),
SymptomModel(id: 'left_thigh_s5', name: 'Swelling', organId: 'left_thigh'),
],
'left_knee': [
SymptomModel(id: 'left_knee_s1', name: 'Knee pain', organId: 'left_knee'),
SymptomModel(id: 'left_knee_s2', name: 'Stiffness', organId: 'left_knee'),
SymptomModel(id: 'left_knee_s3', name: 'Swelling', organId: 'left_knee'),
SymptomModel(id: 'left_knee_s4', name: 'Limited mobility', organId: 'left_knee'),
SymptomModel(id: 'left_knee_s5', name: 'Clicking sound', organId: 'left_knee'),
SymptomModel(id: 'left_knee_s6', name: 'Instability', organId: 'left_knee'),
],
'left_shin': [
SymptomModel(id: 'left_shin_s1', name: 'Shin pain', organId: 'left_shin'),
SymptomModel(id: 'left_shin_s2', name: 'Tenderness', organId: 'left_shin'),
SymptomModel(id: 'left_shin_s3', name: 'Swelling', organId: 'left_shin'),
SymptomModel(id: 'left_shin_s4', name: 'Numbness', organId: 'left_shin'),
],
'left_ankle': [
SymptomModel(id: 'left_ankle_s1', name: 'Ankle pain', organId: 'left_ankle'),
SymptomModel(id: 'left_ankle_s2', name: 'Stiffness', organId: 'left_ankle'),
SymptomModel(id: 'left_ankle_s3', name: 'Swelling', organId: 'left_ankle'),
SymptomModel(id: 'left_ankle_s4', name: 'Limited mobility', organId: 'left_ankle'),
SymptomModel(id: 'left_ankle_s5', name: 'Instability', organId: 'left_ankle'),
],
// LEGS - RIGHT
'right_thigh': [
SymptomModel(id: 'right_thigh_s1', name: 'Thigh pain', organId: 'right_thigh'),
SymptomModel(id: 'right_thigh_s2', name: 'Muscle cramps', organId: 'right_thigh'),
SymptomModel(id: 'right_thigh_s3', name: 'Weakness', organId: 'right_thigh'),
SymptomModel(id: 'right_thigh_s4', name: 'Numbness', organId: 'right_thigh'),
SymptomModel(id: 'right_thigh_s5', name: 'Swelling', organId: 'right_thigh'),
],
'right_knee': [
SymptomModel(id: 'right_knee_s1', name: 'Knee pain', organId: 'right_knee'),
SymptomModel(id: 'right_knee_s2', name: 'Stiffness', organId: 'right_knee'),
SymptomModel(id: 'right_knee_s3', name: 'Swelling', organId: 'right_knee'),
SymptomModel(id: 'right_knee_s4', name: 'Limited mobility', organId: 'right_knee'),
SymptomModel(id: 'right_knee_s5', name: 'Clicking sound', organId: 'right_knee'),
SymptomModel(id: 'right_knee_s6', name: 'Instability', organId: 'right_knee'),
],
'right_shin': [
SymptomModel(id: 'right_shin_s1', name: 'Shin pain', organId: 'right_shin'),
SymptomModel(id: 'right_shin_s2', name: 'Tenderness', organId: 'right_shin'),
SymptomModel(id: 'right_shin_s3', name: 'Swelling', organId: 'right_shin'),
SymptomModel(id: 'right_shin_s4', name: 'Numbness', organId: 'right_shin'),
],
'right_ankle': [
SymptomModel(id: 'right_ankle_s1', name: 'Ankle pain', organId: 'right_ankle'),
SymptomModel(id: 'right_ankle_s2', name: 'Stiffness', organId: 'right_ankle'),
SymptomModel(id: 'right_ankle_s3', name: 'Swelling', organId: 'right_ankle'),
SymptomModel(id: 'right_ankle_s4', name: 'Limited mobility', organId: 'right_ankle'),
SymptomModel(id: 'right_ankle_s5', name: 'Instability', organId: 'right_ankle'),
],
// BACK VIEW ORGANS
'back_head': [
SymptomModel(id: 'back_head_s1', name: 'Back of head pain', organId: 'back_head'),
SymptomModel(id: 'back_head_s2', name: 'Neck stiffness', organId: 'back_head'),
SymptomModel(id: 'back_head_s3', name: 'Tension headache', organId: 'back_head'),
],
'neck': [
SymptomModel(id: 'neck_s1', name: 'Neck pain', organId: 'neck'),
SymptomModel(id: 'neck_s2', name: 'Stiffness', organId: 'neck'),
SymptomModel(id: 'neck_s3', name: 'Limited mobility', organId: 'neck'),
SymptomModel(id: 'neck_s4', name: 'Muscle spasm', organId: 'neck'),
SymptomModel(id: 'neck_s5', name: 'Tingling', organId: 'neck'),
],
'upper_back': [
SymptomModel(id: 'upper_back_s1', name: 'Upper back pain', organId: 'upper_back'),
SymptomModel(id: 'upper_back_s2', name: 'Stiffness', organId: 'upper_back'),
SymptomModel(id: 'upper_back_s3', name: 'Muscle tension', organId: 'upper_back'),
SymptomModel(id: 'upper_back_s4', name: 'Sharp pain', organId: 'upper_back'),
SymptomModel(id: 'upper_back_s5', name: 'Difficulty breathing', organId: 'upper_back'),
],
'mid_back': [
SymptomModel(id: 'mid_back_s1', name: 'Mid back pain', organId: 'mid_back'),
SymptomModel(id: 'mid_back_s2', name: 'Stiffness', organId: 'mid_back'),
SymptomModel(id: 'mid_back_s3', name: 'Muscle spasm', organId: 'mid_back'),
SymptomModel(id: 'mid_back_s4', name: 'Tenderness', organId: 'mid_back'),
],
'lower_back': [
SymptomModel(id: 'lower_back_s1', name: 'Lower back pain', organId: 'lower_back'),
SymptomModel(id: 'lower_back_s2', name: 'Stiffness', organId: 'lower_back'),
SymptomModel(id: 'lower_back_s3', name: 'Sharp pain', organId: 'lower_back'),
SymptomModel(id: 'lower_back_s4', name: 'Sciatica', organId: 'lower_back'),
SymptomModel(id: 'lower_back_s5', name: 'Limited mobility', organId: 'lower_back'),
SymptomModel(id: 'lower_back_s6', name: 'Muscle spasm', organId: 'lower_back'),
],
};
/// Get symptoms for a specific organ ID
static List<SymptomModel> getSymptomsForOrgan(String organId) {
return organSymptomsMap[organId] ?? [];
}
/// Get symptoms for multiple organ IDs
static Map<String, List<SymptomModel>> getSymptomsForOrgans(List<String> organIds) {
Map<String, List<SymptomModel>> result = {};
for (String organId in organIds) {
List<SymptomModel> symptoms = getSymptomsForOrgan(organId);
if (symptoms.isNotEmpty) {
result[organId] = symptoms;
}
}
return result;
}
/// Check if an organ has symptoms mapped
static bool hasSymptoms(String organId) {
return organSymptomsMap.containsKey(organId) && organSymptomsMap[organId]!.isNotEmpty;
}
}

@ -0,0 +1,209 @@
import 'package:hmg_patient_app_new/features/symptoms_checker/models/triage_question_model.dart';
class TriageQuestionsData {
static List<TriageQuestionModel> getSampleTriageQuestions() {
return [
// Question 1: Pain Location
TriageQuestionModel(
id: 'q1',
question: 'Where do you feel the chest pain, and where does the pain spread or move to?',
options: [
TriageOptionModel(
id: 'q1_opt1',
text: 'It is all over',
severityScore: 3,
),
TriageOptionModel(
id: 'q1_opt2',
text: 'It is behind the breast bone',
severityScore: 5,
),
TriageOptionModel(
id: 'q1_opt3',
text: 'Moves or spread to the upper limb; for example the shoulder, arm, or fingers',
severityScore: 7,
),
TriageOptionModel(
id: 'q1_opt4',
text: 'Moves or spread to the upper back; between the shoulder blades',
severityScore: 6,
),
TriageOptionModel(
id: 'q1_opt5',
text: 'Moves or spread to the neck or jaw',
severityScore: 8,
),
],
),
// Question 2: Pain Intensity
TriageQuestionModel(
id: 'q2',
question: 'How would you describe the intensity of your chest pain?',
options: [
TriageOptionModel(
id: 'q2_opt1',
text: 'Mild - Barely noticeable, does not interfere with daily activities',
severityScore: 2,
),
TriageOptionModel(
id: 'q2_opt2',
text: 'Moderate - Noticeable but manageable, some interference with activities',
severityScore: 4,
),
TriageOptionModel(
id: 'q2_opt3',
text: 'Severe - Significantly interferes with activities, difficult to ignore',
severityScore: 7,
),
TriageOptionModel(
id: 'q2_opt4',
text: 'Very severe - Unbearable, cannot perform any activities',
severityScore: 9,
),
],
),
// Question 3: Pain Duration
TriageQuestionModel(
id: 'q3',
question: 'How long have you been experiencing this chest pain?',
options: [
TriageOptionModel(
id: 'q3_opt1',
text: 'Less than 5 minutes',
severityScore: 3,
),
TriageOptionModel(
id: 'q3_opt2',
text: 'Between 5 to 15 minutes',
severityScore: 5,
),
TriageOptionModel(
id: 'q3_opt3',
text: 'Between 15 to 30 minutes',
severityScore: 7,
),
TriageOptionModel(
id: 'q3_opt4',
text: 'More than 30 minutes',
severityScore: 8,
),
TriageOptionModel(
id: 'q3_opt5',
text: 'Comes and goes (intermittent)',
severityScore: 4,
),
],
),
// Question 4: Associated Symptoms
TriageQuestionModel(
id: 'q4',
question: 'Are you experiencing any of these symptoms along with chest pain?',
options: [
TriageOptionModel(
id: 'q4_opt1',
text: 'Shortness of breath or difficulty breathing',
severityScore: 8,
),
TriageOptionModel(
id: 'q4_opt2',
text: 'Sweating, nausea, or vomiting',
severityScore: 7,
),
TriageOptionModel(
id: 'q4_opt3',
text: 'Dizziness or lightheadedness',
severityScore: 7,
),
TriageOptionModel(
id: 'q4_opt4',
text: 'Rapid or irregular heartbeat',
severityScore: 6,
),
TriageOptionModel(
id: 'q4_opt5',
text: 'None of the above',
severityScore: 2,
),
],
),
// Question 5: Triggering Factors
TriageQuestionModel(
id: 'q5',
question: 'What triggers or worsens your chest pain?',
options: [
TriageOptionModel(
id: 'q5_opt1',
text: 'Physical activity or exertion',
severityScore: 6,
),
TriageOptionModel(
id: 'q5_opt2',
text: 'Emotional stress or anxiety',
severityScore: 4,
),
TriageOptionModel(
id: 'q5_opt3',
text: 'Deep breathing or coughing',
severityScore: 3,
),
TriageOptionModel(
id: 'q5_opt4',
text: 'Eating or lying down',
severityScore: 3,
),
TriageOptionModel(
id: 'q5_opt5',
text: 'Nothing specific, pain is constant',
severityScore: 7,
),
],
),
];
}
/// Calculate total severity score from answered questions
static int calculateTotalScore(List<TriageQuestionModel> questions) {
int totalScore = 0;
int answeredCount = 0;
for (var question in questions) {
if (question.isConfirmed && question.confirmedOption != null) {
totalScore += question.confirmedOption!.severityScore ?? 0;
answeredCount++;
}
}
// Return average score or 0 if no questions answered
return answeredCount > 0 ? (totalScore / answeredCount * 10).round() : 0;
}
/// Get risk level based on score
static String getRiskLevel(int score) {
if (score >= 70) {
return 'High Risk - Seek immediate medical attention';
} else if (score >= 50) {
return 'Moderate Risk - Consult a doctor soon';
} else if (score >= 30) {
return 'Low to Moderate Risk - Monitor symptoms';
} else {
return 'Low Risk - Self-care may be sufficient';
}
}
/// Get suggested condition based on score
static String getSuggestedCondition(int score) {
if (score >= 70) {
return 'Acute Coronary Syndrome';
} else if (score >= 50) {
return 'Angina or Cardiac concern';
} else if (score >= 30) {
return 'Non-cardiac chest pain';
} else {
return 'Musculoskeletal chest pain';
}
}
}

@ -0,0 +1,97 @@
import 'package:flutter/material.dart';
import 'package:hmg_patient_app_new/core/enums.dart';
class ConditionsModel {
final IconData icon;
final String title;
final int percentage;
final String tagText;
final String clinic;
final List<String> symptoms;
final String description;
final String? monitorNote;
final String? appointmentLabel;
final PossibleConditionsSeverityEnum possibleConditionsSeverityEnum;
ConditionsModel({
required this.icon,
required this.title,
required this.percentage,
required this.tagText,
required this.clinic,
required this.symptoms,
required this.description,
required this.possibleConditionsSeverityEnum,
this.monitorNote,
this.appointmentLabel,
});
}
List<ConditionsModel> dummyConditions = [
ConditionsModel(
icon: Icons.psychology_alt,
possibleConditionsSeverityEnum: PossibleConditionsSeverityEnum.seekMedicalAdvice,
title: "Migraine",
percentage: 87,
tagText: "Seek Medical Advice",
clinic: "Internal Medicine Clinic",
symptoms: ["Headache", "Nausea", "Sensitivity to light"],
description: "A migraine is a type of headache that can cause severe throbbing pain, usually on one side of the head.",
appointmentLabel: "Book Appointment",
),
ConditionsModel(
icon: Icons.deblur,
title: "Tension Headache",
percentage: 37,
tagText: "Monitor",
monitorNote: "No need to visit doctor",
clinic: "GP Clinic",
symptoms: ["Mild head pressure", "Scalp tenderness"],
description: "A tension-type headache is generally a mild to moderate pain that feels like a tight band around your head.",
possibleConditionsSeverityEnum: PossibleConditionsSeverityEnum.monitorOnly,
),
ConditionsModel(
icon: Icons.medication_liquid,
title: "Meningitis",
percentage: 28,
tagText: "Emergency",
clinic: "Neurology Clinic",
symptoms: ["Mild head pressure", "Scalp tenderness"],
description: "A tension-type headache is generally a mild to moderate pain that feels like a tight band around your head.",
appointmentLabel: "Book Appointment",
possibleConditionsSeverityEnum: PossibleConditionsSeverityEnum.emergency,
),
ConditionsModel(
icon: Icons.psychology_alt,
title: "Migraine",
percentage: 87,
tagText: "Seek Medical Advice",
clinic: "Internal Medicine Clinic",
symptoms: ["Headache", "Nausea", "Sensitivity to light"],
description: "A migraine is a type of headache that can cause severe throbbing pain, usually on one side of the head.",
appointmentLabel: "Book Appointment",
possibleConditionsSeverityEnum: PossibleConditionsSeverityEnum.seekMedicalAdvice,
),
ConditionsModel(
icon: Icons.deblur,
title: "Tension Headache",
percentage: 37,
tagText: "Monitor",
monitorNote: "No need to visit doctor",
clinic: "GP Clinic",
symptoms: ["Mild head pressure", "Scalp tenderness"],
description: "A tension-type headache is generally a mild to moderate pain that feels like a tight band around your head.",
possibleConditionsSeverityEnum: PossibleConditionsSeverityEnum.monitorOnly,
),
ConditionsModel(
icon: Icons.medication_liquid,
title: "Meningitis",
percentage: 28,
tagText: "Emergency",
clinic: "Neurology Clinic",
symptoms: ["Mild head pressure", "Scalp tenderness"],
description: "A tension-type headache is generally a mild to moderate pain that feels like a tight band around your head.",
appointmentLabel: "Book Appointment",
possibleConditionsSeverityEnum: PossibleConditionsSeverityEnum.emergency,
),
];

@ -0,0 +1,43 @@
import 'package:hmg_patient_app_new/core/enums.dart';
class OrganModel {
final String id;
final String name;
final String description;
final BodyView bodyView;
final OrganPosition position;
const OrganModel({
required this.id,
required this.name,
required this.description,
required this.bodyView,
required this.position,
});
OrganModel copyWith({
String? id,
String? name,
String? description,
BodyView? bodyView,
OrganPosition? position,
}) {
return OrganModel(
id: id ?? this.id,
name: name ?? this.name,
description: description ?? this.description,
bodyView: bodyView ?? this.bodyView,
position: position ?? this.position,
);
}
}
class OrganPosition {
final double x; // Percentage from left (0.0 to 1.0)
final double y; // Percentage from top (0.0 to 1.0)
const OrganPosition({
required this.x,
required this.y,
});
}

@ -0,0 +1,151 @@
class BodySymptomResponseModel {
final DataDetails? dataDetails;
BodySymptomResponseModel({
this.dataDetails,
});
factory BodySymptomResponseModel.fromJson(Map<String, dynamic> json) {
return BodySymptomResponseModel(
dataDetails: json['dataDetails'] != null ? DataDetails.fromJson(json['dataDetails']) : null,
);
}
Map<String, dynamic> toJson() {
return {
'dataDetails': dataDetails?.toJson(),
};
}
}
class DataDetails {
final List<OrganSymptomResult>? result;
final int? id;
final dynamic exception;
final int? status;
final bool? isCanceled;
final bool? isCompleted;
final bool? isCompletedSuccessfully;
final int? creationOptions;
final dynamic asyncState;
final bool? isFaulted;
DataDetails({
this.result,
this.id,
this.exception,
this.status,
this.isCanceled,
this.isCompleted,
this.isCompletedSuccessfully,
this.creationOptions,
this.asyncState,
this.isFaulted,
});
factory DataDetails.fromJson(Map<String, dynamic> json) {
return DataDetails(
result: json['Result'] != null ? (json['Result'] as List).map((item) => OrganSymptomResult.fromJson(item)).toList() : null,
id: json['Id'],
exception: json['Exception'],
status: json['Status'],
isCanceled: json['IsCanceled'],
isCompleted: json['IsCompleted'],
isCompletedSuccessfully: json['IsCompletedSuccessfully'],
creationOptions: json['CreationOptions'],
asyncState: json['AsyncState'],
isFaulted: json['IsFaulted'],
);
}
Map<String, dynamic> toJson() {
return {
'Result': result?.map((item) => item.toJson()).toList(),
'Id': id,
'Exception': exception,
'Status': status,
'IsCanceled': isCanceled,
'IsCompleted': isCompleted,
'IsCompletedSuccessfully': isCompletedSuccessfully,
'CreationOptions': creationOptions,
'AsyncState': asyncState,
'IsFaulted': isFaulted,
};
}
}
class OrganSymptomResult {
final String? name;
final List<BodySymptom>? bodySymptoms;
OrganSymptomResult({
this.name,
this.bodySymptoms,
});
factory OrganSymptomResult.fromJson(Map<String, dynamic> json) {
return OrganSymptomResult(
name: json['name'],
bodySymptoms: json['bodySymptoms'] != null ? (json['bodySymptoms'] as List).map((item) => BodySymptom.fromJson(item)).toList() : null,
);
}
Map<String, dynamic> toJson() {
return {
'name': name,
'bodySymptoms': bodySymptoms?.map((item) => item.toJson()).toList(),
};
}
}
class BodySymptom {
final String? id;
final String? type;
final String? symptomsName;
final String? name;
final String? commonName;
final String? nameAr;
final String? commonNameAr;
BodySymptom({
this.id,
this.type,
this.symptomsName,
this.name,
this.commonName,
this.nameAr,
this.commonNameAr,
});
factory BodySymptom.fromJson(Map<String, dynamic> json) {
return BodySymptom(
id: json['Id'],
type: json['type'],
symptomsName: json['symptoms_name'],
name: json['name'],
commonName: json['common_name'],
nameAr: json['nameAr'],
commonNameAr: json['common_nameAr'],
);
}
Map<String, dynamic> toJson() {
return {
'Id': id,
'type': type,
'symptoms_name': symptomsName,
'name': name,
'common_name': commonName,
'nameAr': nameAr,
'common_nameAr': commonNameAr,
};
}
// Helper method to get display name based on locale
String getDisplayName(bool isArabic) {
if (isArabic) {
return commonNameAr ?? nameAr ?? commonName ?? name ?? '';
}
return commonName ?? name ?? '';
}
}

@ -0,0 +1,105 @@
class SymptomModel {
final String id;
final String name;
final String nameAr;
final String? organId;
const SymptomModel({
required this.id,
required this.name,
this.nameAr = '',
this.organId,
});
SymptomModel copyWith({
String? id,
String? name,
String? nameAr,
String? organId,
}) {
return SymptomModel(
id: id ?? this.id,
name: name ?? this.name,
nameAr: nameAr ?? this.nameAr,
organId: organId ?? this.organId,
);
}
Map<String, dynamic> toJson() {
return {
'id': id,
'name': name,
'nameAr': nameAr,
'organId': organId,
};
}
factory SymptomModel.fromJson(Map<String, dynamic> json) {
return SymptomModel(
id: json['id'] ?? '',
name: json['name'] ?? '',
nameAr: json['nameAr'] ?? '',
organId: json['organId'],
);
}
@override
bool operator ==(Object other) {
if (identical(this, other)) return true;
return other is SymptomModel && other.id == id;
}
@override
int get hashCode => id.hashCode;
@override
String toString() {
return 'SymptomModel(id: $id, name: $name, nameAr: $nameAr, organId: $organId)';
}
}
/// Class to group symptoms by organ
class OrganSymptomsGroup {
final String organId;
final String organName;
final List<SymptomModel> symptoms;
final Set<String> selectedSymptomIds;
OrganSymptomsGroup({
required this.organId,
required this.organName,
required this.symptoms,
Set<String>? selectedSymptomIds,
}) : selectedSymptomIds = selectedSymptomIds ?? {};
/// Get count of selected symptoms
int get selectedCount => selectedSymptomIds.length;
/// Check if any symptoms are selected
bool get hasSelectedSymptoms => selectedSymptomIds.isNotEmpty;
/// Get list of selected symptoms
List<SymptomModel> get selectedSymptoms {
return symptoms.where((symptom) => selectedSymptomIds.contains(symptom.id)).toList();
}
OrganSymptomsGroup copyWith({
String? organId,
String? organName,
List<SymptomModel>? symptoms,
Set<String>? selectedSymptomIds,
}) {
return OrganSymptomsGroup(
organId: organId ?? this.organId,
organName: organName ?? this.organName,
symptoms: symptoms ?? this.symptoms,
selectedSymptomIds: selectedSymptomIds ?? this.selectedSymptomIds,
);
}
@override
String toString() {
return 'OrganSymptomsGroup(organId: $organId, organName: $organName, symptomsCount: ${symptoms.length}, selectedCount: $selectedCount)';
}
}

@ -0,0 +1,85 @@
class TriageQuestionModel {
final String id;
final String question;
final List<TriageOptionModel> options;
int? selectedOptionIndex;
int? confirmedOptionIndex; // Confirmed answer when user presses Next
TriageQuestionModel({
required this.id,
required this.question,
required this.options,
this.selectedOptionIndex,
this.confirmedOptionIndex,
});
bool get isAnswered => selectedOptionIndex != null;
bool get isConfirmed => confirmedOptionIndex != null;
void selectOption(int index) {
selectedOptionIndex = index;
}
void confirmSelection() {
confirmedOptionIndex = selectedOptionIndex;
}
void clearSelection() {
selectedOptionIndex = null;
}
TriageOptionModel? get selectedOption {
if (selectedOptionIndex != null && selectedOptionIndex! < options.length) {
return options[selectedOptionIndex!];
}
return null;
}
TriageOptionModel? get confirmedOption {
if (confirmedOptionIndex != null && confirmedOptionIndex! < options.length) {
return options[confirmedOptionIndex!];
}
return null;
}
TriageQuestionModel copyWith({
String? id,
String? question,
List<TriageOptionModel>? options,
int? selectedOptionIndex,
int? confirmedOptionIndex,
}) {
return TriageQuestionModel(
id: id ?? this.id,
question: question ?? this.question,
options: options ?? this.options,
selectedOptionIndex: selectedOptionIndex ?? this.selectedOptionIndex,
confirmedOptionIndex: confirmedOptionIndex ?? this.confirmedOptionIndex,
);
}
}
class TriageOptionModel {
final String id;
final String text;
final int? severityScore; // Optional: for calculating risk scores
TriageOptionModel({
required this.id,
required this.text,
this.severityScore,
});
TriageOptionModel copyWith({
String? id,
String? text,
int? severityScore,
}) {
return TriageOptionModel(
id: id ?? this.id,
text: text ?? this.text,
severityScore: severityScore ?? this.severityScore,
);
}
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save