initial commit

This commit is contained in:
Kakabay 2023-03-01 17:36:58 +05:00
commit 8a67a3abe9
110 changed files with 9961 additions and 0 deletions

5
.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
# Ignore everything under Resources folder, not elsewhere
node_modules/**
# Don't ignore directories, so we can recurse into them
#!Resources/

1
README.md Normal file
View File

@ -0,0 +1 @@
# exchange-client

5
dist/.htaccess vendored Normal file
View File

@ -0,0 +1,5 @@
<IfModule mod_rewrite.c>
RewriteEngine On RewriteBase /subdirectory RewriteRule ^index\.html$ - [L] RewriteCond
%{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule . /index.html [L]
</IfModule>

11
dist/assets/arrow-down.6e85faaa.svg vendored Normal file
View File

@ -0,0 +1,11 @@
<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_656_2354)">
<path d="M17.3702 12.8901L12.0002 17.2101L6.63018 12.7301C6.45292 12.5832 6.23039 12.5019 6.00018 12.5001C5.85327 12.4998 5.70811 12.532 5.57503 12.5942C5.44194 12.6564 5.3242 12.7472 5.23018 12.8601C5.14598 12.9611 5.08254 13.0778 5.04349 13.2034C5.00445 13.329 4.99057 13.4611 5.00264 13.592C5.01472 13.723 5.05252 13.8503 5.11387 13.9667C5.17522 14.083 5.25892 14.1861 5.36018 14.2701L11.3602 19.2701C11.5391 19.4172 11.7636 19.4976 11.9952 19.4976C12.2268 19.4976 12.4512 19.4172 12.6302 19.2701L18.6302 14.4401C18.7329 14.3575 18.8183 14.2555 18.8815 14.1399C18.9447 14.0243 18.9844 13.8973 18.9983 13.7663C19.0122 13.6352 19.0001 13.5027 18.9627 13.3764C18.9253 13.2501 18.8632 13.1324 18.7802 13.0301C18.6969 12.9281 18.5944 12.8435 18.4784 12.7813C18.3624 12.719 18.2353 12.6803 18.1043 12.6673C17.9733 12.6542 17.841 12.6672 17.715 12.7055C17.589 12.7437 17.4718 12.8064 17.3702 12.8901V12.8901Z" fill="#FF5E5B"/>
<path d="M11.3602 12.2701C11.5391 12.4172 11.7636 12.4976 11.9952 12.4976C12.2268 12.4976 12.4512 12.4172 12.6302 12.2701L18.6302 7.44007C18.7329 7.35755 18.8183 7.25554 18.8815 7.1399C18.9447 7.02426 18.9844 6.89728 18.9983 6.76625C19.0122 6.63522 19.0001 6.50273 18.9627 6.37639C18.9253 6.25005 18.8632 6.13236 18.7802 6.03007C18.6977 5.92734 18.5956 5.84194 18.48 5.77876C18.3644 5.71559 18.2374 5.67589 18.1064 5.66195C17.9753 5.64802 17.8428 5.66011 17.7165 5.69754C17.5902 5.73497 17.4725 5.797 17.3702 5.88007L12.0002 10.2101L6.63018 5.73007C6.45292 5.58317 6.23039 5.50193 6.00018 5.50007C5.85327 5.49983 5.70811 5.53196 5.57503 5.59419C5.44194 5.65641 5.3242 5.74719 5.23018 5.86007C5.14598 5.96112 5.08254 6.07779 5.04349 6.20339C5.00445 6.32899 4.99057 6.46106 5.00264 6.59204C5.01472 6.72302 5.05252 6.85032 5.11387 6.96667C5.17522 7.08302 5.25892 7.18612 5.36018 7.27007L11.3602 12.2701Z" fill="#FF5E5B"/>
</g>
<defs>
<clipPath id="clip0_656_2354">
<rect width="24" height="24" fill="white" transform="translate(24 24.5) rotate(-180)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

11
dist/assets/arrow-up.403bca16.svg vendored Normal file
View File

@ -0,0 +1,11 @@
<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_656_2464)">
<path d="M6.62982 12.1099L11.9998 7.78993L17.3698 12.2699C17.5471 12.4168 17.7696 12.4981 17.9998 12.4999C18.1467 12.5002 18.2919 12.468 18.425 12.4058C18.5581 12.3436 18.6758 12.2528 18.7698 12.1399C18.854 12.0389 18.9175 11.9222 18.9565 11.7966C18.9956 11.671 19.0094 11.5389 18.9974 11.408C18.9853 11.277 18.9475 11.1497 18.8861 11.0333C18.8248 10.917 18.7411 10.8139 18.6398 10.7299L12.6398 5.72993C12.4609 5.58285 12.2364 5.50244 12.0048 5.50244C11.7732 5.50244 11.5488 5.58285 11.3698 5.72993L5.36982 10.5599C5.26709 10.6425 5.18169 10.7445 5.11852 10.8601C5.05534 10.9757 5.01564 11.1027 5.0017 11.2337C4.98777 11.3648 4.99986 11.4973 5.03729 11.6236C5.07472 11.7499 5.13675 11.8676 5.21982 11.9699C5.30306 12.0719 5.40562 12.1565 5.52161 12.2187C5.6376 12.281 5.76474 12.3197 5.89575 12.3327C6.02675 12.3458 6.15903 12.3328 6.285 12.2945C6.41097 12.2563 6.52815 12.1936 6.62982 12.1099V12.1099Z" fill="#6EEB83"/>
<path d="M12.6398 12.7299C12.4609 12.5828 12.2364 12.5024 12.0048 12.5024C11.7732 12.5024 11.5488 12.5828 11.3698 12.7299L5.36982 17.5599C5.26709 17.6425 5.18169 17.7445 5.11852 17.8601C5.05534 17.9757 5.01564 18.1027 5.0017 18.2337C4.98777 18.3648 4.99986 18.4973 5.03729 18.6236C5.07472 18.7499 5.13675 18.8676 5.21982 18.9699C5.30234 19.0727 5.40435 19.1581 5.51999 19.2212C5.63563 19.2844 5.76261 19.3241 5.89364 19.338C6.02467 19.352 6.15716 19.3399 6.2835 19.3025C6.40984 19.265 6.52753 19.203 6.62982 19.1199L11.9998 14.7899L17.3698 19.2699C17.5471 19.4168 17.7696 19.4981 17.9998 19.4999C18.1467 19.5002 18.2919 19.468 18.425 19.4058C18.5581 19.3436 18.6758 19.2528 18.7698 19.1399C18.854 19.0389 18.9175 18.9222 18.9565 18.7966C18.9956 18.671 19.0094 18.5389 18.9974 18.408C18.9853 18.277 18.9475 18.1497 18.8861 18.0333C18.8248 17.917 18.7411 17.8139 18.6398 17.7299L12.6398 12.7299Z" fill="#6EEB83"/>
</g>
<defs>
<clipPath id="clip0_656_2464">
<rect width="24" height="24" fill="white" transform="translate(0 0.5)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

3
dist/assets/arrow.a0470258.svg vendored Normal file
View File

@ -0,0 +1,3 @@
<svg width="17" height="8" viewBox="0 0 17 8" fill="" xmlns="http://www.w3.org/2000/svg">
<path d="M16.3536 4.35355C16.5488 4.15829 16.5488 3.84171 16.3536 3.64645L13.1716 0.464466C12.9763 0.269204 12.6597 0.269204 12.4645 0.464466C12.2692 0.659728 12.2692 0.976311 12.4645 1.17157L15.2929 4L12.4645 6.82843C12.2692 7.02369 12.2692 7.34027 12.4645 7.53553C12.6597 7.7308 12.9763 7.7308 13.1716 7.53553L16.3536 4.35355ZM0 4.5H16V3.5H0V4.5Z" fill=""/>
</svg>

After

Width:  |  Height:  |  Size: 457 B

12
dist/assets/burger.2c869322.svg vendored Normal file
View File

@ -0,0 +1,12 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_637_2317)">
<path d="M26.7333 14.6665H5.26667C4.56711 14.6665 4 15.2336 4 15.9332V16.0665C4 16.7661 4.56711 17.3332 5.26667 17.3332H26.7333C27.4329 17.3332 28 16.7661 28 16.0665V15.9332C28 15.2336 27.4329 14.6665 26.7333 14.6665Z" fill="#05172D"/>
<path d="M26.7333 21.3335H5.26667C4.56711 21.3335 4 21.9006 4 22.6002V22.7335C4 23.4331 4.56711 24.0002 5.26667 24.0002H26.7333C27.4329 24.0002 28 23.4331 28 22.7335V22.6002C28 21.9006 27.4329 21.3335 26.7333 21.3335Z" fill="#05172D"/>
<path d="M26.7333 8H5.26667C4.56711 8 4 8.56711 4 9.26667V9.4C4 10.0996 4.56711 10.6667 5.26667 10.6667H26.7333C27.4329 10.6667 28 10.0996 28 9.4V9.26667C28 8.56711 27.4329 8 26.7333 8Z" fill="#05172D"/>
</g>
<defs>
<clipPath id="clip0_637_2317">
<rect width="32" height="32" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 923 B

10
dist/assets/fax.75231e49.svg vendored Normal file
View File

@ -0,0 +1,10 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_681_4105)">
<path d="M19.36 7H18V5C18.0217 4.49233 17.8413 3.99675 17.4983 3.62186C17.1553 3.24698 16.6776 3.02335 16.17 3H7.83002C7.32242 3.02335 6.84478 3.24698 6.50175 3.62186C6.15873 3.99675 5.97831 4.49233 6.00002 5V7H4.64002C3.93628 7.00529 3.26331 7.28924 2.7685 7.78968C2.27369 8.29011 1.99735 8.96625 2.00002 9.67V16.33C1.99735 17.0338 2.27369 17.7099 2.7685 18.2103C3.26331 18.7108 3.93628 18.9947 4.64002 19H5.50002C5.50002 19.5304 5.71073 20.0391 6.08581 20.4142C6.46088 20.7893 6.96959 21 7.50002 21H16.5C17.0305 21 17.5392 20.7893 17.9142 20.4142C18.2893 20.0391 18.5 19.5304 18.5 19H19.36C20.0638 18.9947 20.7367 18.7108 21.2315 18.2103C21.7264 17.7099 22.0027 17.0338 22 16.33V9.67C22.0027 8.96625 21.7264 8.29011 21.2315 7.78968C20.7367 7.28924 20.0638 7.00529 19.36 7ZM8.00002 5H16V7H8.00002V5ZM7.50002 19V15H16.5V19H7.50002ZM20 16.33C20.0027 16.5034 19.9371 16.6708 19.8174 16.7962C19.6976 16.9216 19.5333 16.9948 19.36 17H18.5V15C18.5 14.4696 18.2893 13.9609 17.9142 13.5858C17.5392 13.2107 17.0305 13 16.5 13H7.50002C6.96959 13 6.46088 13.2107 6.08581 13.5858C5.71073 13.9609 5.50002 14.4696 5.50002 15V17H4.64002C4.46672 16.9948 4.30244 16.9216 4.18269 16.7962C4.06293 16.6708 3.99731 16.5034 4.00002 16.33V9.67C3.99731 9.49664 4.06293 9.32919 4.18269 9.20382C4.30244 9.07845 4.46672 9.00523 4.64002 9H19.36C19.5333 9.00523 19.6976 9.07845 19.8174 9.20382C19.9371 9.32919 20.0027 9.49664 20 9.67V16.33Z" fill="#151515"/>
</g>
<defs>
<clipPath id="clip0_681_4105">
<rect width="24" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

12
dist/assets/file.5f15c554.svg vendored Normal file
View File

@ -0,0 +1,12 @@
<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_555_638)">
<path d="M30 32H18C17.4696 32 16.9609 32.2107 16.5858 32.5858C16.2107 32.9609 16 33.4696 16 34C16 34.5304 16.2107 35.0391 16.5858 35.4142C16.9609 35.7893 17.4696 36 18 36H30C30.5304 36 31.0391 35.7893 31.4142 35.4142C31.7893 35.0391 32 34.5304 32 34C32 33.4696 31.7893 32.9609 31.4142 32.5858C31.0391 32.2107 30.5304 32 30 32Z" fill=""/>
<path d="M18 28H24C24.5304 28 25.0391 27.7893 25.4142 27.4142C25.7893 27.0391 26 26.5304 26 26C26 25.4696 25.7893 24.9609 25.4142 24.5858C25.0391 24.2107 24.5304 24 24 24H18C17.4696 24 16.9609 24.2107 16.5858 24.5858C16.2107 24.9609 16 25.4696 16 26C16 26.5304 16.2107 27.0391 16.5858 27.4142C16.9609 27.7893 17.4696 28 18 28Z" fill=""/>
<path d="M39.48 16.6599L28.6 4.65987C28.413 4.45269 28.1847 4.28693 27.9298 4.17326C27.6749 4.05959 27.3991 4.00053 27.12 3.99987H13.12C12.4555 3.99195 11.7959 4.11499 11.179 4.36198C10.5621 4.60898 9.99981 4.97508 9.52436 5.43938C9.04892 5.90368 8.66959 6.45709 8.40804 7.068C8.14648 7.67892 8.00783 8.33537 8 8.99987V38.9999C8.00783 39.6644 8.14648 40.3208 8.40804 40.9317C8.66959 41.5426 9.04892 42.0961 9.52436 42.5604C9.99981 43.0247 10.5621 43.3908 11.179 43.6378C11.7959 43.8848 12.4555 44.0078 13.12 43.9999H34.88C35.5445 44.0078 36.2041 43.8848 36.821 43.6378C37.4379 43.3908 38.0002 43.0247 38.4756 42.5604C38.9511 42.0961 39.3304 41.5426 39.592 40.9317C39.8535 40.3208 39.9922 39.6644 40 38.9999V17.9999C39.9987 17.5042 39.8134 17.0267 39.48 16.6599ZM28 9.99987L33.48 15.9999H29.48C29.2706 15.9872 29.0657 15.933 28.8775 15.8403C28.6892 15.7477 28.5213 15.6185 28.3835 15.4602C28.2458 15.3019 28.1409 15.1178 28.075 14.9186C28.0092 14.7194 27.9837 14.5091 28 14.2999V9.99987ZM34.88 39.9999H13.12C12.9807 40.008 12.8413 39.9885 12.7095 39.9426C12.5778 39.8967 12.4565 39.8253 12.3524 39.7324C12.2484 39.6395 12.1637 39.5269 12.1032 39.4012C12.0427 39.2755 12.0077 39.1391 12 38.9999V8.99987C12.0077 8.8606 12.0427 8.7242 12.1032 8.5985C12.1637 8.47281 12.2484 8.36029 12.3524 8.26739C12.4565 8.17449 12.5778 8.10303 12.7095 8.05713C12.8413 8.01122 12.9807 7.99177 13.12 7.99987H24V14.2999C23.9677 15.7731 24.5195 17.1993 25.5349 18.2672C26.5504 19.3351 27.947 19.958 29.42 19.9999H36V38.9999C35.9923 39.1391 35.9573 39.2755 35.8968 39.4012C35.8363 39.5269 35.7516 39.6395 35.6476 39.7324C35.5435 39.8253 35.4222 39.8967 35.2905 39.9426C35.1587 39.9885 35.0193 40.008 34.88 39.9999Z" fill=""/>
</g>
<defs>
<clipPath id="clip0_555_638">
<rect width="48" height="48" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
dist/assets/hero-remake.afb0a7d0.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 MiB

161
dist/assets/index.2e037b32.js vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/assets/index.9661e2a1.css vendored Normal file

File diff suppressed because one or more lines are too long

13
dist/assets/logo.fe8c8333.svg vendored Normal file
View File

@ -0,0 +1,13 @@
<svg width="51" height="51" viewBox="0 0 51 51" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_523_1749)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.17909 32.5099L17.5208 22.1373V17.4502H22.1888L23.8992 15.7341L15.6421 7.44971H7.55829V17.9967L0.128906 25.4454L7.17909 32.5099Z" fill="#003197"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M35.1707 23.8474L43.4266 15.5646V7.45366H32.911L25.4928 0L18.4463 7.06731L28.7893 17.4495H33.464V22.1366L35.1707 23.8474Z" fill="#ABA17D"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M32.5337 43.8237L22.1883 33.4453H17.5209V28.7544L15.8105 27.0464L7.55469 35.3295V43.4414H18.0585L25.4891 50.8947L32.5337 43.8237Z" fill="#0056FF"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M35.3427 43.4413H43.4266V32.8915L50.8554 25.4494L43.8077 18.3833L33.4628 28.7568V33.4464H28.7918L27.0869 35.1619L35.3427 43.4413Z" fill="#003197"/>
</g>
<defs>
<clipPath id="clip0_523_1749">
<rect width="51" height="51.0001" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

10
dist/assets/mail.ecbe6887.svg vendored Normal file
View File

@ -0,0 +1,10 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_681_4112)">
<path d="M19 4H5C4.20435 4 3.44129 4.31607 2.87868 4.87868C2.31607 5.44129 2 6.20435 2 7V17C2 17.7956 2.31607 18.5587 2.87868 19.1213C3.44129 19.6839 4.20435 20 5 20H19C19.7956 20 20.5587 19.6839 21.1213 19.1213C21.6839 18.5587 22 17.7956 22 17V7C22 6.20435 21.6839 5.44129 21.1213 4.87868C20.5587 4.31607 19.7956 4 19 4V4ZM18.33 6L12 10.75L5.67 6H18.33ZM19 18H5C4.73478 18 4.48043 17.8946 4.29289 17.7071C4.10536 17.5196 4 17.2652 4 17V7.25L11.4 12.8C11.5731 12.9298 11.7836 13 12 13C12.2164 13 12.4269 12.9298 12.6 12.8L20 7.25V17C20 17.2652 19.8946 17.5196 19.7071 17.7071C19.5196 17.8946 19.2652 18 19 18Z" fill="#151515"/>
</g>
<defs>
<clipPath id="clip0_681_4112">
<rect width="24" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 875 B

10
dist/assets/phone.827f98ca.svg vendored Normal file
View File

@ -0,0 +1,10 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_681_4137)">
<path d="M17.4 22C13.3173 21.9947 9.40331 20.3705 6.5164 17.4836C3.62949 14.5967 2.00529 10.6827 2 6.59999C2 5.38 2.48464 4.20997 3.34731 3.3473C4.20998 2.48463 5.38 1.99999 6.6 1.99999C6.85834 1.99802 7.11625 2.02147 7.37 2.06999C7.61531 2.10629 7.85647 2.16658 8.09 2.24999C8.25425 2.30762 8.40061 2.40713 8.51461 2.53866C8.62861 2.6702 8.7063 2.82922 8.74 2.99999L10.11 8.99999C10.1469 9.16286 10.1425 9.33237 10.0971 9.49308C10.0516 9.65378 9.96671 9.80055 9.85 9.91999C9.72 10.06 9.71 10.07 8.48 10.71C9.46499 12.8708 11.1932 14.6062 13.35 15.6C14 14.36 14.01 14.35 14.15 14.22C14.2694 14.1033 14.4162 14.0183 14.5769 13.9729C14.7376 13.9275 14.9071 13.9231 15.07 13.96L21.07 15.33C21.2353 15.3683 21.3881 15.4481 21.5141 15.5618C21.64 15.6756 21.735 15.8195 21.79 15.98C21.8744 16.2174 21.938 16.4616 21.98 16.71C22.0202 16.9613 22.0403 17.2155 22.04 17.47C22.0216 18.6848 21.5233 19.8429 20.654 20.6916C19.7847 21.5404 18.6149 22.0107 17.4 22ZM6.6 3.99999C5.91125 4.00263 5.25146 4.2774 4.76443 4.76442C4.27741 5.25145 4.00263 5.91124 4 6.59999C4.00265 10.1531 5.41528 13.5599 7.92769 16.0723C10.4401 18.5847 13.8469 19.9973 17.4 20C18.0888 19.9974 18.7485 19.7226 19.2356 19.2356C19.7226 18.7485 19.9974 18.0887 20 17.4V17.07L15.36 16L15.07 16.55C14.62 17.42 14.29 18.05 13.45 17.71C11.7929 17.1169 10.2887 16.162 9.04673 14.9149C7.80477 13.6677 6.85622 12.1596 6.27 10.5C5.91 9.71999 6.59 9.35999 7.45 8.90999L8 8.63999L6.93 3.99999H6.6Z" fill="#151515"/>
</g>
<defs>
<clipPath id="clip0_681_4137">
<rect width="24" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

15
dist/index.html vendored Normal file
View File

@ -0,0 +1,15 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Exchange</title>
<script type="module" crossorigin src="/assets/index.2e037b32.js"></script>
<link rel="stylesheet" href="/assets/index.9661e2a1.css">
</head>
<body>
<div id="root"></div>
</body>
</html>

13
index.html Normal file
View File

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Exchange</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.jsx"></script>
</body>
</html>

3713
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

31
package.json Normal file
View File

@ -0,0 +1,31 @@
{
"name": "exchange_10.10.2022",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
},
"dependencies": {
"axios": "^1.1.2",
"chart.js": "^3.9.1",
"react": "^18.2.0",
"react-chartjs-2": "^4.3.1",
"react-dom": "^18.2.0",
"react-fast-marquee": "^1.3.5",
"react-player": "^2.11.0",
"react-router-dom": "^6.4.2",
"react-uuid": "^2.0.0",
"uuidv4": "^6.2.13",
"vite-plugin-svgr": "^2.2.2"
},
"devDependencies": {
"@types/react": "^18.0.17",
"@types/react-dom": "^18.0.6",
"@vitejs/plugin-react": "^2.1.0",
"sass": "^1.55.0",
"vite": "^3.1.0"
}
}

5
public/.htaccess Normal file
View File

@ -0,0 +1,5 @@
<IfModule mod_rewrite.c>
RewriteEngine On RewriteBase /subdirectory RewriteRule ^index\.html$ - [L] RewriteCond
%{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule . /index.html [L]
</IfModule>

83
src/App.jsx Normal file
View File

@ -0,0 +1,83 @@
// Modules
import { useState, useEffect } from 'react';
import { Routes, Route } from 'react-router-dom';
// Styles
import './assets/styles/style.scss';
// Components
import Header from './components/Header';
import Footer from './components/Footer';
// Pages
import Home from './pages/Home';
import Gtsbt from './pages/Gtsbt';
import Finance from './pages/Finance';
import Normative from './pages/Normative';
import Trade from './pages/Trade';
import Register from './pages/Register';
import Ticker from './components/Ticker';
import Contacts from './pages/Contacts';
import NewsPage from './pages/NewsPage';
import NewsPostPage from './pages/NewsPostPage';
import Tarif from './pages/Tarif';
import Multimedia from './pages/Multimedia';
// Classes
import { LanguageManager } from './helpers/languageManager';
const App = () => {
const languageManager = new LanguageManager();
const [lang, setLang] = useState(languageManager.getLang());
const [postId, setPostId] = useState();
const [postsData, setPostsData] = useState();
useEffect(() => {
languageManager.saveLang(lang);
}, [lang]);
return (
<div className="App">
<Ticker />
<Header lang={lang} setLang={setLang} />
<Routes>
<Route index element={<Home lang={lang} setPostId={setPostId} />} />
<Route path="/gtsbt" element={<Gtsbt lang={lang} />} />
<Route path="/norm" element={<Normative lang={lang} />} />
<Route
path="/news"
element={
<NewsPage
lang={lang}
setPostId={setPostId}
postId={postId}
postsData={postsData}
setPostsData={setPostsData}
/>
}
/>
<Route path="/multimedia" element={<Multimedia lang={lang} />} />
<Route path="/contacts" element={<Contacts lang={lang} />} />
<Route path="/trade" element={<Trade lang={lang} />} />
<Route path="/fin" element={<Finance lang={lang} />} />
<Route path="/register" element={<Register lang={lang} />} />
<Route path="/tarif" element={<Tarif lang={lang} />} />
<Route
path="/post/:id"
element={
<NewsPostPage
lang={lang}
setPostId={setPostId}
postsData={postsData}
setPostsData={setPostsData}
/>
}
/>
</Routes>
<Footer lang={lang} />
</div>
);
};
export default App;

View File

@ -0,0 +1,11 @@
<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_656_2354)">
<path d="M17.3702 12.8901L12.0002 17.2101L6.63018 12.7301C6.45292 12.5832 6.23039 12.5019 6.00018 12.5001C5.85327 12.4998 5.70811 12.532 5.57503 12.5942C5.44194 12.6564 5.3242 12.7472 5.23018 12.8601C5.14598 12.9611 5.08254 13.0778 5.04349 13.2034C5.00445 13.329 4.99057 13.4611 5.00264 13.592C5.01472 13.723 5.05252 13.8503 5.11387 13.9667C5.17522 14.083 5.25892 14.1861 5.36018 14.2701L11.3602 19.2701C11.5391 19.4172 11.7636 19.4976 11.9952 19.4976C12.2268 19.4976 12.4512 19.4172 12.6302 19.2701L18.6302 14.4401C18.7329 14.3575 18.8183 14.2555 18.8815 14.1399C18.9447 14.0243 18.9844 13.8973 18.9983 13.7663C19.0122 13.6352 19.0001 13.5027 18.9627 13.3764C18.9253 13.2501 18.8632 13.1324 18.7802 13.0301C18.6969 12.9281 18.5944 12.8435 18.4784 12.7813C18.3624 12.719 18.2353 12.6803 18.1043 12.6673C17.9733 12.6542 17.841 12.6672 17.715 12.7055C17.589 12.7437 17.4718 12.8064 17.3702 12.8901V12.8901Z" fill="#FF5E5B"/>
<path d="M11.3602 12.2701C11.5391 12.4172 11.7636 12.4976 11.9952 12.4976C12.2268 12.4976 12.4512 12.4172 12.6302 12.2701L18.6302 7.44007C18.7329 7.35755 18.8183 7.25554 18.8815 7.1399C18.9447 7.02426 18.9844 6.89728 18.9983 6.76625C19.0122 6.63522 19.0001 6.50273 18.9627 6.37639C18.9253 6.25005 18.8632 6.13236 18.7802 6.03007C18.6977 5.92734 18.5956 5.84194 18.48 5.77876C18.3644 5.71559 18.2374 5.67589 18.1064 5.66195C17.9753 5.64802 17.8428 5.66011 17.7165 5.69754C17.5902 5.73497 17.4725 5.797 17.3702 5.88007L12.0002 10.2101L6.63018 5.73007C6.45292 5.58317 6.23039 5.50193 6.00018 5.50007C5.85327 5.49983 5.70811 5.53196 5.57503 5.59419C5.44194 5.65641 5.3242 5.74719 5.23018 5.86007C5.14598 5.96112 5.08254 6.07779 5.04349 6.20339C5.00445 6.32899 4.99057 6.46106 5.00264 6.59204C5.01472 6.72302 5.05252 6.85032 5.11387 6.96667C5.17522 7.08302 5.25892 7.18612 5.36018 7.27007L11.3602 12.2701Z" fill="#FF5E5B"/>
</g>
<defs>
<clipPath id="clip0_656_2354">
<rect width="24" height="24" fill="white" transform="translate(24 24.5) rotate(-180)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -0,0 +1,11 @@
<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_656_2464)">
<path d="M6.62982 12.1099L11.9998 7.78993L17.3698 12.2699C17.5471 12.4168 17.7696 12.4981 17.9998 12.4999C18.1467 12.5002 18.2919 12.468 18.425 12.4058C18.5581 12.3436 18.6758 12.2528 18.7698 12.1399C18.854 12.0389 18.9175 11.9222 18.9565 11.7966C18.9956 11.671 19.0094 11.5389 18.9974 11.408C18.9853 11.277 18.9475 11.1497 18.8861 11.0333C18.8248 10.917 18.7411 10.8139 18.6398 10.7299L12.6398 5.72993C12.4609 5.58285 12.2364 5.50244 12.0048 5.50244C11.7732 5.50244 11.5488 5.58285 11.3698 5.72993L5.36982 10.5599C5.26709 10.6425 5.18169 10.7445 5.11852 10.8601C5.05534 10.9757 5.01564 11.1027 5.0017 11.2337C4.98777 11.3648 4.99986 11.4973 5.03729 11.6236C5.07472 11.7499 5.13675 11.8676 5.21982 11.9699C5.30306 12.0719 5.40562 12.1565 5.52161 12.2187C5.6376 12.281 5.76474 12.3197 5.89575 12.3327C6.02675 12.3458 6.15903 12.3328 6.285 12.2945C6.41097 12.2563 6.52815 12.1936 6.62982 12.1099V12.1099Z" fill="#6EEB83"/>
<path d="M12.6398 12.7299C12.4609 12.5828 12.2364 12.5024 12.0048 12.5024C11.7732 12.5024 11.5488 12.5828 11.3698 12.7299L5.36982 17.5599C5.26709 17.6425 5.18169 17.7445 5.11852 17.8601C5.05534 17.9757 5.01564 18.1027 5.0017 18.2337C4.98777 18.3648 4.99986 18.4973 5.03729 18.6236C5.07472 18.7499 5.13675 18.8676 5.21982 18.9699C5.30234 19.0727 5.40435 19.1581 5.51999 19.2212C5.63563 19.2844 5.76261 19.3241 5.89364 19.338C6.02467 19.352 6.15716 19.3399 6.2835 19.3025C6.40984 19.265 6.52753 19.203 6.62982 19.1199L11.9998 14.7899L17.3698 19.2699C17.5471 19.4168 17.7696 19.4981 17.9998 19.4999C18.1467 19.5002 18.2919 19.468 18.425 19.4058C18.5581 19.3436 18.6758 19.2528 18.7698 19.1399C18.854 19.0389 18.9175 18.9222 18.9565 18.7966C18.9956 18.671 19.0094 18.5389 18.9974 18.408C18.9853 18.277 18.9475 18.1497 18.8861 18.0333C18.8248 17.917 18.7411 17.8139 18.6398 17.7299L12.6398 12.7299Z" fill="#6EEB83"/>
</g>
<defs>
<clipPath id="clip0_656_2464">
<rect width="24" height="24" fill="white" transform="translate(0 0.5)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -0,0 +1,3 @@
<svg width="17" height="8" viewBox="0 0 17 8" fill="" xmlns="http://www.w3.org/2000/svg">
<path d="M16.3536 4.35355C16.5488 4.15829 16.5488 3.84171 16.3536 3.64645L13.1716 0.464466C12.9763 0.269204 12.6597 0.269204 12.4645 0.464466C12.2692 0.659728 12.2692 0.976311 12.4645 1.17157L15.2929 4L12.4645 6.82843C12.2692 7.02369 12.2692 7.34027 12.4645 7.53553C12.6597 7.7308 12.9763 7.7308 13.1716 7.53553L16.3536 4.35355ZM0 4.5H16V3.5H0V4.5Z" fill=""/>
</svg>

After

Width:  |  Height:  |  Size: 457 B

View File

@ -0,0 +1,12 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_637_2317)">
<path d="M26.7333 14.6665H5.26667C4.56711 14.6665 4 15.2336 4 15.9332V16.0665C4 16.7661 4.56711 17.3332 5.26667 17.3332H26.7333C27.4329 17.3332 28 16.7661 28 16.0665V15.9332C28 15.2336 27.4329 14.6665 26.7333 14.6665Z" fill="#05172D"/>
<path d="M26.7333 21.3335H5.26667C4.56711 21.3335 4 21.9006 4 22.6002V22.7335C4 23.4331 4.56711 24.0002 5.26667 24.0002H26.7333C27.4329 24.0002 28 23.4331 28 22.7335V22.6002C28 21.9006 27.4329 21.3335 26.7333 21.3335Z" fill="#05172D"/>
<path d="M26.7333 8H5.26667C4.56711 8 4 8.56711 4 9.26667V9.4C4 10.0996 4.56711 10.6667 5.26667 10.6667H26.7333C27.4329 10.6667 28 10.0996 28 9.4V9.26667C28 8.56711 27.4329 8 26.7333 8Z" fill="#05172D"/>
</g>
<defs>
<clipPath id="clip0_637_2317">
<rect width="32" height="32" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 923 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g data-name="Layer 2"><g data-name="close"><rect width="24" height="24" transform="rotate(180 12 12)" opacity="0"/><path d="M13.41 12l4.3-4.29a1 1 0 1 0-1.42-1.42L12 10.59l-4.29-4.3a1 1 0 0 0-1.42 1.42l4.3 4.29-4.3 4.29a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l4.29-4.3 4.29 4.3a1 1 0 0 0 1.42 0 1 1 0 0 0 0-1.42z"/></g></g></svg>

After

Width:  |  Height:  |  Size: 384 B

10
src/assets/icons/fax.svg Normal file
View File

@ -0,0 +1,10 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_681_4105)">
<path d="M19.36 7H18V5C18.0217 4.49233 17.8413 3.99675 17.4983 3.62186C17.1553 3.24698 16.6776 3.02335 16.17 3H7.83002C7.32242 3.02335 6.84478 3.24698 6.50175 3.62186C6.15873 3.99675 5.97831 4.49233 6.00002 5V7H4.64002C3.93628 7.00529 3.26331 7.28924 2.7685 7.78968C2.27369 8.29011 1.99735 8.96625 2.00002 9.67V16.33C1.99735 17.0338 2.27369 17.7099 2.7685 18.2103C3.26331 18.7108 3.93628 18.9947 4.64002 19H5.50002C5.50002 19.5304 5.71073 20.0391 6.08581 20.4142C6.46088 20.7893 6.96959 21 7.50002 21H16.5C17.0305 21 17.5392 20.7893 17.9142 20.4142C18.2893 20.0391 18.5 19.5304 18.5 19H19.36C20.0638 18.9947 20.7367 18.7108 21.2315 18.2103C21.7264 17.7099 22.0027 17.0338 22 16.33V9.67C22.0027 8.96625 21.7264 8.29011 21.2315 7.78968C20.7367 7.28924 20.0638 7.00529 19.36 7ZM8.00002 5H16V7H8.00002V5ZM7.50002 19V15H16.5V19H7.50002ZM20 16.33C20.0027 16.5034 19.9371 16.6708 19.8174 16.7962C19.6976 16.9216 19.5333 16.9948 19.36 17H18.5V15C18.5 14.4696 18.2893 13.9609 17.9142 13.5858C17.5392 13.2107 17.0305 13 16.5 13H7.50002C6.96959 13 6.46088 13.2107 6.08581 13.5858C5.71073 13.9609 5.50002 14.4696 5.50002 15V17H4.64002C4.46672 16.9948 4.30244 16.9216 4.18269 16.7962C4.06293 16.6708 3.99731 16.5034 4.00002 16.33V9.67C3.99731 9.49664 4.06293 9.32919 4.18269 9.20382C4.30244 9.07845 4.46672 9.00523 4.64002 9H19.36C19.5333 9.00523 19.6976 9.07845 19.8174 9.20382C19.9371 9.32919 20.0027 9.49664 20 9.67V16.33Z" fill="#151515"/>
</g>
<defs>
<clipPath id="clip0_681_4105">
<rect width="24" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

12
src/assets/icons/file.svg Normal file
View File

@ -0,0 +1,12 @@
<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_555_638)">
<path d="M30 32H18C17.4696 32 16.9609 32.2107 16.5858 32.5858C16.2107 32.9609 16 33.4696 16 34C16 34.5304 16.2107 35.0391 16.5858 35.4142C16.9609 35.7893 17.4696 36 18 36H30C30.5304 36 31.0391 35.7893 31.4142 35.4142C31.7893 35.0391 32 34.5304 32 34C32 33.4696 31.7893 32.9609 31.4142 32.5858C31.0391 32.2107 30.5304 32 30 32Z" fill=""/>
<path d="M18 28H24C24.5304 28 25.0391 27.7893 25.4142 27.4142C25.7893 27.0391 26 26.5304 26 26C26 25.4696 25.7893 24.9609 25.4142 24.5858C25.0391 24.2107 24.5304 24 24 24H18C17.4696 24 16.9609 24.2107 16.5858 24.5858C16.2107 24.9609 16 25.4696 16 26C16 26.5304 16.2107 27.0391 16.5858 27.4142C16.9609 27.7893 17.4696 28 18 28Z" fill=""/>
<path d="M39.48 16.6599L28.6 4.65987C28.413 4.45269 28.1847 4.28693 27.9298 4.17326C27.6749 4.05959 27.3991 4.00053 27.12 3.99987H13.12C12.4555 3.99195 11.7959 4.11499 11.179 4.36198C10.5621 4.60898 9.99981 4.97508 9.52436 5.43938C9.04892 5.90368 8.66959 6.45709 8.40804 7.068C8.14648 7.67892 8.00783 8.33537 8 8.99987V38.9999C8.00783 39.6644 8.14648 40.3208 8.40804 40.9317C8.66959 41.5426 9.04892 42.0961 9.52436 42.5604C9.99981 43.0247 10.5621 43.3908 11.179 43.6378C11.7959 43.8848 12.4555 44.0078 13.12 43.9999H34.88C35.5445 44.0078 36.2041 43.8848 36.821 43.6378C37.4379 43.3908 38.0002 43.0247 38.4756 42.5604C38.9511 42.0961 39.3304 41.5426 39.592 40.9317C39.8535 40.3208 39.9922 39.6644 40 38.9999V17.9999C39.9987 17.5042 39.8134 17.0267 39.48 16.6599ZM28 9.99987L33.48 15.9999H29.48C29.2706 15.9872 29.0657 15.933 28.8775 15.8403C28.6892 15.7477 28.5213 15.6185 28.3835 15.4602C28.2458 15.3019 28.1409 15.1178 28.075 14.9186C28.0092 14.7194 27.9837 14.5091 28 14.2999V9.99987ZM34.88 39.9999H13.12C12.9807 40.008 12.8413 39.9885 12.7095 39.9426C12.5778 39.8967 12.4565 39.8253 12.3524 39.7324C12.2484 39.6395 12.1637 39.5269 12.1032 39.4012C12.0427 39.2755 12.0077 39.1391 12 38.9999V8.99987C12.0077 8.8606 12.0427 8.7242 12.1032 8.5985C12.1637 8.47281 12.2484 8.36029 12.3524 8.26739C12.4565 8.17449 12.5778 8.10303 12.7095 8.05713C12.8413 8.01122 12.9807 7.99177 13.12 7.99987H24V14.2999C23.9677 15.7731 24.5195 17.1993 25.5349 18.2672C26.5504 19.3351 27.947 19.958 29.42 19.9999H36V38.9999C35.9923 39.1391 35.9573 39.2755 35.8968 39.4012C35.8363 39.5269 35.7516 39.6395 35.6476 39.7324C35.5435 39.8253 35.4222 39.8967 35.2905 39.9426C35.1587 39.9885 35.0193 40.008 34.88 39.9999Z" fill=""/>
</g>
<defs>
<clipPath id="clip0_555_638">
<rect width="48" height="48" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

13
src/assets/icons/logo.svg Normal file
View File

@ -0,0 +1,13 @@
<svg width="51" height="51" viewBox="0 0 51 51" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_523_1749)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.17909 32.5099L17.5208 22.1373V17.4502H22.1888L23.8992 15.7341L15.6421 7.44971H7.55829V17.9967L0.128906 25.4454L7.17909 32.5099Z" fill="#003197"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M35.1707 23.8474L43.4266 15.5646V7.45366H32.911L25.4928 0L18.4463 7.06731L28.7893 17.4495H33.464V22.1366L35.1707 23.8474Z" fill="#ABA17D"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M32.5337 43.8237L22.1883 33.4453H17.5209V28.7544L15.8105 27.0464L7.55469 35.3295V43.4414H18.0585L25.4891 50.8947L32.5337 43.8237Z" fill="#0056FF"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M35.3427 43.4413H43.4266V32.8915L50.8554 25.4494L43.8077 18.3833L33.4628 28.7568V33.4464H28.7918L27.0869 35.1619L35.3427 43.4413Z" fill="#003197"/>
</g>
<defs>
<clipPath id="clip0_523_1749">
<rect width="51" height="51.0001" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

10
src/assets/icons/mail.svg Normal file
View File

@ -0,0 +1,10 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_681_4112)">
<path d="M19 4H5C4.20435 4 3.44129 4.31607 2.87868 4.87868C2.31607 5.44129 2 6.20435 2 7V17C2 17.7956 2.31607 18.5587 2.87868 19.1213C3.44129 19.6839 4.20435 20 5 20H19C19.7956 20 20.5587 19.6839 21.1213 19.1213C21.6839 18.5587 22 17.7956 22 17V7C22 6.20435 21.6839 5.44129 21.1213 4.87868C20.5587 4.31607 19.7956 4 19 4V4ZM18.33 6L12 10.75L5.67 6H18.33ZM19 18H5C4.73478 18 4.48043 17.8946 4.29289 17.7071C4.10536 17.5196 4 17.2652 4 17V7.25L11.4 12.8C11.5731 12.9298 11.7836 13 12 13C12.2164 13 12.4269 12.9298 12.6 12.8L20 7.25V17C20 17.2652 19.8946 17.5196 19.7071 17.7071C19.5196 17.8946 19.2652 18 19 18Z" fill="#151515"/>
</g>
<defs>
<clipPath id="clip0_681_4112">
<rect width="24" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 875 B

View File

@ -0,0 +1,10 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_681_4137)">
<path d="M17.4 22C13.3173 21.9947 9.40331 20.3705 6.5164 17.4836C3.62949 14.5967 2.00529 10.6827 2 6.59999C2 5.38 2.48464 4.20997 3.34731 3.3473C4.20998 2.48463 5.38 1.99999 6.6 1.99999C6.85834 1.99802 7.11625 2.02147 7.37 2.06999C7.61531 2.10629 7.85647 2.16658 8.09 2.24999C8.25425 2.30762 8.40061 2.40713 8.51461 2.53866C8.62861 2.6702 8.7063 2.82922 8.74 2.99999L10.11 8.99999C10.1469 9.16286 10.1425 9.33237 10.0971 9.49308C10.0516 9.65378 9.96671 9.80055 9.85 9.91999C9.72 10.06 9.71 10.07 8.48 10.71C9.46499 12.8708 11.1932 14.6062 13.35 15.6C14 14.36 14.01 14.35 14.15 14.22C14.2694 14.1033 14.4162 14.0183 14.5769 13.9729C14.7376 13.9275 14.9071 13.9231 15.07 13.96L21.07 15.33C21.2353 15.3683 21.3881 15.4481 21.5141 15.5618C21.64 15.6756 21.735 15.8195 21.79 15.98C21.8744 16.2174 21.938 16.4616 21.98 16.71C22.0202 16.9613 22.0403 17.2155 22.04 17.47C22.0216 18.6848 21.5233 19.8429 20.654 20.6916C19.7847 21.5404 18.6149 22.0107 17.4 22ZM6.6 3.99999C5.91125 4.00263 5.25146 4.2774 4.76443 4.76442C4.27741 5.25145 4.00263 5.91124 4 6.59999C4.00265 10.1531 5.41528 13.5599 7.92769 16.0723C10.4401 18.5847 13.8469 19.9973 17.4 20C18.0888 19.9974 18.7485 19.7226 19.2356 19.2356C19.7226 18.7485 19.9974 18.0887 20 17.4V17.07L15.36 16L15.07 16.55C14.62 17.42 14.29 18.05 13.45 17.71C11.7929 17.1169 10.2887 16.162 9.04673 14.9149C7.80477 13.6677 6.85622 12.1596 6.27 10.5C5.91 9.71999 6.59 9.35999 7.45 8.90999L8 8.63999L6.93 3.99999H6.6Z" fill="#151515"/>
</g>
<defs>
<clipPath id="clip0_681_4137">
<rect width="24" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -0,0 +1,31 @@
<svg width="100" height="100" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1_46)">
<rect width="100" height="100" rx="50" fill="white"/>
<path d="M44.5 19.5C43.3418 16.4115 34.1667 5.16667 30.5 1.5L14 13C15.5 13.6667 20.7 16.7 21.5 17.5C22.5 18.5 25.5 22.5 28 26.5C30 29.7 30.8333 34.8333 31 37C31.3333 40.5 33.1 47.6 37.5 48C41.9 48.4 45.5 43.5 46.5 40.5C47.5 37.5 46.9 35.5 46.5 29.5C46 22 46 23.5 44.5 19.5Z" fill="#595977"/>
<path d="M81.5229 45.5C84.6114 44.3418 95.8563 35.1667 99.5229 31.5L88.0229 15C87.3563 16.5 84.3229 21.7 83.5229 22.5C82.5229 23.5 78.5229 26.5 74.5229 29C71.3229 31 66.1896 31.8333 64.0229 32C60.5229 32.3333 53.4229 34.1 53.0229 38.5C52.6229 42.9 57.5229 46.5 60.5229 47.5C63.5229 48.5 65.5229 47.9 71.5229 47.5C79.0229 47 77.5229 47 81.5229 45.5Z" fill="#595977"/>
<path d="M54.9252 81.9248C56.1242 84.9976 65.4476 96.1199 69.1626 99.7377L85.5087 88.02C84 87.3732 78.7603 84.4091 77.9497 83.6198C76.9366 82.6331 73.8838 78.6732 71.331 74.7067C69.2888 71.5335 68.3875 66.4117 68.1921 64.2474C67.8124 60.7521 65.9518 53.6762 61.5469 53.3345C57.142 52.9929 53.6072 57.9402 52.6471 60.9531C51.6869 63.9661 52.3134 65.958 52.7929 71.9522C53.3922 79.4449 53.3724 77.945 54.9252 81.9248Z" fill="#595977"/>
<path d="M18.0916 56.7521C15.0549 58.0399 4.20837 67.6827 0.700161 71.5013L12.8881 87.4998C13.4907 85.973 16.3013 80.6493 17.0667 79.8161C18.0235 78.7747 21.8929 75.6081 25.7836 72.9411C28.8961 70.8074 33.9895 69.7576 36.1472 69.4994C39.63 69.0182 46.6488 66.9527 46.8623 62.5397C47.0757 58.1267 42.0277 54.7373 38.9881 53.8652C35.9485 52.993 33.9757 53.6771 27.998 54.3307C20.5258 55.1476 22.0245 55.0841 18.0916 56.7521Z" fill="#595977"/>
<path d="M43.7578 11.4L44.2714 0.0333333H34L43.7578 11.4Z" fill="#595977"/>
<path d="M61.7327 23.2833C56.8024 29.07 52.3173 29.8278 50.9478 30C50.9478 30 47.8663 16.5667 47.8663 13.9833C47.8663 11.4 47.3528 -1 47.3528 -1H59.6784C62.4174 3.82222 66.6629 17.4967 61.7327 23.2833Z" fill="#595977"/>
<path d="M64.375 6.7253C63.275 5.49434 63 2.62209 63 1.33984C64.375 1.08339 67.2626 0.724358 67.8126 1.33984C68.5001 2.10919 67.1251 6.7253 66.4376 7.49465C65.7501 8.264 65.7501 8.264 64.375 6.7253Z" fill="#595977"/>
<path d="M5.9074 36.9C4.85229 37.78 2.39036 38 1.29129 38C1.07148 36.9 0.763735 34.5899 1.29129 34.1499C1.95073 33.5999 5.9074 34.6999 6.56684 35.2499C7.22628 35.7999 7.22628 35.7999 5.9074 36.9Z" fill="#595977"/>
<path d="M94.4826 64.1803C95.4624 63.6146 97.3172 63.9046 98.1221 64.1203C98.0243 65.1293 97.7061 67.2182 97.2162 67.501C96.6039 67.8546 93.9649 66.1122 93.6114 65.4998C93.2578 64.8874 93.2578 64.8874 94.4826 64.1803Z" fill="#595977"/>
<path d="M37.1025 95.1066C37.3557 96.2681 36.5031 98.1448 36.0452 98.938C35.0876 98.5966 33.1407 97.7687 33.0141 97.188C32.8559 96.4621 35.3705 94.1066 36.0783 93.8807C36.786 93.6548 36.786 93.6548 37.1025 95.1066Z" fill="#595977"/>
<path d="M50.5 40L54.2282 45.7718L60 49.5L54.2282 53.2282L50.5 59L46.7718 53.2282L41 49.5L46.7718 45.7718L50.5 40Z" fill="#595977"/>
<path d="M90 44.5L101 45L101 35L90 44.5Z" fill="#595977"/>
<path d="M56.5 91L56 102L66 102L56.5 91Z" fill="#595977"/>
<path d="M10 57.5L-1 57L-1 67L10 57.5Z" fill="#595977"/>
<path d="M39.2075 78.5C44.0075 72.9 48.3742 72.1667 49.7075 72C49.7075 72 52.5 85 52.7075 87.5C52.915 90 53.2075 102 53.2075 102L41.2075 102C38.5409 97.3333 34.4075 84.1 39.2075 78.5Z" fill="#595977"/>
<path d="M76.5 62C70.9 57.2 70.1667 52.8333 70 51.5C70 51.5 80.5 49 85.5 48.5C90.5 48 100 48 100 48L100 60C95.3333 62.6667 82.1 66.8 76.5 62Z" fill="#595977"/>
<path d="M23.5 40.2074C29.1 45.0074 29.8333 49.3741 30 50.7074C30 50.7074 17 53.7074 14.5 53.7074C12 53.7074 0 54.2074 0 54.2074L1.43099e-07 42.2074C4.66667 39.5407 17.9 35.4074 23.5 40.2074Z" fill="#595977"/>
<path d="M16.0476 88.2463C16.8458 81.4702 30.3484 75.2587 37 73C31.5123 78.6468 33.0092 84.2936 33.0092 92.199C33.0092 98.4105 30.1822 99.1634 29.517 98.9752C24.6946 98.2223 15.2494 95.0224 16.0476 88.2463Z" fill="#595977"/>
<path d="M85.6599 84.9524C79.1444 84.1542 73.1718 70.6516 71 64C76.4296 69.4877 81.8592 67.9908 89.4606 67.9908C95.4332 67.9909 96.1571 70.8178 95.9761 71.483C95.2522 76.3054 92.1754 85.7506 85.6599 84.9524Z" fill="#595977"/>
<path d="M84.4918 15.3372C83.4686 22.0053 69.7377 27.6902 63.0002 29.6991C68.6837 24.3038 67.3706 18.6747 67.6316 10.8642C68.089 4.29897 70.6934 4.07806 71.3536 4.28629C76.1594 5.19157 85.5151 8.66916 84.4918 15.3372Z" fill="#595977"/>
<path d="M12.518 16.2585C18.5298 16.9647 24.2404 30.4105 26.3443 37.0451C21.259 31.6237 16.283 33.2019 9.28389 33.3112C4.00098 33.5 3.07374 30.5744 3.22997 29.9052C3.82108 25.062 6.50625 15.5523 12.518 16.2585Z" fill="#595977"/>
</g>
<defs>
<clipPath id="clip0_1_46">
<rect width="100" height="100" rx="50" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 MiB

BIN
src/assets/images/hero.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

BIN
src/assets/images/hero1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 859 KiB

BIN
src/assets/images/hero2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 958 KiB

BIN
src/assets/images/news.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 980 KiB

View File

@ -0,0 +1,118 @@
.about-wrapper {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4rem;
}
.about-left {
display: flex;
flex-direction: column;
max-width: 73.6rem;
gap: 1.6rem;
}
.about-text-wrapper {
display: flex;
flex-direction: column;
gap: 1.6rem;
max-width: 73.6rem;
margin-bottom: 2.6rem;
}
.about-text {
color: $base-gray;
font-size: 1.8rem;
line-height: 150%;
}
.about-link-wrapper {
display: flex;
flex-direction: column;
gap: 1.6rem;
padding-left: 1.6rem;
}
.about-link {
display: flex;
gap: 0.8rem;
align-items: center;
transition: all 0.2s ease;
&:hover {
text-decoration: underline;
}
}
.about-link-text {
font-size: 1.6rem;
font-weight: 700;
color: $base-blue;
}
// .about-right {
// width: 73.6rem;
// height: 41.4rem;
// }
@media (max-width: 1440px) {
.about-right {
height: 80%;
.video-player {
width: 100%;
height: 100%;
}
}
}
@media (max-width: 1024px) {
.about-right {
height: 50vh;
}
.about-left {
gap: 1.6rem;
max-width: 100%;
}
// .about-right {
// width: 100%;
// }
.about-text-wrapper {
gap: 0.8rem;
margin-bottom: 1.6rem;
max-width: 100%;
}
.about-wrapper {
grid-template-columns: 1fr;
}
}
@media (max-width: 800px) {
// .about-right {
// height: 40vh;
// }
.about-right {
height: 40vh;
}
}
@media (max-width: 550px) {
.about-right {
height: 30vh;
}
}
@media (max-width: 425px) {
.about-right {
height: 22vh;
}
.about-link-text {
font-size: 1.4rem;
}
.about-text-wrapper {
margin-bottom: 0.8rem;
}
}

View File

@ -0,0 +1,104 @@
.table {
max-width: 74.6rem;
width: 100%;
display: flex;
flex-direction: column;
gap: 2.4rem;
}
.table-top {
border-bottom: 1px solid $base-bright-blue;
display: grid;
grid-template-columns: 2fr 1fr 1fr;
align-items: center;
height: 5.9rem;
justify-content: space-between;
}
.table-title {
font-size: 1.8rem;
color: $base-white;
font-weight: 400;
text-align: center;
}
.table-row-arrow {
width: 2.4rem;
height: 2.4rem;
}
.table-row-status {
gap: 0.8rem;
align-items: center;
}
.table-bottom {
.active {
background: #1b3656;
}
}
@media (max-width: 1500px) {
.table-top {
gap: 1.8rem;
}
.table-title {
font-size: 1.6rem;
}
.table-row {
gap: 1.8rem;
span {
font-size: 1.6rem;
}
}
}
@media (max-width: 1200px) {
.table {
max-width: 100%;
}
.table-row {
gap: 1rem;
div {
font-size: 1.4rem;
}
}
}
@media (max-width: 500px) {
.table-top {
gap: 1rem;
}
.table-title {
font-size: 1.4rem;
}
.table-row {
gap: 1rem;
span {
font-size: 1.4rem;
}
}
}
@media (max-width: 425px) {
.table-top {
gap: 1rem;
height: 4.8rem;
}
.table {
gap: 1.6rem;
}
.table-title {
font-size: 1.2rem;
}
}

View File

@ -0,0 +1,23 @@
.contacts-wrapper {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 4rem;
}
@media (max-width: 1077px) {
.contacts-wrapper {
gap: 2.4rem;
}
}
@media (max-width: 880px) {
.contacts-wrapper {
grid-template-columns: repeat(2, 1fr);
}
}
@media (max-width: 600px) {
.contacts-wrapper {
grid-template-columns: 1fr;
}
}

View File

@ -0,0 +1,88 @@
.contacts-card {
padding: 2.4rem;
border-radius: 0.5rem;
background: rgb(231, 231, 231);
// max-width: 44.7rem;
min-height: 22.7rem;
display: flex;
flex-direction: column;
gap: 2.4rem;
}
.contacts-card-title {
font-size: 1.8rem;
color: $base-blue;
}
.contacts-card-pos-wrapper {
display: flex;
flex-wrap: wrap;
gap: 2.4rem;
}
.contacts-card-pos {
display: flex;
flex-direction: column;
gap: 1.6rem;
}
.contacts-card-pos-title {
font-size: 1.6rem;
font-weight: 400;
color: $base-black;
}
.contacts-card-pos-contact {
display: flex;
gap: 1.6rem;
align-items: center;
}
.contacts-card-pos-contact-icon {
display: flex;
justify-content: center;
align-items: center;
img {
width: 100%;
height: 100%;
}
}
.contacts-card-pos-contact-title {
font-weight: 700;
color: $base-black;
font-size: 1.6rem;
}
@media (max-width: 1077px) {
.contacts-card {
padding: 1.6rem;
}
.contacts-card-pos {
gap: 0.8rem;
}
.contacts-card-pos-wrapper {
gap: 1.6rem;
}
.contacts-card-pos-contact {
gap: 0.8rem;
}
}
@media (max-width: 600px) {
.contacts-card-pos {
gap: 1.6rem;
}
.contacts-card-pos-wrapper {
gap: 2.4rem;
}
.contacts-card-pos-contact {
gap: 1.6rem;
}
}

View File

@ -0,0 +1,124 @@
.chart {
padding: 8rem 0;
background: $base-blue;
width: 100%;
}
.chart-wrapper {
display: flex;
flex-direction: column;
gap: 4.8rem;
}
.tab {
// width: 47.7rem;
width: 100%;
text-align: center;
height: 5.9rem;
color: $base-white;
font-size: 1.8rem;
font-weight: 700;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
position: relative;
transition: all 0.3s ease;
background: transparent;
border-radius: 0.5rem;
&::after {
content: '';
width: 100%;
position: absolute;
bottom: 0;
height: 0.1rem;
background: $base-bright-blue;
transition: all 0.3s ease;
border-radius: 0.5rem;
}
span {
z-index: 20;
}
}
.tab:hover.tab::after {
height: 100%;
}
.chart-tabs {
display: flex;
width: 100%;
gap: 2.4rem;
.active.tab::after {
height: 100%;
}
}
.chart-data {
display: grid;
grid-template-columns: 2fr 1fr;
gap: 2.4rem;
}
@media (max-width: 1500px) {
.tab {
height: 5.9rem;
font-size: 1.8rem;
}
.line-chart-wrapper {
display: flex;
justify-content: center;
}
}
@media (max-width: 1200px) {
.tab {
font-size: 1.4rem;
}
.chart-data {
flex-direction: column;
}
}
@media (max-width: 1100px) {
.chart-data {
display: grid;
grid-template-columns: 1fr;
gap: 2.4rem;
}
}
@media (max-width: 500px) {
.chart-wrapper {
gap: 2.4rem;
}
.tab {
font-size: 1.3rem;
height: 4.8rem;
}
.chart-data {
gap: 2.4rem;
}
.chart-tabs {
flex-direction: column;
gap: 1.6rem;
}
.tab {
width: 100%;
font-size: 1.2rem;
}
.line-chart-wrapper {
width: 100%;
height: 100%;
}
}

View File

@ -0,0 +1,47 @@
.document-link {
display: flex;
gap: 2.4rem;
align-items: center;
padding: 1rem;
border: 1px solid $base-gray;
// max-width: 47.7rem;
border-radius: 0.5rem;
transition: all 0.3s ease;
&:hover {
background: $base-blue;
.document-title {
color: $base-white;
}
.document-img {
svg {
fill: $base-white;
}
}
}
}
.document-img {
svg {
fill: $base-blue;
transition: all 0.2s ease;
}
}
.document-title {
color: $base-blue;
font-weight: 400;
font-size: 1.8rem;
line-height: 150%;
}
@media (max-width: 1024px) {
.document-title {
font-size: 1.6rem;
}
}
@media (max-width: 400px) {
.document-title {
font-size: 1.8rem;
}
}

View File

@ -0,0 +1,35 @@
.documents {
margin-bottom: 3.2rem;
}
.documents-wrapper {
display: flex;
flex-direction: column;
gap: 3.2rem;
}
.documents-links-wrapper {
display: grid;
grid-template-columns: repeat(3, 1fr);
column-gap: 2.4rem;
row-gap: 2.4rem;
}
@media (max-width: 1379px) {
.documents-links-wrapper {
// grid-template-columns: repeat(2, 1fr);
column-gap: 1.6rem;
}
}
@media (max-width: 1120px) {
.documents-links-wrapper {
grid-template-columns: repeat(2, 1fr);
}
}
@media (max-width: 825px) {
.documents-links-wrapper {
grid-template-columns: repeat(1, 1fr);
}
}

View File

@ -0,0 +1,126 @@
.footer {
margin-top: 8rem;
}
.footer-top {
padding: 4.8rem 0;
background: $base-light-blue;
}
.footer-top-wrapper {
display: flex;
flex-direction: column;
gap: 4.8rem;
}
.footer-top-content {
display: grid;
grid-template-columns: repeat(2, 1fr);
row-gap: 2.4rem;
justify-content: center;
align-items: center;
}
.footer-top-item {
display: flex;
flex-direction: column;
gap: 0.8rem;
&:nth-child(3) {
.footer-top-item-text {
text-decoration: underline;
}
}
}
.footer-top-item-title {
font-size: 1.8rem;
font-weight: 700;
color: $base-blue;
}
.footer-top-item-text {
font-size: 1.8rem;
color: $base-black;
font-weight: 400;
}
.footer-bottom {
padding: 4.8rem 0;
background: $base-blue;
}
.footer-nav-list {
display: grid;
grid-template-columns: repeat(2, 1fr);
row-gap: 1.6rem;
justify-content: center;
}
.footer-nav-list-link {
font-size: 1.8rem;
color: $base-gray;
transition: all 0.3s ease;
&:hover {
color: $base-white;
}
}
@media (max-width: 1440px) {
// .footer-top-content {
// grid-template-columns: repeat(2, 47.4rem);
// column-gap: 8rem;
// }
// .footer-nav-list {
// grid-template-columns: repeat(2, 47.4rem);
// column-gap: 8rem;
// row-gap: 1.6rem;
// }
.footer {
.container {
width: 80%;
}
}
}
@media (max-width: 1024px) {
.footer-top-content {
display: grid;
grid-template-columns: repeat(2, 1fr);
row-gap: 2.4rem;
justify-content: center;
align-items: center;
}
.footer-nav-list {
display: grid;
grid-template-columns: repeat(2, 1fr);
row-gap: 1.6rem;
justify-content: center;
}
.footer {
.container {
width: 100%;
}
}
}
@media (max-width: 500px) {
.footer-top-content {
grid-template-columns: 1fr;
}
.footer-bottom,
.footer-top {
padding: 3.2rem 0;
}
.footer-nav-list {
grid-template-columns: 1fr;
row-gap: 2.4rem;
}
}

View File

@ -0,0 +1,30 @@
.gallery {
display: grid;
grid-template-columns: repeat(5, 1fr);
gap: 2rem;
}
@media (max-width: 1024px) {
.gallery {
grid-template-columns: repeat(4, 1fr);
}
}
@media (max-width: 768px) {
.gallery {
grid-template-columns: repeat(3, 1fr);
gap: 0.8rem;
}
}
@media (max-width: 500px) {
.gallery {
grid-template-columns: repeat(2, 1fr);
}
}
@media (max-width: 320px) {
.gallery {
grid-template-columns: repeat(1, 1fr);
}
}

View File

@ -0,0 +1,10 @@
.gallery-item {
max-width: 28.6rem;
max-height: 37.6rem;
img {
width: 100%;
height: 100%;
object-fit: cover;
}
}

View File

@ -0,0 +1,72 @@
@import url('https://fonts.googleapis.com/css2?family=Lato:wght@400;700&display=swap');
* {
padding: 0;
margin: 0;
box-sizing: border-box;
scroll-behavior: smooth;
}
.container {
padding: 0 3rem;
margin: 0 auto;
max-width: 158.2rem;
width: 100%;
// overflow-x: hidden;
}
.chart {
.container {
padding: 0 2rem;
margin: 0 auto;
max-width: 155.2rem;
width: 100%;
// overflow-x: hidden;
}
}
html {
font-size: 62.5%;
// font-family: 'Lato', sans-serif;
font-family: 'Roboto', sans-serif;
}
ul {
list-style-type: none;
}
input,
button {
background: none;
outline: none;
border: none;
}
a {
color: $base-black;
text-decoration: none;
}
p,
span,
a,
input,
button,
ul,
li,
ol,
div,
h1,
h2,
h3,
h4,
h5,
h6 {
line-height: 150%;
}
@media (max-width: 425px) {
.container {
padding: 0 2rem;
}
}

View File

@ -0,0 +1,243 @@
.header {
position: relative;
}
.nav-top {
background: $base-light-blue;
}
.nav-top-wrapper {
padding: 1.6rem 0;
color: $base-black;
font-weight: 700;
display: flex;
align-items: center;
justify-content: space-between;
}
.logo {
width: 19.5rem;
}
.nav-top-list {
display: flex;
gap: 0.8rem;
}
.nav-top-list-item a {
padding: 0.8rem;
font-size: 1.8rem;
color: $base-black;
}
.sign-in-item {
font-size: 1.8rem;
padding: 0.8rem;
font-weight: 700;
}
.nav-bottom {
background: $base-blue;
}
.nav-bottom-wrapper {
display: flex;
width: 100%;
position: relative;
// justify-content: space-between;
justify-content: center;
align-items: center;
}
.nav-lang-wrapper {
display: flex;
gap: 1.6rem;
justify-self: end;
position: absolute;
right: 0;
top: 50%;
transform: translateY(-50%);
}
.nav-lang-item {
color: $base-light-blue;
font-weight: 700;
font-size: 1.8rem;
cursor: pointer;
transition: all 0.3s;
padding: 0.8rem;
&:hover {
color: $base-white;
}
}
.lang-active {
color: $base-white;
}
.nav-bottom-list {
padding: 2.4rem 0;
display: flex;
justify-content: center;
align-items: center;
gap: 2.4rem;
a {
color: $base-white;
font-size: 1.8rem;
font-weight: 700;
padding: 0.8rem;
}
}
.mobile-nav {
display: none;
background: $base-light-blue;
padding: 1.6rem 0;
width: 100%;
z-index: 3;
}
.burger {
width: 4rem;
height: auto;
cursor: pointer;
img {
width: 100%;
height: 100%;
}
}
.close-burger {
width: 4rem;
height: auto;
fill: #fff;
position: absolute;
top: 2rem;
right: 2rem;
}
.mobile-nav-content {
height: auto;
position: absolute;
top: 0;
left: 0;
background: $base-blue;
width: 100%;
display: flex;
justify-content: center;
align-items: center;
transition: all 0.3s linear;
transform: translateY(-100%);
z-index: 2;
flex-direction: column;
}
.nav-lang-wrapper-mobile {
width: 100%;
}
.active {
top: 100%;
transform: translateY(0);
.mobile-nav-list {
opacity: 1;
}
}
.mobile-nav-list-item {
display: flex;
align-items: center;
a {
color: $base-white;
font-size: 1.8rem;
padding: 0.8rem;
display: inline-block;
width: 100%;
}
}
.mobile-nav-wrapper {
display: flex;
align-items: center;
justify-content: space-between;
height: 100%;
width: 100%;
}
.mobile-nav-list {
padding: 2.4rem 0;
height: 100%;
display: flex;
flex-direction: column;
// justify-content: space-around;
gap: 2.4rem;
opacity: 0;
transition: all 1.5s ease;
}
@keyframes nav-anim {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@media (max-width: 1250px) {
.nav-top-list-item a {
font-size: 1.4rem;
}
.sign-in-item {
font-size: 1.4rem;
}
.logo {
width: auto;
}
.nav-bottom-list {
padding: 2.4rem 0;
gap: 2.4rem;
a {
color: $base-white;
font-size: 1.4rem;
font-weight: 600;
padding: 0.8rem;
}
}
.nav-lang-wrapper {
gap: 0.8rem;
}
.nav-lang-item {
font-size: 1.4rem;
}
}
@media (max-width: 1000px) {
.nav-top,
.nav-bottom {
display: none;
}
.mobile-nav {
display: block;
}
.nav-lang-item {
font-size: 1.8rem;
}
.nav-lang-wrapper-mobile {
display: flex;
justify-content: space-between;
align-items: center;
padding-bottom: 2.4rem;
}
}

View File

@ -0,0 +1,98 @@
.hero {
height: 60rem;
background: url('../images/hero-remake.png');
background-repeat: no-repeat;
background-size: cover;
background-position: bottom;
// z-index: -2;
}
.hero-wrapper,
.hero .container {
height: 100%;
}
.hero-wrapper {
display: flex;
align-items: flex-end;
}
.buttons-wrapper {
display: flex;
cursor: pointer;
}
.hero-button {
display: flex;
justify-content: center;
align-items: center;
width: 34.8rem;
height: 11rem;
font-size: 2rem;
font-weight: 700;
text-transform: uppercase;
line-height: 150%;
padding: 0 5rem;
cursor: pointer;
// z-index: -1;
&:first-child {
background: $base-blue;
color: $base-white;
cursor: pointer;
}
&:last-child {
background: $base-light-blue;
color: $base-black;
cursor: pointer;
}
}
@media (max-width: 1440px) {
.hero {
height: 50rem;
}
.hero-button {
width: 28rem;
height: 8rem;
font-size: 1.6rem;
padding: 1.6rem;
}
}
@media (max-width: 768px) {
.hero {
background-position: right;
}
.hero-button {
width: 24rem;
height: 8rem;
font-size: 1.6rem;
padding: 1.6rem;
}
}
@media (max-width: 500px) {
.hero-button {
width: 20rem;
height: 8rem;
font-size: 1.4rem;
}
}
@media (max-width: 425px) {
.buttons-wrapper {
display: flex;
flex-direction: column;
width: 100%;
align-items: center;
position: absolute;
left: 0;
}
.hero-button {
width: 100%;
padding: 0.8rem;
height: 7rem;
font-size: 1.4rem;
}
}

View File

@ -0,0 +1,5 @@
.home-main {
display: flex;
flex-direction: column;
gap: 4.8rem;
}

View File

@ -0,0 +1,41 @@
.latest-new {
display: flex;
flex-direction: column;
gap: 0.8rem;
padding: 1.6rem 0.8rem;
border-top: 1px solid $base-gray;
transition: all 0.2s ease;
&:hover {
background: #f5f5f5;
}
}
.latest-new-date {
font-size: 1.4rem;
font-weight: 400;
color: $base-gray;
}
.latest-new-title {
font-size: 1.8rem;
}
@media (max-width: 1024px) {
.latest-new {
padding: 0.8rem 0.8rem;
}
.latest-new-title {
font-size: 1.6rem;
}
}
@media (max-width: 768px) {
.latest-new-title {
font-size: 1.8rem;
}
.latest-new {
padding: 1.6rem 0.8rem;
}
}

View File

@ -0,0 +1,37 @@
.line-chart {
width: 70rem;
height: 35.5rem;
overflow: hidden;
}
@media (max-width: 1440px) {
.line-chart {
width: 60rem;
}
}
@media (max-width: 1200px) {
.line-chart {
width: 100%;
height: 35.5rem;
}
}
@media (max-width: 1100px) {
.line-chart {
height: 30rem;
}
}
@media (max-width: 425px) {
.line-chart {
height: 20rem;
}
}
// @media (max-width: 768px) {
// .line-chart {
// width: 100%;
// height: 100%;
// }
// }

View File

@ -0,0 +1,27 @@
.multimedia-nav {
display: flex;
flex-direction: column;
align-items: center;
gap: 0.8rem;
margin: 1.6rem 0;
}
.multimedia-top-gallery {
display: flex;
gap: 2.4rem;
flex-wrap: wrap;
justify-content: center;
}
.multimedia-wrapper {
display: flex;
flex-direction: column;
width: 100%;
gap: 3.2rem;
}
@media (max-width: 500px) {
.multimedia-top-gallery {
gap: 0.8rem;
}
}

View File

@ -0,0 +1,23 @@
.multimedia-tab {
font-size: 1.8rem;
color: $base-blue;
font-weight: 700;
transition: all 0.3s ease;
cursor: pointer;
padding: 1.6rem;
&:hover {
color: $base-bright-blue;
}
}
.m-tab-active {
color: $base-bright-blue;
}
@media (max-width: 500px) {
.multimedia-tab {
font-size: 1.8rem;
padding: 0.8rem;
}
}

View File

@ -0,0 +1,64 @@
.news-wrapper {
display: flex;
flex-direction: column;
gap: 3.2rem;
}
.news-post-wrapper {
// display: flex;
// justify-content: space-between;
// flex-wrap: wrap;
// row-gap: 2.4rem;
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1.6rem;
}
.pagination {
font-size: 1.8rem;
display: flex;
align-items: center;
gap: 1.6rem;
margin-top: 4.8rem;
.arr-left {
transform: rotate(180deg);
}
}
.pagination-arrow {
padding: 1.6rem;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.3s;
border-radius: 0.8rem;
&:hover {
background: rgb(247, 247, 247);
}
&:disabled {
&:hover {
background: none;
cursor: default;
}
.arr-pagination-svg {
fill: $base-gray;
}
}
}
@media (max-width: 1200px) {
.news-post-wrapper {
grid-template-columns: repeat(2, 1fr);
}
}
@media (max-width: 768px) {
.news-post-wrapper {
grid-template-columns: repeat(1, 1fr);
justify-items: center;
}
}

View File

@ -0,0 +1,18 @@
.news-page-wrapper {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 4rem;
}
@media (max-width: 1200px) {
.news-page-wrapper {
grid-template-columns: repeat(2, 1fr);
}
}
@media (max-width: 768px) {
.news-page-wrapper {
grid-template-columns: repeat(1, 1fr);
justify-items: center;
}
}

View File

@ -0,0 +1,135 @@
.news-post {
display: flex;
flex-direction: column;
gap: 1.6rem;
max-width: 50rem;
width: 100%;
}
.news-post-img {
max-height: 22.1rem;
min-height: 22.1rem;
max-width: 100%;
width: 100%;
height: 100%;
overflow: hidden;
img {
width: 100%;
height: 100%;
object-fit: cover;
}
}
.news-post-content {
display: flex;
flex-direction: column;
gap: 0.8rem;
}
.news-post-date {
font-size: 1.6rem;
color: $base-gray;
font-weight: 400;
margin-bottom: 0.8rem;
}
.news-post-title {
font-size: 2rem;
font-weight: 700;
line-height: 130%;
color: $base-black;
}
.news-post-text {
font-size: 1.6rem;
color: $base-black;
}
.news-post-link {
display: flex;
gap: 1.6rem;
align-items: center;
transition: 0.3s ease;
width: fit-content;
h3 {
font-size: 1.6rem;
color: $base-blue;
}
&:hover {
text-decoration: underline;
}
}
// @media (max-width: 1500px) {
// .news-post {
// max-width: 32%;
// }
// .news-post-title {
// font-size: 2rem;
// }
// }
// @media (max-width: 1160px) {
// .news-post {
// // max-width: 48%;
// gap: 0.8rem;
// }
// .news-post-date {
// margin-bottom: 0;
// font-size: 1.4rem;
// }
// .news-post-title {
// font-size: 1.6rem;
// }
// }
// @media (max-width: 1160px) {
// .news-post {
// max-width: 48%;
// gap: 0.8rem;
// }
// .news-post-date {
// margin-bottom: 0;
// font-size: 1.4rem;
// }
// .news-post-title {
// font-size: 1.6rem;
// }
// }
// @media (max-width: 1160px) {
// .news-post {
// max-width: 48%;
// gap: 1.6rem;
// }
// .news-post-date {
// margin-bottom: 0.8rem;
// font-size: 1.6rem;
// }
// .news-post-title {
// font-size: 2rem;
// }
// }
// @media (max-width: 800px) {
// .news-post {
// max-width: 100%;
// gap: 1.6rem;
// }
// }
@media (max-width: 500px) {
.news-post-title {
font-size: 1.8rem;
}
}

View File

@ -0,0 +1,96 @@
.post-page-wrapper {
padding-top: 4.8rem;
display: grid;
grid-template-columns: 2fr 1fr;
// display: flex;
gap: 4rem;
}
.post-page-main-wrapper {
display: flex;
flex-direction: column;
gap: 2.4rem;
max-width: 99.5rem;
}
.post-page-header {
display: flex;
flex-direction: column;
gap: 0.8rem;
}
.post-page-title {
font-size: 2.4rem;
color: $base-blue;
}
.post-page-main-date {
font-size: 1.6rem;
color: $base-gray;
font-weight: 400;
}
.post-page-img {
margin-bottom: 0.8rem;
img {
width: 100%;
height: 100%;
}
}
.post-page-text {
display: flex;
flex-direction: column;
gap: 1.6rem;
}
.post-page-text-item {
font-size: 1.8rem;
color: $base-black;
}
.post-page-latest-wrapper {
display: flex;
flex-direction: column;
gap: 4rem;
}
.post-page-latest-title {
font-size: 2.4rem;
}
@media (max-width: 1440px) {
.post-page-wrapper {
gap: 2.4rem;
}
}
@media (max-width: 1024px) {
.post-page-latest-wrapper {
gap: 2.4rem;
}
}
@media (max-width: 768px) {
.post-page-wrapper {
grid-template-columns: 1fr;
}
.post-page-main-wrapper {
gap: 1.6rem;
}
.post-page-wrapper {
gap: 4rem;
}
.post-page-text {
gap: 0.8rem;
}
}
@media (max-width: 425px) {
.post-page-wrapper {
padding-top: 2.4rem;
}
}

View File

@ -0,0 +1,6 @@
.section-title {
text-transform: uppercase;
font-size: 2.4rem;
font-weight: 700;
color: $base-blue;
}

View File

@ -0,0 +1,136 @@
.sub-page-wrapper {
display: flex;
flex-direction: column;
gap: 2.4rem;
margin-top: 4.8rem;
width: 80%;
margin: 4.8rem auto 0;
}
.sub-page-full {
width: 100%;
}
.sub-page-content-wrapper {
margin-top: 1.6rem;
display: flex;
flex-direction: column;
gap: 2.4rem;
}
.sub-page-text-wrapper {
display: flex;
flex-direction: column;
gap: 0.8rem;
p {
font-size: 1.8rem;
line-height: 150%;
color: $base-black;
}
}
.sub-page-title {
font-size: 1.8rem;
color: $base-blue;
line-height: 150%;
}
.sub-page-list {
display: flex;
flex-direction: column;
gap: 2.4rem;
margin-left: 2.4rem;
}
.sub-page-list-wrapper {
display: flex;
flex-direction: column;
gap: 2.4rem;
// background: $base-light-blue;
border-radius: 0.5rem;
padding: 3.2rem 0rem;
}
.sub-page-list-item {
display: grid;
grid-template-columns: auto 1fr;
align-items: center;
gap: 4rem;
}
.sub-page-title-text {
display: flex;
flex-direction: column;
gap: 1.6rem;
}
.sub-page-list-num {
width: 4rem;
height: 4rem;
display: flex;
align-items: center;
justify-content: center;
background: $base-blue;
color: $base-white;
border-radius: 50rem;
font-size: 1.8rem;
font-weight: 700;
align-self: flex-start;
}
.sub-page-list-item-text {
font-size: 1.8rem;
color: $base-black;
font-weight: 400;
}
.sub-page-list-item-content {
display: flex;
flex-direction: column;
gap: 1.6rem;
}
.sub-page-list-item-list {
list-style: disc;
display: flex;
flex-direction: column;
gap: 1.6rem;
padding-left: 2.4rem;
}
.sub-page-file-title {
font-weight: 500;
color: $base-blue;
font-size: 1.8rem;
}
.sub-page-list-item-list-item {
font-size: 1.8rem;
color: $base-black;
}
@media (max-width: 1440px) {
}
@media (max-width: 768px) {
.sub-page-list-wrapper {
padding: 1.6rem 0rem;
}
.sub-page-wrapper {
width: 100%;
}
.sub-page-list-item {
gap: 2.4rem;
}
}
@media (max-width: 425px) {
.sub-page-list-item {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 0.8rem;
}
}

View File

@ -0,0 +1,51 @@
.tab-dark {
height: 5.9rem;
color: $base-blue;
font-size: 1.8rem;
font-weight: 700;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
position: relative;
transition: all 0.3s ease;
background: transparent;
border-radius: 0.5rem;
&:hover {
color: $base-white;
}
&::after {
content: '';
width: 100%;
position: absolute;
bottom: 0;
height: 0.1rem;
background: $base-blue;
transition: all 0.3s ease;
border-radius: 0.5rem;
}
span {
z-index: 20;
}
}
.tab-dark:hover.tab-dark::after {
height: 100%;
}
.active-tab {
color: $base-white;
}
.active-tab.tab-dark::after {
height: 100%;
}
@media (max-width: 425px) {
.tab-dark {
font-size: 1.6rem;
}
}

View File

@ -0,0 +1,72 @@
.table-row {
display: grid;
grid-template-columns: 2fr 1fr 1fr;
align-items: center;
cursor: pointer;
transition: 0.3s all ease;
border-radius: 0.5rem;
padding: 2.4rem 0rem;
&:hover {
background: #1b3656;
}
div {
font-size: 1.8rem;
color: $base-white;
font-weight: 400;
}
}
.table-product-name {
text-align: left;
padding: 0 0 0 1.6rem;
}
.title-hide {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.table-product-price {
display: flex;
justify-content: center;
align-items: center;
}
.table-row-status {
display: flex;
align-items: center;
color: #6eeb83;
// gap: 0.8rem;
justify-content: center;
span {
display: inline-block;
font-size: 1.8rem;
width: fit-content;
}
.green {
color: #6eeb83;
}
.red {
color: #ff5e5b;
}
}
@media (max-width: 600px) {
.table-row {
gap: 1rem;
.table-row-status-title {
font-size: 1.4rem;
}
div {
font-size: 1.4rem;
}
}
}

View File

@ -0,0 +1,19 @@
.tarif-wrapper-top {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4rem;
margin-top: 2.4rem;
}
.tarif-table {
display: flex;
flex-direction: column;
gap: 2.4rem;
}
@media (max-width: 768px) {
.tarif-wrapper-top {
grid-template-columns: 1fr;
gap: 4rem;
}
}

View File

@ -0,0 +1,29 @@
.tarif-service-item {
display: flex;
padding: 2.4rem 0;
justify-content: space-between;
align-items: center;
gap: 4rem;
border-bottom: 1px solid $base-gray;
}
.tarif-service-text {
font-size: 1.8rem;
font-weight: 400;
max-width: 88.5rem;
color: $base-black;
}
.tarif-service-price {
font-size: 2.4rem;
color: $base-blue;
}
@media (max-width: 1024px) {
.tarif-service-item {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 2.4rem;
}
}

View File

@ -0,0 +1,74 @@
.ticker {
// margin-top: 2.4rem;
// padding: 1.6rem 0;
background: $base-blue;
color: $base-white;
font-size: 1.6rem;
z-index: 1100;
}
.ticker-wrapper {
width: 100%;
height: 100%;
padding: 1.6rem 0;
display: flex;
}
.ticker-block {
display: flex;
flex-direction: column;
gap: 0.8rem;
// width: fit-content;
max-width: 50rem;
padding: 0 1.6rem;
border-left: 1px solid $base-gray;
border-right: 1px solid $base-gray;
.green {
color: #6eeb83;
}
.red {
color: #ff5e5b;
}
}
.ticker-title {
font-size: 1.8rem;
font-weight: 400;
// max-width: 32rem;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.ticker-content {
display: flex;
align-items: center;
gap: 1.6rem;
}
.ticker-price {
font-size: 1.8rem;
}
.ticker-status {
display: flex;
align-items: center;
color: #6eeb83;
gap: 0.8rem;
span {
display: inline-block;
font-size: 1.8rem;
}
}
.ticker-arrow {
width: fit-content;
height: fit-content;
display: flex;
justify-content: center;
align-items: center;
}

View File

@ -0,0 +1,9 @@
// Variables
$base-black: #151515;
$base-white: #fff;
$base-gray: #868686;
$base-blue: #05172d;
$base-light-blue: #afbfcb;
$base-bright-blue: #4b8dff;
// Styles

View File

@ -0,0 +1,30 @@
.video-player {
background: $base-gray;
height: 41.4rem;
width: 100%;
overflow: hidden;
}
@media (max-width: 600px) {
.video-player {
height: 32rem;
}
}
@media (max-width: 500px) {
.video-player {
height: 24rem;
}
}
@media (max-width: 400px) {
.video-player {
height: 20rem;
}
}
@media (max-width: 350px) {
.video-player {
height: 16rem;
}
}

View File

@ -0,0 +1,31 @@
.videos-wrapper {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4rem;
width: 100%;
}
@media (max-width: 1440px) {
.videos-wrapper {
gap: 2.4rem;
}
}
@media (max-width: 1300px) {
.videos-wrapper {
gap: 0.8rem;
}
}
@media (max-width: 1300px) {
.videos-wrapper {
grid-template-columns: 73.5rem;
justify-content: center;
}
}
@media (max-width: 800px) {
.videos-wrapper {
grid-template-columns: 1fr;
}
}

View File

@ -0,0 +1,33 @@
// General
@import './variables';
@import './general';
@import './header';
@import './home';
@import './hero';
@import './ticker';
@import './sectionTitle';
@import './about';
@import './videoPlayer';
@import './news';
@import './newsPost';
@import './documents';
@import './documentLink';
@import './footer';
@import './lineChart';
@import './dataChart';
@import './chartTable';
@import './tableRow';
@import './subPageStyles';
@import './contactsCard';
@import './contacts';
@import './newsPage';
@import './newsPostPage';
@import './latestNew';
@import './tarif';
@import './tab';
@import './tarifService';
@import './multimedia';
@import './multimediaTab';
@import './gallery';
@import './galleryItem';
@import './videos';

View File

@ -0,0 +1,82 @@
// Modules
import { useState, useEffect } from 'react';
import { Api } from '../helpers/api';
import { v4 as uuidv4 } from 'uuid';
// Components
import TableRow from './TableRow';
const ChartTable = ({ activeRow, setActiveRow, tabIndex, lang }) => {
const [dataTable, setDataTable] = useState();
// Functions
const rowActive = (num) => {
setActiveRow(num);
};
useEffect(() => {
// Table data fetch
if (tabIndex) {
const TableApi = new Api(
`https://tmex.gov.tm:8765/api/categories/${tabIndex}/tradings`,
// `http://tmex.gov.tm:8765/api/categories/8/tradings`,
dataTable,
setDataTable,
).get();
}
}, [tabIndex]);
return (
<div className="table">
<div className="table-top">
<h4 className="table-title">
{lang === 'ru'
? 'Товарная позиция'
: lang === 'tm'
? 'Harydyň ady'
: lang === 'en'
? 'Product name'
: null}
</h4>
<h4 className="table-title">
{lang === 'ru'
? 'Изменение цены'
: lang === 'tm'
? 'Bahanyň üýtgeýşi'
: lang === 'en'
? 'Price change'
: null}
</h4>
<h4 className="table-title">
{lang === 'ru'
? 'Текущая цена'
: lang === 'tm'
? 'Häzirki baha'
: lang === 'en'
? 'Current price'
: null}
</h4>
</div>
<div className="table-bottom">
{dataTable
? dataTable.data.map((tableRow, index) => {
return index <= 2 ? (
<TableRow
key={uuidv4()}
title={tableRow.title}
titleHide={tableRow.title.length > 7 ? 'title-hide' : null}
priceChange={tableRow.price_change}
price={tableRow.price}
currency={tableRow.currency}
onClick={() => rowActive(index)}
active={activeRow === index ? 'active' : ''}
/>
) : null;
})
: null}
</div>
</div>
);
};
export default ChartTable;

View File

@ -0,0 +1,63 @@
import React from 'react';
// Icons
import phone from '../assets/icons/phone.svg';
import fax from '../assets/icons/fax.svg';
import mail from '../assets/icons/mail.svg';
const ContactsCard = ({
title,
firstPosition,
secondPosition,
firstPhone,
secondPhone,
firstFax,
firstMail,
}) => {
return (
<div className="contacts-card">
<h2 className="contacts-card-title">{title}</h2>
<div className="contacts-card-pos-wrapper">
{firstPosition && firstPhone ? (
<div className="contacts-card-pos">
<h3 className="contacts-card-pos-title">{firstPosition}</h3>
<div className="contacts-card-pos-contact">
<div className="contacts-card-pos-contact-icon">
<img src={phone} alt="phone" />
</div>
<h4 className="contacts-card-pos-contact-title">{firstPhone}</h4>
</div>
{firstFax ? (
<div className="contacts-card-pos-contact">
<div className="contacts-card-pos-contact-icon">
<img src={fax} alt="fax" />
</div>
<h4 className="contacts-card-pos-contact-title">{firstPhone}</h4>
</div>
) : null}
{firstMail ? (
<div className="contacts-card-pos-contact">
<div className="contacts-card-pos-contact-icon">
<img src={mail} alt="mail" />
</div>
<h4 className="contacts-card-pos-contact-title">{firstMail}</h4>
</div>
) : null}
</div>
) : null}
{secondPosition && secondPhone ? (
<div className="contacts-card-pos">
<h3 className="contacts-card-pos-title">{secondPosition}</h3>
<div className="contacts-card-pos-contact">
<div className="contacts-card-pos-contact-icon">
<img src={phone} alt="phone" />
</div>
<h4 className="contacts-card-pos-contact-title">{secondPhone}</h4>
</div>
</div>
) : null}
</div>
</div>
);
};
export default ContactsCard;

View File

@ -0,0 +1,75 @@
// Modules
import React from 'react';
import { useState, useEffect } from 'react';
import { Api } from '../helpers/api';
import { v4 as uuidv4 } from 'uuid';
// Components
import ChartTable from './ChartTable';
import LineChart from './LineChart';
const DataChart = ({ lang }) => {
// States
const [tabData, setTabData] = useState();
const [activeRow, setActiveRow] = useState(0);
const [activeTab, setActiveTab] = useState(0);
const [tabIndex, setTabIndex] = useState();
useEffect(() => {
// Table data fetch
const TabData = new Api('https://tmex.gov.tm:8765/api/categories', tabData, setTabData).get({
'X-Localization': lang,
});
}, [lang]);
useEffect(() => {
tabData ? setTabIndex(tabData.data[0].id) : null;
}, [tabData]);
useEffect(() => {
setActiveRow(0);
}, [activeTab]);
// Functions
const tabDataFetch = (id, index) => {
setTabIndex(id);
setActiveTab(index);
};
return (
<section className="chart">
<div className="container">
<div className="chart-wrapper">
<div className="chart-tabs">
{tabData
? tabData.data.map((tab, index) => {
return (
<div
key={uuidv4()}
className={`${tabIndex === tab.id ? 'active' : ''} tab`}
onClick={() => {
tabDataFetch(tab.id, index);
}}>
<span>{tab.title}</span>
</div>
);
})
: null}
</div>
<div className="chart-data">
<ChartTable
activeRow={activeRow}
setActiveRow={setActiveRow}
tabIndex={tabIndex}
lang={lang}
/>
<div className="line-chart-wrapper">
<LineChart activeRow={activeRow} tabIndex={tabIndex} />
</div>
</div>
</div>
</div>
</section>
);
};
export default DataChart;

View File

@ -0,0 +1,17 @@
// Modules
import React from 'react';
// Icons
import { ReactComponent as File } from '../assets/icons/file.svg';
const DocumentLink = ({ title, link }) => {
return (
<a href={link} download className="document-link">
<div className="document-img">
<File />
</div>
<h3 className="document-title">{title}</h3>
</a>
);
};
export default DocumentLink;

View File

@ -0,0 +1,40 @@
import React from 'react';
import { useState, useEffect } from 'react';
import { v4 as uuidv4 } from 'uuid';
import DocumentLink from '../components/DocumentLink';
import { Api } from '../helpers/api';
const DocumentSection = ({ lang, id, title }) => {
const [docsFileData, setDocsFileData] = useState();
useEffect(() => {
// Documents fetch
const DocumentsFileApi = new Api(
`https://tmex.gov.tm:8765/api/documents?category=${id}`,
docsFileData,
setDocsFileData,
).get({ 'X-Localization': lang });
// Scroll to top
window.scrollTo(0, 0);
}, [lang]);
return (
<div className="documents-wrapper">
<h2 className="sub-page-file-title">{title}</h2>
<div className="documents-links-wrapper">
{
docsFileData
? docsFileData.data.map((doc) => {
return doc.page === 'Нормативная база' && doc.title != '-' ? (
<DocumentLink key={uuidv4()} title={doc.title} link={doc.file} />
) : null;
})
: '' //loader
}
</div>
</div>
);
};
export default DocumentSection;

220
src/components/Footer.jsx Normal file
View File

@ -0,0 +1,220 @@
// Modules
import { Link } from 'react-router-dom';
// Components
import SectionTitle from './SectionTitle';
const Footer = ({ lang }) => {
return (
<footer className="footer">
<div className="footer-top">
<div className="container">
<div className="footer-top-wrapper">
<SectionTitle
title={`
${
lang === 'ru'
? 'Контакты'
: lang === 'tm'
? 'Habarlaşmak üçin'
: lang === 'en'
? 'Contacts'
: null
}`}
/>
<div className="footer-top-content">
<div className="footer-top-item">
<h3 className="footer-top-item-title">
{lang === 'ru'
? 'Телефон:'
: lang === 'tm'
? 'Telefon belgisi'
: lang === 'en'
? 'Phone'
: null}
</h3>
<h4 className="footer-top-item-text">+993 12 44-60-15</h4>
</div>
<div className="footer-top-item">
<h3 className="footer-top-item-title">
{lang === 'ru'
? 'Время работы:'
: lang === 'tm'
? 'Iş wagty'
: lang === 'en'
? 'Working time'
: null}
</h3>
<h4 className="footer-top-item-text">
{lang === 'ru'
? 'Понедельник - пятница: 9:00 - 18:00'
: lang === 'tm'
? 'Duşenbe - anna: 9:00 - 18:00'
: lang === 'en'
? 'Monday - friday: 9:00 - 18:00'
: null}
</h4>
</div>
<div className="footer-top-item">
<h3 className="footer-top-item-title">Email:</h3>
<Link to={'/'} className="footer-top-item-text">
info@exchange.gov.tm
</Link>
<Link to={'/'} className="footer-top-item-text">
broker@exchange.gov.tm
</Link>
</div>
<div className="footer-top-item">
<h3 className="footer-top-item-title">
{lang === 'ru'
? 'Приемные дни:'
: lang === 'tm'
? 'Kabul ediş günleri'
: lang === 'en'
? 'Reception days'
: null}
</h3>
<h4 className="footer-top-item-text">
{lang === 'ru'
? 'Понедельник - четверг: 9:00 - 17:00'
: lang === 'tm'
? 'Duşenbe - penşenbe: 9:00 - 17:00'
: lang === 'en'
? 'Monday - thursday: 9:00 - 17:00'
: null}
</h4>
<h4 className="footer-top-item-text">
{lang === 'ru'
? 'Пятница: 9:00 - 13:00'
: lang === 'tm'
? 'Anna: 9:00 - 17:00'
: lang === 'en'
? 'Friday: 9:00 - 17:00'
: null}
</h4>
</div>
<div className="footer-top-item">
<h3 className="footer-top-item-title">
{lang === 'ru'
? 'Адрес:'
: lang === 'tm'
? 'Salgy'
: lang === 'en'
? 'Adress'
: null}
</h3>
<h4 className="footer-top-item-text">
{lang === 'ru'
? '744000, Туркменистан г. Ашхабат, Арчабиль шаелы 52'
: lang === 'tm'
? '744000, Türkmenistan ş. Aşgabat, Arçabil şaýoly 52'
: lang === 'en'
? '744000, Turkmenistan c. Ashgabat, Archabil shayoly 52'
: null}
</h4>
</div>
</div>
</div>
</div>
</div>
<div className="footer-bottom">
<div className="container">
<div className="footer-bottom-wrapper">
<ul className="footer-nav-list">
<li className="footer-nav-list-item">
<Link to={'/gtsbt'} className="footer-nav-list-link">
{lang === 'ru'
? 'ГТСБТ'
: lang === 'tm'
? 'TDHÇMB'
: lang === 'en'
? 'SCRMET'
: null}
</Link>
</li>
<li className="footer-nav-list-item">
<Link to={'/norm'} className="footer-nav-list-link">
{lang === 'ru'
? 'Нормативная база'
: lang === 'tm'
? 'Kanunçylyk'
: lang === 'en'
? 'Normative base'
: null}
</Link>
</li>
<li className="footer-nav-list-item">
<Link to={'/trade'} className="footer-nav-list-link">
{lang === 'ru'
? 'Биржевые торги'
: lang === 'tm'
? 'Birža söwdalary'
: lang === 'en'
? 'Exchange auctions'
: null}
</Link>
</li>
<li className="footer-nav-list-item">
<Link to={'/multimedia'} className="footer-nav-list-link">
{lang === 'ru'
? 'Мультимедиа'
: lang === 'tm'
? 'Multimediýa'
: lang === 'en'
? 'Multimedia'
: null}
</Link>
</li>
<li className="footer-nav-list-item">
<Link to={'/fin'} className="footer-nav-list-link">
{lang === 'ru'
? 'Финансовый мониторинг'
: lang === 'tm'
? 'Maliýe gözegçiligi'
: lang === 'en'
? 'Financial monitoring'
: null}
</Link>
</li>
<li className="footer-nav-list-item">
<Link to={'/news'} className="footer-nav-list-link">
{lang === 'ru'
? 'Новости'
: lang === 'tm'
? 'Habarlar'
: lang === 'en'
? 'News'
: null}
</Link>
</li>
<li className="footer-nav-list-item">
<Link to={'/register'} className="footer-nav-list-link">
{lang === 'ru'
? 'Регистрация договоров'
: lang === 'tm'
? 'Şertnamalary hasaba almak'
: lang === 'en'
? 'Contracts registration'
: null}
</Link>
</li>
<li className="footer-nav-list-item">
<Link to={'/contacts'} className="footer-nav-list-link">
{lang === 'ru'
? 'Контакты'
: lang === 'tm'
? 'Habarlaşmak üçin'
: lang === 'en'
? 'Contacts'
: null}
</Link>
</li>
</ul>
</div>
</div>
</div>
</footer>
);
};
export default Footer;

View File

@ -0,0 +1,33 @@
import React from 'react';
import { useState, useEffect } from 'react';
import { Api } from '../helpers/api';
// Components
import GalleryItem from '../components/GalleryItem';
const Gallery = ({ imageTabIndex }) => {
const [galleryData, setGalleryData] = useState();
useEffect(() => {
if (imageTabIndex) {
const GalleryApi = new Api(
`https://tmex.gov.tm:8765/api/medias/${imageTabIndex}`,
galleryData,
setGalleryData,
).get();
}
}, [imageTabIndex]);
return (
<div className="gallery-wrapper">
<div className="gallery">
{galleryData
? galleryData.data.map((image) => {
return <GalleryItem key={image.id} img={image.media} />;
})
: null}
</div>
</div>
);
};
export default Gallery;

View File

@ -0,0 +1,11 @@
import React from 'react';
const GalleryItem = ({ img }) => {
return (
<div className="gallery-item">
<img src={img} alt="image" />
</div>
);
};
export default GalleryItem;

289
src/components/Header.jsx Normal file
View File

@ -0,0 +1,289 @@
// Modules
import { Link } from 'react-router-dom';
// Icons
import logo from '../assets/icons/logo.svg';
import burger from '../assets/icons/burger.svg';
import { useState } from 'react';
const Header = ({ lang, setLang }) => {
// States
const [navActive, setNavActive] = useState(false);
// Functions
const toggleNav = () => {
setNavActive(!navActive);
};
return (
<header className="header">
{/* Nav top */}
<nav className="nav-top">
<div className="container">
<div className="nav-top-wrapper">
<Link to={'/'} className="logo">
<img src={logo} alt="logo" />
</Link>
{lang === 'ru' ? (
<ul className="nav-top-list">
<li className="nav-top-list-item">
<Link to={'/gtsbt'}>ГТСБТ</Link>
</li>
<li className="nav-top-list-item">
<a href={`https://tmex.gov.tm/${lang}`} target="_blank">
Котировки
</a>
</li>
<li className="nav-top-list-item">
<Link to={'/norm'}>Нормативная база</Link>
</li>
<li className="nav-top-list-item">
<Link to={'/news'}>Новости</Link>
</li>
<li className="nav-top-list-item">
<Link to={'/multimedia'}>Мультимедиа</Link>
</li>
<li className="nav-top-list-item">
<Link to={'/contacts'}>Контакты</Link>
</li>
</ul>
) : null}
{lang === 'tm' ? (
<ul className="nav-top-list">
<li className="nav-top-list-item">
<Link to={'/gtsbt'}>TDHÇMB</Link>
</li>
<li className="nav-top-list-item">
<a href={`https://tmex.gov.tm/${lang}`} target="_blank">
Kotirowkalar
</a>
</li>
<li className="nav-top-list-item">
<Link to={'/norm'}>Kanunçylyk</Link>
</li>
<li className="nav-top-list-item">
<Link to={'/news'}>Habarlar</Link>
</li>
<li className="nav-top-list-item">
<Link to={'/multimedia'}>Multimediýa</Link>
</li>
<li className="nav-top-list-item">
<Link to={'/contacts'}>Habarlaşmak üçin</Link>
</li>
</ul>
) : null}
{lang === 'en' ? (
<ul className="nav-top-list">
<li className="nav-top-list-item">
<Link to={'/gtsbt'}>SCRMET</Link>
</li>
<li className="nav-top-list-item">
<a href={`https://tmex.gov.tm/${lang}`} target="_blank">
Quotations
</a>
</li>
<li className="nav-top-list-item">
<Link to={'/norm'}>Normative base</Link>
</li>
<li className="nav-top-list-item">
<Link to={'/news'}>News</Link>
</li>
<li className="nav-top-list-item">
<Link to={'/multimedia'}>Multimedia</Link>
</li>
<li className="nav-top-list-item">
<Link to={'/contacts'}>Contacts</Link>
</li>
</ul>
) : null}
{lang === 'ru' ? (
<div className="sign-in">
<a
href="https://shahsyotag.exchange.gov.tm/login"
target="_blank"
className="sign-in-item">
Личный кабинет
</a>
</div>
) : null}
{lang === 'tm' ? (
<div className="sign-in">
<a
href="https://shahsyotag.exchange.gov.tm/login"
target="_blank"
className="sign-in-item">
Şahsy otagy
</a>
</div>
) : null}
{lang === 'en' ? (
<div className="sign-in">
<a
href="https://shahsyotag.exchange.gov.tm/login"
target="_blank"
className="sign-in-item">
My account
</a>
</div>
) : null}
</div>
</div>
</nav>
{/* Nav top ================== */}
{/* Nav bottom */}
<nav className="nav-bottom">
<div className="container">
<div className="nav-bottom-wrapper">
{lang === 'ru' ? (
<ul className="nav-bottom-list">
<li className="nav-bottom-list-item">
<Link to={'/trade'}>Биржевые торги</Link>
</li>
<li className="nav-bottom-list-item">
<Link to={'/fin'}>Финансовый мониторинг</Link>
</li>
<li className="nav-bottom-list-item">
<Link to={'/register'}>Регистрация договоров</Link>
</li>
<li className="nav-bottom-list-item">
<Link to={'/tarif'}>Тарифы и сборы</Link>
</li>
</ul>
) : null}
{lang === 'tm' ? (
<ul className="nav-bottom-list">
<li className="nav-bottom-list-item">
<Link to={'/trade'}>Birža söwdalary</Link>
</li>
<li className="nav-bottom-list-item">
<Link to={'/fin'}>Maliýe gözegçiligi</Link>
</li>
<li className="nav-bottom-list-item">
<Link to={'/register'}>Şertnamalary hasaba almak</Link>
</li>
<li className="nav-bottom-list-item">
<Link to={'/tarif'}>Nyrhlar we ýygymlar</Link>
</li>
</ul>
) : null}
{lang === 'en' ? (
<ul className="nav-bottom-list">
<li className="nav-bottom-list-item">
<Link to={'/trade'}>Exchange auctions</Link>
</li>
<li className="nav-bottom-list-item">
<Link to={'/fin'}>Financial monitoring</Link>
</li>
<li className="nav-bottom-list-item">
<Link to={'/register'}>Contracts registration</Link>
</li>
<li className="nav-bottom-list-item">
<Link to={'/tarif'}>Tariffs and fees</Link>
</li>
</ul>
) : null}
<div className="nav-lang-wrapper">
<button
className={`nav-lang-item ${lang === 'en' ? 'lang-active' : ''}`}
onClick={() => setLang('en')}>
EN
</button>
<button
className={`nav-lang-item ${lang === 'tm' ? 'lang-active' : ''}`}
onClick={() => setLang('tm')}>
TK
</button>
<button
className={`nav-lang-item ${lang === 'ru' ? 'lang-active' : ''}`}
onClick={() => setLang('ru')}>
RU
</button>
</div>
</div>
</div>
</nav>
{/* Nav bottom ================== */}
{/* Nav mobile */}
<div className="mobile-nav">
<div className="container">
<div className="mobile-nav-wrapper">
<Link to={'/'} className="logo">
<img src={logo} alt="logo" />
</Link>
<div className="burger" onClick={toggleNav}>
<img src={burger} />
</div>
</div>
</div>
</div>
<nav className={`mobile-nav-content ${navActive ? 'active' : null}`}>
<div className="mobile-nav-content-wrapper">
<ul className="mobile-nav-list">
<li className="mobile-nav-list-item" onClick={toggleNav}>
<Link to={'/gtsbt'}>ГТСБТ</Link>
</li>
<li className="mobile-nav-list-item">
<a href={`https://tmex.gov.tm/${lang}`} target="_blank">
Катировки
</a>
</li>
<li className="mobile-nav-list-item" onClick={toggleNav}>
<Link to={'/norm'}>Нормативная база</Link>
</li>
<li className="mobile-nav-list-item" onClick={toggleNav}>
<Link to={'/'}>Новости</Link>
</li>
<li className="mobile-nav-list-item" onClick={toggleNav}>
<Link to={'/'}>Мультимедия</Link>
</li>
<li className="mobile-nav-list-item" onClick={toggleNav}>
<Link to={'/'}>Контакты</Link>
</li>
<li className="mobile-nav-list-item" onClick={toggleNav}>
<Link to={'/trade'}>Биржевые торги</Link>
</li>
<li className="mobile-nav-list-item" onClick={toggleNav}>
<Link to={'/fin'}>Финансовый мониторинг</Link>
</li>
<li className="mobile-nav-list-item" onClick={toggleNav}>
<Link to={'/register'}>Регистрация договоров</Link>
</li>
<li className="mobile-nav-list-item" onClick={toggleNav}>
<Link to={'/trade'}>Тарифы и сборы</Link>
</li>
</ul>
<div className="nav-lang-wrapper-mobile">
<button
className={`nav-lang-item ${lang === 'en' ? 'lang-active' : ''}`}
onClick={() => setLang('en')}>
EN
</button>
<button
className={`nav-lang-item ${lang === 'tm' ? 'lang-active' : ''}`}
onClick={() => setLang('tm')}>
TK
</button>
<button
className={`nav-lang-item ${lang === 'ru' ? 'lang-active' : ''}`}
onClick={() => setLang('ru')}>
RU
</button>
</div>
</div>
</nav>
{/* Nav mobile ================== */}
</header>
);
};
export default Header;

36
src/components/Hero.jsx Normal file
View File

@ -0,0 +1,36 @@
// Modules
import React from 'react';
import { Link } from 'react-router-dom';
const Hero = ({ lang }) => {
return (
<section className="hero">
<div className="container">
<div className="hero-wrapper">
<div className="buttons-wrapper">
<a href={`https://tmex.gov.tm/${lang}`} target="_blank" className="hero-button">
{lang === 'ru'
? 'Перейти на торговую площадку'
: lang === 'tm'
? 'Söwda meýdança geçmek'
: lang === 'en'
? 'Go to the marketplace'
: null}
</a>
<a href="https://shahsyotag.exchange.gov.tm/login" className="hero-button">
{lang === 'ru'
? 'Подать документы онлайн'
: lang === 'tm'
? 'Resminamalary onlaýn tabşyrmak'
: lang === 'en'
? 'Apply documents online'
: null}
</a>
</div>
</div>
</div>
</section>
);
};
export default Hero;

View File

@ -0,0 +1,17 @@
import React from "react";
import { Link } from "react-router-dom";
const LatestNew = ({ title, date, setPostId, id }) => {
return (
<Link
to={`/post/${id}`}
className="latest-new"
onClick={() => setPostId(id)}
>
<h3 className="latest-new-date">{date}</h3>
<h2 className="latest-new-title">{title}</h2>
</Link>
);
};
export default LatestNew;

View File

@ -0,0 +1,98 @@
// Modules
import { Line } from 'react-chartjs-2';
import {
Chart as ChartJS,
LineElement,
CategoryScale,
LinearScale,
PointElement,
Tooltip,
} from 'chart.js';
import { Api } from '../helpers/api';
import { useState, useEffect } from 'react';
import { parseDate } from '../helpers/functions';
ChartJS.register(LineElement, PointElement, LinearScale, Tooltip, CategoryScale);
const LineChart = ({ activeRow, tabIndex }) => {
const [dataLineChart, setDataLineChart] = useState();
useEffect(() => {
// Table data fetch
if (tabIndex) {
const LineChartData = new Api(
`https://tmex.gov.tm:8765/api/categories/${tabIndex}/tradings`,
dataLineChart,
setDataLineChart,
).get();
}
}, [tabIndex]);
let delayed;
const data = {
labels: dataLineChart
? dataLineChart.data[activeRow].all_prices.map((price) => parseDate(price.date)).reverse()
: [''],
datasets: [
{
data: dataLineChart
? dataLineChart.data[activeRow].all_prices.map((price, index) => {
if (index <= 9) {
return price.price;
} else {
return '';
}
})
: [''],
borderColor: '#4b8dff',
pointBorderWidth: 2,
pointBackgroundColor: '#4b8dff',
tension: 0.1,
animation: {
onComplete: () => {
delayed = true;
},
delay: (context) => {
let delay = 0;
if (context.type === 'data' && context.mode === 'default' && !delayed) {
delay = context.dataIndex * 100 + context.datasetIndex * 100;
}
return delay;
},
},
},
],
};
const options = {
maintainAspectRatio: false,
radius: 5,
hitRadius: 30,
hoverRadius: 7,
scales: {
x: {
grid: {
display: false,
},
},
y: {
ticks: {
callback: (value) => value,
},
grid: {
borderDash: [10],
},
},
},
};
return (
<div className="line-chart">
<Line data={data} options={options} />
</div>
);
};
export default LineChart;

View File

@ -0,0 +1,11 @@
import React from 'react';
const MultimediaTab = ({ title, onClick, active }) => {
return (
<h2 className={`multimedia-tab ${active ? 'm-tab-active' : null}`} onClick={onClick}>
{title}
</h2>
);
};
export default MultimediaTab;

View File

@ -0,0 +1,32 @@
// Icons
import { Link } from 'react-router-dom';
import arrow from '../assets/icons/arrow.svg';
const NewsPost = ({ title, shortDes, date, image, setPostId, id, lang }) => {
return (
<div className="news-post">
<div className="news-post-img">
<img src={image} alt="news-image" />
</div>
<div className="news-post-content">
<h3 className="news-post-date">{date}</h3>
<h2 className="news-post-title">{title}</h2>
<p className="news-post-text">{shortDes}</p>
</div>
<Link className="news-post-link" to={`/post/${id}`} onClick={() => setPostId(id)}>
<img src={arrow} alt="arrow" />
<h3>
{lang === 'ru'
? 'Читать полностью'
: lang === 'tm'
? 'Doly okamak'
: lang === 'en'
? 'Read all'
: null}
</h3>
</Link>
</div>
);
};
export default NewsPost;

View File

@ -0,0 +1,7 @@
import React from 'react';
const SectionTitle = ({ title }) => {
return <h2 className="section-title">{title}</h2>;
};
export default SectionTitle;

11
src/components/Tab.jsx Normal file
View File

@ -0,0 +1,11 @@
import React from 'react';
const Tab = ({ text, active, onClick }) => {
return (
<div className={`tab-dark ${active ? 'active-tab' : null}`} onClick={onClick}>
<span>{text}</span>
</div>
);
};
export default Tab;

View File

@ -0,0 +1,49 @@
// Modules
// Icons
import arrowUp from '../assets/icons/arrow-up.svg';
import arrowDown from '../assets/icons/arrow-down.svg';
import { useEffect, useState } from 'react';
const TableRow = ({ active, onClick, title, priceChange, price, currency, titleHide }) => {
const priceParser = (price) => {
const priceArr = Array.from(price);
priceArr.pop();
let parsedPrice = '';
priceArr.forEach((str) => {
parsedPrice = parsedPrice + str;
});
return parseFloat(parsedPrice);
};
const [parsedPriceChange, setParsedPriceChange] = useState();
useEffect(() => {
setParsedPriceChange(priceParser(priceChange));
}, [priceChange]);
return (
<div className={`table-row ${active}`} onClick={() => onClick()}>
<div className={`table-product-name ${titleHide}`}>{title}</div>
<div className="table-row-status">
<div className="table-row-arrow">
<img src={parsedPriceChange > 0 ? arrowUp : parsedPriceChange < 0 ? arrowDown : ''} />
</div>
<span
className={
parsedPriceChange > 0
? 'table-row-status-title green'
: parsedPriceChange < 0
? 'table-row-status-title red'
: 'table-row-status-title'
}>
{priceChange}
</span>
</div>
<div className="table-product-price">
{price} {currency}
</div>
</div>
);
};
export default TableRow;

View File

@ -0,0 +1,12 @@
import React from 'react';
const TarifService = ({ title, price }) => {
return (
<div className="tarif-service-item">
<h2 className="tarif-service-text">{title}</h2>
<h2 className="tarif-service-price">{price} </h2>
</div>
);
};
export default TarifService;

46
src/components/Ticker.jsx Normal file
View File

@ -0,0 +1,46 @@
// Modules
import Marquee from 'react-fast-marquee';
import { useEffect, useState } from 'react';
import { Api } from '../helpers/api';
// Components
import TickerBlock from './TickerBlock';
const tickerSpeed = 30;
const Ticker = () => {
// States
const [tickerData, setTickerData] = useState();
useEffect(() => {
// Ticker fetch
const DocumentsApi = new Api(
'https://tmex.gov.tm:8765/api/tradings',
tickerData,
setTickerData,
);
DocumentsApi.get();
}, []);
return (
<Marquee className="ticker" gradient={false} speed={tickerSpeed}>
<div className="ticker-wrapper">
{tickerData
? tickerData.data.map((item) => {
return (
<TickerBlock
key={item.id}
title={item.title}
change={item.price_change}
price={item.price}
oldPrice={item.old_price}
currency={item.currency}
/>
);
})
: ''}
</div>
</Marquee>
);
};
export default Ticker;

View File

@ -0,0 +1,28 @@
// Modules
import React from 'react';
// Icons
import arrowUp from '../assets/icons/arrow-up.svg';
import arrowDown from '../assets/icons/arrow-down.svg';
const TickerBlock = ({ title, change, price, oldPrice, currency }) => {
return (
<div className="ticker-block">
<h3 className="ticker-title">{title}</h3>
<div className="ticker-content">
<div className="ticker-price">
{price} {currency}
</div>
<div className="ticker-status">
<div className="ticker-arrow">
<img src={price >= oldPrice ? arrowUp : arrowDown} />
</div>
<span className={`ticker-status-title ${price >= oldPrice ? 'green' : 'red'}`}>
{change}
</span>
</div>
</div>
</div>
);
};
export default TickerBlock;

View File

@ -0,0 +1,25 @@
// Modules
import ReactPlayer from 'react-player';
// import { hosting } from '../../links';
// Components
// import PlayIcon from './PlayIcon';
const VideoPlayer = ({ videoUrl }) => {
return (
<div className="video-player">
<ReactPlayer
// url={hosting + videoUrl}
url={videoUrl}
controls
// playIcon={videoUrl.length > 0 ? <PlayIcon /> : undefined}
volume={1}
light={true}
height={'100%'}
width={'100%'}
/>
</div>
);
};
export default VideoPlayer;

35
src/components/Videos.jsx Normal file
View File

@ -0,0 +1,35 @@
import React from 'react';
import { useState, useEffect } from 'react';
import { Api } from '../helpers/api';
// Components
import VideoPlayer from '../components/VideoPlayer';
const Videos = ({ videoTabIndex }) => {
const [multimediaVideosData, setMultimediaVideosData] = useState();
useEffect(() => {
if (videoTabIndex) {
const MultimediaVideosData = new Api(
`https://tmex.gov.tm:8765/api/medias/${videoTabIndex}`,
multimediaVideosData,
setMultimediaVideosData,
).get();
}
}, [videoTabIndex]);
return (
<div className="videos-wrapper">
{multimediaVideosData
? multimediaVideosData.data.map((multimediaVideo) => {
return <VideoPlayer key={multimediaVideo.id} videoUrl={multimediaVideo.media} />;
})
: null}
{/* <VideoPlayer videoUrl={'https://www.youtube.com/'} />
<VideoPlayer videoUrl={'https://www.youtube.com/'} />
<VideoPlayer videoUrl={'https://www.youtube.com/'} />
<VideoPlayer videoUrl={'https://www.youtube.com/'} /> */}
</div>
);
};
export default Videos;

79
src/helpers/api.js Normal file
View File

@ -0,0 +1,79 @@
// Modules
import axios from 'axios';
import React, { SetStateAction } from 'react';
export class Api {
destination;
initialState;
setState;
setLoader;
middleware = (data) => data;
/**
*
* @param {string} destionation
* @param {any} initialState
* @param {React.Dispatch<SetStateAction<any>>} setState
* @param {React.Dispatch<SetStateAction<any>> | null} setLoader
* @param {() => any} middleware
*/
constructor(destionation, initialState, setState, setLoader, middleware) {
this.destination = destionation;
this.initialState = initialState;
this.setState = setState;
this.setLoader = setLoader;
this.middleware = middleware;
}
/**
* @param {Object} headers
* @param {boolean} load
*/
get(headers, load = false) {
try {
return axios
.get(this.destination, headers ? { headers: headers } : null)
.then((res) => {
if (load) {
this.setLoader(true);
}
this.setState(res.data);
})
.finally(() => {
if (load) {
this.setLoader(false);
}
});
} catch (error) {
throw new Error('Bad parameters', error);
}
}
/**
* @param {FormData | Object} data
* @param {boolean} require
* @param {boolean} load
*/
post(data, require = false, load = false) {
try {
return axios
.post(this.destination, data)
.then((res) => {
if (load) {
this.setLoader(true);
}
if (require) {
this.setState(res.data);
}
})
.finally(() => {
if (load) {
this.setLoader(false);
}
});
} catch (error) {
throw new Error('Bad parameters', error);
}
}
}

10
src/helpers/functions.js Normal file
View File

@ -0,0 +1,10 @@
// Functions
// reverse date
export const dateReverse = (date) => {
return date.split("-").reverse().join(".");
};
export const parseDate = (date) => {
return date.split(" ")[0].split("-").reverse().join(".");
};

View File

@ -0,0 +1,10 @@
export class LanguageManager {
getLang() {
return localStorage.getItem("lastLanguage")
? localStorage.getItem("lastLanguage")
: "ru";
}
saveLang(lang) {
localStorage.setItem("lastLanguage", lang);
}
}

16
src/main.jsx Normal file
View File

@ -0,0 +1,16 @@
import { StrictMode } from 'react';
import { createRoot } from 'react-dom/client';
import { BrowserRouter } from 'react-router-dom';
import App from './App';
const rootElement = document.getElementById('root');
const root = createRoot(rootElement);
root.render(
<StrictMode>
<BrowserRouter>
<App />
</BrowserRouter>
</StrictMode>,
);

55
src/pages/Contacts.jsx Normal file
View File

@ -0,0 +1,55 @@
// Modules
import { useState, useEffect } from 'react';
import { Api } from '../helpers/api';
// Components
import SectionTitle from '../components/SectionTitle';
import ContactsCard from '../components/ContactsCard';
const Contacts = ({ lang }) => {
const [contactsData, setContactsData] = useState();
useEffect(() => {
const ContactsApi = new Api(
'https://tmex.gov.tm:8765/api/contacts',
contactsData,
setContactsData,
).get({ 'X-Localization': lang });
// Scroll to top
window.scrollTo(0, 0);
}, [lang]);
return (
<main>
<div className="container">
<div className="sub-page-wrapper sub-page-full">
<SectionTitle title="Контакты" />
<div className="contacts-wrapper">
{contactsData
? contactsData.data.map((contactCard) => {
return (
<ContactsCard
key={contactCard.id}
title={contactCard.name}
firstPosition={contactCard.contacts[0].title}
firstPhone={contactCard.contacts[0].phone}
firstFax={contactCard.contacts[0].fax}
firstMail={contactCard.contacts[0].mail}
secondPosition={
contactCard.contacts[1]?.title ? contactCard.contacts[1]?.title : null
}
secondPhone={
contactCard.contacts[1]?.phone ? contactCard.contacts[1]?.phone : null
}
/>
);
})
: null}
</div>
</div>
</div>
</main>
);
};
export default Contacts;

166
src/pages/Finance.jsx Normal file
View File

@ -0,0 +1,166 @@
// Modules
import { useState, useEffect } from 'react';
import { Api } from '../helpers/api';
// Conmponents
import SectionTitle from '../components/SectionTitle';
import DocumentLink from '../components/DocumentLink';
const Finance = ({ lang }) => {
const [docsData, setDocsData] = useState();
useEffect(() => {
// Documents fetch
const DocumentsApi = new Api(
'https://tmex.gov.tm:8765/api/documents',
docsData,
setDocsData,
).get({ 'X-Localization': lang });
// Scroll to top
window.scrollTo(0, 0);
}, [lang]);
return (
<main>
<div className="container">
<div className="sub-page-wrapper">
{lang === 'ru' ? (
<>
<SectionTitle title="Финансовый мониторинг" />
<div className="sub-page-content-wrapper">
<div className="sub-page-text-wrapper">
<p>
В целях организации противодействия легализации доходов, полученных от
преступной деятельности, и финансированию терроризма, на бирже установлены
Правила, которые определяют основные цели и задачи, требования внутреннего
контроля. Также биржей назначается лицо, ответственное за соблюдение этих
правил.
</p>
<p>
Сотрудник комиссии, на основании полученной информации от клиента, тщательно
проверяет ее с учетом видов деятельности и операций клиента, оценивает и
присваивает соответствующий уровень риска, а также вносит ее в АБС.
</p>
</div>
<div className="sub-page-title-text">
<h2 className="sub-page-title">Регистрация в отделе фин. мониторинга</h2>
<div className="sub-page-text-wrapper">
<p>
Подать документы на легализацию юридического лица или предпринимателя можно
онлайн. Личный кабинет пользователя позволяет внести данные и загрузить
документы, скачать бланки и образцы заявлений, вести общение с
администраторами биржи, дополнять пакет документов, если будет такая
необходимость. Фактически, вся работа с биржей становится автоматизированной с
помощью Интернета.
</p>
<p>Чтобы воспользоваться сервисом пройдите регистрацию в Личном кабинете.</p>
</div>
</div>
</div>
</>
) : null}
{lang === 'tm' ? (
<>
<SectionTitle title="Maliýe gözegçiligi" />
<div className="sub-page-content-wrapper">
<div className="sub-page-text-wrapper">
<p>
Jenaýatçylykdan alnan girdejileriň kanunlaşdyrylmagyna we terrorçylygy
maliýeleşdirmäge garşy çäreleri guramak üçin birža esasy maksatlary we
wezipeleri, içerki gözegçilik talaplaryny kesgitleýän düzgünlerini döretdi.
Şeýle hem, birža bu düzgünleriň berjaý edilmegi üçin jogapkär adamy belleýär.
</p>
<p>
Müşderiden alnan maglumatlara esaslanyp, komissiýanyň işgäri müşderiniň
işleriniň we amallarynyň görnüşlerini göz öňünde tutup, ony üns bilen barlaýar,
degişli töwekgelçilik derejesini bahalandyrýar we belleýär, şeýle hem ABU-yna
girizýär.
</p>
</div>
<div className="sub-page-title-text">
<h2 className="sub-page-title">Maliýe gözegçiligi bölüminde hasaba alyş </h2>
<div className="sub-page-text-wrapper">
<p>
Hukuk guramasynyň ýa-da telekeçiniň kanunlaşdyrylmagy üçin resminamalary
onlaýn görnüşinde hasaba alyp bolar. Ulanyjynyň şahsy otagy maglumatlary
girizmäge we resminamalary ýüklemäge, anketalary we nusgalary göçürip almaga,
alyş-çalyş dolandyryjylary bilen habarlaşmaga, zerur bolsa resminamalar
bukjasyny doldurmaga mümkinçilik berýär. Umuman, birža bilen baglanyşykly ähli
işler internetiň kömegi bilen doly awtomatlaşdyrylýar.
</p>
<p>Hyzmaty ulanmak üçin Şahsy otagyňyzda hasaba alynmagyňyz hökmanydyr.</p>
</div>
</div>
</div>
</>
) : null}
{lang === 'en' ? (
<>
<SectionTitle title="Financial monitoring" />
<div className="sub-page-content-wrapper">
<div className="sub-page-text-wrapper">
<p>
In order to organize counteraction to the legalization of proceeds from criminal
activity and the financing of terrorism, the exchange has established Rules that
define the main goals and objectives, internal control requirements. The
exchange also appoints a person responsible for compliance with these rules.
</p>
<p>
An employee of the commission, based on the information received from the
client, carefully checks it taking into account the types of activities and
operations of the client, evaluates and assigns the appropriate level of risk,
and also enters it into the AES.
</p>
</div>
<div className="sub-page-title-text">
<h2 className="sub-page-title">
Registration in the financial monitoring department
</h2>
<div className="sub-page-text-wrapper">
<p>
You can submit documents for the legalization of a legal entity or
entrepreneur online. The user's personal account allows you to enter data and
upload documents, download forms and application samples, communicate with
exchange administrators, supplement the package of documents if necessary. In
fact, all work with the exchange becomes automated using the Internet.
</p>
<p>To use the service, register in your Personal Account.</p>
</div>
</div>
</div>
</>
) : null}
<div className="sub-page-title-text">
<h2 className="sub-page-title">
{lang === 'ru'
? 'Документы для скачивания'
: lang === 'tm'
? 'Göçürip almak üçin resminamalar'
: lang === 'en'
? 'Documents for download'
: null}
</h2>
<div className="documents-wrapper">
<div className="documents-links-wrapper">
{
docsData
? docsData.data.map((doc) => {
return doc.page === 'Финансовый мониторинг' && doc.title != '-' ? (
<DocumentLink key={doc.id} title={doc.title} link={doc.file} />
) : null;
})
: '' //loader
}
</div>
</div>
</div>
</div>
</div>
</main>
);
};
export default Finance;

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