feat: add dist files and correct build errors

This commit is contained in:
Ayobami
2025-07-02 15:02:43 +01:00
parent 7cf8caf9da
commit 4de59de7e5
57 changed files with 1074 additions and 297 deletions
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 319 B

+3
View File
@@ -0,0 +1,3 @@
<svg width="18" height="14" viewBox="0 0 18 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M17 7H1M1 7L7 13M1 7L7 1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 204 B

+3
View File
@@ -0,0 +1,3 @@
<svg width="18" height="14" viewBox="0 0 18 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1 7H17M17 7L11 1M17 7L11 13" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 208 B

+3
View File
@@ -0,0 +1,3 @@
<svg width="22" height="18" viewBox="0 0 22 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M5 8V12M17 6V10M16 1C18.4487 1 19.7731 1.37476 20.4321 1.66544C20.5199 1.70415 20.5638 1.72351 20.6904 1.84437C20.7663 1.91682 20.9049 2.12939 20.9405 2.22809C21 2.39274 21 2.48274 21 2.66274V13.4111C21 14.3199 21 14.7743 20.8637 15.0079C20.7251 15.2454 20.5914 15.3559 20.3319 15.4472C20.0769 15.5369 19.562 15.438 18.5322 15.2401C17.8114 15.1017 16.9565 15 16 15C13 15 10 17 6 17C3.55129 17 2.22687 16.6252 1.56788 16.3346C1.48012 16.2958 1.43624 16.2765 1.3096 16.1556C1.23369 16.0832 1.09512 15.8706 1.05947 15.7719C1 15.6073 1 15.5173 1 15.3373L1 4.58885C1 3.68009 1 3.2257 1.13628 2.99214C1.2749 2.75456 1.40859 2.64412 1.66806 2.55281C1.92314 2.46305 2.43803 2.56198 3.46783 2.75985C4.18862 2.89834 5.04348 3 6 3C9 3 12 1 16 1ZM13.5 9C13.5 10.3807 12.3807 11.5 11 11.5C9.61929 11.5 8.5 10.3807 8.5 9C8.5 7.61929 9.61929 6.5 11 6.5C12.3807 6.5 13.5 7.61929 13.5 9Z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

+3
View File
@@ -0,0 +1,3 @@
<svg width="16" height="18" viewBox="0 0 16 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1.33325 5.5C1.33325 4.09987 1.33325 3.3998 1.60574 2.86502C1.84542 2.39462 2.22787 2.01217 2.69828 1.77248C3.23306 1.5 3.93312 1.5 5.33325 1.5H10.6666C12.0667 1.5 12.7668 1.5 13.3016 1.77248C13.772 2.01217 14.1544 2.39462 14.3941 2.86502C14.6666 3.3998 14.6666 4.09987 14.6666 5.5V16.5L12.3749 14.8333L10.2916 16.5L7.99992 14.8333L5.70825 16.5L3.62492 14.8333L1.33325 16.5V5.5Z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 559 B

+3
View File
@@ -0,0 +1,3 @@
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M13 19V13.6C13 13.0399 13 12.7599 12.891 12.546C12.7951 12.3578 12.6422 12.2049 12.454 12.109C12.2401 12 11.9601 12 11.4 12H8.6C8.03995 12 7.75992 12 7.54601 12.109C7.35785 12.2049 7.20487 12.3578 7.10899 12.546C7 12.7599 7 13.0399 7 13.6V19M17 19V4.2C17 3.0799 17 2.51984 16.782 2.09202C16.5903 1.71569 16.2843 1.40973 15.908 1.21799C15.4802 1 14.9201 1 13.8 1H6.2C5.07989 1 4.51984 1 4.09202 1.21799C3.71569 1.40973 3.40973 1.71569 3.21799 2.09202C3 2.51984 3 3.0799 3 4.2V19M19 19H1M7.5 6H7.51M12.5 6H12.51M8 6C8 6.27614 7.77614 6.5 7.5 6.5C7.22386 6.5 7 6.27614 7 6C7 5.72386 7.22386 5.5 7.5 5.5C7.77614 5.5 8 5.72386 8 6ZM13 6C13 6.27614 12.7761 6.5 12.5 6.5C12.2239 6.5 12 6.27614 12 6C12 5.72386 12.2239 5.5 12.5 5.5C12.7761 5.5 13 5.72386 13 6Z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 932 B

+3
View File
@@ -0,0 +1,3 @@
<svg width="20" height="22" viewBox="0 0 20 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M19 9H1M14 1V5M6 1V5M5.8 21H14.2C15.8802 21 16.7202 21 17.362 20.673C17.9265 20.3854 18.3854 19.9265 18.673 19.362C19 18.7202 19 17.8802 19 16.2V7.8C19 6.11984 19 5.27976 18.673 4.63803C18.3854 4.07354 17.9265 3.6146 17.362 3.32698C16.7202 3 15.8802 3 14.2 3H5.8C4.11984 3 3.27976 3 2.63803 3.32698C2.07354 3.6146 1.6146 4.07354 1.32698 4.63803C1 5.27976 1 6.11984 1 7.8V16.2C1 17.8802 1 18.7202 1.32698 19.362C1.6146 19.9265 2.07354 20.3854 2.63803 20.673C3.27976 21 4.11984 21 5.8 21Z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 666 B

+3
View File
@@ -0,0 +1,3 @@
<svg width="14" height="8" viewBox="0 0 14 8" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1 1L7 7L13 1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 191 B

+5
View File
@@ -0,0 +1,5 @@
<svg width="19" height="4" viewBox="0 0 19 4" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M9.5 3C10.0523 3 10.5 2.55228 10.5 2C10.5 1.44772 10.0523 1 9.5 1C8.94772 1 8.5 1.44772 8.5 2C8.5 2.55228 8.94772 3 9.5 3Z" stroke="#98A2B3" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M16.5 3C17.0523 3 17.5 2.55228 17.5 2C17.5 1.44772 17.0523 1 16.5 1C15.9477 1 15.5 1.44772 15.5 2C15.5 2.55228 15.9477 3 16.5 3Z" stroke="#98A2B3" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M2.5 3C3.05228 3 3.5 2.55228 3.5 2C3.5 1.44772 3.05228 1 2.5 1C1.94772 1 1.5 1.44772 1.5 2C1.5 2.55228 1.94772 3 2.5 3Z" stroke="#98A2B3" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 752 B

+3
View File
@@ -0,0 +1,3 @@
<svg width="18" height="22" viewBox="0 0 18 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M11 1.26953V5.40007C11 5.96012 11 6.24015 11.109 6.45406C11.2049 6.64222 11.3578 6.7952 11.546 6.89108C11.7599 7.00007 12.0399 7.00007 12.6 7.00007H16.7305M6 15L8 17L12.5 12.5M11 1H5.8C4.11984 1 3.27976 1 2.63803 1.32698C2.07354 1.6146 1.6146 2.07354 1.32698 2.63803C1 3.27976 1 4.11984 1 5.8V16.2C1 17.8802 1 18.7202 1.32698 19.362C1.6146 19.9265 2.07354 20.3854 2.63803 20.673C3.27976 21 4.11984 21 5.8 21H12.2C13.8802 21 14.7202 21 15.362 20.673C15.9265 20.3854 16.3854 19.9265 16.673 19.362C17 18.7202 17 17.8802 17 16.2V7L11 1Z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 712 B

+3
View File
@@ -0,0 +1,3 @@
<svg width="18" height="22" viewBox="0 0 18 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M11 1.26953V5.40007C11 5.96012 11 6.24015 11.109 6.45406C11.2049 6.64222 11.3578 6.7952 11.546 6.89108C11.7599 7.00007 12.0399 7.00007 12.6 7.00007H16.7305M9 17V11M6 14H12M11 1H5.8C4.11984 1 3.27976 1 2.63803 1.32698C2.07354 1.6146 1.6146 2.07354 1.32698 2.63803C1 3.27976 1 4.11984 1 5.8V16.2C1 17.8802 1 18.7202 1.32698 19.362C1.6146 19.9265 2.07354 20.3854 2.63803 20.673C3.27976 21 4.11984 21 5.8 21H12.2C13.8802 21 14.7202 21 15.362 20.673C15.9265 20.3854 16.3854 19.9265 16.673 19.362C17 18.7202 17 17.8802 17 16.2V7L11 1Z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 708 B

+3
View File
@@ -0,0 +1,3 @@
<svg width="18" height="22" viewBox="0 0 18 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M11 1.26953V5.40007C11 5.96012 11 6.24015 11.109 6.45406C11.2049 6.64222 11.3578 6.7952 11.546 6.89108C11.7599 7.00007 12.0399 7.00007 12.6 7.00007H16.7305M6.84998 11.0022C7.02617 10.5014 7.37395 10.079 7.83171 9.80998C8.28947 9.54095 8.82767 9.4426 9.35099 9.53237C9.87431 9.62213 10.349 9.89421 10.6909 10.3004C11.0329 10.7066 11.22 11.2207 11.2192 11.7517C11.2192 13.2506 8.97089 14 8.97089 14M9 17H9.01M11 1H5.8C4.11984 1 3.27976 1 2.63803 1.32698C2.07354 1.6146 1.6146 2.07354 1.32698 2.63803C1 3.27976 1 4.11984 1 5.8V16.2C1 17.8802 1 18.7202 1.32698 19.362C1.6146 19.9265 2.07354 20.3854 2.63803 20.673C3.27976 21 4.11984 21 5.8 21H12.2C13.8802 21 14.7202 21 15.362 20.673C15.9265 20.3854 16.3854 19.9265 16.673 19.362C17 18.7202 17 17.8802 17 16.2V7L11 1Z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 943 B

+3
View File
@@ -0,0 +1,3 @@
<svg width="20" height="22" viewBox="0 0 20 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M17 9.5V5.8C17 4.11984 17 3.27976 16.673 2.63803C16.3854 2.07354 15.9265 1.6146 15.362 1.32698C14.7202 1 13.8802 1 12.2 1H5.8C4.11984 1 3.27976 1 2.63803 1.32698C2.07354 1.6146 1.6146 2.07354 1.32698 2.63803C1 3.27976 1 4.11984 1 5.8V16.2C1 17.8802 1 18.7202 1.32698 19.362C1.6146 19.9265 2.07354 20.3854 2.63803 20.673C3.27976 21 4.11984 21 5.8 21H8.5M19 21L17.5 19.5M18.5 17C18.5 18.933 16.933 20.5 15 20.5C13.067 20.5 11.5 18.933 11.5 17C11.5 15.067 13.067 13.5 15 13.5C16.933 13.5 18.5 15.067 18.5 17Z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 685 B

+6
View File
@@ -0,0 +1,6 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8.4 3H4.6C4.03995 3 3.75992 3 3.54601 3.10899C3.35785 3.20487 3.20487 3.35785 3.10899 3.54601C3 3.75992 3 4.03995 3 4.6V8.4C3 8.96005 3 9.24008 3.10899 9.45399C3.20487 9.64215 3.35785 9.79513 3.54601 9.89101C3.75992 10 4.03995 10 4.6 10H8.4C8.96005 10 9.24008 10 9.45399 9.89101C9.64215 9.79513 9.79513 9.64215 9.89101 9.45399C10 9.24008 10 8.96005 10 8.4V4.6C10 4.03995 10 3.75992 9.89101 3.54601C9.79513 3.35785 9.64215 3.20487 9.45399 3.10899C9.24008 3 8.96005 3 8.4 3Z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M19.4 3H15.6C15.0399 3 14.7599 3 14.546 3.10899C14.3578 3.20487 14.2049 3.35785 14.109 3.54601C14 3.75992 14 4.03995 14 4.6V8.4C14 8.96005 14 9.24008 14.109 9.45399C14.2049 9.64215 14.3578 9.79513 14.546 9.89101C14.7599 10 15.0399 10 15.6 10H19.4C19.9601 10 20.2401 10 20.454 9.89101C20.6422 9.79513 20.7951 9.64215 20.891 9.45399C21 9.24008 21 8.96005 21 8.4V4.6C21 4.03995 21 3.75992 20.891 3.54601C20.7951 3.35785 20.6422 3.20487 20.454 3.10899C20.2401 3 19.9601 3 19.4 3Z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M19.4 14H15.6C15.0399 14 14.7599 14 14.546 14.109C14.3578 14.2049 14.2049 14.3578 14.109 14.546C14 14.7599 14 15.0399 14 15.6V19.4C14 19.9601 14 20.2401 14.109 20.454C14.2049 20.6422 14.3578 20.7951 14.546 20.891C14.7599 21 15.0399 21 15.6 21H19.4C19.9601 21 20.2401 21 20.454 20.891C20.6422 20.7951 20.7951 20.6422 20.891 20.454C21 20.2401 21 19.9601 21 19.4V15.6C21 15.0399 21 14.7599 20.891 14.546C20.7951 14.3578 20.6422 14.2049 20.454 14.109C20.2401 14 19.9601 14 19.4 14Z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M8.4 14H4.6C4.03995 14 3.75992 14 3.54601 14.109C3.35785 14.2049 3.20487 14.3578 3.10899 14.546C3 14.7599 3 15.0399 3 15.6V19.4C3 19.9601 3 20.2401 3.10899 20.454C3.20487 20.6422 3.35785 20.7951 3.54601 20.891C3.75992 21 4.03995 21 4.6 21H8.4C8.96005 21 9.24008 21 9.45399 20.891C9.64215 20.7951 9.79513 20.6422 9.89101 20.454C10 20.2401 10 19.9601 10 19.4V15.6C10 15.0399 10 14.7599 9.89101 14.546C9.79513 14.3578 9.64215 14.2049 9.45399 14.109C9.24008 14 8.96005 14 8.4 14Z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

+3
View File
@@ -0,0 +1,3 @@
<svg width="20" height="21" viewBox="0 0 20 21" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6 16H14M9.0177 1.764L2.23539 7.03912C1.78202 7.39175 1.55534 7.56806 1.39203 7.78886C1.24737 7.98444 1.1396 8.20478 1.07403 8.43905C1 8.70352 1 8.9907 1 9.56505V16.8C1 17.9201 1 18.4801 1.21799 18.908C1.40973 19.2843 1.71569 19.5903 2.09202 19.782C2.51984 20 3.07989 20 4.2 20H15.8C16.9201 20 17.4802 20 17.908 19.782C18.2843 19.5903 18.5903 19.2843 18.782 18.908C19 18.4801 19 17.9201 19 16.8V9.56505C19 8.9907 19 8.70352 18.926 8.43905C18.8604 8.20478 18.7526 7.98444 18.608 7.78886C18.4447 7.56806 18.218 7.39175 17.7646 7.03913L10.9823 1.764C10.631 1.49075 10.4553 1.35412 10.2613 1.3016C10.0902 1.25526 9.9098 1.25526 9.73865 1.3016C9.54468 1.35412 9.36902 1.49075 9.0177 1.764Z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 864 B

+3
View File
@@ -0,0 +1,3 @@
<svg width="22" height="21" viewBox="0 0 22 21" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8 20V12.6C8 12.0399 8 11.7599 8.109 11.546C8.20487 11.3578 8.35785 11.2049 8.54601 11.109C8.75993 11 9.03995 11 9.6 11H12.4C12.9601 11 13.2401 11 13.454 11.109C13.6422 11.2049 13.7951 11.3578 13.891 11.546C14 11.7599 14 12.0399 14 12.6V20M1 8.5L10.04 1.72C10.3843 1.46181 10.5564 1.33271 10.7454 1.28294C10.9123 1.23902 11.0877 1.23902 11.2546 1.28295C11.4436 1.33271 11.6157 1.46181 11.96 1.72L21 8.5M3 7V16.8C3 17.9201 3 18.4802 3.21799 18.908C3.40974 19.2843 3.7157 19.5903 4.09202 19.782C4.51985 20 5.0799 20 6.2 20H15.8C16.9201 20 17.4802 20 17.908 19.782C18.2843 19.5903 18.5903 19.2843 18.782 18.908C19 18.4802 19 17.9201 19 16.8V7L12.92 2.44C12.2315 1.92361 11.8872 1.66542 11.5091 1.56589C11.1754 1.47804 10.8246 1.47804 10.4909 1.56589C10.1128 1.66542 9.76852 1.92361 9.08 2.44L3 7Z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 973 B

+3
View File
@@ -0,0 +1,3 @@
<svg width="22" height="20" viewBox="0 0 22 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M3.27209 18.7279L9.86863 12.1314C10.2646 11.7354 10.4627 11.5373 10.691 11.4632C10.8918 11.3979 11.1082 11.3979 11.309 11.4632C11.5373 11.5373 11.7354 11.7354 12.1314 12.1314L18.6839 18.6839M13 13L15.8686 10.1314C16.2646 9.73535 16.4627 9.53735 16.691 9.46316C16.8918 9.3979 17.1082 9.3979 17.309 9.46316C17.5373 9.53735 17.7354 9.73535 18.1314 10.1314L21 13M9 7C9 8.10457 8.10457 9 7 9C5.89543 9 5 8.10457 5 7C5 5.89543 5.89543 5 7 5C8.10457 5 9 5.89543 9 7ZM5.8 19H16.2C17.8802 19 18.7202 19 19.362 18.673C19.9265 18.3854 20.3854 17.9265 20.673 17.362C21 16.7202 21 15.8802 21 14.2V5.8C21 4.11984 21 3.27976 20.673 2.63803C20.3854 2.07354 19.9265 1.6146 19.362 1.32698C18.7202 1 17.8802 1 16.2 1H5.8C4.11984 1 3.27976 1 2.63803 1.32698C2.07354 1.6146 1.6146 2.07354 1.32698 2.63803C1 3.27976 1 4.11984 1 5.8V14.2C1 15.8802 1 16.7202 1.32698 17.362C1.6146 17.9265 2.07354 18.3854 2.63803 18.673C3.27976 19 4.11984 19 5.8 19Z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

File diff suppressed because one or more lines are too long
+368
View File
File diff suppressed because one or more lines are too long
+6
View File
@@ -0,0 +1,6 @@
<svg width="69" height="25" viewBox="0 0 69 25" fill=" none" xmlns="http://www.w3.org/2000/svg">
<path d="M7.95426 19.1764C6.3634 19.1764 4.96896 18.8828 3.77091 18.2957C2.57286 17.7086 1.63995 16.8476 0.972187 15.7125C0.324062 14.5775 0 13.2076 0 11.6029C0 10.0764 0.324062 8.74567 0.972187 7.61063C1.63995 6.47558 2.56304 5.59494 3.74145 4.9687C4.91986 4.3229 6.30448 4 7.89534 4C9.40763 4 10.7333 4.27398 11.8725 4.82193C13.0312 5.35032 13.9249 6.13311 14.5533 7.1703C15.2015 8.18793 15.5255 9.4404 15.5255 10.9277C15.5255 11.1821 15.5157 11.4267 15.4961 11.6616C15.4764 11.8768 15.447 12.0921 15.4077 12.3074H2.03275V10.5461H13.316L12.4911 11.6322C12.5108 11.4365 12.5206 11.2506 12.5206 11.0745C12.5206 10.8788 12.5206 10.6831 12.5206 10.4874C12.5206 9.13707 12.1278 8.13901 11.3422 7.49321C10.5762 6.82783 9.40763 6.49515 7.83642 6.49515C6.08844 6.49515 4.84129 6.89633 4.09497 7.69869C3.34864 8.50105 2.97548 9.65567 2.97548 11.1625V11.9258C2.97548 13.4522 3.34864 14.6166 4.09497 15.419C4.84129 16.2213 6.09826 16.6225 7.86588 16.6225C9.39781 16.6225 10.4977 16.3877 11.1654 15.918C11.8528 15.4288 12.1965 14.7536 12.1965 13.8925V13.6577H15.3782V13.9219C15.3782 14.9591 15.0542 15.8789 14.406 16.6812C13.7776 17.464 12.9036 18.0805 11.7841 18.5306C10.6842 18.9611 9.40763 19.1764 7.95426 19.1764Z"/>
<path d="M21.6795 18.8828H18.4978V4.29355H21.4143V8.43256L21.6795 8.57933V18.8828ZM21.6795 10.6929H20.9724V8.22707H21.6206C21.7581 7.42471 22.033 6.71042 22.4455 6.08418C22.8579 5.43838 23.4078 4.92957 24.0952 4.55774C24.8023 4.18591 25.6566 4 26.6583 4C27.7778 4 28.691 4.23484 29.3981 4.70451C30.1051 5.17419 30.6158 5.80042 30.93 6.58321C31.2639 7.366 31.4308 8.21729 31.4308 9.13707V11.0451H28.2786V9.75352C28.2786 8.69675 28.0429 7.92374 27.5715 7.4345C27.1002 6.94525 26.3146 6.70063 25.2147 6.70063C23.9577 6.70063 23.0543 7.0431 22.5044 7.72804C21.9545 8.41299 21.6795 9.40126 21.6795 10.6929Z"/>
<path d="M41.7076 24.1667C40.2542 24.1667 38.9776 23.9416 37.8778 23.4915C36.7779 23.061 35.9138 22.4347 35.2853 21.6128C34.6764 20.7909 34.372 19.7928 34.372 18.6186H37.5243C37.5243 19.3231 37.6716 19.8907 37.9662 20.3212C38.2608 20.7517 38.7223 21.0551 39.3508 21.2312C39.9989 21.4269 40.8434 21.5247 41.8844 21.5247C43.0038 21.5247 43.8877 21.3975 44.5358 21.1431C45.2035 20.9083 45.6847 20.4875 45.9793 19.8809C46.2739 19.2742 46.4212 18.4327 46.4212 17.3564V8.81417L46.6569 8.60868V4.29355H49.5735V17.1803C49.5735 18.8045 49.2494 20.1255 48.6013 21.1431C47.9532 22.1803 47.0399 22.9436 45.8615 23.4328C44.6831 23.922 43.2984 24.1667 41.7076 24.1667ZM40.3819 17.5619C38.9285 17.5619 37.6814 17.2781 36.6404 16.7106C35.6192 16.1431 34.8237 15.3505 34.2542 14.3328C33.7042 13.3152 33.4293 12.1312 33.4293 10.7809C33.4293 9.43062 33.7141 8.24664 34.2836 7.22901C34.8728 6.21139 35.6977 5.41881 36.7583 4.85129C37.8385 4.28376 39.1151 4 40.5881 4C42.12 4 43.4163 4.34247 44.4769 5.02741C45.5571 5.69279 46.2248 6.66149 46.4802 7.93353H47.1577L46.981 10.4874H46.4212C46.4212 9.66545 46.2248 8.98051 45.832 8.43256C45.4392 7.86503 44.8795 7.44428 44.1528 7.1703C43.4261 6.89633 42.5423 6.75934 41.5014 6.75934C40.4997 6.75934 39.6257 6.88654 38.8794 7.14095C38.1527 7.39536 37.593 7.81611 37.2002 8.4032C36.827 8.97073 36.6404 9.7633 36.6404 10.7809C36.6404 11.779 36.827 12.5716 37.2002 13.1587C37.5733 13.7458 38.1135 14.1763 38.8205 14.4503C39.5472 14.7047 40.4113 14.8319 41.413 14.8319C43.0235 14.8319 44.2608 14.4992 45.125 13.8338C45.9891 13.1684 46.4212 12.19 46.4212 10.8983H46.981V13.7751H46.215C45.9597 14.8906 45.341 15.8006 44.359 16.5051C43.377 17.2096 42.0513 17.5619 40.3819 17.5619Z"/>
<path d="M60.5895 19.1764C58.979 19.1764 57.5551 18.8633 56.3178 18.237C55.1001 17.5912 54.1476 16.7008 53.4601 15.5657C52.7924 14.4111 52.4585 13.0902 52.4585 11.6029C52.4585 10.0764 52.7924 8.74567 53.4601 7.61063C54.1476 6.47558 55.1001 5.59494 56.3178 4.9687C57.5551 4.3229 58.979 4 60.5895 4C62.2393 4 63.673 4.3229 64.8907 4.9687C66.1084 5.59494 67.0511 6.47558 67.7189 7.61063C68.4063 8.74567 68.75 10.0764 68.75 11.6029C68.75 13.0902 68.4063 14.4111 67.7189 15.5657C67.0511 16.7008 66.1084 17.5912 64.8907 18.237C63.673 18.8633 62.2393 19.1764 60.5895 19.1764ZM60.5895 16.3583C62.3768 16.3583 63.6632 15.9571 64.4488 15.1548C65.2344 14.3328 65.6272 13.1489 65.6272 11.6029C65.6272 10.0568 65.2344 8.87288 64.4488 8.05095C63.6632 7.20944 62.3768 6.78869 60.5895 6.78869C58.8219 6.78869 57.5453 7.20944 56.7597 8.05095C55.9741 8.87288 55.5813 10.0568 55.5813 11.6029C55.5813 13.1489 55.9741 14.3328 56.7597 15.1548C57.5453 15.9571 58.8219 16.3583 60.5895 16.3583Z"/>
</svg>

After

Width:  |  Height:  |  Size: 4.5 KiB

+3
View File
@@ -0,0 +1,3 @@
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12.3333 13.1667L16.5 9M16.5 9L12.3333 4.83333M16.5 9H6.5M6.5 1.5H5.5C4.09987 1.5 3.3998 1.5 2.86502 1.77248C2.39462 2.01217 2.01217 2.39462 1.77248 2.86502C1.5 3.3998 1.5 4.09987 1.5 5.5V12.5C1.5 13.9001 1.5 14.6002 1.77248 15.135C2.01217 15.6054 2.39462 15.9878 2.86502 16.2275C3.3998 16.5 4.09987 16.5 5.5 16.5H6.5" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 497 B

+3
View File
@@ -0,0 +1,3 @@
<svg width="22" height="18" viewBox="0 0 22 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1 4L9.16492 9.71544C9.82609 10.1783 10.1567 10.4097 10.5163 10.4993C10.8339 10.5785 11.1661 10.5785 11.4837 10.4993C11.8433 10.4097 12.1739 10.1783 12.8351 9.71544L21 4M5.8 17H16.2C17.8802 17 18.7202 17 19.362 16.673C19.9265 16.3854 20.3854 15.9265 20.673 15.362C21 14.7202 21 13.8802 21 12.2V5.8C21 4.11984 21 3.27976 20.673 2.63803C20.3854 2.07354 19.9265 1.6146 19.362 1.32698C18.7202 1 17.8802 1 16.2 1H5.8C4.11984 1 3.27976 1 2.63803 1.32698C2.07354 1.6146 1.6146 2.07354 1.32698 2.63803C1 3.27976 1 4.11984 1 5.8V12.2C1 13.8802 1 14.7202 1.32698 15.362C1.6146 15.9265 2.07354 16.3854 2.63803 16.673C3.27976 17 4.11984 17 5.8 17Z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 815 B

+3
View File
@@ -0,0 +1,3 @@
<svg width="17" height="2" viewBox="0 0 17 2" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1.5 1H15.5" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 204 B

+3
View File
@@ -0,0 +1,3 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M11.332 2.00004C11.5071 1.82494 11.715 1.68605 11.9438 1.59129C12.1725 1.49653 12.4177 1.44775 12.6654 1.44775C12.913 1.44775 13.1582 1.49653 13.387 1.59129C13.6157 1.68605 13.8236 1.82494 13.9987 2.00004C14.1738 2.17513 14.3127 2.383 14.4074 2.61178C14.5022 2.84055 14.551 3.08575 14.551 3.33337C14.551 3.58099 14.5022 3.82619 14.4074 4.05497C14.3127 4.28374 14.1738 4.49161 13.9987 4.66671L4.9987 13.6667L1.33203 14.6667L2.33203 11L11.332 2.00004Z" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 632 B

+3
View File
@@ -0,0 +1,3 @@
<svg width="17" height="16" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8.5 1V15M1.5 8H15.5" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 215 B

+4
View File
@@ -0,0 +1,4 @@
<svg width="21" height="22" viewBox="0 0 21 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M11.0005 14C12.6573 14 14.0005 12.6569 14.0005 11C14.0005 9.34315 12.6573 8 11.0005 8C9.34363 8 8.00049 9.34315 8.00049 11C8.00049 12.6569 9.34363 14 11.0005 14Z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M8.28957 18.3711L8.87402 19.6856C9.04776 20.0768 9.3313 20.4093 9.69024 20.6426C10.0492 20.8759 10.4681 21.0001 10.8962 21C11.3244 21.0001 11.7433 20.8759 12.1022 20.6426C12.4612 20.4093 12.7447 20.0768 12.9185 19.6856L13.5029 18.3711C13.711 17.9047 14.0609 17.5159 14.5029 17.26C14.9477 17.0034 15.4622 16.8941 15.9729 16.9478L17.4029 17.1C17.8286 17.145 18.2582 17.0656 18.6396 16.8713C19.021 16.6771 19.3379 16.3763 19.5518 16.0056C19.766 15.635 19.868 15.2103 19.8455 14.7829C19.823 14.3555 19.677 13.9438 19.4251 13.5978L18.5785 12.4344C18.277 12.0171 18.1159 11.5148 18.1185 11C18.1184 10.4866 18.281 9.98635 18.5829 9.57111L19.4296 8.40778C19.6814 8.06175 19.8275 7.65007 19.85 7.22267C19.8725 6.79528 19.7704 6.37054 19.5562 6C19.3423 5.62923 19.0255 5.32849 18.644 5.13423C18.2626 4.93997 17.833 4.86053 17.4074 4.90556L15.9774 5.05778C15.4667 5.11141 14.9521 5.00212 14.5074 4.74556C14.0645 4.48825 13.7144 4.09736 13.5074 3.62889L12.9185 2.31444C12.7447 1.92317 12.4612 1.59072 12.1022 1.3574C11.7433 1.12408 11.3244 0.99993 10.8962 1C10.4681 0.99993 10.0492 1.12408 9.69024 1.3574C9.3313 1.59072 9.04776 1.92317 8.87402 2.31444L8.28957 3.62889C8.0825 4.09736 7.73245 4.48825 7.28957 4.74556C6.84479 5.00212 6.33024 5.11141 5.81957 5.05778L4.38513 4.90556C3.95946 4.86053 3.52987 4.93997 3.14844 5.13423C2.76702 5.32849 2.45014 5.62923 2.23624 6C2.02206 6.37054 1.92002 6.79528 1.94251 7.22267C1.96499 7.65007 2.11103 8.06175 2.36291 8.40778L3.20957 9.57111C3.51151 9.98635 3.67411 10.4866 3.67402 11C3.67411 11.5134 3.51151 12.0137 3.20957 12.4289L2.36291 13.5922C2.11103 13.9382 1.96499 14.3499 1.94251 14.7773C1.92002 15.2047 2.02206 15.6295 2.23624 16C2.45036 16.3706 2.76727 16.6712 3.14864 16.8654C3.53001 17.0596 3.95949 17.1392 4.38513 17.0944L5.81513 16.9422C6.3258 16.8886 6.84034 16.9979 7.28513 17.2544C7.72966 17.511 8.08134 17.902 8.28957 18.3711Z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

+3
View File
@@ -0,0 +1,3 @@
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M19 10V14.2C19 15.8802 19 16.7202 18.673 17.362C18.3854 17.9265 17.9265 18.3854 17.362 18.673C16.7202 19 15.8802 19 14.2 19H5.8C4.11984 19 3.27976 19 2.63803 18.673C2.07354 18.3854 1.6146 17.9265 1.32698 17.362C1 16.7202 1 15.8802 1 14.2V10M14 5L10 1M10 1L6 5M10 1V13" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 447 B

+3
View File
@@ -0,0 +1,3 @@
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M14.5305 16.3677L14.0759 16.1595C14.0235 16.274 13.9536 16.3632 13.8657 16.4344C13.7965 16.4905 13.717 16.524 13.6123 16.5331C13.5358 16.5398 13.4554 16.5237 13.3567 16.4582L13.3568 16.4581L13.3463 16.4515L9.19625 13.8473L8.93049 13.6805L8.66473 13.8473L4.51473 16.4515L4.51464 16.4513L4.50423 16.4582C4.40555 16.5237 4.32514 16.5398 4.24873 16.5331C4.14394 16.524 4.06449 16.4905 3.99524 16.4344C3.90747 16.3633 3.83772 16.2743 3.7853 16.16C3.75378 16.0908 3.7385 15.9998 3.76856 15.8638C3.76859 15.8636 3.76862 15.8635 3.76865 15.8634L4.86845 10.9424L4.9322 10.6572L4.71496 10.4617L1.04419 7.15819C0.945727 7.06488 0.900968 6.97672 0.883143 6.89047L0.883147 6.89047L0.882745 6.88857C0.859403 6.7778 0.86615 6.67532 0.902553 6.57104C0.945215 6.44883 1.0025 6.3661 1.06731 6.30703C1.10669 6.27113 1.1849 6.22473 1.34132 6.19965L6.17594 5.75835L6.47965 5.73062L6.59401 5.44791L8.46901 0.812492L8.46973 0.810696C8.51654 0.693678 8.57769 0.628401 8.64887 0.586111L8.64959 0.585682C8.75552 0.522513 8.84694 0.5 8.93049 0.5C9.01398 0.5 9.10586 0.522488 9.21263 0.585824C9.28315 0.627946 9.34427 0.693252 9.39125 0.810696L9.39197 0.81249L11.267 5.44791L11.3813 5.73062L11.685 5.75835L16.5197 6.19965C16.6761 6.22473 16.7543 6.27113 16.7937 6.30703C16.8585 6.3661 16.9158 6.44883 16.9584 6.57105C16.995 6.67572 17.0019 6.7786 16.979 6.88955C16.9607 6.97634 16.9153 7.06483 16.8168 7.15818L13.146 10.4617L12.9288 10.6572L12.9925 10.9424L14.0923 15.8634C14.0924 15.8635 14.0924 15.8636 14.0924 15.8637C14.1225 15.9999 14.1072 16.0909 14.0756 16.1602L14.5305 16.3677ZM14.5305 16.3677C14.6138 16.1851 14.6305 15.9809 14.5805 15.7552L3.33049 16.3677C3.41382 16.5497 3.53049 16.7014 3.68049 16.8229C3.83049 16.9444 4.00549 17.0139 4.20549 17.0312C4.40549 17.0486 4.59716 16.9965 4.78049 16.875L8.93049 14.2708L13.0805 16.875C13.2638 16.9965 13.4555 17.0486 13.6555 17.0312C13.8555 17.0139 14.0305 16.9444 14.1805 16.8229C14.3305 16.7014 14.4472 16.5497 14.5305 16.3677Z" />
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

+3
View File
@@ -0,0 +1,3 @@
<svg width="18" height="20" viewBox="0 0 18 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12.3333 5.00008V4.33341C12.3333 3.39999 12.3333 2.93328 12.1517 2.57676C11.9919 2.26316 11.7369 2.00819 11.4233 1.8484C11.0668 1.66675 10.6001 1.66675 9.66667 1.66675H8.33333C7.39991 1.66675 6.9332 1.66675 6.57668 1.8484C6.26308 2.00819 6.00811 2.26316 5.84832 2.57676C5.66667 2.93328 5.66667 3.39999 5.66667 4.33341V5.00008M1.5 5.00008H16.5M14.8333 5.00008V14.3334C14.8333 15.7335 14.8333 16.4336 14.5608 16.9684C14.3212 17.4388 13.9387 17.8212 13.4683 18.0609C12.9335 18.3334 12.2335 18.3334 10.8333 18.3334H7.16667C5.76654 18.3334 5.06647 18.3334 4.53169 18.0609C4.06129 17.8212 3.67883 17.4388 3.43915 16.9684C3.16667 16.4336 3.16667 15.7335 3.16667 14.3334V5.00008" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 850 B

+3
View File
@@ -0,0 +1,3 @@
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4.3163 18.4384C4.92462 17.0052 6.34492 16 8 16H14C15.6551 16 17.0754 17.0052 17.6837 18.4384M15 8.5C15 10.7091 13.2091 12.5 11 12.5C8.79086 12.5 7 10.7091 7 8.5C7 6.29086 8.79086 4.5 11 4.5C13.2091 4.5 15 6.29086 15 8.5ZM21 11C21 16.5228 16.5228 21 11 21C5.47715 21 1 16.5228 1 11C1 5.47715 5.47715 1 11 1C16.5228 1 21 5.47715 21 11Z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 514 B

+3
View File
@@ -0,0 +1,3 @@
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M3.00002 20.8174C3.6026 21 4.41649 21 5.8 21H16.2C17.5835 21 18.3974 21 19 20.8174M3.00002 20.8174C2.87082 20.7783 2.75133 20.7308 2.63803 20.673C2.07354 20.3854 1.6146 19.9265 1.32698 19.362C1 18.7202 1 17.8802 1 16.2V5.8C1 4.11984 1 3.27976 1.32698 2.63803C1.6146 2.07354 2.07354 1.6146 2.63803 1.32698C3.27976 1 4.11984 1 5.8 1H16.2C17.8802 1 18.7202 1 19.362 1.32698C19.9265 1.6146 20.3854 2.07354 20.673 2.63803C21 3.27976 21 4.11984 21 5.8V16.2C21 17.8802 21 18.7202 20.673 19.362C20.3854 19.9265 19.9265 20.3854 19.362 20.673C19.2487 20.7308 19.1292 20.7783 19 20.8174M3.00002 20.8174C3.00035 20.0081 3.00521 19.5799 3.07686 19.2196C3.39249 17.6329 4.63288 16.3925 6.21964 16.0769C6.60603 16 7.07069 16 8 16H14C14.9293 16 15.394 16 15.7804 16.0769C17.3671 16.3925 18.6075 17.6329 18.9231 19.2196C18.9948 19.5799 18.9996 20.0081 19 20.8174M15 8.5C15 10.7091 13.2091 12.5 11 12.5C8.79086 12.5 7 10.7091 7 8.5C7 6.29086 8.79086 4.5 11 4.5C13.2091 4.5 15 6.29086 15 8.5Z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

+3
View File
@@ -0,0 +1,3 @@
<svg width="22" height="20" viewBox="0 0 22 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M21 19V17C21 15.1362 19.7252 13.5701 18 13.126M14.5 1.29076C15.9659 1.88415 17 3.32131 17 5C17 6.67869 15.9659 8.11585 14.5 8.70924M16 19C16 17.1362 16 16.2044 15.6955 15.4693C15.2895 14.4892 14.5108 13.7105 13.5307 13.3045C12.7956 13 11.8638 13 10 13H7C5.13623 13 4.20435 13 3.46927 13.3045C2.48915 13.7105 1.71046 14.4892 1.30448 15.4693C1 16.2044 1 17.1362 1 19M12.5 5C12.5 7.20914 10.7091 9 8.5 9C6.29086 9 4.5 7.20914 4.5 5C4.5 2.79086 6.29086 1 8.5 1C10.7091 1 12.5 2.79086 12.5 5Z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 667 B

+6
View File
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="margin: auto; background: none; display: block; shape-rendering: auto;" width="36px" height="36px" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid">
<path fill="none" stroke="#d0d5dd" stroke-width="10" stroke-dasharray="42.76482137044271 42.76482137044271" d="M24.3 30C11.4 30 5 43.3 5 50s6.4 20 19.3 20c19.3 0 32.1-40 51.4-40 C88.6 30 95 43.3 95 50s-6.4 20-19.3 20C56.4 70 43.6 30 24.3 30z" stroke-linecap="round" style="transform:scale(1);transform-origin:50px 50px">
<animate attributeName="stroke-dashoffset" repeatCount="indefinite" dur="1.6666666666666667s" keyTimes="0;1" values="0;256.58892822265625"></animate>
</path>
<!-- [ldio] generated by https://loading.io/ --></svg>

After

Width:  |  Height:  |  Size: 817 B

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 468 B

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 659 B

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 852 B

+61
View File
@@ -0,0 +1,61 @@
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Google tag (gtag.js) -->
<!-- <script
async
src="https://www.googletagmanager.com/gtag/js?id=G-ELX69J6Y4R"
></script>
<script>
window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-ELX69J6Y4R');
</script> -->
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta build-version="<%= __BUILDNUMBER__ %>" />
<title>Ergo App</title>
<meta name="description" content="{{{description}}}" />
<link rel="manifest" href="/manifest.json" />
<link rel="icon" type="image/svg+xml" href="/src/favicon.ico" />
<meta name="theme-color" content="#FFFFFF">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="default">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="apple-mobile-web-app-title" content="Ergo">
<meta property="og:title" content="{{{title}}}" />
<meta property="og:description" content="{{{description}}}" />
<meta property="og:image" content="https://tools.techwithryanwong.com/facebook.png" />
<meta property="og:determiner" content="the" />
<meta property="og:locale" content="en_US" />
<meta property="og:site_name" content="Ergo App" />
<meta property="og:url" content="https://techwithryanwong.com" />
<meta property="og:type" content="website" />
<meta property="fb:app_id" content="866666398024478" />
<meta name="author" content="Ryan wong" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="@ryanwongtech" />
<meta name="twitter:title" content="{{{title}}}" />
<meta name="twitter:description" content="{{{description}}}" />
<meta name="twitter:image" content="https://tools.techwithryanwong.com/facebook.png" />
<link href="https://api.fontshare.com/v2/css?f[]=general-sans@200,300,600,400&display=swap" rel="stylesheet" />
<script type="module" crossorigin src="/assets/index.195268fe.js"></script>
<link rel="stylesheet" href="/assets/index.17ded627.css">
</head>
<body>
<div id="root"></div>
<!-- <script
id="tidio-script"
src="//code.tidio.co/h0tpq7blt8pa6septktw5zcdj85psftv.js"
async
></script> -->
<!-- <script
src="/node_modules/device-uuid/lib/device-uuid.js"
type="module"
></script> -->
</body>
</html>
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 MiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 MiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

+39
View File
@@ -0,0 +1,39 @@
{
"name": "Ergo",
"short_name": "Ergo",
"description": "Ergo App",
"start_url": "/",
"scope": "/",
"display": "standalone",
"background_color": "#ffffff",
"theme_color": "#000000",
"icons": [
{
"src": "./logo.png",
"sizes": "124x124",
"type": "image/png",
"purpose": "any maskable"
},
{
"src": "./logo.png",
"sizes": "124x124",
"type": "image/png"
},
{
"src": "./logo.png",
"sizes": "124x124",
"type": "image/png"
},
{
"src": "./logo.png",
"sizes": "124x124",
"type": "image/png"
},
{
"src": "./logo.png",
"sizes": "124x124",
"type": "image/png"
}
],
"purpose": "any"
}
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 637 B

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 MiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

+32 -27
View File
@@ -6,7 +6,6 @@ import SearchIcon from "./icons/SearchIcon";
import ReactTestUtils from "react-dom/test-utils";
import { isNotInViewport, sleep } from "@/utils/utils";
import { useForm } from "react-hook-form";
import CustomLocationAutoCompleteV2 from "../CustomLocationAutoCompleteV2";
import CustomComboBox from "../CustomComboBox";
import { GlobalContext } from "@/globalContext";
import { MagnifyingGlassIcon } from "@heroicons/react/24/solid";
@@ -16,15 +15,17 @@ const StaticSearchBar = ({ className }) => {
const navigate = useNavigate();
const inSearchPage = useMatch("/search");
const [searchParams, setSearchParams] = useSearchParams();
const [showStaticBar, setShowStaticBar] = useState(isNotInViewport("search-bar"));
const [showStaticBar, setShowStaticBar] = useState(
isNotInViewport("search-bar")
);
const { pathname } = useLocation();
const { state: globalState, dispatch } = useContext(GlobalContext);
const categories = globalState.spaceCategories;
const { handleSubmit, control, setValue } = useForm({ defaultValues: { category: "", location: globalState.location } });
const { handleSubmit, control, setValue } = useForm({
defaultValues: { category: "", location: globalState.location },
});
useEffect(() => {
const onScroll = () => {
@@ -67,49 +68,53 @@ const StaticSearchBar = ({ className }) => {
return (
<div className={className}>
<form
className="my-shadow2 flex w-full max-w-xl items-center rounded-lg rounded-r-pill border bg-white pl-1 md:rounded-r-lg md:pl-4 xl:ml-16 xl:max-w-3xl"
className='my-shadow2 flex w-full max-w-xl items-center rounded-lg rounded-r-pill border bg-white pl-1 md:rounded-r-lg md:pl-4 xl:ml-16 xl:max-w-3xl'
onSubmit={handleSubmit(onSubmit)}
autoComplete="off"
id="top-header-search-bar"
autoComplete='off'
id='top-header-search-bar'
>
<CustomComboBox
control={control}
name="category"
labelField="category"
valueField="category"
name='category'
labelField='category'
valueField='category'
setValue={(val) => setValue("category", val)}
items={categories}
containerClassName="relative hidden h-[40px] items-center md:flex md:w-[500px]"
className="w-full truncate border-0 text-black focus:outline-none"
placeholder="Search by category"
containerClassName='relative hidden h-[40px] items-center md:flex md:w-[500px]'
className='w-full truncate border-0 text-black focus:outline-none'
placeholder='Search by category'
/>
<CustomStaticLocationAutoCompleteV2
containerClassName={"flex h-[40px] w-full items-center gap-2 rounded-t-md bg-white px-2 pr-1 md:h-[unset] lg:max-w-[331px] lg:rounded-none lg:py-0"}
placeholder="Search by city or zip code"
className="border-0 focus:outline-none"
containerClassName={
"flex h-[40px] w-full items-center gap-2 rounded-t-md bg-white px-2 pr-1 md:h-[unset] lg:max-w-[331px] lg:rounded-none lg:py-0"
}
placeholder='Search by city or zip code'
className='border-0 focus:outline-none'
// control={control}
// name="location"
type="static"
setValue={(val) => dispatch({
type='static'
setValue={(val) =>
dispatch({
type: "SETLOCATION",
payload: {
location:val
location: val,
},
})}
})
}
suggestionType={["(regions)"]}
/>
<button
type="submit"
className="login-btn-gradient hidden w-1/2 items-center justify-center gap-2 rounded-md rounded-tl-none rounded-bl-none py-3 tracking-wide text-white outline-none focus:outline-none md:flex md:w-[unset] md:px-4 lg:w-[unset]"
type='submit'
className='login-btn-gradient hidden w-1/2 items-center justify-center gap-2 rounded-md rounded-bl-none rounded-tl-none py-3 tracking-wide text-white outline-none focus:outline-none md:flex md:w-[unset] md:px-4 lg:w-[unset]'
>
<SearchIcon className="md:w-[50px]" />
<span className="hidden md:inline">Search</span>
<SearchIcon className='md:w-[50px]' />
<span className='hidden md:inline'>Search</span>
</button>
<button className="login-btn-gradient flex h-10 w-11 items-center justify-center rounded-circle md:hidden">
<button className='login-btn-gradient flex h-10 w-11 items-center justify-center rounded-circle md:hidden'>
{" "}
<MagnifyingGlassIcon className="h-5 w-5 font-semibold text-white" />
<MagnifyingGlassIcon className='h-5 w-5 font-semibold text-white' />
</button>
</form>
</div>
+260 -139
View File
@@ -1,5 +1,11 @@
import React, { useContext, useEffect, useState } from "react";
import { createSearchParams, Link, useLocation, useNavigate, useSearchParams } from "react-router-dom";
import {
createSearchParams,
Link,
useLocation,
useNavigate,
useSearchParams,
} from "react-router-dom";
import PropertySpaceCard from "@/components/frontend/PropertySpaceCard";
import { callCustomAPI } from "@/utils/callCustomAPI";
@@ -16,7 +22,7 @@ import { AuthContext, tokenExpireError } from "@/authContext";
import useUserCurrentLocation from "@/hooks/api/useUserCurrentLocation";
import { DRAFT_STATUS } from "@/utils/constants";
import { useForm } from "react-hook-form";
import CustomLocationAutoCompleteV2 from "@/components/CustomLocationAutoCompleteV2";
// import CustomLocationAutoCompleteV2 from "@/components/CustomLocationAutoCompleteV2";
import DatePickerV3 from "@/components/DatePickerV3";
import CustomSelectV2 from "@/components/CustomSelectV2";
import MkdSDK from "@/utils/MkdSDK";
@@ -27,15 +33,18 @@ const ctrl = new AbortController();
const HomePage = () => {
const FETCH_PER_SCROLL = 12;
const { dispatch: globalDispatch, state: globalState } = useContext(GlobalContext);
const { dispatch: globalDispatch, state: globalState } =
useContext(GlobalContext);
const { state } = useContext(AuthContext);
const [searchParams, setSearchParams] = useSearchParams();
const [activeTab, setActiveTab] = useState(searchParams.get("category") || "all");
const [activeTab, setActiveTab] = useState(
searchParams.get("category") || "all"
);
const [hosts, setHosts] = useState(Array(5).fill({}));
const [popularSpaces, setPopularSpaces] = useState([]);
const [newSpaces, setNewSpaces] = useState([]);
const [forceRender, setForceRender] = useState("");
const location = useLocation()
const location = useLocation();
const { state: authState, dispatch: authDispatch } = useContext(AuthContext);
const { dispatch } = useContext(AuthContext);
@@ -43,7 +52,8 @@ const HomePage = () => {
const [newTotal, setNewTotal] = useState(1000);
const spaceCategories = globalState.spaceCategories;
const { handleSubmit, control, setValue, resetField, formState, register } = useForm({
const { handleSubmit, control, setValue, resetField, formState, register } =
useForm({
defaultValues: {
booking_start_time: new Date(),
location: globalState.location,
@@ -53,7 +63,11 @@ const HomePage = () => {
const { touchedFields } = formState;
const { city, country, done: currentLocationChecked } = useUserCurrentLocation();
const {
city,
country,
done: currentLocationChecked,
} = useUserCurrentLocation();
const [noCurrentLocationData, setNoCurrentLocationData] = useState(false);
const navigate = useNavigate();
@@ -64,22 +78,47 @@ const HomePage = () => {
// only add empty spaces if there's no empty card i.e we are not currently fetching
if (popularSpaces.every((space) => Object.keys(space).length > 0)) {
setPopularSpaces((prev) => {
const amountToFetch = popularTotal - prev.length > FETCH_PER_SCROLL ? FETCH_PER_SCROLL : Math.abs(popularTotal - prev.length - FETCH_PER_SCROLL);
const amountToFetch =
popularTotal - prev.length > FETCH_PER_SCROLL
? FETCH_PER_SCROLL
: Math.abs(popularTotal - prev.length - FETCH_PER_SCROLL);
return [...prev, ...Array(amountToFetch).fill({})];
});
}
const user_id = localStorage.getItem("user");
const where = [
`${activeTab != "all" ? `ergo_spaces.category LIKE '%${activeTab}%'` : "1"} AND ergo_property_spaces.space_status = 1 AND ergo_property_spaces.draft_status = ${DRAFT_STATUS.COMPLETED
} AND ergo_property_spaces_images.is_approved = 1 AND ergo_property_spaces.deleted_at IS NULL AND schedule_template_id IS NOT NULL AND (${city && !noCurrentLocationData ? `ergo_property.city LIKE '%${city}%'` : "1"} OR ${country && !noCurrentLocationData ? `ergo_property.country LIKE '%${country}%'` : "1"
`${
activeTab != "all" ? `ergo_spaces.category LIKE '%${activeTab}%'` : "1"
} AND ergo_property_spaces.space_status = 1 AND ergo_property_spaces.draft_status = ${
DRAFT_STATUS.COMPLETED
} AND ergo_property_spaces_images.is_approved = 1 AND ergo_property_spaces.deleted_at IS NULL AND schedule_template_id IS NOT NULL AND (${
city && !noCurrentLocationData
? `ergo_property.city LIKE '%${city}%'`
: "1"
} OR ${
country && !noCurrentLocationData
? `ergo_property.country LIKE '%${country}%'`
: "1"
})`,
];
try {
const result = await sdk.callRawAPI("/v2/api/custom/ergo/popular/PAGINATE", { page: page ?? 1, limit: FETCH_PER_SCROLL, user_id: Number(user_id), where }, "POST", ctrl.signal);
const result = await sdk.callRawAPI(
"/v2/api/custom/ergo/popular/PAGINATE",
{
page: page ?? 1,
limit: FETCH_PER_SCROLL,
user_id: Number(user_id),
where,
},
"POST",
ctrl.signal
);
if (Array.isArray(result.list)) {
setPopularSpaces((prev) => {
return [...prev.filter((item) => Object.keys(item).length > 0), ...result.list].filter((v, i, a) => a.findIndex((v2) => v2.id === v.id) === i);
return [
...prev.filter((item) => Object.keys(item).length > 0),
...result.list,
].filter((v, i, a) => a.findIndex((v2) => v2.id === v.id) === i);
});
setPopularTotal(result.total);
}
@@ -99,27 +138,50 @@ const HomePage = () => {
async function fetchNewSpaces(page) {
if (newSpaces.every((space) => Object.keys(space).length > 0)) {
setNewSpaces((prev) => {
const amountToFetch = newTotal - prev.length > FETCH_PER_SCROLL ? FETCH_PER_SCROLL : Math.abs(newTotal - prev.length - FETCH_PER_SCROLL);
const amountToFetch =
newTotal - prev.length > FETCH_PER_SCROLL
? FETCH_PER_SCROLL
: Math.abs(newTotal - prev.length - FETCH_PER_SCROLL);
return [...prev, ...Array(amountToFetch).fill({})];
});
}
const user_id = localStorage.getItem("user");
const where = [
`${activeTab != "all" ? `ergo_spaces.category LIKE '%${activeTab}%'` : "1"} AND ergo_property_spaces.space_status = 1 AND ergo_property_spaces.draft_status = ${DRAFT_STATUS.COMPLETED
} AND ergo_property_spaces_images.is_approved = 1 AND schedule_template_id IS NOT NULL AND ergo_property_spaces.deleted_at IS NULL AND (${city && !noCurrentLocationData ? `ergo_property.city LIKE '%${city}%'` : "1"} OR ${country && !noCurrentLocationData ? `ergo_property.country LIKE '%${country}%'` : "1"
`${
activeTab != "all" ? `ergo_spaces.category LIKE '%${activeTab}%'` : "1"
} AND ergo_property_spaces.space_status = 1 AND ergo_property_spaces.draft_status = ${
DRAFT_STATUS.COMPLETED
} AND ergo_property_spaces_images.is_approved = 1 AND schedule_template_id IS NOT NULL AND ergo_property_spaces.deleted_at IS NULL AND (${
city && !noCurrentLocationData
? `ergo_property.city LIKE '%${city}%'`
: "1"
} OR ${
country && !noCurrentLocationData
? `ergo_property.country LIKE '%${country}%'`
: "1"
})`,
];
try {
const result = await sdk.callRawAPI(
"/v2/api/custom/ergo/popular/PAGINATE",
{ page: page ?? 1, limit: 6, user_id: Number(user_id), where, sortId: "update_at", direction: "DESC" },
{
page: page ?? 1,
limit: 6,
user_id: Number(user_id),
where,
sortId: "update_at",
direction: "DESC",
},
// { page: page ?? 1, limit: FETCH_PER_SCROLL, user_id: null, where, sortId: "update_at", direction: "DESC" },
"POST",
ctrl?.signal,
ctrl?.signal
);
if (Array.isArray(result.list)) {
setNewSpaces((prev) => {
return [...prev.filter((item) => Object.keys(item).length > 0), ...result.list].filter((v, i, a) => a.findIndex((v2) => v2.id === v.id) === i);
return [
...prev.filter((item) => Object.keys(item).length > 0),
...result.list,
].filter((v, i, a) => a.findIndex((v2) => v2.id === v.id) === i);
});
setNewTotal(result.total);
}
@@ -146,12 +208,21 @@ const HomePage = () => {
sortId: "avg_host_rating",
direction: "DESC",
where: [
`${city && !noCurrentLocationData ? `ergo_profile.city LIKE '%${city}%'` : "1"} AND ${country && !noCurrentLocationData ? `ergo_profile.country LIKE '%${country}%'` : "1"}`,
"ergo_user.deleted_at IS NULL", "ergo_property.id IS NOT NULL",
`${
city && !noCurrentLocationData
? `ergo_profile.city LIKE '%${city}%'`
: "1"
} AND ${
country && !noCurrentLocationData
? `ergo_profile.country LIKE '%${country}%'`
: "1"
}`,
"ergo_user.deleted_at IS NULL",
"ergo_property.id IS NOT NULL",
],
},
"POST",
ctrl.signal,
ctrl.signal
);
setHosts(result.list);
@@ -173,7 +244,9 @@ const HomePage = () => {
pathname: "/search",
search: createSearchParams({
location: globalState.location ?? "",
booking_start_time: touchedFields.booking_start_time ? data.booking_start_time.toISOString() : "",
booking_start_time: touchedFields.booking_start_time
? data.booking_start_time.toISOString()
: "",
max_capacity: data.max_capacity ?? "",
capacity: data.capacity ?? "",
size: data.size ?? "",
@@ -182,25 +255,28 @@ const HomePage = () => {
}
async function setDevice() {
if (!localStorage.getItem("token") || localStorage.getItem("token") !== undefined) {
if (
!localStorage.getItem("token") ||
localStorage.getItem("token") !== undefined
) {
return;
}
try {
await sdk.setUUId()
await sdk.setUUId();
} catch (error) {
console.log(error.message)
console.log(error.message);
}
}
useEffect(() => {
let setter;
if (!setter) {
setDevice()
setDevice();
}
return () => {
setter = true
}
}, [])
setter = true;
};
}, []);
useEffect(() => {
if (!currentLocationChecked) return;
@@ -208,10 +284,14 @@ const HomePage = () => {
globalDispatch({
type: "SETLOCATION",
payload: {
location:(city ?? "") + (city && country ? ", " : "") + (country ?? "")
location:
(city ?? "") + (city && country ? ", " : "") + (country ?? ""),
},
})
setValue("location", (city ?? "") + (city && country ? ", " : "") + (country ?? ""));
});
setValue(
"location",
(city ?? "") + (city && country ? ", " : "") + (country ?? "")
);
}
fetchHosts();
}, [currentLocationChecked, noCurrentLocationData]);
@@ -243,7 +323,7 @@ const HomePage = () => {
btn: "Ok got it",
},
});
navigate("/signup")
navigate("/signup");
}
return (
@@ -251,15 +331,20 @@ const HomePage = () => {
<section
style={{
height: 600,
background: `url('${spaceCategories.find((cat) => activeTab == cat.category)?.image ?? "/jumbotron1.jpg"}'), linear-gradient(0deg, rgba(16, 24, 40, 0.79), rgba(16, 24, 40, 0.79))`,
background: `url('${
spaceCategories.find((cat) => activeTab == cat.category)?.image ??
"/jumbotron1.jpg"
}'), linear-gradient(0deg, rgba(16, 24, 40, 0.79), rgba(16, 24, 40, 0.79))`,
}}
className="my-background-image mb-6 pt-[70px] md:rounded-b-[3rem]"
className='my-background-image mb-6 pt-[70px] md:rounded-b-[3rem]'
>
<nav className="mb-[60px] flex justify-center border-t border-b border-gray-500 text-sm text-gray-300 md:mb-[103px] md:text-base">
<div className="horizontal-scroll-categories">
<nav className='mb-[60px] flex justify-center border-b border-t border-gray-500 text-sm text-gray-300 md:mb-[103px] md:text-base'>
<div className='horizontal-scroll-categories'>
<button
key={0}
className={`${activeTab == "all" ? "active text-white" : ""} flex w-[105px] items-center justify-center whitespace-nowrap py-[12px]`}
className={`${
activeTab == "all" ? "active text-white" : ""
} flex w-[105px] items-center justify-center whitespace-nowrap py-[12px]`}
onClick={() => {
setActiveTab("all");
searchParams.set("category", "all");
@@ -272,7 +357,9 @@ const HomePage = () => {
return (
<button
key={tab.id}
className={`${activeTab == tab.category ? "active text-white" : ""} flex w-[105px] items-center justify-center whitespace-nowrap py-[12px]`}
className={`${
activeTab == tab.category ? "active text-white" : ""
} flex w-[105px] items-center justify-center whitespace-nowrap py-[12px]`}
onClick={() => {
setActiveTab(tab.category);
searchParams.set("category", tab.category);
@@ -285,52 +372,61 @@ const HomePage = () => {
</button>
);
})}
<div className="mover"></div>
<div className='mover'></div>
</div>
</nav>
<h1 className="mb-[30px] px-4 text-center text-5xl font-bold text-white md:text-6xl lg:text-7xl">Spaces tailored to your needs</h1>
<h1 className='mb-[30px] px-4 text-center text-5xl font-bold text-white md:text-6xl lg:text-7xl'>
Spaces tailored to your needs
</h1>
<form
className="fourteenth-step flex flex-wrap justify-center px-6 text-sm md:px-24 md:text-base lg:flex-nowrap"
id="search-bar"
className='fourteenth-step flex flex-wrap justify-center px-6 text-sm md:px-24 md:text-base lg:flex-nowrap'
id='search-bar'
onSubmit={handleSubmit(onSubmit)}
autoComplete="off"
autoComplete='off'
>
<CustomStaticLocationAutoCompleteV2
setValue={(val) => globalDispatch({
setValue={(val) =>
globalDispatch({
type: "SETLOCATION",
payload: {
location:val
location: val,
},
})}
type="static"
containerClassName={"flex h-[40px] w-full items-center gap-2 rounded-t-md border-2 border-r-0 bg-white px-4 py-2 md:h-[unset] lg:max-w-[331px] lg:rounded-none lg:py-0"}
className="border-0 focus:outline-none"
placeholder="Search by city or zip code"
})
}
type='static'
containerClassName={
"flex h-[40px] w-full items-center gap-2 rounded-t-md border-2 border-r-0 bg-white px-4 py-2 md:h-[unset] lg:max-w-[331px] lg:rounded-none lg:py-0"
}
className='border-0 focus:outline-none'
placeholder='Search by city or zip code'
onClear={() => setNoCurrentLocationData(true)}
suggestionType={["(regions)"]}
/>
<div className="flex min-h-[40px] w-1/2 items-center gap-2 rounded-bl-md border-l-2 bg-white px-2 lg:min-w-[230px] lg:max-w-[230px] lg:rounded-none">
<div className='flex min-h-[40px] w-1/2 items-center gap-2 rounded-bl-md border-l-2 bg-white px-2 lg:min-w-[230px] lg:max-w-[230px] lg:rounded-none'>
<DatePickerV3
reset={() => resetField("booking_start_time")}
setValue={(val) => setValue("booking_start_time", val)}
control={control}
name="booking_start_time"
labelClassName="justify-between flex-grow flex-row-reverse"
placeholder="Select Date"
name='booking_start_time'
labelClassName='justify-between flex-grow flex-row-reverse'
placeholder='Select Date'
min={new Date()}
/>
</div>
<div className="flex w-1/2 items-center gap-2 rounded-br-md border-l bg-white px-2 lg:max-w-[174px] lg:rounded-none lg:border-2">
<div className='flex w-1/2 items-center gap-2 rounded-br-md border-l bg-white px-2 lg:max-w-[174px] lg:rounded-none lg:border-2'>
<PeopleIcon />
<input
type="number"
placeholder={activeTab == "Parking" ? "Number of spaces" : "2 People"}
className="remove-arrow w-full focus:outline-none"
type='number'
placeholder={
activeTab == "Parking" ? "Number of spaces" : "2 People"
}
className='remove-arrow w-full focus:outline-none'
{...register("max_capacity")}
/>
</div>
{spaceCategories.find((cat) => activeTab == cat.category)?.has_sizes == 1 && (
<div className="flex w-1/2 items-center gap-2 rounded-br-md !border-l-0 bg-white px-2 lg:max-w-[174px] lg:rounded-none lg:border-2">
{spaceCategories.find((cat) => activeTab == cat.category)
?.has_sizes == 1 && (
<div className='flex w-1/2 items-center gap-2 rounded-br-md !border-l-0 bg-white px-2 lg:max-w-[174px] lg:rounded-none lg:border-2'>
<CustomSelectV2
items={[
{ label: "All Sizes", value: "" },
@@ -339,21 +435,23 @@ const HomePage = () => {
{ label: "Large", value: 2 },
{ label: "X-Large", value: 3 },
]}
labelField="label"
valueField="value"
containerClassName="h-full flex-grow"
labelField='label'
valueField='value'
containerClassName='h-full flex-grow'
placeholder={"All sizes"}
control={control}
name="size"
optionsClassName={"mt-3 w-[150%] -left-1/3 -right-1/3 normal-case"}
name='size'
optionsClassName={
"mt-3 w-[150%] -left-1/3 -right-1/3 normal-case"
}
/>
</div>
)}
<button
type="submit"
className="login-btn-gradient login-btn-gradient mt-4 flex w-full items-center justify-center gap-2 rounded-tr rounded-br rounded-tl rounded-bl py-3 px-6 tracking-wide text-white outline-none focus:outline-none lg:mt-0 lg:w-[unset] lg:rounded-tl-none lg:rounded-bl-none"
id="search-button"
type='submit'
className='login-btn-gradient login-btn-gradient mt-4 flex w-full items-center justify-center gap-2 rounded-bl rounded-br rounded-tl rounded-tr px-6 py-3 tracking-wide text-white outline-none focus:outline-none lg:mt-0 lg:w-[unset] lg:rounded-bl-none lg:rounded-tl-none'
id='search-button'
>
<SearchIcon />
<span>Search</span>
@@ -361,15 +459,20 @@ const HomePage = () => {
</form>
</section>
<div className="mb-[48px] w-full">
<h2 className="mb-[5px] px-4 text-center text-3xl font-bold normal-case md:text-4xl">Top-quality spaces and customer service</h2>
<h5 className="mb-[8px] px-4 text-center text-md font-normal normal-case md:text-2xl">Your number one stop for renting and offering space(s) for work and leisure</h5>
<div className="mt-10 flex justify-center mx-auto max-w-max">
<div className="grid grid-cols-2 md:grid-cols-4 w-full items-center justify-even gap-[15px] text-xl text-gray-300 w-full">
<div className='mb-[48px] w-full'>
<h2 className='mb-[5px] px-4 text-center text-3xl font-bold normal-case md:text-4xl'>
Top-quality spaces and customer service
</h2>
<h5 className='text-md mb-[8px] px-4 text-center font-normal normal-case md:text-2xl'>
Your number one stop for renting and offering space(s) for work and
leisure
</h5>
<div className='mx-auto mt-10 flex max-w-max justify-center'>
<div className='justify-even grid w-full w-full grid-cols-2 items-center gap-[15px] text-xl text-gray-300 md:grid-cols-4'>
{spaceCategories.map((cat, idx) => (
<div key={cat.id} className="w-full block">
<span className="flex items-center gap-2 rounded-full py-1 text-black">
<img src= {cat.icon} className="w-5 h-5 object-cover"/>
<div key={cat.id} className='block w-full'>
<span className='flex items-center gap-2 rounded-full py-1 text-black'>
<img src={cat.icon} className='h-5 w-5 object-cover' />
{cat.category}
</span>
</div>
@@ -378,27 +481,32 @@ const HomePage = () => {
</div>
</div>
<section className="container mx-auto pt-[40px] 2xl:px-16 px-6">
<div className="mb-[26px] flex items-center justify-between border-b border-gray-300 px-6 pb-[12px] md:px-0">
<h3 className="text-3xl font-bold">Popular</h3>
<section className='container mx-auto px-6 pt-[40px] 2xl:px-16'>
<div className='mb-[26px] flex items-center justify-between border-b border-gray-300 px-6 pb-[12px] md:px-0'>
<h3 className='text-3xl font-bold'>Popular</h3>
<Link
to={`/explore?section=popular`}
className="my-text-gradient text-sm font-semibold tracking-wider"
id="view-all-popular"
className='my-text-gradient text-sm font-semibold tracking-wider'
id='view-all-popular'
>
VIEW ALL POPULAR
</Link>
</div>
{popularSpaces.length < 1 && (
<p className="flex min-h-[400px] items-center justify-center text-center normal-case">
<p className='flex min-h-[400px] items-center justify-center text-center normal-case'>
<b>No Spaces found</b>
</p>
)}
<InfiniteScroll
dataLength={popularSpaces.length}
next={() => {
console.log("calling next", popularSpaces.length / FETCH_PER_SCROLL + 1);
fetchPopularSpaces(Math.round(popularSpaces.length / FETCH_PER_SCROLL + 1));
console.log(
"calling next",
popularSpaces.length / FETCH_PER_SCROLL + 1
);
fetchPopularSpaces(
Math.round(popularSpaces.length / FETCH_PER_SCROLL + 1)
);
}}
scrollThreshold={0.5}
hasMore={popularSpaces.length < popularTotal}
@@ -406,7 +514,7 @@ const HomePage = () => {
endMessage={<></>}
>
{
<div className="property-space-grid pb-[100px]">
<div className='property-space-grid pb-[100px]'>
{popularSpaces.slice(0, 6).map((property, idx) => (
<PropertySpaceCard
key={property.id ?? idx}
@@ -416,51 +524,55 @@ const HomePage = () => {
))}
{popularSpaces.length < 4 ? (
<>
<div className="hidden 2xl:block"></div>
<div className="hidden lg:block"></div>
<div className="hidden md:block"></div>
<div className='hidden 2xl:block'></div>
<div className='hidden lg:block'></div>
<div className='hidden md:block'></div>
</>
) : null}
</div>
}
</InfiniteScroll>
</section>
<section className="container mx-auto pb-[80px] normal-case md:pt-[40px] md:pb-[140px] 2xl:px-16 px-6">
<div className="mb-[26px] flex items-center justify-between border-b border-gray-300 px-6 pb-[12px] md:px-0">
<h3 className="text-3xl font-bold">Browse By Category</h3>
<section className='container mx-auto px-6 pb-[80px] normal-case md:pb-[140px] md:pt-[40px] 2xl:px-16'>
<div className='mb-[26px] flex items-center justify-between border-b border-gray-300 px-6 pb-[12px] md:px-0'>
<h3 className='text-3xl font-bold'>Browse By Category</h3>
<Link
to={`/explore?category=&section=popular&price_range=&space_name=&location=&from=&to=`}
className="my-text-gradient text-sm font-semibold tracking-wider"
id="view-all-popular"
className='my-text-gradient text-sm font-semibold tracking-wider'
id='view-all-popular'
>
VIEW ALL CATEGORIES
</Link>
</div>
<div className="md:browse-grid flex flex-wrap justify-between w-full gap-4">
{spaceCategories.slice(0,spaceCategories.length-4).map((tab, idx) => (
<div className='md:browse-grid flex w-full flex-wrap justify-between gap-4'>
{spaceCategories
.slice(0, spaceCategories.length - 4)
.map((tab, idx) => (
<Link
key={tab.id}
to={`/explore?category=${tab.category}&section=popular`}
className="rounded-[6px] border w-full flex grow flex-cols w-full md:max-w- border-[#EAECF0] bg-[#F9FAFB]"
className='flex-cols md:max-w- flex w-full w-full grow rounded-[6px] border border-[#EAECF0] bg-[#F9FAFB]'
>
<img
src={tab.image}
alt={tab.category}
className="h-24 w-full rounded-lg object-cover md:h-40"
className='h-24 w-full rounded-lg object-cover md:h-40'
/>
<p className="text-lg w-full py-3 px-5 text-right font-semibold">{tab.category}</p>
<p className='text-lg w-full px-5 py-3 text-right font-semibold'>
{tab.category}
</p>
</Link>
))}
</div>
</section>
<section className="container mx-auto py-[64px] 2xl:px-16 px-6">
<div className="mb-[26px] flex items-center justify-between border-b border-gray-300 px-6 pb-[12px] md:px-0">
<h3 className="text-2xl font-bold md:text-3xl">Top rated hosts</h3>
<section className='container mx-auto px-6 py-[64px] 2xl:px-16'>
<div className='mb-[26px] flex items-center justify-between border-b border-gray-300 px-6 pb-[12px] md:px-0'>
<h3 className='text-2xl font-bold md:text-3xl'>Top rated hosts</h3>
<Link
to={`/explore?section=hosts`}
className="my-text-gradient text-sm font-semibold tracking-wider md:text-base"
id="view-all-hosts"
className='my-text-gradient text-sm font-semibold tracking-wider md:text-base'
id='view-all-hosts'
>
VIEW ALL HOSTS
</Link>
@@ -468,19 +580,19 @@ const HomePage = () => {
<HostCardSlider hosts={hosts} />
</section>
<section className="container mx-auto pt-[40px] 2xl:px-16 px-6">
<div className="mb-[26px] flex items-center justify-between border-b border-gray-300 px-6 pb-[12px] md:px-0">
<h3 className="text-2xl font-bold md:text-3xl">New Spaces</h3>
<section className='container mx-auto px-6 pt-[40px] 2xl:px-16'>
<div className='mb-[26px] flex items-center justify-between border-b border-gray-300 px-6 pb-[12px] md:px-0'>
<h3 className='text-2xl font-bold md:text-3xl'>New Spaces</h3>
<Link
to={`/explore?section=new-spaces`}
className="my-text-gradient text-sm font-semibold tracking-wider md:text-base"
id="view-all-new-spaces"
className='my-text-gradient text-sm font-semibold tracking-wider md:text-base'
id='view-all-new-spaces'
>
VIEW ALL NEW SPACES
</Link>
</div>
{newSpaces.length == 0 && (
<p className="flex min-h-[400px] items-center justify-center text-center normal-case">
<p className='flex min-h-[400px] items-center justify-center text-center normal-case'>
<b>No Spaces found</b>
</p>
)}
@@ -494,13 +606,13 @@ const HomePage = () => {
hasMore={newSpaces.length < newTotal}
loader={<></>}
endMessage={
<p className="text-center normal-case">
<p className='text-center normal-case'>
<b></b>
</p>
}
>
{
<div className="property-space-grid pb-[100px]">
<div className='property-space-grid pb-[100px]'>
{newSpaces.slice(0, 6).map((property, idx) => (
<PropertySpaceCard
key={property.id ?? idx}
@@ -510,9 +622,9 @@ const HomePage = () => {
))}
{newSpaces.length < 4 ? (
<>
<div className="hidden 2xl:block"></div>
<div className="hidden lg:block"></div>
<div className="hidden md:block"></div>
<div className='hidden 2xl:block'></div>
<div className='hidden lg:block'></div>
<div className='hidden md:block'></div>
</>
) : null}
</div>
@@ -521,50 +633,59 @@ const HomePage = () => {
</section>
{(!isLoggedIn || userRole === "customer") && (
<section className="container bg-gray-100 mx-auto py-20 rounded-xl mb-12 2xl:px-16 px-6 md:flex justify-between md:flex-nowrap items-center">
<div className="w-full md:w-[25%] mt-8 md:mt-0">
<h3 className="text-xl pb-3 leading-10 font-bold md:text-4xl">Host Your Space Today!</h3>
<p className="text-base text-left my-4">
Unlock new income opportunities by listing your space on our platform. Join a community of successful hosts, reach thousands of potential guests, and maximize your property's potential.
<section className='container mx-auto mb-12 items-center justify-between rounded-xl bg-gray-100 px-6 py-20 md:flex md:flex-nowrap 2xl:px-16'>
<div className='mt-8 w-full md:mt-0 md:w-[25%]'>
<h3 className='pb-3 text-xl font-bold leading-10 md:text-4xl'>
Host Your Space Today!
</h3>
<p className='my-4 text-left text-base'>
Unlock new income opportunities by listing your space on our
platform. Join a community of successful hosts, reach thousands of
potential guests, and maximize your property's potential.
</p>
<button
onClick={() => authState.originalRole === "customer" ? navigate("/become-a-host") : navigate("/signup")}
className="login-btn-gradient mb-4 py-3 px-4 rounded-3xl text-sm text-white">
onClick={() =>
authState.originalRole === "customer"
? navigate("/become-a-host")
: navigate("/signup")
}
className='login-btn-gradient mb-4 rounded-3xl px-4 py-3 text-sm text-white'
>
Start Hosting Now
</button>
</div>
<div className="hidden md:flex justify-between w-full md:w-1/2">
<div className='hidden w-full justify-between md:flex md:w-1/2'>
<img
src="https://freepngimg.com/thumb/building/154733-building-hotel-download-hq.png"
alt="Descriptive Alt Text"
className="w-full md:w-[70%] h-auto rounded-lg object-cover"
src='https://freepngimg.com/thumb/building/154733-building-hotel-download-hq.png'
alt='Descriptive Alt Text'
className='h-auto w-full rounded-lg object-cover md:w-[70%]'
/>
</div>
</section>
)}
<Tooltip
anchorId="search-button"
place="right"
content="Search"
anchorId='search-button'
place='right'
content='Search'
noArrow
/>
<Tooltip
anchorId="view-all-popular"
place="bottom"
content="All popular"
anchorId='view-all-popular'
place='bottom'
content='All popular'
noArrow
/>
<Tooltip
anchorId="view-all-hosts"
place="bottom"
content="All hosts"
anchorId='view-all-hosts'
place='bottom'
content='All hosts'
noArrow
/>
<Tooltip
anchorId="view-all-new-spaces"
place="bottom"
content="New spaces"
anchorId='view-all-new-spaces'
place='bottom'
content='New spaces'
noArrow
/>
</>
+173 -93
View File
@@ -15,7 +15,7 @@ import NoteIcon from "@/components/frontend/icons/NoteIcon";
import { formatDate } from "@/utils/date-time-utils";
import { DRAFT_STATUS, SPACE_STATUS } from "@/utils/constants";
import { useForm } from "react-hook-form";
import CustomLocationAutoCompleteV2 from "@/components/CustomLocationAutoCompleteV2";
// import CustomLocationAutoCompleteV2 from "@/components/CustomLocationAutoCompleteV2";
import DatePickerV3 from "@/components/DatePickerV3";
import { isValidDate, parseSearchParams } from "@/utils/utils";
import FilterCheckBoxesV2 from "@/components/FilterCheckBoxesV2";
@@ -54,7 +54,8 @@ const ctrl = new AbortController();
const SearchPage = () => {
const [searchParams, setSearchParams] = useSearchParams();
const { dispatch: globalDispatch, state: globalState } = useContext(GlobalContext);
const { dispatch: globalDispatch, state: globalState } =
useContext(GlobalContext);
const [filterPopup, setFilterPopup] = useState(false);
@@ -82,7 +83,7 @@ const SearchPage = () => {
async function fetchSpaces() {
const params = parseSearchParams(searchParams);
const location = (params.location?.split(","))
const location = params.location?.split(",");
const d = new Date(params.booking_start_time || undefined);
const filter = {
@@ -97,12 +98,28 @@ const SearchPage = () => {
globalDispatch({ type: "START_LOADING" });
// make sure only approved and non-draft spaces
var where = [`ergo_property_spaces.space_status = ${SPACE_STATUS.APPROVED} AND schedule_template_id IS NOT NULL AND ergo_property_spaces_images.is_approved = 1 AND ergo_property_spaces.draft_status = ${DRAFT_STATUS.COMPLETED} AND ergo_property_spaces.deleted_at IS NULL`];
var where = [
`ergo_property_spaces.space_status = ${SPACE_STATUS.APPROVED} AND schedule_template_id IS NOT NULL AND ergo_property_spaces_images.is_approved = 1 AND ergo_property_spaces.draft_status = ${DRAFT_STATUS.COMPLETED} AND ergo_property_spaces.deleted_at IS NULL`,
];
// use data.location to search address, city, country and zip
if (filter.location) {
where.push(
`(ergo_property.address_line_1 LIKE '%${filter.location}%' OR ergo_property.address_line_2 LIKE '%${filter.location}%' OR ergo_property.city LIKE '%${location[0] && location[0]}%' OR ergo_property.country LIKE '%${location.length === 1 ? location[0] : location.length === 2 ? location[1] : location[2]}%' OR ergo_property.zip LIKE '%${filter.location}%' OR ergo_property.name LIKE '%${filter.location}%')`,
`(ergo_property.address_line_1 LIKE '%${
filter.location
}%' OR ergo_property.address_line_2 LIKE '%${
filter.location
}%' OR ergo_property.city LIKE '%${
location[0] && location[0]
}%' OR ergo_property.country LIKE '%${
location.length === 1
? location[0]
: location.length === 2
? location[1]
: location[2]
}%' OR ergo_property.zip LIKE '%${
filter.location
}%' OR ergo_property.name LIKE '%${filter.location}%')`
);
}
@@ -113,29 +130,39 @@ const SearchPage = () => {
if (filter.capacity.length > 0) {
if (filter.capacity[filter.capacity.length - 1] !== "Greater Than 30") {
const str = filter.capacity[filter.capacity.length - 1]; // Get the first (and only) element from the array
const numbers = str.split('-').map(num => num.trim()); // Split the string and trim spaces
const numbers = str.split("-").map((num) => num.trim()); // Split the string and trim spaces
const [num1, num2] = numbers; // Destructure the resulting array to get the numbers
where.pop()
where.pop();
where.push(
`ergo_property_spaces.max_capacity BETWEEN ${num1} AND ${num2}`,
`ergo_property_spaces.max_capacity BETWEEN ${num1} AND ${num2}`
);
} else {
where.push(
`ergo_property_spaces.max_capacity > 30`,
);
where.push(`ergo_property_spaces.max_capacity > 30`);
}
}
if (filter.category.length > 0) {
where.push(`(${filter.category.map((cg) => `ergo_spaces.category LIKE '%${cg}%'`).join(" OR ")})`);
where.push(
`(${filter.category
.map((cg) => `ergo_spaces.category LIKE '%${cg}%'`)
.join(" OR ")})`
);
}
if (filter.amenity.length > 0) {
where.push(`(${filter.amenity.map((am) => `ergo_amenity.name LIKE '%${am}%'`).join(" OR ")})`);
where.push(
`(${filter.amenity
.map((am) => `ergo_amenity.name LIKE '%${am}%'`)
.join(" OR ")})`
);
}
if (filter.review.length > 0) {
where.push(`(${filter.review.map((rv) => `ER.average_space_rating >= ${rv.replace("+", "")}`).join(" OR ")})`);
where.push(
`(${filter.review
.map((rv) => `ER.average_space_rating >= ${rv.replace("+", "")}`)
.join(" OR ")})`
);
}
if (filter.price.length > 0) {
@@ -143,8 +170,13 @@ const SearchPage = () => {
`(${filter.price
.filter((pr) => pr.trim() != "")
.map((pr) => pr.split("-"))
.map(([from, to]) => `ergo_property_spaces.rate BETWEEN ${from.trim().slice(1)} AND ${to.trim().slice(1)} `)
.join(" OR ")})`,
.map(
([from, to]) =>
`ergo_property_spaces.rate BETWEEN ${from
.trim()
.slice(1)} AND ${to.trim().slice(1)} `
)
.join(" OR ")})`
);
}
@@ -152,9 +184,17 @@ const SearchPage = () => {
const user_id = Number(localStorage.getItem("user"));
const result = await sdk.callRawAPI(
"/v2/api/custom/ergo/popular/PAGINATE",
{ page: 1, limit: 10000, user_id: Number(user_id), where, booking_start_time: isValidDate(filter.booking_start_time || "") ? new Date(filter.booking_start_time).toISOString() : undefined },
{
page: 1,
limit: 10000,
user_id: Number(user_id),
where,
booking_start_time: isValidDate(filter.booking_start_time || "")
? new Date(filter.booking_start_time).toISOString()
: undefined,
},
"POST",
ctrl.signal,
ctrl.signal
);
setPropertySpaces(result.list);
} catch (err) {
@@ -172,7 +212,11 @@ const SearchPage = () => {
useEffect(() => {
if (isValidDate(searchParams.get("booking_start_time"))) {
setValue("booking_start_time", new Date(searchParams.get("booking_start_time")), { shouldDirty: true });
setValue(
"booking_start_time",
new Date(searchParams.get("booking_start_time")),
{ shouldDirty: true }
);
}
}, []);
@@ -207,7 +251,12 @@ const SearchPage = () => {
globalState.location = result;
}
searchParams.set("location", globalState.location);
searchParams.set("booking_start_time", isValidDate(data.booking_start_time) ? data.booking_start_time.toISOString() : "");
searchParams.set(
"booking_start_time",
isValidDate(data.booking_start_time)
? data.booking_start_time.toISOString()
: ""
);
searchParams.set("category", data.category.join(","));
searchParams.set("price", data.price.join(","));
searchParams.set("amenity", data.amenity.join(","));
@@ -231,39 +280,43 @@ const SearchPage = () => {
};
return (
<div className="min-h-screen bg-white">
<section className="container mx-auto mb-[24px] bg-white px-6 pt-[120px] normal-case 2xl:px-32">
<div className='min-h-screen bg-white'>
<section className='container mx-auto mb-[24px] bg-white px-6 pt-[120px] normal-case 2xl:px-32'>
<form
className="flex w-full flex-wrap justify-center"
className='flex w-full flex-wrap justify-center'
onSubmit={handleSubmit(onSubmit)}
id="search-bar"
id='search-bar'
>
<CustomStaticLocationAutoCompleteV2
// type={true}
// control={control}
// setValue={(val) => setValue("location", val)}
// name="location"
type="static"
setValue={(val) => globalDispatch({
type='static'
setValue={(val) =>
globalDispatch({
type: "SETLOCATION",
payload: {
location:val
location: val,
},
})}
containerClassName={"mb-4 flex min-h-[45px] w-full max-w-full flex-grow items-center gap-2 border-2 px-4 lg:mb-0 lg:w-[unset] lg:border-r-0 lg:border-b-2"}
className="border-0 focus:outline-none"
placeholder="Search by city or zip code"
})
}
containerClassName={
"mb-4 flex min-h-[45px] w-full max-w-full flex-grow items-center gap-2 border-2 px-4 lg:mb-0 lg:w-[unset] lg:border-r-0 lg:border-b-2"
}
className='border-0 focus:outline-none'
placeholder='Search by city or zip code'
suggestionType={["(regions)"]}
/>
<div className="relative mb-6 flex h-[45px] w-full lg:w-1/2 cursor-pointer items-center gap-2 border-2 lg:border-r-0 p-2 lg:mb-0 lg:w-[unset] lg:min-w-[230px]">
<div className='relative mb-6 flex h-[45px] w-full cursor-pointer items-center gap-2 border-2 p-2 lg:mb-0 lg:w-1/2 lg:w-[unset] lg:min-w-[230px] lg:border-r-0'>
<DatePickerV3
reset={() => resetField("booking_start_time")}
setValue={(val) => setValue("booking_start_time", val)}
control={control}
name="booking_start_time"
labelClassName="justify-between flex-grow flex-row-reverse"
placeholder="Select Date"
name='booking_start_time'
labelClassName='justify-between flex-grow flex-row-reverse'
placeholder='Select Date'
min={new Date()}
/>
</div>
@@ -277,32 +330,32 @@ const SearchPage = () => {
/>
</div> */}
<button
className="login-btn-gradient mb-4 w-full whitespace-nowrap p-2 px-6 text-white disabled:text-[#98A2B3] lg:mb-0 lg:w-[unset]"
type="submit"
id="update-search"
className='login-btn-gradient mb-4 w-full whitespace-nowrap p-2 px-6 text-white disabled:text-[#98A2B3] lg:mb-0 lg:w-[unset]'
type='submit'
id='update-search'
>
Update Search
</button>
</form>
<div className="block lg:hidden">
<div className='block lg:hidden'>
<button
type="button"
className="mb-6 flex w-full items-center justify-center gap-2 border-2 py-2 text-center"
type='button'
className='mb-6 flex w-full items-center justify-center gap-2 border-2 py-2 text-center'
onClick={() => setFilterPopup(true)}
>
<FilterIcon />
Filters
</button>
<div className="snap-scroll flex gap-4">
<div className='snap-scroll flex gap-4'>
{Object.entries(parseSearchParams(searchParams)).map(([k, v]) => {
if (!v) return null;
if (k == "booking_start_time") {
return (
<span className="whitespace-nowrap rounded-[50px] bg-[#F2F4F7] py-[6px] px-[16px] text-[#475467]">
<span className='whitespace-nowrap rounded-[50px] bg-[#F2F4F7] px-[16px] py-[6px] text-[#475467]'>
{formatDate(v)}
<button
type="button"
className="ml-3"
type='button'
className='ml-3'
onClick={() => removeFilter(k)}
>
&#x2715;
@@ -318,12 +371,12 @@ const SearchPage = () => {
return vArr.map((filter, i) => (
<span
key={i}
className="whitespace-nowrap rounded-[50px] bg-[#F2F4F7] py-[6px] px-[16px] text-[#475467]"
className='whitespace-nowrap rounded-[50px] bg-[#F2F4F7] px-[16px] py-[6px] text-[#475467]'
>
{filter}
<button
type="button"
className="ml-3"
type='button'
className='ml-3'
onClick={() => removeFilter(k, filter)}
>
&#x2715;
@@ -335,12 +388,12 @@ const SearchPage = () => {
return (
<span
key={k}
className="whitespace-nowrap rounded-[50px] bg-[#F2F4F7] py-[6px] px-[16px] text-[#475467]"
className='whitespace-nowrap rounded-[50px] bg-[#F2F4F7] px-[16px] py-[6px] text-[#475467]'
>
{v}
<button
type="button"
className="ml-3"
type='button'
className='ml-3'
onClick={() => removeFilter(k)}
>
&#x2715;
@@ -351,21 +404,25 @@ const SearchPage = () => {
</div>
</div>
</section>
<section className="search-page-container container mx-auto flex gap-[32px] bg-white px-6 normal-case 2xl:px-32">
<section className='search-page-container container mx-auto flex gap-[32px] bg-white px-6 normal-case 2xl:px-32'>
<aside
className={`hidden xl:block xl:w-1/5 ${filterPopup ? "popup-tablet" : ""}`}
className={`hidden xl:block xl:w-1/5 ${
filterPopup ? "popup-tablet" : ""
}`}
onClick={() => setFilterPopup(false)}
>
<div
className={`${filterPopup ? "w-[80%] max-w-[500px] rounded-xl p-5" : ""} flex flex-col bg-white `}
className={`${
filterPopup ? "w-[80%] max-w-[500px] rounded-xl p-5" : ""
} flex flex-col bg-white `}
onClick={(e) => e.stopPropagation()}
>
{filterPopup ? (
<div className="mb-[18px] flex items-center justify-between border-b pb-2">
<h3 className="text-2xl font-semibold">Filters</h3>
<div className='mb-[18px] flex items-center justify-between border-b pb-2'>
<h3 className='text-2xl font-semibold'>Filters</h3>
<button
onClick={() => setFilterPopup(false)}
className="rounded-full border p-1 px-3 text-2xl font-normal duration-300 hover:bg-gray-200"
className='rounded-full border p-1 px-3 text-2xl font-normal duration-300 hover:bg-gray-200'
>
&#x2715;
</button>
@@ -375,61 +432,84 @@ const SearchPage = () => {
<div className={`${filterPopup ? "snap-scroll h-[60vh]" : ""}`}>
<FilterCheckBoxesV2
control={control}
name="category"
title="Spaces"
labelField="category"
valueField="category"
name='category'
title='Spaces'
labelField='category'
valueField='category'
options={spaceCategories}
reset={() => { resetField("category"); searchParams.set("category", ""); setSearchParams(searchParams) }}
reset={() => {
resetField("category");
searchParams.set("category", "");
setSearchParams(searchParams);
}}
/>
<FilterCheckBoxesV2
control={control}
name="price"
title="Prices"
labelField="name"
valueField="name"
name='price'
title='Prices'
labelField='name'
valueField='name'
options={prices}
reset={() => { resetField("price"); searchParams.set("price", ""); setSearchParams(searchParams) }}
reset={() => {
resetField("price");
searchParams.set("price", "");
setSearchParams(searchParams);
}}
/>
<FilterCheckBoxesV2
control={control}
name="capacity"
title="Capacity"
labelField="name"
valueField="name"
name='capacity'
title='Capacity'
labelField='name'
valueField='name'
options={capacity}
reset={() => { resetField("capacity"); searchParams.set("capacity", ""); setSearchParams(searchParams) }}
reset={() => {
resetField("capacity");
searchParams.set("capacity", "");
setSearchParams(searchParams);
}}
/>
<FilterCheckBoxesV2
name="amenity"
name='amenity'
control={control}
title="Amenities"
title='Amenities'
options={amenityCategories}
labelField="name"
valueField="name"
reset={() => { resetField("amenity"); searchParams.set("amenity", ""); setSearchParams(searchParams) }}
labelField='name'
valueField='name'
reset={() => {
resetField("amenity");
searchParams.set("amenity", "");
setSearchParams(searchParams);
}}
/>
<FilterCheckBoxesV2
name="review"
name='review'
control={control}
title="Reviews"
title='Reviews'
options={reviews}
labelField="name"
valueField="name"
reset={() => { resetField("review"); searchParams.set("review", ""); setSearchParams(searchParams) }}
labelField='name'
valueField='name'
reset={() => {
resetField("review");
searchParams.set("review", "");
setSearchParams(searchParams);
}}
/>
</div>
</div>
</aside>
<div className="mb-16 max-w-full flex-grow xl:w-4/5">
<div className="mb-[15px] flex items-center justify-between">
<div className='mb-16 max-w-full flex-grow xl:w-4/5'>
<div className='mb-[15px] flex items-center justify-between'>
<h5 className={propertySpaces.length == 0 ? "md:invisible" : ""}>
{propertySpaces.length == 0 ? (
"No results Found"
) : (
<>
{" "}
Results Found <strong className="font-semibold">({propertySpaces.length})</strong>
Results Found{" "}
<strong className='font-semibold'>
({propertySpaces.length})
</strong>
</>
)}
</h5>
@@ -439,16 +519,16 @@ const SearchPage = () => {
{ label: "Rating (Low to High)", value: 1 },
]}
onChange={setSortAsc}
accessor="label"
valueAccessor="value"
className="min-w-[200px]"
accessor='label'
valueAccessor='value'
className='min-w-[200px]'
listOptionClassName={"pl-4"}
/>
</div>
<div className="flex flex-wrap justify-center gap-6 lg:block">
<div className='flex flex-wrap justify-center gap-6 lg:block'>
{propertySpaces.length == 0 && (
<div className="hidden min-h-[300px] items-center justify-center normal-case text-[#667085] md:flex">
<h2 className="flex gap-3">
<div className='hidden min-h-[300px] items-center justify-center normal-case text-[#667085] md:flex'>
<h2 className='flex gap-3'>
<NoteIcon /> No results found
</h2>
</div>
@@ -464,8 +544,8 @@ const SearchPage = () => {
</div>
</section>
<Tooltip
anchorId="update-search"
place="right"
anchorId='update-search'
place='right'
content={"Search"}
noArrow
/>