merge: minimal AIO hub (chakra grid + bottom dock + i18n trim)
|
|
@ -1,45 +1,125 @@
|
|||
# Main context
|
||||
worker_processes auto; # Automatically determine worker processes based on CPU cores
|
||||
worker_processes auto;
|
||||
|
||||
events {
|
||||
worker_connections 1024; # Maximum connections per worker
|
||||
worker_connections 1024;
|
||||
}
|
||||
|
||||
http {
|
||||
default_type application/octet-stream;
|
||||
# Trust the custom Docker network subnet
|
||||
set_real_ip_from 0.0.0.0;
|
||||
real_ip_header X-Forwarded-For;
|
||||
real_ip_recursive on;
|
||||
|
||||
# Reusable location blocks
|
||||
# JS / CSS / image MIME and caching
|
||||
map $sent_http_content_type $cache_static {
|
||||
default "off";
|
||||
~image/ "6M";
|
||||
}
|
||||
|
||||
# ───────────────────────────────────────────────────────────────
|
||||
# AIO hub — minimal app at app.<domain>
|
||||
# Serves only the chakra icon hub + base infra (profile, relays).
|
||||
# ───────────────────────────────────────────────────────────────
|
||||
server {
|
||||
listen 8080;
|
||||
server_name <domain>.<com>;
|
||||
server_name app.<domain>.<com>;
|
||||
|
||||
root /app;
|
||||
root /var/www/aio/dist;
|
||||
index index.html;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ /index.html;
|
||||
location / { try_files $uri $uri/ /index.html; }
|
||||
location ~* \.js$ { types { application/javascript js; } default_type application/javascript; }
|
||||
location ~* \.css$ { types { text/css css; } default_type text/css; }
|
||||
location ~* \.(png|jpe?g|webp|ico|svg)$ { expires 6M; access_log off; }
|
||||
}
|
||||
|
||||
location ~* \.js$ {
|
||||
types { application/javascript js; }
|
||||
default_type application/javascript;
|
||||
# ───────────────────────────────────────────────────────────────
|
||||
# Standalone module PWAs — one server block per subdomain
|
||||
# ───────────────────────────────────────────────────────────────
|
||||
|
||||
# Marketplace — Muladhara
|
||||
server {
|
||||
listen 8080;
|
||||
server_name market.<domain>.<com>;
|
||||
root /var/www/aio/dist-market;
|
||||
index market.html;
|
||||
location / { try_files $uri $uri/ /market.html; }
|
||||
location ~* \.js$ { types { application/javascript js; } default_type application/javascript; }
|
||||
location ~* \.css$ { types { text/css css; } default_type text/css; }
|
||||
location ~* \.(png|jpe?g|webp|ico|svg)$ { expires 6M; access_log off; }
|
||||
}
|
||||
|
||||
# Serve CSS files with the correct MIME type
|
||||
location ~* \.css$ {
|
||||
types { text/css css; }
|
||||
default_type text/css;
|
||||
# Activities — Swadhisthana
|
||||
server {
|
||||
listen 8080;
|
||||
server_name sortir.<domain>.<com>;
|
||||
root /var/www/aio/dist-activities;
|
||||
index activities.html;
|
||||
location / { try_files $uri $uri/ /activities.html; }
|
||||
location ~* \.js$ { types { application/javascript js; } default_type application/javascript; }
|
||||
location ~* \.css$ { types { text/css css; } default_type text/css; }
|
||||
location ~* \.(png|jpe?g|webp|ico|svg)$ { expires 6M; access_log off; }
|
||||
}
|
||||
|
||||
# Serve image files
|
||||
location ~* \.(png|jpe?g|webp|ico)$ {
|
||||
expires 6M; # Optional: Cache static assets for 6 months
|
||||
access_log off;
|
||||
# Wallet — Manipura
|
||||
server {
|
||||
listen 8080;
|
||||
server_name wallet.<domain>.<com>;
|
||||
root /var/www/aio/dist-wallet;
|
||||
index wallet.html;
|
||||
location / { try_files $uri $uri/ /wallet.html; }
|
||||
location ~* \.js$ { types { application/javascript js; } default_type application/javascript; }
|
||||
location ~* \.css$ { types { text/css css; } default_type text/css; }
|
||||
location ~* \.(png|jpe?g|webp|ico|svg)$ { expires 6M; access_log off; }
|
||||
}
|
||||
|
||||
# Chat — Anahata
|
||||
server {
|
||||
listen 8080;
|
||||
server_name chat.<domain>.<com>;
|
||||
root /var/www/aio/dist-chat;
|
||||
index chat.html;
|
||||
location / { try_files $uri $uri/ /chat.html; }
|
||||
location ~* \.js$ { types { application/javascript js; } default_type application/javascript; }
|
||||
location ~* \.css$ { types { text/css css; } default_type text/css; }
|
||||
location ~* \.(png|jpe?g|webp|ico|svg)$ { expires 6M; access_log off; }
|
||||
}
|
||||
|
||||
# Forum — Vishuddha
|
||||
server {
|
||||
listen 8080;
|
||||
server_name forum.<domain>.<com>;
|
||||
root /var/www/aio/dist-forum;
|
||||
index forum.html;
|
||||
location / { try_files $uri $uri/ /forum.html; }
|
||||
location ~* \.js$ { types { application/javascript js; } default_type application/javascript; }
|
||||
location ~* \.css$ { types { text/css css; } default_type text/css; }
|
||||
location ~* \.(png|jpe?g|webp|ico|svg)$ { expires 6M; access_log off; }
|
||||
}
|
||||
|
||||
# Tasks — Ajna
|
||||
server {
|
||||
listen 8080;
|
||||
server_name tasks.<domain>.<com>;
|
||||
root /var/www/aio/dist-tasks;
|
||||
index tasks.html;
|
||||
location / { try_files $uri $uri/ /tasks.html; }
|
||||
location ~* \.js$ { types { application/javascript js; } default_type application/javascript; }
|
||||
location ~* \.css$ { types { text/css css; } default_type text/css; }
|
||||
location ~* \.(png|jpe?g|webp|ico|svg)$ { expires 6M; access_log off; }
|
||||
}
|
||||
|
||||
# Castle — Sahasrara (accounting)
|
||||
server {
|
||||
listen 8080;
|
||||
server_name castle.<domain>.<com>;
|
||||
root /var/www/aio/dist-castle;
|
||||
index castle.html;
|
||||
location / { try_files $uri $uri/ /castle.html; }
|
||||
location ~* \.js$ { types { application/javascript js; } default_type application/javascript; }
|
||||
location ~* \.css$ { types { text/css css; } default_type text/css; }
|
||||
location ~* \.(png|jpe?g|webp|ico|svg)$ { expires 6M; access_log off; }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
64
public/chakras/ajna.svg
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="26.373173mm"
|
||||
height="26.373281mm"
|
||||
viewBox="0 0 26.373173 26.373281"
|
||||
version="1.1"
|
||||
id="svg1911"
|
||||
inkscape:version="1.2 (dc2aedaf03, 2022-05-15)"
|
||||
sodipodi:docname="ajna.svg"
|
||||
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">
|
||||
<sodipodi:namedview
|
||||
id="namedview1913"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="10.35098"
|
||||
inkscape:cx="50.671531"
|
||||
inkscape:cy="50.333398"
|
||||
inkscape:window-width="2004"
|
||||
inkscape:window-height="1979"
|
||||
inkscape:window-x="8"
|
||||
inkscape:window-y="64"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs1908" />
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-50.435614,-75.884446)">
|
||||
<path
|
||||
d="m 68.657927,94.106814 c -2.7813,2.781265 -7.290506,2.781265 -10.071454,0 -2.7813,-2.781335 -2.7813,-7.290541 0,-10.071489 2.780948,-2.7813 7.290154,-2.7813 10.071454,0 2.7813,2.780948 2.7813,7.290154 0,10.071489 z"
|
||||
style="fill:none;stroke:#0670b3;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.25"
|
||||
id="path872" />
|
||||
<path
|
||||
d="m 69.587143,95.56682 v -0.01199 c 0.0889,-0.08156 0.1778,-0.165911 0.265289,-0.253259 1.719792,-1.720215 2.580923,-3.974677 2.579864,-6.230691 0.0011,-2.255661 -0.860072,-4.510264 -2.579864,-6.230056 -0.08749,-0.08784 -0.176389,-0.172156 -0.265289,-0.253647 v -0.01199 c 3.84422,0.0011 4.563887,3.281892 5.094817,4.341284 0.52952,1.060803 1.756481,2.154414 1.756481,2.154414 0,0 -1.226961,1.093611 -1.756481,2.154414 -0.53093,1.059603 -1.250597,4.340437 -5.094817,4.34153 z"
|
||||
style="fill:none;stroke:#0670b3;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.25"
|
||||
id="path874" />
|
||||
<path
|
||||
d="m 57.657257,82.575178 v 0.01199 c -0.08961,0.08149 -0.1778,0.165805 -0.265289,0.253294 -1.720145,1.719792 -2.580923,3.974748 -2.579864,6.230409 -0.0011,2.256014 0.859719,4.510617 2.579864,6.230409 0.08749,0.08749 0.175683,0.17212 0.265289,0.253541 v 0.01199 c -3.84422,-9.52e-4 -4.563887,-3.281786 -5.094817,-4.34153 -0.529873,-1.060803 -1.756481,-2.154414 -1.756481,-2.154414 0,0 1.226608,-1.093611 1.756481,-2.154061 0.53093,-1.060098 1.250597,-4.340578 5.094817,-4.341637 z"
|
||||
style="fill:none;stroke:#0670b3;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.25"
|
||||
id="path876" />
|
||||
<path
|
||||
d="m 72.401252,89.070876 c 0,4.848931 -3.930297,8.779651 -8.779228,8.779651 -4.848578,0 -8.779229,-3.93072 -8.779229,-8.779651 0,-4.848578 3.930651,-8.779229 8.779229,-8.779229 4.848931,0 8.779228,3.930651 8.779228,8.779229 z"
|
||||
style="fill:none;stroke:#0670b3;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.25"
|
||||
id="path878" />
|
||||
<path
|
||||
d="m 65.299129,88.382254 c 0.865717,-0.425803 1.429456,-1.041753 0.671336,-2.183342 -0.994833,-1.497895 -2.77883,0.03669 -3.463925,0.938036 -0.261055,0.343605 0.299156,0.753533 0.588081,0.453672 0.166511,-0.179917 0.340078,-0.352778 0.521405,-0.51823 0.584553,-0.6604 1.135945,-0.460023 1.654176,0.602191 -0.485423,0.296686 -1.015648,0.51682 -1.501776,0.820914 -0.229305,0.143581 -0.0695,0.446264 0.173214,0.410634 1.441803,-0.211667 2.301523,1.27 1.36137,2.354791 -0.610659,0.70485 -1.58997,0.431448 -2.2479,0.02893 -0.989189,-0.605367 -1.286581,-1.88595 -1.844323,-2.818694 -0.144286,-0.2413 -0.456847,-0.06809 -0.422275,0.1778 0.274814,1.949802 2.552348,5.21215 4.817534,3.385608 1.364192,-1.099961 0.963436,-3.153128 -0.306917,-3.652308"
|
||||
style="fill:#0670b3;fill-opacity:0.25;fill-rule:nonzero;stroke:#0670b3;stroke-width:0.0352778;stroke-opacity:0.25"
|
||||
id="path880" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.3 KiB |
108
public/chakras/anahata.svg
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="26.373173mm"
|
||||
height="26.373281mm"
|
||||
viewBox="0 0 26.373173 26.373281"
|
||||
version="1.1"
|
||||
id="svg1911"
|
||||
inkscape:version="1.2 (dc2aedaf03, 2022-05-15)"
|
||||
sodipodi:docname="anahata.svg"
|
||||
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">
|
||||
<sodipodi:namedview
|
||||
id="namedview1913"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="10.35098"
|
||||
inkscape:cx="50.671531"
|
||||
inkscape:cy="50.333398"
|
||||
inkscape:window-width="2004"
|
||||
inkscape:window-height="1979"
|
||||
inkscape:window-x="8"
|
||||
inkscape:window-y="64"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs1908" />
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-50.435614,-75.884446)">
|
||||
<path
|
||||
d="m 70.582859,88.910626 c 0,3.844713 -3.116439,6.961576 -6.961365,6.961576 -3.844572,0 -6.961364,-3.116863 -6.961364,-6.961576 0,-3.844573 3.116792,-6.961012 6.961364,-6.961012 3.844926,0 6.961365,3.116439 6.961365,6.961012 z"
|
||||
style="fill:none;stroke:#87c341;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path966" />
|
||||
<path
|
||||
d="m 72.43212,89.07114 c 0,4.016728 -2.689225,7.406146 -6.364464,8.465997 -0.776464,0.224331 -1.597378,0.34424 -2.445809,0.34424 -0.848783,0 -1.668992,-0.119909 -2.445103,-0.34424 -3.67665,-1.059851 -6.366228,-4.449269 -6.366228,-8.465997 0,-4.016728 2.689578,-7.406217 6.366228,-8.465962 0.776111,-0.224367 1.59632,-0.343958 2.445103,-0.343958 0.848431,0 1.669345,0.119591 2.445809,0.343958 3.675239,1.059745 6.364464,4.449234 6.364464,8.465962 z"
|
||||
style="fill:none;stroke:#87c341;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path968" />
|
||||
<path
|
||||
d="m 61.176392,80.605178 c 0.229305,-2.099028 1.259769,-2.560108 1.61925,-2.911122 0.405694,-0.395464 0.825147,-1.310923 0.825147,-1.310923 0,0 0.419453,0.915459 0.826205,1.310923 0.360892,0.351014 1.391356,0.812094 1.619603,2.911122"
|
||||
style="fill:none;stroke:#87c341;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path970" />
|
||||
<path
|
||||
d="m 66.068008,97.536996 c -0.229305,2.099028 -1.259769,2.560394 -1.620661,2.911124 -0.407105,0.3955 -0.826558,1.31092 -0.826558,1.31092 0,0 -0.4191,-0.91542 -0.824795,-1.31092 -0.35948,-0.35073 -1.389944,-0.812096 -1.619602,-2.911124"
|
||||
style="fill:none;stroke:#87c341;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path972" />
|
||||
<path
|
||||
d="m 72.087809,86.625331 c 2.099028,0.229306 2.560461,1.25977 2.911475,1.61925 0.395111,0.405695 1.310922,0.8255 1.310922,0.8255 0,0 -0.915811,0.4191 -1.310922,0.825853 -0.351014,0.360892 -0.812447,1.391356 -2.911475,1.619603"
|
||||
style="fill:none;stroke:#87c341;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path974" />
|
||||
<path
|
||||
d="m 55.156238,91.516948 c -2.099028,-0.229658 -2.560461,-1.259769 -2.911122,-1.620661 -0.395464,-0.407106 -1.310922,-0.826558 -1.310922,-0.826558 0,0 0.915458,-0.4191 1.310922,-0.824795 0.350661,-0.35948 0.812094,-1.389944 2.911122,-1.619603"
|
||||
style="fill:none;stroke:#87c341;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path976" />
|
||||
<path
|
||||
d="m 65.843642,80.543795 c 1.269294,-1.687336 2.390775,-1.557867 2.879372,-1.675695 0.550334,-0.132644 1.378656,-0.705555 1.378656,-0.705555 0,0 -0.106892,1.001536 0.04092,1.549047 0.131233,0.485775 0.78105,1.408995 -0.0949,3.32987"
|
||||
style="fill:none;stroke:#87c341;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path978" />
|
||||
<path
|
||||
d="m 61.400758,97.598591 c -1.269294,1.687406 -2.390775,1.557866 -2.880431,1.675024 -0.551744,0.131868 -1.379714,0.70485 -1.379714,0.70485 0,0 0.106892,-1.001148 -0.03986,-1.548342 -0.130175,-0.485069 -0.779992,-1.408218 0.0949,-3.330187"
|
||||
style="fill:none;stroke:#87c341;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path980" />
|
||||
<path
|
||||
d="m 69.887534,82.874598 c 1.95333,-0.801864 2.851503,-0.117828 3.33128,0.02999 0.541162,0.167217 1.545873,0.09772 1.545873,0.09772 0,0 -0.603603,0.80645 -0.756003,1.35255 -0.135467,0.484717 -0.04833,1.610431 -1.782586,2.814462"
|
||||
style="fill:none;stroke:#87c341;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path982" />
|
||||
<path
|
||||
d="m 57.356866,95.267647 c -1.95333,0.802287 -2.851503,0.117827 -3.331986,-0.03101 -0.541514,-0.168239 -1.546225,-0.09906 -1.546225,-0.09906 0,0 0.60325,-0.806167 0.756708,-1.351174 0.13582,-0.483693 0.04868,-1.609407 1.782234,-2.814496"
|
||||
style="fill:none;stroke:#87c341;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path984" />
|
||||
<path
|
||||
d="m 61.3997,80.543795 c -1.269295,-1.687336 -2.390775,-1.557867 -2.879373,-1.675695 -0.550686,-0.132644 -1.378655,-0.705555 -1.378655,-0.705555 0,0 0.106539,1.001536 -0.04092,1.549047 -0.131587,0.485775 -0.78105,1.408995 0.09454,3.32987"
|
||||
style="fill:none;stroke:#87c341;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path986" />
|
||||
<path
|
||||
d="m 65.842583,97.598591 c 1.269295,1.687406 2.390776,1.557866 2.880431,1.675024 0.551392,0.131868 1.379714,0.70485 1.379714,0.70485 0,0 -0.106891,-1.001148 0.03986,-1.548342 0.130175,-0.485069 0.779992,-1.408218 -0.0949,-3.330187"
|
||||
style="fill:none;stroke:#87c341;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path988" />
|
||||
<path
|
||||
d="m 57.355455,82.874598 c -1.952978,-0.801864 -2.85115,-0.117828 -3.330928,0.02999 -0.541161,0.167217 -1.545872,0.09772 -1.545872,0.09772 0,0 0.60325,0.80645 0.756003,1.35255 0.135466,0.484717 0.04798,1.610431 1.782233,2.814462"
|
||||
style="fill:none;stroke:#87c341;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path990" />
|
||||
<path
|
||||
d="m 69.886475,95.267647 c 1.953331,0.802287 2.851503,0.117827 3.331634,-0.03101 0.541867,-0.168239 1.546578,-0.09906 1.546578,-0.09906 0,0 -0.60325,-0.806167 -0.756709,-1.351174 -0.136172,-0.483693 -0.04868,-1.609407 -1.782233,-2.814496"
|
||||
style="fill:none;stroke:#87c341;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path992" />
|
||||
<path
|
||||
d="m 64.522489,89.602423 c -0.480836,0.528461 -0.853017,1.052689 -1.546578,1.328561 -0.508706,0.201436 -1.065389,0.146756 -1.488017,-0.20708 -0.303036,-0.253647 -0.572911,-0.877711 -0.286102,-1.224845 0.393347,-0.475544 1.079147,-0.756003 1.531055,-1.19133 0.37077,-0.357717 0.512939,-0.776464 0.578556,-1.264709 0.02293,3.53e-4 0.0448,0.0018 0.06773,0.0018 0.38982,0.0071 0.812447,0.04127 1.243189,0.06844 -0.06667,0.797278 -0.101247,1.636889 -0.08784,2.479675 -0.0039,0.0039 -0.0085,0.0053 -0.01199,0.0095 m 1.954036,-3.34645 c -0.237419,0.153811 -1.046339,0.03916 -1.327855,0.04374 -0.442384,0.0085 -0.884767,0.02046 -1.327503,0.03069 -0.995892,0.02328 -2.02177,0.08819 -2.995437,-0.15628 -0.21343,-0.05362 -0.370416,0.274108 -0.155222,0.367947 0.707672,0.30868 1.389945,0.432153 2.124428,0.479425 -0.491419,1.058686 -1.823861,1.1811 -2.3749,2.121605 -0.426861,0.728487 -0.03916,1.617839 0.466725,2.181578 0.987778,1.101443 2.857147,0.575381 3.702756,-0.525639 0.06526,0.835731 0.187325,1.657139 0.392641,2.424431 0.08255,0.30868 0.527403,0.232198 0.541162,-0.07331 0.08784,-1.95707 -0.119592,-4.038106 -0.269523,-6.007312 0.507648,0.01482 1.008239,-7.05e-4 1.455914,-0.106891 0.177448,-0.04269 0.286456,-0.211667 0.293864,-0.386292 l 0.0035,-0.08925 C 67.018368,86.299019 66.697339,86.113105 66.4765,86.25598"
|
||||
style="fill:#8ac641;fill-opacity:0.2;fill-rule:nonzero;stroke:#87c341;stroke-width:0.0352778;stroke-opacity:0.2"
|
||||
id="path994" />
|
||||
<path
|
||||
d="m 64.98992,85.116148 c -0.0018,-0.0074 -0.0035,-0.01517 -0.0056,-0.02258 -0.03916,-0.1651 -0.179564,-0.286808 -0.340078,-0.3302 -0.0956,-0.04269 -0.204258,-0.05503 -0.315383,-0.02469 -0.224367,0.06174 -0.327378,0.247297 -0.352778,0.46355 -0.0014,0.01517 -0.0035,0.03034 -0.0053,0.04586 -0.02399,0.205669 0.168275,0.438503 0.364773,0.478719 0.212019,0.04339 0.3683,0.0056 0.529872,-0.140053 0.129822,-0.116769 0.163689,-0.307975 0.124531,-0.470605"
|
||||
style="fill:#8ac641;fill-opacity:0.2;fill-rule:nonzero;stroke:#87c341;stroke-width:0.0352778;stroke-opacity:0.2"
|
||||
id="path996" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.6 KiB |
92
public/chakras/manipura.svg
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="26.373173mm"
|
||||
height="26.373281mm"
|
||||
viewBox="0 0 26.373173 26.373281"
|
||||
version="1.1"
|
||||
id="svg1911"
|
||||
inkscape:version="1.2 (dc2aedaf03, 2022-05-15)"
|
||||
sodipodi:docname="manipura.svg"
|
||||
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">
|
||||
<sodipodi:namedview
|
||||
id="namedview1913"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="10.35098"
|
||||
inkscape:cx="51.830841"
|
||||
inkscape:cy="50.333398"
|
||||
inkscape:window-width="2004"
|
||||
inkscape:window-height="1979"
|
||||
inkscape:window-x="8"
|
||||
inkscape:window-y="64"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs1908" />
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-50.435614,-75.884446)">
|
||||
<path
|
||||
d="m 70.583035,88.910379 c 0,3.844713 -3.116439,6.961576 -6.961011,6.961576 -3.844926,0 -6.961365,-3.116863 -6.961365,-6.961576 0,-3.844573 3.116439,-6.961012 6.961365,-6.961012 3.844572,0 6.961011,3.116439 6.961011,6.961012 z"
|
||||
style="fill:none;stroke:#f0cd1e;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path998" />
|
||||
<path
|
||||
d="m 72.432296,89.070893 c 0,4.865864 -3.944761,8.810237 -8.810625,8.810237 -4.865864,0 -8.80992,-3.944373 -8.80992,-8.810237 0,-4.865512 3.944056,-8.810273 8.80992,-8.810273 4.865864,0 8.810625,3.944761 8.810625,8.810273 z"
|
||||
style="fill:none;stroke:#f0cd1e;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path1000" />
|
||||
<path
|
||||
d="m 60.089307,80.997926 c 0.194733,-2.436637 1.810808,-2.932642 2.354792,-3.303764 0.578908,-0.395464 1.177572,-1.310923 1.177572,-1.310923 0,0 0.597958,0.915459 1.177925,1.310923 0.545747,0.371122 2.16147,0.868186 2.355497,3.305175"
|
||||
style="fill:none;stroke:#f0cd1e;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path1002" />
|
||||
<path
|
||||
d="m 67.155093,97.142766 c -0.194027,2.436919 -1.80975,2.933984 -2.355497,3.305244 -0.579967,0.39536 -1.177925,1.31092 -1.177925,1.31092 0,0 -0.598311,-0.91556 -1.177572,-1.31092 -0.543984,-0.37126 -2.160059,-0.867196 -2.355145,-3.30415"
|
||||
style="fill:none;stroke:#f0cd1e;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path1004" />
|
||||
<path
|
||||
d="m 66.832302,80.864223 c 1.860903,-1.585031 3.354211,-0.793397 4.001558,-0.670984 0.688975,0.129823 1.759303,-0.09454 1.759303,-0.09454 0,0 -0.224719,1.070328 -0.09384,1.760008 0.123472,0.648406 0.9144,2.14242 -0.671689,4.002617"
|
||||
style="fill:none;stroke:#f0cd1e;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path1006" />
|
||||
<path
|
||||
d="m 60.412451,97.276575 c -1.860197,1.586124 -3.354211,0.795126 -4.002617,0.671654 -0.68968,-0.130493 -1.760008,0.09384 -1.760008,0.09384 0,0 0.224367,-1.070293 0.0949,-1.758915 -0.122767,-0.647277 -0.9144,-2.140656 0.670631,-4.001806"
|
||||
style="fill:none;stroke:#f0cd1e;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path1008" />
|
||||
<path
|
||||
d="m 71.694991,85.538176 c 2.436989,0.195086 2.932994,1.810808 3.304117,2.355145 0.395111,0.578908 1.310922,1.177219 1.310922,1.177219 0,0 -0.915811,0.597958 -1.310922,1.178278 -0.371123,0.545394 -0.868539,2.161081 -3.305175,2.355109"
|
||||
style="fill:none;stroke:#f0cd1e;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path1010" />
|
||||
<path
|
||||
d="m 55.550115,92.603786 c -2.436989,-0.194028 -2.934053,-1.809221 -3.304823,-2.354968 -0.395816,-0.58032 -1.310922,-1.178631 -1.310922,-1.178631 0,0 0.915106,-0.597605 1.310922,-1.176866 0.37077,-0.544337 0.866775,-2.160059 3.303412,-2.355145"
|
||||
style="fill:none;stroke:#f0cd1e;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path1012" />
|
||||
<path
|
||||
d="m 71.828694,92.281206 c 1.58503,1.861291 0.793397,3.354282 0.67063,4.001523 -0.129822,0.689046 0.0949,1.759339 0.0949,1.759339 0,0 -1.070327,-0.224755 -1.760008,-0.09384 -0.648406,0.123754 -2.142772,0.914329 -4.002617,-0.671654"
|
||||
style="fill:none;stroke:#f0cd1e;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path1014" />
|
||||
<path
|
||||
d="m 55.416412,85.86132 c -1.586089,-1.859844 -0.795161,-3.354211 -0.671689,-4.002617 0.130528,-0.68968 -0.09384,-1.760008 -0.09384,-1.760008 0,0 1.070328,0.224719 1.75895,0.0949 0.6477,-0.122766 2.140656,-0.9144 4.001559,0.670631"
|
||||
style="fill:none;stroke:#f0cd1e;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path1016" />
|
||||
<path
|
||||
d="m 67.584424,86.404245 c -1.159228,-0.384527 -2.452159,-0.199672 -3.661834,-0.188383 -1.421341,0.01341 -2.849739,-0.0099 -4.259792,0.185561 -0.290688,0.04057 -0.290688,0.544336 0,0.584906 1.21532,0.16898 2.437695,0.164747 3.662892,0.179916 0.386998,0.0049 0.788459,0.02646 1.194506,0.04657 0.158044,0.493183 0.319264,0.985309 0.484364,1.476375 -1.362075,-0.519641 -2.689578,-0.398639 -3.169356,1.330678 -0.39758,1.431572 0.832556,3.550497 2.464506,3.218251 0.221544,-0.04523 0.310797,-0.372639 0.137583,-0.520771 -0.61595,-0.527544 -1.262944,-0.761788 -1.587147,-1.586935 -0.279047,-0.7112 -0.03986,-1.951567 1.035755,-1.781528 0.542573,0.08572 1.081617,0.217311 1.587853,0.433916 0.280106,0.119945 0.718609,-0.08008 0.582084,-0.447322 -0.259645,-0.6985 -0.515761,-1.398411 -0.779992,-2.094442 0.795161,0.01764 1.5875,-0.01834 2.308578,-0.257527 0.286103,-0.09454 0.286103,-0.484364 0,-0.579262"
|
||||
style="fill:#f3d11e;fill-opacity:0.2;fill-rule:nonzero;stroke:#f0cd1e;stroke-width:0.0352778;stroke-opacity:0.2"
|
||||
id="path1018" />
|
||||
<path
|
||||
d="m 63.977271,84.875306 c -0.01235,0.0021 -0.02434,0.0039 -0.03634,0.006 -0.271639,0.04516 -0.330553,0.420158 -0.156281,0.59443 0.17392,0.17392 0.548922,0.115006 0.594078,-0.156986 l 0.0056,-0.03598 c 0.04375,-0.262467 -0.144638,-0.45085 -0.407105,-0.407459"
|
||||
style="fill:#f3d11e;fill-opacity:0.2;fill-rule:nonzero;stroke:#f0cd1e;stroke-width:0.0352778;stroke-opacity:0.2"
|
||||
id="path1020" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7 KiB |
76
public/chakras/muladhara.svg
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="26.373173mm"
|
||||
height="26.373281mm"
|
||||
viewBox="0 0 26.373173 26.373281"
|
||||
version="1.1"
|
||||
id="svg1911"
|
||||
inkscape:version="1.2 (dc2aedaf03, 2022-05-15)"
|
||||
sodipodi:docname="muladhara.svg"
|
||||
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">
|
||||
<sodipodi:namedview
|
||||
id="namedview1913"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="10.35098"
|
||||
inkscape:cx="60.912107"
|
||||
inkscape:cy="50.333398"
|
||||
inkscape:window-width="2004"
|
||||
inkscape:window-height="1979"
|
||||
inkscape:window-x="8"
|
||||
inkscape:window-y="64"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs1908" />
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-50.435614,-75.884446)">
|
||||
<path
|
||||
d="M 58.003949,94.689232 H 69.240346 V 83.452977 H 58.003949 Z"
|
||||
style="fill:none;stroke:#eb3c2d;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.5"
|
||||
id="path1042" />
|
||||
<path
|
||||
d="m 68.658227,94.106902 c -2.781406,2.781265 -7.290647,2.781265 -10.071665,0 -2.7813,-2.781335 -2.7813,-7.290541 0,-10.071489 2.781018,-2.7813 7.290259,-2.7813 10.071665,0 2.7813,2.780948 2.7813,7.290154 0,10.071489 z"
|
||||
style="fill:none;stroke:#eb3c2d;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.5"
|
||||
id="path1044" />
|
||||
<path
|
||||
d="m 69.587091,95.566908 v -0.01199 c 0.08925,-0.08156 0.1778,-0.165911 0.265289,-0.253259 1.719792,-1.720215 2.580922,-3.974677 2.579864,-6.230691 0.0011,-2.255661 -0.860072,-4.510264 -2.579864,-6.230056 -0.08749,-0.08784 -0.176036,-0.172156 -0.265289,-0.253647 v -0.01199 c 3.84422,0.0011 4.563886,3.281892 5.094817,4.341284 0.529872,1.060803 1.756481,2.154414 1.756481,2.154414 0,0 -1.226609,1.093611 -1.756481,2.154414 -0.530931,1.059603 -1.250597,4.340437 -5.094817,4.34153 z"
|
||||
style="fill:none;stroke:#eb3c2d;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.5"
|
||||
id="path1046" />
|
||||
<path
|
||||
d="m 70.118022,83.106197 h -0.01199 c -0.08149,-0.08961 -0.165805,-0.1778 -0.253294,-0.265289 -1.720145,-1.720145 -3.974677,-2.580923 -6.230409,-2.579864 -2.255979,-0.0011 -4.510582,0.859719 -6.230373,2.579864 -0.08752,0.08749 -0.172121,0.175683 -0.253577,0.265289 h -0.01196 c 9.52e-4,-3.84422 3.281786,-4.563887 4.341495,-5.094817 1.060803,-0.529872 2.154414,-1.756481 2.154414,-1.756481 0,0 1.093611,1.226609 2.154167,1.756481 1.059709,0.53093 4.340472,1.250597 4.341531,5.094817 z"
|
||||
style="fill:none;stroke:#eb3c2d;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.5"
|
||||
id="path1048" />
|
||||
<path
|
||||
d="m 57.657345,82.575266 v 0.01199 c -0.08929,0.08149 -0.177764,0.165805 -0.265253,0.253294 -1.720215,1.719792 -2.580923,3.974748 -2.579829,6.230409 -0.0011,2.256014 0.859614,4.510617 2.579829,6.230409 0.08749,0.08749 0.175965,0.17212 0.265253,0.253541 v 0.01199 c -3.844149,-9.52e-4 -4.563921,-3.281786 -5.094852,-4.34153 -0.529872,-1.060803 -1.756481,-2.154414 -1.756481,-2.154414 0,0 1.226609,-1.093611 1.756481,-2.154061 0.530931,-1.060098 1.250703,-4.340578 5.094852,-4.341637 z"
|
||||
style="fill:none;stroke:#eb3c2d;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.5"
|
||||
id="path1050" />
|
||||
<path
|
||||
d="m 57.126556,95.035978 h 0.01196 c 0.08146,0.08929 0.165806,0.177765 0.253294,0.265253 1.719792,1.719792 3.974677,2.580923 6.230656,2.57997 2.255732,9.53e-4 4.510476,-0.860178 6.230268,-2.57997 0.08749,-0.08749 0.171803,-0.175965 0.253647,-0.265253 h 0.01199 c -0.0011,3.844149 -3.282033,4.563921 -4.341742,5.094852 -1.060838,0.52987 -2.154167,1.75644 -2.154167,1.75644 0,0 -1.093893,-1.22657 -2.154273,-1.75644 -1.060132,-0.530931 -4.340684,-1.250703 -4.341636,-5.094852 z"
|
||||
style="fill:none;stroke:#eb3c2d;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.5"
|
||||
id="path1052" />
|
||||
<path
|
||||
d="m 65.891144,87.468647 c -0.01517,-0.271286 -0.06809,-0.5461 -0.09028,-0.811742 -0.0049,-0.06068 -0.0074,-0.121708 -0.01129,-0.182739 0.35553,-0.04515 0.703086,-0.116063 1.029406,-0.237419 0.231986,-0.08608 0.302542,-0.494242 0,-0.542925 -0.349638,-0.05609 -0.702804,-0.06491 -1.05724,-0.0508 -0.0029,-0.1651 -0.0056,-0.329847 -0.01129,-0.494595 -0.01489,-0.439561 -0.622053,-0.419805 -0.668232,0 -0.02011,0.181681 -0.02783,0.363362 -0.03101,0.545042 -0.336656,0.0314 -0.672747,0.06844 -1.006933,0.08996 -1.051172,0.06809 -2.11127,0.03281 -3.158032,0.156634 -0.242676,0.02858 -0.350591,0.418394 -0.06311,0.46743 0.91761,0.155928 1.841465,0.145345 2.770399,0.137937 0.479002,-0.0035 0.984885,0.0071 1.488017,-0.01341 0.0031,0.04163 0.0056,0.08326 0.0091,0.124883 0.02483,0.264584 0.0441,0.555625 0.106962,0.828323 -0.517173,0.09454 -1.024185,0.348544 -1.295365,0.627944 -0.506554,0.522817 -1.007216,-0.125589 -1.696932,-0.123472 -0.676204,0.0014 -1.146104,0.220839 -1.577552,0.751064 -0.970139,1.194153 -0.01764,2.845153 1.034345,3.556353 0.260315,0.175683 0.623958,-0.177095 0.438079,-0.43815 -0.56582,-0.796925 -1.240649,-1.366661 -1.038895,-2.4638 0.334433,-1.816453 1.509501,-0.667809 2.138574,-0.565503 0.02148,0.0035 0.411621,0.122414 0.540033,0.04692 0.592702,-0.347133 1.157146,-0.869597 1.773131,-0.759178 0.0459,0.02787 0.09839,0.04269 0.149261,0.03986 0.188348,0.06562 0.381705,0.191206 0.582753,0.407106 0.919551,0.987072 -0.418359,2.264833 -1.041788,2.975328 -0.18796,0.214136 0.102235,0.509411 0.313902,0.313619 1.11058,-1.027289 1.666134,-2.112786 1.262697,-3.600097 -0.131303,-0.483659 -0.475967,-0.716139 -0.888682,-0.784578"
|
||||
style="fill:#ef3e31;fill-opacity:0.5;fill-rule:nonzero;stroke:#eb3c2d;stroke-width:0.0352778;stroke-opacity:0.5"
|
||||
id="path1054" />
|
||||
<path
|
||||
d="m 63.635024,91.761247 c -0.264301,-0.466725 -0.542255,-0.922514 -0.832203,-1.371953 0.251495,-0.02434 0.502991,-0.04904 0.75558,-0.06773 0.359798,-0.02681 0.735577,-0.105128 1.101337,-0.09172 -0.335845,0.512586 -0.699911,1.013178 -1.024714,1.531408 m 1.54298,-1.990372 c -0.971515,-0.199672 -2.037716,-0.09807 -3.024365,-0.07232 -0.264865,0.0071 -0.491842,0.319969 -0.323426,0.563738 0.478719,0.692503 0.978112,1.350081 1.513769,1.996793 -0.0834,0.201719 0.166441,0.383364 0.334716,0.228883 0.690668,-0.633942 1.195176,-1.521531 1.658056,-2.326923 0.08075,-0.141111 0.01199,-0.354894 -0.15875,-0.390172"
|
||||
style="fill:#ef3e31;fill-opacity:0.5;fill-rule:nonzero;stroke:#eb3c2d;stroke-width:0.0352778;stroke-opacity:0.5"
|
||||
id="path1056" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.2 KiB |
132
public/chakras/sahasrara.svg
Normal file
|
|
@ -0,0 +1,132 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="26.116741mm"
|
||||
height="29.412525mm"
|
||||
viewBox="0 0 26.116741 29.412525"
|
||||
version="1.1"
|
||||
id="svg1911"
|
||||
inkscape:version="1.2 (dc2aedaf03, 2022-05-15)"
|
||||
sodipodi:docname="sahasrara.svg"
|
||||
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">
|
||||
<sodipodi:namedview
|
||||
id="namedview1913"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="10.35098"
|
||||
inkscape:cx="49.077479"
|
||||
inkscape:cy="50.333398"
|
||||
inkscape:window-width="2004"
|
||||
inkscape:window-height="1979"
|
||||
inkscape:window-x="8"
|
||||
inkscape:window-y="64"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs1908" />
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-50.56383,-74.364824)">
|
||||
<path
|
||||
d="m 70.582859,88.910538 c 0,3.844713 -3.116439,6.961576 -6.961012,6.961576 -3.844572,0 -6.961364,-3.116863 -6.961364,-6.961576 0,-3.844573 3.116792,-6.961012 6.961364,-6.961012 3.844573,0 6.961012,3.116439 6.961012,6.961012 z"
|
||||
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path882" />
|
||||
<path
|
||||
d="m 72.432473,89.071052 c 0,4.016728 -2.689578,7.406146 -6.364465,8.465997 -0.776463,0.224331 -1.59773,0.34424 -2.445808,0.34424 -0.849136,0 -1.668992,-0.119909 -2.445809,-0.34424 -3.676297,-1.059851 -6.365522,-4.449269 -6.365522,-8.465997 0,-4.016728 2.689225,-7.406217 6.365522,-8.465962 0.776817,-0.224367 1.596673,-0.343958 2.445809,-0.343958 0.848078,0 1.669345,0.119591 2.445808,0.343958 3.674887,1.059745 6.364465,4.449234 6.364465,8.465962 z"
|
||||
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path884" />
|
||||
<path
|
||||
d="m 61.176391,80.60509 c 0.229659,-2.099028 1.25977,-2.560108 1.619603,-2.911122 0.405342,-0.395464 0.825148,-1.310923 0.825148,-1.310923 0,0 0.419452,0.915459 0.825852,1.310923 0.361245,0.351014 1.391709,0.812094 1.619603,2.911122"
|
||||
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path886" />
|
||||
<path
|
||||
d="m 66.068008,97.536908 c -0.229305,2.099028 -1.259769,2.560392 -1.621014,2.911122 -0.4064,0.3955 -0.826205,1.31092 -0.826205,1.31092 0,0 -0.419453,-0.91542 -0.824795,-1.31092 -0.359833,-0.35073 -1.389944,-0.812094 -1.619603,-2.911122"
|
||||
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path888" />
|
||||
<path
|
||||
d="m 72.088162,86.625243 c 2.099028,0.229306 2.560814,1.25977 2.911122,1.61925 0.395464,0.405695 1.310922,0.8255 1.310922,0.8255 0,0 -0.915458,0.4191 -1.310922,0.825853 -0.350308,0.360892 -0.812094,1.391356 -2.911122,1.619603"
|
||||
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path890" />
|
||||
<path
|
||||
d="m 55.156238,91.51686 c -2.099028,-0.229658 -2.560108,-1.259769 -2.911122,-1.620661 -0.395464,-0.407106 -1.310922,-0.826558 -1.310922,-0.826558 0,0 0.915458,-0.4191 1.310922,-0.824795 0.351014,-0.35948 0.812094,-1.389944 2.911122,-1.619603"
|
||||
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path892" />
|
||||
<path
|
||||
d="m 65.843642,80.543707 c 1.269647,-1.687336 2.390775,-1.557867 2.879019,-1.675695 0.551039,-0.132644 1.379009,-0.705555 1.379009,-0.705555 0,0 -0.106892,1.001536 0.04092,1.549047 0.131233,0.485775 0.78105,1.408995 -0.0949,3.32987"
|
||||
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path894" />
|
||||
<path
|
||||
d="m 61.400758,97.598503 c -1.269294,1.687406 -2.390775,1.557866 -2.880078,1.675024 -0.551744,0.131868 -1.380067,0.70485 -1.380067,0.70485 0,0 0.106892,-1.001148 -0.03951,-1.548342 -0.130175,-0.485069 -0.780344,-1.408218 0.09454,-3.330187"
|
||||
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path896" />
|
||||
<path
|
||||
d="m 69.887534,82.87451 c 1.952978,-0.801864 2.85115,-0.117828 3.330928,0.02999 0.541514,0.167217 1.545872,0.09772 1.545872,0.09772 0,0 -0.60325,0.80645 -0.75565,1.35255 -0.135467,0.484717 -0.04833,1.610431 -1.782586,2.814462"
|
||||
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path898" />
|
||||
<path
|
||||
d="m 57.356866,95.267559 c -1.95333,0.802287 -2.851503,0.117827 -3.331986,-0.03101 -0.541514,-0.168239 -1.546225,-0.09906 -1.546225,-0.09906 0,0 0.60325,-0.806167 0.756708,-1.351174 0.13582,-0.483693 0.04868,-1.609407 1.782234,-2.814496"
|
||||
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path900" />
|
||||
<path
|
||||
d="m 61.3997,80.543707 c -1.269647,-1.687336 -2.391128,-1.557867 -2.879373,-1.675695 -0.550333,-0.132644 -1.378655,-0.705555 -1.378655,-0.705555 0,0 0.106891,1.001536 -0.04092,1.549047 -0.131234,0.485775 -0.78105,1.408995 0.0949,3.32987"
|
||||
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path902" />
|
||||
<path
|
||||
d="m 65.842231,97.598503 c 1.27,1.687406 2.391128,1.557866 2.880783,1.675024 0.551392,0.131868 1.379714,0.70485 1.379714,0.70485 0,0 -0.107244,-1.001148 0.03951,-1.548342 0.130528,-0.485069 0.779992,-1.408218 -0.09454,-3.330187"
|
||||
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path904" />
|
||||
<path
|
||||
d="m 57.355455,82.87451 c -1.952978,-0.801864 -2.85115,-0.117828 -3.330575,0.02999 -0.541161,0.167217 -1.546225,0.09772 -1.546225,0.09772 0,0 0.60325,0.80645 0.756003,1.35255 0.135466,0.484717 0.04798,1.610431 1.782233,2.814462"
|
||||
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path906" />
|
||||
<path
|
||||
d="m 69.886475,95.267559 c 1.952978,0.802287 2.851151,0.117827 3.331634,-0.03101 0.541514,-0.168239 1.546225,-0.09906 1.546225,-0.09906 0,0 -0.60325,-0.806167 -0.756356,-1.351174 -0.136172,-0.483693 -0.04868,-1.609407 -1.782233,-2.814496"
|
||||
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path908" />
|
||||
<path
|
||||
d="m 58.557369,80.510193 h -0.0092 c 7.05e-4,-3.240617 2.563283,-3.846689 3.391253,-4.294011 0.828675,-0.446617 1.68275,-1.480962 1.68275,-1.480962 0,0 0.854075,1.034345 1.68275,1.480962 0.82797,0.447322 3.390548,1.053394 3.391253,4.294011 h -0.0092"
|
||||
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path910" />
|
||||
<path
|
||||
d="m 68.687031,97.631981 h 0.0092 c -7.05e-4,3.240189 -2.563283,3.846689 -3.391253,4.293979 -0.828675,0.44661 -1.682397,1.48099 -1.682397,1.48099 0,0 -0.854428,-1.03438 -1.683103,-1.48099 -0.82797,-0.44729 -3.390548,-1.05379 -3.391253,-4.293979 h 0.0092"
|
||||
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path912" />
|
||||
<path
|
||||
d="m 68.71102,80.524304 -0.0046,-0.0081 c 2.8448,-1.551517 4.604455,0.407811 5.393619,0.919692 0.789164,0.513644 2.106084,0.768703 2.106084,0.768703 0,0 -0.498475,1.244953 -0.493536,2.185811 0.0032,0.878769 0.609953,3.152422 -1.626306,4.71417"
|
||||
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path914" />
|
||||
<path
|
||||
d="m 58.533733,97.6178 0.0046,0.0081 c -2.8448,1.551516 -4.604809,-0.407494 -5.393972,-0.920009 -0.789164,-0.513292 -2.106084,-0.768104 -2.106084,-0.768104 0,0 0.498828,-1.245199 0.493889,-2.186128 -0.0035,-0.873125 -0.602192,-3.121731 1.58115,-4.682067"
|
||||
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path916" />
|
||||
<path
|
||||
d="m 58.533733,80.524304 0.0046,-0.0081 c -2.8448,-1.551517 -4.604809,0.407811 -5.393972,0.919692 -0.789164,0.513644 -2.106084,0.768703 -2.106084,0.768703 0,0 0.498828,1.244953 0.493889,2.185811 -0.0035,0.873831 -0.602897,3.125258 1.586089,4.685947"
|
||||
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path918" />
|
||||
<path
|
||||
d="m 68.71102,97.6178 -0.0046,0.0081 c 2.8448,1.551516 4.604455,-0.407494 5.393619,-0.920009 0.789164,-0.513292 2.106084,-0.768104 2.106084,-0.768104 0,0 -0.498475,-1.245199 -0.493536,-2.186128 0.0032,-0.874219 0.60325,-3.127376 -1.589264,-4.688065"
|
||||
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path920" />
|
||||
<path
|
||||
d="m 66.337178,88.267071 c -0.274108,-0.07479 -0.543983,-0.07726 -0.801864,-0.02505 0.02364,-0.03493 0.05045,-0.06773 0.07585,-0.101247 0.23107,-0.112184 0.439561,-0.303742 0.595489,-0.60325 0.161925,-0.310798 -0.191558,-0.769056 -0.523875,-0.524228 -0.258939,0.1905 -0.470253,0.405342 -0.651933,0.639233 -0.448734,-0.04621 -1.038578,-0.651228 -1.121834,-0.946503 -0.06385,-0.226483 -0.447675,-0.190147 -0.422275,0.05715 0.07056,0.688975 0.5969,1.241778 1.18992,1.428045 -0.15487,0.276225 -0.287514,0.570794 -0.417689,0.879475 -0.155575,0.370417 0.389467,0.62477 0.640997,0.373239 0.26917,-0.269522 1.259417,-1.011767 1.341967,0.03316 0.04868,0.381353 -0.06668,0.729192 -0.34537,1.043164 -0.408869,0.307269 -1.066094,0.210256 -1.328914,-0.274108 -0.127,-0.234598 -0.430036,-0.174978 -0.538338,0.02046 -0.177095,-0.479072 -0.499887,-0.787753 -0.916164,-0.983192 0.542219,-0.421217 0.769408,-1.038931 0.201083,-1.738842 -0.327731,-0.403225 -0.923925,-0.500239 -1.387828,-0.358775 -0.440619,0.134409 -0.545042,0.722842 -0.767644,1.056217 -0.109009,0.163336 0.10548,0.371475 0.267758,0.267406 0.138289,-0.08819 0.279753,-0.174625 0.373592,-0.314678 0.171097,-0.336903 0.493536,-0.445206 0.967669,-0.325261 0.08396,0.236008 0.167922,0.472016 0.251883,0.708025 -0.212019,0.252589 -0.478719,0.411691 -0.799747,0.476602 -0.281164,0.09243 -0.329141,0.550334 0,0.617009 0.417689,0.08502 0.773995,0.176389 1.046339,0.548569 0.559153,0.764823 -0.481542,0.936978 -0.828675,0.976842 -0.732719,0.08396 -1.323975,-0.573617 -1.422047,-1.217789 -0.04163,-0.274461 -0.454025,-0.29845 -0.574322,-0.07514 -0.318206,0.592314 0.0032,1.233664 0.552802,1.573037 0.724606,0.446264 1.405114,0.573616 2.223559,0.300919 0.402167,-0.134055 0.75953,-0.501297 0.858661,-0.923572 0.197203,0.428978 0.699911,0.6604 1.223786,0.563386 0.775759,-0.144286 1.339145,-0.542925 1.55575,-1.320095 0.136525,-0.491772 0.143934,-1.649589 -0.518583,-1.830211"
|
||||
style="fill:#98549c;fill-opacity:0.2;fill-rule:nonzero;stroke:#98549c;stroke-width:0.0352778;stroke-opacity:0.2"
|
||||
id="path922" />
|
||||
<path
|
||||
d="m 64.621972,86.221666 c -0.540455,0 -0.540455,0.837847 0,0.837847 0.540456,0 0.540456,-0.837847 0,-0.837847"
|
||||
style="fill:#98549c;fill-opacity:0.2;fill-rule:nonzero;stroke:#98549c;stroke-width:0.0352778;stroke-opacity:0.2"
|
||||
id="path924" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 12 KiB |
84
public/chakras/swadhisthana.svg
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="26.373173mm"
|
||||
height="26.373281mm"
|
||||
viewBox="0 0 26.373173 26.373281"
|
||||
version="1.1"
|
||||
id="svg1911"
|
||||
inkscape:version="1.2 (dc2aedaf03, 2022-05-15)"
|
||||
sodipodi:docname="swadhisthana.svg"
|
||||
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">
|
||||
<sodipodi:namedview
|
||||
id="namedview1913"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="10.35098"
|
||||
inkscape:cx="50.671531"
|
||||
inkscape:cy="50.333398"
|
||||
inkscape:window-width="2004"
|
||||
inkscape:window-height="1979"
|
||||
inkscape:window-x="8"
|
||||
inkscape:window-y="64"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs1908" />
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-50.435614,-75.884446)">
|
||||
<path
|
||||
d="m 70.583566,88.910556 c 0,3.844713 -3.11644,6.961576 -6.961365,6.961576 -3.844925,0 -6.961364,-3.116863 -6.961364,-6.961576 0,-3.844573 3.116439,-6.961012 6.961364,-6.961012 3.844925,0 6.961365,3.116439 6.961365,6.961012 z"
|
||||
style="fill:none;stroke:#f5911e;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path1022" />
|
||||
<path
|
||||
d="m 72.432474,89.07107 c 0,4.865864 -3.944409,8.810237 -8.810273,8.810237 -4.865864,0 -8.810273,-3.944373 -8.810273,-8.810237 0,-4.865512 3.944409,-8.810273 8.810273,-8.810273 4.865864,0 8.810273,3.944761 8.810273,8.810273 z"
|
||||
style="fill:none;stroke:#f5911e;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path1024" />
|
||||
<path
|
||||
d="m 59.139454,81.494108 h -0.0081 c 7.05e-4,-2.867731 2.268714,-3.404306 3.001433,-3.800122 0.733073,-0.395464 1.489428,-1.310923 1.489428,-1.310923 0,0 0.756003,0.915459 1.489428,1.310923 0.73272,0.395816 3.000728,0.932391 3.001434,3.800122 h -0.0081"
|
||||
style="fill:none;stroke:#f5911e;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path1026" />
|
||||
<path
|
||||
d="m 68.104949,96.648102 h 0.0081 c -7.06e-4,2.867695 -2.268714,3.404308 -3.001434,3.800338 -0.733425,0.39549 -1.489428,1.31067 -1.489428,1.31067 0,0 -0.756003,-0.91518 -1.489428,-1.31067 -0.732719,-0.39603 -3.000728,-0.932643 -3.001433,-3.800338 h 0.0081"
|
||||
style="fill:none;stroke:#f5911e;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path1028" />
|
||||
<path
|
||||
d="m 68.126115,81.506808 -0.0039,-0.0074 c 2.517422,-1.373011 4.075289,0.360892 4.773789,0.814564 0.698147,0.454378 1.863725,0.67945 1.863725,0.67945 0,0 -0.440972,1.102078 -0.436739,1.935339 0.0032,0.832908 0.61842,3.080808 -1.89865,4.455231 l -0.0039,-0.0074"
|
||||
style="fill:none;stroke:#f5911e;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path1030" />
|
||||
<path
|
||||
d="m 59.118287,96.635402 0.0039,0.0074 c -2.517423,1.373081 -4.07529,-0.360892 -4.77379,-0.814529 -0.698147,-0.454343 -1.863725,-0.67938 -1.863725,-0.67938 0,0 0.440973,-1.102148 0.436739,-1.93548 -0.0032,-0.832873 -0.618419,-3.080879 1.898298,-4.455301 l 0.0042,0.0071"
|
||||
style="fill:none;stroke:#f5911e;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path1032" />
|
||||
<path
|
||||
d="m 59.118287,81.506808 0.0039,-0.0074 c -2.517423,-1.373011 -4.07529,0.360892 -4.77379,0.814564 -0.698147,0.454378 -1.863725,0.67945 -1.863725,0.67945 0,0 0.440973,1.102078 0.436739,1.935339 -0.0032,0.832908 -0.618419,3.080808 1.898298,4.455231 l 0.0042,-0.0074"
|
||||
style="fill:none;stroke:#f5911e;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path1034" />
|
||||
<path
|
||||
d="m 68.126115,96.635402 -0.0039,0.0074 c 2.517422,1.373081 4.075289,-0.360892 4.773789,-0.814529 0.698147,-0.454343 1.863725,-0.67938 1.863725,-0.67938 0,0 -0.440972,-1.102148 -0.436739,-1.93548 0.0032,-0.832873 0.61842,-3.080879 -1.89865,-4.455301 l -0.0039,0.0071"
|
||||
style="fill:none;stroke:#f5911e;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path1036" />
|
||||
<path
|
||||
d="m 63.728387,91.072378 c -0.76835,0.270934 -1.62948,-0.164041 -2.18828,-0.663575 -1.247423,-1.115836 0.346427,-2.020358 1.401586,-2.081742 0.816328,-0.04727 1.561042,0.443089 2.067983,1.045281 0.0071,0.185914 0.01729,0.372181 0.02646,0.5588 -0.454025,0.388056 -0.667103,0.915458 -1.307748,1.141236 m 2.884664,-4.812594 c -1.988255,-0.02399 -4.014611,0.01834 -5.997928,0.170744 -0.275166,0.02117 -0.270228,0.396875 0,0.424392 1.464028,0.152752 2.96792,0.199319 4.455231,0.160161 -0.05609,0.494594 -0.07514,0.990247 -0.0762,1.485547 -0.698147,-0.703086 -1.687689,-1.094317 -2.71145,-0.858308 -1.203325,0.277283 -2.325864,1.122891 -1.883481,2.473325 0.382411,1.165578 1.811867,1.806575 2.941109,1.827389 0.561975,0.01094 1.309864,-0.299861 1.770944,-0.779639 0.05786,0.712258 0.166159,1.424728 0.464256,2.064561 0.0575,0.123861 0.258233,0.08929 0.287161,-0.03736 0.219428,-0.975219 0.06632,-2.001449 0.03422,-2.995577 -0.03351,-1.070328 -0.01129,-2.145595 -0.101601,-3.212748 0.272698,-0.0127 0.547512,-0.02081 0.817739,-0.03916 0.436034,-0.02928 0.444853,-0.677686 0,-0.68333"
|
||||
style="fill:#f7931e;fill-opacity:0.2;fill-rule:nonzero;stroke:#f5911e;stroke-width:0.0352778;stroke-opacity:0.2"
|
||||
id="path1038" />
|
||||
<path
|
||||
d="m 65.495099,84.837031 c -0.70732,0 -0.70732,1.096786 0,1.096786 0.707319,0 0.707319,-1.096786 0,-1.096786"
|
||||
style="fill:#f7931e;fill-opacity:0.2;fill-rule:nonzero;stroke:#f5911e;stroke-width:0.0352778;stroke-opacity:0.2"
|
||||
id="path1040" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.4 KiB |
124
public/chakras/vishuddha.svg
Normal file
|
|
@ -0,0 +1,124 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="26.373173mm"
|
||||
height="26.373281mm"
|
||||
viewBox="0 0 26.373173 26.373281"
|
||||
version="1.1"
|
||||
id="svg1911"
|
||||
inkscape:version="1.2 (dc2aedaf03, 2022-05-15)"
|
||||
sodipodi:docname="vishuddha.svg"
|
||||
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">
|
||||
<sodipodi:namedview
|
||||
id="namedview1913"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="10.35098"
|
||||
inkscape:cx="53.473198"
|
||||
inkscape:cy="52.941847"
|
||||
inkscape:window-width="2004"
|
||||
inkscape:window-height="1979"
|
||||
inkscape:window-x="8"
|
||||
inkscape:window-y="64"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs1908" />
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-50.435614,-75.884446)">
|
||||
<path
|
||||
d="m 70.583212,88.910308 c 0,3.844713 -3.116439,6.961576 -6.961364,6.961576 -3.844573,0 -6.961012,-3.116863 -6.961012,-6.961576 0,-3.844573 3.116439,-6.961012 6.961012,-6.961012 3.844925,0 6.961364,3.116439 6.961364,6.961012 z"
|
||||
style="fill:none;stroke:#00bee1;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path926" />
|
||||
<path
|
||||
d="m 72.432473,89.070822 c 0,4.016728 -2.689225,7.406146 -6.364464,8.465997 -0.776111,0.224331 -1.597378,0.34424 -2.445456,0.34424 -0.849136,0 -1.669344,-0.119909 -2.445456,-0.34424 -3.676297,-1.059851 -6.365875,-4.449269 -6.365875,-8.465997 0,-4.016728 2.689578,-7.406217 6.365875,-8.465962 0.776112,-0.224367 1.59632,-0.343958 2.445456,-0.343958 0.848078,0 1.669345,0.119591 2.445456,0.343958 3.675239,1.059745 6.364464,4.449234 6.364464,8.465962 z"
|
||||
style="fill:none;stroke:#00bee1;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path928" />
|
||||
<path
|
||||
d="m 61.893236,80.431646 c 0.189795,-1.950861 0.89147,-2.397125 1.139825,-2.737555 0.289631,-0.395464 0.588787,-1.310923 0.588787,-1.310923 0,0 0.298802,0.915459 0.589138,1.310923 0.25012,0.34043 0.951795,0.786694 1.140178,2.737555"
|
||||
style="fill:none;stroke:#00bee1;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path930" />
|
||||
<path
|
||||
d="m 65.351517,97.710033 c -0.188736,1.950896 -0.890058,2.397227 -1.140178,2.738047 -0.290689,0.39508 -0.589139,1.31093 -0.589139,1.31093 0,0 -0.299508,-0.91585 -0.589139,-1.31093 -0.248355,-0.34082 -0.95003,-0.787151 -1.139825,-2.738047"
|
||||
style="fill:none;stroke:#00bee1;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path932" />
|
||||
<path
|
||||
d="m 72.261376,87.341505 c 1.950861,0.1905 2.397125,0.891822 2.737908,1.140178 0.395112,0.28963 1.310923,0.589139 1.310923,0.589139 0,0 -0.915811,0.298803 -1.310923,0.589492 -0.340783,0.249766 -0.787047,0.951088 -2.737908,1.139825"
|
||||
style="fill:none;stroke:#00bee1;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path934" />
|
||||
<path
|
||||
d="m 54.983025,90.799786 c -1.951214,-0.188736 -2.397478,-0.889706 -2.737909,-1.139825 -0.395111,-0.290336 -1.310922,-0.589139 -1.310922,-0.589139 0,0 0.915811,-0.299509 1.310922,-0.588786 0.340431,-0.249061 0.786695,-0.950031 2.737909,-1.140531"
|
||||
style="fill:none;stroke:#00bee1;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path936" />
|
||||
<path
|
||||
d="m 68.508526,81.739394 c 1.513769,-1.245306 2.325158,-1.065037 2.742141,-1.129948 0.484012,-0.07479 1.343378,-0.510116 1.343378,-0.510116 0,0 -0.436739,0.858308 -0.510469,1.343377 -0.06421,0.417689 0.116417,1.229078 -1.129595,2.742142"
|
||||
style="fill:none;stroke:#00bee1;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path938" />
|
||||
<path
|
||||
d="m 58.735875,96.402568 c -1.513064,1.24587 -2.324453,1.065635 -2.741789,1.129559 -0.48507,0.07401 -1.343731,0.510434 -1.343731,0.510434 0,0 0.435681,-0.859331 0.51047,-1.343448 0.06491,-0.416596 -0.115359,-1.228232 1.129594,-2.742036"
|
||||
style="fill:none;stroke:#00bee1;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path940" />
|
||||
<path
|
||||
d="m 70.953981,93.956971 c 1.244953,1.514157 1.064684,2.325546 1.129595,2.742142 0.07514,0.484363 0.510469,1.343448 0.510469,1.343448 0,0 -0.858308,-0.436421 -1.343378,-0.510575 -0.417688,-0.06378 -1.229077,0.116452 -2.742141,-1.12956"
|
||||
style="fill:none;stroke:#00bee1;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path942" />
|
||||
<path
|
||||
d="m 56.290772,84.184496 c -1.246011,-1.513063 -1.065742,-2.324452 -1.129947,-2.741789 -0.07373,-0.485069 -0.510117,-1.34373 -0.510117,-1.34373 0,0 0.859367,0.436033 1.343378,0.510469 0.416631,0.06491 1.228019,-0.115358 2.741789,1.129595"
|
||||
style="fill:none;stroke:#00bee1;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path944" />
|
||||
<path
|
||||
d="m 65.369862,80.435527 c 0.929922,-1.725436 1.749425,-1.866195 2.110316,-2.083859 0.419806,-0.252236 1.05022,-0.981075 1.05022,-0.981075 0,0 -0.07867,0.960261 0.03634,1.436864 0.09878,0.410986 0.572911,1.093611 -0.0078,2.96545"
|
||||
style="fill:none;stroke:#00bee1;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path946" />
|
||||
<path
|
||||
d="m 61.874539,97.70647 c -0.928864,1.726106 -1.748367,1.866124 -2.110317,2.083435 -0.421216,0.252345 -1.050572,0.981185 -1.050572,0.981185 0,0 0.07796,-0.960371 -0.03598,-1.436904 -0.09772,-0.410245 -0.571853,-1.092905 0.0081,-2.965379"
|
||||
style="fill:none;stroke:#00bee1;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path948" />
|
||||
<path
|
||||
d="m 72.257848,90.818483 c 1.725436,0.929922 1.865842,1.749425 2.083506,2.110317 0.252589,0.419876 0.981075,1.050219 0.981075,1.050219 0,0 -0.959909,-0.07899 -1.436864,0.03637 -0.410633,0.09881 -1.093611,0.57284 -2.96545,-0.0077"
|
||||
style="fill:none;stroke:#00bee1;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path950" />
|
||||
<path
|
||||
d="m 54.986553,87.323513 c -1.726142,-0.929216 -1.865842,-1.748719 -2.083506,-2.110316 -0.252236,-0.42157 -0.981075,-1.050926 -0.981075,-1.050926 0,0 0.960614,0.07796 1.436864,-0.03598 0.409928,-0.09772 1.092905,-0.571853 2.965803,0.0078"
|
||||
style="fill:none;stroke:#00bee1;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path952" />
|
||||
<path
|
||||
d="m 61.874539,80.435527 c -0.929922,-1.725436 -1.749425,-1.866195 -2.110317,-2.083859 -0.419805,-0.252236 -1.050572,-0.981075 -1.050572,-0.981075 0,0 0.07902,0.960261 -0.03598,1.436864 -0.09878,0.410986 -0.572911,1.093611 0.0081,2.96545"
|
||||
style="fill:none;stroke:#00bee1;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path954" />
|
||||
<path
|
||||
d="m 65.369862,97.70647 c 0.928863,1.726106 1.748366,1.866124 2.110316,2.083435 0.421217,0.252345 1.05022,0.981185 1.05022,0.981185 0,0 -0.07761,-0.960371 0.03634,-1.436904 0.09772,-0.410245 0.571853,-1.092905 -0.0078,-2.965379"
|
||||
style="fill:none;stroke:#00bee1;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path956" />
|
||||
<path
|
||||
d="m 54.986553,90.818483 c -1.725437,0.929922 -1.865842,1.749425 -2.083506,2.110317 -0.252589,0.419876 -0.981075,1.050219 -0.981075,1.050219 0,0 0.959908,-0.07899 1.436864,0.03637 0.410633,0.09881 1.093611,0.57284 2.965803,-0.0077"
|
||||
style="fill:none;stroke:#00bee1;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path958" />
|
||||
<path
|
||||
d="m 72.257848,87.323513 c 1.726142,-0.929216 1.866195,-1.748719 2.083506,-2.110316 0.252236,-0.42157 0.981075,-1.050926 0.981075,-1.050926 0,0 -0.960261,0.07796 -1.436864,-0.03598 -0.410281,-0.09772 -1.092906,-0.571853 -2.96545,0.0078"
|
||||
style="fill:none;stroke:#00bee1;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
|
||||
id="path960" />
|
||||
<path
|
||||
d="m 66.0225,86.517416 c -0.726369,-0.09137 -1.489427,0.03775 -2.223558,0.0508 -0.860425,0.01482 -1.742017,-0.118533 -2.595033,-0.02752 -0.397581,0.04233 -0.501298,0.576792 -0.09596,0.709437 0.740481,0.242005 1.545872,0.231775 2.319867,0.254352 0.404989,0.01199 0.837847,0.02223 1.268589,0.0025 0.0095,0.2286 0.02399,0.4572 0.04516,0.685447 -0.820914,-0.08079 -1.655586,-0.07902 -2.478264,-0.08467 -0.231069,-0.0014 -0.382058,0.183445 -0.399697,0.399345 -0.07373,0.904169 -0.07056,1.799519 0.01376,2.693106 -0.108302,0.350308 -0.07267,0.75318 0.102306,1.069234 0.01517,0.02783 0.03351,0.05676 0.0508,0.08569 3.53e-4,2.82e-4 3.53e-4,7.05e-4 3.53e-4,9.87e-4 0.02187,0.120686 0.08608,0.195792 0.167922,0.237138 0.196497,0.239783 0.457905,0.431482 0.763411,0.353483 0.126647,-0.03253 0.183445,-0.140829 0.197908,-0.260738 0.05891,-0.48955 -0.561622,-0.737553 -0.405694,-1.282947 0.164747,-0.575734 1.142647,-0.679803 1.623483,-0.726017 0.303037,-0.02928 0.41275,-0.486833 0.0762,-0.563033 -0.646289,-0.146756 -1.292577,-0.130528 -1.812925,0.172508 -0.01411,-0.464255 -0.01588,-0.928511 0.0056,-1.395236 0.793044,-0.02999 1.592439,-0.05362 2.377017,-0.157339 0.130527,-0.01729 0.268816,-0.104775 0.257527,-0.257528 -0.0254,-0.338314 -0.0635,-0.672394 -0.110772,-1.006122 0.330553,-0.03704 0.652992,-0.100189 0.952853,-0.20567 0.424744,-0.149577 0.318558,-0.694619 -0.100895,-0.747183"
|
||||
style="fill:#00bee5;fill-opacity:0.2;fill-rule:nonzero;stroke:#00bee1;stroke-width:0.0352778;stroke-opacity:0.2"
|
||||
id="path962" />
|
||||
<path
|
||||
d="m 63.23485,85.298569 -0.02928,0.02928 c -0.375003,0.375003 0.205669,0.955675 0.580672,0.580673 l 0.02928,-0.02928 c 0.37465,-0.375003 -0.206023,-0.955322 -0.580673,-0.580672"
|
||||
style="fill:#00bee5;fill-opacity:0.2;fill-rule:nonzero;stroke:#00bee1;stroke-width:0.0352778;stroke-opacity:0.2"
|
||||
id="path964" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 11 KiB |
80
src/App.vue
|
|
@ -1,77 +1,47 @@
|
|||
<script setup lang="ts">
|
||||
import { onMounted, ref, computed, watch } from 'vue'
|
||||
import { useRoute } from 'vue-router'
|
||||
import AppLayout from '@/components/layout/AppLayout.vue'
|
||||
import LoginDialog from '@/components/auth/LoginDialog.vue'
|
||||
import { computed, ref } from 'vue'
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
import { Toaster } from '@/components/ui/sonner'
|
||||
import 'vue-sonner/style.css'
|
||||
import { useMarketPreloader } from '@/modules/market/composables/useMarketPreloader'
|
||||
import { auth } from '@/composables/useAuthService'
|
||||
import { toast } from 'vue-sonner'
|
||||
import LoginDialog from '@/components/auth/LoginDialog.vue'
|
||||
import { useTheme } from '@/components/theme-provider'
|
||||
import { toast } from 'vue-sonner'
|
||||
import { useAuth } from '@/composables/useAuthService'
|
||||
import { Button } from '@/components/ui/button'
|
||||
import { LogIn } from 'lucide-vue-next'
|
||||
|
||||
const route = useRoute()
|
||||
const router = useRouter()
|
||||
|
||||
useTheme()
|
||||
const { isAuthenticated } = useAuth()
|
||||
|
||||
const showLoginDialog = ref(false)
|
||||
|
||||
// Initialize theme (applies dark mode immediately)
|
||||
useTheme()
|
||||
|
||||
// Initialize preloader
|
||||
const marketPreloader = useMarketPreloader()
|
||||
|
||||
// Show layout on all pages except login
|
||||
const showLayout = computed(() => {
|
||||
return route.path !== '/login'
|
||||
})
|
||||
const isLoginPage = computed(() => route.path === '/login')
|
||||
|
||||
async function handleLoginSuccess() {
|
||||
showLoginDialog.value = false
|
||||
toast.success('Welcome back!')
|
||||
|
||||
// Trigger preloading after successful login
|
||||
marketPreloader.preloadMarket()
|
||||
|
||||
// Chat initialization is now handled by the chat module
|
||||
toast.success('Welcome!')
|
||||
}
|
||||
|
||||
onMounted(async () => {
|
||||
// Initialize authentication
|
||||
try {
|
||||
await auth.initialize()
|
||||
} catch (error) {
|
||||
console.error('Failed to initialize authentication:', error)
|
||||
}
|
||||
|
||||
// Relay hub initialization is handled by the base module
|
||||
})
|
||||
|
||||
// Watch for authentication changes and trigger preloading
|
||||
watch(() => auth.isAuthenticated.value, async (isAuthenticated) => {
|
||||
if (isAuthenticated) {
|
||||
if (!marketPreloader.isPreloaded.value) {
|
||||
console.log('User authenticated, triggering market preload...')
|
||||
marketPreloader.preloadMarket()
|
||||
}
|
||||
// Chat connection is now handled by the chat module automatically
|
||||
}
|
||||
}, { immediate: true })
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="min-h-screen bg-background font-sans antialiased">
|
||||
<!-- Sidebar layout for authenticated pages -->
|
||||
<AppLayout v-if="showLayout">
|
||||
<router-view />
|
||||
</AppLayout>
|
||||
<div class="relative flex min-h-screen flex-col"
|
||||
style="padding-top: env(safe-area-inset-top); padding-bottom: env(safe-area-inset-bottom)">
|
||||
|
||||
<!-- Login page without sidebar -->
|
||||
<div v-else class="min-h-screen">
|
||||
<router-view />
|
||||
<div v-if="!isLoginPage && !isAuthenticated" class="fixed top-0 right-0 z-50 p-3" style="padding-top: env(safe-area-inset-top)">
|
||||
<Button variant="ghost" size="icon" class="h-8 w-8" @click="router.push('/login')">
|
||||
<LogIn class="w-4 h-4" />
|
||||
</Button>
|
||||
</div>
|
||||
|
||||
<main class="flex-1">
|
||||
<router-view />
|
||||
</main>
|
||||
</div>
|
||||
|
||||
<!-- Toast notifications -->
|
||||
<Toaster />
|
||||
<!-- Login dialog -->
|
||||
<LoginDialog v-model:is-open="showLoginDialog" @success="handleLoginSuccess" />
|
||||
</div>
|
||||
</template>
|
||||
|
|
|
|||
|
|
@ -1,12 +1,11 @@
|
|||
import type { AppConfig } from './core/types'
|
||||
|
||||
function parseMapCenter(envValue: string | undefined, fallback: { lat: number; lng: number }) {
|
||||
if (!envValue) return fallback
|
||||
const [lat, lng] = envValue.split(',').map(Number)
|
||||
if (isNaN(lat) || isNaN(lng)) return fallback
|
||||
return { lat, lng }
|
||||
}
|
||||
|
||||
/**
|
||||
* Minimal AIO hub configuration.
|
||||
* The all-in-one app at app.${domain} ships only the base module —
|
||||
* each feature module (wallet, chat, market, tasks, forum, activities,
|
||||
* castle) is now its own standalone PWA at its own subdomain.
|
||||
*/
|
||||
export const appConfig: AppConfig = {
|
||||
modules: {
|
||||
base: {
|
||||
|
|
@ -18,7 +17,7 @@ export const appConfig: AppConfig = {
|
|||
relays: JSON.parse(import.meta.env.VITE_NOSTR_RELAYS || '["wss://relay.damus.io", "wss://nos.lol"]')
|
||||
},
|
||||
auth: {
|
||||
sessionTimeout: 24 * 60 * 60 * 1000, // 24 hours
|
||||
sessionTimeout: 24 * 60 * 60 * 1000,
|
||||
},
|
||||
pwa: {
|
||||
autoPrompt: true
|
||||
|
|
@ -29,112 +28,6 @@ export const appConfig: AppConfig = {
|
|||
acceptedTypes: ['image/jpeg', 'image/png', 'image/webp', 'image/avif', 'image/gif']
|
||||
}
|
||||
}
|
||||
},
|
||||
'nostr-feed': {
|
||||
name: 'nostr-feed',
|
||||
enabled: false, // Disabled - replaced by forum module
|
||||
lazy: false,
|
||||
config: {
|
||||
refreshInterval: 30000,
|
||||
maxPosts: 100,
|
||||
adminPubkeys: JSON.parse(import.meta.env.VITE_ADMIN_PUBKEYS || '[]'),
|
||||
feedTypes: ['announcements', 'general']
|
||||
}
|
||||
},
|
||||
forum: {
|
||||
name: 'forum',
|
||||
enabled: true,
|
||||
lazy: false,
|
||||
config: {
|
||||
maxSubmissions: 50,
|
||||
corsProxyUrl: import.meta.env.VITE_CORS_PROXY_URL || '',
|
||||
adminPubkeys: JSON.parse(import.meta.env.VITE_ADMIN_PUBKEYS || '[]')
|
||||
}
|
||||
},
|
||||
tasks: {
|
||||
name: 'tasks',
|
||||
enabled: true,
|
||||
lazy: false,
|
||||
config: {
|
||||
maxTasks: 200,
|
||||
adminPubkeys: JSON.parse(import.meta.env.VITE_ADMIN_PUBKEYS || '[]')
|
||||
}
|
||||
},
|
||||
market: {
|
||||
name: 'market',
|
||||
enabled: true,
|
||||
lazy: false,
|
||||
config: {
|
||||
defaultCurrency: 'sats',
|
||||
paymentTimeout: 300000, // 5 minutes
|
||||
maxOrderHistory: 50,
|
||||
apiConfig: {
|
||||
baseUrl: import.meta.env.VITE_LNBITS_BASE_URL || 'http://localhost:5000'
|
||||
}
|
||||
}
|
||||
},
|
||||
chat: {
|
||||
name: 'chat',
|
||||
enabled: true,
|
||||
lazy: false, // Load on startup to register routes
|
||||
config: {
|
||||
maxMessages: 500,
|
||||
autoScroll: true,
|
||||
showTimestamps: true,
|
||||
notifications: {
|
||||
enabled: true,
|
||||
soundEnabled: false,
|
||||
wildcardSupport: true
|
||||
}
|
||||
}
|
||||
},
|
||||
activities: {
|
||||
name: 'activities',
|
||||
enabled: true,
|
||||
lazy: false,
|
||||
config: {
|
||||
apiConfig: {
|
||||
baseUrl: import.meta.env.VITE_LNBITS_BASE_URL || 'http://localhost:5000',
|
||||
apiKey: import.meta.env.VITE_API_KEY || ''
|
||||
},
|
||||
defaultMapCenter: parseMapCenter(import.meta.env.VITE_DEFAULT_MAP_CENTER, { lat: 46.6034, lng: 1.8883 }),
|
||||
maxTicketsPerUser: 10,
|
||||
enableMap: true,
|
||||
enablePrivateEvents: false
|
||||
}
|
||||
},
|
||||
wallet: {
|
||||
name: 'wallet',
|
||||
enabled: true,
|
||||
lazy: false,
|
||||
config: {
|
||||
defaultReceiveAmount: 1000, // 1000 sats
|
||||
maxReceiveAmount: 1000000, // 1M sats
|
||||
apiConfig: {
|
||||
baseUrl: import.meta.env.VITE_LNBITS_BASE_URL || 'http://localhost:5000'
|
||||
},
|
||||
websocket: {
|
||||
enabled: import.meta.env.VITE_WEBSOCKET_ENABLED !== 'false', // Can be disabled via env var
|
||||
reconnectDelay: 2000, // 2 seconds (increased from 1s to reduce server load)
|
||||
maxReconnectAttempts: 3, // Reduced from 5 to avoid overwhelming server
|
||||
fallbackToPolling: true, // Enable polling fallback when WebSocket fails
|
||||
pollingInterval: 10000 // 10 seconds for polling updates
|
||||
}
|
||||
}
|
||||
},
|
||||
expenses: {
|
||||
name: 'expenses',
|
||||
enabled: true,
|
||||
lazy: false,
|
||||
config: {
|
||||
apiConfig: {
|
||||
baseUrl: import.meta.env.VITE_LNBITS_BASE_URL || 'http://localhost:5000',
|
||||
timeout: 30000 // 30 seconds for API requests
|
||||
},
|
||||
defaultCurrency: 'sats',
|
||||
maxExpenseAmount: 1000000, // 1M sats
|
||||
requireDescription: true
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
|
|
|
|||
153
src/app.ts
|
|
@ -1,67 +1,43 @@
|
|||
import { createApp } from 'vue'
|
||||
import { createRouter, createWebHistory } from 'vue-router'
|
||||
import { createPinia } from 'pinia'
|
||||
// Core plugin system
|
||||
import { pluginManager } from './core/plugin-manager'
|
||||
import { eventBus } from './core/event-bus'
|
||||
import { container } from './core/di-container'
|
||||
|
||||
// App configuration
|
||||
import appConfig from './app.config'
|
||||
|
||||
// Base modules
|
||||
import baseModule from './modules/base'
|
||||
import nostrFeedModule from './modules/nostr-feed'
|
||||
import chatModule from './modules/chat'
|
||||
import activitiesModule from './modules/activities'
|
||||
import marketModule from './modules/market'
|
||||
import walletModule from './modules/wallet'
|
||||
import expensesModule from './modules/expenses'
|
||||
import forumModule from './modules/forum'
|
||||
import tasksModule from './modules/tasks'
|
||||
|
||||
// Root component
|
||||
import App from './App.vue'
|
||||
|
||||
// Styles
|
||||
import './assets/index.css'
|
||||
|
||||
// Use existing i18n setup
|
||||
import { i18n } from './i18n'
|
||||
|
||||
/**
|
||||
* Initialize and start the modular application
|
||||
* Initialize and start the minimal AIO hub.
|
||||
*
|
||||
* The all-in-one app at app.${domain} now ships only the base module
|
||||
* plus a chakra icon hub linking out to the standalone module apps
|
||||
* (wallet, chat, market, tasks, forum, activities, castle).
|
||||
*/
|
||||
export async function createAppInstance() {
|
||||
console.log('🚀 Starting modular application...')
|
||||
console.log('🚀 Starting AIO hub...')
|
||||
|
||||
// Create Vue app
|
||||
const app = createApp(App)
|
||||
|
||||
// Collect all module routes automatically to avoid duplication
|
||||
const moduleRoutes = [
|
||||
// Extract routes from modules directly
|
||||
...baseModule.routes || [],
|
||||
...nostrFeedModule.routes || [],
|
||||
...chatModule.routes || [],
|
||||
...activitiesModule.routes || [],
|
||||
...marketModule.routes || [],
|
||||
...walletModule.routes || [],
|
||||
...expensesModule.routes || [],
|
||||
...forumModule.routes || [],
|
||||
...tasksModule.routes || []
|
||||
].filter(Boolean)
|
||||
|
||||
// Create router with all routes available immediately
|
||||
const router = createRouter({
|
||||
history: createWebHistory(),
|
||||
routes: [
|
||||
// Default routes
|
||||
{
|
||||
path: '/',
|
||||
name: 'home',
|
||||
component: () => import('./pages/Home.vue'),
|
||||
meta: { requiresAuth: true }
|
||||
name: 'hub',
|
||||
component: () => import('./pages/Hub.vue'),
|
||||
meta: { requiresAuth: false }
|
||||
},
|
||||
{
|
||||
path: '/login',
|
||||
|
|
@ -71,172 +47,71 @@ export async function createAppInstance() {
|
|||
: () => import('./pages/Login.vue'),
|
||||
meta: { requiresAuth: false }
|
||||
},
|
||||
// Pre-register module routes
|
||||
...moduleRoutes
|
||||
]
|
||||
})
|
||||
|
||||
// Use existing i18n setup
|
||||
|
||||
// Create Pinia store
|
||||
const pinia = createPinia()
|
||||
|
||||
// Install core plugins
|
||||
app.use(router)
|
||||
app.use(pinia)
|
||||
app.use(i18n)
|
||||
|
||||
// Initialize plugin manager
|
||||
pluginManager.init(app, router)
|
||||
|
||||
// Register modules based on configuration
|
||||
const moduleRegistrations = []
|
||||
|
||||
// Register base module first (required)
|
||||
if (appConfig.modules.base.enabled) {
|
||||
moduleRegistrations.push(
|
||||
pluginManager.register(baseModule, appConfig.modules.base)
|
||||
)
|
||||
}
|
||||
|
||||
// Register nostr-feed module
|
||||
if (appConfig.modules['nostr-feed'].enabled) {
|
||||
moduleRegistrations.push(
|
||||
pluginManager.register(nostrFeedModule, appConfig.modules['nostr-feed'])
|
||||
)
|
||||
}
|
||||
|
||||
// Register chat module
|
||||
if (appConfig.modules.chat.enabled) {
|
||||
moduleRegistrations.push(
|
||||
pluginManager.register(chatModule, appConfig.modules.chat)
|
||||
)
|
||||
}
|
||||
|
||||
// Register activities module (events + ticketing)
|
||||
if (appConfig.modules.activities?.enabled) {
|
||||
moduleRegistrations.push(
|
||||
pluginManager.register(activitiesModule, appConfig.modules.activities)
|
||||
)
|
||||
}
|
||||
|
||||
// Register market module
|
||||
if (appConfig.modules.market.enabled) {
|
||||
moduleRegistrations.push(
|
||||
pluginManager.register(marketModule, appConfig.modules.market)
|
||||
)
|
||||
}
|
||||
|
||||
// Register wallet module
|
||||
if (appConfig.modules.wallet?.enabled) {
|
||||
moduleRegistrations.push(
|
||||
pluginManager.register(walletModule, appConfig.modules.wallet)
|
||||
)
|
||||
}
|
||||
|
||||
// Register expenses module
|
||||
if (appConfig.modules.expenses?.enabled) {
|
||||
moduleRegistrations.push(
|
||||
pluginManager.register(expensesModule, appConfig.modules.expenses)
|
||||
)
|
||||
}
|
||||
|
||||
// Register forum module
|
||||
if (appConfig.modules.forum?.enabled) {
|
||||
moduleRegistrations.push(
|
||||
pluginManager.register(forumModule, appConfig.modules.forum)
|
||||
)
|
||||
}
|
||||
|
||||
// Register tasks module
|
||||
if (appConfig.modules.tasks?.enabled) {
|
||||
moduleRegistrations.push(
|
||||
pluginManager.register(tasksModule, appConfig.modules.tasks)
|
||||
)
|
||||
}
|
||||
|
||||
// Wait for all modules to register
|
||||
await Promise.all(moduleRegistrations)
|
||||
|
||||
// Install all enabled modules
|
||||
await pluginManager.installAll()
|
||||
|
||||
// Initialize auth before setting up router guards
|
||||
const { auth } = await import('@/composables/useAuthService')
|
||||
await auth.initialize()
|
||||
console.log('Auth initialized, isAuthenticated:', auth.isAuthenticated.value)
|
||||
|
||||
// Set up auth guard
|
||||
router.beforeEach(async (to, _from, next) => {
|
||||
// Default to requiring auth unless explicitly set to false
|
||||
const requiresAuth = to.meta.requiresAuth !== false
|
||||
const requiresAuth = to.meta.requiresAuth === true
|
||||
|
||||
if (requiresAuth && !auth.isAuthenticated.value) {
|
||||
console.log(`Auth guard: User not authenticated, redirecting from ${to.path} to login`)
|
||||
next('/login')
|
||||
} else if (to.path === '/login' && auth.isAuthenticated.value) {
|
||||
console.log('Auth guard: User already authenticated, redirecting to home')
|
||||
next('/')
|
||||
} else {
|
||||
console.log(`Auth guard: Allowing navigation to ${to.path} (requiresAuth: ${requiresAuth}, authenticated: ${auth.isAuthenticated.value})`)
|
||||
next()
|
||||
}
|
||||
})
|
||||
|
||||
// Check initial route and redirect if needed
|
||||
if (!auth.isAuthenticated.value) {
|
||||
const currentRoute = router.currentRoute.value
|
||||
const requiresAuth = currentRoute.meta.requiresAuth !== false
|
||||
if (requiresAuth) {
|
||||
console.log('Initial route requires auth but user not authenticated, redirecting to login')
|
||||
await router.push('/login')
|
||||
}
|
||||
}
|
||||
|
||||
// Global error handling
|
||||
app.config.errorHandler = (err, _vm, info) => {
|
||||
console.error('Global error:', err, info)
|
||||
eventBus.emit('app:error', { error: err, info }, 'app')
|
||||
}
|
||||
|
||||
// Development helpers
|
||||
if (appConfig.features.developmentMode) {
|
||||
// Expose debugging helpers globally
|
||||
;(window as any).__pluginManager = pluginManager
|
||||
;(window as any).__eventBus = eventBus
|
||||
;(window as any).__container = container
|
||||
|
||||
console.log('🔧 Development mode enabled')
|
||||
console.log('Available globals: __pluginManager, __eventBus, __container')
|
||||
}
|
||||
|
||||
console.log('✅ Application initialized successfully')
|
||||
|
||||
console.log('✅ AIO hub initialized')
|
||||
return { app, router }
|
||||
}
|
||||
|
||||
/**
|
||||
* Start the application
|
||||
*/
|
||||
export async function startApp() {
|
||||
try {
|
||||
const { app } = await createAppInstance()
|
||||
|
||||
// Mount the app
|
||||
app.mount('#app')
|
||||
|
||||
console.log('🎉 Application started!')
|
||||
|
||||
// Emit app started event
|
||||
console.log('🎉 AIO hub started!')
|
||||
eventBus.emit('app:started', {}, 'app')
|
||||
|
||||
} catch (error) {
|
||||
console.error('💥 Failed to start application:', error)
|
||||
|
||||
// Show error to user
|
||||
console.error('💥 Failed to start AIO hub:', error)
|
||||
document.getElementById('app')!.innerHTML = `
|
||||
<div style="padding: 20px; text-align: center; color: red;">
|
||||
<h1>Application Failed to Start</h1>
|
||||
<h1>AIO hub failed to start</h1>
|
||||
<p>${error instanceof Error ? error.message : 'Unknown error'}</p>
|
||||
<p>Please refresh the page or contact support.</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -27,9 +27,7 @@ export function useLocale() {
|
|||
const flagMap: Record<string, string> = {
|
||||
'en': '🇬🇧',
|
||||
'es': '🇪🇸',
|
||||
'fr': '🇫🇷',
|
||||
'de': '🇩🇪',
|
||||
'zh': '🇨🇳'
|
||||
'fr': '🇫🇷'
|
||||
}
|
||||
return flagMap[locale] || '🌐'
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import { useStorage } from '@vueuse/core'
|
|||
import en from './locales/en'
|
||||
|
||||
// Define available locales
|
||||
export const AVAILABLE_LOCALES = ['en', 'es', 'fr', 'de', 'zh'] as const
|
||||
export const AVAILABLE_LOCALES = ['en', 'es', 'fr'] as const
|
||||
export type AvailableLocale = typeof AVAILABLE_LOCALES[number]
|
||||
|
||||
// Type for our messages
|
||||
|
|
|
|||
194
src/pages/Hub.vue
Normal file
|
|
@ -0,0 +1,194 @@
|
|||
<script setup lang="ts">
|
||||
import { computed, ref } from 'vue'
|
||||
import { useAuth } from '@/composables/useAuthService'
|
||||
import { useTheme } from '@/components/theme-provider'
|
||||
import { useLocale } from '@/composables/useLocale'
|
||||
import { toast } from 'vue-sonner'
|
||||
import {
|
||||
Castle, ListTodo, Newspaper, MessageCircle, Wallet, CalendarDays,
|
||||
Store, UtensilsCrossed,
|
||||
User as UserIcon, Sun, Moon, Monitor, Globe, Coins,
|
||||
} from 'lucide-vue-next'
|
||||
import {
|
||||
DropdownMenu, DropdownMenuTrigger, DropdownMenuContent,
|
||||
DropdownMenuItem, DropdownMenuRadioGroup, DropdownMenuRadioItem,
|
||||
DropdownMenuLabel, DropdownMenuSeparator,
|
||||
} from '@/components/ui/dropdown-menu'
|
||||
import {
|
||||
Sheet, SheetContent, SheetHeader, SheetTitle, SheetDescription, SheetTrigger,
|
||||
} from '@/components/ui/sheet'
|
||||
import ProfileSettings from '@/modules/base/components/ProfileSettings.vue'
|
||||
|
||||
const { isAuthenticated } = useAuth()
|
||||
const { theme, setTheme, currentTheme } = useTheme()
|
||||
const { currentLocale, locales, setLocale } = useLocale()
|
||||
|
||||
interface Module {
|
||||
label: string
|
||||
chakra: string
|
||||
icon: any
|
||||
bgClass: string
|
||||
glow: string
|
||||
envKey?: string
|
||||
status?: string
|
||||
}
|
||||
|
||||
// Lower (root/red) → upper (crown/violet)
|
||||
const modules: Module[] = [
|
||||
{ label: 'Restaurant', chakra: 'Muladhara', icon: UtensilsCrossed, bgClass: '', glow: 'rgba(255,80,80,0.5)', status: 'coming soon' },
|
||||
{ label: 'Market', chakra: 'Muladhara', icon: Store, bgClass: '', glow: 'rgba(255,80,80,0.5)', envKey: 'VITE_HUB_MARKET_URL', status: 'alpha' },
|
||||
{ label: 'Wallet', chakra: 'Manipura', icon: Wallet, bgClass: '', glow: 'rgba(255,200,0,0.5)', envKey: 'VITE_HUB_WALLET_URL', status: 'alpha' },
|
||||
{ label: 'Activities', chakra: 'Swadhisthana', icon: CalendarDays, bgClass: '', glow: 'rgba(255,165,0,0.5)', envKey: 'VITE_HUB_ACTIVITIES_URL', status: 'beta' },
|
||||
{ label: 'Chat', chakra: 'Anahata', icon: MessageCircle, bgClass: '', glow: 'rgba(0,200,80,0.5)', envKey: 'VITE_HUB_CHAT_URL', status: 'alpha' },
|
||||
{ label: 'Forum', chakra: 'Vishuddha', icon: Newspaper, bgClass: '', glow: 'rgba(60,120,255,0.5)', envKey: 'VITE_HUB_FORUM_URL', status: 'alpha' },
|
||||
{ label: 'Tasks', chakra: 'Ajna', icon: ListTodo, bgClass: '', glow: 'rgba(99,80,200,0.5)', envKey: 'VITE_HUB_TASKS_URL', status: 'alpha' },
|
||||
{ label: 'Castle', chakra: 'Sahasrara', icon: Castle, bgClass: '', glow: 'rgba(160,80,220,0.5)', envKey: 'VITE_HUB_CASTLE_URL', status: 'beta' },
|
||||
]
|
||||
// Crown at top, root at bottom
|
||||
const orderedModules = computed(() => [...modules].reverse())
|
||||
|
||||
const token = computed(() => localStorage.getItem('lnbits_access_token') || '')
|
||||
|
||||
function hubLink(m: Module): string | null {
|
||||
if (!m.envKey) return null
|
||||
const url = import.meta.env[m.envKey] as string | undefined
|
||||
if (!url) return null
|
||||
if (isAuthenticated.value && token.value) {
|
||||
const sep = url.includes('?') ? '&' : '?'
|
||||
return `${url}${sep}token=${encodeURIComponent(token.value)}`
|
||||
}
|
||||
return url
|
||||
}
|
||||
|
||||
const showProfile = ref(false)
|
||||
|
||||
function notImplemented() {
|
||||
toast.info('Currency picker — coming soon', {
|
||||
description: 'A preferred-currency setting (sats/USD/EUR) is on the roadmap.',
|
||||
})
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="relative h-screen flex flex-col text-foreground overflow-hidden bg-background"
|
||||
style="
|
||||
background-image:
|
||||
linear-gradient(to bottom,
|
||||
rgba(124, 58, 237, 0.10) 0%,
|
||||
rgba(37, 99, 235, 0.06) 28%,
|
||||
rgba(22, 163, 74, 0.04) 50%,
|
||||
rgba(234, 88, 12, 0.06) 75%,
|
||||
rgba(185, 28, 28, 0.10) 100%);
|
||||
"
|
||||
>
|
||||
<!-- Faint chakra mandala column behind tiles (peek through translucent tiles) -->
|
||||
<div class="absolute inset-x-0 top-0 bottom-16 flex flex-col justify-around items-center py-4 pointer-events-none">
|
||||
<img v-for="svg in ['sahasrara.svg','ajna.svg','vishuddha.svg','anahata.svg','manipura.svg','swadhisthana.svg','muladhara.svg']"
|
||||
:key="svg"
|
||||
:src="`/chakras/${svg}`"
|
||||
class="w-32 h-32 sm:w-40 sm:h-40 opacity-90"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<!-- Main grid -->
|
||||
<div class="relative w-full max-w-2xl mx-auto px-4 pt-6 pb-2 flex-1 flex flex-col min-h-0">
|
||||
<h1 class="text-2xl font-light text-center text-foreground/90 mb-1 tracking-wide">aiolabs</h1>
|
||||
<p class="text-xs text-center text-muted-foreground mb-3 italic">from earth to sky</p>
|
||||
|
||||
<div class="grid grid-cols-2 gap-2 flex-1 min-h-0">
|
||||
<component
|
||||
v-for="m in orderedModules"
|
||||
:key="m.label"
|
||||
:is="hubLink(m) ? 'a' : 'div'"
|
||||
:href="hubLink(m) || undefined"
|
||||
class="relative flex flex-col items-center justify-center gap-1 rounded-xl border backdrop-blur-sm transition-all p-2 min-h-0"
|
||||
:class="[
|
||||
hubLink(m)
|
||||
? 'bg-card/60 hover:bg-card/40 border-white/10 hover:border-white/25 cursor-pointer'
|
||||
: 'bg-card/70 border-white/5 opacity-60 cursor-not-allowed',
|
||||
]"
|
||||
>
|
||||
<component :is="m.icon" class="h-7 w-7 text-foreground/90" :style="{ filter: `drop-shadow(0 0 8px ${m.glow})` }" />
|
||||
<div class="text-center leading-tight">
|
||||
<p class="text-sm font-semibold text-foreground drop-shadow">{{ m.label }}</p>
|
||||
<p v-if="m.status" class="text-[9px] font-light text-muted-foreground">{{ m.status }}</p>
|
||||
</div>
|
||||
</component>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Bottom bar: profile & user preferences -->
|
||||
<nav
|
||||
class="relative z-10 border-t bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60"
|
||||
style="padding-bottom: env(safe-area-inset-bottom)"
|
||||
>
|
||||
<div class="flex items-center justify-around h-14 max-w-lg mx-auto">
|
||||
<!-- Profile -->
|
||||
<Sheet v-model:open="showProfile">
|
||||
<SheetTrigger as-child>
|
||||
<button class="flex flex-col items-center justify-center gap-0.5 flex-1 h-full text-muted-foreground hover:text-foreground transition-colors">
|
||||
<UserIcon class="w-5 h-5" />
|
||||
<span class="text-[10px] font-medium">Profile</span>
|
||||
</button>
|
||||
</SheetTrigger>
|
||||
<SheetContent side="bottom" class="h-[90vh] overflow-y-auto">
|
||||
<SheetHeader>
|
||||
<SheetTitle>Profile</SheetTitle>
|
||||
<SheetDescription>Your Nostr identity and display name.</SheetDescription>
|
||||
</SheetHeader>
|
||||
<div class="mt-4">
|
||||
<ProfileSettings />
|
||||
</div>
|
||||
</SheetContent>
|
||||
</Sheet>
|
||||
|
||||
<!-- Theme -->
|
||||
<DropdownMenu>
|
||||
<DropdownMenuTrigger as-child>
|
||||
<button class="flex flex-col items-center justify-center gap-0.5 flex-1 h-full text-muted-foreground hover:text-foreground transition-colors">
|
||||
<component :is="currentTheme === 'dark' ? Moon : Sun" class="w-5 h-5" />
|
||||
<span class="text-[10px] font-medium">Theme</span>
|
||||
</button>
|
||||
</DropdownMenuTrigger>
|
||||
<DropdownMenuContent align="center" class="w-40">
|
||||
<DropdownMenuLabel>Theme</DropdownMenuLabel>
|
||||
<DropdownMenuSeparator />
|
||||
<DropdownMenuRadioGroup :model-value="theme" @update:model-value="(v: string) => setTheme(v as 'dark' | 'light' | 'system')">
|
||||
<DropdownMenuRadioItem value="light"><Sun class="w-4 h-4 mr-2" />Light</DropdownMenuRadioItem>
|
||||
<DropdownMenuRadioItem value="dark"><Moon class="w-4 h-4 mr-2" />Dark</DropdownMenuRadioItem>
|
||||
<DropdownMenuRadioItem value="system"><Monitor class="w-4 h-4 mr-2" />System</DropdownMenuRadioItem>
|
||||
</DropdownMenuRadioGroup>
|
||||
</DropdownMenuContent>
|
||||
</DropdownMenu>
|
||||
|
||||
<!-- Language -->
|
||||
<DropdownMenu>
|
||||
<DropdownMenuTrigger as-child>
|
||||
<button class="flex flex-col items-center justify-center gap-0.5 flex-1 h-full text-muted-foreground hover:text-foreground transition-colors">
|
||||
<Globe class="w-5 h-5" />
|
||||
<span class="text-[10px] font-medium">Language</span>
|
||||
</button>
|
||||
</DropdownMenuTrigger>
|
||||
<DropdownMenuContent align="center" class="w-44">
|
||||
<DropdownMenuLabel>Language</DropdownMenuLabel>
|
||||
<DropdownMenuSeparator />
|
||||
<DropdownMenuRadioGroup :model-value="currentLocale" @update:model-value="(v: string) => setLocale(v)">
|
||||
<DropdownMenuRadioItem v-for="l in locales" :key="l.code" :value="l.code">
|
||||
<span class="mr-2">{{ l.flag }}</span>{{ l.name }}
|
||||
</DropdownMenuRadioItem>
|
||||
</DropdownMenuRadioGroup>
|
||||
</DropdownMenuContent>
|
||||
</DropdownMenu>
|
||||
|
||||
<!-- Currency (placeholder) -->
|
||||
<button
|
||||
class="flex flex-col items-center justify-center gap-0.5 flex-1 h-full text-muted-foreground hover:text-foreground transition-colors opacity-50"
|
||||
@click="notImplemented"
|
||||
>
|
||||
<Coins class="w-5 h-5" />
|
||||
<span class="text-[10px] font-medium">Currency</span>
|
||||
</button>
|
||||
</div>
|
||||
</nav>
|
||||
</div>
|
||||
</template>
|
||||