|
After Width: | Height: | Size: 130 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 52 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
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 |
|
After Width: | Height: | Size: 46 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 189 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 66 KiB |
|
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,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,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 |
@ -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,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,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,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,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,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 |
@ -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;
|
||||
}
|
||||
}
|
||||
@ -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: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/core/dependencies.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';
|
||||
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
|
||||
import 'package:hmg_patient_app_new/features/smartwatch_health_data/health_provider.dart';
|
||||
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
|
||||
import 'package:hmg_patient_app_new/presentation/smartwatches/widgets/health_metric.dart';
|
||||
import 'package:hmg_patient_app_new/presentation/smartwatches/widgets/health_metric_card.dart';
|
||||
import 'package:hmg_patient_app_new/theme/colors.dart';
|
||||
import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
|
||||
import 'package:hmg_patient_app_new/widgets/custom_tab_bar.dart';
|
||||
import 'package:permission_handler/permission_handler.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:health/health.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
|
||||
class HealthDashboard extends StatefulWidget {
|
||||
const HealthDashboard({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
_HealthDashboardState createState() => _HealthDashboardState();
|
||||
}
|
||||
|
||||
class _HealthDashboardState extends State<HealthDashboard> with SingleTickerProviderStateMixin {
|
||||
late TabController _tabController;
|
||||
final dateFormat = DateFormat('MMM dd, yyyy');
|
||||
final timeFormat = DateFormat('hh:mm a');
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_tabController = TabController(length: 2, vsync: this);
|
||||
Future.microtask(
|
||||
() async {
|
||||
await Health().configure();
|
||||
context.read<HealthProvider>().fetchHealthData();
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_tabController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
backgroundColor: AppColors.bgScaffoldColor,
|
||||
body: Consumer<HealthProvider>(
|
||||
builder: (context, healthProvider, child) {
|
||||
return SingleChildScrollView(
|
||||
child: Column(
|
||||
children: [
|
||||
SizedBox(height: 96.h),
|
||||
CustomTabBar(
|
||||
activeTextColor: Color(0xffED1C2B),
|
||||
activeBackgroundColor: Color(0xffED1C2B).withValues(alpha: .1),
|
||||
tabs: [
|
||||
CustomTabBarModel(null, "Overview".needTranslation),
|
||||
CustomTabBarModel(null, "Details".needTranslation),
|
||||
],
|
||||
onTabChange: (index) {
|
||||
healthProvider.onTabChanged(index);
|
||||
},
|
||||
).paddingSymmetrical(24.h, 0.h),
|
||||
SizedBox(height: 24.h),
|
||||
getSelectedTabData(healthProvider.selectedTabIndex, healthProvider).paddingSymmetrical(24.w, 0),
|
||||
],
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
floatingActionButton: FloatingActionButton(
|
||||
onPressed: () => context.read<HealthProvider>().fetchHealthData(),
|
||||
tooltip: 'Refresh health data',
|
||||
child: Icon(Icons.refresh),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget getSelectedTabData(int index, HealthProvider healthProvider) {
|
||||
switch (index) {
|
||||
case 0:
|
||||
return _buildOverviewTab(healthProvider);
|
||||
case 1:
|
||||
return _buildDetailsTab(healthProvider);
|
||||
default:
|
||||
SizedBox.shrink();
|
||||
}
|
||||
return Container();
|
||||
}
|
||||
|
||||
Widget _buildOverviewTab(HealthProvider healthProvider) {
|
||||
if (healthProvider.isLoading) {
|
||||
return _buildLoadingState();
|
||||
}
|
||||
|
||||
if (healthProvider.error != null) {
|
||||
return _buildErrorState(healthProvider.error!);
|
||||
}
|
||||
return CustomScrollView(
|
||||
shrinkWrap: true,
|
||||
physics: NeverScrollableScrollPhysics(),
|
||||
slivers: [
|
||||
SliverToBoxAdapter(
|
||||
child: _buildTimeRangeSelector(healthProvider),
|
||||
),
|
||||
SliverPadding(
|
||||
padding: EdgeInsets.symmetric(vertical: 12.w),
|
||||
sliver: SliverGrid(
|
||||
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
|
||||
crossAxisCount: 2,
|
||||
mainAxisSpacing: 16,
|
||||
crossAxisSpacing: 16,
|
||||
childAspectRatio: 0.62,
|
||||
),
|
||||
delegate: SliverChildBuilderDelegate(
|
||||
(context, index) {
|
||||
final metric = HealthMetrics.metrics[index];
|
||||
return HealthMetricCard(
|
||||
metric: metric,
|
||||
data: healthProvider.healthData[metric.type] ?? [],
|
||||
onTap: () => _showMetricDetails(context, metric, healthProvider),
|
||||
);
|
||||
},
|
||||
childCount: HealthMetrics.metrics.length,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildDetailsTab(HealthProvider healthProvider) {
|
||||
return ListView.builder(
|
||||
padding: const EdgeInsets.all(16),
|
||||
itemCount: HealthMetrics.metrics.length,
|
||||
shrinkWrap: true,
|
||||
itemBuilder: (context, index) {
|
||||
final metric = HealthMetrics.metrics[index];
|
||||
final data = healthProvider.healthData[metric.type] ?? [];
|
||||
|
||||
return Card(
|
||||
color: AppColors.whiteColor,
|
||||
margin: EdgeInsets.only(bottom: 16),
|
||||
child: ExpansionTile(
|
||||
leading: Icon(
|
||||
metric.icon,
|
||||
color: metric.color,
|
||||
size: 32.h,
|
||||
),
|
||||
// title: Text(metric.name),
|
||||
title: (getIt.get<AppState>().isArabic() ? metric.nameAr : metric.nameEn).toText14(isBold: true),
|
||||
subtitle: Text(
|
||||
data.isEmpty ? LocaleKeys.noDataAvailable.tr(context: context) : '${_getValueAsDouble(data.last.value, metric.type).toStringAsFixed(1)} ${metric.unit}',
|
||||
),
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(16),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
metric.description.toText13(),
|
||||
SizedBox(height: 16.h),
|
||||
if (data.isNotEmpty) ...[
|
||||
Text(
|
||||
'History',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 16,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
...data.reversed
|
||||
.take(5)
|
||||
.map((point) => Padding(
|
||||
padding: const EdgeInsets.only(bottom: 8),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
dateFormat.format(point.dateFrom),
|
||||
style: TextStyle(color: Colors.grey[600]),
|
||||
),
|
||||
Text(
|
||||
'${_getValueAsDouble(point.value, metric.type).toStringAsFixed(1)} ${metric.unit}',
|
||||
style: TextStyle(fontWeight: FontWeight.bold),
|
||||
),
|
||||
],
|
||||
),
|
||||
))
|
||||
.toList(),
|
||||
],
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildTimeRangeSelector(HealthProvider provider) {
|
||||
return Container(
|
||||
height: 40,
|
||||
child: ListView(
|
||||
scrollDirection: Axis.horizontal,
|
||||
children: [
|
||||
for (final range in ['1D', '7D', '1M', '3M', '1Y'])
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(right: 8),
|
||||
child: ChoiceChip(
|
||||
label: Text(range),
|
||||
labelStyle: TextStyle(
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
checkmarkColor: AppColors.primaryRedColor,
|
||||
selected: provider.selectedTimeRange == range,
|
||||
selectedColor: AppColors.secondaryLightRedColor,
|
||||
onSelected: (selected) {
|
||||
if (selected) {
|
||||
provider.updateTimeRange(range);
|
||||
}
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildLoadingState() {
|
||||
return Center(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
CircularProgressIndicator(),
|
||||
SizedBox(height: 16),
|
||||
Text('Loading health data...'),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildErrorState(String error) {
|
||||
return Center(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Icon(
|
||||
Icons.error_outline,
|
||||
size: 48,
|
||||
color: Colors.red,
|
||||
),
|
||||
SizedBox(height: 16),
|
||||
Text(
|
||||
'Error loading health data',
|
||||
style: TextStyle(
|
||||
fontSize: 18,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Text(
|
||||
error,
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(color: Colors.grey[600]),
|
||||
),
|
||||
SizedBox(height: 24),
|
||||
ElevatedButton(
|
||||
onPressed: () => context.read<HealthProvider>().fetchHealthData(),
|
||||
child: Text('Try Again'),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
void _showMetricDetails(
|
||||
BuildContext context,
|
||||
HealthMetricInfo metric,
|
||||
HealthProvider provider,
|
||||
) {
|
||||
final data = provider.healthData[metric.type] ?? [];
|
||||
|
||||
showModalBottomSheet(
|
||||
context: context,
|
||||
isScrollControlled: true,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.vertical(top: Radius.circular(20)),
|
||||
),
|
||||
builder: (context) => DraggableScrollableSheet(
|
||||
initialChildSize: 0.7,
|
||||
minChildSize: 0.5,
|
||||
maxChildSize: 0.95,
|
||||
expand: false,
|
||||
builder: (context, scrollController) => Container(
|
||||
padding: EdgeInsets.all(16),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Center(
|
||||
child: Container(
|
||||
width: 40,
|
||||
height: 4,
|
||||
margin: EdgeInsets.only(bottom: 16),
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.grey[300],
|
||||
borderRadius: BorderRadius.circular(2),
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
Icon(metric.icon, color: metric.color, size: 30),
|
||||
SizedBox(width: 16),
|
||||
(getIt.get<AppState>().isArabic() ? metric.nameAr : metric.nameEn).toText24(isBold: true),
|
||||
// Text(
|
||||
// metric.name,
|
||||
// style: TextStyle(
|
||||
// fontSize: 24,
|
||||
// fontWeight: FontWeight.bold,
|
||||
// ),
|
||||
// ),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 16),
|
||||
Text(
|
||||
metric.description,
|
||||
style: TextStyle(
|
||||
color: Colors.grey[600],
|
||||
fontSize: 16,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 24),
|
||||
Text(
|
||||
'Healthy Range',
|
||||
style: TextStyle(
|
||||
fontSize: 18,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
'${metric.minHealthyValue} - ${metric.maxHealthyValue} ${metric.unit}'.toText16(isBold: true, color: AppColors.primaryRedColor),
|
||||
// Text(
|
||||
// '${metric.minHealthyValue} - ${metric.maxHealthyValue} ${metric.unit}',
|
||||
// style: TextStyle(
|
||||
// color: mainPurple,
|
||||
// fontSize: 16,
|
||||
// ),
|
||||
// ),
|
||||
SizedBox(height: 24),
|
||||
if (data.isNotEmpty) ...[
|
||||
Text(
|
||||
'History',
|
||||
style: TextStyle(
|
||||
fontSize: 18,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 16),
|
||||
Expanded(
|
||||
child: ListView.builder(
|
||||
controller: scrollController,
|
||||
itemCount: data.length,
|
||||
itemBuilder: (context, index) {
|
||||
final point = data[data.length - 1 - index];
|
||||
final value = _getValueAsDouble(point.value, metric.type);
|
||||
return Card(
|
||||
child: ListTile(
|
||||
title: Text(
|
||||
'${value.toStringAsFixed(1)} ${metric.unit}',
|
||||
style: TextStyle(fontWeight: FontWeight.bold),
|
||||
),
|
||||
subtitle: Text(
|
||||
// dateFormat.format(point.dateFrom),
|
||||
Utils.getMonthDayYearDateFormatted(point.dateFrom)
|
||||
// dateFormat.format(point.dateFrom),
|
||||
),
|
||||
trailing: Icon(
|
||||
value >= metric.minHealthyValue && value <= metric.maxHealthyValue ? Icons.check_circle : Icons.warning,
|
||||
color: value >= metric.minHealthyValue && value <= metric.maxHealthyValue ? AppColors.textColor : Colors.orange,
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
] else
|
||||
Center(
|
||||
child: Text(
|
||||
'No data available',
|
||||
style: TextStyle(color: Colors.grey[600]),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
// Add this helper method to the _HealthDashboardState class
|
||||
double _getValueAsDouble(HealthValue value, HealthDataType type) {
|
||||
if (value is NumericHealthValue) {
|
||||
// if(type == HealthDataType.BLOOD_OXYGEN) {
|
||||
// return (value.numericValue.toDouble() * 100);
|
||||
// } else {
|
||||
return value.numericValue.toDouble();
|
||||
// }
|
||||
}
|
||||
return 0.0;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,464 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:easy_localization/easy_localization.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:health/health.dart';
|
||||
import 'package:hmg_patient_app_new/core/app_assets.dart';
|
||||
import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
|
||||
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
|
||||
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
|
||||
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
|
||||
import 'package:hmg_patient_app_new/presentation/smartwatches/health_dashboard/health_dashboard.dart';
|
||||
import 'package:hmg_patient_app_new/theme/colors.dart';
|
||||
import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
|
||||
import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
|
||||
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
|
||||
|
||||
class SmartwatchInstructionsPage extends StatelessWidget {
|
||||
const SmartwatchInstructionsPage({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
backgroundColor: AppColors.bgScaffoldColor,
|
||||
body: CollapsingListView(
|
||||
title: LocaleKeys.smartWatches.tr(),
|
||||
child: Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 24.h),
|
||||
child: SingleChildScrollView(
|
||||
child: Platform.isIOS ? getIOSInstructionsUI(context) : getAndroidInstructionsUI(context),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget getAndroidInstructionsUI(BuildContext context) {
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
"Supported Smart Watches".needTranslation.toText20(isBold: true),
|
||||
SizedBox(height: 16.h),
|
||||
Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: Container(
|
||||
margin: EdgeInsets.only(top: 10.0),
|
||||
child: Row(
|
||||
children: [
|
||||
Image.asset("assets/images/png/smartwatches/galaxy_watch_ultra.jpg", width: 70.0, height: 70.0),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 8.0, right: 8.0),
|
||||
child: SizedBox(
|
||||
width: MediaQuery.of(context).size.width * 0.21,
|
||||
child: Text("Galaxy Watch Ultra", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: Container(
|
||||
margin: EdgeInsets.only(top: 10.0),
|
||||
child: Row(
|
||||
children: [
|
||||
Image.asset("assets/images/png/smartwatches/galaxy_watch_8_classic.jpeg", width: 70.0, height: 70.0),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 8.0, right: 8.0),
|
||||
child: SizedBox(
|
||||
width: MediaQuery.of(context).size.width * 0.21,
|
||||
child: Text("Galaxy Watch 8 Classic", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
Container(
|
||||
margin: EdgeInsets.only(top: 10.0),
|
||||
child: Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: Container(
|
||||
margin: EdgeInsets.only(top: 15.0),
|
||||
child: Row(
|
||||
children: [
|
||||
Image.asset("assets/images/png/smartwatches/galaxy_watch_8.jpg", width: 70.0, height: 70.0),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 8.0, right: 8.0),
|
||||
child: Container(
|
||||
width: MediaQuery.of(context).size.width * 0.21,
|
||||
child: Text("Galaxy Watch 8", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: Container(
|
||||
margin: EdgeInsets.only(top: 15.0),
|
||||
child: Row(
|
||||
children: [
|
||||
Image.asset("assets/images/png/smartwatches/galaxy_watch_7_classic.jpg", width: 70.0, height: 70.0),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 8.0, right: 8.0),
|
||||
child: SizedBox(
|
||||
width: MediaQuery.of(context).size.width * 0.21,
|
||||
child: Text("Galaxy Watch 7 Classic", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
Container(
|
||||
margin: EdgeInsets.only(top: 10.0),
|
||||
child: Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: Container(
|
||||
margin: EdgeInsets.only(top: 15.0),
|
||||
child: Row(
|
||||
children: [
|
||||
Image.asset("assets/images/png/smartwatches/galaxy_watch_7.webp", width: 70.0, height: 70.0),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 8.0, right: 8.0),
|
||||
child: SizedBox(
|
||||
width: MediaQuery.of(context).size.width * 0.21,
|
||||
child: Text("Galaxy Watch 7", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: Container(
|
||||
margin: EdgeInsets.only(top: 15.0),
|
||||
child: Row(
|
||||
children: [
|
||||
Image.asset("assets/images/png/smartwatches/galaxy_fit_3.jpg", width: 70.0, height: 70.0),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 8.0, right: 8.0),
|
||||
child: SizedBox(
|
||||
width: MediaQuery.of(context).size.width * 0.21,
|
||||
child: Text("Galaxy Fit3", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
SizedBox(height: 12),
|
||||
"Please make sure that your Samsung Watch is connected to your Phone, is actively synced & updated.".needTranslation.toText14(isBold: true),
|
||||
SizedBox(height: 12),
|
||||
"Before syncing data, please make sure that you have followed the instructions properly.".needTranslation.toText14(isBold: true),
|
||||
SizedBox(height: 12),
|
||||
InkWell(
|
||||
onTap: () {
|
||||
showInstructionsDialog(context);
|
||||
},
|
||||
child: "View watch instructions".needTranslation.toText12(isBold: true, color: AppColors.textColor, isUnderLine: true)),
|
||||
SizedBox(
|
||||
height: 130.h,
|
||||
),
|
||||
CustomButton(
|
||||
text: LocaleKeys.confirm.tr(context: context),
|
||||
onPressed: () async {
|
||||
await Health().getHealthConnectSdkStatus().then((val) {
|
||||
print('Health Connect SDK Status: $val');
|
||||
if (val == HealthConnectSdkStatus.sdkAvailable) {
|
||||
// Navigator.of(context).push(
|
||||
// FadePage(
|
||||
// page: HealthDashboard(), // Replace with the actual vital signs page
|
||||
// // page: HealthApp(), // Replace with the actual vital signs page
|
||||
// ),
|
||||
// );
|
||||
} else {
|
||||
// Utils.showAppDialog(context, LocaleKeys.error.tr(context: context), LocaleKeys.healthConnectNotInstalled.tr(), () {
|
||||
// Navigator.pop(context);
|
||||
// Uri uri = Uri.parse("https://play.google.com/store/apps/details?id=com.google.android.apps.healthdata");
|
||||
// launchUrl(uri, mode: LaunchMode.externalApplication);
|
||||
// });
|
||||
// return;
|
||||
}
|
||||
});
|
||||
},
|
||||
backgroundColor: AppColors.primaryRedColor,
|
||||
borderColor: AppColors.primaryRedColor,
|
||||
textColor: AppColors.whiteColor,
|
||||
fontSize: 16.f,
|
||||
fontWeight: FontWeight.w500,
|
||||
borderRadius: 10.r,
|
||||
padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
|
||||
height: 50.h,
|
||||
iconColor: AppColors.whiteColor,
|
||||
iconSize: 18.h,
|
||||
),
|
||||
// DefaultButton(
|
||||
// LocaleKeys.confirm.tr(context: context),
|
||||
// () async {
|
||||
// await Health().getHealthConnectSdkStatus().then((val) {
|
||||
// print('Health Connect SDK Status: $val');
|
||||
// if (val == HealthConnectSdkStatus.sdkAvailable) {
|
||||
// Navigator.of(context).push(
|
||||
// FadePage(
|
||||
// page: HealthDashboard(), // Replace with the actual vital signs page
|
||||
// // page: HealthApp(), // Replace with the actual vital signs page
|
||||
// ),
|
||||
// );
|
||||
// } else {
|
||||
// Utils.showAppDialog(context, LocaleKeys.error.tr(context: context), LocaleKeys.healthConnectNotInstalled.tr(), () {
|
||||
// Navigator.pop(context);
|
||||
// Uri uri = Uri.parse("https://play.google.com/store/apps/details?id=com.google.android.apps.healthdata");
|
||||
// launchUrl(uri, mode: LaunchMode.externalApplication);
|
||||
// });
|
||||
// return;
|
||||
// }
|
||||
// });
|
||||
// },
|
||||
// )
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
Widget getIOSInstructionsUI(BuildContext context) {
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
"Supported Smart Watches".needTranslation.toText20(isBold: true),
|
||||
SizedBox(height: 16.h),
|
||||
Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: Container(
|
||||
margin: EdgeInsets.only(top: 10.0),
|
||||
child: Row(
|
||||
children: [
|
||||
Image.asset("assets/images/png/smartwatches/apple-watch-1.jpeg", width: 70.0, height: 70.0),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 8.0, right: 8.0),
|
||||
child: Container(
|
||||
width: MediaQuery.of(context).size.width * 0.21,
|
||||
child: Text("Apple Watch Series 5", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: Container(
|
||||
margin: EdgeInsets.only(top: 10.0),
|
||||
child: Row(
|
||||
children: [
|
||||
Image.asset("assets/images/png/smartwatches/apple-watch-2.jpg", width: 70.0, height: 70.0),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 8.0, right: 8.0),
|
||||
child: Container(
|
||||
width: MediaQuery.of(context).size.width * 0.21,
|
||||
child: Text("Apple Watch Series 6", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
Container(
|
||||
margin: EdgeInsets.only(top: 10.0),
|
||||
child: Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: Container(
|
||||
margin: EdgeInsets.only(top: 15.0),
|
||||
child: Row(
|
||||
children: [
|
||||
Image.asset("assets/images/png/smartwatches/apple-watch-3.jpg", width: 70.0, height: 70.0),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 8.0, right: 8.0),
|
||||
child: Container(
|
||||
width: MediaQuery.of(context).size.width * 0.21,
|
||||
child: Text("Apple Watch Series 7", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: Container(
|
||||
margin: EdgeInsets.only(top: 15.0),
|
||||
child: Row(
|
||||
children: [
|
||||
Image.asset("assets/images/png/smartwatches/apple-watch-4.jpg", width: 70.0, height: 70.0),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 8.0, right: 8.0),
|
||||
child: Container(
|
||||
width: MediaQuery.of(context).size.width * 0.21,
|
||||
child: Text("Apple Watch Series 8", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
Container(
|
||||
margin: EdgeInsets.only(top: 10.0),
|
||||
child: Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: Container(
|
||||
margin: EdgeInsets.only(top: 15.0),
|
||||
child: Row(
|
||||
children: [
|
||||
Image.asset("assets/images/png/smartwatches/apple-watch-5.jpg", width: 70.0, height: 70.0),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 8.0, right: 8.0),
|
||||
child: Container(
|
||||
width: MediaQuery.of(context).size.width * 0.21,
|
||||
child: Text("Apple Watch Series 9", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: Container(
|
||||
margin: EdgeInsets.only(top: 15.0),
|
||||
child: Row(
|
||||
children: [
|
||||
Image.asset("assets/images/png/smartwatches/Apple-Watch-6.png", width: 70.0, height: 70.0),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 8.0, right: 8.0),
|
||||
child: Container(
|
||||
width: MediaQuery.of(context).size.width * 0.21,
|
||||
child: Text("Apple Watch Series 10", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
SizedBox(height: 12),
|
||||
"Please make sure that your Apple Watch is connected to your iPhone, is actively synced & updated.".toText14(isBold: true),
|
||||
SizedBox(height: 12),
|
||||
"Before syncing data, please make sure that you have followed the instructions properly.".toText14(isBold: true),
|
||||
SizedBox(height: 12),
|
||||
InkWell(
|
||||
onTap: () {
|
||||
showInstructionsDialog(context);
|
||||
},
|
||||
child: "View watch instructions".toText12(isBold: true, color: AppColors.textColor, isUnderLine: true),
|
||||
),
|
||||
SizedBox(
|
||||
height: 130.h,
|
||||
),
|
||||
CustomButton(
|
||||
text: LocaleKeys.confirm.tr(context: context),
|
||||
onPressed: () async {
|
||||
Navigator.of(context).push(
|
||||
CustomPageRoute(
|
||||
page: HealthDashboard(),
|
||||
),
|
||||
);
|
||||
},
|
||||
backgroundColor: AppColors.primaryRedColor,
|
||||
borderColor: AppColors.primaryRedColor,
|
||||
textColor: AppColors.whiteColor,
|
||||
fontSize: 16.f,
|
||||
fontWeight: FontWeight.w500,
|
||||
borderRadius: 10.r,
|
||||
padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
|
||||
height: 50.h,
|
||||
iconColor: AppColors.whiteColor,
|
||||
iconSize: 18.h,
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
showInstructionsDialog(BuildContext context) {
|
||||
showGeneralDialog(
|
||||
barrierColor: Colors.black.withOpacity(0.5),
|
||||
transitionBuilder: (context, a1, a2, widget) {
|
||||
final curvedValue = Curves.easeInOutBack.transform(a1.value) - 1.0;
|
||||
return Transform(
|
||||
transform: Matrix4.translationValues(0.0, curvedValue * 200, 0.0),
|
||||
child: Opacity(
|
||||
opacity: a1.value,
|
||||
child: Dialog(
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
width: 350.0,
|
||||
padding: EdgeInsets.all(21),
|
||||
color: Colors.white,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
"SmartWatch Tracker".toText18(),
|
||||
IconButton(
|
||||
icon: Icon(
|
||||
Icons.close,
|
||||
color: Color(0xff2E303A),
|
||||
),
|
||||
onPressed: () {
|
||||
Navigator.pop(context);
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
(Platform.isIOS
|
||||
? "Make sure that you have installed 'Health' App & 'Watch' App from Apple Store."
|
||||
: "Please make sure that your Samsung Watch is connected to your Phone, is actively synced & updated.")
|
||||
.needTranslation
|
||||
.toText14(),
|
||||
SizedBox(height: 12),
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
transitionDuration: Duration(milliseconds: 500),
|
||||
barrierDismissible: true,
|
||||
barrierLabel: '',
|
||||
context: context,
|
||||
pageBuilder: (context, animation1, animation2) {
|
||||
return SizedBox();
|
||||
//Chanbged By Aamir
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,87 @@
|
||||
import 'package:fl_chart/fl_chart.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class HealthChart extends StatelessWidget {
|
||||
final List<FlSpot> spots;
|
||||
final String title;
|
||||
final Color gradientColor;
|
||||
|
||||
const HealthChart({
|
||||
Key? key,
|
||||
required this.spots,
|
||||
required this.title,
|
||||
required this.gradientColor,
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
height: 200,
|
||||
padding: const EdgeInsets.all(16),
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.circular(16),
|
||||
boxShadow: [
|
||||
BoxShadow(
|
||||
color: Colors.grey.withOpacity(0.1),
|
||||
spreadRadius: 5,
|
||||
blurRadius: 7,
|
||||
offset: const Offset(0, 3),
|
||||
),
|
||||
],
|
||||
),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
title,
|
||||
style: const TextStyle(
|
||||
fontSize: 18,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
Expanded(
|
||||
child: LineChart(
|
||||
LineChartData(
|
||||
gridData: FlGridData(show: false),
|
||||
titlesData: FlTitlesData(show: false),
|
||||
borderData: FlBorderData(show: false),
|
||||
minX: 0,
|
||||
maxX: spots.length.toDouble() - 1,
|
||||
minY: spots.map((e) => e.y).reduce((a, b) => a < b ? a : b),
|
||||
maxY: spots.map((e) => e.y).reduce((a, b) => a > b ? a : b),
|
||||
lineBarsData: [
|
||||
LineChartBarData(
|
||||
spots: spots,
|
||||
isCurved: true,
|
||||
gradient: LinearGradient(
|
||||
colors: [
|
||||
gradientColor.withOpacity(0.5),
|
||||
gradientColor,
|
||||
],
|
||||
),
|
||||
barWidth: 3,
|
||||
isStrokeCapRound: true,
|
||||
dotData: FlDotData(show: false),
|
||||
belowBarData: BarAreaData(
|
||||
show: true,
|
||||
gradient: LinearGradient(
|
||||
colors: [
|
||||
gradientColor.withOpacity(0.1),
|
||||
gradientColor.withOpacity(0.2),
|
||||
],
|
||||
begin: Alignment.topCenter,
|
||||
end: Alignment.bottomCenter,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,97 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:easy_localization/easy_localization.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:health/health.dart';
|
||||
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
|
||||
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
|
||||
import 'package:hmg_patient_app_new/theme/colors.dart';
|
||||
|
||||
class HealthMetricInfo {
|
||||
final HealthDataType type;
|
||||
final String nameEn;
|
||||
final String nameAr;
|
||||
final String unit;
|
||||
final Color color;
|
||||
final IconData icon;
|
||||
final String description;
|
||||
final double minHealthyValue;
|
||||
final double maxHealthyValue;
|
||||
final String svgIcon;
|
||||
|
||||
const HealthMetricInfo(
|
||||
{required this.type,
|
||||
required this.nameEn,
|
||||
required this.nameAr,
|
||||
required this.unit,
|
||||
required this.color,
|
||||
required this.icon,
|
||||
required this.description,
|
||||
required this.minHealthyValue,
|
||||
required this.maxHealthyValue,
|
||||
required this.svgIcon});
|
||||
}
|
||||
|
||||
class HealthMetrics {
|
||||
static final metrics = [
|
||||
HealthMetricInfo(
|
||||
type: HealthDataType.HEART_RATE,
|
||||
nameEn: "Heart Rate",
|
||||
nameAr: "معدل النبض",
|
||||
unit: 'BPM',
|
||||
color: AppColors.primaryRedColor,
|
||||
icon: Icons.favorite,
|
||||
description: "Your heart rate indicates how many times your heart beats per minute".needTranslation,
|
||||
minHealthyValue: 60,
|
||||
maxHealthyValue: 100,
|
||||
svgIcon: "assets/images/smartwatches/heartrate_icon.svg"),
|
||||
HealthMetricInfo(
|
||||
type: HealthDataType.BLOOD_OXYGEN,
|
||||
nameEn: "Blood Oxygen",
|
||||
nameAr: "أكسجين الدم",
|
||||
unit: '%',
|
||||
// color: Colors.blue,
|
||||
color: Color(0xff3A3558),
|
||||
icon: Icons.air,
|
||||
description: "Blood oxygen level indicates how much oxygen your red blood cells are carrying".needTranslation,
|
||||
minHealthyValue: 95,
|
||||
maxHealthyValue: 100,
|
||||
svgIcon: "assets/images/smartwatches/bloodoxygen_icon.svg"),
|
||||
HealthMetricInfo(
|
||||
type: HealthDataType.STEPS,
|
||||
nameEn: "Steps",
|
||||
nameAr: "خطوات",
|
||||
unit: 'steps',
|
||||
// color: Colors.green,
|
||||
color: Color(0xff3263B8),
|
||||
icon: Icons.directions_walk,
|
||||
description: "Number of steps taken throughout the day".needTranslation,
|
||||
minHealthyValue: 7000,
|
||||
maxHealthyValue: 15000,
|
||||
svgIcon: "assets/images/smartwatches/steps_icon.svg"),
|
||||
HealthMetricInfo(
|
||||
type: Platform.isIOS ? HealthDataType.ACTIVE_ENERGY_BURNED : HealthDataType.TOTAL_CALORIES_BURNED,
|
||||
nameEn: "Active Calories",
|
||||
nameAr: "السعرات الحرارية النشطة",
|
||||
unit: 'kcal',
|
||||
color: Color(0xffD59E95),
|
||||
icon: Icons.local_fire_department,
|
||||
description: "Calories burned during physical activity".needTranslation,
|
||||
minHealthyValue: 300,
|
||||
maxHealthyValue: 1000,
|
||||
svgIcon: "assets/images/smartwatches/calories_icon.svg"),
|
||||
HealthMetricInfo(
|
||||
type: Platform.isIOS ? HealthDataType.DISTANCE_WALKING_RUNNING : HealthDataType.DISTANCE_DELTA,
|
||||
nameEn: "Distance Covered",
|
||||
nameAr: "المسافة المغطاة",
|
||||
unit: 'KMs',
|
||||
// color: mainPurple,
|
||||
color: Color(0xff6A46F5),
|
||||
icon: Icons.directions_run,
|
||||
description: "Distance covered throughout the day".needTranslation,
|
||||
minHealthyValue: 3,
|
||||
maxHealthyValue: 10,
|
||||
svgIcon: "assets/images/smartwatches/distance_icon.svg"),
|
||||
// Add more metrics as needed
|
||||
];
|
||||
}
|
||||
@ -0,0 +1,151 @@
|
||||
import 'package:easy_localization/easy_localization.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:health/health.dart';
|
||||
import 'package:fl_chart/fl_chart.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/utils/size_utils.dart';
|
||||
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
|
||||
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
|
||||
import 'package:hmg_patient_app_new/presentation/smartwatches/widgets/health_metric.dart';
|
||||
import 'package:hmg_patient_app_new/theme/colors.dart';
|
||||
|
||||
class HealthMetricCard extends StatelessWidget {
|
||||
final HealthMetricInfo metric;
|
||||
final List<HealthDataPoint> data;
|
||||
final VoidCallback onTap;
|
||||
|
||||
const HealthMetricCard({
|
||||
Key? key,
|
||||
required this.metric,
|
||||
required this.data,
|
||||
required this.onTap,
|
||||
}) : super(key: key);
|
||||
|
||||
// Helper method to convert HealthValue to double
|
||||
double _getValueAsDouble(HealthValue value, HealthDataType type) {
|
||||
if (value is NumericHealthValue) {
|
||||
return value.numericValue.toDouble();
|
||||
}
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final latestValue = data.isNotEmpty ? _getValueAsDouble(data.last.value, data.last.type) : 0.0;
|
||||
final isHealthy = latestValue >= metric.minHealthyValue && latestValue <= metric.maxHealthyValue;
|
||||
|
||||
return Card(
|
||||
color: AppColors.whiteColor,
|
||||
elevation: 4,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(20),
|
||||
),
|
||||
child: InkWell(
|
||||
onTap: onTap,
|
||||
borderRadius: BorderRadius.circular(20),
|
||||
child: Container(
|
||||
padding: const EdgeInsets.all(16),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
SvgPicture.asset(
|
||||
metric.svgIcon,
|
||||
height: 30.h,
|
||||
width: 30.h,
|
||||
fit: BoxFit.contain,
|
||||
// color: color,
|
||||
),
|
||||
// Icon(
|
||||
// metric.icon,
|
||||
// color: metric.color,
|
||||
// size: 30,
|
||||
// ),
|
||||
if (data.isNotEmpty)
|
||||
Container(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
horizontal: 8,
|
||||
vertical: 4,
|
||||
),
|
||||
decoration: BoxDecoration(
|
||||
color: isHealthy ? Colors.green[100] : Color(0xffD7D2F3),
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
),
|
||||
child: Text(
|
||||
isHealthy ? "Healthy".needTranslation : 'Warning'.needTranslation,
|
||||
style: TextStyle(
|
||||
color: isHealthy ? Colors.green[700] : AppColors.blackColor,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
(getIt.get<AppState>().isArabic() ? metric.nameAr : metric.nameEn).toText18(isBold: true, maxlines: 1),
|
||||
// Text(
|
||||
// metric.name,
|
||||
// style: const TextStyle(
|
||||
// fontSize: 18,
|
||||
// fontWeight: FontWeight.bold,
|
||||
// ),
|
||||
// ),
|
||||
const SizedBox(height: 8),
|
||||
Text(
|
||||
data.isEmpty ? LocaleKeys.noDataAvailable.tr(context: context) : '${latestValue.toStringAsFixed(metric.type == HealthDataType.STEPS ? 0 : 1)} ${metric.unit}',
|
||||
style: TextStyle(
|
||||
fontSize: 24,
|
||||
fontWeight: FontWeight.bold,
|
||||
color: metric.color,
|
||||
),
|
||||
),
|
||||
if (data.isNotEmpty) ...[
|
||||
const SizedBox(height: 16),
|
||||
SizedBox(
|
||||
height: 100,
|
||||
child: LineChart(
|
||||
LineChartData(
|
||||
gridData: FlGridData(show: false),
|
||||
titlesData: FlTitlesData(show: false),
|
||||
borderData: FlBorderData(show: false),
|
||||
lineBarsData: [
|
||||
LineChartBarData(
|
||||
spots: _convertToSpots(data),
|
||||
isCurved: true,
|
||||
color: metric.color,
|
||||
barWidth: 3,
|
||||
isStrokeCapRound: true,
|
||||
dotData: FlDotData(show: false),
|
||||
belowBarData: BarAreaData(
|
||||
show: true,
|
||||
color: metric.color.withOpacity(0.1),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
List<FlSpot> _convertToSpots(List<HealthDataPoint> data) {
|
||||
if (data.isEmpty) return [];
|
||||
|
||||
return List.generate(
|
||||
data.length,
|
||||
(index) => FlSpot(
|
||||
index.toDouble(),
|
||||
_getValueAsDouble(data[index].value, data[index].type),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||