This commit is contained in:
Pax1601 2024-12-10 20:42:32 +01:00
commit 7684461edb
51 changed files with 1411 additions and 850 deletions

View File

@ -8,7 +8,7 @@
"type": "chrome",
"request": "launch",
"name": "Launch Chrome against localhost",
"url": "http://localhost:3000/vite/",
"url": "http://localhost:3000",
"webRoot": "${workspaceFolder}",
"preLaunchTask": "npm: dev",
"resolveSourceMapLocations": [

View File

@ -1,73 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="16"
height="16"
viewBox="0 0 16 16"
fill="none"
version="1.1"
id="svg14"
sodipodi:docname="diamond.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<metadata
id="metadata20">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs18" />
<sodipodi:namedview
inkscape:document-rotation="0"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1017"
id="namedview16"
showgrid="false"
inkscape:zoom="34.345186"
inkscape:cx="9.7975885"
inkscape:cy="6.9150885"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg14"
inkscape:pagecheckerboard="0" />
<path
d="m 7.7738456,0.73991536 c 0.028657,-0.06694 0.095212,-0.11005484 0.1686893,-0.11005484 0.07342,0 0.1399744,0.04312 0.1686901,0.11005484 L 8.6172383,1.907376 c 0.039075,0.09076 0.059684,0.187205 0.059684,0.285915 V 3.066887 L 10.329417,4.01992 V 3.806656 c 0,-0.150915 0.1228,-0.272327 0.275387,-0.272327 0.152644,0 0.275444,0.121412 0.275444,0.272327 V 4.441993 4.805059 5.07733 c 0,0.150916 -0.1228,0.272328 -0.275444,0.272328 -0.152587,0 -0.275387,-0.121412 -0.275387,-0.272328 V 4.98659 H 8.676921 v 0.37097 l 0.6713243,0.582063 c 0.040146,0.03402 0.06312,0.08395 0.06312,0.136109 v 0.181532 c 0,0.09987 -0.082602,0.181532 -0.1836106,0.181532 H 8.1260895 v -0.72613 c 0,-0.09981 -0.0826,-0.181478 -0.1835546,-0.181478 -0.1010109,0 -0.1836102,0.08166 -0.1836102,0.181478 v 0.72613 H 6.657261 c -0.101011,0 -0.1836102,-0.08167 -0.1836102,-0.181532 V 6.075732 c 0,-0.05216 0.022912,-0.102096 0.063058,-0.136109 L 7.2080928,5.35756 V 4.98659 H 5.5555976 v 0.09074 c 0,0.150915 -0.1228013,0.272327 -0.2753877,0.272327 -0.152643,0 -0.2754442,-0.121412 -0.2754442,-0.272327 V 4.805059 4.441993 3.806656 c 0,-0.150915 0.1228012,-0.272327 0.2754442,-0.272327 0.1525864,0 0.2753877,0.121412 0.2753877,0.272327 V 4.01992 L 7.2080933,3.066887 V 2.193291 c 0,-0.09871 0.020665,-0.195155 0.059684,-0.285915 z"
fill="#202831"
id="path2"
style="fill:#000000;fill-opacity:1;stroke-width:0.559857" />
<path
style="fill:#000000;fill-opacity:1;stroke-width:0.559857"
id="path2-4"
fill="#202831"
d="m 3.184664,4.4905966 c 0.028657,-0.066941 0.095212,-0.1100552 0.1686901,-0.1100552 0.07342,0 0.1399744,0.043114 0.1686902,0.1100552 L 4.0280567,5.658057 c 0.039075,0.09076 0.059684,0.1872056 0.059684,0.2859155 v 0.8735957 l 1.652495,0.9530334 v -0.213264 c 0,-0.150915 0.1228008,-0.2723265 0.2753878,-0.2723265 0.152643,0 0.2754438,0.1214115 0.2754438,0.2723265 v 0.6353371 0.3630661 0.272271 c 0,0.1509163 -0.1228008,0.2723279 -0.2754438,0.2723279 -0.152587,0 -0.2753878,-0.1214116 -0.2753878,-0.2723279 V 8.7372709 H 4.0877394 V 9.1082413 L 4.759064,9.6903046 c 0.040146,0.03402 0.063115,0.08394 0.063115,0.136109 v 0.1815324 c 0,0.09987 -0.082599,0.181533 -0.1836102,0.181533 H 3.5369055 V 9.4633456 c 0,-0.09981 -0.082599,-0.181477 -0.1835538,-0.181477 -0.101011,0 -0.1836111,0.08166 -0.1836111,0.181477 V 10.189479 H 2.0680777 c -0.101011,0 -0.183611,-0.08166 -0.183611,-0.181533 V 9.8264136 c 0,-0.05216 0.022912,-0.102096 0.063058,-0.136109 L 2.6189119,9.1082413 V 8.7372709 H 0.96641662 v 0.090741 c 0,0.1509163 -0.1228014,0.2723279 -0.2753875,0.2723279 -0.15264324,0 -0.27544391,-0.1214116 -0.27544391,-0.2723279 V 8.5557408 8.1926747 7.5573376 c 0,-0.150915 0.12280067,-0.2723265 0.27544391,-0.2723265 0.1525861,0 0.2753875,0.1214115 0.2753875,0.2723265 v 0.213264 L 2.6189116,6.8175682 V 5.9439725 c 0,-0.09871 0.020665,-0.1951547 0.059684,-0.2859155 z" />
<path
style="fill:#000000;fill-opacity:1;stroke-width:0.559857"
id="path2-4-5"
fill="#202831"
d="m 12.484629,4.5143881 c 0.02865,-0.066941 0.09521,-0.1100553 0.16869,-0.1100553 0.07342,0 0.139974,0.043114 0.16869,0.1100553 l 0.506012,1.1674604 c 0.03908,0.09076 0.05968,0.1872055 0.05968,0.2859155 v 0.8735956 l 1.652495,0.9530335 V 7.581129 c 0,-0.150915 0.122802,-0.2723265 0.275389,-0.2723265 0.152642,0 0.275444,0.1214115 0.275444,0.2723265 v 0.6353371 0.3630662 0.272271 c 0,0.1509163 -0.122802,0.2723279 -0.275444,0.2723279 -0.152587,0 -0.275389,-0.1214116 -0.275389,-0.2723279 v -0.090741 h -1.652495 v 0.3709703 l 0.671324,0.582064 c 0.04015,0.03402 0.06311,0.08394 0.06311,0.136107 v 0.1815324 c 0,0.09987 -0.0826,0.181533 -0.183611,0.181533 H 12.836865 V 9.4871406 c 0,-0.09981 -0.0826,-0.181478 -0.183554,-0.181478 -0.101011,0 -0.183611,0.08166 -0.183611,0.181478 v 0.7261314 h -1.101658 c -0.101011,0 -0.183611,-0.08166 -0.183611,-0.181533 V 9.8502066 c 0,-0.05216 0.02291,-0.102096 0.06306,-0.136108 l 0.671383,-0.582063 V 8.7610653 h -1.652496 v 0.090741 c 0,0.1509163 -0.122802,0.2723279 -0.2753878,0.2723279 -0.152644,0 -0.275444,-0.1214116 -0.275444,-0.2723279 V 8.5795323 8.2164661 7.581129 c 0,-0.150915 0.1228,-0.2723265 0.275444,-0.2723265 0.1525858,0 0.2753878,0.1214115 0.2753878,0.2723265 V 7.7943931 L 11.918876,6.8413596 V 5.967764 c 0,-0.09871 0.02067,-0.1951547 0.05968,-0.2859155 z" />
<path
style="fill:#000000;fill-opacity:1;stroke-width:0.559857"
id="path2-4-9"
fill="#202831"
d="m 7.7976374,9.4146894 c 0.028656,-0.06694 0.095212,-0.1100553 0.1686901,-0.1100553 0.07342,0 0.1399744,0.043115 0.1686902,0.1100553 l 0.5060124,1.1674566 c 0.039075,0.09076 0.059684,0.187204 0.059684,0.285914 v 0.873592 l 1.6524959,0.953033 v -0.213264 c 0,-0.150914 0.1228,-0.272326 0.275387,-0.272326 0.152644,0 0.275444,0.121412 0.275444,0.272326 v 0.635337 0.363066 0.272271 c 0,0.150917 -0.1228,0.272329 -0.275444,0.272329 -0.152587,0 -0.275387,-0.121412 -0.275387,-0.272329 v -0.09074 H 8.7007128 v 0.37097 l 0.671325,0.582064 c 0.040146,0.03402 0.06312,0.08394 0.06312,0.136108 v 0.181532 c 0,0.09987 -0.082602,0.181533 -0.1836105,0.181533 H 8.1498788 V 14.38743 c 0,-0.09981 -0.082599,-0.181477 -0.1835537,-0.181477 -0.101011,0 -0.1836111,0.08166 -0.1836111,0.181477 v 0.726132 H 6.6810511 c -0.1010109,0 -0.183611,-0.08166 -0.183611,-0.181533 v -0.181532 c 0,-0.05216 0.022912,-0.102096 0.063059,-0.136108 l 0.6713867,-0.582064 v -0.37097 H 5.5793901 v 0.09074 c 0,0.150916 -0.1228016,0.272328 -0.2753876,0.272328 -0.1526432,0 -0.2754439,-0.121411 -0.2754439,-0.272328 v -0.272271 -0.363066 -0.635337 c 0,-0.150914 0.1228007,-0.272326 0.2754439,-0.272326 0.152586,0 0.2753876,0.121412 0.2753876,0.272326 v 0.213264 L 7.2318853,11.741652 V 10.86806 c 0,-0.09871 0.020665,-0.195154 0.059684,-0.285914 z" />
</svg>

Before

Width:  |  Height:  |  Size: 7.2 KiB

View File

@ -1,63 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="16"
height="16"
viewBox="0 0 16 16"
fill="none"
version="1.1"
id="svg14"
sodipodi:docname="echelon-lh.svg"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)">
<metadata
id="metadata20">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs18" />
<sodipodi:namedview
inkscape:document-rotation="0"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1017"
id="namedview16"
showgrid="false"
inkscape:zoom="34.345186"
inkscape:cx="9.7964424"
inkscape:cy="8.7196642"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg14" />
<path
d="m 11.760336,0.82277727 c 0.03507,-0.0819211 0.116519,-0.13468436 0.20644,-0.13468436 0.08985,0 0.171299,0.0527631 0.206441,0.13468436 L 12.79247,2.2515013 c 0.04782,0.1110719 0.07304,0.2290997 0.07304,0.3498999 v 1.0690957 l 2.022304,1.1663106 V 4.5758186 c 0,-0.1846888 0.150282,-0.3332707 0.337016,-0.3332707 0.186803,0 0.337085,0.1485819 0.337085,0.3332707 V 5.353336 5.7976518 6.1308542 c 0,0.1846885 -0.150282,0.3332711 -0.337085,0.3332711 -0.186734,0 -0.337016,-0.1485826 -0.337016,-0.3332711 V 6.0198095 H 12.865509 V 6.473799 l 0.821559,0.7123218 c 0.04913,0.041627 0.07724,0.1027332 0.07724,0.1665674 v 0.2221572 c 0,0.1222175 -0.101084,0.2221571 -0.224701,0.2221571 H 12.191408 V 6.9083724 c 0,-0.1221494 -0.101085,-0.22209 -0.224632,-0.22209 -0.123616,0 -0.2247,0.099941 -0.2247,0.22209 v 0.8886301 h -1.348203 c -0.123616,0 -0.2247,-0.09994 -0.2247,-0.2221571 V 7.3526882 c 0,-0.063834 0.02804,-0.1249429 0.07717,-0.1665674 L 11.067975,6.473799 V 6.0198095 H 9.0456705 v 0.1110447 c 0,0.1846885 -0.1502827,0.3332711 -0.3370162,0.3332711 -0.1868027,0 -0.3370854,-0.1485826 -0.3370854,-0.3332711 V 5.7976518 5.353336 4.5758186 c 0,-0.1846888 0.1502827,-0.3332707 0.3370854,-0.3332707 0.1867335,0 0.3370162,0.1485819 0.3370162,0.3332707 V 4.8368075 L 11.067975,3.6704969 V 2.6014012 c 0,-0.1208002 0.02529,-0.238828 0.07304,-0.3498999 z"
fill="#202831"
id="path2"
style="fill:#000000;fill-opacity:1;stroke-width:0.685147" />
<path
style="fill:#000000;fill-opacity:1;stroke-width:0.685147"
id="path2-4"
fill="#202831"
d="m 4.3098319,8.5178559 c 0.03507,-0.081921 0.116519,-0.1346843 0.206441,-0.1346843 0.08985,0 0.171299,0.052763 0.206441,0.1346843 L 5.3419659,9.94658 c 0.04782,0.111072 0.07304,0.2291 0.07304,0.3499 v 1.069096 l 2.0223043,1.166311 v -0.26099 c 0,-0.184688 0.1502822,-0.33327 0.3370163,-0.33327 0.1868027,0 0.3370848,0.148582 0.3370848,0.33327 v 0.777518 0.444316 0.333202 c 0,0.184689 -0.1502821,0.333271 -0.3370848,0.333271 -0.1867341,0 -0.3370163,-0.148582 -0.3370163,-0.333271 V 13.714889 H 5.4150049 v 0.453989 l 0.821559,0.712322 c 0.04913,0.04163 0.07724,0.102733 0.07724,0.166567 v 0.222157 c 0,0.122218 -0.101084,0.222158 -0.2247,0.222158 h -1.348203 v -0.888631 c 0,-0.122149 -0.101084,-0.22209 -0.224631,-0.22209 -0.123616,0 -0.224701,0.09994 -0.224701,0.22209 v 0.888631 h -1.348202 c -0.123616,0 -0.224701,-0.09994 -0.224701,-0.222158 v -0.222157 c 0,-0.06383 0.02804,-0.124943 0.07717,-0.166567 l 0.821635,-0.712322 v -0.453989 h -2.022304 v 0.111044 c 0,0.184689 -0.150283,0.333271 -0.337016,0.333271 -0.186803,0 -0.33708499,-0.148582 -0.33708499,-0.333271 v -0.333202 -0.444316 -0.777518 c 0,-0.184688 0.15028199,-0.33327 0.33708499,-0.33327 0.186733,0 0.337016,0.148582 0.337016,0.33327 v 0.26099 l 2.022304,-1.166311 V 10.29648 c 0,-0.1208 0.02529,-0.238828 0.07304,-0.3499 z" />
</svg>

Before

Width:  |  Height:  |  Size: 4.4 KiB

View File

@ -1,63 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="16"
height="16"
viewBox="0 0 16 16"
fill="none"
version="1.1"
id="svg14"
sodipodi:docname="echelon-rh.svg"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)">
<metadata
id="metadata20">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs18" />
<sodipodi:namedview
inkscape:document-rotation="0"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1017"
id="namedview16"
showgrid="false"
inkscape:zoom="34.345186"
inkscape:cx="9.7964424"
inkscape:cy="8.7196642"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg14" />
<path
d="M 4.7226453,0.82277727 C 4.687573,0.74085619 4.6061264,0.68809291 4.516205,0.68809291 c -0.089853,0 -0.1712993,0.0527631 -0.206441,0.13468436 L 3.6905114,2.2515013 c -0.04782,0.1110719 -0.07304,0.2290997 -0.07304,0.3498999 V 3.6704969 L 1.5951671,4.8368075 V 4.5758186 c 0,-0.1846888 -0.1502822,-0.3332707 -0.3370163,-0.3332707 -0.1868027,0 -0.33708489,0.1485819 -0.33708489,0.3332707 V 5.353336 5.7976518 6.1308542 c 0,0.1846885 0.15028219,0.3332711 0.33708489,0.3332711 0.1867341,0 0.3370163,-0.1485826 0.3370163,-0.3332711 V 6.0198095 H 3.6174719 V 6.473799 l -0.821559,0.7123218 c -0.049132,0.041627 -0.077243,0.1027332 -0.077243,0.1665674 v 0.2221572 c 0,0.1222175 0.1010844,0.2221571 0.2247007,0.2221571 H 4.2915732 V 6.9083724 c 0,-0.1221494 0.1010844,-0.22209 0.2246318,-0.22209 0.1236157,0 0.2247001,0.099941 0.2247001,0.22209 v 0.8886301 h 1.3482024 c 0.1236163,0 0.2247007,-0.09994 0.2247007,-0.2221571 V 7.3526882 c 0,-0.063834 -0.028044,-0.1249429 -0.077174,-0.1665674 L 5.4150063,6.473799 V 6.0198095 h 2.0223041 v 0.1110447 c 0,0.1846885 0.1502827,0.3332711 0.3370162,0.3332711 0.1868027,0 0.3370854,-0.1485826 0.3370854,-0.3332711 V 5.7976518 5.353336 4.5758186 c 0,-0.1846888 -0.1502827,-0.3332707 -0.3370854,-0.3332707 -0.1867335,0 -0.3370162,0.1485819 -0.3370162,0.3332707 V 4.8368075 L 5.4150063,3.6704969 V 2.6014012 c 0,-0.1208002 -0.025289,-0.238828 -0.07304,-0.3498999 z"
fill="#202831"
id="path2"
style="fill:#000000;fill-opacity:1;stroke-width:0.685147" />
<path
style="fill:#000000;fill-opacity:1;stroke-width:0.685147"
id="path2-4"
fill="#202831"
d="m 12.173149,8.5178559 c -0.03507,-0.081921 -0.116519,-0.1346843 -0.206441,-0.1346843 -0.08985,0 -0.171299,0.052763 -0.206441,0.1346843 L 11.141015,9.94658 c -0.04782,0.111072 -0.07304,0.2291 -0.07304,0.3499 v 1.069096 l -2.0223043,1.166311 v -0.26099 c 0,-0.184688 -0.1502822,-0.33327 -0.3370163,-0.33327 -0.1868027,0 -0.3370848,0.148582 -0.3370848,0.33327 v 0.777518 0.444316 0.333202 c 0,0.184689 0.1502821,0.333271 0.3370848,0.333271 0.1867341,0 0.3370163,-0.148582 0.3370163,-0.333271 v -0.111044 h 2.0223053 v 0.453989 L 10.246417,14.8812 c -0.04913,0.04163 -0.07724,0.102733 -0.07724,0.166567 v 0.222157 c 0,0.122218 0.101084,0.222158 0.2247,0.222158 h 1.348203 v -0.888631 c 0,-0.122149 0.101084,-0.22209 0.224631,-0.22209 0.123616,0 0.224701,0.09994 0.224701,0.22209 v 0.888631 h 1.348202 c 0.123616,0 0.224701,-0.09994 0.224701,-0.222158 v -0.222157 c 0,-0.06383 -0.02804,-0.124943 -0.07717,-0.166567 L 12.86551,14.168878 v -0.453989 h 2.022304 v 0.111044 c 0,0.184689 0.150283,0.333271 0.337016,0.333271 0.186803,0 0.337085,-0.148582 0.337085,-0.333271 v -0.333202 -0.444316 -0.777518 c 0,-0.184688 -0.150282,-0.33327 -0.337085,-0.33327 -0.186733,0 -0.337016,0.148582 -0.337016,0.33327 v 0.26099 L 12.86551,11.365576 V 10.29648 c 0,-0.1208 -0.02529,-0.238828 -0.07304,-0.3499 z" />
</svg>

Before

Width:  |  Height:  |  Size: 4.4 KiB

View File

@ -1,63 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="16"
height="16"
viewBox="0 0 16 16"
fill="none"
version="1.1"
id="svg14"
sodipodi:docname="echelon.svg"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)">
<metadata
id="metadata20">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs18" />
<sodipodi:namedview
inkscape:document-rotation="0"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1017"
id="namedview16"
showgrid="false"
inkscape:zoom="34.345186"
inkscape:cx="9.7964424"
inkscape:cy="8.7196642"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg14" />
<path
d="M 4.7226453,0.82277727 C 4.687573,0.74085619 4.6061264,0.68809291 4.516205,0.68809291 c -0.089853,0 -0.1712993,0.0527631 -0.206441,0.13468436 L 3.6905114,2.2515013 c -0.04782,0.1110719 -0.07304,0.2290997 -0.07304,0.3498999 V 3.6704969 L 1.5951671,4.8368075 V 4.5758186 c 0,-0.1846888 -0.1502822,-0.3332707 -0.3370163,-0.3332707 -0.1868027,0 -0.33708489,0.1485819 -0.33708489,0.3332707 V 5.353336 5.7976518 6.1308542 c 0,0.1846885 0.15028219,0.3332711 0.33708489,0.3332711 0.1867341,0 0.3370163,-0.1485826 0.3370163,-0.3332711 V 6.0198095 H 3.6174719 V 6.473799 l -0.821559,0.7123218 c -0.049132,0.041627 -0.077243,0.1027332 -0.077243,0.1665674 v 0.2221572 c 0,0.1222175 0.1010844,0.2221571 0.2247007,0.2221571 H 4.2915732 V 6.9083724 c 0,-0.1221494 0.1010844,-0.22209 0.2246318,-0.22209 0.1236157,0 0.2247001,0.099941 0.2247001,0.22209 v 0.8886301 h 1.3482024 c 0.1236163,0 0.2247007,-0.09994 0.2247007,-0.2221571 V 7.3526882 c 0,-0.063834 -0.028044,-0.1249429 -0.077174,-0.1665674 L 5.4150063,6.473799 V 6.0198095 h 2.0223041 v 0.1110447 c 0,0.1846885 0.1502827,0.3332711 0.3370162,0.3332711 0.1868027,0 0.3370854,-0.1485826 0.3370854,-0.3332711 V 5.7976518 5.353336 4.5758186 c 0,-0.1846888 -0.1502827,-0.3332707 -0.3370854,-0.3332707 -0.1867335,0 -0.3370162,0.1485819 -0.3370162,0.3332707 V 4.8368075 L 5.4150063,3.6704969 V 2.6014012 c 0,-0.1208002 -0.025289,-0.238828 -0.07304,-0.3498999 z"
fill="#202831"
id="path2"
style="fill:#000000;fill-opacity:1;stroke-width:0.685147" />
<path
style="fill:#000000;fill-opacity:1;stroke-width:0.685147"
id="path2-4"
fill="#202831"
d="m 12.173149,8.5178559 c -0.03507,-0.081921 -0.116519,-0.1346843 -0.206441,-0.1346843 -0.08985,0 -0.171299,0.052763 -0.206441,0.1346843 L 11.141015,9.94658 c -0.04782,0.111072 -0.07304,0.2291 -0.07304,0.3499 v 1.069096 l -2.0223043,1.166311 v -0.26099 c 0,-0.184688 -0.1502822,-0.33327 -0.3370163,-0.33327 -0.1868027,0 -0.3370848,0.148582 -0.3370848,0.33327 v 0.777518 0.444316 0.333202 c 0,0.184689 0.1502821,0.333271 0.3370848,0.333271 0.1867341,0 0.3370163,-0.148582 0.3370163,-0.333271 v -0.111044 h 2.0223053 v 0.453989 L 10.246417,14.8812 c -0.04913,0.04163 -0.07724,0.102733 -0.07724,0.166567 v 0.222157 c 0,0.122218 0.101084,0.222158 0.2247,0.222158 h 1.348203 v -0.888631 c 0,-0.122149 0.101084,-0.22209 0.224631,-0.22209 0.123616,0 0.224701,0.09994 0.224701,0.22209 v 0.888631 h 1.348202 c 0.123616,0 0.224701,-0.09994 0.224701,-0.222158 v -0.222157 c 0,-0.06383 -0.02804,-0.124943 -0.07717,-0.166567 L 12.86551,14.168878 v -0.453989 h 2.022304 v 0.111044 c 0,0.184689 0.150283,0.333271 0.337016,0.333271 0.186803,0 0.337085,-0.148582 0.337085,-0.333271 v -0.333202 -0.444316 -0.777518 c 0,-0.184688 -0.150282,-0.33327 -0.337085,-0.33327 -0.186733,0 -0.337016,0.148582 -0.337016,0.33327 v 0.26099 L 12.86551,11.365576 V 10.29648 c 0,-0.1208 -0.02529,-0.238828 -0.07304,-0.3499 z" />
</svg>

Before

Width:  |  Height:  |  Size: 4.4 KiB

View File

@ -1,63 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="16"
height="16"
viewBox="0 0 16 16"
fill="none"
version="1.1"
id="svg14"
sodipodi:docname="front.svg"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)">
<metadata
id="metadata20">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs18" />
<sodipodi:namedview
inkscape:document-rotation="0"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1017"
id="namedview16"
showgrid="false"
inkscape:zoom="34.345186"
inkscape:cx="9.7964424"
inkscape:cy="8.7196642"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg14" />
<path
d="m 7.5384925,0.85189343 c 0.03507,-0.0819211 0.116519,-0.13468436 0.20644,-0.13468436 0.08985,0 0.171299,0.0527631 0.206441,0.13468436 l 0.619253,1.42872407 c 0.04782,0.1110719 0.07304,0.2290997 0.07304,0.3498999 V 3.6996131 L 10.665971,4.8659237 V 4.6049348 c 0,-0.1846888 0.150282,-0.3332707 0.337016,-0.3332707 0.186803,0 0.337085,0.1485819 0.337085,0.3332707 V 5.3824522 5.826768 6.1599704 c 0,0.1846885 -0.150282,0.3332711 -0.337085,0.3332711 -0.186734,0 -0.337016,-0.1485826 -0.337016,-0.3332711 V 6.0489257 H 8.6436655 v 0.4539895 l 0.821559,0.7123218 c 0.04913,0.041627 0.07724,0.1027332 0.07724,0.1665674 v 0.2221572 c 0,0.1222175 -0.101084,0.2221571 -0.224701,0.2221571 H 7.9695645 V 6.9374886 c 0,-0.1221494 -0.101085,-0.22209 -0.224632,-0.22209 -0.123616,0 -0.2247,0.099941 -0.2247,0.22209 v 0.8886301 h -1.348203 c -0.123616,0 -0.2247,-0.09994 -0.2247,-0.2221571 V 7.3818044 c 0,-0.063834 0.02804,-0.1249429 0.07717,-0.1665674 L 6.8461315,6.5029152 V 6.0489257 H 4.823827 v 0.1110447 c 0,0.1846885 -0.1502827,0.3332711 -0.3370162,0.3332711 -0.1868027,0 -0.3370854,-0.1485826 -0.3370854,-0.3332711 V 5.826768 5.3824522 4.6049348 c 0,-0.1846888 0.1502827,-0.3332707 0.3370854,-0.3332707 0.1867335,0 0.3370162,0.1485819 0.3370162,0.3332707 V 4.8659237 L 6.8461315,3.6996131 V 2.6305174 c 0,-0.1208002 0.02529,-0.238828 0.07304,-0.3498999 z"
fill="#202831"
id="path2"
style="fill:#000000;fill-opacity:1;stroke-width:0.685147" />
<path
style="fill:#000000;fill-opacity:1;stroke-width:0.685147"
id="path2-4"
fill="#202831"
d="m 7.5417259,8.4887398 c 0.03507,-0.081921 0.116519,-0.1346843 0.206441,-0.1346843 0.08985,0 0.171299,0.052763 0.206441,0.1346843 l 0.619252,1.4287241 c 0.04782,0.1110721 0.07304,0.2291001 0.07304,0.3499001 v 1.069096 l 2.0223041,1.166311 v -0.26099 c 0,-0.184688 0.150282,-0.33327 0.337016,-0.33327 0.186803,0 0.337085,0.148582 0.337085,0.33327 v 0.777518 0.444316 0.333202 c 0,0.184689 -0.150282,0.333271 -0.337085,0.333271 -0.186734,0 -0.337016,-0.148582 -0.337016,-0.333271 V 13.685773 H 8.6468989 v 0.453989 l 0.821559,0.712322 c 0.04913,0.04163 0.07724,0.102733 0.07724,0.166567 v 0.222157 c 0,0.122218 -0.101084,0.222158 -0.2247,0.222158 h -1.348203 v -0.888631 c 0,-0.122149 -0.101084,-0.22209 -0.224631,-0.22209 -0.123616,0 -0.224701,0.09994 -0.224701,0.22209 v 0.888631 h -1.348202 c -0.123616,0 -0.224701,-0.09994 -0.224701,-0.222158 v -0.222157 c 0,-0.06383 0.02804,-0.124943 0.07717,-0.166567 l 0.821635,-0.712322 v -0.453989 h -2.022304 v 0.111044 c 0,0.184689 -0.150283,0.333271 -0.337016,0.333271 -0.186803,0 -0.337085,-0.148582 -0.337085,-0.333271 v -0.333202 -0.444316 -0.777518 c 0,-0.184688 0.150282,-0.33327 0.337085,-0.33327 0.186733,0 0.337016,0.148582 0.337016,0.33327 v 0.26099 l 2.022304,-1.166311 v -1.069096 c 0,-0.1208 0.02529,-0.238828 0.07304,-0.3499001 z" />
</svg>

Before

Width:  |  Height:  |  Size: 4.4 KiB

View File

@ -1,65 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="16"
height="16"
viewBox="0 0 16 16"
fill="none"
version="1.1"
id="svg14"
sodipodi:docname="line-abreast.svg"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)">
<metadata
id="metadata20">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs18" />
<sodipodi:namedview
inkscape:document-rotation="0"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1017"
id="namedview16"
showgrid="false"
inkscape:zoom="34.345186"
inkscape:cx="9.7964424"
inkscape:cy="8.7196642"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg14" />
<path
inkscape:transform-center-y="-0.37851011"
inkscape:transform-center-x="-0.37851011"
d="m 3.8116238,3.5888127 c 0.03507,-0.081921 0.116519,-0.1346844 0.20644,-0.1346844 0.08985,0 0.171299,0.052763 0.206441,0.1346844 l 0.619253,1.428724 c 0.04782,0.1110719 0.07304,0.2290997 0.07304,0.3498999 V 6.4365323 L 6.9391023,7.6028429 V 7.341854 c 0,-0.1846888 0.150282,-0.3332707 0.337016,-0.3332707 0.186803,0 0.337085,0.1485819 0.337085,0.3332707 v 0.7775174 0.4443158 0.3332024 c 0,0.1846885 -0.150282,0.3332711 -0.337085,0.3332711 -0.186734,0 -0.337016,-0.1485826 -0.337016,-0.3332711 V 8.7858449 H 4.9167968 v 0.4539895 l 0.821559,0.7123218 c 0.04913,0.041627 0.07724,0.1027328 0.07724,0.1665678 v 0.222157 c 0,0.122217 -0.101084,0.222157 -0.224701,0.222157 H 4.2426958 V 9.6744078 c 0,-0.1221494 -0.101085,-0.22209 -0.224632,-0.22209 -0.123616,0 -0.2247,0.099941 -0.2247,0.22209 v 0.8886302 h -1.348203 c -0.123616,0 -0.2247,-0.09994 -0.2247,-0.222157 v -0.222157 c 0,-0.06383 0.02804,-0.1249433 0.07717,-0.1665678 L 3.1192628,9.2398344 V 8.7858449 H 1.0969583 v 0.1110447 c 0,0.1846885 -0.15028273,0.3332711 -0.33701623,0.3332711 -0.1868027,0 -0.3370854,-0.1485826 -0.3370854,-0.3332711 V 8.5636872 8.1193714 7.341854 c 0,-0.1846888 0.1502827,-0.3332707 0.3370854,-0.3332707 0.1867335,0 0.33701623,0.1485819 0.33701623,0.3332707 V 7.6028429 L 3.1192628,6.4365323 V 5.3674366 c 0,-0.1208002 0.02529,-0.238828 0.07304,-0.3498999 z"
fill="#202831"
id="path2"
style="fill:#000000;fill-opacity:1;stroke-width:0.685147" />
<path
style="fill:#000000;fill-opacity:1;stroke-width:0.685147"
id="path2-4"
fill="#202831"
d="m 11.763569,3.5972246 c 0.03507,-0.081921 0.116519,-0.1346843 0.206441,-0.1346843 0.08985,0 0.171299,0.052763 0.206441,0.1346843 l 0.619252,1.4287241 c 0.04782,0.1110721 0.07304,0.2291001 0.07304,0.3499001 v 1.069096 l 2.022304,1.166311 v -0.26099 c 0,-0.184688 0.150282,-0.33327 0.337016,-0.33327 0.186803,0 0.337085,0.148582 0.337085,0.33327 v 0.777518 0.444316 0.333202 c 0,0.184689 -0.150282,0.333271 -0.337085,0.333271 -0.186734,0 -0.337016,-0.148582 -0.337016,-0.333271 v -0.111044 h -2.022305 v 0.453989 l 0.821559,0.712322 c 0.04913,0.04163 0.07724,0.1027332 0.07724,0.1665672 v 0.222157 c 0,0.122218 -0.101084,0.222158 -0.2247,0.222158 H 12.194638 V 9.6828198 c 0,-0.122149 -0.101084,-0.22209 -0.224631,-0.22209 -0.123616,0 -0.224701,0.09994 -0.224701,0.22209 v 0.8886312 h -1.348202 c -0.123616,0 -0.224701,-0.09994 -0.224701,-0.222158 v -0.222157 c 0,-0.06383 0.02804,-0.124943 0.07717,-0.1665672 l 0.821635,-0.712322 V 8.7942578 H 9.0489044 v 0.111044 c 0,0.184689 -0.150283,0.333271 -0.337016,0.333271 -0.186803,0 -0.337085,-0.148582 -0.337085,-0.333271 v -0.333202 -0.444316 -0.777518 c 0,-0.184688 0.150282,-0.33327 0.337085,-0.33327 0.186733,0 0.337016,0.148582 0.337016,0.33327 v 0.26099 l 2.0223036,-1.166311 v -1.069096 c 0,-0.1208 0.02529,-0.238828 0.07304,-0.3499001 z" />
</svg>

Before

Width:  |  Height:  |  Size: 4.5 KiB

View File

@ -1,63 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="16"
height="16"
viewBox="0 0 16 16"
fill="none"
version="1.1"
id="svg14"
sodipodi:docname="trail.svg"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)">
<metadata
id="metadata20">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs18" />
<sodipodi:namedview
inkscape:document-rotation="0"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1017"
id="namedview16"
showgrid="false"
inkscape:zoom="34.345186"
inkscape:cx="9.7964424"
inkscape:cy="8.7196642"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg14" />
<path
d="m 7.5384925,0.85189343 c 0.03507,-0.0819211 0.116519,-0.13468436 0.20644,-0.13468436 0.08985,0 0.171299,0.0527631 0.206441,0.13468436 l 0.619253,1.42872407 c 0.04782,0.1110719 0.07304,0.2290997 0.07304,0.3498999 V 3.6996131 L 10.665971,4.8659237 V 4.6049348 c 0,-0.1846888 0.150282,-0.3332707 0.337016,-0.3332707 0.186803,0 0.337085,0.1485819 0.337085,0.3332707 V 5.3824522 5.826768 6.1599704 c 0,0.1846885 -0.150282,0.3332711 -0.337085,0.3332711 -0.186734,0 -0.337016,-0.1485826 -0.337016,-0.3332711 V 6.0489257 H 8.6436655 v 0.4539895 l 0.821559,0.7123218 c 0.04913,0.041627 0.07724,0.1027332 0.07724,0.1665674 v 0.2221572 c 0,0.1222175 -0.101084,0.2221571 -0.224701,0.2221571 H 7.9695645 V 6.9374886 c 0,-0.1221494 -0.101085,-0.22209 -0.224632,-0.22209 -0.123616,0 -0.2247,0.099941 -0.2247,0.22209 v 0.8886301 h -1.348203 c -0.123616,0 -0.2247,-0.09994 -0.2247,-0.2221571 V 7.3818044 c 0,-0.063834 0.02804,-0.1249429 0.07717,-0.1665674 L 6.8461315,6.5029152 V 6.0489257 H 4.823827 v 0.1110447 c 0,0.1846885 -0.1502827,0.3332711 -0.3370162,0.3332711 -0.1868027,0 -0.3370854,-0.1485826 -0.3370854,-0.3332711 V 5.826768 5.3824522 4.6049348 c 0,-0.1846888 0.1502827,-0.3332707 0.3370854,-0.3332707 0.1867335,0 0.3370162,0.1485819 0.3370162,0.3332707 V 4.8659237 L 6.8461315,3.6996131 V 2.6305174 c 0,-0.1208002 0.02529,-0.238828 0.07304,-0.3498999 z"
fill="#202831"
id="path2"
style="fill:#000000;fill-opacity:1;stroke-width:0.685147" />
<path
style="fill:#000000;fill-opacity:1;stroke-width:0.685147"
id="path2-4"
fill="#202831"
d="m 7.5417259,8.4887398 c 0.03507,-0.081921 0.116519,-0.1346843 0.206441,-0.1346843 0.08985,0 0.171299,0.052763 0.206441,0.1346843 l 0.619252,1.4287241 c 0.04782,0.1110721 0.07304,0.2291001 0.07304,0.3499001 v 1.069096 l 2.0223041,1.166311 v -0.26099 c 0,-0.184688 0.150282,-0.33327 0.337016,-0.33327 0.186803,0 0.337085,0.148582 0.337085,0.33327 v 0.777518 0.444316 0.333202 c 0,0.184689 -0.150282,0.333271 -0.337085,0.333271 -0.186734,0 -0.337016,-0.148582 -0.337016,-0.333271 V 13.685773 H 8.6468989 v 0.453989 l 0.821559,0.712322 c 0.04913,0.04163 0.07724,0.102733 0.07724,0.166567 v 0.222157 c 0,0.122218 -0.101084,0.222158 -0.2247,0.222158 h -1.348203 v -0.888631 c 0,-0.122149 -0.101084,-0.22209 -0.224631,-0.22209 -0.123616,0 -0.224701,0.09994 -0.224701,0.22209 v 0.888631 h -1.348202 c -0.123616,0 -0.224701,-0.09994 -0.224701,-0.222158 v -0.222157 c 0,-0.06383 0.02804,-0.124943 0.07717,-0.166567 l 0.821635,-0.712322 v -0.453989 h -2.022304 v 0.111044 c 0,0.184689 -0.150283,0.333271 -0.337016,0.333271 -0.186803,0 -0.337085,-0.148582 -0.337085,-0.333271 v -0.333202 -0.444316 -0.777518 c 0,-0.184688 0.150282,-0.33327 0.337085,-0.33327 0.186733,0 0.337016,0.148582 0.337016,0.33327 v 0.26099 l 2.022304,-1.166311 v -1.069096 c 0,-0.1208 0.02529,-0.238828 0.07304,-0.3499001 z" />
</svg>

Before

Width:  |  Height:  |  Size: 4.4 KiB

View File

@ -0,0 +1,55 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="32"
height="32"
viewBox="0 0 32 32"
fill="none"
version="1.1"
id="svg6"
sodipodi:docname="attack.svg"
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
xml:space="preserve"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs10" /><sodipodi:namedview
id="namedview8"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="9.8052139"
inkscape:cx="3.3145631"
inkscape:cy="8.7198505"
inkscape:window-width="1920"
inkscape:window-height="1009"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg6"
inkscape:showpageshadow="0"
inkscape:deskcolor="#505050" /><g
id="g1"
transform="matrix(0.73998152,0,0,0.73998152,8.2974621,8.2854751)"><path
style="fill:none;stroke:#262626;stroke-width:5.02969;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 14.029934,27.229233 2.034411,2.120981 3.72254,-3.874037 2.943401,2.813547 -1.493343,-1.471701 4.295177,-4.352146 3.864104,-3.915355 -0.757494,-3.874038 -3.744181,-0.865707 -8.267495,8.18093 -1.579914,-1.406774 2.770262,2.705335 z"
id="path2232"
sodipodi:nodetypes="ccccccccccccc" /><path
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2.4009;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 13.714241,27.528538 2.034411,2.120982 4.038233,-4.173343 c 1.322617,1.240805 1.450058,1.341846 1.450058,1.341846 l 7.843588,-7.968196 -0.757493,-3.874039 -3.744184,-0.865707 -7.951799,7.881626 c 0,0 -0.157454,-0.01765 1.190347,1.298561 z"
id="path2232-9"
sodipodi:nodetypes="cccccccccc" /><path
style="fill:#262222;fill-opacity:1;stroke-width:0.0172348"
d="m 26.328948,17.877487 c 0.294136,-0.294138 0.294136,-0.735345 0,-1.029483 -0.294138,-0.294138 -0.735344,-0.294138 -1.029482,0 l -5.404781,5.404786 c -0.294139,0.294138 -0.294139,0.735345 0,1.029483 0.147069,0.147069 0.330905,0.220604 0.514742,0.220604 0.183836,0 0.367671,-0.07354 0.514741,-0.220604 z"
fill="#FFFFFF"
id="path4-5" /><path
style="fill:none;stroke:#262626;stroke-width:1.65367;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 15.04714,20.584933 7.683146,7.704791"
id="path2082" /></g><path
d="M 2.4241111,3.9396717 V 21.494955 c 0,0.5776 0.468708,1.041576 1.0415756,1.041576 0.2982683,0 0.5870705,-0.127832 0.785916,-0.355083 l 3.9106436,-4.474042 2.7507057,5.506148 c 0.374022,0.748041 1.283033,1.051042 2.031074,0.677023 0.748041,-0.374022 1.051042,-1.283033 0.677024,-2.031073 l -2.684426,-5.38305 h 5.591368 c 0.577601,0 1.04631,-0.468711 1.04631,-1.046312 0,-0.298268 -0.127829,-0.582334 -0.35035,-0.781179 L 4.2516027,3.1206137 C 4.0480242,2.9407041 3.7923646,2.8412813 3.5225015,2.8412813 c -0.6060096,0 -1.0983904,0.4923807 -1.0983904,1.0983904 z"
id="path1"
style="fill:#ffffff;fill-opacity:1;stroke:#262626;stroke-width:3.89387;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers" /></svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="32"
height="32"
viewBox="0 0 32 32"
fill="none"
version="1.1"
id="svg7234"
sodipodi:docname="explosion.svg"
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
xml:space="preserve"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata
id="metadata6"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
id="defs7238" /><sodipodi:namedview
id="namedview7236"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="11.313709"
inkscape:cx="-19.047689"
inkscape:cy="22.848388"
inkscape:window-width="1920"
inkscape:window-height="1009"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg7234"
inkscape:pageshadow="2"
width="512px" /><path
d="M 2.4865894,3.2348193 V 20.790103 c 0,0.5776 0.468708,1.041576 1.0415756,1.041576 0.2982683,0 0.5870705,-0.127832 0.785916,-0.355083 l 3.9106433,-4.474042 2.7507057,5.506148 c 0.374022,0.748041 1.283033,1.051042 2.031074,0.677023 0.748041,-0.374022 1.051042,-1.283033 0.677024,-2.031073 l -2.684426,-5.38305 h 5.591368 c 0.577601,0 1.04631,-0.468711 1.04631,-1.046312 0,-0.298268 -0.127829,-0.582334 -0.35035,-0.781179 L 4.314081,2.4157613 C 4.1105025,2.2358517 3.8548429,2.1364289 3.5849798,2.1364289 c -0.6060096,0 -1.0983904,0.4923807 -1.0983904,1.0983904 z"
id="path1"
style="fill:#ffffff;fill-opacity:1;stroke:#262626;stroke-width:3.89387;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers" /><path
d="m 28.078263,18.830073 c 0.147752,-0.235965 0.45208,-0.319766 0.699072,-0.187449 0.246989,0.132316 0.348431,0.430029 0.233759,0.683635 l -3.02343,6.721669 c 0.04852,0.05072 0.09483,0.103648 0.138932,0.156575 l 2.143526,-1.206284 c 0.231553,-0.130111 0.520443,-0.06836 0.681427,0.141138 0.160987,0.209499 0.138934,0.507212 -0.04851,0.694661 l -1.918586,1.918586 h -1.57457 c -0.291095,-0.822567 -1.073968,-1.411375 -1.995772,-1.411375 -0.921803,0 -1.706881,0.588808 -1.995771,1.411375 H 19.662943 L 17.993552,26.601452 C 17.77964,26.453698 17.70466,26.169218 17.819335,25.933255 17.93401,25.69729 18.203052,25.582616 18.452249,25.659802 l 2.143524,0.670403 c 0.06616,-0.08601 0.134522,-0.169808 0.207297,-0.249197 l -1.373886,-2.289073 c -0.13452,-0.222732 -0.08601,-0.509419 0.112469,-0.677018 0.198476,-0.167602 0.489571,-0.165396 0.685839,0.0022 l 2.258201,1.938433 c 0.03308,-0.0088 0.06616,-0.01765 0.09924,-0.02426 l 0.299916,-3.146925 c 0.02646,-0.271248 0.253606,-0.478542 0.52706,-0.478542 0.273454,0 0.500597,0.207294 0.52706,0.478542 l 0.297712,3.129281 z m -9.606166,9.630423 v 0 h 9.87962 v 0 h 0.705686 c 0.390333,0 0.705687,0.315354 0.705687,0.705689 0,0.390332 -0.315354,0.705686 -0.705687,0.705686 H 17.766408 c -0.390332,0 -0.705687,-0.315354 -0.705687,-0.705686 0,-0.390335 0.315355,-0.705689 0.705687,-0.705689 z m 4.939809,-9.87962 c 0.293301,0 0.529266,0.235965 0.529266,0.529266 v 0.311602 0.229391 0.517538 c 0,0.293301 -0.235965,0.529264 -0.529266,0.529264 -0.293301,0 -0.529266,-0.235963 -0.529266,-0.529264 l -0.0221,1.123609 0.0221,-2.18214 c 0.003,-0.293286 0.235965,-0.529266 0.529266,-0.529266 z"
id="path1-5"
style="fill:none;fill-opacity:1;stroke:#262626;stroke-width:3.6;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
sodipodi:nodetypes="csccccscccscccsccccsccccscccccccsssssscssccssscss" /><path
d="m 28.055406,18.977275 c 0.147752,-0.235965 0.45208,-0.319766 0.699072,-0.187449 0.246989,0.132316 0.348431,0.430029 0.233759,0.683635 l -3.02343,6.721669 c 0.04852,0.05072 0.09483,0.103648 0.138932,0.156575 l 2.143526,-1.206284 c 0.231553,-0.130111 0.520443,-0.06836 0.681427,0.141138 0.160987,0.209499 0.138934,0.507212 -0.04851,0.694661 l -1.918586,1.918586 h -1.57457 c -0.291095,-0.822567 -1.073968,-1.411375 -1.995772,-1.411375 -0.921803,0 -1.706881,0.588808 -1.995771,1.411375 H 19.640086 L 17.970695,26.748654 C 17.756783,26.6009 17.681803,26.31642 17.796478,26.080457 c 0.114675,-0.235965 0.383717,-0.350639 0.632914,-0.273453 l 2.143524,0.670403 c 0.06616,-0.08601 0.134522,-0.169808 0.207297,-0.249197 l -1.373886,-2.289073 c -0.13452,-0.222732 -0.08601,-0.509419 0.112469,-0.677018 0.198476,-0.167602 0.489571,-0.165396 0.685839,0.0022 l 2.258201,1.938433 c 0.03308,-0.0088 0.06616,-0.01765 0.09924,-0.02426 l 0.299916,-3.146925 c 0.02646,-0.271248 0.253606,-0.478542 0.52706,-0.478542 0.273454,0 0.500597,0.207294 0.52706,0.478542 l 0.297712,3.129281 z m -9.606166,9.630423 v 0 h 9.87962 v 0 h 0.705686 c 0.390333,0 0.705687,0.315354 0.705687,0.705689 0,0.390332 -0.315354,0.705686 -0.705687,0.705686 H 17.743551 c -0.390332,0 -0.705687,-0.315354 -0.705687,-0.705686 0,-0.390335 0.315355,-0.705689 0.705687,-0.705689 z m 4.939809,-9.87962 c 0.293301,0 0.529266,0.235965 0.529266,0.529266 v 0.311602 0.229391 0.517538 c 0,0.293301 -0.235965,0.529264 -0.529266,0.529264 -0.293301,0 -0.529266,-0.235963 -0.529266,-0.529264 v -0.55577 -0.502761 c 0,-0.293301 0.235965,-0.529266 0.529266,-0.529266 z"
id="path1-5-7"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:3.6;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
sodipodi:nodetypes="csccccscccscccsccccsccccscccccccsssssscssccssscss" /></svg>

After

Width:  |  Height:  |  Size: 5.9 KiB

View File

@ -0,0 +1,101 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 32 32"
version="1.1"
id="svg1"
sodipodi:docname="fire-at-area.svg"
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
width="32"
height="32"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1" />
<sodipodi:namedview
id="namedview1"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:zoom="17.964932"
inkscape:cx="16.393049"
inkscape:cy="20.400857"
inkscape:window-width="1920"
inkscape:window-height="1009"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg1" />
<!--!Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.-->
<g
id="g1"
transform="matrix(0.58949635,0,0,0.58949635,17.270595,17.673618)">
<ellipse
style="fill:none;fill-opacity:1;stroke:#262626;stroke-width:7.99532;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
id="path2"
cx="11.936234"
cy="11.783189"
rx="6.2125893"
ry="5.9913139" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:#262626;stroke-width:7.99532;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
d="M 4.3844336,11.851179 H 7.8404571"
id="path4-14" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:#262626;stroke-width:7.99532;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
d="m 16.040935,11.846615 h 3.456024"
id="path4-1-3" />
<circle
style="fill:#262626;fill-opacity:1;stroke:none;stroke-width:5.89384;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
id="path3-5"
cx="11.94159"
cy="11.816721"
r="2.9982486" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:#262626;stroke-width:7.99532;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
d="M 11.960383,7.8241154 V 4.4911855"
id="path4-1-7-9" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:#262626;stroke-width:7.99532;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
d="m 12.035822,15.789813 v 3.33293"
id="path4-1-1-5" />
<ellipse
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1.99883;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
id="path2-6"
cx="11.924375"
cy="11.773729"
rx="6.2125893"
ry="5.9913139" />
<circle
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.81165;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
id="path3"
cx="11.909643"
cy="11.830953"
r="1.4991243" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1.99883;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
d="M 4.3688791,11.810946 H 7.8249026"
id="path4" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1.99883;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
d="m 16.025381,11.806381 h 3.456022"
id="path4-1" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1.99883;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
d="M 11.944829,7.7838816 V 4.4509515"
id="path4-1-7" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1.99883;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
d="m 12.020268,15.749579 v 3.332929"
id="path4-1-1" />
</g>
<path
d="M 2.5133353,3.4925896 V 21.047873 c 0,0.5776 0.468708,1.041576 1.0415756,1.041576 0.2982683,0 0.5870705,-0.127832 0.785916,-0.355083 l 3.9106436,-4.474042 2.7507055,5.506148 c 0.374022,0.748041 1.283033,1.051042 2.031074,0.677023 0.748041,-0.374022 1.051042,-1.283033 0.677024,-2.031073 l -2.684426,-5.38305 h 5.591368 c 0.577601,0 1.04631,-0.468711 1.04631,-1.046312 0,-0.298268 -0.127829,-0.582334 -0.35035,-0.781179 L 4.3408269,2.6735316 C 4.1372484,2.493622 3.8815888,2.3941992 3.6117257,2.3941992 c -0.6060096,0 -1.0983904,0.4923807 -1.0983904,1.0983904 z"
id="path1"
style="fill:#ffffff;fill-opacity:1;stroke:#262626;stroke-width:3.89387;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers" />
</svg>

After

Width:  |  Height:  |  Size: 5.1 KiB

View File

@ -0,0 +1,64 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="32"
height="32"
viewBox="0 0 32 32"
fill="none"
version="1.1"
id="svg14"
sodipodi:docname="follow.svg"
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<metadata
id="metadata20">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs18" />
<sodipodi:namedview
inkscape:document-rotation="0"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1009"
id="namedview16"
showgrid="false"
inkscape:zoom="17.172593"
inkscape:cx="12.083207"
inkscape:cy="18.022904"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg14"
inkscape:showpageshadow="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050" />
<path
d="m 25.337143,20.151593 c -0.04939,-0.115348 -0.164063,-0.189641 -0.290676,-0.189641 -0.126517,0 -0.241197,0.07429 -0.290679,0.189641 l -0.871933,2.011706 c -0.06733,0.156394 -0.102844,0.322582 -0.102844,0.492674 v 1.505333 l -2.847493,1.642217 v -0.367484 c 0,-0.26005 -0.211604,-0.46926 -0.474534,-0.46926 -0.263026,0 -0.47463,0.20921 -0.47463,0.46926 v 1.094778 0.625616 0.469163 c 0,0.26005 0.211604,0.469261 0.47463,0.469261 0.26293,0 0.474534,-0.209211 0.474534,-0.469261 v -0.156355 h 2.847493 v 0.639237 l -1.156791,1.002981 c -0.06918,0.05862 -0.108761,0.144652 -0.108761,0.234533 v 0.312807 c 0,0.172088 0.142331,0.312807 0.316388,0.312807 h 1.898328 v -1.25123 c 0,-0.171992 0.142331,-0.312712 0.316292,-0.312712 0.174056,0 0.316387,0.14072 0.316387,0.312712 v 1.25123 h 1.898327 c 0.174058,0 0.316389,-0.140719 0.316389,-0.312807 v -0.312807 c 0,-0.08988 -0.03949,-0.175926 -0.108665,-0.234533 l -1.156888,-1.002981 v -0.639237 h 2.847493 v 0.156355 c 0,0.26005 0.211604,0.469261 0.474534,0.469261 0.263026,0 0.47463,-0.209211 0.47463,-0.469261 v -0.469163 -0.625616 -1.094778 c 0,-0.26005 -0.211604,-0.46926 -0.47463,-0.46926 -0.26293,0 -0.474534,0.20921 -0.474534,0.46926 v 0.367484 l -2.847493,-1.642217 v -1.505333 c 0,-0.170092 -0.03561,-0.33628 -0.102842,-0.492674 z"
fill="#202831"
id="path2"
style="fill:#ffffff;fill-opacity:1;stroke:#262626;stroke-width:3.34869;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers" />
<path
d="M 2.5493593,3.7240124 V 21.279296 c 0,0.5776 0.468708,1.041576 1.0415756,1.041576 0.2982683,0 0.5870705,-0.127832 0.785916,-0.355083 L 8.2874945,17.491747 11.0382,22.997895 c 0.374022,0.748041 1.283033,1.051042 2.031074,0.677023 0.748041,-0.374022 1.051042,-1.283033 0.677024,-2.031073 l -2.684426,-5.38305 h 5.591368 c 0.577601,0 1.04631,-0.468711 1.04631,-1.046312 0,-0.298268 -0.127829,-0.582334 -0.35035,-0.781179 L 4.3768509,2.9049544 C 4.1732724,2.7250448 3.9176128,2.625622 3.6477497,2.625622 c -0.6060096,0 -1.0983904,0.4923807 -1.0983904,1.0983904 z"
id="path1"
style="fill:#ffffff;fill-opacity:1;stroke:#262626;stroke-width:3.89387;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers" />
</svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 32 32"
version="1.1"
id="svg1"
sodipodi:docname="grab.svg"
width="32"
height="32"
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
xml:space="preserve"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs1" /><sodipodi:namedview
id="namedview1"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:zoom="17.964932"
inkscape:cx="23.963353"
inkscape:cy="20.122537"
inkscape:window-width="1920"
inkscape:window-height="1009"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg1" /><!--!Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path
d="m 17.050119,6.2566358 c 0,-0.7311021 -0.590664,-1.321766 -1.321766,-1.321766 -0.731102,0 -1.321767,0.5906639 -1.321767,1.321766 v 8.5914832 c 0,0.363485 -0.297397,0.660883 -0.660883,0.660883 -0.363486,0 -0.660883,-0.297398 -0.660883,-0.660883 V 7.5784026 c 0,-0.7311021 -0.590664,-1.3217668 -1.321766,-1.3217668 -0.731102,0 -1.321767,0.5906647 -1.321767,1.3217668 V 18.813418 c 0,0.06196 0,0.128046 0.0041,0.190004 l -2.4989679,-2.37918 c -0.660883,-0.627839 -1.7059052,-0.603056 -2.3378744,0.05783 -0.6319698,0.660883 -0.6030559,1.705905 0.057829,2.337874 l 4.6427053,4.419657 c 1.780254,1.697644 4.147042,2.643533 6.608832,2.643533 h 0.79306 c 4.014866,0 7.269716,-3.25485 7.269716,-7.269716 v -8.591482 c 0,-0.7311026 -0.590664,-1.3217665 -1.321766,-1.3217665 -0.731103,0 -1.321767,0.5906639 -1.321767,1.3217665 v 4.626183 c 0,0.363485 -0.297398,0.660883 -0.660883,0.660883 -0.363486,0 -0.660884,-0.297398 -0.660884,-0.660883 V 7.5784026 c 0,-0.7311021 -0.590664,-1.3217668 -1.321766,-1.3217668 -0.731102,0 -1.321767,0.5906647 -1.321767,1.3217668 v 7.2697164 c 0,0.363485 -0.297397,0.660883 -0.660883,0.660883 -0.363486,0 -0.660883,-0.297398 -0.660883,-0.660883 z"
id="path1"
style="stroke-width:3;stroke:#262626;stroke-opacity:1;stroke-dasharray:none;paint-order:stroke fill markers;fill:#ffffff;fill-opacity:1" /></svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="32"
height="32"
viewBox="0 0 32 32"
fill="none"
version="1.1"
id="svg7234"
sodipodi:docname="land-at-point.svg"
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<metadata
id="metadata6">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs7238" />
<sodipodi:namedview
id="namedview7236"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="26.15625"
inkscape:cx="13.897252"
inkscape:cy="24.678614"
inkscape:window-width="1920"
inkscape:window-height="1009"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg7234"
inkscape:pageshadow="2"
width="512px" />
<path
style="fill:#000000;fill-opacity:1;stroke:#262626;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 20.163947,29.662551 h 9.526948"
id="path855-4" />
<path
inkscape:connector-curvature="0"
d="m 21.833087,20.671918 c 0,-0.299894 0.223466,-0.542181 0.500066,-0.542181 H 28.3339 c 0.276597,0 0.500063,0.242287 0.500063,0.542181 0,0.299894 -0.223466,0.542178 -0.500063,0.542178 h -2.500313 v 1.08436 h 0.500063 c 1.381422,0 2.500313,1.213127 2.500313,2.710899 v 1.084359 c 0,0.299893 -0.223466,0.542181 -0.500063,0.542181 h -2.500313 -1.000123 c -0.314105,0 -0.611013,-0.16096 -0.800101,-0.433743 l -1.115766,-1.612987 c -0.05469,-0.07963 -0.1297,-0.140626 -0.21409,-0.177901 l -2.133075,-0.925096 c -0.148459,-0.06438 -0.260972,-0.203317 -0.300037,-0.372749 l -0.35942,-1.562154 c -0.04063,-0.171125 0.0797,-0.337169 0.242217,-0.337169 h 0.429743 c 0.157829,0 0.306285,0.07963 0.400048,0.216874 l 0.600075,0.867486 h 3.250406 v -1.08436 h -2.500311 c -0.2766,0 -0.500066,-0.242284 -0.500066,-0.542178 z m 4.0005,4.879616 h 2.00025 v -0.542179 c 0,-0.897985 -0.671956,-1.626538 -1.500187,-1.626538 h -0.500063 z m 3.853605,1.785804 c 0.195339,0.211791 0.195339,0.555737 0,0.767523 l -0.06094,0.06608 c -0.375048,0.406635 -0.884488,0.635367 -1.41424,0.635367 h -4.378675 c -0.276594,0 -0.500064,-0.242288 -0.500064,-0.542179 0,-0.299893 0.22347,-0.542181 0.500064,-0.542181 h 4.378672 c 0.265657,0 0.520378,-0.113519 0.707902,-0.316836 l 0.06094,-0.06608 c 0.195339,-0.211788 0.512566,-0.211788 0.707902,0 z"
id="path1174-3"
style="fill:#ffffff;fill-opacity:1;stroke:#262626;stroke-width:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.72;stroke-linecap:round;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 20.129381,29.662823 h 9.526948"
id="path855" />
<path
d="M 2.4865894,3.2348193 V 20.790103 c 0,0.5776 0.468708,1.041576 1.0415756,1.041576 0.2982683,0 0.5870705,-0.127832 0.785916,-0.355083 l 3.9106433,-4.474042 2.7507057,5.506148 c 0.374022,0.748041 1.283033,1.051042 2.031074,0.677023 0.748041,-0.374022 1.051042,-1.283033 0.677024,-2.031073 l -2.684426,-5.38305 h 5.591368 c 0.577601,0 1.04631,-0.468711 1.04631,-1.046312 0,-0.298268 -0.127829,-0.582334 -0.35035,-0.781179 L 4.314081,2.4157613 C 4.1105025,2.2358517 3.8548429,2.1364289 3.5849798,2.1364289 c -0.6060096,0 -1.0983904,0.4923807 -1.0983904,1.0983904 z"
id="path1"
style="fill:#ffffff;fill-opacity:1;stroke:#262626;stroke-width:3.89387;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers" />
</svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="32"
height="32"
viewBox="0 0 32 32"
fill="none"
version="1.1"
id="svg7234"
sodipodi:docname="land.svg"
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
xml:space="preserve"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata
id="metadata6"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
id="defs7238" /><sodipodi:namedview
id="namedview7236"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="9.2476309"
inkscape:cx="21.248685"
inkscape:cy="28.818192"
inkscape:window-width="1920"
inkscape:window-height="1009"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg7234"
inkscape:pageshadow="2"
width="512px" /><path
d="M 2.4865894,3.2348193 V 20.790103 c 0,0.5776 0.468708,1.041576 1.0415756,1.041576 0.2982683,0 0.5870705,-0.127832 0.785916,-0.355083 l 3.9106433,-4.474042 2.7507057,5.506148 c 0.374022,0.748041 1.283033,1.051042 2.031074,0.677023 0.748041,-0.374022 1.051042,-1.283033 0.677024,-2.031073 l -2.684426,-5.38305 h 5.591368 c 0.577601,0 1.04631,-0.468711 1.04631,-1.046312 0,-0.298268 -0.127829,-0.582334 -0.35035,-0.781179 L 4.314081,2.4157613 C 4.1105025,2.2358517 3.8548429,2.1364289 3.5849798,2.1364289 c -0.6060096,0 -1.0983904,0.4923807 -1.0983904,1.0983904 z"
id="path1"
style="fill:#ffffff;fill-opacity:1;stroke:#262626;stroke-width:3.89387;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers" /><path
d="m 18.773341,23.399784 -0.0049,-1.594108 c 0,-0.166015 0.153123,-0.288513 0.314309,-0.253054 l 0.573812,0.127334 c 0.170856,0.03707 0.309473,0.159573 0.370724,0.322367 l 0.288514,0.770458 2.051864,0.606049 -0.668908,-2.340384 c -0.04674,-0.164407 0.07737,-0.328815 0.248219,-0.328815 h 0.646346 c 0.186974,0 0.357831,0.09994 0.449705,0.26273 l 1.756897,3.123734 1.727884,0.51095 c 0.256287,0.07576 0.496449,0.201481 0.704374,0.367501 l 0.554471,0.444865 c 0.386842,0.309473 0.291741,0.923581 -0.172464,1.099272 -0.664079,0.251447 -1.3894,0.291742 -2.076047,0.112832 L 20.730078,25.380728 C 20.551166,25.33399 20.388365,25.240502 20.25781,25.108332 l -1.336213,-1.345883 c -0.09509,-0.09671 -0.149902,-0.227271 -0.149902,-0.362662 z m 0.510949,4.530861 h 9.284168 c 0.285293,0 0.515784,0.230493 0.515784,0.51579 0,0.285293 -0.230491,0.515785 -0.515784,0.515785 H 19.28429 c -0.285292,0 -0.515785,-0.230492 -0.515785,-0.515785 0,-0.285297 0.230493,-0.51579 0.515785,-0.51579 z m 1.547363,-1.289462 a 0.515788,0.515788 0 1 1 1.031576,0 0.515788,0.515788 0 1 1 -1.031576,0 z m 2.06315,-0.257896 a 0.51578719,0.51578719 0 1 1 0,1.031574 0.51578719,0.51578719 0 1 1 0,-1.031574 z"
id="path1-1"
style="fill:#ffffff;fill-opacity:1;stroke:#262626;stroke-width:4.52776;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers" /></svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 32 32"
version="1.1"
id="svg1"
sodipodi:docname="pointer.svg"
width="32"
height="32"
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
xml:space="preserve"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs1" /><sodipodi:namedview
id="namedview1"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:zoom="17.964932"
inkscape:cx="30.476041"
inkscape:cy="18.118633"
inkscape:window-width="1920"
inkscape:window-height="1009"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg1" /><!--!Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path
d="m 11.599363,5.5795844 c 0,-0.9804238 0.794101,-1.7745247 1.774526,-1.7745247 0.980424,0 1.774525,0.7941009 1.774525,1.7745247 v 6.5746166 c 0.377087,-0.337159 0.873953,-0.541229 1.419621,-0.541229 0.91388,0 1.69467,0.576721 1.996341,1.384128 0.390394,-0.412575 0.940497,-0.674318 1.55271,-0.674318 1.122385,0 2.040704,0.865081 2.124992,1.965285 0.377087,-0.341594 0.878391,-0.545665 1.424059,-0.545665 1.175623,0 2.129431,0.953809 2.129431,2.129431 v 2.12943 0.709811 2.129431 c 0,3.136472 -2.54201,5.678478 -5.678482,5.678478 h -0.70981 -2.839241 -0.0044 -0.230691 c -0.221815,0 -0.439196,-0.01332 -0.652136,-0.04436 -2.453279,-0.248434 -4.711359,-1.508347 -6.2108361,-3.504689 l -3.1941787,-4.25886 c -0.5900304,-0.78523 -0.4303205,-1.894309 0.354906,-2.484335 0.7852252,-0.590032 1.8943037,-0.430326 2.4843357,0.354904 l 2.4843361,3.313925 z m 4.968672,11.7118696 c 0,-0.390397 -0.319417,-0.709811 -0.70981,-0.709811 -0.390398,0 -0.709811,0.319414 -0.709811,0.709811 v 4.258861 c 0,0.390394 0.319413,0.709811 0.709811,0.709811 0.390393,0 0.70981,-0.319417 0.70981,-0.709811 z m 2.129431,-0.709811 c -0.390397,0 -0.709811,0.319414 -0.709811,0.709811 v 4.258861 c 0,0.390394 0.319414,0.709811 0.709811,0.709811 0.390393,0 0.70981,-0.319417 0.70981,-0.709811 v -4.258861 c 0,-0.390397 -0.319417,-0.709811 -0.70981,-0.709811 z m 3.54905,0.709811 c 0,-0.390397 -0.319416,-0.709811 -0.709809,-0.709811 -0.390397,0 -0.709811,0.319414 -0.709811,0.709811 v 4.258861 c 0,0.390394 0.319414,0.709811 0.709811,0.709811 0.390393,0 0.709809,-0.319417 0.709809,-0.709811 z"
id="path1"
style="stroke:#262626;stroke-width:4;stroke-opacity:1;stroke-dasharray:none;paint-order:stroke fill markers;fill:#ffffff;fill-opacity:1" /></svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="32"
height="32"
viewBox="0 0 32 32"
fill="none"
version="1.1"
id="svg6"
sodipodi:docname="simulate-fire-fight.svg"
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
xml:space="preserve"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs10" /><sodipodi:namedview
id="namedview8"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="6.9333333"
inkscape:cx="13.918269"
inkscape:cy="19.543269"
inkscape:window-width="1920"
inkscape:window-height="1009"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg6"
inkscape:showpageshadow="2"
inkscape:deskcolor="#d1d1d1" /><path
d="m 28.979456,25.337988 c 0,0.149249 -0.122112,0.271363 -0.271363,0.271363 h -1.97247 c -0.09328,0.162818 -0.269668,0.271363 -0.469798,0.271363 h -1.853749 l 0.08989,0.271362 h 0.949771 c 0.149249,0 0.271364,0.122115 0.271364,0.271365 v 0.271363 c 0,0.14925 -0.122115,0.271365 -0.271364,0.271365 h -1.433135 c -0.117026,0 -0.220483,-0.07463 -0.257795,-0.184868 l -0.298499,-0.900587 h -0.452837 v 0.81409 c 0,0.14925 -0.122113,0.271365 -0.271362,0.271365 h -0.271364 c -0.149249,0 -0.271364,-0.122115 -0.271364,-0.271365 v -0.746249 l -1.562032,0.390085 c -0.171298,0.04239 -0.337508,-0.0865 -0.337508,-0.262884 v -1.009131 c 0,-0.14925 0.122114,-0.271363 0.271363,-0.271363 h 1.628177 v -0.271364 c 0,-0.300195 0.242532,-0.542725 0.542728,-0.542725 h 2.442268 c 0.300195,0 0.542726,0.24253 0.542726,0.542725 h 0.542725 c 0.20013,0 0.376517,0.108547 0.469798,0.271364 h 1.701108 c 0,-0.14925 0.122113,-0.271364 0.271362,-0.271364 0.149251,0 0.271363,0.122114 0.271363,0.271364 v 0.271363 z"
style="fill:#000000;fill-opacity:1;stroke:#262626;stroke-width:4.55123;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
id="path14144-2" /><path
d="m 21.203967,22.416054 c 0.430789,0 0.844617,0.120418 1.200782,0.337509 v 5.089755 h -3.256357 v -2.956163 l -0.909067,1.536595 c -0.189953,0.322242 -0.607174,0.429092 -0.929418,0.239137 -0.322244,-0.189953 -0.429093,-0.607174 -0.239138,-0.929418 l 1.292366,-2.184473 c 0.415525,-0.702152 1.170253,-1.132942 1.986039,-1.132942 z m -1.784211,-1.899541 c -3.18e-4,-1.809402 2.713313,-1.809402 2.71363,0 3.16e-4,1.809404 -2.713314,1.809404 -2.71363,0 z"
id="path10805"
style="fill:#ffffff;fill-opacity:1;stroke:#262626;stroke-width:4.55123;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
sodipodi:nodetypes="scccccsccsssss" /><path
d="m 28.980483,25.354632 c 0,0.149249 -0.122111,0.271363 -0.271362,0.271363 H 26.73665 c -0.09327,0.162818 -0.269668,0.271363 -0.469797,0.271363 h -1.853749 l 0.08988,0.271362 h 0.94977 c 0.149249,0 0.271364,0.122115 0.271364,0.271365 v 0.271363 c 0,0.149251 -0.122115,0.271364 -0.271364,0.271364 h -1.433135 c -0.117026,0 -0.220483,-0.07463 -0.257795,-0.184867 L 23.463329,25.897358 H 23.01049 v 0.81409 c 0,0.149251 -0.122113,0.271364 -0.271362,0.271364 h -0.271364 c -0.149249,0 -0.271363,-0.122113 -0.271363,-0.271364 v -0.746249 l -1.562032,0.390085 C 20.46307,26.397674 20.29686,26.268784 20.29686,26.0924 v -1.009131 c 0,-0.14925 0.122114,-0.271363 0.271363,-0.271363 h 1.628178 v -0.271364 c 0,-0.300196 0.242531,-0.542725 0.542727,-0.542725 h 2.442268 c 0.300195,0 0.542726,0.242529 0.542726,0.542725 h 0.542726 c 0.200129,0 0.376516,0.108547 0.469797,0.271364 h 1.701109 c 0,-0.14925 0.122112,-0.271364 0.271362,-0.271364 0.149251,0 0.271362,0.122114 0.271362,0.271364 v 0.271363 z"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4.55123;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
id="path14144-2-6" /><path
d="M 2.355589,3.4924409 V 21.047724 c 0,0.5776 0.468708,1.041576 1.0415756,1.041576 0.2982683,0 0.5870705,-0.127832 0.785916,-0.355083 l 3.9106436,-4.474041 2.7507058,5.506147 c 0.374022,0.748041 1.283033,1.051042 2.031074,0.677023 0.748041,-0.374022 1.051042,-1.283033 0.677024,-2.031073 l -2.684426,-5.383049 h 5.591368 c 0.577601,0 1.04631,-0.468711 1.04631,-1.046312 0,-0.298268 -0.127829,-0.582334 -0.35035,-0.781179 L 4.1830806,2.6733829 C 3.9795021,2.4934733 3.7238425,2.3940505 3.4539794,2.3940505 c -0.6060096,0 -1.0983904,0.4923807 -1.0983904,1.0983904 z"
id="path1"
style="fill:#ffffff;fill-opacity:1;stroke:#262626;stroke-width:3.89387;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers" /></svg>

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="32"
height="32"
viewBox="0 0 32 32"
fill="none"
version="1.1"
id="svg7234"
sodipodi:docname="smoke-blue.svg"
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
xml:space="preserve"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata
id="metadata6"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
id="defs7238" /><sodipodi:namedview
id="namedview7236"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="22.627417"
inkscape:cx="26.229242"
inkscape:cy="24.417281"
inkscape:window-width="1920"
inkscape:window-height="1009"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg7234"
inkscape:pageshadow="2"
width="512px" /><path
d="M 2.4865894,3.2348193 V 20.790103 c 0,0.5776 0.468708,1.041576 1.0415756,1.041576 0.2982683,0 0.5870705,-0.127832 0.785916,-0.355083 l 3.9106433,-4.474042 2.7507057,5.506148 c 0.374022,0.748041 1.283033,1.051042 2.031074,0.677023 0.748041,-0.374022 1.051042,-1.283033 0.677024,-2.031073 l -2.684426,-5.38305 h 5.591368 c 0.577601,0 1.04631,-0.468711 1.04631,-1.046312 0,-0.298268 -0.127829,-0.582334 -0.35035,-0.781179 L 4.314081,2.4157613 C 4.1105025,2.2358517 3.8548429,2.1364289 3.5849798,2.1364289 c -0.6060096,0 -1.0983904,0.4923807 -1.0983904,1.0983904 z"
id="path1"
style="fill:#ffffff;fill-opacity:1;stroke:#262626;stroke-width:3.89387;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers" /><path
d="m 18.424492,22.506882 c 0,1.406974 1.141506,2.548481 2.548481,2.548481 h 2.182136 c 0.39997,0.352186 0.923824,0.566329 1.499003,0.566329 0.575176,0 1.099032,-0.214143 1.499002,-0.566329 h 0.483149 c 1.095493,0 1.982152,-0.88666 1.982152,-1.982151 0,-1.095492 -0.886659,-1.982152 -1.982152,-1.982152 -0.189365,0 -0.371652,0.02655 -0.545092,0.0761 -0.378732,-0.71853 -1.134428,-1.208759 -2.003389,-1.208759 -0.576947,0 -1.10434,0.215913 -1.506081,0.571638 -0.438906,-0.357494 -0.998154,-0.571638 -1.608728,-0.571638 -1.406975,0 -2.548481,1.141507 -2.548481,2.548481 z m 10.335506,3.964303 h -5.946455 c -0.235382,0 -0.424747,0.189366 -0.424747,0.424748 0,0.235381 0.189365,0.424747 0.424747,0.424747 h 5.946455 c 0.235381,0 0.424746,-0.189366 0.424746,-0.424747 0,-0.235382 -0.189365,-0.424748 -0.424746,-0.424748 z m -1.132658,1.698988 h -1.982153 c -0.235381,0 -0.424747,0.189366 -0.424747,0.424747 0,0.235381 0.189366,0.424746 0.424747,0.424746 h 1.982153 c 0.235381,0 0.424746,-0.189365 0.424746,-0.424746 0,-0.235381 -0.189365,-0.424747 -0.424746,-0.424747 z m -3.397974,0 H 18.28291 c -0.235381,0 -0.424747,0.189366 -0.424747,0.424747 0,0.235381 0.189366,0.424746 0.424747,0.424746 h 5.946456 c 0.235379,0 0.424746,-0.189365 0.424746,-0.424746 0,-0.235381 -0.189367,-0.424747 -0.424746,-0.424747 z m -2.4069,-1.27424 c 0,-0.235382 -0.189367,-0.424748 -0.424746,-0.424748 h -1.84057 c -0.235381,0 -0.424746,0.189366 -0.424746,0.424748 0,0.235381 0.189365,0.424747 0.424746,0.424747 h 1.84057 c 0.235379,0 0.424746,-0.189366 0.424746,-0.424747 z"
id="path1-5"
style="fill:#3438ff;fill-opacity:1;stroke:#262626;stroke-width:2.99546;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers" /></svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="32"
height="32"
viewBox="0 0 32 32"
fill="none"
version="1.1"
id="svg7234"
sodipodi:docname="smoke-green.svg"
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
xml:space="preserve"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata
id="metadata6"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
id="defs7238" /><sodipodi:namedview
id="namedview7236"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="22.627417"
inkscape:cx="26.229242"
inkscape:cy="24.417281"
inkscape:window-width="1920"
inkscape:window-height="1009"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg7234"
inkscape:pageshadow="2"
width="512px" /><path
d="M 2.4865894,3.2348193 V 20.790103 c 0,0.5776 0.468708,1.041576 1.0415756,1.041576 0.2982683,0 0.5870705,-0.127832 0.785916,-0.355083 l 3.9106433,-4.474042 2.7507057,5.506148 c 0.374022,0.748041 1.283033,1.051042 2.031074,0.677023 0.748041,-0.374022 1.051042,-1.283033 0.677024,-2.031073 l -2.684426,-5.38305 h 5.591368 c 0.577601,0 1.04631,-0.468711 1.04631,-1.046312 0,-0.298268 -0.127829,-0.582334 -0.35035,-0.781179 L 4.314081,2.4157613 C 4.1105025,2.2358517 3.8548429,2.1364289 3.5849798,2.1364289 c -0.6060096,0 -1.0983904,0.4923807 -1.0983904,1.0983904 z"
id="path1"
style="fill:#ffffff;fill-opacity:1;stroke:#262626;stroke-width:3.89387;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers" /><path
d="m 18.424492,22.506882 c 0,1.406974 1.141506,2.548481 2.548481,2.548481 h 2.182136 c 0.39997,0.352186 0.923824,0.566329 1.499003,0.566329 0.575176,0 1.099032,-0.214143 1.499002,-0.566329 h 0.483149 c 1.095493,0 1.982152,-0.88666 1.982152,-1.982151 0,-1.095492 -0.886659,-1.982152 -1.982152,-1.982152 -0.189365,0 -0.371652,0.02655 -0.545092,0.0761 -0.378732,-0.71853 -1.134428,-1.208759 -2.003389,-1.208759 -0.576947,0 -1.10434,0.215913 -1.506081,0.571638 -0.438906,-0.357494 -0.998154,-0.571638 -1.608728,-0.571638 -1.406975,0 -2.548481,1.141507 -2.548481,2.548481 z m 10.335506,3.964303 h -5.946455 c -0.235382,0 -0.424747,0.189366 -0.424747,0.424748 0,0.235381 0.189365,0.424747 0.424747,0.424747 h 5.946455 c 0.235381,0 0.424746,-0.189366 0.424746,-0.424747 0,-0.235382 -0.189365,-0.424748 -0.424746,-0.424748 z m -1.132658,1.698988 h -1.982153 c -0.235381,0 -0.424747,0.189366 -0.424747,0.424747 0,0.235381 0.189366,0.424746 0.424747,0.424746 h 1.982153 c 0.235381,0 0.424746,-0.189365 0.424746,-0.424746 0,-0.235381 -0.189365,-0.424747 -0.424746,-0.424747 z m -3.397974,0 H 18.28291 c -0.235381,0 -0.424747,0.189366 -0.424747,0.424747 0,0.235381 0.189366,0.424746 0.424747,0.424746 h 5.946456 c 0.235379,0 0.424746,-0.189365 0.424746,-0.424746 0,-0.235381 -0.189367,-0.424747 -0.424746,-0.424747 z m -2.4069,-1.27424 c 0,-0.235382 -0.189367,-0.424748 -0.424746,-0.424748 h -1.84057 c -0.235381,0 -0.424746,0.189366 -0.424746,0.424748 0,0.235381 0.189365,0.424747 0.424746,0.424747 h 1.84057 c 0.235379,0 0.424746,-0.189366 0.424746,-0.424747 z"
id="path1-5"
style="fill:#00b208;fill-opacity:1;stroke:#262626;stroke-width:2.99546;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers" /></svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="32"
height="32"
viewBox="0 0 32 32"
fill="none"
version="1.1"
id="svg7234"
sodipodi:docname="smoke-orange.svg"
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
xml:space="preserve"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata
id="metadata6"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
id="defs7238" /><sodipodi:namedview
id="namedview7236"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="22.627417"
inkscape:cx="26.229242"
inkscape:cy="24.417281"
inkscape:window-width="1920"
inkscape:window-height="1009"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg7234"
inkscape:pageshadow="2"
width="512px" /><path
d="M 2.4865894,3.2348193 V 20.790103 c 0,0.5776 0.468708,1.041576 1.0415756,1.041576 0.2982683,0 0.5870705,-0.127832 0.785916,-0.355083 l 3.9106433,-4.474042 2.7507057,5.506148 c 0.374022,0.748041 1.283033,1.051042 2.031074,0.677023 0.748041,-0.374022 1.051042,-1.283033 0.677024,-2.031073 l -2.684426,-5.38305 h 5.591368 c 0.577601,0 1.04631,-0.468711 1.04631,-1.046312 0,-0.298268 -0.127829,-0.582334 -0.35035,-0.781179 L 4.314081,2.4157613 C 4.1105025,2.2358517 3.8548429,2.1364289 3.5849798,2.1364289 c -0.6060096,0 -1.0983904,0.4923807 -1.0983904,1.0983904 z"
id="path1"
style="fill:#ffffff;fill-opacity:1;stroke:#262626;stroke-width:3.89387;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers" /><path
d="m 18.424492,22.506882 c 0,1.406974 1.141506,2.548481 2.548481,2.548481 h 2.182136 c 0.39997,0.352186 0.923824,0.566329 1.499003,0.566329 0.575176,0 1.099032,-0.214143 1.499002,-0.566329 h 0.483149 c 1.095493,0 1.982152,-0.88666 1.982152,-1.982151 0,-1.095492 -0.886659,-1.982152 -1.982152,-1.982152 -0.189365,0 -0.371652,0.02655 -0.545092,0.0761 -0.378732,-0.71853 -1.134428,-1.208759 -2.003389,-1.208759 -0.576947,0 -1.10434,0.215913 -1.506081,0.571638 -0.438906,-0.357494 -0.998154,-0.571638 -1.608728,-0.571638 -1.406975,0 -2.548481,1.141507 -2.548481,2.548481 z m 10.335506,3.964303 h -5.946455 c -0.235382,0 -0.424747,0.189366 -0.424747,0.424748 0,0.235381 0.189365,0.424747 0.424747,0.424747 h 5.946455 c 0.235381,0 0.424746,-0.189366 0.424746,-0.424747 0,-0.235382 -0.189365,-0.424748 -0.424746,-0.424748 z m -1.132658,1.698988 h -1.982153 c -0.235381,0 -0.424747,0.189366 -0.424747,0.424747 0,0.235381 0.189366,0.424746 0.424747,0.424746 h 1.982153 c 0.235381,0 0.424746,-0.189365 0.424746,-0.424746 0,-0.235381 -0.189365,-0.424747 -0.424746,-0.424747 z m -3.397974,0 H 18.28291 c -0.235381,0 -0.424747,0.189366 -0.424747,0.424747 0,0.235381 0.189366,0.424746 0.424747,0.424746 h 5.946456 c 0.235379,0 0.424746,-0.189365 0.424746,-0.424746 0,-0.235381 -0.189367,-0.424747 -0.424746,-0.424747 z m -2.4069,-1.27424 c 0,-0.235382 -0.189367,-0.424748 -0.424746,-0.424748 h -1.84057 c -0.235381,0 -0.424746,0.189366 -0.424746,0.424748 0,0.235381 0.189365,0.424747 0.424746,0.424747 h 1.84057 c 0.235379,0 0.424746,-0.189366 0.424746,-0.424747 z"
id="path1-5"
style="fill:#e58900;fill-opacity:1;stroke:#262626;stroke-width:2.99546;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers" /></svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="32"
height="32"
viewBox="0 0 32 32"
fill="none"
version="1.1"
id="svg7234"
sodipodi:docname="smoke-red.svg"
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
xml:space="preserve"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata
id="metadata6"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
id="defs7238" /><sodipodi:namedview
id="namedview7236"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="22.627417"
inkscape:cx="26.229242"
inkscape:cy="24.417281"
inkscape:window-width="1920"
inkscape:window-height="1009"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg7234"
inkscape:pageshadow="2"
width="512px" /><path
d="M 2.4865894,3.2348193 V 20.790103 c 0,0.5776 0.468708,1.041576 1.0415756,1.041576 0.2982683,0 0.5870705,-0.127832 0.785916,-0.355083 l 3.9106433,-4.474042 2.7507057,5.506148 c 0.374022,0.748041 1.283033,1.051042 2.031074,0.677023 0.748041,-0.374022 1.051042,-1.283033 0.677024,-2.031073 l -2.684426,-5.38305 h 5.591368 c 0.577601,0 1.04631,-0.468711 1.04631,-1.046312 0,-0.298268 -0.127829,-0.582334 -0.35035,-0.781179 L 4.314081,2.4157613 C 4.1105025,2.2358517 3.8548429,2.1364289 3.5849798,2.1364289 c -0.6060096,0 -1.0983904,0.4923807 -1.0983904,1.0983904 z"
id="path1"
style="fill:#ffffff;fill-opacity:1;stroke:#262626;stroke-width:3.89387;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers" /><path
d="m 18.424492,22.506882 c 0,1.406974 1.141506,2.548481 2.548481,2.548481 h 2.182136 c 0.39997,0.352186 0.923824,0.566329 1.499003,0.566329 0.575176,0 1.099032,-0.214143 1.499002,-0.566329 h 0.483149 c 1.095493,0 1.982152,-0.88666 1.982152,-1.982151 0,-1.095492 -0.886659,-1.982152 -1.982152,-1.982152 -0.189365,0 -0.371652,0.02655 -0.545092,0.0761 -0.378732,-0.71853 -1.134428,-1.208759 -2.003389,-1.208759 -0.576947,0 -1.10434,0.215913 -1.506081,0.571638 -0.438906,-0.357494 -0.998154,-0.571638 -1.608728,-0.571638 -1.406975,0 -2.548481,1.141507 -2.548481,2.548481 z m 10.335506,3.964303 h -5.946455 c -0.235382,0 -0.424747,0.189366 -0.424747,0.424748 0,0.235381 0.189365,0.424747 0.424747,0.424747 h 5.946455 c 0.235381,0 0.424746,-0.189366 0.424746,-0.424747 0,-0.235382 -0.189365,-0.424748 -0.424746,-0.424748 z m -1.132658,1.698988 h -1.982153 c -0.235381,0 -0.424747,0.189366 -0.424747,0.424747 0,0.235381 0.189366,0.424746 0.424747,0.424746 h 1.982153 c 0.235381,0 0.424746,-0.189365 0.424746,-0.424746 0,-0.235381 -0.189365,-0.424747 -0.424746,-0.424747 z m -3.397974,0 H 18.28291 c -0.235381,0 -0.424747,0.189366 -0.424747,0.424747 0,0.235381 0.189366,0.424746 0.424747,0.424746 h 5.946456 c 0.235379,0 0.424746,-0.189365 0.424746,-0.424746 0,-0.235381 -0.189367,-0.424747 -0.424746,-0.424747 z m -2.4069,-1.27424 c 0,-0.235382 -0.189367,-0.424748 -0.424746,-0.424748 h -1.84057 c -0.235381,0 -0.424746,0.189366 -0.424746,0.424748 0,0.235381 0.189365,0.424747 0.424746,0.424747 h 1.84057 c 0.235379,0 0.424746,-0.189366 0.424746,-0.424747 z"
id="path1-5"
style="fill:#ff3434;fill-opacity:1;stroke:#262626;stroke-width:2.99546;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers" /></svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="32"
height="32"
viewBox="0 0 32 32"
fill="none"
version="1.1"
id="svg7234"
sodipodi:docname="smoke-white.svg"
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
xml:space="preserve"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata
id="metadata6"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
id="defs7238" /><sodipodi:namedview
id="namedview7236"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="22.627417"
inkscape:cx="26.229242"
inkscape:cy="24.417281"
inkscape:window-width="1920"
inkscape:window-height="1009"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg7234"
inkscape:pageshadow="2"
width="512px" /><path
d="M 2.4865894,3.2348193 V 20.790103 c 0,0.5776 0.468708,1.041576 1.0415756,1.041576 0.2982683,0 0.5870705,-0.127832 0.785916,-0.355083 l 3.9106433,-4.474042 2.7507057,5.506148 c 0.374022,0.748041 1.283033,1.051042 2.031074,0.677023 0.748041,-0.374022 1.051042,-1.283033 0.677024,-2.031073 l -2.684426,-5.38305 h 5.591368 c 0.577601,0 1.04631,-0.468711 1.04631,-1.046312 0,-0.298268 -0.127829,-0.582334 -0.35035,-0.781179 L 4.314081,2.4157613 C 4.1105025,2.2358517 3.8548429,2.1364289 3.5849798,2.1364289 c -0.6060096,0 -1.0983904,0.4923807 -1.0983904,1.0983904 z"
id="path1"
style="fill:#ffffff;fill-opacity:1;stroke:#262626;stroke-width:3.89387;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers" /><path
d="m 18.424492,22.506882 c 0,1.406974 1.141506,2.548481 2.548481,2.548481 h 2.182136 c 0.39997,0.352186 0.923824,0.566329 1.499003,0.566329 0.575176,0 1.099032,-0.214143 1.499002,-0.566329 h 0.483149 c 1.095493,0 1.982152,-0.88666 1.982152,-1.982151 0,-1.095492 -0.886659,-1.982152 -1.982152,-1.982152 -0.189365,0 -0.371652,0.02655 -0.545092,0.0761 -0.378732,-0.71853 -1.134428,-1.208759 -2.003389,-1.208759 -0.576947,0 -1.10434,0.215913 -1.506081,0.571638 -0.438906,-0.357494 -0.998154,-0.571638 -1.608728,-0.571638 -1.406975,0 -2.548481,1.141507 -2.548481,2.548481 z m 10.335506,3.964303 h -5.946455 c -0.235382,0 -0.424747,0.189366 -0.424747,0.424748 0,0.235381 0.189365,0.424747 0.424747,0.424747 h 5.946455 c 0.235381,0 0.424746,-0.189366 0.424746,-0.424747 0,-0.235382 -0.189365,-0.424748 -0.424746,-0.424748 z m -1.132658,1.698988 h -1.982153 c -0.235381,0 -0.424747,0.189366 -0.424747,0.424747 0,0.235381 0.189366,0.424746 0.424747,0.424746 h 1.982153 c 0.235381,0 0.424746,-0.189365 0.424746,-0.424746 0,-0.235381 -0.189365,-0.424747 -0.424746,-0.424747 z m -3.397974,0 H 18.28291 c -0.235381,0 -0.424747,0.189366 -0.424747,0.424747 0,0.235381 0.189366,0.424746 0.424747,0.424746 h 5.946456 c 0.235379,0 0.424746,-0.189365 0.424746,-0.424746 0,-0.235381 -0.189367,-0.424747 -0.424746,-0.424747 z m -2.4069,-1.27424 c 0,-0.235382 -0.189367,-0.424748 -0.424746,-0.424748 h -1.84057 c -0.235381,0 -0.424746,0.189366 -0.424746,0.424748 0,0.235381 0.189365,0.424747 0.424746,0.424747 h 1.84057 c 0.235379,0 0.424746,-0.189366 0.424746,-0.424747 z"
id="path1-5"
style="fill:#ffffff;fill-opacity:1;stroke:#262626;stroke-width:2.99546;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers" /></svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@ -44,7 +44,6 @@ export class AudioManager {
/* The audio backend must be manually started so that the browser can detect the user is enabling audio.
Otherwise, no playback will be performed. */
#running: boolean = false;
#address: string = "localhost";
#port: number;
#endpoint: string;
#socket: WebSocket | null = null;
@ -90,18 +89,17 @@ export class AudioManager {
this.#playbackPipeline = new PlaybackPipeline();
/* Connect the audio websocket */
let res = this.#address.match(/(?:http|https):\/\/(.+):/);
if (res === null) res = this.#address.match(/(?:http|https):\/\/(.+)/);
let res = location.toString().match(/(?:http|https):\/\/(.+):/);
if (res === null) res = location.toString().match(/(?:http|https):\/\/(.+)/);
let wsAddress = res ? res[1] : this.#address;
if (this.#endpoint) this.#socket = new WebSocket(`wss://${wsAddress}${this.#endpoint}`);
let wsAddress = res ? res[1] : location.toString();
if (wsAddress.at(wsAddress.length - 1) === "/") wsAddress = wsAddress.substring(0, wsAddress.length - 2)
if (this.#endpoint) this.#socket = new WebSocket(`wss://${wsAddress}/${this.#endpoint}`);
else if (this.#port) this.#socket = new WebSocket(`ws://${wsAddress}:${this.#port}`);
else console.error("The audio backend was enabled but no port/endpoint was provided in the configuration");
if (!this.#socket) return;
this.#socket = new WebSocket(`wss://refugees.dcsolympus.com/audio`); // TODO: remove, used for testing!
/* Log the opening of the connection */
this.#socket.addEventListener("open", (event) => {
console.log("Connection to audio websocket successfull");
@ -229,10 +227,6 @@ export class AudioManager {
AudioManagerStateChangedEvent.dispatch(this.#running);
}
setAddress(address) {
this.#address = address;
}
setPort(port) {
this.#port = port;
}

View File

@ -15,7 +15,7 @@ export class SpeechController {
body: JSON.stringify({ data: base64 }), // Send the data in blob format
};
fetch(getApp().getExpressAddress() + `/api/speech/recognize`, requestOptions)
fetch(`./api/speech/recognize`, requestOptions)
.then((response) => {
if (response.status === 200) {
console.log(`Speech recognized correctly`);

View File

@ -30,7 +30,7 @@ export class TextToSpeechSource extends AudioSource {
this.#loading = true;
fetch(getApp().getExpressAddress() + `/api/speech/generate`, requestOptions)
fetch(`./api/speech/generate`, requestOptions)
.then((response) => {
if (response.status === 200) {
console.log(`Text to speech generate correctly`);

View File

@ -3,6 +3,7 @@ import { Coalition, MapOptions } from "../types/types";
import { CommandModeOptions } from "../interfaces";
import { ContextAction } from "../unit/contextaction";
import {
faClone,
faExplosion,
faHand,
faLocationCrosshairs,
@ -264,12 +265,12 @@ export const mapBounds = {
export const defaultMapMirrors = {};
export const defaultMapLayers = {
"AWACS": {
"urlTemplate": 'https://abcd.basemaps.cartocdn.com/dark_nolabels/{z}/{x}/{y}{r}.png',
"minZoom": 1,
"maxZoom": 19,
"attribution": `&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors &copy; <a href="https://carto.com/attributions">CARTO</a>'`
},
AWACS: {
urlTemplate: "https://abcd.basemaps.cartocdn.com/dark_nolabels/{z}/{x}/{y}{r}.png",
minZoom: 1,
maxZoom: 19,
attribution: `&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors &copy; <a href="https://carto.com/attributions">CARTO</a>'`,
},
};
export enum OlympusState {
@ -286,7 +287,7 @@ export enum OlympusState {
OPTIONS = "Options",
AUDIO = "Audio",
AIRBASE = "Airbase",
GAME_MASTER = "Game master"
GAME_MASTER = "Game master",
}
export const NO_SUBSTATE = "No substate";
@ -304,7 +305,7 @@ export enum LoginSubState {
NO_SUBSTATE = "No substate",
CREDENTIALS = "Credentials",
COMMAND_MODE = "Command mode",
CONNECT = "Connect"
CONNECT = "Connect",
}
export enum DrawSubState {
@ -359,7 +360,7 @@ export const MAP_OPTIONS_DEFAULTS: MapOptions = {
cameraPluginMode: "map",
tabletMode: false,
AWACSMode: false,
AWACSCoalition: "blue"
AWACSCoalition: "blue",
};
export const MAP_HIDDEN_TYPES_DEFAULTS = {
@ -602,9 +603,7 @@ export namespace ContextActions {
ContextActionTarget.POINT,
(units: Unit[], _, targetPosition: LatLng | null) => {
if (targetPosition)
getApp()
.getUnitsManager()
.bombPoint(targetPosition, getApp().getMap().getKeepRelativePositions(), getApp().getMap().getDestinationRotation(), units);
getApp().getUnitsManager().bombPoint(targetPosition, getApp().getMap().getKeepRelativePositions(), getApp().getMap().getDestinationRotation(), units);
},
{ type: ContextActionType.ENGAGE, code: "KeyB", ctrlKey: false, shiftKey: false }
);
@ -617,11 +616,9 @@ export namespace ContextActions {
ContextActionTarget.POINT,
(units: Unit[], _, targetPosition: LatLng | null) => {
if (targetPosition)
getApp()
.getUnitsManager()
.carpetBomb(targetPosition, getApp().getMap().getKeepRelativePositions(), getApp().getMap().getDestinationRotation(), units);
getApp().getUnitsManager().carpetBomb(targetPosition, getApp().getMap().getKeepRelativePositions(), getApp().getMap().getDestinationRotation(), units);
},
{ type: ContextActionType.ENGAGE, code: "KeyC", ctrlKey: false, shiftKey: false }
{ type: ContextActionType.ENGAGE, code: "KeyH", ctrlKey: false, shiftKey: false }
);
export const LAND = new ContextAction(
@ -644,9 +641,7 @@ export namespace ContextActions {
ContextActionTarget.POINT,
(units: Unit[], _, targetPosition: LatLng | null) => {
if (targetPosition)
getApp()
.getUnitsManager()
.landAtPoint(targetPosition, getApp().getMap().getKeepRelativePositions(), getApp().getMap().getDestinationRotation(), units);
getApp().getUnitsManager().landAtPoint(targetPosition, getApp().getMap().getKeepRelativePositions(), getApp().getMap().getDestinationRotation(), units);
},
{ type: ContextActionType.ADMIN, code: "KeyK", ctrlKey: false, shiftKey: false }
);
@ -660,7 +655,7 @@ export namespace ContextActions {
(units: Unit[], _1, _2) => {
getApp().getUnitsManager().createGroup(units);
},
{ type: ContextActionType.OTHER, code: "KeyG", ctrlKey: false, shiftKey: false, altKey: false }
{ type: ContextActionType.OTHER, code: "KeyG", ctrlKey: false, shiftKey: false, altKey: false }
);
export const ATTACK = new ContextAction(
@ -683,9 +678,7 @@ export namespace ContextActions {
ContextActionTarget.POINT,
(units: Unit[], _, targetPosition: LatLng | null) => {
if (targetPosition)
getApp()
.getUnitsManager()
.fireAtArea(targetPosition, getApp().getMap().getKeepRelativePositions(), getApp().getMap().getDestinationRotation(), units);
getApp().getUnitsManager().fireAtArea(targetPosition, getApp().getMap().getKeepRelativePositions(), getApp().getMap().getDestinationRotation(), units);
},
{ type: ContextActionType.ENGAGE, code: "KeyV", ctrlKey: false, shiftKey: false }
);
@ -714,6 +707,19 @@ export namespace ContextActions {
(units: Unit[], _1, _2) => {
getApp().getUnitsManager().setAWACSReference(units[0].ID);
},
{ type: ContextActionType.ADMIN, code: "KeyU", ctrlKey: false, shiftKey: false, altKey: false }
{ type: ContextActionType.ADMIN, code: "KeyU", ctrlKey: false, shiftKey: false, altKey: false }
);
export const CLONE = new ContextAction(
"clone",
"Clone unit",
"Clone the unit at the given location",
faClone,
ContextActionTarget.POINT,
(units: Unit[], _1, targetPosition) => {
getApp().getUnitsManager().copy(units);
if (targetPosition) getApp().getUnitsManager().paste(targetPosition);
},
{ type: ContextActionType.ADMIN, code: "KeyC", ctrlKey: false, shiftKey: false, altKey: false }
);
}

View File

@ -1,7 +1,7 @@
import { AudioSink } from "./audio/audiosink";
import { AudioSource } from "./audio/audiosource";
import { OlympusState, OlympusSubState } from "./constants/constants";
import { CommandModeOptions, OlympusConfig, ServerStatus, SessionData, SpawnRequestTable } from "./interfaces";
import { CommandModeOptions, OlympusConfig, ServerStatus, SessionData, SpawnRequestTable, UnitData } from "./interfaces";
import { CoalitionCircle } from "./map/coalitionarea/coalitioncircle";
import { CoalitionPolygon } from "./map/coalitionarea/coalitionpolygon";
import { Airbase } from "./mission/airbase";
@ -242,6 +242,32 @@ export class AirbaseSelectedEvent {
}
}
export class SelectionEnabledChangedEvent {
static on(callback: (enabled: boolean) => void) {
document.addEventListener(this.name, (ev: CustomEventInit) => {
callback(ev.detail.enabled);
});
}
static dispatch(enabled: boolean) {
document.dispatchEvent(new CustomEvent(this.name, { detail: { enabled } }));
console.log(`Event ${this.name} dispatched`);
}
};
export class PasteEnabledChangedEvent {
static on(callback: (enabled: boolean) => void) {
document.addEventListener(this.name, (ev: CustomEventInit) => {
callback(ev.detail.enabled);
});
}
static dispatch(enabled: boolean) {
document.dispatchEvent(new CustomEvent(this.name, { detail: { enabled } }));
console.log(`Event ${this.name} dispatched`);
}
};
export class ContactsUpdatedEvent {
static on(callback: () => void) {
document.addEventListener(this.name, (ev: CustomEventInit) => {
@ -281,6 +307,19 @@ export class ContextActionChangedEvent {
}
}
export class CopiedUnitsEvents {
static on(callback: (unitsData: UnitData[]) => void) {
document.addEventListener(this.name, (ev: CustomEventInit) => {
callback(ev.detail.unitsData);
});
}
static dispatch(unitsData: UnitData[]) {
document.dispatchEvent(new CustomEvent(this.name, { detail: { unitsData } }));
console.log(`Event ${this.name} dispatched`);
}
}
export class UnitUpdatedEvent extends BaseUnitEvent {
static dispatch(unit: Unit) {
document.dispatchEvent(new CustomEvent(this.name, { detail: { unit } }));

View File

@ -46,7 +46,7 @@ export var BoxSelect = Handler.extend({
},
_onMouseDown: function (e: any) {
if (this._map.getEnableSelection() && e.button == 0) {
if (this._map.getSelectionEnabled() && e.button == 0) {
// Clear the deferred resetState if it hasn't executed yet, otherwise it
// will interrupt the interaction and orphan a box element in the container.
this._clearDeferredResetState();

View File

@ -53,7 +53,9 @@ import {
MapOptionsChangedEvent,
MapSourceChangedEvent,
MouseMovedEvent,
PasteEnabledChangedEvent,
SelectionClearedEvent,
SelectionEnabledChangedEvent,
SpawnContextMenuRequestEvent,
StarredSpawnsChangedEvent,
UnitDeselectedEvent,
@ -113,7 +115,8 @@ export class Map extends L.Map {
#lastMouseCoordinates: L.LatLng = new L.LatLng(0, 0);
#previousZoom: number = 0;
#keepRelativePositions: boolean = false;
#enableSelection: boolean = false;
#selectionEnabled: boolean = false;
#pasteEnabled: boolean = false;
/* Camera control plugin */
#slaveDCSCamera: boolean = false;
@ -363,10 +366,10 @@ export class Map extends L.Map {
shiftKey: false,
ctrlKey: false,
})
.addShortcut("toggleEnableSelection", {
.addShortcut("toggleSelectionEnabled", {
label: "Toggle box selection",
keyUpCallback: () => this.setEnableSelection(false),
keyDownCallback: () => this.setEnableSelection(true),
keyUpCallback: () => this.setSelectionEnabled(false),
keyDownCallback: () => this.setSelectionEnabled(true),
code: "ShiftLeft",
altKey: false,
ctrlKey: false,
@ -542,6 +545,10 @@ export class Map extends L.Map {
return Object.keys(this.#mapLayers);
}
getMirrors() {
return this.#mapMirrors;
}
setSpawnRequestTable(spawnRequestTable: SpawnRequestTable) {
this.#spawnRequestTable = spawnRequestTable;
}
@ -574,6 +581,20 @@ export class Map extends L.Map {
}
setContextAction(contextAction: ContextAction | null) {
if (this.#contextAction) {
this.getContainer().classList.remove(`${this.#contextAction.getId()}-cursor`);
Object.values(getApp().getUnitsManager().getUnits()).forEach((unit) => {
unit.getElement()?.querySelector(`[data-object|="unit"]`)?.classList.remove(`${this.#contextAction?.getId()}-cursor`);
});
}
if (contextAction) {
this.getContainer().classList.add(`${contextAction.getId()}-cursor`);
Object.values(getApp().getUnitsManager().getUnits()).forEach((unit) => {
unit.getElement()?.querySelector(`[data-object|="unit"]`)?.classList.add(`${contextAction.getId()}-cursor`);
});
}
this.#contextAction = contextAction;
ContextActionChangedEvent.dispatch(this.#contextAction);
}
@ -737,12 +758,22 @@ export class Map extends L.Map {
return this.#keepRelativePositions;
}
setEnableSelection(enableSelection: boolean) {
this.#enableSelection = enableSelection;
setSelectionEnabled(selectionEnabled: boolean) {
this.#selectionEnabled = selectionEnabled;
SelectionEnabledChangedEvent.dispatch(selectionEnabled)
}
getEnableSelection() {
return this.#enableSelection;
getSelectionEnabled() {
return this.#selectionEnabled;
}
setPasteEnabled(pasteEnabled: boolean) {
this.#pasteEnabled = pasteEnabled;
PasteEnabledChangedEvent.dispatch(pasteEnabled)
}
getPasteEnabled() {
return this.#pasteEnabled;
}
increaseCameraZoom() {
@ -787,8 +818,15 @@ export class Map extends L.Map {
this.#currentSpawnMarker = null;
this.#currentEffectMarker?.removeFrom(this);
this.#currentEffectMarker = null;
if (state !== OlympusState.UNIT_CONTROL) getApp().getUnitsManager().deselectAllUnits();
if (state !== OlympusState.UNIT_CONTROL) {
getApp().getUnitsManager().deselectAllUnits();
this.setContextAction(null);
this.setContextActionSet(null);
}
if (state !== OlympusState.DRAW || (state === OlympusState.DRAW && subState !== DrawSubState.EDIT)) this.deselectAllCoalitionAreas();
this.getContainer().classList.remove(`explosion-cursor`);
["white", "blue", "red", "green", "orange"].forEach((color) => this.getContainer().classList.remove(`smoke-${color}-cursor`));
/* Operations to perform when entering a state */
if (state === OlympusState.IDLE) {
@ -806,10 +844,11 @@ export class Map extends L.Map {
} else if (subState === SpawnSubState.SPAWN_EFFECT) {
console.log(`Effect request table:`);
console.log(this.#effectRequestTable);
if (this.#effectRequestTable?.type === "explosion") this.#currentEffectMarker = new ExplosionMarker(new L.LatLng(0, 0));
else if (this.#effectRequestTable?.type === "smoke")
this.#currentEffectMarker = new SmokeMarker(new L.LatLng(0, 0), this.#effectRequestTable.smokeColor ?? "white");
this.#currentEffectMarker?.addTo(this);
if (this.#effectRequestTable?.type === "explosion") {
this.getContainer().classList.add(`explosion-cursor`);
} else if (this.#effectRequestTable?.type === "smoke") {
this.getContainer().classList.add(`smoke-${this.#effectRequestTable?.smokeColor?.toLowerCase()}-cursor`);
}
}
} else if (state === OlympusState.UNIT_CONTROL) {
console.log(`Context action:`);
@ -886,6 +925,10 @@ export class Map extends L.Map {
if (!this.#isSelecting) {
console.log(`Left short click at ${e.latlng}`);
if (this.#pasteEnabled) {
getApp().getUnitsManager().paste(e.latlng)
}
/* Execute the short click action */
if (getApp().getState() === OlympusState.IDLE) {
/* Do nothing */
@ -1001,6 +1044,10 @@ export class Map extends L.Map {
}
getApp().setState(OlympusState.JTAC);
this.#drawIPToTargetLine();
} else if (getApp().getState() === OlympusState.UNIT_CONTROL) {
if (this.#contextAction !== null) this.executeContextAction(null, e.latlng, e.originalEvent);
else if (getApp().getSubState() === NO_SUBSTATE) getApp().setState(OlympusState.IDLE);
else getApp().setState(OlympusState.UNIT_CONTROL);
} else {
if (getApp().getSubState() === NO_SUBSTATE) getApp().setState(OlympusState.IDLE);
else getApp().setState(OlympusState.UNIT_CONTROL);
@ -1019,8 +1066,7 @@ export class Map extends L.Map {
SpawnContextMenuRequestEvent.dispatch(e.latlng);
getApp().setState(OlympusState.SPAWN_CONTEXT);
} else if (getApp().getState() === OlympusState.UNIT_CONTROL) {
if (this.#contextAction !== null) this.executeContextAction(null, e.latlng, e.originalEvent);
else this.executeDefaultContextAction(null, e.latlng, e.originalEvent);
this.executeDefaultContextAction(null, e.latlng, e.originalEvent);
}
}
@ -1040,6 +1086,8 @@ export class Map extends L.Map {
if (this.#debounceTimeout) window.clearTimeout(this.#debounceTimeout);
this.setPasteEnabled(false);
if (getApp().getSubState() === NO_SUBSTATE) getApp().setState(OlympusState.IDLE);
else getApp().setState(getApp().getState());
}

View File

@ -1,6 +1,6 @@
.airbase-icon {
align-items: center;
cursor: pointer;
cursor: url("../images/cursors/pointer.svg"), auto;
display: flex;
justify-content: center;
position: relative;

View File

@ -1,6 +1,6 @@
.bullseye-icon {
align-items: center;
cursor: pointer;
cursor: url("../images/cursors/pointer.svg"), auto;
display: flex;
justify-content: center;
position: relative;

View File

@ -1,6 +1,6 @@
/*** Unit marker elements ***/
[data-object|="unit"] {
cursor: pointer;
cursor: url("../images/cursors/pointer.svg"), auto;
display: flex;
height: 100%;
justify-content: center;
@ -8,6 +8,32 @@
width: 100%;
}
[data-object|="unit"].attack-cursor {
cursor: url("../images/cursors/attack.svg"), auto !important;
}
[data-object|="unit"].follow-cursor {
cursor: url("../images/cursors/follow.svg"), auto !important;
}
[data-object|="unit"].fire-at-area-cursor,
[data-object|="unit"].bomb-cursor,
[data-object|="unit"].carpet-bomb-cursor {
cursor: url("../images/cursors/fire-at-area.svg"), auto !important;
}
[data-object|="unit"].land-cursor {
cursor: url("../images/cursors/land.svg"), auto !important;
}
[data-object|="unit"].land-at-point-cursor {
cursor: url("../images/cursors/land-at-point.svg"), auto !important;
}
[data-object|="unit"].simulate-fire-fight-cursor {
cursor: url("../images/cursors/simulate-fire-fight.svg"), auto !important;
}
[data-awacs-mode] .unit-short-label {
color: transparent !important;
}
@ -113,42 +139,43 @@
stroke: white;
}
[data-awacs-mode] [data-coalition="blue"] .unit-icon svg {
[data-awacs-mode] [data-coalition="blue"] .unit-icon svg {
fill: transparent !important;
stroke: var(--unit-background-blue) !important;
}
[data-awacs-mode] [data-coalition="red"] .unit-icon svg {
[data-awacs-mode] [data-coalition="red"] .unit-icon svg {
fill: transparent !important;
stroke: var(--unit-background-red) !important;
}
[data-awacs-mode] [data-coalition="neutral"] .unit-icon svg {
[data-awacs-mode] [data-coalition="neutral"] .unit-icon svg {
fill: transparent !important;
stroke: var(--unit-background-neutral) !important;
}
[data-awacs-mode] [data-is-selected] .unit-icon svg {
stroke: #FF0 !important;
stroke: #ff0 !important;
}
[data-awacs-mode] [data-is-selected] .unit-vvi {
background-color: #FF0 !important;
background-color: #ff0 !important;
}
[data-awacs-mode] [data-is-selected] .unit-summary {
color: #FF0 !important;
color: #ff0 !important;
}
[data-awacs-mode] [data-is-selected] .unit-summary::after {
background-color: #FF0 !important;
background-color: #ff0 !important;
}
/*** Cursors ***/
[data-is-dead],
[data-object|="unit-missile"],
[data-object|="unit-bomb"] {
cursor: default;
[data-object|="unit-missile"] *,
[data-object|="unit-bomb"] *{
pointer-events: none;
}
/*** Labels ***/
@ -236,7 +263,7 @@
translate: 80px 10px;
}
[data-awacs-mode] [data-object|="unit"] .unit-summary.cluster-north {
[data-awacs-mode] [data-object|="unit"] .unit-summary.cluster-north {
translate: 50px -45px;
}
@ -276,7 +303,7 @@
position: absolute;
z-index: -1;
transform-origin: 0% 0%;
top: 30px
top: 30px;
}
[data-awacs-mode] [data-object|="unit"] .unit-summary.cluster-north::after {
@ -367,25 +394,16 @@
background-color: var(--secondary-gunmetal-grey);
}
[data-object|="unit"][data-coalition="blue"][data-is-selected]
.unit-short-label {
[data-object|="unit"][data-coalition="blue"][data-is-selected] .unit-short-label {
color: var(--secondary-blue-text);
}
[data-object|="unit"][data-coalition="blue"] .unit-fuel-level,
[data-object|="unit"][data-coalition="blue"] .unit-health-level,
[data-object|="unit"][data-coalition="blue"][data-has-fox-1]
.unit-ammo
> div:nth-child(1),
[data-object|="unit"][data-coalition="blue"][data-has-fox-2]
.unit-ammo
> div:nth-child(2),
[data-object|="unit"][data-coalition="blue"][data-has-fox-3]
.unit-ammo
> div:nth-child(3),
[data-object|="unit"][data-coalition="blue"][data-has-other-ammo]
.unit-ammo
> div:nth-child(4) {
[data-object|="unit"][data-coalition="blue"][data-has-fox-1] .unit-ammo > div:nth-child(1),
[data-object|="unit"][data-coalition="blue"][data-has-fox-2] .unit-ammo > div:nth-child(2),
[data-object|="unit"][data-coalition="blue"][data-has-fox-3] .unit-ammo > div:nth-child(3),
[data-object|="unit"][data-coalition="blue"][data-has-other-ammo] .unit-ammo > div:nth-child(4) {
background-color: var(--primary-blue);
}
@ -393,25 +411,16 @@
background-color: var(--secondary-blue-outline);
}
[data-object|="unit"][data-coalition="red"][data-is-selected]
.unit-short-label {
[data-object|="unit"][data-coalition="red"][data-is-selected] .unit-short-label {
color: var(--secondary-red-text);
}
[data-object|="unit"][data-coalition="red"] .unit-fuel-level,
[data-object|="unit"][data-coalition="red"] .unit-health-level,
[data-object|="unit"][data-coalition="red"][data-has-fox-1]
.unit-ammo
> div:nth-child(1),
[data-object|="unit"][data-coalition="red"][data-has-fox-2]
.unit-ammo
> div:nth-child(2),
[data-object|="unit"][data-coalition="red"][data-has-fox-3]
.unit-ammo
> div:nth-child(3),
[data-object|="unit"][data-coalition="red"][data-has-other-ammo]
.unit-ammo
> div:nth-child(4) {
[data-object|="unit"][data-coalition="red"][data-has-fox-1] .unit-ammo > div:nth-child(1),
[data-object|="unit"][data-coalition="red"][data-has-fox-2] .unit-ammo > div:nth-child(2),
[data-object|="unit"][data-coalition="red"][data-has-fox-3] .unit-ammo > div:nth-child(3),
[data-object|="unit"][data-coalition="red"][data-has-other-ammo] .unit-ammo > div:nth-child(4) {
background-color: var(--primary-red);
}
@ -430,15 +439,15 @@
}
[data-object|="unit"][data-state="rtb"] .unit-state {
background-image: url("./images/states/rtb.svg");
background-image: url("../images/states/rtb.svg");
}
[data-object|="unit"][data-state="land"] .unit-state {
background-image: url("./images/states/rtb.svg");
background-image: url("../images/states/rtb.svg");
}
[data-object|="unit"][data-state="idle"] .unit-state {
background-image: url("./images/states/idle.svg");
background-image: url("../images/states/idle.svg");
}
[data-object*="groundunit"][data-state="idle"] .unit-state,
@ -450,59 +459,59 @@
[data-object|="unit"][data-state="bomb-point"] .unit-state,
[data-object|="unit"][data-state="carpet-bombing"] .unit-state,
[data-object|="unit"][data-state="fire-at-area"] .unit-state {
background-image: url("./images/states/attack.svg");
background-image: url("../images/states/attack.svg");
}
[data-object|="unit"][data-state="follow"] .unit-state {
background-image: url("./images/states/follow.svg");
background-image: url("../images/states/follow.svg");
}
[data-object|="unit"][data-state="refuel"] .unit-state {
background-image: url("./images/states/refuel.svg");
background-image: url("../images/states/refuel.svg");
}
[data-object|="unit"][data-state="human"] .unit-state {
background-image: url("./images/states/human.svg");
background-image: url("../images/states/human.svg");
}
[data-object|="unit"][data-state="dcs"] .unit-state {
background-image: url("./images/states/dcs.svg");
background-image: url("../images/states/dcs.svg");
}
[data-object|="unit"][data-state="land-at-point"] .unit-state {
background-image: url("./images/states/land-at-point.svg");
background-image: url("../images/states/land-at-point.svg");
}
[data-object|="unit"][data-state="no-task"] .unit-state {
background-image: url("./images/states/no-task.svg");
background-image: url("../images/states/no-task.svg");
}
[data-object|="unit"][data-state="off"] .unit-state {
background-image: url("./images/states/off.svg");
background-image: url("../images/states/off.svg");
}
[data-object|="unit"][data-state="tanker"] .unit-state {
background-image: url("./images/states/tanker.svg");
background-image: url("../images/states/tanker.svg");
}
[data-object|="unit"][data-state="AWACS"] .unit-state {
background-image: url("./images/states/awacs.svg");
background-image: url("../images/states/awacs.svg");
}
[data-object|="unit"][data-state="miss-on-purpose"] .unit-state {
background-image: url("./images/states/miss-on-purpose.svg");
background-image: url("../images/states/miss-on-purpose.svg");
}
[data-object|="unit"][data-state="scenic-aaa"] .unit-state {
background-image: url("./images/states/scenic-aaa.svg");
background-image: url("../images/states/scenic-aaa.svg");
}
[data-object|="unit"][data-state="simulate-fire-fight"] .unit-state {
background-image: url("./images/states/simulate-fire-fight.svg");
background-image: url("../images/states/simulate-fire-fight.svg");
}
[data-object|="unit"] .unit-health::before {
background-image: url("./images/icons/health.svg");
background-image: url("../images/icons/health.svg");
background-repeat: no-repeat;
background-size: contain;
content: " ";
@ -541,11 +550,12 @@
opacity: 0.5;
}
.unit-bullseye, .unit-braa {
.unit-bullseye,
.unit-braa {
display: none;
}
[data-awacs-mode] .unit-bullseye,
[data-awacs-mode] .unit-bullseye,
[data-awacs-mode] .unit-braa {
display: inline;
}

View File

@ -132,7 +132,7 @@
}
.ol-target-icon {
background-image: url("./images/markers/target.svg");
background-image: url("../images/markers/target.svg");
height: 100%;
width: 100%;
}
@ -182,3 +182,55 @@
path.leaflet-interactive:focus {
outline: none;
}
.attack-cursor {
cursor: url("../images/cursors/attack.svg"), auto !important;
}
.follow-cursor {
cursor: url("../images/cursors/follow.svg"), auto !important;
}
.fire-at-area-cursor, .bomb-cursor, .carpet-bomb-cursor {
cursor: url("../images/cursors/fire-at-area.svg"), auto !important;
}
.land-cursor {
cursor: url("../images/cursors/land.svg"), auto !important;
}
.land-at-point-cursor {
cursor: url("../images/cursors/land-at-point.svg"), auto !important;
}
.simulate-fire-fight-cursor {
cursor: url("../images/cursors/simulate-fire-fight.svg"), auto !important;
}
#map-container.leaflet-grab {
cursor: url("../images/cursors/grab.svg") 16 16, auto;
}
.explosion-cursor {
cursor: url("../images/cursors/explosion.svg"), auto !important;
}
.smoke-white-cursor {
cursor: url("../images/cursors/smoke-white.svg"), auto !important;
}
.smoke-blue-cursor {
cursor: url("../images/cursors/smoke-blue.svg"), auto !important;
}
.smoke-red-cursor {
cursor: url("../images/cursors/smoke-red.svg"), auto !important;
}
.smoke-green-cursor {
cursor: url("../images/cursors/smoke-green.svg"), auto !important;
}
.smoke-orange-cursor {
cursor: url("../images/cursors/smoke-orange.svg"), auto !important;
}

View File

@ -270,7 +270,7 @@ export class MissionManager {
}
var xhr = new XMLHttpRequest();
xhr.open("GET", getApp().getExpressAddress() + `/api/airbases/${this.#theatre.toLowerCase()}/${callsign}`, true);
xhr.open("GET", `./api/airbases/${this.#theatre.toLowerCase()}/${callsign}`, true);
xhr.responseType = "json";
xhr.onload = () => {
var status = xhr.status;

View File

@ -105,18 +105,6 @@ export class OlympusApp {
return this.#AWACSController;
}
getExpressAddress() {
let address = `${window.location.href.split("?")[0].replace("vite/", "").replace("vite", "")}`;
if (address[address.length - 1] !== "/") address += "/"
return address;
}
getBackendAddress() {
let address = `${window.location.href.split("?")[0].replace("vite/", "").replace("vite", "")}`;
if (address[address.length - 1] !== "/") address += "/"
return address + "olympus"
}
start() {
/* Initialize base functionalitites */
this.#shortcutManager = new ShortcutManager(); /* Keep first */
@ -133,10 +121,6 @@ export class OlympusApp {
/* Controllers */
this.#AWACSController = new AWACSController();
/* Set the address of the server */
this.getServerManager().setAddress(this.getBackendAddress());
this.getAudioManager().setAddress(this.getExpressAddress());
/* Check if we are running the latest version */
const request = new Request("https://raw.githubusercontent.com/Pax1601/DCSOlympus/main/version.json");
fetch(request)
@ -157,7 +141,7 @@ export class OlympusApp {
});
/* Load the config file from the server */
const configRequest = new Request(this.getExpressAddress() + "resources/config", {
const configRequest = new Request("./resources/config", {
headers: {
'Cache-Control': 'no-cache',
}
@ -187,7 +171,7 @@ export class OlympusApp {
}
ConfigLoadedEvent.dispatch(this.#config as OlympusConfig);
})
.catch((error) => console.error);
.catch((error) => console.error(error));
this.#shortcutManager?.addShortcut("idle", {
label: "Deselect all",
@ -217,7 +201,7 @@ export class OlympusApp {
body: JSON.stringify(profile), // Send the data in JSON format
};
fetch(this.getExpressAddress() + `/resources/profile/${username}`, requestOptions)
fetch(`./resources/profile/${username}`, requestOptions)
.then((response) => {
if (response.status === 200) {
console.log(`Profile for ${username} saved correctly`);
@ -239,7 +223,7 @@ export class OlympusApp {
body: "", // Send the data in JSON format
};
fetch(this.getExpressAddress() + `/resources/profile/reset/${username}`, requestOptions)
fetch(`./resources/profile/reset/${username}`, requestOptions)
.then((response) => {
if (response.status === 200) {
console.log(`Profile for ${username} reset correctly`);
@ -260,7 +244,7 @@ export class OlympusApp {
body: "", // Send the data in JSON format
};
fetch(this.getExpressAddress() + `/resources/profile/delete/all`, requestOptions)
fetch(`./resources/profile/delete/all`, requestOptions)
.then((response) => {
if (response.status === 200) {
console.log(`All profiles reset correctly`);

View File

@ -306,7 +306,7 @@ export function convertDateAndTimeToDate(dateAndTime: DateAndTime) {
export function getGroundElevation(latlng: LatLng, callback: CallableFunction) {
/* Get the ground elevation from the server endpoint */
const xhr = new XMLHttpRequest();
xhr.open("GET", getApp().getExpressAddress() + `/api/elevation/${latlng.lat}/${latlng.lng}`, true);
xhr.open("GET", `./api/elevation/${latlng.lat}/${latlng.lng}`, true);
xhr.timeout = 500; // ms
xhr.responseType = "json";
xhr.onload = () => {

View File

@ -19,7 +19,7 @@ import { MapOptionsChangedEvent, ServerStatusUpdatedEvent } from "../events";
export class ServerManager {
#connected: boolean = false;
#paused: boolean = false;
#REST_ADDRESS = "http://localhost:3001/olympus";
#REST_ADDRESS = "./olympus";
#username: null | string = null;
#password: null | string = null;
#sessionHash: string | null = null;
@ -164,7 +164,7 @@ export class ServerManager {
getConfig(callback: CallableFunction) {
var xmlHttp = new XMLHttpRequest();
xmlHttp.open("GET", getApp().getExpressAddress() + "config", true);
xmlHttp.open("GET", "./config", true);
xmlHttp.onload = function (e) {
var data = JSON.parse(xmlHttp.responseText);
callback(data);
@ -175,12 +175,6 @@ export class ServerManager {
xmlHttp.send(null);
}
setAddress(address: string) {
this.#REST_ADDRESS = address;
console.log(`Setting REST address to ${this.#REST_ADDRESS}`);
}
getAirbases(callback: CallableFunction, errorCallback: CallableFunction = () => {}) {
this.GET(callback, errorCallback, AIRBASES_URI);
}

View File

@ -87,7 +87,7 @@ export class SessionDataManager {
body: JSON.stringify({ sessionHash }), // Send the data in JSON format
};
fetch(getApp().getExpressAddress() + `/resources/sessiondata/load/${getApp().getServerManager().getUsername()}`, requestOptions)
fetch(`./resources/sessiondata/load/${getApp().getServerManager().getUsername()}`, requestOptions)
.then((response) => {
if (response.status === 200) {
console.log(`Session data for profile ${getApp().getServerManager().getUsername()} and session hash ${sessionHash} loaded correctly`);
@ -118,7 +118,7 @@ export class SessionDataManager {
body: JSON.stringify({ sessionHash: this.#sessionHash, sessionData: this.#sessionData }), // Send the data in JSON format
};
fetch(getApp().getExpressAddress() + `/resources/sessiondata/save/${getApp().getServerManager().getUsername()}`, requestOptions)
fetch(`./resources/sessiondata/save/${getApp().getServerManager().getUsername()}`, requestOptions)
.then((response) => {
if (response.status === 200) {
console.log(`Session data for profile ${getApp().getServerManager().getUsername()} and session hash ${this.#sessionHash} saved correctly`);

View File

@ -9,7 +9,8 @@ export function OlStateButton(props: {
buttonColor?: string | null;
checked: boolean;
icon?: IconProp;
tooltip: string;
tooltip?: string | JSX.Element | JSX.Element[];
tooltipPosition?: string;
onClick: () => void;
onMouseUp?: () => void;
onMouseDown?: () => void;
@ -21,7 +22,8 @@ export function OlStateButton(props: {
const className =
(props.className ?? "") +
`
h-[40px] w-[40px] flex-none rounded-md text-lg font-medium
pointer-events-auto h-[40px] w-[40px] flex-none rounded-md text-lg
font-medium
dark:bg-olympus-600 dark:text-gray-300
`;
@ -57,12 +59,12 @@ export function OlStateButton(props: {
setHover(false);
}}
>
<div className="m-auto flex w-fit content-center justify-center gap-2">
<div className={`m-auto flex w-fit content-center justify-center gap-2`}>
{props.icon && <FontAwesomeIcon icon={props.icon} className="m-auto" style={{ color: textColor }} />}
{props.children}
</div>
</button>
{hover && <OlTooltip buttonRef={buttonRef} content={props.tooltip} />}
{hover && props.tooltip && <OlTooltip buttonRef={buttonRef} content={props.tooltip} position={props.tooltipPosition}/>}
</>
);
}

View File

@ -1,6 +1,6 @@
import React, { useEffect, useRef, useState } from "react";
export function OlTooltip(props: { content: string; buttonRef: React.MutableRefObject<null> }) {
export function OlTooltip(props: { content: string | JSX.Element | JSX.Element[]; buttonRef: React.MutableRefObject<null>; position?: string }) {
var contentRef = useRef(null);
function setPosition(content: HTMLDivElement, button: HTMLButtonElement) {
@ -13,18 +13,18 @@ export function OlTooltip(props: { content: string; buttonRef: React.MutableRefO
let [cxl, cyt, cxr, cyb, cw, ch] = [
content.getBoundingClientRect().x,
content.getBoundingClientRect().y,
content.getBoundingClientRect().x + content.clientWidth,
content.getBoundingClientRect().y + content.clientHeight,
content.clientWidth,
content.clientHeight,
content.getBoundingClientRect().x + content.offsetWidth,
content.getBoundingClientRect().y + content.offsetHeight,
content.offsetWidth,
content.offsetHeight,
];
let [bxl, byt, bxr, byb, bbw, bh] = [
button.getBoundingClientRect().x,
button.getBoundingClientRect().y,
button.getBoundingClientRect().x + button.clientWidth,
button.getBoundingClientRect().y + button.clientHeight,
button.clientWidth,
button.clientHeight,
button.getBoundingClientRect().x + button.offsetWidth,
button.getBoundingClientRect().y + button.offsetHeight,
button.offsetWidth,
button.offsetHeight,
];
/* Limit the maximum height */
@ -37,19 +37,29 @@ export function OlTooltip(props: { content: string; buttonRef: React.MutableRefO
var cxc = (cxl + cxr) / 2;
var bxc = (bxl + bxr) / 2;
/* Compute the x and y offsets needed to align the button and element horizontally, and to put the content below the button */
var offsetX = bxc - cxc;
var offsetY = byb - cyt + 8;
/* Compute the x and y offsets needed to align the button and element horizontally, and to put the content depending on the requested position */
var offsetX = 0;
var offsetY = 0;
if (props.position === undefined || props.position === "below") {
offsetX = bxc - cxc;
offsetY = byb - cyt + 8;
} else if (props.position === "side") {
offsetX = bxr + 8;
offsetY = byt - cyt + (bh - ch) / 2;
}
/* Compute the new position of the left and right margins of the content */
cxl += offsetX;
cxr += offsetX;
cyb += offsetY;
let ncxl = cxl + offsetX;
let ncxr = cxr + offsetX;
let ncyb = cyb + offsetY;
/* Try and move the content so it is inside the screen */
if (cxl < 0) offsetX -= cxl;
if (cxr > window.innerWidth) offsetX -= cxr - window.innerWidth;
if (cyb > window.innerHeight) offsetY -= bh + ch + 16;
if (ncxl < 0) offsetX -= cxl;
if (ncxr > window.innerWidth) {
offsetX = bxl - cxl - cw - 12;
}
if (ncyb > window.innerHeight) offsetY -= bh + ch + 16;
/* Apply the offset */
content.style.left = `${offsetX}px`;

View File

@ -33,9 +33,7 @@ export function OlUnitSummary(props: { blueprint: UnitBlueprint; coalition: Coal
</div>
</div>
<div
className={`
flex h-fit flex-col justify-between px-2 leading-normal
`}
className={`flex h-fit flex-col justify-between px-2 leading-normal`}
>
<p
className={`

View File

@ -6,7 +6,7 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faArrowRight, faCheckCircle, faExternalLink } from "@fortawesome/free-solid-svg-icons";
import { getApp, VERSION } from "../../olympusapp";
import { sha256 } from "js-sha256";
import { BLUE_COMMANDER, GAME_MASTER, LoginSubState, NO_SUBSTATE, OlympusState, RED_COMMANDER } from "../../constants/constants";
import { LoginSubState, NO_SUBSTATE, OlympusState } from "../../constants/constants";
import { OlDropdown, OlDropdownItem } from "../components/oldropdown";
import { AppStateChangedEvent } from "../../events";

View File

@ -5,6 +5,7 @@ import { MAP_OPTIONS_DEFAULTS, NO_SUBSTATE, OlympusState, OlympusSubState, Spawn
import { AppStateChangedEvent, ContextActionSetChangedEvent, MapOptionsChangedEvent, ShortcutsChangedEvent } from "../../events";
import { ContextAction } from "../../unit/contextaction";
import { ContextActionSet } from "../../unit/contextactionset";
import { MapToolBar } from "./maptoolbar";
export function ControlsPanel(props: {}) {
const [controls, setControls] = useState(
@ -19,8 +20,8 @@ export function ControlsPanel(props: {}) {
const [appState, setAppState] = useState(OlympusState.NOT_INITIALIZED);
const [appSubState, setAppSubState] = useState(NO_SUBSTATE as OlympusSubState);
const [mapOptions, setMapOptions] = useState(MAP_OPTIONS_DEFAULTS);
const [shortcuts, setShortcuts] = useState({})
const [contextActionSet, setContextActionSet] = useState(null as null | ContextActionSet)
const [shortcuts, setShortcuts] = useState({});
const [contextActionSet, setContextActionSet] = useState(null as null | ContextActionSet);
useEffect(() => {
AppStateChangedEvent.on((state, subState) => {
@ -74,53 +75,28 @@ export function ControlsPanel(props: {}) {
}
);
} else if (appState === OlympusState.UNIT_CONTROL) {
if (!mapOptions.tabletMode) {
controls = Object.values(contextActionSet?.getContextActions() ?? {})
.sort((a: ContextAction, b: ContextAction) => (a.getLabel() > b.getLabel() ? 1 : -1))
.filter((contextAction: ContextAction) => contextAction.getOptions().code)
.map((contextAction: ContextAction) => {
let actions: (string | IconDefinition)[] = [];
contextAction.getOptions().shiftKey && actions.push("Shift");
contextAction.getOptions().altKey && actions.push("Alt");
contextAction.getOptions().ctrlKey && actions.push("Ctrl");
actions.push(
(contextAction.getOptions().code as string)
.replace("Key", "")
.replace("ControlLeft", "Left Ctrl")
.replace("AltLeft", "Left Alt")
.replace("ShiftLeft", "Left Shift")
.replace("ControlRight", "Right Ctrl")
.replace("AltRight", "Right Alt")
.replace("ShiftRight", "Right Shift")
);
return {
actions: actions,
text: contextAction.getLabel(),
};
});
controls.unshift({
actions: ["RMB"],
text: "Move",
});
controls.push({
actions: ["RMB", "Hold"],
target: faMap,
text: "Show point actions",
});
controls.push({
actions: ["RMB", "Hold"],
target: faFighterJet,
text: "Show unit actions",
});
controls.push({
actions: shortcuts["toggleRelativePositions"]?.toActions(),
text: "Activate group movement",
});
controls.push({
actions: [...shortcuts["toggleRelativePositions"]?.toActions(), "Wheel"],
text: "Rotate formation",
});
}
controls.unshift({
actions: ["RMB"],
text: "Move",
});
controls.push({
actions: ["RMB", "Hold"],
target: faMap,
text: "Show point actions",
});
controls.push({
actions: ["RMB", "Hold"],
target: faFighterJet,
text: "Show unit actions",
});
controls.push({
actions: shortcuts["toggleRelativePositions"]?.toActions(),
text: "Activate group movement",
});
controls.push({
actions: [...shortcuts["toggleRelativePositions"]?.toActions(), "Wheel"],
text: "Rotate formation",
});
} else if (appState === OlympusState.SPAWN) {
controls = [
{
@ -151,8 +127,8 @@ export function ControlsPanel(props: {}) {
controls = baseControls;
controls.push({
actions: ["LMB"],
text: "Return to idle state"
})
text: "Return to idle state",
});
}
setControls(controls);
@ -163,11 +139,13 @@ export function ControlsPanel(props: {}) {
return (
<div
className={`
absolute right-[0px]
absolute right-[0px] top-16
${mapOptions.showMinimap ? `bottom-[233px]` : `bottom-[65px]`}
flex w-[310px] flex-col items-center justify-between gap-1 p-3 text-sm
pointer-events-none flex w-[310px] flex-col items-center justify-between
gap-1 p-3 text-sm
`}
>
<MapToolBar />
{controls?.map((control) => {
return (
<div
@ -189,9 +167,14 @@ export function ControlsPanel(props: {}) {
return (
<div key={idx} className="flex gap-1">
<div>
{typeof action === "string" || typeof action === "number" ? action : <FontAwesomeIcon icon={action} className={`
my-auto ml-auto
`} />}
{typeof action === "string" || typeof action === "number" ? (
action
) : (
<FontAwesomeIcon
icon={action}
className={`my-auto ml-auto`}
/>
)}
</div>
{idx < control.actions.length - 1 && typeof control.actions[idx + 1] === "string" && <div>+</div>}
{idx < control.actions.length - 1 && typeof control.actions[idx + 1] === "number" && <div>x</div>}

View File

@ -35,8 +35,7 @@ export function Header() {
MapOptionsChangedEvent.on((mapOptions) => setMapOptions({ ...mapOptions }));
MapSourceChangedEvent.on((source) => setMapSource(source));
ConfigLoadedEvent.on((config: OlympusConfig) => {
var sources = Object.keys(config.frontend.mapMirrors).concat(Object.keys(config.frontend.mapLayers)).concat(getApp().getMap().getLayers());
var sources = Object.keys(getApp().getMap().getMirrors()).concat(getApp().getMap().getLayers());
setMapSources(sources);
});
CommandModeOptionsChangedEvent.on((commandModeOptions) => {

View File

@ -0,0 +1,275 @@
import React, { useEffect, useRef, useState } from "react";
import { ContextActionSet } from "../../unit/contextactionset";
import { OlStateButton } from "../components/olstatebutton";
import { getApp } from "../../olympusapp";
import { ContextAction, ContextActionOptions } from "../../unit/contextaction";
import { CONTEXT_ACTION_COLORS, ContextActionTarget, MAP_OPTIONS_DEFAULTS } from "../../constants/constants";
import { FaChevronDown, FaChevronUp } from "react-icons/fa6";
import { OlympusState } from "../../constants/constants";
import {
AppStateChangedEvent,
ContextActionChangedEvent,
ContextActionSetChangedEvent,
CopiedUnitsEvents,
MapOptionsChangedEvent,
PasteEnabledChangedEvent,
SelectedUnitsChangedEvent,
SelectionClearedEvent,
SelectionEnabledChangedEvent,
ShortcutsChangedEvent,
} from "../../events";
import { faCopy, faObjectGroup, faPaste } from "@fortawesome/free-solid-svg-icons";
import { Shortcut } from "../../shortcut/shortcut";
import { ShortcutOptions, UnitData } from "../../interfaces";
import { Unit } from "../../unit/unit";
export function MapToolBar(props: {}) {
const [appState, setAppState] = useState(OlympusState.IDLE);
const [contextActionSet, setcontextActionSet] = useState(null as ContextActionSet | null);
const [contextAction, setContextAction] = useState(null as ContextAction | null);
const [scrolledTop, setScrolledTop] = useState(true);
const [scrolledBottom, setScrolledBottom] = useState(false);
const [mapOptions, setMapOptions] = useState(MAP_OPTIONS_DEFAULTS);
const [selectionEnabled, setSelectionEnabled] = useState(false);
const [pasteEnabled, setPasteEnabled] = useState(false);
const [controller, setController] = useState(new AbortController());
const [shortcuts, setShortcuts] = useState(
{} as {
[key: string]: Shortcut;
}
);
const [selectedUnits, setSelectedUnits] = useState([] as Unit[]);
const [copiedUnitsData, setCopiedUnitsData] = useState([] as UnitData[]);
/* Initialize the "scroll" position of the element */
var scrollRef = useRef(null);
useEffect(() => {
if (scrollRef.current) onScroll(scrollRef.current);
});
useEffect(() => {
AppStateChangedEvent.on((state, subState) => setAppState(state));
ContextActionSetChangedEvent.on((contextActionSet) => setcontextActionSet(contextActionSet));
ContextActionChangedEvent.on((contextAction) => setContextAction(contextAction));
MapOptionsChangedEvent.on((mapOptions) => setMapOptions(mapOptions));
SelectionEnabledChangedEvent.on((selectionEnabled) => setSelectionEnabled(selectionEnabled));
PasteEnabledChangedEvent.on((pasteEnabled) => setPasteEnabled(pasteEnabled));
ShortcutsChangedEvent.on((shortcuts) => setShortcuts({ ...shortcuts }));
SelectedUnitsChangedEvent.on((selectedUnits) => setSelectedUnits(selectedUnits));
SelectionClearedEvent.on(() => setSelectedUnits([]));
CopiedUnitsEvents.on((unitsData) => setCopiedUnitsData(unitsData));
}, []);
function onScroll(el) {
const sl = el.scrollTop;
const sr = el.scrollHeight - el.scrollTop - el.clientHeight;
sl < 1 && !scrolledTop && setScrolledTop(true);
sl > 1 && scrolledTop && setScrolledTop(false);
sr < 1 && !scrolledBottom && setScrolledBottom(true);
sr > 1 && scrolledBottom && setScrolledBottom(false);
}
function shortcutCombination(options: ShortcutOptions | ContextActionOptions) {
if (options === undefined) return <></>;
return (
<>
{options.ctrlKey && (
<kbd
className={`
my-auto ml-auto text-nowrap rounded-lg border border-gray-200
bg-gray-100 px-2 py-1 text-xs font-semibold text-gray-800
dark:border-gray-500 dark:bg-gray-600 dark:text-gray-100
`}
>
Ctrl
</kbd>
)}
{options.altKey && (
<kbd
className={`
my-auto ml-auto text-nowrap rounded-lg border border-gray-200
bg-gray-100 px-2 py-1 text-xs font-semibold text-gray-800
dark:border-gray-500 dark:bg-gray-600 dark:text-gray-100
`}
>
Alt
</kbd>
)}
{options.shiftKey && (
<kbd
className={`
my-auto ml-auto text-nowrap rounded-lg border border-gray-200
bg-gray-100 px-2 py-1 text-xs font-semibold text-gray-800
dark:border-gray-500 dark:bg-gray-600 dark:text-gray-100
`}
>
Shift
</kbd>
)}
{options.code && (
<kbd
className={`
my-auto ml-auto text-nowrap rounded-lg border border-gray-200
bg-gray-100 px-2 py-1 text-xs font-semibold text-gray-800
dark:border-gray-500 dark:bg-gray-600 dark:text-gray-100
`}
>
{options.code?.replace("Key", "")}
</kbd>
)}
</>
);
}
let reorderedActions: ContextAction[] = contextActionSet
? Object.values(contextActionSet.getContextActions()).sort((a: ContextAction, b: ContextAction) => (a.getOptions().type < b.getOptions().type ? -1 : 1))
: [];
return (
<>
<>
<div
className={`
relative top-0 mb-auto ml-auto flex max-h-[calc(100%-200px)] gap-2
rounded-md bg-olympus-900
`}
>
{!scrolledTop && (
<FaChevronUp
className={`
absolute top-0 h-6 w-full rounded-lg px-3.5 py-1 text-gray-200
dark:bg-olympus-900
`}
/>
)}
<div className={`flex flex-col gap-2 overflow-y-auto no-scrollbar p-2`} onScroll={(ev) => onScroll(ev.target)} ref={scrollRef}>
<>
<div className="flex flex-col gap-1">
<OlStateButton
key={"select"}
checked={selectionEnabled}
icon={faObjectGroup}
tooltip={
<div className="flex content-center gap-2">
{shortcutCombination(shortcuts["toggleSelectionEnabled"]?.getOptions())}
<div className="my-auto">Box selection</div>
</div>
}
tooltipPosition="side"
onClick={() => {
getApp().getMap().setSelectionEnabled(!selectionEnabled);
if (!selectionEnabled) {
getApp()
.getMap()
.getContainer()
.addEventListener(
"mouseup",
() => {
getApp().getMap().setSelectionEnabled(false);
},
{ once: true, signal: controller.signal }
);
} else {
controller.abort();
}
}}
/>
</div>
{selectedUnits.length > 0 && (
<div className="flex flex-col gap-1">
<OlStateButton
key={"copy"}
checked={false}
icon={faCopy}
tooltip={
<div className="flex content-center gap-2">
{shortcutCombination(shortcuts["copyUnits"]?.getOptions())}
<div className="my-auto">Copy selected units</div>
</div>
}
tooltipPosition="side"
onClick={() => {
getApp().getUnitsManager().copy(selectedUnits);
}}
/>
</div>
)}
{copiedUnitsData.length > 0 && (
<div className="flex flex-col gap-1">
<OlStateButton key={"paste"} checked={pasteEnabled} icon={faPaste} tooltip={
<div className="flex content-center gap-2">
{shortcutCombination(shortcuts["pasteUnits"]?.getOptions())}
<div className="my-auto">Paste copied units</div>
</div>
} tooltipPosition="side" onClick={() => {
getApp().getMap().setPasteEnabled(!pasteEnabled)
}} />
</div>
)}
</>
{reorderedActions.map((contextActionIt: ContextAction) => {
return (
<div className="flex flex-col gap-1">
<OlStateButton
key={contextActionIt.getId()}
checked={contextActionIt === contextAction}
icon={contextActionIt.getIcon()}
tooltip={
<div className="flex content-center gap-2">
{shortcutCombination(contextActionIt.getOptions())}
<div className="my-auto">{contextActionIt.getLabel()}</div>
</div>
}
tooltipPosition="side"
buttonColor={CONTEXT_ACTION_COLORS[contextActionIt.getOptions().type ?? 0]}
onClick={() => {
if (contextActionIt.getTarget() === ContextActionTarget.NONE) {
contextActionIt.executeCallback(null, null);
} else {
contextActionIt !== contextAction ? getApp().getMap().setContextAction(contextActionIt) : getApp().getMap().setContextAction(null);
}
}}
/>
</div>
);
})}
</div>
{!scrolledBottom && (
<FaChevronDown
className={`
absolute bottom-0 h-6 w-full rounded-lg px-3.5 py-1
text-gray-200
dark:bg-olympus-900
`}
/>
)}
</div>
</>
{/*}
{contextAction && (
<div
className={`
absolute left-[50%] top-16 flex translate-x-[calc(-50%+2rem)]
items-center gap-2 rounded-md bg-gray-200 p-4
dark:bg-olympus-800
`}
>
<FontAwesomeIcon
icon={contextAction.getIcon()}
className={`
mr-2 hidden text-xl text-blue-500
md:block
`}
/>
<div className={`text-gray-200`}>{contextAction.getDescription()}</div>
</div>
)}
{*/}
</>
);
}

View File

@ -20,7 +20,7 @@ export function MiniMapPanel(props: {}) {
useEffect(() => {
let miniMap = document.querySelector(".leaflet-control-minimap");
if (miniMap) {
miniMap.classList.add("rounded-t-lg");
miniMap.classList.add("rounded-b-lg");
}
});

View File

@ -32,6 +32,7 @@ export function SideBar() {
checked={appState === OlympusState.MAIN_MENU}
icon={faEllipsisV}
tooltip="Hide/show main menu"
tooltipPosition="side"
></OlStateButton>
<OlStateButton
onClick={() => {
@ -40,6 +41,7 @@ export function SideBar() {
checked={appState === OlympusState.SPAWN}
icon={faPlusSquare}
tooltip="Hide/show unit spawn menu"
tooltipPosition="side"
></OlStateButton>
<OlStateButton
onClick={() => {
@ -48,6 +50,7 @@ export function SideBar() {
checked={appState === OlympusState.UNIT_CONTROL}
icon={faGamepad}
tooltip="Hide/show selection tool and unit control menu"
tooltipPosition="side"
></OlStateButton>
<OlStateButton
onClick={() => {
@ -56,6 +59,7 @@ export function SideBar() {
checked={appState === OlympusState.DRAW}
icon={faPencil}
tooltip="Hide/show drawing menu"
tooltipPosition="side"
></OlStateButton>
<OlStateButton
onClick={() => {
@ -64,6 +68,7 @@ export function SideBar() {
checked={appState === OlympusState.AUDIO}
icon={faVolumeHigh}
tooltip="Hide/show audio menu"
tooltipPosition="side"
></OlStateButton>
{/*}<OlStateButton
onClick={() => {
@ -80,6 +85,7 @@ export function SideBar() {
checked={appState === OlympusState.AWACS}
icon={faA}
tooltip="Hide/show AWACS menu"
tooltipPosition="side"
></OlStateButton>
<OlStateButton
onClick={() => {
@ -88,6 +94,7 @@ export function SideBar() {
checked={appState === OlympusState.GAME_MASTER}
icon={faCrown}
tooltip="Hide/show Game Master menu"
tooltipPosition="side"
></OlStateButton>
</div>
</div>
@ -98,6 +105,7 @@ export function SideBar() {
checked={false}
icon={faQuestionCircle}
tooltip="Open user guide on separate window"
tooltipPosition="side"
></OlStateButton>
<OlStateButton
onClick={() => {
@ -106,6 +114,7 @@ export function SideBar() {
checked={appState === OlympusState.OPTIONS}
icon={faCog}
tooltip="Hide/show settings menu"
tooltipPosition="side"
></OlStateButton>
</div>
</div>

View File

@ -1,137 +0,0 @@
import React, { useEffect, useRef, useState } from "react";
import { ContextActionSet } from "../../unit/contextactionset";
import { OlStateButton } from "../components/olstatebutton";
import { getApp } from "../../olympusapp";
import { ContextAction } from "../../unit/contextaction";
import { CONTEXT_ACTION_COLORS, ContextActionTarget, MAP_OPTIONS_DEFAULTS } from "../../constants/constants";
import { FaChevronDown,FaChevronUp } from "react-icons/fa6";
import { OlympusState } from "../../constants/constants";
import { AppStateChangedEvent, ContextActionChangedEvent, ContextActionSetChangedEvent, MapOptionsChangedEvent } from "../../events";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
export function UnitControlBar(props: {}) {
const [appState, setAppState] = useState(OlympusState.NOT_INITIALIZED);
const [contextActionSet, setcontextActionSet] = useState(null as ContextActionSet | null);
const [contextAction, setContextAction] = useState(null as ContextAction | null);
const [scrolledTop, setScrolledTop] = useState(true);
const [scrolledBottom, setScrolledBottom] = useState(false);
const [menuHidden, setMenuHidden] = useState(false);
const [mapOptions, setMapOptions] = useState(MAP_OPTIONS_DEFAULTS);
/* Initialize the "scroll" position of the element */
var scrollRef = useRef(null);
useEffect(() => {
if (scrollRef.current) onScroll(scrollRef.current);
});
useEffect(() => {
AppStateChangedEvent.on((state, subState) => setAppState(state));
ContextActionSetChangedEvent.on((contextActionSet) => setcontextActionSet(contextActionSet));
ContextActionChangedEvent.on((contextAction) => setContextAction(contextAction));
MapOptionsChangedEvent.on((mapOptions) => setMapOptions({ ...mapOptions }));
}, []);
function onScroll(el) {
const sl = el.scrollTop;
const sr = el.scrollHeight - el.scrollTop - el.clientHeight;
sl < 1 && !scrolledTop && setScrolledTop(true);
sl > 1 && scrolledTop && setScrolledTop(false);
sr < 1 && !scrolledBottom && setScrolledBottom(true);
sr > 1 && scrolledBottom && setScrolledBottom(false);
}
let reorderedActions: ContextAction[] = contextActionSet
? Object.values(contextActionSet.getContextActions()).sort((a: ContextAction, b: ContextAction) => (a.getOptions().type < b.getOptions().type ? -1 : 1))
: [];
return (
<>
{appState === OlympusState.UNIT_CONTROL && contextActionSet && Object.keys(contextActionSet.getContextActions()).length > 0 && (
<>
{mapOptions.tabletMode && (
<>
<div
data-menuhidden={menuHidden}
className={`
absolute right-2 top-16 flex max-h-[80%] gap-2 rounded-md
bg-gray-200
dark:bg-olympus-900
`}
>
{!scrolledTop && (
<FaChevronUp
className={`
absolute top-0 h-6 w-full rounded-lg px-2 py-3.5
text-gray-200
dark:bg-olympus-900
`}
/>
)}
<div className={`
flex flex-col gap-2 overflow-y-auto no-scrollbar p-2
`} onScroll={(ev) => onScroll(ev.target)} ref={scrollRef}>
{reorderedActions.map((contextActionIt: ContextAction) => {
return (
<div className="flex flex-col gap-1">
<OlStateButton
key={contextActionIt.getId()}
checked={contextActionIt === contextAction}
icon={contextActionIt.getIcon()}
tooltip={contextActionIt.getLabel()}
buttonColor={CONTEXT_ACTION_COLORS[contextActionIt.getOptions().type ?? 0]}
onClick={() => {
if (contextActionIt.getTarget() === ContextActionTarget.NONE) {
contextActionIt.executeCallback(null, null);
} else {
contextActionIt !== contextAction
? getApp().getMap().setContextAction(contextActionIt)
: getApp().getMap().setContextAction(null);
}
}}
/>
</div>
);
})}
</div>
{!scrolledBottom && (
<FaChevronDown
className={`
absolute bottom-0 h-6 w-full rounded-lg px-2 py-3.5
text-gray-200
dark:bg-olympus-900
`}
/>
)}
</div>
</>
)}
{contextAction && (
<div
className={`
absolute left-[50%] top-16 flex translate-x-[calc(-50%+2rem)]
items-center gap-2 rounded-md bg-gray-200 p-4
dark:bg-olympus-800
`}
>
<FontAwesomeIcon
icon={contextAction.getIcon()}
className={`
mr-2 hidden text-xl text-blue-500
md:block
`}
/>
<div
className={`text-gray-200`}
>
{contextAction.getDescription()}
</div>
</div>
)}
</>
)}
</>
);
}

View File

@ -13,7 +13,7 @@ import { getApp, setupApp } from "../olympusapp";
import { LoginModal } from "./modals/loginmodal";
import { MiniMapPanel } from "./panels/minimappanel";
import { UnitControlBar } from "./panels/unitcontrolbar";
import { MapToolBar } from "./panels/maptoolbar";
import { DrawingMenu } from "./panels/drawingmenu";
import { ControlsPanel } from "./panels/controlspanel";
import { MapContextMenu } from "./contextmenus/mapcontextmenu";
@ -105,7 +105,6 @@ export function UI() {
<CoordinatesPanel />
<RadiosSummaryPanel />
<UnitControlBar />
<SideBar />
<InfoBar />
<HotGroupBar />

View File

@ -836,6 +836,9 @@ export abstract class Unit extends CustomMarker {
contextActionSet.addContextAction(this, ContextActions.PATH);
contextActionSet.addContextAction(this, ContextActions.DELETE);
contextActionSet.addContextAction(this, ContextActions.EXPLODE);
contextActionSet.addContextAction(this, ContextActions.CENTER_MAP);
contextActionSet.addContextAction(this, ContextActions.CLONE);
contextActionSet.addContextAction(this, ContextActions.ATTACK);
contextActionSet.addDefaultContextAction(this, ContextActions.MOVE);
}
@ -1357,16 +1360,18 @@ export abstract class Unit extends CustomMarker {
this.#debounceTimeout = window.setTimeout(() => {
console.log(`Left short click on ${this.getUnitName()}`);
if (!e.originalEvent.ctrlKey) getApp().getUnitsManager().deselectAllUnits();
this.setSelected(!this.getSelected());
if (getApp().getState() === OlympusState.UNIT_CONTROL && getApp().getMap().getContextAction()) {
if (getApp().getMap().getContextAction()?.getTarget() === ContextActionTarget.UNIT) getApp().getMap().executeContextAction(this, null, e.originalEvent);
else getApp().getMap().executeContextAction(null, this.getPosition(), e.originalEvent);
} else {
if (!e.originalEvent.ctrlKey) getApp().getUnitsManager().deselectAllUnits();
this.setSelected(!this.getSelected());
}
}, SHORT_PRESS_MILLISECONDS);
}
#onRightShortClick(e: any) {
console.log(`Right short click on ${this.getUnitName()}`);
if (getApp().getState() === OlympusState.UNIT_CONTROL && getApp().getMap().getContextAction()?.getTarget() === ContextActionTarget.UNIT)
getApp().getMap().executeContextAction(this, null, e.originalEvent);
}
#onRightLongClick(e: any) {
@ -1848,7 +1853,7 @@ export abstract class AirUnit extends Unit {
showAmmo: belongsToCommandedCoalition,
showSummary: belongsToCommandedCoalition || this.getDetectionMethods().some((value) => [VISUAL, OPTIC, RADAR, IRST, DLINK].includes(value)),
showCallsign: belongsToCommandedCoalition && (!getApp().getMap().getOptions().AWACSMode || this.getHuman()),
rotateToHeading: false
rotateToHeading: false,
} as ObjectIconOptions;
}
@ -1857,10 +1862,8 @@ export abstract class AirUnit extends Unit {
/* Context actions to be executed immediately */
contextActionSet.addContextAction(this, ContextActions.REFUEL);
contextActionSet.addContextAction(this, ContextActions.CENTER_MAP);
/* Context actions that require a target unit */
contextActionSet.addContextAction(this, ContextActions.ATTACK);
contextActionSet.addContextAction(this, ContextActions.FOLLOW);
contextActionSet.addContextAction(this, ContextActions.SET_AWACS_REFERENCE);
@ -1946,10 +1949,6 @@ export class GroundUnit extends Unit {
/* Context actions to be executed immediately */
contextActionSet.addContextAction(this, ContextActions.GROUP);
contextActionSet.addContextAction(this, ContextActions.CENTER_MAP);
/* Context actions that require a target unit */
contextActionSet.addContextAction(this, ContextActions.ATTACK);
/* Context actions that require a target position */
if (this.canTargetPoint()) {
@ -2015,10 +2014,6 @@ export class NavyUnit extends Unit {
/* Context actions to be executed immediately */
contextActionSet.addContextAction(this, ContextActions.GROUP);
contextActionSet.addContextAction(this, ContextActions.CENTER_MAP);
/* Context actions that require a target unit */
contextActionSet.addContextAction(this, ContextActions.ATTACK);
/* Context actions that require a target position */
contextActionSet.addContextAction(this, ContextActions.FIRE_AT_AREA);

View File

@ -17,6 +17,7 @@ import {
AWACSReferenceChangedEvent,
CommandModeOptionsChangedEvent,
ContactsUpdatedEvent,
CopiedUnitsEvents,
HotgroupsChangedEvent,
SelectedUnitsChangedEvent,
SelectionClearedEvent,
@ -48,10 +49,10 @@ export class UnitsManager {
constructor() {
this.#unitDatabase = new UnitDatabase();
this.#unitDatabase.load(getApp().getExpressAddress() + "api/databases/units/aircraftdatabase", "aircraft");
this.#unitDatabase.load(getApp().getExpressAddress() + "api/databases/units/helicopterdatabase", "helicopter");
this.#unitDatabase.load(getApp().getExpressAddress() + "api/databases/units/groundunitdatabase", "groundunit");
this.#unitDatabase.load(getApp().getExpressAddress() + "api/databases/units/navyunitdatabase", "navyunit");
this.#unitDatabase.load("./api/databases/units/aircraftdatabase", "aircraft");
this.#unitDatabase.load("./api/databases/units/helicopterdatabase", "helicopter");
this.#unitDatabase.load("./api/databases/units/groundunitdatabase", "groundunit");
this.#unitDatabase.load("./api/databases/units/navyunitdatabase", "navyunit");
CommandModeOptionsChangedEvent.on(() => {
Object.values(this.#units).forEach((unit: Unit) => unit.updateVisibility());
@ -1234,6 +1235,8 @@ export class UnitsManager {
)
); /* Can be applied to humans too */
getApp().addInfoMessage(`${this.#copiedUnits.length} units copied`);
CopiedUnitsEvents.dispatch(this.#copiedUnits)
}
/*********************** Unit manipulation functions ************************/
@ -1241,7 +1244,7 @@ export class UnitsManager {
*
* @returns True if units were pasted successfully
*/
paste() {
paste(location?: LatLng) {
let spawnPoints = 0;
/* If spawns are restricted, check that the user has the necessary spawn points */
@ -1285,7 +1288,10 @@ export class UnitsManager {
var units: { ID: number; location: LatLng }[] = [];
let markers: TemporaryUnitMarker[] = [];
groups[groupName].forEach((unit: UnitData) => {
var position = new LatLng(
var position = location ? new LatLng(
location.lat + unit.position.lat - avgLat,
location.lng + unit.position.lng - avgLng
) : new LatLng(
getApp().getMap().getMouseCoordinates().lat + unit.position.lat - avgLat,
getApp().getMap().getMouseCoordinates().lng + unit.position.lng - avgLng
);