This commit is contained in:
Kieran 2023-07-19 16:21:21 +01:00
parent 06b9dba09b
commit d292e658fc
Signed by: Kieran
GPG Key ID: DE71CEB3925BE941
23 changed files with 496 additions and 238 deletions

View File

@ -180,19 +180,55 @@
</symbol>
<!-- V2 -->
<symbol id="mail" viewBox="0 0 24 24" fill="none">
<g id="mail-01">
<g id="Solid">
<path d="M2.13352 8.18144C1.83359 7.9672 1.68363 7.86008 1.55288 7.84617C1.35735 7.82537 1.16139 7.92622 1.06467 8.09741C0.999992 8.21189 0.999995 8.39416 1 8.75869V15.2413C0.999988 16.0463 0.999978 16.7106 1.04419 17.2518C1.09012 17.8139 1.18868 18.3306 1.43598 18.816C1.81947 19.5686 2.43139 20.1805 3.18404 20.564C3.66937 20.8113 4.18608 20.9099 4.74818 20.9558C5.28937 21 5.95372 21 6.75868 21H17.2413C18.0463 21 18.7106 21 19.2518 20.9558C19.8139 20.9099 20.3306 20.8113 20.816 20.564C21.5686 20.1805 22.1805 19.5686 22.564 18.816C22.8113 18.3306 22.9099 17.8139 22.9558 17.2518C23 16.7106 23 16.0463 23 15.2413V8.75868C23 8.58001 23 8.49068 22.9836 8.42829C22.9096 8.14627 22.603 7.98561 22.329 8.08531C22.2684 8.10737 22.1941 8.15886 22.0453 8.26184L14.3032 13.6219C13.7542 14.0032 13.2722 14.3379 12.7247 14.4706C12.2458 14.5867 11.7456 14.583 11.2685 14.4599C10.7229 14.3191 10.2459 13.9774 9.70265 13.5881L2.13352 8.18144Z" fill="currentColor"/>
<path d="M22.1328 5.76872C22.3174 5.64092 22.4097 5.57702 22.4664 5.47424C22.5104 5.39443 22.5356 5.26804 22.5255 5.17745C22.5125 5.06079 22.463 4.98377 22.3638 4.82973C21.9839 4.23964 21.4373 3.75256 20.816 3.43598C20.3306 3.18868 19.8139 3.09012 19.2518 3.04419C18.7106 2.99998 18.0463 2.99999 17.2413 3H6.7587C5.95374 2.99999 5.28937 2.99998 4.74818 3.04419C4.18608 3.09012 3.66937 3.18868 3.18404 3.43598C2.62501 3.72082 2.1418 4.1326 1.77436 4.63335C1.65877 4.79089 1.60097 4.86966 1.58192 4.98921C1.56703 5.08269 1.58783 5.21257 1.63116 5.29674C1.68657 5.40436 1.78269 5.47302 1.97493 5.61033L10.75 11.8783C11.4773 12.3977 11.6316 12.4881 11.7681 12.5233C11.9272 12.5644 12.0939 12.5656 12.2535 12.5269C12.3906 12.4937 12.5463 12.4056 13.281 11.8969L22.1328 5.76872Z" fill="currentColor"/>
</g>
<g>
<path d="M2.13352 8.18144C1.83359 7.9672 1.68363 7.86008 1.55288 7.84617C1.35735 7.82537 1.16139 7.92622 1.06467 8.09741C0.999992 8.21189 0.999995 8.39416 1 8.75869V15.2413C0.999988 16.0463 0.999978 16.7106 1.04419 17.2518C1.09012 17.8139 1.18868 18.3306 1.43598 18.816C1.81947 19.5686 2.43139 20.1805 3.18404 20.564C3.66937 20.8113 4.18608 20.9099 4.74818 20.9558C5.28937 21 5.95372 21 6.75868 21H17.2413C18.0463 21 18.7106 21 19.2518 20.9558C19.8139 20.9099 20.3306 20.8113 20.816 20.564C21.5686 20.1805 22.1805 19.5686 22.564 18.816C22.8113 18.3306 22.9099 17.8139 22.9558 17.2518C23 16.7106 23 16.0463 23 15.2413V8.75868C23 8.58001 23 8.49068 22.9836 8.42829C22.9096 8.14627 22.603 7.98561 22.329 8.08531C22.2684 8.10737 22.1941 8.15886 22.0453 8.26184L14.3032 13.6219C13.7542 14.0032 13.2722 14.3379 12.7247 14.4706C12.2458 14.5867 11.7456 14.583 11.2685 14.4599C10.7229 14.3191 10.2459 13.9774 9.70265 13.5881L2.13352 8.18144Z" fill="currentColor"/>
<path d="M22.1328 5.76872C22.3174 5.64092 22.4097 5.57702 22.4664 5.47424C22.5104 5.39443 22.5356 5.26804 22.5255 5.17745C22.5125 5.06079 22.463 4.98377 22.3638 4.82973C21.9839 4.23964 21.4373 3.75256 20.816 3.43598C20.3306 3.18868 19.8139 3.09012 19.2518 3.04419C18.7106 2.99998 18.0463 2.99999 17.2413 3H6.7587C5.95374 2.99999 5.28937 2.99998 4.74818 3.04419C4.18608 3.09012 3.66937 3.18868 3.18404 3.43598C2.62501 3.72082 2.1418 4.1326 1.77436 4.63335C1.65877 4.79089 1.60097 4.86966 1.58192 4.98921C1.56703 5.08269 1.58783 5.21257 1.63116 5.29674C1.68657 5.40436 1.78269 5.47302 1.97493 5.61033L10.75 11.8783C11.4773 12.3977 11.6316 12.4881 11.7681 12.5233C11.9272 12.5644 12.0939 12.5656 12.2535 12.5269C12.3906 12.4937 12.5463 12.4056 13.281 11.8969L22.1328 5.76872Z" fill="currentColor"/>
</g>
</symbol>
<symbol id="bell-v2" viewBox="0 0 24 24" fill="none" >
<g id="bell-02">
<g id="Solid">
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.99974 21C8.99974 20.4477 9.44745 20 9.99974 20H13.9997C14.552 20 14.9997 20.4477 14.9997 21C14.9997 21.5523 14.552 22 13.9997 22H9.99974C9.44745 22 8.99974 21.5523 8.99974 21Z" fill="currentColor"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.04999 3.05025C8.36275 1.7375 10.1432 1 11.9997 1C13.8563 1 15.6367 1.7375 16.9495 3.05025C18.2622 4.36301 18.9997 6.14349 18.9997 8C18.9997 10.9127 19.7317 12.8439 20.4991 14.0771L20.511 14.0962C20.8683 14.6704 21.1507 15.1243 21.3411 15.4547C21.4366 15.6202 21.5235 15.7797 21.5879 15.9215C21.62 15.9922 21.6559 16.079 21.684 16.1733C21.7073 16.2515 21.7517 16.4187 21.7351 16.6223C21.7239 16.7591 21.696 16.9928 21.5618 17.2343C21.4277 17.4758 21.244 17.623 21.1337 17.7047C20.8834 17.8904 20.596 17.9329 20.5001 17.947L20.4957 17.9477C20.3482 17.9695 20.181 17.9804 20.0122 17.9869C19.677 18 19.2128 18 18.6356 18H5.36388C4.78666 18 4.32252 18 3.98726 17.9869C3.81851 17.9804 3.65123 17.9695 3.50382 17.9477L3.49939 17.947C3.40347 17.9329 3.11604 17.8904 2.86574 17.7047C2.7555 17.623 2.57178 17.4758 2.43762 17.2343C2.30347 16.9928 2.27558 16.7591 2.26439 16.6223C2.24774 16.4187 2.29214 16.2515 2.31545 16.1733C2.34354 16.079 2.37948 15.9922 2.41161 15.9215C2.47598 15.7797 2.56291 15.6202 2.65833 15.4547C2.84876 15.1243 3.13124 14.6703 3.48856 14.0961L3.50035 14.0771C4.26773 12.8439 4.99974 10.9127 4.99974 8C4.99974 6.14348 5.73724 4.36301 7.04999 3.05025Z" fill="currentColor"/>
</g>
<symbol id="bell-v2" viewBox="0 0 24 24" fill="none">
<g>
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.99974 21C8.99974 20.4477 9.44745 20 9.99974 20H13.9997C14.552 20 14.9997 20.4477 14.9997 21C14.9997 21.5523 14.552 22 13.9997 22H9.99974C9.44745 22 8.99974 21.5523 8.99974 21Z" fill="currentColor"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.04999 3.05025C8.36275 1.7375 10.1432 1 11.9997 1C13.8563 1 15.6367 1.7375 16.9495 3.05025C18.2622 4.36301 18.9997 6.14349 18.9997 8C18.9997 10.9127 19.7317 12.8439 20.4991 14.0771L20.511 14.0962C20.8683 14.6704 21.1507 15.1243 21.3411 15.4547C21.4366 15.6202 21.5235 15.7797 21.5879 15.9215C21.62 15.9922 21.6559 16.079 21.684 16.1733C21.7073 16.2515 21.7517 16.4187 21.7351 16.6223C21.7239 16.7591 21.696 16.9928 21.5618 17.2343C21.4277 17.4758 21.244 17.623 21.1337 17.7047C20.8834 17.8904 20.596 17.9329 20.5001 17.947L20.4957 17.9477C20.3482 17.9695 20.181 17.9804 20.0122 17.9869C19.677 18 19.2128 18 18.6356 18H5.36388C4.78666 18 4.32252 18 3.98726 17.9869C3.81851 17.9804 3.65123 17.9695 3.50382 17.9477L3.49939 17.947C3.40347 17.9329 3.11604 17.8904 2.86574 17.7047C2.7555 17.623 2.57178 17.4758 2.43762 17.2343C2.30347 16.9928 2.27558 16.7591 2.26439 16.6223C2.24774 16.4187 2.29214 16.2515 2.31545 16.1733C2.34354 16.079 2.37948 15.9922 2.41161 15.9215C2.47598 15.7797 2.56291 15.6202 2.65833 15.4547C2.84876 15.1243 3.13124 14.6703 3.48856 14.0961L3.50035 14.0771C4.26773 12.8439 4.99974 10.9127 4.99974 8C4.99974 6.14348 5.73724 4.36301 7.04999 3.05025Z" fill="currentColor"/>
</g>
</symbol>
<symbol id="user-v2" viewBox="0 0 20 20" fill="none">
<g>
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.587 2.51896C12.7918 2.10681 13.292 1.93874 13.7041 2.14356C15.2113 2.89254 16.2499 4.44922 16.2499 6.25002C16.2499 8.05082 15.2113 9.6075 13.7041 10.3565C13.292 10.5613 12.7918 10.3932 12.587 9.98108C12.3822 9.56893 12.5502 9.06878 12.9624 8.86396C13.9248 8.38569 14.5833 7.39399 14.5833 6.25002C14.5833 5.10605 13.9248 4.11435 12.9624 3.63608C12.5502 3.43126 12.3822 2.93111 12.587 2.51896Z" fill="currentColor"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.2407 13.6285C14.4304 13.2091 14.9242 13.0231 15.3435 13.2128C16.7417 13.8455 17.9783 14.8661 18.9885 16.1518C19.2729 16.5137 19.21 17.0376 18.8481 17.322C18.4862 17.6063 17.9623 17.5434 17.678 17.1815C16.8091 16.0756 15.7772 15.2384 14.6564 14.7312C14.2371 14.5415 14.051 14.0478 14.2407 13.6285Z" fill="currentColor"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.33326 6.25002C3.33326 3.71872 5.38529 1.66669 7.91659 1.66669C10.4479 1.66669 12.4999 3.71872 12.4999 6.25002C12.4999 8.78133 10.4479 10.8334 7.91659 10.8334C5.38529 10.8334 3.33326 8.78133 3.33326 6.25002Z" fill="currentColor"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M1.01132 16.1518C2.75447 13.9332 5.18086 12.5 7.91659 12.5C10.6523 12.5 13.0787 13.9332 14.8219 16.1518C15.019 16.4027 15.0555 16.7441 14.9161 17.031C14.7766 17.3179 14.4856 17.5 14.1666 17.5H1.66659C1.34758 17.5 1.05656 17.3179 0.917099 17.031C0.777643 16.7441 0.814228 16.4027 1.01132 16.1518Z" fill="currentColor"/>
</g>
</symbol>
<symbol id="fire" viewBox="0 0 16 20" fill="none">
<path d="M10.1549 7.86583C10.1549 7.86583 11.0832 2.38167 7.28153 0C7.225 0.942437 6.9703 1.86235 6.53406 2.69965C6.09782 3.53696 5.48985 4.27281 4.74987 4.85917C3.12403 6.28833 0.0673665 9.5 0.0998665 12.925C0.0891862 14.3893 0.487627 15.8274 1.2503 17.0774C2.01297 18.3275 3.10957 19.3397 4.41653 20C4.46323 19.339 4.64141 18.6939 4.94062 18.1027C5.23984 17.5114 5.65407 16.9858 6.15903 16.5567C6.58707 16.2276 6.94526 15.8166 7.21267 15.3476C7.48009 14.8785 7.65138 14.361 7.71653 13.825C8.83546 14.4196 9.78091 15.2945 10.4604 16.364C11.1399 17.4335 11.5303 18.6611 11.5932 19.9267V19.9433C12.8258 19.3775 13.878 18.482 14.6334 17.3556C15.3889 16.2292 15.8182 14.9159 15.874 13.5608C16.144 10.3417 14.3807 5.9675 12.8174 4.5375C12.2272 5.85522 11.3108 7.00073 10.1549 7.86583Z" fill="currentColor"/>
</symbol>
<symbol id="message-chat-circle" viewBox="0 0 21 20" fill="none">
<g>
<path fill-rule="evenodd" clip-rule="evenodd" d="M1.55256 13.75C1.55256 10.7776 3.90969 8.33331 6.85958 8.33331C9.80947 8.33331 12.1666 10.7776 12.1666 13.75C12.1666 16.7224 9.80947 19.1666 6.85958 19.1666C6.2532 19.1666 5.66906 19.0625 5.12448 18.8703C5.03447 18.8385 4.97864 18.8189 4.93769 18.8053C4.93026 18.8029 4.92418 18.8009 4.91931 18.7994L4.91479 18.7999C4.8862 18.803 4.84724 18.8083 4.77503 18.8181L2.27936 19.159C2.00931 19.1959 1.7383 19.0984 1.55365 18.8979C1.369 18.6974 1.29405 18.4193 1.35296 18.1532L1.86241 15.8518C1.88012 15.7718 1.88959 15.7287 1.89567 15.6969C1.89602 15.6951 1.89662 15.6919 1.89662 15.6919C1.89511 15.6867 1.89319 15.6801 1.89079 15.6722C1.87707 15.6267 1.85689 15.5648 1.82408 15.4644C1.64768 14.9244 1.55256 14.3476 1.55256 13.75Z" fill="currentColor"/>
<path d="M4.78953 6.97714C5.43752 6.77557 6.12821 6.66665 6.84815 6.66665C10.776 6.66665 13.8334 9.90887 13.8334 13.75C13.8334 14.428 13.7381 15.0874 13.5596 15.7136C14.0113 15.6324 14.4493 15.5113 14.8698 15.3538C14.9291 15.3316 14.9882 15.3089 15.0481 15.2884C15.0965 15.294 15.1446 15.3015 15.1928 15.3086L17.8703 15.7011C17.9966 15.7196 18.1401 15.7407 18.2651 15.7478C18.4035 15.7557 18.6187 15.7548 18.8467 15.6568C19.1315 15.5343 19.3606 15.3105 19.4896 15.0286C19.5929 14.8029 19.5987 14.5878 19.594 14.4492C19.5898 14.324 19.572 14.1801 19.5564 14.0533L19.218 11.3051C19.2092 11.2336 19.2047 11.1961 19.202 11.1686C19.2167 11.1084 19.2442 11.0501 19.2662 10.9924C19.5819 10.1649 19.7543 9.26819 19.7543 8.33331C19.7543 4.18603 16.3717 0.833313 12.2105 0.833313C8.51397 0.833313 5.43183 3.47901 4.78953 6.97714Z" fill="currentColor"/>
</g>
</symbol>
<symbol id="hash" viewBox="0 0 21 20" fill="none">
<g>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.16667 1.66669C7.6269 1.66669 8 2.03978 8 2.50002V5.83335H13V2.50002C13 2.03978 13.3731 1.66669 13.8333 1.66669C14.2936 1.66669 14.6667 2.03978 14.6667 2.50002V5.83335H17.1667C17.6269 5.83335 18 6.20645 18 6.66669C18 7.12692 17.6269 7.50002 17.1667 7.50002H14.6667V12.5H17.1667C17.6269 12.5 18 12.8731 18 13.3334C18 13.7936 17.6269 14.1667 17.1667 14.1667H14.6667V17.5C14.6667 17.9603 14.2936 18.3334 13.8333 18.3334C13.3731 18.3334 13 17.9603 13 17.5V14.1667H8V17.5C8 17.9603 7.6269 18.3334 7.16667 18.3334C6.70643 18.3334 6.33333 17.9603 6.33333 17.5V14.1667H3.83333C3.3731 14.1667 3 13.7936 3 13.3334C3 12.8731 3.3731 12.5 3.83333 12.5H6.33333V7.50002H3.83333C3.3731 7.50002 3 7.12692 3 6.66669C3 6.20645 3.3731 5.83335 3.83333 5.83335H6.33333V2.50002C6.33333 2.03978 6.70643 1.66669 7.16667 1.66669ZM13 12.5V7.50002H8V12.5H13Z" fill="currentColor"/>
</g>
</symbol>
<symbol id="user-up" viewBox="0 0 21 20" fill="none">
<g>
<path d="M16.9226 1.91076C16.7663 1.75448 16.5544 1.66669 16.3334 1.66669C16.1124 1.66669 15.9004 1.75448 15.7441 1.91076L13.2441 4.41076C12.9187 4.7362 12.9187 5.26384 13.2441 5.58928C13.5696 5.91471 14.0972 5.91471 14.4226 5.58928L15.5 4.51186V7.50002C15.5 7.96026 15.8731 8.33335 16.3334 8.33335C16.7936 8.33335 17.1667 7.96026 17.1667 7.50002V4.51187L18.2441 5.58928C18.5696 5.91471 19.0972 5.91471 19.4226 5.58928C19.7481 5.26384 19.7481 4.7362 19.4226 4.41076L16.9226 1.91076Z" fill="currentColor"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.13224 11.6667H9.86774C10.5386 11.6667 11.0922 11.6667 11.5432 11.7035C12.0116 11.7418 12.4422 11.8239 12.8466 12.03C13.4738 12.3496 13.9838 12.8595 14.3033 13.4867C14.5094 13.8912 14.5916 14.3218 14.6298 14.7902C14.6667 15.2412 14.6667 15.7948 14.6667 16.4656C14.6667 16.7012 14.6774 16.9399 14.6582 17.1749C14.6483 17.2959 14.623 17.4692 14.5304 17.6508C14.4106 17.886 14.2194 18.0773 13.9841 18.1971C13.8025 18.2897 13.6292 18.315 13.5082 18.3249C13.4038 18.3334 13.2852 18.3334 13.1859 18.3334C9.72864 18.3321 6.27134 18.3321 2.81404 18.3334C2.71478 18.3334 2.59623 18.3334 2.4918 18.3249C2.37079 18.315 2.19746 18.2897 2.01584 18.1971C1.78063 18.0773 1.58941 17.886 1.46957 17.6508C1.37703 17.4692 1.35166 17.2959 1.34177 17.1749C1.32257 16.9399 1.33333 16.7011 1.33332 16.4656C1.33331 15.7948 1.33331 15.2412 1.37015 14.7902C1.40842 14.3218 1.49056 13.8912 1.69664 13.4867C2.01621 12.8595 2.52615 12.3496 3.15336 12.03C3.5578 11.8239 3.98839 11.7418 4.4568 11.7035C4.9078 11.6667 5.46143 11.6667 6.13224 11.6667Z" fill="currentColor"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M4.24999 6.25002C4.24999 4.17895 5.92892 2.50002 7.99999 2.50002C10.0711 2.50002 11.75 4.17895 11.75 6.25002C11.75 8.32109 10.0711 10 7.99999 10C5.92892 10 4.24999 8.32109 4.24999 6.25002Z" fill="currentColor"/>
</g>
</symbol>
<symbol id="thumbs-up" viewBox="0 0 21 20" fill="none">
<g >
<path d="M10.1117 0.833313C9.51171 0.833313 8.96798 1.18667 8.72429 1.73497L5.92366 8.03638C5.85572 8.18926 5.82024 8.2681 5.79115 8.32361L5.78857 8.3285L5.78304 8.32888C5.72051 8.33291 5.63405 8.33331 5.46676 8.33331L4.80113 8.33331C4.36184 8.3333 3.98287 8.33328 3.67073 8.35879C3.34128 8.3857 3.01359 8.44513 2.69828 8.6058C2.22787 8.84548 1.84542 9.22793 1.60574 9.69834C1.44508 10.0137 1.38565 10.3413 1.35873 10.6708C1.33323 10.9829 1.33324 11.3619 1.33325 11.8012V15.6988C1.33324 16.138 1.33323 16.517 1.35873 16.8292C1.38565 17.1586 1.44508 17.4863 1.60574 17.8016C1.84542 18.272 2.22787 18.6545 2.69828 18.8942C3.01359 19.0548 3.34128 19.1143 3.67073 19.1412C3.98287 19.1667 4.36183 19.1667 4.80112 19.1666C5.18705 19.1666 5.49992 18.8538 5.49992 18.4678L5.49992 11.6666C5.49992 11.2064 5.87302 10.8333 6.33325 10.8333C6.79349 10.8333 7.16659 11.2064 7.16659 11.6666L7.16659 17.8333C7.16659 18.3 7.16659 18.5334 7.25741 18.7116C7.33731 18.8684 7.46479 18.9959 7.62159 19.0758C7.79985 19.1666 8.03321 19.1666 8.49992 19.1666H13.7662C14.3486 19.1667 14.832 19.1667 15.2298 19.1364C15.6451 19.1048 16.0279 19.037 16.3975 18.8695C16.9755 18.6076 17.4667 18.1862 17.8135 17.6547C18.0352 17.3149 18.1604 16.9468 18.2548 16.5411C18.3452 16.1526 18.4187 15.6748 18.5073 15.0993L18.9536 12.198C19.0709 11.4356 19.1671 10.8105 19.2011 10.3003C19.2362 9.77397 19.2133 9.28283 19.0337 8.81206C18.758 8.08921 18.2394 7.48477 17.5669 7.10235C17.1289 6.85329 16.647 6.75592 16.1214 6.71058C15.612 6.66662 14.9796 6.66663 14.2081 6.66665H13.4999C13.2528 6.66665 13.1176 6.666 13.0204 6.65806L13.0095 6.65711L13.0085 6.64612C13.0006 6.54896 12.9999 6.41375 12.9999 6.16665V3.72151C12.9999 2.1264 11.7068 0.833313 10.1117 0.833313Z" fill="currentColor"/>
</g>
</symbol>
<symbol id="globe" viewBox="0 0 21 20" fill="none">
<g>
<path d="M12.0782 10.484L14.2784 11.427C14.3867 11.4733 14.5118 11.5269 14.6163 11.5829C14.734 11.6459 14.9055 11.7521 15.0449 11.9394C15.2212 12.1763 15.3079 12.4681 15.2896 12.7629C15.2752 12.9959 15.1896 13.1785 15.1255 13.2956C15.0685 13.3996 14.993 13.5127 14.9276 13.6108C14.5186 14.2243 14.1508 15.0722 13.5706 15.549C13.4437 15.6533 13.2974 15.7316 13.1401 15.7794C12.4133 16.0001 11.0896 16.0403 10.3427 15.7466C10.148 15.67 9.97558 15.5457 9.84133 15.3852C9.33755 14.7828 9.20386 13.7474 8.96333 13.0255L8.95692 13.0065C8.93327 12.9372 8.88441 12.7939 8.87107 12.6395C8.85979 12.5088 8.86914 12.3771 8.8988 12.2494C9.02171 11.7197 9.36389 11.1667 9.63857 10.7086C9.69587 10.613 9.78448 10.4842 9.92647 10.3697C10.1131 10.2192 10.3392 10.1256 10.5776 10.1C10.7589 10.0805 10.9127 10.109 11.0208 10.136C11.3758 10.2249 11.7429 10.3403 12.0782 10.484Z" fill="currentColor"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.4999 0.833313C5.43731 0.833313 1.33325 4.93737 1.33325 9.99998C1.33325 15.0626 5.43731 19.1666 10.4999 19.1666C15.5625 19.1666 19.6666 15.0626 19.6666 9.99998C19.6666 4.93737 15.5625 0.833313 10.4999 0.833313ZM3.4212 7.51555C3.14831 8.2931 2.99992 9.12921 2.99992 9.99998C2.99992 14.1421 6.35778 17.5 10.4999 17.5C14.6421 17.5 17.9999 14.1421 17.9999 9.99998C17.9999 6.80623 16.0037 4.07873 13.1909 2.99718C13.1217 4.03512 13.4842 5.67357 12.6141 6.4745C11.7016 7.31445 10.0684 7.67798 8.95316 8.17356L8.21274 9.16081C8.15449 9.23853 8.08464 9.33174 8.01635 9.40895C7.93696 9.49869 7.81503 9.62 7.63588 9.70944C7.40325 9.82557 7.1402 9.86628 6.88336 9.82589C6.68555 9.79478 6.53265 9.716 6.42986 9.65445C6.34141 9.60149 6.24668 9.53377 6.16766 9.47729L3.4212 7.51555Z" fill="currentColor"/>
</g>
</symbol>

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 60 KiB

View File

@ -0,0 +1,34 @@
.fixed-tabs {
display: flex;
align-items: center;
flex-direction: row;
white-space: nowrap;
text-align: center;
user-select: none;
}
.fixed-tabs > a {
flex: 1;
padding: 16px;
color: var(--font-tertiary-color);
font-weight: 500;
font-size: 16px;
letter-spacing: 0.2px;
cursor: pointer;
text-decoration: none;
}
.fixed-tabs > a.active {
border-bottom: 1px solid var(--highlight);
color: var(--font-color);
}
.fixed-tabs > a.disabled {
opacity: 0.3;
cursor: not-allowed;
pointer-events: none;
}
.fixed-tabs > a:hover {
border-color: var(--highlight);
}

View File

@ -0,0 +1,6 @@
import "./FixedTabs.css";
import { ReactNode } from "react";
export function FixedTabs({ children }: { children: ReactNode }) {
return <div className="fixed-tabs">{children}</div>;
}

View File

@ -0,0 +1,54 @@
.stream-list {
display: flex;
gap: 4px;
overflow-x: auto;
}
.stream-list::-webkit-scrollbar {
height: 6.25px;
}
.stream-event {
display: flex;
padding: 8px 12px;
gap: 8px;
text-decoration: none;
}
.stream-event > div:first-of-type {
border-radius: 8px;
height: 49px;
width: 65px;
background-color: var(--gray-light);
background-image: var(--img);
background-position: center;
background-size: cover;
}
.stream-event span.live {
display: flex;
padding: 4px 6px;
justify-content: center;
align-items: center;
gap: 4px;
border-radius: 9px;
background: var(--live);
font-size: 12px;
font-weight: 700;
text-transform: uppercase;
}
.stream-event .details .reactions {
color: var(--font-secondary-color);
}
.stream-event .details > div:nth-of-type(2) {
width: 100px;
min-width: 0;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
font-size: 16px;
font-weight: 600;
line-height: 24px;
}

View File

@ -0,0 +1,58 @@
import "./LiveStreams.css";
import { NostrEvent, NostrPrefix, encodeTLV } from "@snort/system";
import { findTag } from "SnortUtils";
import { CSSProperties, useMemo } from "react";
import { Link } from "react-router-dom";
import useImgProxy from "Hooks/useImgProxy";
import Icon from "Icons/Icon";
export function LiveStreams({ evs }: { evs: Array<NostrEvent> }) {
const streams = useMemo(() => {
return [...evs].sort((a, b) => {
const aStarts = Number(findTag(a, "starts") ?? a.created_at);
const bStarts = Number(findTag(b, "starts") ?? b.created_at);
return aStarts > bStarts ? -1 : 1;
});
}, [evs]);
if (streams.length === 0) return null;
return (
<div className="stream-list">
{streams.map(v => (
<LiveStreamEvent ev={v} key={`${v.kind}:${v.pubkey}:${findTag(v, "d")}`} />
))}
</div>
);
}
function LiveStreamEvent({ ev }: { ev: NostrEvent }) {
const { proxy } = useImgProxy();
const title = findTag(ev, "title");
const image = findTag(ev, "image");
const status = findTag(ev, "status");
const link = encodeTLV(NostrPrefix.Address, findTag(ev, "d") ?? "", undefined, ev.kind, ev.pubkey);
const imageProxy = proxy(image ?? "");
return (
<Link className="stream-event" to={`https://zap.stream/${link}`} target="_blank">
<div
style={
{
"--img": `url(${imageProxy})`,
} as CSSProperties
}></div>
<div className="flex f-col details">
<div className="flex g2">
<span className="live">{status}</span>
<div className="reaction-pill">
<Icon name="zap" size={24} />
<div className="reaction-pill-number">0</div>
</div>
</div>
<div>{title}</div>
</div>
</Link>
);
}

View File

@ -62,9 +62,9 @@
}
.note-quote {
border: 1px solid var(--gray);
border-radius: 10px;
padding: 5px;
border: 1px solid var(--gray-superdark);
border-radius: 12px;
padding: 8px 16px 16px 16px;
}
.note > .body .text-frag {
@ -91,54 +91,6 @@
}
}
.note .ctx-menu {
color: var(--font-secondary-color);
background: transparent;
box-shadow: 0px 8px 20px rgba(0, 0, 0, 0.4);
min-width: 0;
margin: 0;
padding: 0;
border-radius: 16px;
}
.note .ctx-menu li {
background: #1e1e1e;
padding-top: 8px;
padding-bottom: 8px;
display: grid;
grid-template-columns: 2rem auto;
}
.light .note .ctx-menu li {
background: var(--note-bg);
}
.note .ctx-menu li:first-of-type {
padding-top: 12px;
border-top-left-radius: 16px;
border-top-right-radius: 16px;
}
.note .ctx-menu li:last-of-type {
padding-bottom: 12px;
border-bottom-left-radius: 16px;
border-bottom-right-radius: 16px;
}
.note .ctx-menu li:hover {
color: white;
background: #2a2a2a;
}
.light .note .ctx-menu li:hover {
color: white;
background: var(--font-secondary-color);
}
.ctx-menu .red {
color: var(--error);
}
.note > .header img:hover,
.note > .header .name > .reply:hover {
cursor: pointer;
@ -250,14 +202,6 @@
text-decoration: underline;
}
.close-menu {
position: absolute;
width: 100vw;
height: 100vh;
top: -400px;
left: -600px;
}
.close-menu-container {
position: absolute;
.note .body > .text > a {
color: var(--highlight);
}

View File

@ -1,46 +0,0 @@
.skeleton {
display: inline-block;
height: 1em;
position: relative;
overflow: hidden;
background-color: var(--note-bg);
border-radius: 16px;
}
html.light .skeleton {
background-color: var(--gray-secondary);
}
.skeleton::after {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
transform: translateX(-100%);
background-image: linear-gradient(
90deg,
rgba(255, 255, 255, 0) 0,
rgba(255, 255, 255, 0.02) 20%,
rgba(255, 255, 255, 0.05) 60%,
rgba(255, 255, 255, 0)
);
animation: shimmer 2s infinite;
content: "";
}
html.light .skeleton::after {
background-image: linear-gradient(
90deg,
rgba(255, 255, 255, 0) 0,
rgba(255, 255, 255, 0.2) 20%,
rgba(255, 255, 255, 0.5) 60%,
rgba(255, 255, 255, 0)
);
}
@keyframes shimmer {
100% {
transform: translateX(100%);
}
}

View File

@ -1,21 +0,0 @@
import "./Skeleton.css";
interface ISkepetonProps {
children?: React.ReactNode;
loading?: boolean;
width?: string;
height?: string;
margin?: string;
}
export default function Skeleton({ children, width, height, margin, loading = true }: ISkepetonProps) {
if (!loading) {
return <>{children}</>;
}
return (
<div className="skeleton" style={{ width: width, height: height, margin: margin }}>
{children}
</div>
);
}

View File

@ -55,9 +55,6 @@ export default function SuggestedProfiles() {
return (
<>
<h3>
<FormattedMessage defaultMessage="Suggested Follows" />
</h3>
<div className="card flex f-space">
<FormattedMessage defaultMessage="Provider" />
<select onChange={e => setProvider(Number(e.target.value))}>

View File

@ -2,9 +2,11 @@
display: flex;
align-items: center;
flex-direction: row;
overflow-x: scroll;
-ms-overflow-style: none; /* for Internet Explorer, Edge */
scrollbar-width: none; /* Firefox */
margin-bottom: 18px;
white-space: nowrap;
text-align: center;
user-select: none;
}
.tabs::-webkit-scrollbar {
@ -12,16 +14,22 @@
}
.tab {
flex: 1;
padding: 16px;
color: var(--font-tertiary-color);
font-weight: 500;
font-size: 16px;
letter-spacing: 0.2px;
border: 1px solid var(--border-color);
border-radius: 16px;
font-weight: 600;
font-size: 14px;
padding: 6px 12px;
text-align: center;
font-feature-settings: "tnum";
}
.tab:not(:last-of-type) {
margin-right: 8px;
}
.tab.active {
border-bottom: 1px solid var(--highlight);
border-color: var(--font-color);
color: var(--font-color);
}
@ -36,5 +44,5 @@
}
.tab:hover {
border-color: var(--highlight);
border-color: var(--font-color);
}

View File

@ -5,7 +5,6 @@ export interface Tab {
text: string;
value: number;
disabled?: boolean;
data?: string;
}
interface TabsProps {
@ -33,7 +32,7 @@ const Tabs = ({ tabs, tab, setTab }: TabsProps) => {
return (
<div className="tabs" ref={horizontalScroll}>
{tabs.map(t => (
<TabElement key={t.value} tab={tab} setTab={setTab} t={t} />
<TabElement tab={tab} setTab={setTab} t={t} />
))}
</div>
);

View File

@ -14,6 +14,7 @@ import NoteReaction from "Element/NoteReaction";
import useModeration from "Hooks/useModeration";
import ProfilePreview from "Element/ProfilePreview";
import { UserCache } from "Cache";
import { LiveStreams } from "Element/LiveStreams";
export interface TimelineProps {
postsOnly: boolean;
@ -44,7 +45,7 @@ const Timeline = (props: TimelineProps) => {
const filterPosts = useCallback(
(nts: readonly TaggedNostrEvent[]) => {
const a = [...nts];
const a = [...nts.filter(a => a.kind !== EventKind.LiveEvent)];
props.noSort || a.sort((a, b) => b.created_at - a.created_at);
return a
?.filter(a => (props.postsOnly ? !a.tags.some(b => b[0] === "e") : true))
@ -65,6 +66,10 @@ const Timeline = (props: TimelineProps) => {
},
[feed.related]
);
const liveStreams = useMemo(() => {
return (feed.main ?? []).filter(a => a.kind === EventKind.LiveEvent && findTag(a, "status") === "live");
}, [feed]);
const findRelated = useCallback(
(id?: u256) => {
if (!id) return undefined;
@ -138,6 +143,7 @@ const Timeline = (props: TimelineProps) => {
)}
</>
)}
<LiveStreams evs={liveStreams} />
{mainFeed.map(eventElement)}
{(props.loadMore === undefined || props.loadMore === true) && (
<div className="flex f-center">

View File

@ -1,6 +1,5 @@
import { useEffect, useState } from "react";
import { NostrEvent, TaggedNostrEvent } from "@snort/system";
import { FormattedMessage } from "react-intl";
import PageSpinner from "Element/PageSpinner";
import Note from "Element/Note";
@ -23,9 +22,6 @@ export default function TrendingNotes() {
return (
<>
<h3>
<FormattedMessage defaultMessage="Trending Notes" />
</h3>
{posts.map(e => (
<Note key={e.id} data={e as TaggedNostrEvent} related={[]} depth={0} />
))}

View File

@ -1,6 +1,5 @@
import { useEffect, useState } from "react";
import { HexKey } from "@snort/system";
import { FormattedMessage } from "react-intl";
import FollowListBase from "Element/FollowListBase";
import PageSpinner from "Element/PageSpinner";
@ -24,9 +23,6 @@ export default function TrendingUsers() {
return (
<>
<h3>
<FormattedMessage defaultMessage="Trending People" />
</h3>
<FollowListBase pubkeys={userList} showAbout={true} />
</>
);

View File

@ -1,5 +1,5 @@
import { useCallback, useEffect, useMemo } from "react";
import { EventKind, FlatNoteStore, RequestBuilder } from "@snort/system";
import { EventKind, NoteCollection, RequestBuilder } from "@snort/system";
import { useRequestBuilder } from "@snort/system-react";
import { unixNow, unwrap, tagFilterOfTextRepost } from "SnortUtils";
@ -19,6 +19,7 @@ export interface TimelineSubject {
discriminator: string;
items: string[];
relay?: string;
streams?: boolean;
}
export type TimelineFeed = ReturnType<typeof useTimelineFeed>;
@ -71,6 +72,13 @@ export default function useTimelineFeed(subject: TimelineSubject, options: Timel
break;
}
}
if (subject.streams && subject.type === "pubkey") {
b.withFilter()
.kinds([EventKind.LiveEvent])
.authors(subject.items)
.since(now - 60 * 60 * 24);
b.withFilter().kinds([EventKind.LiveEvent]).tag("p", subject.items);
}
return {
builder: b,
filter: f,
@ -109,7 +117,7 @@ export default function useTimelineFeed(subject: TimelineSubject, options: Timel
return rb?.builder ?? null;
}, [until, since, options.method, pref, createBuilder]);
const main = useRequestBuilder<FlatNoteStore>(System, FlatNoteStore, sub);
const main = useRequestBuilder<NoteCollection>(System, NoteCollection, sub);
const subRealtime = useMemo(() => {
const rb = createBuilder();
@ -123,7 +131,7 @@ export default function useTimelineFeed(subject: TimelineSubject, options: Timel
return rb?.builder ?? null;
}, [pref.autoShowLatest, createBuilder]);
const latest = useRequestBuilder<FlatNoteStore>(System, FlatNoteStore, subRealtime);
const latest = useRequestBuilder<NoteCollection>(System, NoteCollection, subRealtime);
useEffect(() => {
// clear store if changing relays
@ -169,7 +177,7 @@ export default function useTimelineFeed(subject: TimelineSubject, options: Timel
return rb.numFilters > 0 ? rb : null;
}, [main.data, pref, subject.type]);
const related = useRequestBuilder<FlatNoteStore>(System, FlatNoteStore, subNext);
const related = useRequestBuilder<NoteCollection>(System, NoteCollection, subNext);
return {
main: main.data,

View File

@ -144,7 +144,7 @@ export default function ProfilePage() {
const follows = useFollowsFeed(id);
// tabs
const ProfileTab = {
Notes: { text: formatMessage(messages.Notes), value: NOTES },
Notes: { text: formatMessage({ defaultMessage: "Notes" }), value: NOTES },
Reactions: { text: formatMessage(messages.Reactions), value: REACTIONS },
Followers: { text: formatMessage(messages.Followers), value: FOLLOWERS },
Follows: { text: formatMessage(messages.Follows), value: FOLLOWS },

View File

@ -1,4 +1,18 @@
.root-tabs > div {
padding: 8px 0;
margin-right: 0;
.root-type {
padding: 8px 12px;
display: flex;
align-items: center;
justify-content: center;
}
.root-type > button {
background: white;
color: black;
font-size: 16px;
padding: 10px 16px;
border-radius: 1000px;
display: flex;
align-items: center;
justify-content: center;
gap: 12px;
}

View File

@ -1,80 +1,161 @@
import "./Root.css";
import { useEffect, useMemo, useState } from "react";
import { ReactNode, useEffect, useState } from "react";
import { Link, Outlet, RouteObject, useLocation, useNavigate, useParams } from "react-router-dom";
import { useIntl, FormattedMessage } from "react-intl";
import { FormattedMessage } from "react-intl";
import { Menu, MenuItem } from "@szhsin/react-menu";
import "./Root.css";
import Tabs, { Tab } from "Element/Tabs";
import Timeline from "Element/Timeline";
import { System } from "index";
import { TimelineSubject } from "Feed/TimelineFeed";
import { debounce, getRelayName, sha256, unixNow, unwrap } from "SnortUtils";
import { debounce, getRelayName, sha256, unixNow } from "SnortUtils";
import useLogin from "Hooks/useLogin";
import Discover from "Pages/Discover";
import Icon from "Icons/Icon";
import TrendingUsers from "Element/TrendingUsers";
import TrendingNotes from "Element/TrendingPosts";
import HashTagsPage from "Pages/HashTagsPage";
import messages from "./messages";
import SuggestedProfiles from "Element/SuggestedProfiles";
interface RelayOption {
url: string;
paid: boolean;
}
type RootPage = "following" | "conversations" | "trending-notes" | "trending-people" | "suggested" | "tags" | "global";
export default function RootPage() {
const { formatMessage } = useIntl();
const navigate = useNavigate();
const location = useLocation();
const { publicKey: pubKey, tags, preferences } = useLogin();
const RootTab: Record<string, Tab> = {
Notes: {
text: formatMessage(messages.Notes),
value: 0,
data: "/notes",
},
Conversations: {
text: formatMessage(messages.Conversations),
value: 1,
data: "/conversations",
},
};
const tagTabs = tags.item.map((t, idx) => {
return { text: `#${t}`, value: idx + 3, data: `/tag/${t}` };
});
const tabs = [RootTab.Notes, RootTab.Conversations, ...tagTabs];
const tab = useMemo(() => {
const pTab = location.pathname.split("/").slice(-1)[0];
if (location.pathname.startsWith("/tag")) {
const selectedTag = tagTabs.find(t => t.text.slice(1) === pTab);
if (selectedTag) {
return selectedTag;
}
}
switch (pTab) {
case "conversations": {
return RootTab.Conversations;
}
default: {
return RootTab.Notes;
}
}
}, [location]);
const [rootType, setRootType] = useState<RootPage>("following");
useEffect(() => {
if (location.pathname === "/") {
const t = pubKey ? preferences.defaultRootTab ?? tab.data : "/global";
const t = pubKey ? preferences.defaultRootTab ?? "/notes" : "/global";
navigate(t, {
replace: true,
});
}
}, [location]);
const menuItems = [
{
tab: "following",
path: "/notes",
element: (
<>
<Icon name="user-v2" />
<FormattedMessage defaultMessage="Following" />
</>
),
},
{
tab: "trending-notes",
path: "/trending/notes",
element: (
<>
<Icon name="fire" />
<FormattedMessage defaultMessage="Trending Notes" />
</>
),
},
{
tab: "conversations",
path: "/conversations",
element: (
<>
<Icon name="message-chat-circle" />
<FormattedMessage defaultMessage="Conversations" />
</>
),
},
{
tab: "trending-people",
path: "/trending/people",
element: (
<>
<Icon name="user-up" />
<FormattedMessage defaultMessage="Trending People" />
</>
),
},
{
tab: "suggested",
path: "/suggested",
element: (
<>
<Icon name="thumbs-up" />
<FormattedMessage defaultMessage="Suggested Follows" />
</>
),
},
{
tab: "global",
path: "/global",
element: (
<>
<Icon name="globe" />
<FormattedMessage defaultMessage="Global" />
</>
),
},
] as Array<{
tab: RootPage;
path: string;
element: ReactNode;
}>;
function currentMenuItem() {
if (location.pathname.startsWith("/t/")) {
return (
<>
<Icon name="hash" />
{location.pathname.split("/").slice(-1)}
</>
);
}
return menuItems.find(a => a.tab === rootType)?.element;
}
return (
<>
<div className="main-content">
{pubKey && <Tabs tabs={tabs} tab={tab} setTab={t => navigate(unwrap(t.data))} />}
<div className="main-content root-type">
<Menu
menuButton={
<button type="button">
{currentMenuItem()}
<Icon name="chevronDown" />
</button>
}
align="center"
menuClassName={() => "ctx-menu"}>
<div className="close-menu-container">
<MenuItem>
<div className="close-menu" />
</MenuItem>
</div>
{menuItems.map(a => (
<MenuItem
onClick={() => {
setRootType(a.tab);
navigate(a.path, { replace: true });
}}>
{a.element}
</MenuItem>
))}
{tags.item.map(v => (
<MenuItem
onClick={() => {
setRootType("tags");
navigate(`/t/${v}`, { replace: true });
}}>
<Icon name="hash" />
{v}
</MenuItem>
))}
</Menu>
</div>
<div className="main-content">
<Outlet />
@ -184,6 +265,7 @@ const NotesTab = () => {
type: "pubkey",
items: follows.item,
discriminator: `follows:${publicKey?.slice(0, 12)}`,
streams: true,
};
return (
@ -207,7 +289,12 @@ const ConversationsTab = () => {
const TagsTab = () => {
const { tag } = useParams();
const subject: TimelineSubject = { type: "hashtag", items: [tag ?? ""], discriminator: `tags-${tag}` };
const subject: TimelineSubject = {
type: "hashtag",
items: [tag ?? ""],
discriminator: `tags-${tag}`,
streams: true,
};
return <Timeline subject={subject} postsOnly={false} method={"TIME_RANGE"} />;
};
@ -237,6 +324,22 @@ export const RootRoutes = [
path: "tag/:tag",
element: <TagsTab />,
},
{
path: "trending/notes",
element: <TrendingNotes />,
},
{
path: "trending/people",
element: <TrendingUsers />,
},
{
path: "suggested",
element: <SuggestedProfiles />,
},
{
path: "/t/:tag",
element: <HashTagsPage />,
},
],
},
] as RouteObject[];

View File

@ -2,11 +2,9 @@ import { defineMessages } from "react-intl";
export default defineMessages({
Login: { defaultMessage: "Login" },
Conversations: { defaultMessage: "Conversations" },
Global: { defaultMessage: "Global" },
NewUsers: { defaultMessage: "New users page" },
NoFollows: { defaultMessage: "Hmm nothing here.. Checkout {newUsersPage} to follow some recommended nostrich's!" },
Notes: { defaultMessage: "Notes" },
Reactions: { defaultMessage: "Reactions" },
Followers: { defaultMessage: "Followers" },
FollowersCount: { defaultMessage: "{n} Followers" },

View File

@ -13,6 +13,7 @@
--error: #ff6053;
--success: #2ad544;
--warning: #ff8800;
--live: #f83838;
--gray-superlight: #eee;
--gray-light: #999;
@ -373,6 +374,22 @@ input:disabled {
justify-content: space-between;
}
.g2 {
gap: 2px;
}
.g4 {
gap: 4px;
}
.g8 {
gap: 8px;
}
.g12 {
gap: 12px;
}
.w-max {
width: 100%;
width: stretch;
@ -637,3 +654,71 @@ button.tall {
/* Fix width calculation to account for 12px padding on input */
width: calc(100% - 24px) !important;
}
.ctx-menu {
color: var(--font-secondary-color) !important;
background: transparent !important;
box-shadow: 0px 8px 20px rgba(0, 0, 0, 0.4) !important;
min-width: 0 !important;
margin: 0 !important;
}
.ctx-menu li {
background: #1e1e1e !important;
padding: 8px 32px 8px 32px !important;
display: grid !important;
grid-template-columns: 2rem auto !important;
font-size: 16px;
font-weight: 600;
}
.light .ctx-menu li {
background: var(--note-bg) !important;
}
.ctx-menu li:first-of-type {
background: transparent !important;
}
.ctx-menu li:nth-child(3) {
padding-top: 24px !important;
border-top-left-radius: 16px !important;
border-top-right-radius: 16px !important;
}
.ctx-menu li:last-of-type {
padding-bottom: 24px !important;
border-bottom-left-radius: 16px !important;
border-bottom-right-radius: 16px !important;
}
.ctx-menu li:hover {
color: white !important;
background: #2a2a2a !important;
}
.ctx-menu li:hover:first-of-type {
background: transparent !important;
}
.light .ctx-menu li:hover {
color: white !important;
background: var(--font-secondary-color) !important;
}
.ctx-menu .red {
color: var(--error) !important;
}
.ctx-menu .close-menu {
position: absolute !important;
width: 100vw !important;
height: 100vh !important;
top: -400px !important;
left: -600px !important;
}
.ctx-menu .close-menu-container {
background: transparent !important;
position: absolute !important;
}

View File

@ -22,7 +22,6 @@ import ErrorPage from "Pages/ErrorPage";
import VerificationPage from "Pages/Verification";
import MessagesPage from "Pages/MessagesPage";
import DonatePage from "Pages/DonatePage";
import HashTagsPage from "Pages/HashTagsPage";
import SearchPage from "Pages/SearchPage";
import HelpPage from "Pages/HelpPage";
import { NewUserRoutes } from "Pages/new";
@ -132,10 +131,6 @@ export const router = createBrowserRouter([
path: "/donate",
element: <DonatePage />,
},
{
path: "/t/:tag",
element: <HashTagsPage />,
},
{
path: "/search/:keyword?",
element: <SearchPage />,

View File

@ -269,9 +269,6 @@
"BGCM48": {
"defaultMessage": "Write access to Snort relay, with 1 year of event retention"
},
"BGxpTN": {
"defaultMessage": "Stream Chat"
},
"BOUMjw": {
"defaultMessage": "No nostr users found for {twitterUsername}"
},
@ -822,9 +819,6 @@
"c3g2hL": {
"defaultMessage": "Broadcast Again"
},
"cE4Hfw": {
"defaultMessage": "Discover"
},
"cFbU1B": {
"defaultMessage": "Using Alby? Go to {link} to get your NWC config!"
},
@ -875,9 +869,6 @@
"eSzf2G": {
"defaultMessage": "A single zap of {nIn} sats will allocate {nOut} sats to the zap pool."
},
"fBI91o": {
"defaultMessage": "Zap"
},
"fOksnD": {
"defaultMessage": "Can't vote because LNURL service does not support zaps"
},
@ -1123,9 +1114,6 @@
"qDwvZ4": {
"defaultMessage": "Unknown error"
},
"qInqHy": {
"defaultMessage": "Message..."
},
"qMx1sA": {
"defaultMessage": "Default Zap amount"
},

View File

@ -188,7 +188,7 @@ export function transformText(body: string, tags: Array<Array<string>>) {
fragments = extractCustomEmoji(fragments, tags);
fragments = fragments.map(a => {
if (typeof a === "string") {
if (a.trim().length > 0) {
if (a.length > 0) {
return { type: "text", content: a } as ParsedFragment;
}
} else {