diff --git a/Manifest.toml b/Manifest.toml
deleted file mode 100644
index 9ed5ab9..0000000
--- a/Manifest.toml
+++ /dev/null
@@ -1,7 +0,0 @@
-# This file is machine-generated - editing it directly is not advised
-
-julia_version = "1.9.0"
-manifest_format = "2.0"
-project_hash = "da39a3ee5e6b4b0d3255bfef95601890afd80709"
-
-[deps]
diff --git a/Server/app/resources/basic/BasicController.jl b/Server/app/resources/basic/BasicController.jl
index 0ac06b1..074cf43 100644
--- a/Server/app/resources/basic/BasicController.jl
+++ b/Server/app/resources/basic/BasicController.jl
@@ -14,6 +14,7 @@ dict_layouts = Dict(
:cooperatives => generate_layout_html("main",controller,"cooperatives",libraries=["Leaflet"]),
:communities => generate_layout_html("main",controller,"communities",libraries=["Leaflet"]),
:partners => generate_layout_html("main",controller,"partners",libraries=["Leaflet"]),
+ :compass => generate_layout_html("main",controller,"compass"),
)
#---Page info-----------------------------------------------------
@@ -95,6 +96,17 @@ const partners_info = Dict(
)
)
+const compass_info = Dict(
+ "en" => Dict(
+ :title => "LibSoc - Political Compass",
+ :description => ""
+ ),
+ "ru" => Dict(
+ :title => "LibSoc - Политический компас",
+ :description => ""
+ )
+)
+
function get_locale()
data = payload()
if :locale in keys(data)
@@ -162,4 +174,12 @@ function partners()
)
end
+function political_compass()
+ locale = get_locale()
+ html(:basic,:compass, layout = dict_layouts[:compass], context = @__MODULE__,
+ title = compass_info[locale][:title],
+ description = compass_info[locale][:description]
+ )
+end
+
end
\ No newline at end of file
diff --git a/Server/app/resources/basic/views/compass.jl.html b/Server/app/resources/basic/views/compass.jl.html
new file mode 100644
index 0000000..3db02f1
--- /dev/null
+++ b/Server/app/resources/basic/views/compass.jl.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Server/app/svelte/public/locales/en/compass-component.json b/Server/app/svelte/public/locales/en/compass-component.json
new file mode 100644
index 0000000..aebd810
--- /dev/null
+++ b/Server/app/svelte/public/locales/en/compass-component.json
@@ -0,0 +1,120 @@
+{
+ "heading": "Political compass",
+ "qs": [
+ {
+ "q": "Production should be driven by ... ",
+ "as": [
+ ["individual entrepreneurial initiative and wealth",["C"]],
+ ["the directives and plans set by the people in charge",["V"]],
+ ["collective decision-making and agreement",["LS"]]
+ ]
+ },
+ {
+ "q": "Decision-making power at work should belong to ...",
+ "as": [
+ ["those who own the place due to having wealth or political power",["C"]],
+ ["those who work there",["LS"]]
+ ]
+ },
+ {
+ "q": "Distribution of work should be based on ...",
+ "as": [
+ ["opportunities in the job market and wealth",["C"]],
+ ["the directives and assignments given by the people in charge",["V"]],
+ ["collective planning and equitable allocation according to societal needs",["LS"]]
+ ]
+ },
+ {
+ "q": "The means of production should be owned and controlled by ...",
+ "as": [
+ ["wealthy individuals",["C"]],
+ ["the people in charge of the state apparatus",["V"]],
+ ["the community as a whole",["LS"]]
+ ]
+ },
+ {
+ "q": "The production process should prioritize ...",
+ "as": [
+ ["cost-effectiveness",["C"]],
+ ["whatever the people in charge say",["V"]],
+ ["needs and sustainability",["LS"]]
+ ]
+ },
+ {
+ "q": "Infinite growth of production leads to ...",
+ "as": [
+ ["all the good stuff",["C","V"]],
+ ["destruction of our planet",["LS"]]
+ ]
+ },
+ {
+ "q": "Distribution should happen based on ...",
+ "as": [
+ ["wealth",["C"]],
+ ["whatever the people in charge say",["V"]],
+ ["collective agreement",["LS"]]
+ ]
+ },
+ {
+ "q": "Social safety nets should be ...",
+ "as": [
+ ["minimized to encourage individual self-reliance",["C"]],
+ ["controlled and distributed by the people in charge",["V"]],
+ ["comprehensive and provided as a collective responsibility",["LS"]]
+ ]
+ },
+ {
+ "q": "Access to education should be ...",
+ "as": [
+ ["dependent on financial means",["C"]],
+ ["regulated and controlled by the people in charge to shape societal values",["V"]],
+ ["guaranteed as a universal right",["LS"]]
+ ]
+ },
+ {
+ "q": "Most people are ...",
+ "as": [
+ ["incapable of making good decisions and have to be led like sheep",["C","V"]],
+ ["capable of making good decision if given an opportunity and independence",["LS"]]
+ ]
+ },
+ {
+ "q": "Power corrupts ...",
+ "as": [
+ ["sometimes, which is why we have several groups of people in power that give power to each other from time to time based on who had a better PR campaign",["C"]],
+ ["everyone but our supreme benevolent dictators",["V"]],
+ ["everyone",["LS"]]
+ ]
+ },
+ {
+ "q": "Decisions should happen based on ...",
+ "as": [
+ ["whatever the people in charge say",["C","V"]],
+ ["collective agreement",["LS"]]
+ ]
+ },
+ {
+ "q": "Use of violence is ...",
+ "as": [
+ ["justified to allow the people in charge to stay in power",["C","V"]],
+ ["unacceptable",["LS"]]
+ ]
+ },
+ {
+ "q": "Innovation and technological development should be driven by ...",
+ "as": [
+ ["market competition and individual incentives",["C"]],
+ ["objectives set by the people in charge",["V"]],
+ ["collective research and shared knowledge",["LS"]]
+ ]
+ },
+ {
+ "q": "Ownership of intellectual property rights should belong to ...",
+ "as": [
+ ["the individual inventors or their employers",["C"]],
+ ["the people in charge who regulate and control intellectual property",["V"]],
+ ["the community and shared knowledge",["LS"]]
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Server/app/svelte/public/locales/ru/compass-component.json b/Server/app/svelte/public/locales/ru/compass-component.json
new file mode 100644
index 0000000..603544a
--- /dev/null
+++ b/Server/app/svelte/public/locales/ru/compass-component.json
@@ -0,0 +1,3 @@
+{
+ "heading": "Политический компас"
+}
\ No newline at end of file
diff --git a/Server/app/svelte/src/compass-component.svelte b/Server/app/svelte/src/compass-component.svelte
new file mode 100644
index 0000000..119ba04
--- /dev/null
+++ b/Server/app/svelte/src/compass-component.svelte
@@ -0,0 +1,203 @@
+
+
+
+
+{#key loaded}
+ {#if Object.keys($content).length!=0}
+
+
+
{$content.heading}
+
+ {#key qTag}
+ {#if qTag!=$content.qs.length}
+
{$content.qs[qTag].q}
+
+
back(qTag)} class="quiz-buttons">back next(qTag)} class="quiz-buttons">next
+ {:else}
+
You are compatible with ...
+
+ capitalism by {capitalismScore} %
+ vanguardism by {vanguardismScore} %
+ libertarian socialism by {socialismScore} %
+
+
back(qTag)} class="quiz-buttons">back
+ {/if}
+ {/key}
+
+
+ {/if}
+{/key}
+
+
\ No newline at end of file
diff --git a/Server/app/svelte/src/footer/footer-component.svelte b/Server/app/svelte/src/footer/footer-component.svelte
index 3d4895f..5f46c72 100644
--- a/Server/app/svelte/src/footer/footer-component.svelte
+++ b/Server/app/svelte/src/footer/footer-component.svelte
@@ -25,7 +25,7 @@
{$content.contactUs}
WhatsApp: {$content.inviteLink}
- Discord: {$content.inviteLink}
+ Discord: {$content.inviteLink}
{location.href='#'}} id="footer-up" aria-label="go up">
@@ -86,7 +86,7 @@ footer p, footer a {
footer h2 {
color: #ffffff;
- font-size: 1.4rem;
+ font-size: 1.3rem;
margin-bottom: 0.5rem;
}
@@ -110,19 +110,19 @@ footer h2 {
#tag-line {
position: relative;
margin: auto;
- font-size: 1.2rem;
+ font-size: 1.1rem;
text-align: center;
padding-bottom: 1rem;
}
footer a {
- font-size: 1.2rem;
+ font-size: 1.1rem;
color: #ffffff;
}
footer p, footer label {
display: block;
- font-size: 1.2rem;
+ font-size: 1.1rem;
color: #d8d8d8;
font-family: var(--sans-serif,sans-serif);
margin-bottom: 0.5rem;
diff --git a/Server/bin/repl b/Server/bin/repl
deleted file mode 100644
index 7c809b1..0000000
--- a/Server/bin/repl
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-julia --color=yes --depwarn=no --project=@. -q -L $(dirname $0)/../bootstrap.jl -- "$@"
\ No newline at end of file
diff --git a/Server/bin/repl.bat b/Server/bin/repl.bat
deleted file mode 100644
index eb59ada..0000000
--- a/Server/bin/repl.bat
+++ /dev/null
@@ -1 +0,0 @@
-"C:\Users\a_ill\AppData\Local\Programs\Julia-1.8.0\bin\julia" --color=yes --depwarn=no --project=@. -q -i -- "%~dp0..\bootstrap.jl" %*
\ No newline at end of file
diff --git a/Server/bin/runtask b/Server/bin/runtask
deleted file mode 100644
index c68f087..0000000
--- a/Server/bin/runtask
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-julia --color=yes --depwarn=no --project=@. -q -- $(dirname $0)/../bootstrap.jl -r "$@"
\ No newline at end of file
diff --git a/Server/bin/runtask.bat b/Server/bin/runtask.bat
deleted file mode 100644
index c5ffa7a..0000000
--- a/Server/bin/runtask.bat
+++ /dev/null
@@ -1 +0,0 @@
-"C:\Users\a_ill\AppData\Local\Programs\Julia-1.8.0\bin\julia" --color=yes --depwarn=no --project=@. -q -- "%~dp0..\bootstrap.jl" -r %*
\ No newline at end of file
diff --git a/Server/public/img/common/compass.svg b/Server/public/img/common/compass.svg
new file mode 100644
index 0000000..e129b60
--- /dev/null
+++ b/Server/public/img/common/compass.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Server/public/js/components/communities-component.js b/Server/public/js/components/communities-component.js
index b715347..08439b4 100644
--- a/Server/public/js/components/communities-component.js
+++ b/Server/public/js/components/communities-component.js
@@ -1 +1 @@
-import{S as t,i as e,a as n,b as o,s as i,e as m,n as a,d as s,c as r,o as c,f as l,t as g,g as p,h,j as u,k as d,l as f,m as b,p as x}from"./index-ce8c147b.js";import{w as j}from"./index-f2dbf8ff.js";import{communities as v,addMarkersCommunities as w}from"../../../../../../../../../js/communities.js";import{loadLocaleContent as k}from"../../../../../../../../../js/libraries/serverTools.js";import"../../../../../../../../../js/components/map-component.js";function y(t,e,n){const o=t.slice();return o[6]=e[n],o}function z(t){let e,n,i,m,a,r,c,j,w,k,z,E,O,R,T,A,C,H,L,M,N=t[0].heading+"",S=t[0].p1+"",_=t[0].subheading1+"",q=t[0].subheading2+"",B=v,F=[];for(let e=0;en(0,o=t)));let a=k(m,"communities-component",i);function s(t,e,n){let o=t([51.505,-.09],3);w(o,e,n)}c((()=>{}));return[o,i,m,a,s,t=>s(t,o,a)]}class R extends t{constructor(t){super(),this.shadowRoot.innerHTML="",e(this,{target:this.shadowRoot,props:n(this.attributes),customElement:!0},O,E,i,{},null),t&&t.target&&o(t.target,this,t.anchor)}}customElements.define("communities-component",R);export{R as default};
+import{S as t,i as n,a as o,b as e,s as i,e as m,n as a,d as s,c as r,o as c,f as l,t as g,g as p,h,j as u,k as d,l as b,m as f,p as x}from"./index-4348483d.js";import{w as j}from"./index-71440b21.js";import{communities as v,addMarkersCommunities as w}from"../../../../../../../../../js/communities.js";import{loadLocaleContent as k}from"../../../../../../../../../js/libraries/serverTools.js";import"../../../../../../../../../js/components/map-component.js";function y(t,n,o){const e=t.slice();return e[6]=n[o],e}function z(t){let n,o,i,m,a,r,c,j,w,k,z,E,O,R,T,A,C,H,L,M,N=t[0].heading+"",S=t[0].p1+"",_=t[0].subheading1+"",q=t[0].subheading2+"",B=v,F=[];for(let n=0;no(0,e=t)));let a=k(m,"communities-component",i);function s(t,n,o){let e=t([51.505,-.09],3);w(e,n,o)}c((()=>{}));return[e,i,m,a,s,t=>s(t,e,a)]}class R extends t{constructor(t){super(),this.shadowRoot.innerHTML="",n(this,{target:this.shadowRoot,props:o(this.attributes),customElement:!0},O,E,i,{},null),t&&t.target&&e(t.target,this,t.anchor)}}customElements.define("communities-component",R);export{R as default};
diff --git a/Server/public/js/components/compass-component.js b/Server/public/js/components/compass-component.js
new file mode 100644
index 0000000..c9cefec
--- /dev/null
+++ b/Server/public/js/components/compass-component.js
@@ -0,0 +1 @@
+import{S as t,i as n,a as e,b as i,s as o,e as s,n as r,d as a,c as l,o as m,f as c,t as u,g as p,h as d,j as g,l as h,m as f,q as b,p as v,r as x}from"./index-4348483d.js";import{w as q}from"./index-71440b21.js";import{loadLocaleContent as _}from"../../../../../../../../../js/libraries/serverTools.js";function y(t,n,e){const i=t.slice();return i[17]=n[e],i[19]=e,i}function z(t){let n,e,s,r,l,m,b,v,x=t[5].heading+"",q=t[0],_=C(t);return{c(){n=c("div"),e=c("div"),s=c("h1"),r=u(x),l=p(),m=c("img"),v=p(),_.c(),d(m,"id","compass-img"),g(m.src,b="/img/common/compass.svg")||d(m,"src","/img/common/compass.svg"),d(m,"alt","compass"),d(e,"id","text-container"),d(n,"id","container")},m(t,o){i(t,n,o),h(n,e),h(e,s),h(s,r),h(e,l),h(e,m),h(e,v),_.m(e,null)},p(t,n){32&n&&x!==(x=t[5].heading+"")&&f(r,x),1&n&&o(q,q=t[0])?(_.d(1),_=C(t),_.c(),_.m(e,null)):_.p(t,n)},d(t){t&&a(n),_.d(t)}}}function k(t){let n,e,o,s,r,l,m,g,v,x,q,_,y,z,k,w,j,C,S,B,M,O,D,E;return{c(){n=c("p"),n.textContent="You are compatible with ...",e=p(),o=c("ul"),s=c("li"),r=u("capitalism by "),l=c("span"),m=u(t[2]),g=u("%"),v=p(),x=c("li"),q=u("vanguardism by "),_=c("span"),y=u(t[3]),z=u("%"),k=p(),w=c("li"),j=u("libertarian socialism by "),C=c("span"),S=u(t[4]),B=u("%"),M=p(),O=c("button"),O.textContent="back",d(o,"class","results-list"),d(O,"class","quiz-buttons")},m(a,c){i(a,n,c),i(a,e,c),i(a,o,c),h(o,s),h(s,r),h(s,l),h(l,m),h(s,g),h(o,v),h(o,x),h(x,q),h(x,_),h(_,y),h(x,z),h(o,k),h(o,w),h(w,j),h(w,C),h(C,S),h(w,B),i(a,M,c),i(a,O,c),D||(E=b(O,"click",t[15]),D=!0)},p(t,n){4&n&&f(m,t[2]),8&n&&f(y,t[3]),16&n&&f(S,t[4])},d(t){t&&a(n),t&&a(e),t&&a(o),t&&a(M),t&&a(O),D=!1,E()}}}function w(t){let n,e,o,s,r,l,m,g,q,_=t[5].qs[t[0]].q+"",z=t[5].qs[t[0]].as,k=[];for(let n=0;ne(5,i=t))),_(s,"compass-component",o);let r=0,a=[],c="",u="",p="";function d(t){null!=a[t]&&rt.includes("C"))).filter(Boolean).length/a.length).toString()),e(3,u=Math.round(100*a.map((t=>t.includes("V"))).filter(Boolean).length/a.length).toString()),e(4,p=Math.round(100*a.map((t=>t.includes("LS"))).filter(Boolean).length/a.length).toString())),e(0,r+=1))}function g(t){0!=r&&e(0,r-=1)}m((()=>{}));return[r,a,c,u,p,i,o,s,d,g,function(){a[r]=this.__value,e(1,a)},[[]],t=>e(1,a[r]=t[1],a),()=>g(),()=>d(r),()=>g()]}class M extends t{constructor(t){super(),this.shadowRoot.innerHTML="",n(this,{target:this.shadowRoot,props:e(this.attributes),customElement:!0},B,S,o,{},null),t&&t.target&&i(t.target,this,t.anchor)}}customElements.define("compass-component",M);export{M as default};
diff --git a/Server/public/js/components/cookies-dialog.js b/Server/public/js/components/cookies-dialog.js
index ad6ed7a..79c9c70 100644
--- a/Server/public/js/components/cookies-dialog.js
+++ b/Server/public/js/components/cookies-dialog.js
@@ -1 +1 @@
-import{S as e,i as s,a as t,b as o,s as i,f as a,n as r,h as n,d as c,o as d}from"./index-ce8c147b.js";function p(e){let s;return{c(){s=a("div"),s.innerHTML="We use cookies to improve your experience, personalise your content and analyse site usage. By clicking “OK”, you agree to the use of cookies.
",this.c=r,n(s,"id","wrapper")},m(e,t){o(e,s,t)},p:r,i:r,o:r,d(e){e&&c(s)}}}function u(e){return d((()=>{})),[]}class h extends e{constructor(e){super(),this.shadowRoot.innerHTML="",s(this,{target:this.shadowRoot,props:t(this.attributes),customElement:!0},u,p,i,{},null),e&&e.target&&o(e.target,this,e.anchor)}}customElements.define("cookies-dialog",h);export{h as default};
+import{S as e,i as s,a as t,b as o,s as i,f as a,n as r,h as n,d as c,o as d}from"./index-4348483d.js";function p(e){let s;return{c(){s=a("div"),s.innerHTML="We use cookies to improve your experience, personalise your content and analyse site usage. By clicking “OK”, you agree to the use of cookies.
",this.c=r,n(s,"id","wrapper")},m(e,t){o(e,s,t)},p:r,i:r,o:r,d(e){e&&c(s)}}}function u(e){return d((()=>{})),[]}class h extends e{constructor(e){super(),this.shadowRoot.innerHTML="",s(this,{target:this.shadowRoot,props:t(this.attributes),customElement:!0},u,p,i,{},null),e&&e.target&&o(e.target,this,e.anchor)}}customElements.define("cookies-dialog",h);export{h as default};
diff --git a/Server/public/js/components/cooperatives-component.js b/Server/public/js/components/cooperatives-component.js
index c67a44b..9185093 100644
--- a/Server/public/js/components/cooperatives-component.js
+++ b/Server/public/js/components/cooperatives-component.js
@@ -1 +1 @@
-import{S as t,i as e,a as o,b as n,s as i,e as a,n as r,d as s,c,o as m,f as l,t as p,g,h,j as d,k as f,l as b,m as u,p as w}from"./index-ce8c147b.js";import{w as x}from"./index-f2dbf8ff.js";import{coops as v,addMarkersCoops as j}from"../../../../../../../../../js/coops.js";import{loadLocaleContent as k}from"../../../../../../../../../js/libraries/serverTools.js";import"../../../../../../../../../js/components/map-component.js";function y(t,e,o){const n=t.slice();return n[6]=e[o],n}function z(t){let e,o,i,a,r,c,m,x,j,k,z,E,O,R,T,_,A,C,H,L,M,N,S,q=t[0].heading+"",B=t[0].p1+"",F=t[0].p2+"",G=t[0].subheading1+"",I=t[0].subheading2+"",J=v,K=[];for(let e=0;eo(0,n=t)));let r=k(a,"cooperatives-component",i);function s(t,e,o){let n=t([51.505,-.09],3);j(n,e,o)}m((()=>{}));return[n,i,a,r,s,t=>s(t,n,r)]}class R extends t{constructor(t){super(),this.shadowRoot.innerHTML="",e(this,{target:this.shadowRoot,props:o(this.attributes),customElement:!0},O,E,i,{},null),t&&t.target&&n(t.target,this,t.anchor)}}customElements.define("cooperatives-component",R);export{R as default};
+import{S as t,i as e,a as o,b as n,s as i,e as a,n as r,d as s,c as m,o as c,f as l,t as p,g,h,j as d,k as f,l as b,m as u,p as w}from"./index-4348483d.js";import{w as x}from"./index-71440b21.js";import{coops as v,addMarkersCoops as j}from"../../../../../../../../../js/coops.js";import{loadLocaleContent as k}from"../../../../../../../../../js/libraries/serverTools.js";import"../../../../../../../../../js/components/map-component.js";function y(t,e,o){const n=t.slice();return n[6]=e[o],n}function z(t){let e,o,i,a,r,m,c,x,j,k,z,E,O,R,T,_,A,C,H,L,M,N,S,q=t[0].heading+"",B=t[0].p1+"",F=t[0].p2+"",G=t[0].subheading1+"",I=t[0].subheading2+"",J=v,K=[];for(let e=0;eo(0,n=t)));let r=k(a,"cooperatives-component",i);function s(t,e,o){let n=t([51.505,-.09],3);j(n,e,o)}c((()=>{}));return[n,i,a,r,s,t=>s(t,n,r)]}class R extends t{constructor(t){super(),this.shadowRoot.innerHTML="",e(this,{target:this.shadowRoot,props:o(this.attributes),customElement:!0},O,E,i,{},null),t&&t.target&&n(t.target,this,t.anchor)}}customElements.define("cooperatives-component",R);export{R as default};
diff --git a/Server/public/js/components/footer-component.js b/Server/public/js/components/footer-component.js
index 48c6a91..297f1c3 100644
--- a/Server/public/js/components/footer-component.js
+++ b/Server/public/js/components/footer-component.js
@@ -1 +1 @@
-import{S as t,i as e,a as o,b as r,s as a,e as i,n,d as s,c as m,f as c,t as f,g as l,h as d,r as g,l as h,u as p,m as u}from"./index-ce8c147b.js";import{w as b}from"./index-f2dbf8ff.js";import{loadLocaleContent as w}from"../../../../../../../../../js/libraries/serverTools.js";function v(t){let e,o,a,i,n,m,b,w,v,y,k,x,j,L,_,z,B,C,T,U,A,H,M=t[0].contactUs+"",R=t[0].inviteLink+"",D=t[0].inviteLink+"";return{c(){e=c("footer"),o=c("div"),a=c("div"),i=c("div"),n=c("h2"),m=f(M),b=l(),w=c("p"),v=f("WhatsApp: "),y=c("a"),k=f(R),x=l(),j=c("p"),L=f("Discord: "),_=c("a"),z=f(D),B=l(),C=c("button"),C.innerHTML=' ',T=l(),U=c("p"),U.innerHTML='Licensed under a Creative Commons CC BY 4.0 license. ',d(y,"href","https://chat.whatsapp.com/BhnmUNljUxJ2AjeHUwyTKh"),d(y,"target","_blank"),d(y,"rel","noreferrer"),g(y,"margin-left","0.5rem"),d(_,"href","https://discord.gg/xAPZmyr8B6"),d(_,"target","_blank"),d(_,"rel","noreferrer"),g(_,"margin-left","2rem"),d(i,"id","contact-us-container"),d(a,"id","footer-grid-content-container"),d(a,"class","logged"),d(C,"id","footer-up"),d(C,"aria-label","go up"),d(U,"id","footer-copyright"),d(o,"id","footer-content-container")},m(s,c){r(s,e,c),h(e,o),h(o,a),h(a,i),h(i,n),h(n,m),h(i,b),h(i,w),h(w,v),h(w,y),h(y,k),h(i,x),h(i,j),h(j,L),h(j,_),h(_,z),h(o,B),h(o,C),h(o,T),h(o,U),A||(H=p(C,"click",t[3]),A=!0)},p(t,e){1&e&&M!==(M=t[0].contactUs+"")&&u(m,M),1&e&&R!==(R=t[0].inviteLink+"")&&u(k,R),1&e&&D!==(D=t[0].inviteLink+"")&&u(z,D)},d(t){t&&s(e),A=!1,H()}}}function y(t){let e,o=0!=Object.keys(t[0]).length,a=o&&v(t);return{c(){a&&a.c(),e=i(),this.c=n},m(t,o){a&&a.m(t,o),r(t,e,o)},p(t,[r]){1&r&&(o=0!=Object.keys(t[0]).length),o?a?a.p(t,r):(a=v(t),a.c(),a.m(e.parentNode,e)):a&&(a.d(1),a=null)},i:n,o:n,d(t){a&&a.d(t),t&&s(e)}}}function k(t,e,o){let r,a,i=b({});m(t,i,(t=>o(0,r=t))),w(i,"footer-component",a);return[r,a,i,()=>{location.href="#"}]}class x extends t{constructor(t){super(),this.shadowRoot.innerHTML="",e(this,{target:this.shadowRoot,props:o(this.attributes),customElement:!0},k,y,a,{},null),t&&t.target&&r(t.target,this,t.anchor)}}customElements.define("footer-component",x);export{x as default};
+import{S as t,i as e,a as o,b as r,s as a,e as i,n,d as s,c as m,f as c,t as f,g as l,h as d,v as g,l as h,q as p,m as u}from"./index-4348483d.js";import{w as b}from"./index-71440b21.js";import{loadLocaleContent as w}from"../../../../../../../../../js/libraries/serverTools.js";function v(t){let e,o,a,i,n,m,b,w,v,y,k,x,j,L,_,z,B,C,T,U,A,H,M=t[0].contactUs+"",R=t[0].inviteLink+"",D=t[0].inviteLink+"";return{c(){e=c("footer"),o=c("div"),a=c("div"),i=c("div"),n=c("h2"),m=f(M),b=l(),w=c("p"),v=f("WhatsApp: "),y=c("a"),k=f(R),x=l(),j=c("p"),L=f("Discord: "),_=c("a"),z=f(D),B=l(),C=c("button"),C.innerHTML=' ',T=l(),U=c("p"),U.innerHTML='Licensed under a Creative Commons CC BY 4.0 license. ',d(y,"href","https://chat.whatsapp.com/BhnmUNljUxJ2AjeHUwyTKh"),d(y,"target","_blank"),d(y,"rel","noreferrer"),g(y,"margin-left","0.5rem"),d(_,"href","https://discord.gg/xAPZmyr8B6"),d(_,"target","_blank"),d(_,"rel","noreferrer"),g(_,"margin-left","1.8rem"),d(i,"id","contact-us-container"),d(a,"id","footer-grid-content-container"),d(a,"class","logged"),d(C,"id","footer-up"),d(C,"aria-label","go up"),d(U,"id","footer-copyright"),d(o,"id","footer-content-container")},m(s,c){r(s,e,c),h(e,o),h(o,a),h(a,i),h(i,n),h(n,m),h(i,b),h(i,w),h(w,v),h(w,y),h(y,k),h(i,x),h(i,j),h(j,L),h(j,_),h(_,z),h(o,B),h(o,C),h(o,T),h(o,U),A||(H=p(C,"click",t[3]),A=!0)},p(t,e){1&e&&M!==(M=t[0].contactUs+"")&&u(m,M),1&e&&R!==(R=t[0].inviteLink+"")&&u(k,R),1&e&&D!==(D=t[0].inviteLink+"")&&u(z,D)},d(t){t&&s(e),A=!1,H()}}}function y(t){let e,o=0!=Object.keys(t[0]).length,a=o&&v(t);return{c(){a&&a.c(),e=i(),this.c=n},m(t,o){a&&a.m(t,o),r(t,e,o)},p(t,[r]){1&r&&(o=0!=Object.keys(t[0]).length),o?a?a.p(t,r):(a=v(t),a.c(),a.m(e.parentNode,e)):a&&(a.d(1),a=null)},i:n,o:n,d(t){a&&a.d(t),t&&s(e)}}}function k(t,e,o){let r,a,i=b({});m(t,i,(t=>o(0,r=t))),w(i,"footer-component",a);return[r,a,i,()=>{location.href="#"}]}class x extends t{constructor(t){super(),this.shadowRoot.innerHTML="",e(this,{target:this.shadowRoot,props:o(this.attributes),customElement:!0},k,y,a,{},null),t&&t.target&&r(t.target,this,t.anchor)}}customElements.define("footer-component",x);export{x as default};
diff --git a/Server/public/js/components/groups-component.js b/Server/public/js/components/groups-component.js
index e5f0571..2e43d98 100644
--- a/Server/public/js/components/groups-component.js
+++ b/Server/public/js/components/groups-component.js
@@ -1 +1 @@
-import{S as t,i as o,a as e,b as n,s as r,e as a,n as i,d as s,c as m,o as c,f as l,t as p,g,h,j as u,k as d,l as f,m as b,p as x}from"./index-ce8c147b.js";import{w as j}from"./index-f2dbf8ff.js";import{groups as v,addMarkersGroups as w}from"../../../../../../../../../js/groups.js";import{loadLocaleContent as k}from"../../../../../../../../../js/libraries/serverTools.js";import"../../../../../../../../../js/components/map-component.js";function y(t,o,e){const n=t.slice();return n[6]=o[e],n}function z(t){let o,e,r,a,i,m,c,j,w,k,z,E,O,R,T,A,C,H,L,M,N,S,_,q=t[0].heading+"",B=t[0].p1+"",F=t[0].p2+"",G=t[0].subheading1+"",I=t[0].subheading2+"",J=v,K=[];for(let o=0;oe(0,n=t)));let i=k(a,"groups-component",r);function s(t,o,e){let n=t([51.505,-.09],3);w(n,o,e)}c((()=>{}));return[n,r,a,i,s,t=>s(t,n,i)]}class R extends t{constructor(t){super(),this.shadowRoot.innerHTML="",o(this,{target:this.shadowRoot,props:e(this.attributes),customElement:!0},O,E,r,{},null),t&&t.target&&n(t.target,this,t.anchor)}}customElements.define("groups-component",R);export{R as default};
+import{S as t,i as o,a as n,b as e,s as r,e as a,n as i,d as s,c as m,o as c,f as l,t as p,g,h,j as u,k as d,l as b,m as f,p as x}from"./index-4348483d.js";import{w as j}from"./index-71440b21.js";import{groups as v,addMarkersGroups as w}from"../../../../../../../../../js/groups.js";import{loadLocaleContent as k}from"../../../../../../../../../js/libraries/serverTools.js";import"../../../../../../../../../js/components/map-component.js";function y(t,o,n){const e=t.slice();return e[6]=o[n],e}function z(t){let o,n,r,a,i,m,c,j,w,k,z,E,O,R,T,A,C,H,L,M,N,S,_,q=t[0].heading+"",B=t[0].p1+"",F=t[0].p2+"",G=t[0].subheading1+"",I=t[0].subheading2+"",J=v,K=[];for(let o=0;on(0,e=t)));let i=k(a,"groups-component",r);function s(t,o,n){let e=t([51.505,-.09],3);w(e,o,n)}c((()=>{}));return[e,r,a,i,s,t=>s(t,e,i)]}class R extends t{constructor(t){super(),this.shadowRoot.innerHTML="",o(this,{target:this.shadowRoot,props:n(this.attributes),customElement:!0},O,E,r,{},null),t&&t.target&&e(t.target,this,t.anchor)}}customElements.define("groups-component",R);export{R as default};
diff --git a/Server/public/js/components/index-1b62632d.js b/Server/public/js/components/index-1b62632d.js
new file mode 100644
index 0000000..ebcbf4c
--- /dev/null
+++ b/Server/public/js/components/index-1b62632d.js
@@ -0,0 +1,53 @@
+
+(function(l, r) { if (!l || l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (self.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(self.document);
+import { n as noop, s as safe_not_equal } from './index-68a48afb.js';
+
+const subscriber_queue = [];
+/**
+ * Create a `Writable` store that allows both updating and reading by subscription.
+ * @param {*=}value initial value
+ * @param {StartStopNotifier=}start start and stop notifications for subscriptions
+ */
+function writable(value, start = noop) {
+ let stop;
+ const subscribers = new Set();
+ function set(new_value) {
+ if (safe_not_equal(value, new_value)) {
+ value = new_value;
+ if (stop) { // store is ready
+ const run_queue = !subscriber_queue.length;
+ for (const subscriber of subscribers) {
+ subscriber[1]();
+ subscriber_queue.push(subscriber, value);
+ }
+ if (run_queue) {
+ for (let i = 0; i < subscriber_queue.length; i += 2) {
+ subscriber_queue[i][0](subscriber_queue[i + 1]);
+ }
+ subscriber_queue.length = 0;
+ }
+ }
+ }
+ }
+ function update(fn) {
+ set(fn(value));
+ }
+ function subscribe(run, invalidate = noop) {
+ const subscriber = [run, invalidate];
+ subscribers.add(subscriber);
+ if (subscribers.size === 1) {
+ stop = start(set) || noop;
+ }
+ run(value);
+ return () => {
+ subscribers.delete(subscriber);
+ if (subscribers.size === 0) {
+ stop();
+ stop = null;
+ }
+ };
+ }
+ return { set, update, subscribe };
+}
+
+export { writable as w };
diff --git a/Server/public/js/components/index-42a25c61.js b/Server/public/js/components/index-42a25c61.js
new file mode 100644
index 0000000..550d5ea
--- /dev/null
+++ b/Server/public/js/components/index-42a25c61.js
@@ -0,0 +1,513 @@
+
+(function(l, r) { if (!l || l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (self.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(self.document);
+function noop() { }
+function add_location(element, file, line, column, char) {
+ element.__svelte_meta = {
+ loc: { file, line, column, char }
+ };
+}
+function run(fn) {
+ return fn();
+}
+function blank_object() {
+ return Object.create(null);
+}
+function run_all(fns) {
+ fns.forEach(run);
+}
+function is_function(thing) {
+ return typeof thing === 'function';
+}
+function safe_not_equal(a, b) {
+ return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
+}
+let src_url_equal_anchor;
+function src_url_equal(element_src, url) {
+ if (!src_url_equal_anchor) {
+ src_url_equal_anchor = document.createElement('a');
+ }
+ src_url_equal_anchor.href = url;
+ return element_src === src_url_equal_anchor.href;
+}
+function is_empty(obj) {
+ return Object.keys(obj).length === 0;
+}
+function validate_store(store, name) {
+ if (store != null && typeof store.subscribe !== 'function') {
+ throw new Error(`'${name}' is not a store with a 'subscribe' method`);
+ }
+}
+function subscribe(store, ...callbacks) {
+ if (store == null) {
+ return noop;
+ }
+ const unsub = store.subscribe(...callbacks);
+ return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;
+}
+function component_subscribe(component, store, callback) {
+ component.$$.on_destroy.push(subscribe(store, callback));
+}
+function append(target, node) {
+ target.appendChild(node);
+}
+function insert(target, node, anchor) {
+ target.insertBefore(node, anchor || null);
+}
+function detach(node) {
+ node.parentNode.removeChild(node);
+}
+function destroy_each(iterations, detaching) {
+ for (let i = 0; i < iterations.length; i += 1) {
+ if (iterations[i])
+ iterations[i].d(detaching);
+ }
+}
+function element(name) {
+ return document.createElement(name);
+}
+function svg_element(name) {
+ return document.createElementNS('http://www.w3.org/2000/svg', name);
+}
+function text(data) {
+ return document.createTextNode(data);
+}
+function space() {
+ return text(' ');
+}
+function empty() {
+ return text('');
+}
+function listen(node, event, handler, options) {
+ node.addEventListener(event, handler, options);
+ return () => node.removeEventListener(event, handler, options);
+}
+function attr(node, attribute, value) {
+ if (value == null)
+ node.removeAttribute(attribute);
+ else if (node.getAttribute(attribute) !== value)
+ node.setAttribute(attribute, value);
+}
+function set_custom_element_data(node, prop, value) {
+ if (prop in node) {
+ node[prop] = typeof node[prop] === 'boolean' && value === '' ? true : value;
+ }
+ else {
+ attr(node, prop, value);
+ }
+}
+function children(element) {
+ return Array.from(element.childNodes);
+}
+function set_style(node, key, value, important) {
+ if (value === null) {
+ node.style.removeProperty(key);
+ }
+ else {
+ node.style.setProperty(key, value, important ? 'important' : '');
+ }
+}
+function custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {
+ const e = document.createEvent('CustomEvent');
+ e.initCustomEvent(type, bubbles, cancelable, detail);
+ return e;
+}
+class HtmlTag {
+ constructor(is_svg = false) {
+ this.is_svg = false;
+ this.is_svg = is_svg;
+ this.e = this.n = null;
+ }
+ c(html) {
+ this.h(html);
+ }
+ m(html, target, anchor = null) {
+ if (!this.e) {
+ if (this.is_svg)
+ this.e = svg_element(target.nodeName);
+ else
+ this.e = element(target.nodeName);
+ this.t = target;
+ this.c(html);
+ }
+ this.i(anchor);
+ }
+ h(html) {
+ this.e.innerHTML = html;
+ this.n = Array.from(this.e.childNodes);
+ }
+ i(anchor) {
+ for (let i = 0; i < this.n.length; i += 1) {
+ insert(this.t, this.n[i], anchor);
+ }
+ }
+ p(html) {
+ this.d();
+ this.h(html);
+ this.i(this.a);
+ }
+ d() {
+ this.n.forEach(detach);
+ }
+}
+function attribute_to_object(attributes) {
+ const result = {};
+ for (const attribute of attributes) {
+ result[attribute.name] = attribute.value;
+ }
+ return result;
+}
+
+let current_component;
+function set_current_component(component) {
+ current_component = component;
+}
+function get_current_component() {
+ if (!current_component)
+ throw new Error('Function called outside component initialization');
+ return current_component;
+}
+/**
+ * The `onMount` function schedules a callback to run as soon as the component has been mounted to the DOM.
+ * It must be called during the component's initialisation (but doesn't need to live *inside* the component;
+ * it can be called from an external module).
+ *
+ * `onMount` does not run inside a [server-side component](/docs#run-time-server-side-component-api).
+ *
+ * https://svelte.dev/docs#run-time-svelte-onmount
+ */
+function onMount(fn) {
+ get_current_component().$$.on_mount.push(fn);
+}
+/**
+ * Associates an arbitrary `context` object with the current component and the specified `key`
+ * and returns that object. The context is then available to children of the component
+ * (including slotted content) with `getContext`.
+ *
+ * Like lifecycle functions, this must be called during component initialisation.
+ *
+ * https://svelte.dev/docs#run-time-svelte-setcontext
+ */
+function setContext(key, context) {
+ get_current_component().$$.context.set(key, context);
+ return context;
+}
+/**
+ * Retrieves the context that belongs to the closest parent component with the specified `key`.
+ * Must be called during component initialisation.
+ *
+ * https://svelte.dev/docs#run-time-svelte-getcontext
+ */
+function getContext(key) {
+ return get_current_component().$$.context.get(key);
+}
+
+const dirty_components = [];
+const binding_callbacks = [];
+const render_callbacks = [];
+const flush_callbacks = [];
+const resolved_promise = Promise.resolve();
+let update_scheduled = false;
+function schedule_update() {
+ if (!update_scheduled) {
+ update_scheduled = true;
+ resolved_promise.then(flush);
+ }
+}
+function add_render_callback(fn) {
+ render_callbacks.push(fn);
+}
+// flush() calls callbacks in this order:
+// 1. All beforeUpdate callbacks, in order: parents before children
+// 2. All bind:this callbacks, in reverse order: children before parents.
+// 3. All afterUpdate callbacks, in order: parents before children. EXCEPT
+// for afterUpdates called during the initial onMount, which are called in
+// reverse order: children before parents.
+// Since callbacks might update component values, which could trigger another
+// call to flush(), the following steps guard against this:
+// 1. During beforeUpdate, any updated components will be added to the
+// dirty_components array and will cause a reentrant call to flush(). Because
+// the flush index is kept outside the function, the reentrant call will pick
+// up where the earlier call left off and go through all dirty components. The
+// current_component value is saved and restored so that the reentrant call will
+// not interfere with the "parent" flush() call.
+// 2. bind:this callbacks cannot trigger new flush() calls.
+// 3. During afterUpdate, any updated components will NOT have their afterUpdate
+// callback called a second time; the seen_callbacks set, outside the flush()
+// function, guarantees this behavior.
+const seen_callbacks = new Set();
+let flushidx = 0; // Do *not* move this inside the flush() function
+function flush() {
+ const saved_component = current_component;
+ do {
+ // first, call beforeUpdate functions
+ // and update components
+ while (flushidx < dirty_components.length) {
+ const component = dirty_components[flushidx];
+ flushidx++;
+ set_current_component(component);
+ update(component.$$);
+ }
+ set_current_component(null);
+ dirty_components.length = 0;
+ flushidx = 0;
+ while (binding_callbacks.length)
+ binding_callbacks.pop()();
+ // then, once components are updated, call
+ // afterUpdate functions. This may cause
+ // subsequent updates...
+ for (let i = 0; i < render_callbacks.length; i += 1) {
+ const callback = render_callbacks[i];
+ if (!seen_callbacks.has(callback)) {
+ // ...so guard against infinite loops
+ seen_callbacks.add(callback);
+ callback();
+ }
+ }
+ render_callbacks.length = 0;
+ } while (dirty_components.length);
+ while (flush_callbacks.length) {
+ flush_callbacks.pop()();
+ }
+ update_scheduled = false;
+ seen_callbacks.clear();
+ set_current_component(saved_component);
+}
+function update($$) {
+ if ($$.fragment !== null) {
+ $$.update();
+ run_all($$.before_update);
+ const dirty = $$.dirty;
+ $$.dirty = [-1];
+ $$.fragment && $$.fragment.p($$.ctx, dirty);
+ $$.after_update.forEach(add_render_callback);
+ }
+}
+const outroing = new Set();
+function transition_in(block, local) {
+ if (block && block.i) {
+ outroing.delete(block);
+ block.i(local);
+ }
+}
+
+const globals = (typeof window !== 'undefined'
+ ? window
+ : typeof globalThis !== 'undefined'
+ ? globalThis
+ : global);
+function mount_component(component, target, anchor, customElement) {
+ const { fragment, after_update } = component.$$;
+ fragment && fragment.m(target, anchor);
+ if (!customElement) {
+ // onMount happens before the initial afterUpdate
+ add_render_callback(() => {
+ const new_on_destroy = component.$$.on_mount.map(run).filter(is_function);
+ // if the component was destroyed immediately
+ // it will update the `$$.on_destroy` reference to `null`.
+ // the destructured on_destroy may still reference to the old array
+ if (component.$$.on_destroy) {
+ component.$$.on_destroy.push(...new_on_destroy);
+ }
+ else {
+ // Edge case - component was destroyed immediately,
+ // most likely as a result of a binding initialising
+ run_all(new_on_destroy);
+ }
+ component.$$.on_mount = [];
+ });
+ }
+ after_update.forEach(add_render_callback);
+}
+function destroy_component(component, detaching) {
+ const $$ = component.$$;
+ if ($$.fragment !== null) {
+ run_all($$.on_destroy);
+ $$.fragment && $$.fragment.d(detaching);
+ // TODO null out other refs, including component.$$ (but need to
+ // preserve final state?)
+ $$.on_destroy = $$.fragment = null;
+ $$.ctx = [];
+ }
+}
+function make_dirty(component, i) {
+ if (component.$$.dirty[0] === -1) {
+ dirty_components.push(component);
+ schedule_update();
+ component.$$.dirty.fill(0);
+ }
+ component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31));
+}
+function init(component, options, instance, create_fragment, not_equal, props, append_styles, dirty = [-1]) {
+ const parent_component = current_component;
+ set_current_component(component);
+ const $$ = component.$$ = {
+ fragment: null,
+ ctx: [],
+ // state
+ props,
+ update: noop,
+ not_equal,
+ bound: blank_object(),
+ // lifecycle
+ on_mount: [],
+ on_destroy: [],
+ on_disconnect: [],
+ before_update: [],
+ after_update: [],
+ context: new Map(options.context || (parent_component ? parent_component.$$.context : [])),
+ // everything else
+ callbacks: blank_object(),
+ dirty,
+ skip_bound: false,
+ root: options.target || parent_component.$$.root
+ };
+ append_styles && append_styles($$.root);
+ let ready = false;
+ $$.ctx = instance
+ ? instance(component, options.props || {}, (i, ret, ...rest) => {
+ const value = rest.length ? rest[0] : ret;
+ if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {
+ if (!$$.skip_bound && $$.bound[i])
+ $$.bound[i](value);
+ if (ready)
+ make_dirty(component, i);
+ }
+ return ret;
+ })
+ : [];
+ $$.update();
+ ready = true;
+ run_all($$.before_update);
+ // `false` as a special case of no DOM component
+ $$.fragment = create_fragment ? create_fragment($$.ctx) : false;
+ if (options.target) {
+ if (options.hydrate) {
+ const nodes = children(options.target);
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ $$.fragment && $$.fragment.l(nodes);
+ nodes.forEach(detach);
+ }
+ else {
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ $$.fragment && $$.fragment.c();
+ }
+ if (options.intro)
+ transition_in(component.$$.fragment);
+ mount_component(component, options.target, options.anchor, options.customElement);
+ flush();
+ }
+ set_current_component(parent_component);
+}
+let SvelteElement;
+if (typeof HTMLElement === 'function') {
+ SvelteElement = class extends HTMLElement {
+ constructor() {
+ super();
+ this.attachShadow({ mode: 'open' });
+ }
+ connectedCallback() {
+ const { on_mount } = this.$$;
+ this.$$.on_disconnect = on_mount.map(run).filter(is_function);
+ // @ts-ignore todo: improve typings
+ for (const key in this.$$.slotted) {
+ // @ts-ignore todo: improve typings
+ this.appendChild(this.$$.slotted[key]);
+ }
+ }
+ attributeChangedCallback(attr, _oldValue, newValue) {
+ this[attr] = newValue;
+ }
+ disconnectedCallback() {
+ run_all(this.$$.on_disconnect);
+ }
+ $destroy() {
+ destroy_component(this, 1);
+ this.$destroy = noop;
+ }
+ $on(type, callback) {
+ // TODO should this delegate to addEventListener?
+ if (!is_function(callback)) {
+ return noop;
+ }
+ const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));
+ callbacks.push(callback);
+ return () => {
+ const index = callbacks.indexOf(callback);
+ if (index !== -1)
+ callbacks.splice(index, 1);
+ };
+ }
+ $set($$props) {
+ if (this.$$set && !is_empty($$props)) {
+ this.$$.skip_bound = true;
+ this.$$set($$props);
+ this.$$.skip_bound = false;
+ }
+ }
+ };
+}
+
+function dispatch_dev(type, detail) {
+ document.dispatchEvent(custom_event(type, Object.assign({ version: '3.52.0' }, detail), { bubbles: true }));
+}
+function append_dev(target, node) {
+ dispatch_dev('SvelteDOMInsert', { target, node });
+ append(target, node);
+}
+function insert_dev(target, node, anchor) {
+ dispatch_dev('SvelteDOMInsert', { target, node, anchor });
+ insert(target, node, anchor);
+}
+function detach_dev(node) {
+ dispatch_dev('SvelteDOMRemove', { node });
+ detach(node);
+}
+function listen_dev(node, event, handler, options, has_prevent_default, has_stop_propagation) {
+ const modifiers = options === true ? ['capture'] : options ? Array.from(Object.keys(options)) : [];
+ if (has_prevent_default)
+ modifiers.push('preventDefault');
+ if (has_stop_propagation)
+ modifiers.push('stopPropagation');
+ dispatch_dev('SvelteDOMAddEventListener', { node, event, handler, modifiers });
+ const dispose = listen(node, event, handler, options);
+ return () => {
+ dispatch_dev('SvelteDOMRemoveEventListener', { node, event, handler, modifiers });
+ dispose();
+ };
+}
+function attr_dev(node, attribute, value) {
+ attr(node, attribute, value);
+ if (value == null)
+ dispatch_dev('SvelteDOMRemoveAttribute', { node, attribute });
+ else
+ dispatch_dev('SvelteDOMSetAttribute', { node, attribute, value });
+}
+function prop_dev(node, property, value) {
+ node[property] = value;
+ dispatch_dev('SvelteDOMSetProperty', { node, property, value });
+}
+function set_data_dev(text, data) {
+ data = '' + data;
+ if (text.wholeText === data)
+ return;
+ dispatch_dev('SvelteDOMSetData', { node: text, data });
+ text.data = data;
+}
+function validate_each_argument(arg) {
+ if (typeof arg !== 'string' && !(arg && typeof arg === 'object' && 'length' in arg)) {
+ let msg = '{#each} only iterates over array-like objects.';
+ if (typeof Symbol === 'function' && arg && Symbol.iterator in arg) {
+ msg += ' You can use a spread to convert this iterable into an array.';
+ }
+ throw new Error(msg);
+ }
+}
+function validate_slots(name, slot, keys) {
+ for (const slot_key of Object.keys(slot)) {
+ if (!~keys.indexOf(slot_key)) {
+ console.warn(`<${name}> received an unexpected slot "${slot_key}".`);
+ }
+ }
+}
+
+export { prop_dev as A, flush as B, binding_callbacks as C, set_style as D, getContext as E, setContext as F, svg_element as G, is_function as H, HtmlTag as I, SvelteElement as S, attribute_to_object as a, insert_dev as b, validate_store as c, dispatch_dev as d, component_subscribe as e, validate_each_argument as f, globals as g, empty as h, init as i, detach_dev as j, element as k, space as l, add_location as m, noop as n, onMount as o, attr_dev as p, src_url_equal as q, set_custom_element_data as r, safe_not_equal as s, text as t, append_dev as u, validate_slots as v, set_data_dev as w, destroy_each as x, listen_dev as y, run_all as z };
diff --git a/Server/public/js/components/index-4348483d.js b/Server/public/js/components/index-4348483d.js
new file mode 100644
index 0000000..4215bf2
--- /dev/null
+++ b/Server/public/js/components/index-4348483d.js
@@ -0,0 +1 @@
+function t(){}function n(t){return t()}function e(){return Object.create(null)}function o(t){t.forEach(n)}function s(t){return"function"==typeof t}function r(t,n){return t!=t?n==n:t!==n||t&&"object"==typeof t||"function"==typeof t}let i,c;function a(t,n){return i||(i=document.createElement("a")),i.href=n,t===i.href}function u(n,e,o){n.$$.on_destroy.push(function(n,...e){if(null==n)return t;const o=n.subscribe(...e);return o.unsubscribe?()=>o.unsubscribe():o}(e,o))}function f(t,n){t.appendChild(n)}function l(t,n,e){t.insertBefore(n,e||null)}function h(t){t.parentNode.removeChild(t)}function d(t,n){for(let e=0;et.removeEventListener(n,e,o)}function y(t,n,e){null==e?t.removeAttribute(n):t.getAttribute(n)!==e&&t.setAttribute(n,e)}function _(t,n,e){n in t?t[n]="boolean"==typeof t[n]&&""===e||e:y(t,n,e)}function x(t,n){n=""+n,t.wholeText!==n&&(t.data=n)}function v(t,n,e,o){null===e?t.style.removeProperty(n):t.style.setProperty(n,e,o?"important":"")}class E{constructor(t=!1){this.is_svg=!1,this.is_svg=t,this.e=this.n=null}c(t){this.h(t)}m(t,n,e=null){var o;this.e||(this.is_svg?this.e=(o=n.nodeName,document.createElementNS("http://www.w3.org/2000/svg",o)):this.e=$(n.nodeName),this.t=n,this.c(t)),this.i(e)}h(t){this.e.innerHTML=t,this.n=Array.from(this.e.childNodes)}i(t){for(let n=0;n{const o=e.length?e[0]:n;return m.ctx&&f(m.ctx[t],m.ctx[t]=o)&&(!m.skip_bound&&m.bound[t]&&m.bound[t](o),g&&D(r,t)),n})):[],m.update(),g=!0,o(m.before_update),m.fragment=!!u&&u(m.ctx),i.target){if(i.hydrate){const t=function(t){return Array.from(t.childNodes)}(i.target);m.fragment&&m.fragment.l(t),t.forEach(h)}else m.fragment&&m.fragment.c();i.intro&&((b=r.$$.fragment)&&b.i&&(F.delete(b),b.i(y))),function(t,e,r,i){const{fragment:c,after_update:a}=t.$$;c&&c.m(e,r),i||O((()=>{const e=t.$$.on_mount.map(n).filter(s);t.$$.on_destroy?t.$$.on_destroy.push(...e):o(e),t.$$.on_mount=[]})),a.forEach(O)}(r,i.target,i.anchor,i.customElement),z()}var b,y;k(p)}let I;"function"==typeof HTMLElement&&(I=class extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"})}connectedCallback(){const{on_mount:t}=this.$$;this.$$.on_disconnect=t.map(n).filter(s);for(const t in this.$$.slotted)this.appendChild(this.$$.slotted[t])}attributeChangedCallback(t,n,e){this[t]=e}disconnectedCallback(){o(this.$$.on_disconnect)}$destroy(){!function(t,n){const e=t.$$;null!==e.fragment&&(o(e.on_destroy),e.fragment&&e.fragment.d(n),e.on_destroy=e.fragment=null,e.ctx=[])}(this,1),this.$destroy=t}$on(n,e){if(!s(e))return t;const o=this.$$.callbacks[n]||(this.$$.callbacks[n]=[]);return o.push(e),()=>{const t=o.indexOf(e);-1!==t&&o.splice(t,1)}}$set(t){var n;this.$$set&&(n=t,0!==Object.keys(n).length)&&(this.$$.skip_bound=!0,this.$$set(t),this.$$.skip_bound=!1)}});export{E as H,I as S,w as a,l as b,u as c,h as d,g as e,$ as f,m as g,y as h,G as i,a as j,_ as k,f as l,x as m,t as n,N as o,d as p,b as q,o as r,r as s,p as t,z as u,v,S as w,A as x,s as y};
diff --git a/Server/public/js/components/index-5e6510e7.js b/Server/public/js/components/index-5e6510e7.js
new file mode 100644
index 0000000..bf5342e
--- /dev/null
+++ b/Server/public/js/components/index-5e6510e7.js
@@ -0,0 +1,513 @@
+
+(function(l, r) { if (!l || l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (self.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(self.document);
+function noop() { }
+function add_location(element, file, line, column, char) {
+ element.__svelte_meta = {
+ loc: { file, line, column, char }
+ };
+}
+function run(fn) {
+ return fn();
+}
+function blank_object() {
+ return Object.create(null);
+}
+function run_all(fns) {
+ fns.forEach(run);
+}
+function is_function(thing) {
+ return typeof thing === 'function';
+}
+function safe_not_equal(a, b) {
+ return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
+}
+let src_url_equal_anchor;
+function src_url_equal(element_src, url) {
+ if (!src_url_equal_anchor) {
+ src_url_equal_anchor = document.createElement('a');
+ }
+ src_url_equal_anchor.href = url;
+ return element_src === src_url_equal_anchor.href;
+}
+function is_empty(obj) {
+ return Object.keys(obj).length === 0;
+}
+function validate_store(store, name) {
+ if (store != null && typeof store.subscribe !== 'function') {
+ throw new Error(`'${name}' is not a store with a 'subscribe' method`);
+ }
+}
+function subscribe(store, ...callbacks) {
+ if (store == null) {
+ return noop;
+ }
+ const unsub = store.subscribe(...callbacks);
+ return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;
+}
+function component_subscribe(component, store, callback) {
+ component.$$.on_destroy.push(subscribe(store, callback));
+}
+function append(target, node) {
+ target.appendChild(node);
+}
+function insert(target, node, anchor) {
+ target.insertBefore(node, anchor || null);
+}
+function detach(node) {
+ node.parentNode.removeChild(node);
+}
+function destroy_each(iterations, detaching) {
+ for (let i = 0; i < iterations.length; i += 1) {
+ if (iterations[i])
+ iterations[i].d(detaching);
+ }
+}
+function element(name) {
+ return document.createElement(name);
+}
+function svg_element(name) {
+ return document.createElementNS('http://www.w3.org/2000/svg', name);
+}
+function text(data) {
+ return document.createTextNode(data);
+}
+function space() {
+ return text(' ');
+}
+function empty() {
+ return text('');
+}
+function listen(node, event, handler, options) {
+ node.addEventListener(event, handler, options);
+ return () => node.removeEventListener(event, handler, options);
+}
+function attr(node, attribute, value) {
+ if (value == null)
+ node.removeAttribute(attribute);
+ else if (node.getAttribute(attribute) !== value)
+ node.setAttribute(attribute, value);
+}
+function set_custom_element_data(node, prop, value) {
+ if (prop in node) {
+ node[prop] = typeof node[prop] === 'boolean' && value === '' ? true : value;
+ }
+ else {
+ attr(node, prop, value);
+ }
+}
+function children(element) {
+ return Array.from(element.childNodes);
+}
+function set_style(node, key, value, important) {
+ if (value === null) {
+ node.style.removeProperty(key);
+ }
+ else {
+ node.style.setProperty(key, value, important ? 'important' : '');
+ }
+}
+function custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {
+ const e = document.createEvent('CustomEvent');
+ e.initCustomEvent(type, bubbles, cancelable, detail);
+ return e;
+}
+class HtmlTag {
+ constructor(is_svg = false) {
+ this.is_svg = false;
+ this.is_svg = is_svg;
+ this.e = this.n = null;
+ }
+ c(html) {
+ this.h(html);
+ }
+ m(html, target, anchor = null) {
+ if (!this.e) {
+ if (this.is_svg)
+ this.e = svg_element(target.nodeName);
+ else
+ this.e = element(target.nodeName);
+ this.t = target;
+ this.c(html);
+ }
+ this.i(anchor);
+ }
+ h(html) {
+ this.e.innerHTML = html;
+ this.n = Array.from(this.e.childNodes);
+ }
+ i(anchor) {
+ for (let i = 0; i < this.n.length; i += 1) {
+ insert(this.t, this.n[i], anchor);
+ }
+ }
+ p(html) {
+ this.d();
+ this.h(html);
+ this.i(this.a);
+ }
+ d() {
+ this.n.forEach(detach);
+ }
+}
+function attribute_to_object(attributes) {
+ const result = {};
+ for (const attribute of attributes) {
+ result[attribute.name] = attribute.value;
+ }
+ return result;
+}
+
+let current_component;
+function set_current_component(component) {
+ current_component = component;
+}
+function get_current_component() {
+ if (!current_component)
+ throw new Error('Function called outside component initialization');
+ return current_component;
+}
+/**
+ * The `onMount` function schedules a callback to run as soon as the component has been mounted to the DOM.
+ * It must be called during the component's initialisation (but doesn't need to live *inside* the component;
+ * it can be called from an external module).
+ *
+ * `onMount` does not run inside a [server-side component](/docs#run-time-server-side-component-api).
+ *
+ * https://svelte.dev/docs#run-time-svelte-onmount
+ */
+function onMount(fn) {
+ get_current_component().$$.on_mount.push(fn);
+}
+/**
+ * Associates an arbitrary `context` object with the current component and the specified `key`
+ * and returns that object. The context is then available to children of the component
+ * (including slotted content) with `getContext`.
+ *
+ * Like lifecycle functions, this must be called during component initialisation.
+ *
+ * https://svelte.dev/docs#run-time-svelte-setcontext
+ */
+function setContext(key, context) {
+ get_current_component().$$.context.set(key, context);
+ return context;
+}
+/**
+ * Retrieves the context that belongs to the closest parent component with the specified `key`.
+ * Must be called during component initialisation.
+ *
+ * https://svelte.dev/docs#run-time-svelte-getcontext
+ */
+function getContext(key) {
+ return get_current_component().$$.context.get(key);
+}
+
+const dirty_components = [];
+const binding_callbacks = [];
+const render_callbacks = [];
+const flush_callbacks = [];
+const resolved_promise = Promise.resolve();
+let update_scheduled = false;
+function schedule_update() {
+ if (!update_scheduled) {
+ update_scheduled = true;
+ resolved_promise.then(flush);
+ }
+}
+function add_render_callback(fn) {
+ render_callbacks.push(fn);
+}
+// flush() calls callbacks in this order:
+// 1. All beforeUpdate callbacks, in order: parents before children
+// 2. All bind:this callbacks, in reverse order: children before parents.
+// 3. All afterUpdate callbacks, in order: parents before children. EXCEPT
+// for afterUpdates called during the initial onMount, which are called in
+// reverse order: children before parents.
+// Since callbacks might update component values, which could trigger another
+// call to flush(), the following steps guard against this:
+// 1. During beforeUpdate, any updated components will be added to the
+// dirty_components array and will cause a reentrant call to flush(). Because
+// the flush index is kept outside the function, the reentrant call will pick
+// up where the earlier call left off and go through all dirty components. The
+// current_component value is saved and restored so that the reentrant call will
+// not interfere with the "parent" flush() call.
+// 2. bind:this callbacks cannot trigger new flush() calls.
+// 3. During afterUpdate, any updated components will NOT have their afterUpdate
+// callback called a second time; the seen_callbacks set, outside the flush()
+// function, guarantees this behavior.
+const seen_callbacks = new Set();
+let flushidx = 0; // Do *not* move this inside the flush() function
+function flush() {
+ const saved_component = current_component;
+ do {
+ // first, call beforeUpdate functions
+ // and update components
+ while (flushidx < dirty_components.length) {
+ const component = dirty_components[flushidx];
+ flushidx++;
+ set_current_component(component);
+ update(component.$$);
+ }
+ set_current_component(null);
+ dirty_components.length = 0;
+ flushidx = 0;
+ while (binding_callbacks.length)
+ binding_callbacks.pop()();
+ // then, once components are updated, call
+ // afterUpdate functions. This may cause
+ // subsequent updates...
+ for (let i = 0; i < render_callbacks.length; i += 1) {
+ const callback = render_callbacks[i];
+ if (!seen_callbacks.has(callback)) {
+ // ...so guard against infinite loops
+ seen_callbacks.add(callback);
+ callback();
+ }
+ }
+ render_callbacks.length = 0;
+ } while (dirty_components.length);
+ while (flush_callbacks.length) {
+ flush_callbacks.pop()();
+ }
+ update_scheduled = false;
+ seen_callbacks.clear();
+ set_current_component(saved_component);
+}
+function update($$) {
+ if ($$.fragment !== null) {
+ $$.update();
+ run_all($$.before_update);
+ const dirty = $$.dirty;
+ $$.dirty = [-1];
+ $$.fragment && $$.fragment.p($$.ctx, dirty);
+ $$.after_update.forEach(add_render_callback);
+ }
+}
+const outroing = new Set();
+function transition_in(block, local) {
+ if (block && block.i) {
+ outroing.delete(block);
+ block.i(local);
+ }
+}
+
+const globals = (typeof window !== 'undefined'
+ ? window
+ : typeof globalThis !== 'undefined'
+ ? globalThis
+ : global);
+function mount_component(component, target, anchor, customElement) {
+ const { fragment, after_update } = component.$$;
+ fragment && fragment.m(target, anchor);
+ if (!customElement) {
+ // onMount happens before the initial afterUpdate
+ add_render_callback(() => {
+ const new_on_destroy = component.$$.on_mount.map(run).filter(is_function);
+ // if the component was destroyed immediately
+ // it will update the `$$.on_destroy` reference to `null`.
+ // the destructured on_destroy may still reference to the old array
+ if (component.$$.on_destroy) {
+ component.$$.on_destroy.push(...new_on_destroy);
+ }
+ else {
+ // Edge case - component was destroyed immediately,
+ // most likely as a result of a binding initialising
+ run_all(new_on_destroy);
+ }
+ component.$$.on_mount = [];
+ });
+ }
+ after_update.forEach(add_render_callback);
+}
+function destroy_component(component, detaching) {
+ const $$ = component.$$;
+ if ($$.fragment !== null) {
+ run_all($$.on_destroy);
+ $$.fragment && $$.fragment.d(detaching);
+ // TODO null out other refs, including component.$$ (but need to
+ // preserve final state?)
+ $$.on_destroy = $$.fragment = null;
+ $$.ctx = [];
+ }
+}
+function make_dirty(component, i) {
+ if (component.$$.dirty[0] === -1) {
+ dirty_components.push(component);
+ schedule_update();
+ component.$$.dirty.fill(0);
+ }
+ component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31));
+}
+function init(component, options, instance, create_fragment, not_equal, props, append_styles, dirty = [-1]) {
+ const parent_component = current_component;
+ set_current_component(component);
+ const $$ = component.$$ = {
+ fragment: null,
+ ctx: [],
+ // state
+ props,
+ update: noop,
+ not_equal,
+ bound: blank_object(),
+ // lifecycle
+ on_mount: [],
+ on_destroy: [],
+ on_disconnect: [],
+ before_update: [],
+ after_update: [],
+ context: new Map(options.context || (parent_component ? parent_component.$$.context : [])),
+ // everything else
+ callbacks: blank_object(),
+ dirty,
+ skip_bound: false,
+ root: options.target || parent_component.$$.root
+ };
+ append_styles && append_styles($$.root);
+ let ready = false;
+ $$.ctx = instance
+ ? instance(component, options.props || {}, (i, ret, ...rest) => {
+ const value = rest.length ? rest[0] : ret;
+ if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {
+ if (!$$.skip_bound && $$.bound[i])
+ $$.bound[i](value);
+ if (ready)
+ make_dirty(component, i);
+ }
+ return ret;
+ })
+ : [];
+ $$.update();
+ ready = true;
+ run_all($$.before_update);
+ // `false` as a special case of no DOM component
+ $$.fragment = create_fragment ? create_fragment($$.ctx) : false;
+ if (options.target) {
+ if (options.hydrate) {
+ const nodes = children(options.target);
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ $$.fragment && $$.fragment.l(nodes);
+ nodes.forEach(detach);
+ }
+ else {
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ $$.fragment && $$.fragment.c();
+ }
+ if (options.intro)
+ transition_in(component.$$.fragment);
+ mount_component(component, options.target, options.anchor, options.customElement);
+ flush();
+ }
+ set_current_component(parent_component);
+}
+let SvelteElement;
+if (typeof HTMLElement === 'function') {
+ SvelteElement = class extends HTMLElement {
+ constructor() {
+ super();
+ this.attachShadow({ mode: 'open' });
+ }
+ connectedCallback() {
+ const { on_mount } = this.$$;
+ this.$$.on_disconnect = on_mount.map(run).filter(is_function);
+ // @ts-ignore todo: improve typings
+ for (const key in this.$$.slotted) {
+ // @ts-ignore todo: improve typings
+ this.appendChild(this.$$.slotted[key]);
+ }
+ }
+ attributeChangedCallback(attr, _oldValue, newValue) {
+ this[attr] = newValue;
+ }
+ disconnectedCallback() {
+ run_all(this.$$.on_disconnect);
+ }
+ $destroy() {
+ destroy_component(this, 1);
+ this.$destroy = noop;
+ }
+ $on(type, callback) {
+ // TODO should this delegate to addEventListener?
+ if (!is_function(callback)) {
+ return noop;
+ }
+ const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));
+ callbacks.push(callback);
+ return () => {
+ const index = callbacks.indexOf(callback);
+ if (index !== -1)
+ callbacks.splice(index, 1);
+ };
+ }
+ $set($$props) {
+ if (this.$$set && !is_empty($$props)) {
+ this.$$.skip_bound = true;
+ this.$$set($$props);
+ this.$$.skip_bound = false;
+ }
+ }
+ };
+}
+
+function dispatch_dev(type, detail) {
+ document.dispatchEvent(custom_event(type, Object.assign({ version: '3.52.0' }, detail), { bubbles: true }));
+}
+function append_dev(target, node) {
+ dispatch_dev('SvelteDOMInsert', { target, node });
+ append(target, node);
+}
+function insert_dev(target, node, anchor) {
+ dispatch_dev('SvelteDOMInsert', { target, node, anchor });
+ insert(target, node, anchor);
+}
+function detach_dev(node) {
+ dispatch_dev('SvelteDOMRemove', { node });
+ detach(node);
+}
+function listen_dev(node, event, handler, options, has_prevent_default, has_stop_propagation) {
+ const modifiers = options === true ? ['capture'] : options ? Array.from(Object.keys(options)) : [];
+ if (has_prevent_default)
+ modifiers.push('preventDefault');
+ if (has_stop_propagation)
+ modifiers.push('stopPropagation');
+ dispatch_dev('SvelteDOMAddEventListener', { node, event, handler, modifiers });
+ const dispose = listen(node, event, handler, options);
+ return () => {
+ dispatch_dev('SvelteDOMRemoveEventListener', { node, event, handler, modifiers });
+ dispose();
+ };
+}
+function attr_dev(node, attribute, value) {
+ attr(node, attribute, value);
+ if (value == null)
+ dispatch_dev('SvelteDOMRemoveAttribute', { node, attribute });
+ else
+ dispatch_dev('SvelteDOMSetAttribute', { node, attribute, value });
+}
+function prop_dev(node, property, value) {
+ node[property] = value;
+ dispatch_dev('SvelteDOMSetProperty', { node, property, value });
+}
+function set_data_dev(text, data) {
+ data = '' + data;
+ if (text.wholeText === data)
+ return;
+ dispatch_dev('SvelteDOMSetData', { node: text, data });
+ text.data = data;
+}
+function validate_each_argument(arg) {
+ if (typeof arg !== 'string' && !(arg && typeof arg === 'object' && 'length' in arg)) {
+ let msg = '{#each} only iterates over array-like objects.';
+ if (typeof Symbol === 'function' && arg && Symbol.iterator in arg) {
+ msg += ' You can use a spread to convert this iterable into an array.';
+ }
+ throw new Error(msg);
+ }
+}
+function validate_slots(name, slot, keys) {
+ for (const slot_key of Object.keys(slot)) {
+ if (!~keys.indexOf(slot_key)) {
+ console.warn(`<${name}> received an unexpected slot "${slot_key}".`);
+ }
+ }
+}
+
+export { run_all as A, prop_dev as B, flush as C, set_style as D, getContext as E, setContext as F, svg_element as G, is_function as H, HtmlTag as I, SvelteElement as S, attribute_to_object as a, insert_dev as b, validate_store as c, dispatch_dev as d, component_subscribe as e, validate_each_argument as f, globals as g, empty as h, init as i, detach_dev as j, element as k, space as l, add_location as m, noop as n, onMount as o, attr_dev as p, src_url_equal as q, set_custom_element_data as r, safe_not_equal as s, text as t, append_dev as u, validate_slots as v, set_data_dev as w, destroy_each as x, binding_callbacks as y, listen_dev as z };
diff --git a/Server/public/js/components/index-68a48afb.js b/Server/public/js/components/index-68a48afb.js
new file mode 100644
index 0000000..582467c
--- /dev/null
+++ b/Server/public/js/components/index-68a48afb.js
@@ -0,0 +1,513 @@
+
+(function(l, r) { if (!l || l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (self.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(self.document);
+function noop() { }
+function add_location(element, file, line, column, char) {
+ element.__svelte_meta = {
+ loc: { file, line, column, char }
+ };
+}
+function run(fn) {
+ return fn();
+}
+function blank_object() {
+ return Object.create(null);
+}
+function run_all(fns) {
+ fns.forEach(run);
+}
+function is_function(thing) {
+ return typeof thing === 'function';
+}
+function safe_not_equal(a, b) {
+ return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
+}
+let src_url_equal_anchor;
+function src_url_equal(element_src, url) {
+ if (!src_url_equal_anchor) {
+ src_url_equal_anchor = document.createElement('a');
+ }
+ src_url_equal_anchor.href = url;
+ return element_src === src_url_equal_anchor.href;
+}
+function is_empty(obj) {
+ return Object.keys(obj).length === 0;
+}
+function validate_store(store, name) {
+ if (store != null && typeof store.subscribe !== 'function') {
+ throw new Error(`'${name}' is not a store with a 'subscribe' method`);
+ }
+}
+function subscribe(store, ...callbacks) {
+ if (store == null) {
+ return noop;
+ }
+ const unsub = store.subscribe(...callbacks);
+ return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;
+}
+function component_subscribe(component, store, callback) {
+ component.$$.on_destroy.push(subscribe(store, callback));
+}
+function append(target, node) {
+ target.appendChild(node);
+}
+function insert(target, node, anchor) {
+ target.insertBefore(node, anchor || null);
+}
+function detach(node) {
+ node.parentNode.removeChild(node);
+}
+function destroy_each(iterations, detaching) {
+ for (let i = 0; i < iterations.length; i += 1) {
+ if (iterations[i])
+ iterations[i].d(detaching);
+ }
+}
+function element(name) {
+ return document.createElement(name);
+}
+function svg_element(name) {
+ return document.createElementNS('http://www.w3.org/2000/svg', name);
+}
+function text(data) {
+ return document.createTextNode(data);
+}
+function space() {
+ return text(' ');
+}
+function empty() {
+ return text('');
+}
+function listen(node, event, handler, options) {
+ node.addEventListener(event, handler, options);
+ return () => node.removeEventListener(event, handler, options);
+}
+function attr(node, attribute, value) {
+ if (value == null)
+ node.removeAttribute(attribute);
+ else if (node.getAttribute(attribute) !== value)
+ node.setAttribute(attribute, value);
+}
+function set_custom_element_data(node, prop, value) {
+ if (prop in node) {
+ node[prop] = typeof node[prop] === 'boolean' && value === '' ? true : value;
+ }
+ else {
+ attr(node, prop, value);
+ }
+}
+function children(element) {
+ return Array.from(element.childNodes);
+}
+function set_style(node, key, value, important) {
+ if (value === null) {
+ node.style.removeProperty(key);
+ }
+ else {
+ node.style.setProperty(key, value, important ? 'important' : '');
+ }
+}
+function custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {
+ const e = document.createEvent('CustomEvent');
+ e.initCustomEvent(type, bubbles, cancelable, detail);
+ return e;
+}
+class HtmlTag {
+ constructor(is_svg = false) {
+ this.is_svg = false;
+ this.is_svg = is_svg;
+ this.e = this.n = null;
+ }
+ c(html) {
+ this.h(html);
+ }
+ m(html, target, anchor = null) {
+ if (!this.e) {
+ if (this.is_svg)
+ this.e = svg_element(target.nodeName);
+ else
+ this.e = element(target.nodeName);
+ this.t = target;
+ this.c(html);
+ }
+ this.i(anchor);
+ }
+ h(html) {
+ this.e.innerHTML = html;
+ this.n = Array.from(this.e.childNodes);
+ }
+ i(anchor) {
+ for (let i = 0; i < this.n.length; i += 1) {
+ insert(this.t, this.n[i], anchor);
+ }
+ }
+ p(html) {
+ this.d();
+ this.h(html);
+ this.i(this.a);
+ }
+ d() {
+ this.n.forEach(detach);
+ }
+}
+function attribute_to_object(attributes) {
+ const result = {};
+ for (const attribute of attributes) {
+ result[attribute.name] = attribute.value;
+ }
+ return result;
+}
+
+let current_component;
+function set_current_component(component) {
+ current_component = component;
+}
+function get_current_component() {
+ if (!current_component)
+ throw new Error('Function called outside component initialization');
+ return current_component;
+}
+/**
+ * The `onMount` function schedules a callback to run as soon as the component has been mounted to the DOM.
+ * It must be called during the component's initialisation (but doesn't need to live *inside* the component;
+ * it can be called from an external module).
+ *
+ * `onMount` does not run inside a [server-side component](/docs#run-time-server-side-component-api).
+ *
+ * https://svelte.dev/docs#run-time-svelte-onmount
+ */
+function onMount(fn) {
+ get_current_component().$$.on_mount.push(fn);
+}
+/**
+ * Associates an arbitrary `context` object with the current component and the specified `key`
+ * and returns that object. The context is then available to children of the component
+ * (including slotted content) with `getContext`.
+ *
+ * Like lifecycle functions, this must be called during component initialisation.
+ *
+ * https://svelte.dev/docs#run-time-svelte-setcontext
+ */
+function setContext(key, context) {
+ get_current_component().$$.context.set(key, context);
+ return context;
+}
+/**
+ * Retrieves the context that belongs to the closest parent component with the specified `key`.
+ * Must be called during component initialisation.
+ *
+ * https://svelte.dev/docs#run-time-svelte-getcontext
+ */
+function getContext(key) {
+ return get_current_component().$$.context.get(key);
+}
+
+const dirty_components = [];
+const binding_callbacks = [];
+const render_callbacks = [];
+const flush_callbacks = [];
+const resolved_promise = Promise.resolve();
+let update_scheduled = false;
+function schedule_update() {
+ if (!update_scheduled) {
+ update_scheduled = true;
+ resolved_promise.then(flush);
+ }
+}
+function add_render_callback(fn) {
+ render_callbacks.push(fn);
+}
+// flush() calls callbacks in this order:
+// 1. All beforeUpdate callbacks, in order: parents before children
+// 2. All bind:this callbacks, in reverse order: children before parents.
+// 3. All afterUpdate callbacks, in order: parents before children. EXCEPT
+// for afterUpdates called during the initial onMount, which are called in
+// reverse order: children before parents.
+// Since callbacks might update component values, which could trigger another
+// call to flush(), the following steps guard against this:
+// 1. During beforeUpdate, any updated components will be added to the
+// dirty_components array and will cause a reentrant call to flush(). Because
+// the flush index is kept outside the function, the reentrant call will pick
+// up where the earlier call left off and go through all dirty components. The
+// current_component value is saved and restored so that the reentrant call will
+// not interfere with the "parent" flush() call.
+// 2. bind:this callbacks cannot trigger new flush() calls.
+// 3. During afterUpdate, any updated components will NOT have their afterUpdate
+// callback called a second time; the seen_callbacks set, outside the flush()
+// function, guarantees this behavior.
+const seen_callbacks = new Set();
+let flushidx = 0; // Do *not* move this inside the flush() function
+function flush() {
+ const saved_component = current_component;
+ do {
+ // first, call beforeUpdate functions
+ // and update components
+ while (flushidx < dirty_components.length) {
+ const component = dirty_components[flushidx];
+ flushidx++;
+ set_current_component(component);
+ update(component.$$);
+ }
+ set_current_component(null);
+ dirty_components.length = 0;
+ flushidx = 0;
+ while (binding_callbacks.length)
+ binding_callbacks.pop()();
+ // then, once components are updated, call
+ // afterUpdate functions. This may cause
+ // subsequent updates...
+ for (let i = 0; i < render_callbacks.length; i += 1) {
+ const callback = render_callbacks[i];
+ if (!seen_callbacks.has(callback)) {
+ // ...so guard against infinite loops
+ seen_callbacks.add(callback);
+ callback();
+ }
+ }
+ render_callbacks.length = 0;
+ } while (dirty_components.length);
+ while (flush_callbacks.length) {
+ flush_callbacks.pop()();
+ }
+ update_scheduled = false;
+ seen_callbacks.clear();
+ set_current_component(saved_component);
+}
+function update($$) {
+ if ($$.fragment !== null) {
+ $$.update();
+ run_all($$.before_update);
+ const dirty = $$.dirty;
+ $$.dirty = [-1];
+ $$.fragment && $$.fragment.p($$.ctx, dirty);
+ $$.after_update.forEach(add_render_callback);
+ }
+}
+const outroing = new Set();
+function transition_in(block, local) {
+ if (block && block.i) {
+ outroing.delete(block);
+ block.i(local);
+ }
+}
+
+const globals = (typeof window !== 'undefined'
+ ? window
+ : typeof globalThis !== 'undefined'
+ ? globalThis
+ : global);
+function mount_component(component, target, anchor, customElement) {
+ const { fragment, after_update } = component.$$;
+ fragment && fragment.m(target, anchor);
+ if (!customElement) {
+ // onMount happens before the initial afterUpdate
+ add_render_callback(() => {
+ const new_on_destroy = component.$$.on_mount.map(run).filter(is_function);
+ // if the component was destroyed immediately
+ // it will update the `$$.on_destroy` reference to `null`.
+ // the destructured on_destroy may still reference to the old array
+ if (component.$$.on_destroy) {
+ component.$$.on_destroy.push(...new_on_destroy);
+ }
+ else {
+ // Edge case - component was destroyed immediately,
+ // most likely as a result of a binding initialising
+ run_all(new_on_destroy);
+ }
+ component.$$.on_mount = [];
+ });
+ }
+ after_update.forEach(add_render_callback);
+}
+function destroy_component(component, detaching) {
+ const $$ = component.$$;
+ if ($$.fragment !== null) {
+ run_all($$.on_destroy);
+ $$.fragment && $$.fragment.d(detaching);
+ // TODO null out other refs, including component.$$ (but need to
+ // preserve final state?)
+ $$.on_destroy = $$.fragment = null;
+ $$.ctx = [];
+ }
+}
+function make_dirty(component, i) {
+ if (component.$$.dirty[0] === -1) {
+ dirty_components.push(component);
+ schedule_update();
+ component.$$.dirty.fill(0);
+ }
+ component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31));
+}
+function init(component, options, instance, create_fragment, not_equal, props, append_styles, dirty = [-1]) {
+ const parent_component = current_component;
+ set_current_component(component);
+ const $$ = component.$$ = {
+ fragment: null,
+ ctx: [],
+ // state
+ props,
+ update: noop,
+ not_equal,
+ bound: blank_object(),
+ // lifecycle
+ on_mount: [],
+ on_destroy: [],
+ on_disconnect: [],
+ before_update: [],
+ after_update: [],
+ context: new Map(options.context || (parent_component ? parent_component.$$.context : [])),
+ // everything else
+ callbacks: blank_object(),
+ dirty,
+ skip_bound: false,
+ root: options.target || parent_component.$$.root
+ };
+ append_styles && append_styles($$.root);
+ let ready = false;
+ $$.ctx = instance
+ ? instance(component, options.props || {}, (i, ret, ...rest) => {
+ const value = rest.length ? rest[0] : ret;
+ if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {
+ if (!$$.skip_bound && $$.bound[i])
+ $$.bound[i](value);
+ if (ready)
+ make_dirty(component, i);
+ }
+ return ret;
+ })
+ : [];
+ $$.update();
+ ready = true;
+ run_all($$.before_update);
+ // `false` as a special case of no DOM component
+ $$.fragment = create_fragment ? create_fragment($$.ctx) : false;
+ if (options.target) {
+ if (options.hydrate) {
+ const nodes = children(options.target);
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ $$.fragment && $$.fragment.l(nodes);
+ nodes.forEach(detach);
+ }
+ else {
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ $$.fragment && $$.fragment.c();
+ }
+ if (options.intro)
+ transition_in(component.$$.fragment);
+ mount_component(component, options.target, options.anchor, options.customElement);
+ flush();
+ }
+ set_current_component(parent_component);
+}
+let SvelteElement;
+if (typeof HTMLElement === 'function') {
+ SvelteElement = class extends HTMLElement {
+ constructor() {
+ super();
+ this.attachShadow({ mode: 'open' });
+ }
+ connectedCallback() {
+ const { on_mount } = this.$$;
+ this.$$.on_disconnect = on_mount.map(run).filter(is_function);
+ // @ts-ignore todo: improve typings
+ for (const key in this.$$.slotted) {
+ // @ts-ignore todo: improve typings
+ this.appendChild(this.$$.slotted[key]);
+ }
+ }
+ attributeChangedCallback(attr, _oldValue, newValue) {
+ this[attr] = newValue;
+ }
+ disconnectedCallback() {
+ run_all(this.$$.on_disconnect);
+ }
+ $destroy() {
+ destroy_component(this, 1);
+ this.$destroy = noop;
+ }
+ $on(type, callback) {
+ // TODO should this delegate to addEventListener?
+ if (!is_function(callback)) {
+ return noop;
+ }
+ const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));
+ callbacks.push(callback);
+ return () => {
+ const index = callbacks.indexOf(callback);
+ if (index !== -1)
+ callbacks.splice(index, 1);
+ };
+ }
+ $set($$props) {
+ if (this.$$set && !is_empty($$props)) {
+ this.$$.skip_bound = true;
+ this.$$set($$props);
+ this.$$.skip_bound = false;
+ }
+ }
+ };
+}
+
+function dispatch_dev(type, detail) {
+ document.dispatchEvent(custom_event(type, Object.assign({ version: '3.52.0' }, detail), { bubbles: true }));
+}
+function append_dev(target, node) {
+ dispatch_dev('SvelteDOMInsert', { target, node });
+ append(target, node);
+}
+function insert_dev(target, node, anchor) {
+ dispatch_dev('SvelteDOMInsert', { target, node, anchor });
+ insert(target, node, anchor);
+}
+function detach_dev(node) {
+ dispatch_dev('SvelteDOMRemove', { node });
+ detach(node);
+}
+function listen_dev(node, event, handler, options, has_prevent_default, has_stop_propagation) {
+ const modifiers = options === true ? ['capture'] : options ? Array.from(Object.keys(options)) : [];
+ if (has_prevent_default)
+ modifiers.push('preventDefault');
+ if (has_stop_propagation)
+ modifiers.push('stopPropagation');
+ dispatch_dev('SvelteDOMAddEventListener', { node, event, handler, modifiers });
+ const dispose = listen(node, event, handler, options);
+ return () => {
+ dispatch_dev('SvelteDOMRemoveEventListener', { node, event, handler, modifiers });
+ dispose();
+ };
+}
+function attr_dev(node, attribute, value) {
+ attr(node, attribute, value);
+ if (value == null)
+ dispatch_dev('SvelteDOMRemoveAttribute', { node, attribute });
+ else
+ dispatch_dev('SvelteDOMSetAttribute', { node, attribute, value });
+}
+function prop_dev(node, property, value) {
+ node[property] = value;
+ dispatch_dev('SvelteDOMSetProperty', { node, property, value });
+}
+function set_data_dev(text, data) {
+ data = '' + data;
+ if (text.wholeText === data)
+ return;
+ dispatch_dev('SvelteDOMSetData', { node: text, data });
+ text.data = data;
+}
+function validate_each_argument(arg) {
+ if (typeof arg !== 'string' && !(arg && typeof arg === 'object' && 'length' in arg)) {
+ let msg = '{#each} only iterates over array-like objects.';
+ if (typeof Symbol === 'function' && arg && Symbol.iterator in arg) {
+ msg += ' You can use a spread to convert this iterable into an array.';
+ }
+ throw new Error(msg);
+ }
+}
+function validate_slots(name, slot, keys) {
+ for (const slot_key of Object.keys(slot)) {
+ if (!~keys.indexOf(slot_key)) {
+ console.warn(`<${name}> received an unexpected slot "${slot_key}".`);
+ }
+ }
+}
+
+export { binding_callbacks as A, set_style as B, listen_dev as C, getContext as D, setContext as E, run_all as F, svg_element as G, is_function as H, HtmlTag as I, SvelteElement as S, attribute_to_object as a, insert_dev as b, validate_store as c, dispatch_dev as d, component_subscribe as e, validate_each_argument as f, globals as g, empty as h, init as i, detach_dev as j, element as k, space as l, add_location as m, noop as n, onMount as o, attr_dev as p, src_url_equal as q, set_custom_element_data as r, safe_not_equal as s, text as t, append_dev as u, validate_slots as v, set_data_dev as w, destroy_each as x, prop_dev as y, flush as z };
diff --git a/Server/public/js/components/index-71440b21.js b/Server/public/js/components/index-71440b21.js
new file mode 100644
index 0000000..417b6af
--- /dev/null
+++ b/Server/public/js/components/index-71440b21.js
@@ -0,0 +1 @@
+import{n,s as t}from"./index-4348483d.js";const e=[];function s(s,o=n){let i;const c=new Set;function f(n){if(t(s,n)&&(s=n,i)){const n=!e.length;for(const n of c)n[1](),e.push(n,s);if(n){for(let n=0;n{c.delete(r),0===c.size&&(i(),i=null)}}}}export{s as w};
diff --git a/Server/public/js/components/index-86921d75.js b/Server/public/js/components/index-86921d75.js
new file mode 100644
index 0000000..4c1aa7c
--- /dev/null
+++ b/Server/public/js/components/index-86921d75.js
@@ -0,0 +1,53 @@
+
+(function(l, r) { if (!l || l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (self.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(self.document);
+import { n as noop, s as safe_not_equal } from './index-5e6510e7.js';
+
+const subscriber_queue = [];
+/**
+ * Create a `Writable` store that allows both updating and reading by subscription.
+ * @param {*=}value initial value
+ * @param {StartStopNotifier=}start start and stop notifications for subscriptions
+ */
+function writable(value, start = noop) {
+ let stop;
+ const subscribers = new Set();
+ function set(new_value) {
+ if (safe_not_equal(value, new_value)) {
+ value = new_value;
+ if (stop) { // store is ready
+ const run_queue = !subscriber_queue.length;
+ for (const subscriber of subscribers) {
+ subscriber[1]();
+ subscriber_queue.push(subscriber, value);
+ }
+ if (run_queue) {
+ for (let i = 0; i < subscriber_queue.length; i += 2) {
+ subscriber_queue[i][0](subscriber_queue[i + 1]);
+ }
+ subscriber_queue.length = 0;
+ }
+ }
+ }
+ }
+ function update(fn) {
+ set(fn(value));
+ }
+ function subscribe(run, invalidate = noop) {
+ const subscriber = [run, invalidate];
+ subscribers.add(subscriber);
+ if (subscribers.size === 1) {
+ stop = start(set) || noop;
+ }
+ run(value);
+ return () => {
+ subscribers.delete(subscriber);
+ if (subscribers.size === 0) {
+ stop();
+ stop = null;
+ }
+ };
+ }
+ return { set, update, subscribe };
+}
+
+export { writable as w };
diff --git a/Server/public/js/components/index-a1c185ea.js b/Server/public/js/components/index-a1c185ea.js
new file mode 100644
index 0000000..669661e
--- /dev/null
+++ b/Server/public/js/components/index-a1c185ea.js
@@ -0,0 +1,53 @@
+
+(function(l, r) { if (!l || l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (self.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(self.document);
+import { n as noop, s as safe_not_equal } from './index-42a25c61.js';
+
+const subscriber_queue = [];
+/**
+ * Create a `Writable` store that allows both updating and reading by subscription.
+ * @param {*=}value initial value
+ * @param {StartStopNotifier=}start start and stop notifications for subscriptions
+ */
+function writable(value, start = noop) {
+ let stop;
+ const subscribers = new Set();
+ function set(new_value) {
+ if (safe_not_equal(value, new_value)) {
+ value = new_value;
+ if (stop) { // store is ready
+ const run_queue = !subscriber_queue.length;
+ for (const subscriber of subscribers) {
+ subscriber[1]();
+ subscriber_queue.push(subscriber, value);
+ }
+ if (run_queue) {
+ for (let i = 0; i < subscriber_queue.length; i += 2) {
+ subscriber_queue[i][0](subscriber_queue[i + 1]);
+ }
+ subscriber_queue.length = 0;
+ }
+ }
+ }
+ }
+ function update(fn) {
+ set(fn(value));
+ }
+ function subscribe(run, invalidate = noop) {
+ const subscriber = [run, invalidate];
+ subscribers.add(subscriber);
+ if (subscribers.size === 1) {
+ stop = start(set) || noop;
+ }
+ run(value);
+ return () => {
+ subscribers.delete(subscriber);
+ if (subscribers.size === 0) {
+ stop();
+ stop = null;
+ }
+ };
+ }
+ return { set, update, subscribe };
+}
+
+export { writable as w };
diff --git a/Server/public/js/components/index-d08fd9c0.js b/Server/public/js/components/index-d08fd9c0.js
new file mode 100644
index 0000000..85b6505
--- /dev/null
+++ b/Server/public/js/components/index-d08fd9c0.js
@@ -0,0 +1,513 @@
+
+(function(l, r) { if (!l || l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (self.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(self.document);
+function noop() { }
+function add_location(element, file, line, column, char) {
+ element.__svelte_meta = {
+ loc: { file, line, column, char }
+ };
+}
+function run(fn) {
+ return fn();
+}
+function blank_object() {
+ return Object.create(null);
+}
+function run_all(fns) {
+ fns.forEach(run);
+}
+function is_function(thing) {
+ return typeof thing === 'function';
+}
+function safe_not_equal(a, b) {
+ return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
+}
+let src_url_equal_anchor;
+function src_url_equal(element_src, url) {
+ if (!src_url_equal_anchor) {
+ src_url_equal_anchor = document.createElement('a');
+ }
+ src_url_equal_anchor.href = url;
+ return element_src === src_url_equal_anchor.href;
+}
+function is_empty(obj) {
+ return Object.keys(obj).length === 0;
+}
+function validate_store(store, name) {
+ if (store != null && typeof store.subscribe !== 'function') {
+ throw new Error(`'${name}' is not a store with a 'subscribe' method`);
+ }
+}
+function subscribe(store, ...callbacks) {
+ if (store == null) {
+ return noop;
+ }
+ const unsub = store.subscribe(...callbacks);
+ return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;
+}
+function component_subscribe(component, store, callback) {
+ component.$$.on_destroy.push(subscribe(store, callback));
+}
+function append(target, node) {
+ target.appendChild(node);
+}
+function insert(target, node, anchor) {
+ target.insertBefore(node, anchor || null);
+}
+function detach(node) {
+ node.parentNode.removeChild(node);
+}
+function destroy_each(iterations, detaching) {
+ for (let i = 0; i < iterations.length; i += 1) {
+ if (iterations[i])
+ iterations[i].d(detaching);
+ }
+}
+function element(name) {
+ return document.createElement(name);
+}
+function svg_element(name) {
+ return document.createElementNS('http://www.w3.org/2000/svg', name);
+}
+function text(data) {
+ return document.createTextNode(data);
+}
+function space() {
+ return text(' ');
+}
+function empty() {
+ return text('');
+}
+function listen(node, event, handler, options) {
+ node.addEventListener(event, handler, options);
+ return () => node.removeEventListener(event, handler, options);
+}
+function attr(node, attribute, value) {
+ if (value == null)
+ node.removeAttribute(attribute);
+ else if (node.getAttribute(attribute) !== value)
+ node.setAttribute(attribute, value);
+}
+function set_custom_element_data(node, prop, value) {
+ if (prop in node) {
+ node[prop] = typeof node[prop] === 'boolean' && value === '' ? true : value;
+ }
+ else {
+ attr(node, prop, value);
+ }
+}
+function children(element) {
+ return Array.from(element.childNodes);
+}
+function set_style(node, key, value, important) {
+ if (value === null) {
+ node.style.removeProperty(key);
+ }
+ else {
+ node.style.setProperty(key, value, important ? 'important' : '');
+ }
+}
+function custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {
+ const e = document.createEvent('CustomEvent');
+ e.initCustomEvent(type, bubbles, cancelable, detail);
+ return e;
+}
+class HtmlTag {
+ constructor(is_svg = false) {
+ this.is_svg = false;
+ this.is_svg = is_svg;
+ this.e = this.n = null;
+ }
+ c(html) {
+ this.h(html);
+ }
+ m(html, target, anchor = null) {
+ if (!this.e) {
+ if (this.is_svg)
+ this.e = svg_element(target.nodeName);
+ else
+ this.e = element(target.nodeName);
+ this.t = target;
+ this.c(html);
+ }
+ this.i(anchor);
+ }
+ h(html) {
+ this.e.innerHTML = html;
+ this.n = Array.from(this.e.childNodes);
+ }
+ i(anchor) {
+ for (let i = 0; i < this.n.length; i += 1) {
+ insert(this.t, this.n[i], anchor);
+ }
+ }
+ p(html) {
+ this.d();
+ this.h(html);
+ this.i(this.a);
+ }
+ d() {
+ this.n.forEach(detach);
+ }
+}
+function attribute_to_object(attributes) {
+ const result = {};
+ for (const attribute of attributes) {
+ result[attribute.name] = attribute.value;
+ }
+ return result;
+}
+
+let current_component;
+function set_current_component(component) {
+ current_component = component;
+}
+function get_current_component() {
+ if (!current_component)
+ throw new Error('Function called outside component initialization');
+ return current_component;
+}
+/**
+ * The `onMount` function schedules a callback to run as soon as the component has been mounted to the DOM.
+ * It must be called during the component's initialisation (but doesn't need to live *inside* the component;
+ * it can be called from an external module).
+ *
+ * `onMount` does not run inside a [server-side component](/docs#run-time-server-side-component-api).
+ *
+ * https://svelte.dev/docs#run-time-svelte-onmount
+ */
+function onMount(fn) {
+ get_current_component().$$.on_mount.push(fn);
+}
+/**
+ * Associates an arbitrary `context` object with the current component and the specified `key`
+ * and returns that object. The context is then available to children of the component
+ * (including slotted content) with `getContext`.
+ *
+ * Like lifecycle functions, this must be called during component initialisation.
+ *
+ * https://svelte.dev/docs#run-time-svelte-setcontext
+ */
+function setContext(key, context) {
+ get_current_component().$$.context.set(key, context);
+ return context;
+}
+/**
+ * Retrieves the context that belongs to the closest parent component with the specified `key`.
+ * Must be called during component initialisation.
+ *
+ * https://svelte.dev/docs#run-time-svelte-getcontext
+ */
+function getContext(key) {
+ return get_current_component().$$.context.get(key);
+}
+
+const dirty_components = [];
+const binding_callbacks = [];
+const render_callbacks = [];
+const flush_callbacks = [];
+const resolved_promise = Promise.resolve();
+let update_scheduled = false;
+function schedule_update() {
+ if (!update_scheduled) {
+ update_scheduled = true;
+ resolved_promise.then(flush);
+ }
+}
+function add_render_callback(fn) {
+ render_callbacks.push(fn);
+}
+// flush() calls callbacks in this order:
+// 1. All beforeUpdate callbacks, in order: parents before children
+// 2. All bind:this callbacks, in reverse order: children before parents.
+// 3. All afterUpdate callbacks, in order: parents before children. EXCEPT
+// for afterUpdates called during the initial onMount, which are called in
+// reverse order: children before parents.
+// Since callbacks might update component values, which could trigger another
+// call to flush(), the following steps guard against this:
+// 1. During beforeUpdate, any updated components will be added to the
+// dirty_components array and will cause a reentrant call to flush(). Because
+// the flush index is kept outside the function, the reentrant call will pick
+// up where the earlier call left off and go through all dirty components. The
+// current_component value is saved and restored so that the reentrant call will
+// not interfere with the "parent" flush() call.
+// 2. bind:this callbacks cannot trigger new flush() calls.
+// 3. During afterUpdate, any updated components will NOT have their afterUpdate
+// callback called a second time; the seen_callbacks set, outside the flush()
+// function, guarantees this behavior.
+const seen_callbacks = new Set();
+let flushidx = 0; // Do *not* move this inside the flush() function
+function flush() {
+ const saved_component = current_component;
+ do {
+ // first, call beforeUpdate functions
+ // and update components
+ while (flushidx < dirty_components.length) {
+ const component = dirty_components[flushidx];
+ flushidx++;
+ set_current_component(component);
+ update(component.$$);
+ }
+ set_current_component(null);
+ dirty_components.length = 0;
+ flushidx = 0;
+ while (binding_callbacks.length)
+ binding_callbacks.pop()();
+ // then, once components are updated, call
+ // afterUpdate functions. This may cause
+ // subsequent updates...
+ for (let i = 0; i < render_callbacks.length; i += 1) {
+ const callback = render_callbacks[i];
+ if (!seen_callbacks.has(callback)) {
+ // ...so guard against infinite loops
+ seen_callbacks.add(callback);
+ callback();
+ }
+ }
+ render_callbacks.length = 0;
+ } while (dirty_components.length);
+ while (flush_callbacks.length) {
+ flush_callbacks.pop()();
+ }
+ update_scheduled = false;
+ seen_callbacks.clear();
+ set_current_component(saved_component);
+}
+function update($$) {
+ if ($$.fragment !== null) {
+ $$.update();
+ run_all($$.before_update);
+ const dirty = $$.dirty;
+ $$.dirty = [-1];
+ $$.fragment && $$.fragment.p($$.ctx, dirty);
+ $$.after_update.forEach(add_render_callback);
+ }
+}
+const outroing = new Set();
+function transition_in(block, local) {
+ if (block && block.i) {
+ outroing.delete(block);
+ block.i(local);
+ }
+}
+
+const globals = (typeof window !== 'undefined'
+ ? window
+ : typeof globalThis !== 'undefined'
+ ? globalThis
+ : global);
+function mount_component(component, target, anchor, customElement) {
+ const { fragment, after_update } = component.$$;
+ fragment && fragment.m(target, anchor);
+ if (!customElement) {
+ // onMount happens before the initial afterUpdate
+ add_render_callback(() => {
+ const new_on_destroy = component.$$.on_mount.map(run).filter(is_function);
+ // if the component was destroyed immediately
+ // it will update the `$$.on_destroy` reference to `null`.
+ // the destructured on_destroy may still reference to the old array
+ if (component.$$.on_destroy) {
+ component.$$.on_destroy.push(...new_on_destroy);
+ }
+ else {
+ // Edge case - component was destroyed immediately,
+ // most likely as a result of a binding initialising
+ run_all(new_on_destroy);
+ }
+ component.$$.on_mount = [];
+ });
+ }
+ after_update.forEach(add_render_callback);
+}
+function destroy_component(component, detaching) {
+ const $$ = component.$$;
+ if ($$.fragment !== null) {
+ run_all($$.on_destroy);
+ $$.fragment && $$.fragment.d(detaching);
+ // TODO null out other refs, including component.$$ (but need to
+ // preserve final state?)
+ $$.on_destroy = $$.fragment = null;
+ $$.ctx = [];
+ }
+}
+function make_dirty(component, i) {
+ if (component.$$.dirty[0] === -1) {
+ dirty_components.push(component);
+ schedule_update();
+ component.$$.dirty.fill(0);
+ }
+ component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31));
+}
+function init(component, options, instance, create_fragment, not_equal, props, append_styles, dirty = [-1]) {
+ const parent_component = current_component;
+ set_current_component(component);
+ const $$ = component.$$ = {
+ fragment: null,
+ ctx: [],
+ // state
+ props,
+ update: noop,
+ not_equal,
+ bound: blank_object(),
+ // lifecycle
+ on_mount: [],
+ on_destroy: [],
+ on_disconnect: [],
+ before_update: [],
+ after_update: [],
+ context: new Map(options.context || (parent_component ? parent_component.$$.context : [])),
+ // everything else
+ callbacks: blank_object(),
+ dirty,
+ skip_bound: false,
+ root: options.target || parent_component.$$.root
+ };
+ append_styles && append_styles($$.root);
+ let ready = false;
+ $$.ctx = instance
+ ? instance(component, options.props || {}, (i, ret, ...rest) => {
+ const value = rest.length ? rest[0] : ret;
+ if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {
+ if (!$$.skip_bound && $$.bound[i])
+ $$.bound[i](value);
+ if (ready)
+ make_dirty(component, i);
+ }
+ return ret;
+ })
+ : [];
+ $$.update();
+ ready = true;
+ run_all($$.before_update);
+ // `false` as a special case of no DOM component
+ $$.fragment = create_fragment ? create_fragment($$.ctx) : false;
+ if (options.target) {
+ if (options.hydrate) {
+ const nodes = children(options.target);
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ $$.fragment && $$.fragment.l(nodes);
+ nodes.forEach(detach);
+ }
+ else {
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ $$.fragment && $$.fragment.c();
+ }
+ if (options.intro)
+ transition_in(component.$$.fragment);
+ mount_component(component, options.target, options.anchor, options.customElement);
+ flush();
+ }
+ set_current_component(parent_component);
+}
+let SvelteElement;
+if (typeof HTMLElement === 'function') {
+ SvelteElement = class extends HTMLElement {
+ constructor() {
+ super();
+ this.attachShadow({ mode: 'open' });
+ }
+ connectedCallback() {
+ const { on_mount } = this.$$;
+ this.$$.on_disconnect = on_mount.map(run).filter(is_function);
+ // @ts-ignore todo: improve typings
+ for (const key in this.$$.slotted) {
+ // @ts-ignore todo: improve typings
+ this.appendChild(this.$$.slotted[key]);
+ }
+ }
+ attributeChangedCallback(attr, _oldValue, newValue) {
+ this[attr] = newValue;
+ }
+ disconnectedCallback() {
+ run_all(this.$$.on_disconnect);
+ }
+ $destroy() {
+ destroy_component(this, 1);
+ this.$destroy = noop;
+ }
+ $on(type, callback) {
+ // TODO should this delegate to addEventListener?
+ if (!is_function(callback)) {
+ return noop;
+ }
+ const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));
+ callbacks.push(callback);
+ return () => {
+ const index = callbacks.indexOf(callback);
+ if (index !== -1)
+ callbacks.splice(index, 1);
+ };
+ }
+ $set($$props) {
+ if (this.$$set && !is_empty($$props)) {
+ this.$$.skip_bound = true;
+ this.$$set($$props);
+ this.$$.skip_bound = false;
+ }
+ }
+ };
+}
+
+function dispatch_dev(type, detail) {
+ document.dispatchEvent(custom_event(type, Object.assign({ version: '3.52.0' }, detail), { bubbles: true }));
+}
+function append_dev(target, node) {
+ dispatch_dev('SvelteDOMInsert', { target, node });
+ append(target, node);
+}
+function insert_dev(target, node, anchor) {
+ dispatch_dev('SvelteDOMInsert', { target, node, anchor });
+ insert(target, node, anchor);
+}
+function detach_dev(node) {
+ dispatch_dev('SvelteDOMRemove', { node });
+ detach(node);
+}
+function listen_dev(node, event, handler, options, has_prevent_default, has_stop_propagation) {
+ const modifiers = options === true ? ['capture'] : options ? Array.from(Object.keys(options)) : [];
+ if (has_prevent_default)
+ modifiers.push('preventDefault');
+ if (has_stop_propagation)
+ modifiers.push('stopPropagation');
+ dispatch_dev('SvelteDOMAddEventListener', { node, event, handler, modifiers });
+ const dispose = listen(node, event, handler, options);
+ return () => {
+ dispatch_dev('SvelteDOMRemoveEventListener', { node, event, handler, modifiers });
+ dispose();
+ };
+}
+function attr_dev(node, attribute, value) {
+ attr(node, attribute, value);
+ if (value == null)
+ dispatch_dev('SvelteDOMRemoveAttribute', { node, attribute });
+ else
+ dispatch_dev('SvelteDOMSetAttribute', { node, attribute, value });
+}
+function prop_dev(node, property, value) {
+ node[property] = value;
+ dispatch_dev('SvelteDOMSetProperty', { node, property, value });
+}
+function set_data_dev(text, data) {
+ data = '' + data;
+ if (text.wholeText === data)
+ return;
+ dispatch_dev('SvelteDOMSetData', { node: text, data });
+ text.data = data;
+}
+function validate_each_argument(arg) {
+ if (typeof arg !== 'string' && !(arg && typeof arg === 'object' && 'length' in arg)) {
+ let msg = '{#each} only iterates over array-like objects.';
+ if (typeof Symbol === 'function' && arg && Symbol.iterator in arg) {
+ msg += ' You can use a spread to convert this iterable into an array.';
+ }
+ throw new Error(msg);
+ }
+}
+function validate_slots(name, slot, keys) {
+ for (const slot_key of Object.keys(slot)) {
+ if (!~keys.indexOf(slot_key)) {
+ console.warn(`<${name}> received an unexpected slot "${slot_key}".`);
+ }
+ }
+}
+
+export { flush as A, binding_callbacks as B, set_style as C, getContext as D, setContext as E, run_all as F, svg_element as G, is_function as H, HtmlTag as I, SvelteElement as S, attribute_to_object as a, insert_dev as b, validate_store as c, dispatch_dev as d, component_subscribe as e, validate_each_argument as f, globals as g, empty as h, init as i, detach_dev as j, element as k, space as l, add_location as m, noop as n, onMount as o, attr_dev as p, src_url_equal as q, set_custom_element_data as r, safe_not_equal as s, text as t, append_dev as u, validate_slots as v, set_data_dev as w, destroy_each as x, listen_dev as y, prop_dev as z };
diff --git a/Server/public/js/components/index-dfcd3ec9.js b/Server/public/js/components/index-dfcd3ec9.js
new file mode 100644
index 0000000..e2b166c
--- /dev/null
+++ b/Server/public/js/components/index-dfcd3ec9.js
@@ -0,0 +1,53 @@
+
+(function(l, r) { if (!l || l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (self.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(self.document);
+import { n as noop, s as safe_not_equal } from './index-d08fd9c0.js';
+
+const subscriber_queue = [];
+/**
+ * Create a `Writable` store that allows both updating and reading by subscription.
+ * @param {*=}value initial value
+ * @param {StartStopNotifier=}start start and stop notifications for subscriptions
+ */
+function writable(value, start = noop) {
+ let stop;
+ const subscribers = new Set();
+ function set(new_value) {
+ if (safe_not_equal(value, new_value)) {
+ value = new_value;
+ if (stop) { // store is ready
+ const run_queue = !subscriber_queue.length;
+ for (const subscriber of subscribers) {
+ subscriber[1]();
+ subscriber_queue.push(subscriber, value);
+ }
+ if (run_queue) {
+ for (let i = 0; i < subscriber_queue.length; i += 2) {
+ subscriber_queue[i][0](subscriber_queue[i + 1]);
+ }
+ subscriber_queue.length = 0;
+ }
+ }
+ }
+ }
+ function update(fn) {
+ set(fn(value));
+ }
+ function subscribe(run, invalidate = noop) {
+ const subscriber = [run, invalidate];
+ subscribers.add(subscriber);
+ if (subscribers.size === 1) {
+ stop = start(set) || noop;
+ }
+ run(value);
+ return () => {
+ subscribers.delete(subscriber);
+ if (subscribers.size === 0) {
+ stop();
+ stop = null;
+ }
+ };
+ }
+ return { set, update, subscribe };
+}
+
+export { writable as w };
diff --git a/Server/public/js/components/join-us-component.js b/Server/public/js/components/join-us-component.js
index 66f7a57..fe73a9f 100644
--- a/Server/public/js/components/join-us-component.js
+++ b/Server/public/js/components/join-us-component.js
@@ -1 +1 @@
-import{S as o,i as t,a as i,b as r,s as n,e,n as a,d as s,c as m,o as l,f as c,t as p,g as u,j as d,h as g,k as h,l as f,m as v}from"./index-ce8c147b.js";import{w as b}from"./index-f2dbf8ff.js";import{addMarkersGroups as j}from"../../../../../../../../../js/groups.js";import{addMarkersCoops as x}from"../../../../../../../../../js/coops.js";import{addMarkersCommunities as y}from"../../../../../../../../../js/communities.js";import{loadLocaleContent as P}from"../../../../../../../../../js/libraries/serverTools.js";import"../../../../../../../../../js/components/map-component.js";function w(o){let t,i,n,e,a,m,l,b,j,x,y,P,w,k,O,A,S,T,D,H,N,L,M,U,z,B,E,G,R,W,Y,_,C,J,K,Z,q,F,I,Q,V,X,$,oo,to,io,ro,no,eo,ao,so,mo,lo,co,po,uo,go,ho,fo,vo,bo,jo,xo,yo,Po,wo,ko,Oo,Ao,So,To,Do,Ho,No,Lo,Mo,Uo,zo,Bo,Eo=o[0].heading+"",Go=o[0].condition1+"",Ro=o[0].condition2+"",Wo=o[0].condition3+"",Yo=o[0].conditionsOutcome+"",_o=o[0].subheading1+"",Co=o[0].valueProposition1+"",Jo=o[0].valueProposition2+"",Ko=o[0].valueProposition3+"",Zo=o[0].valueProposition4+"",qo=o[0].valueProposition5+"",Fo=o[0].subheading2+"",Io=o[0].findOur+"",Qo=o[0].group+"",Vo=o[0].community+"",Xo=o[0].or+"",$o=o[0].cooperative+"",ot=o[0].nearYou+"",tt=o[0].noneNear+"",it=o[0].WhatsAppGroup+"",rt=o[0].or+"",nt=o[0].DiscordServer+"",et=o[0].helpStart+"";return{c(){t=c("div"),i=c("div"),n=c("h1"),e=p(Eo),a=u(),m=c("img"),b=u(),j=c("ol"),x=c("li"),y=p(Go),P=u(),w=c("li"),k=p(Ro),O=u(),A=c("li"),S=p(Wo),T=u(),D=c("p"),H=u(),N=c("h2"),L=p(_o),M=u(),U=c("ol"),z=c("li"),B=p(Co),E=u(),G=c("li"),R=p(Jo),W=u(),Y=c("li"),_=p(Ko),C=u(),J=c("li"),K=p(Zo),Z=u(),q=c("p"),F=p(qo),I=u(),Q=c("h2"),V=p(Fo),X=u(),$=c("div"),oo=c("p"),to=p(Io),io=u(),ro=c("ol"),no=c("li"),eo=c("a"),ao=p(Qo),so=p(","),mo=u(),lo=c("li"),co=c("a"),po=p(Vo),uo=u(),go=p(Xo),ho=u(),fo=c("li"),vo=c("a"),bo=p($o),jo=u(),xo=c("p"),yo=p(ot),Po=u(),wo=c("p"),ko=p(tt),Oo=u(),Ao=c("a"),So=p(it),To=u(),Do=p(rt),Ho=u(),No=c("a"),Lo=p(nt),Mo=p(et),Uo=u(),zo=c("map-component"),d(m.src,l="/img/common/join-group.svg")||g(m,"src","/img/common/join-group.svg"),g(m,"id","join-group"),g(m,"alt","join group"),g(j,"id","condition-list"),g(U,"id","value-proposition-list"),g(eo,"href","/"+o[3]+"/groups"),g(co,"href","/"+o[3]+"/communities"),g(vo,"href","/"+o[3]+"/cooperatives"),g($,"id","call-to-action-list"),g(Ao,"href","https://chat.whatsapp.com/BhnmUNljUxJ2AjeHUwyTKh"),g(Ao,"target","_blank"),g(Ao,"rel","noreferrer"),g(No,"href","https://discord.gg/xAPZmyr8B6"),g(No,"target","_blank"),g(No,"rel","noreferrer"),h(zo,"id","map"),h(zo,"callback",Bo=o[5]),g(i,"id","text-container"),g(t,"id","container")},m(o,s){r(o,t,s),f(t,i),f(i,n),f(n,e),f(i,a),f(i,m),f(i,b),f(i,j),f(j,x),f(x,y),f(j,P),f(j,w),f(w,k),f(j,O),f(j,A),f(A,S),f(j,T),f(j,D),D.innerHTML=Yo,f(i,H),f(i,N),f(N,L),f(i,M),f(i,U),f(U,z),f(z,B),f(U,E),f(U,G),f(G,R),f(U,W),f(U,Y),f(Y,_),f(U,C),f(U,J),f(J,K),f(U,Z),f(U,q),f(q,F),f(i,I),f(i,Q),f(Q,V),f(i,X),f(i,$),f($,oo),f(oo,to),f($,io),f($,ro),f(ro,no),f(no,eo),f(eo,ao),f(no,so),f(ro,mo),f(ro,lo),f(lo,co),f(co,po),f(lo,uo),f(lo,go),f(ro,ho),f(ro,fo),f(fo,vo),f(vo,bo),f($,jo),f($,xo),f(xo,yo),f(i,Po),f(i,wo),f(wo,ko),f(wo,Oo),f(wo,Ao),f(Ao,So),f(wo,To),f(wo,Do),f(wo,Ho),f(wo,No),f(No,Lo),f(wo,Mo),f(i,Uo),f(i,zo)},p(o,t){1&t&&Eo!==(Eo=o[0].heading+"")&&v(e,Eo),1&t&&Go!==(Go=o[0].condition1+"")&&v(y,Go),1&t&&Ro!==(Ro=o[0].condition2+"")&&v(k,Ro),1&t&&Wo!==(Wo=o[0].condition3+"")&&v(S,Wo),1&t&&Yo!==(Yo=o[0].conditionsOutcome+"")&&(D.innerHTML=Yo),1&t&&_o!==(_o=o[0].subheading1+"")&&v(L,_o),1&t&&Co!==(Co=o[0].valueProposition1+"")&&v(B,Co),1&t&&Jo!==(Jo=o[0].valueProposition2+"")&&v(R,Jo),1&t&&Ko!==(Ko=o[0].valueProposition3+"")&&v(_,Ko),1&t&&Zo!==(Zo=o[0].valueProposition4+"")&&v(K,Zo),1&t&&qo!==(qo=o[0].valueProposition5+"")&&v(F,qo),1&t&&Fo!==(Fo=o[0].subheading2+"")&&v(V,Fo),1&t&&Io!==(Io=o[0].findOur+"")&&v(to,Io),1&t&&Qo!==(Qo=o[0].group+"")&&v(ao,Qo),1&t&&Vo!==(Vo=o[0].community+"")&&v(po,Vo),1&t&&Xo!==(Xo=o[0].or+"")&&v(go,Xo),1&t&&$o!==($o=o[0].cooperative+"")&&v(bo,$o),1&t&&ot!==(ot=o[0].nearYou+"")&&v(yo,ot),1&t&&tt!==(tt=o[0].noneNear+"")&&v(ko,tt),1&t&&it!==(it=o[0].WhatsAppGroup+"")&&v(So,it),1&t&&rt!==(rt=o[0].or+"")&&v(Do,rt),1&t&&nt!==(nt=o[0].DiscordServer+"")&&v(Lo,nt),1&t&&et!==(et=o[0].helpStart+"")&&v(Mo,et),1&t&&Bo!==(Bo=o[5])&&h(zo,"callback",Bo)},d(o){o&&s(t)}}}function k(o){let t,i=0!=Object.keys(o[0]).length,n=i&&w(o);return{c(){n&&n.c(),t=e(),this.c=a},m(o,i){n&&n.m(o,i),r(o,t,i)},p(o,[r]){1&r&&(i=0!=Object.keys(o[0]).length),i?n?n.p(o,r):(n=w(o),n.c(),n.m(t.parentNode,t)):n&&(n.d(1),n=null)},i:a,o:a,d(o){n&&n.d(o),o&&s(t)}}}function O(o,t,i){let r,n,e=b({});m(o,e,(o=>i(0,r=o)));let a=P(e,"join-us-component",n);function s(o,t,i){let r=o([51.505,-.09],3);j(r,t,i),x(r,t,i),y(r,t,i)}l((()=>{}));return[r,n,e,a,s,o=>s(o,r,a)]}class A extends o{constructor(o){super(),this.shadowRoot.innerHTML="",t(this,{target:this.shadowRoot,props:i(this.attributes),customElement:!0},O,k,n,{},null),o&&o.target&&r(o.target,this,o.anchor)}}customElements.define("join-us-component",A);export{A as default};
+import{S as o,i as t,a as i,b as r,s as n,e,n as a,d as s,c as m,o as l,f as c,t as p,g as u,j as d,h as g,k as h,l as f,m as v}from"./index-4348483d.js";import{w as b}from"./index-71440b21.js";import{addMarkersGroups as j}from"../../../../../../../../../js/groups.js";import{addMarkersCoops as x}from"../../../../../../../../../js/coops.js";import{addMarkersCommunities as y}from"../../../../../../../../../js/communities.js";import{loadLocaleContent as P}from"../../../../../../../../../js/libraries/serverTools.js";import"../../../../../../../../../js/components/map-component.js";function w(o){let t,i,n,e,a,m,l,b,j,x,y,P,w,k,O,A,S,T,D,H,N,L,M,U,z,B,E,G,R,W,Y,_,C,J,K,Z,q,F,I,Q,V,X,$,oo,to,io,ro,no,eo,ao,so,mo,lo,co,po,uo,go,ho,fo,vo,bo,jo,xo,yo,Po,wo,ko,Oo,Ao,So,To,Do,Ho,No,Lo,Mo,Uo,zo,Bo,Eo=o[0].heading+"",Go=o[0].condition1+"",Ro=o[0].condition2+"",Wo=o[0].condition3+"",Yo=o[0].conditionsOutcome+"",_o=o[0].subheading1+"",Co=o[0].valueProposition1+"",Jo=o[0].valueProposition2+"",Ko=o[0].valueProposition3+"",Zo=o[0].valueProposition4+"",qo=o[0].valueProposition5+"",Fo=o[0].subheading2+"",Io=o[0].findOur+"",Qo=o[0].group+"",Vo=o[0].community+"",Xo=o[0].or+"",$o=o[0].cooperative+"",ot=o[0].nearYou+"",tt=o[0].noneNear+"",it=o[0].WhatsAppGroup+"",rt=o[0].or+"",nt=o[0].DiscordServer+"",et=o[0].helpStart+"";return{c(){t=c("div"),i=c("div"),n=c("h1"),e=p(Eo),a=u(),m=c("img"),b=u(),j=c("ol"),x=c("li"),y=p(Go),P=u(),w=c("li"),k=p(Ro),O=u(),A=c("li"),S=p(Wo),T=u(),D=c("p"),H=u(),N=c("h2"),L=p(_o),M=u(),U=c("ol"),z=c("li"),B=p(Co),E=u(),G=c("li"),R=p(Jo),W=u(),Y=c("li"),_=p(Ko),C=u(),J=c("li"),K=p(Zo),Z=u(),q=c("p"),F=p(qo),I=u(),Q=c("h2"),V=p(Fo),X=u(),$=c("div"),oo=c("p"),to=p(Io),io=u(),ro=c("ol"),no=c("li"),eo=c("a"),ao=p(Qo),so=p(","),mo=u(),lo=c("li"),co=c("a"),po=p(Vo),uo=u(),go=p(Xo),ho=u(),fo=c("li"),vo=c("a"),bo=p($o),jo=u(),xo=c("p"),yo=p(ot),Po=u(),wo=c("p"),ko=p(tt),Oo=u(),Ao=c("a"),So=p(it),To=u(),Do=p(rt),Ho=u(),No=c("a"),Lo=p(nt),Mo=p(et),Uo=u(),zo=c("map-component"),d(m.src,l="/img/common/join-group.svg")||g(m,"src","/img/common/join-group.svg"),g(m,"id","join-group"),g(m,"alt","join group"),g(j,"id","condition-list"),g(U,"id","value-proposition-list"),g(eo,"href","/"+o[3]+"/groups"),g(co,"href","/"+o[3]+"/communities"),g(vo,"href","/"+o[3]+"/cooperatives"),g($,"id","call-to-action-list"),g(Ao,"href","https://chat.whatsapp.com/BhnmUNljUxJ2AjeHUwyTKh"),g(Ao,"target","_blank"),g(Ao,"rel","noreferrer"),g(No,"href","https://discord.gg/xAPZmyr8B6"),g(No,"target","_blank"),g(No,"rel","noreferrer"),h(zo,"id","map"),h(zo,"callback",Bo=o[5]),g(i,"id","text-container"),g(t,"id","container")},m(o,s){r(o,t,s),f(t,i),f(i,n),f(n,e),f(i,a),f(i,m),f(i,b),f(i,j),f(j,x),f(x,y),f(j,P),f(j,w),f(w,k),f(j,O),f(j,A),f(A,S),f(j,T),f(j,D),D.innerHTML=Yo,f(i,H),f(i,N),f(N,L),f(i,M),f(i,U),f(U,z),f(z,B),f(U,E),f(U,G),f(G,R),f(U,W),f(U,Y),f(Y,_),f(U,C),f(U,J),f(J,K),f(U,Z),f(U,q),f(q,F),f(i,I),f(i,Q),f(Q,V),f(i,X),f(i,$),f($,oo),f(oo,to),f($,io),f($,ro),f(ro,no),f(no,eo),f(eo,ao),f(no,so),f(ro,mo),f(ro,lo),f(lo,co),f(co,po),f(lo,uo),f(lo,go),f(ro,ho),f(ro,fo),f(fo,vo),f(vo,bo),f($,jo),f($,xo),f(xo,yo),f(i,Po),f(i,wo),f(wo,ko),f(wo,Oo),f(wo,Ao),f(Ao,So),f(wo,To),f(wo,Do),f(wo,Ho),f(wo,No),f(No,Lo),f(wo,Mo),f(i,Uo),f(i,zo)},p(o,t){1&t&&Eo!==(Eo=o[0].heading+"")&&v(e,Eo),1&t&&Go!==(Go=o[0].condition1+"")&&v(y,Go),1&t&&Ro!==(Ro=o[0].condition2+"")&&v(k,Ro),1&t&&Wo!==(Wo=o[0].condition3+"")&&v(S,Wo),1&t&&Yo!==(Yo=o[0].conditionsOutcome+"")&&(D.innerHTML=Yo),1&t&&_o!==(_o=o[0].subheading1+"")&&v(L,_o),1&t&&Co!==(Co=o[0].valueProposition1+"")&&v(B,Co),1&t&&Jo!==(Jo=o[0].valueProposition2+"")&&v(R,Jo),1&t&&Ko!==(Ko=o[0].valueProposition3+"")&&v(_,Ko),1&t&&Zo!==(Zo=o[0].valueProposition4+"")&&v(K,Zo),1&t&&qo!==(qo=o[0].valueProposition5+"")&&v(F,qo),1&t&&Fo!==(Fo=o[0].subheading2+"")&&v(V,Fo),1&t&&Io!==(Io=o[0].findOur+"")&&v(to,Io),1&t&&Qo!==(Qo=o[0].group+"")&&v(ao,Qo),1&t&&Vo!==(Vo=o[0].community+"")&&v(po,Vo),1&t&&Xo!==(Xo=o[0].or+"")&&v(go,Xo),1&t&&$o!==($o=o[0].cooperative+"")&&v(bo,$o),1&t&&ot!==(ot=o[0].nearYou+"")&&v(yo,ot),1&t&&tt!==(tt=o[0].noneNear+"")&&v(ko,tt),1&t&&it!==(it=o[0].WhatsAppGroup+"")&&v(So,it),1&t&&rt!==(rt=o[0].or+"")&&v(Do,rt),1&t&&nt!==(nt=o[0].DiscordServer+"")&&v(Lo,nt),1&t&&et!==(et=o[0].helpStart+"")&&v(Mo,et),1&t&&Bo!==(Bo=o[5])&&h(zo,"callback",Bo)},d(o){o&&s(t)}}}function k(o){let t,i=0!=Object.keys(o[0]).length,n=i&&w(o);return{c(){n&&n.c(),t=e(),this.c=a},m(o,i){n&&n.m(o,i),r(o,t,i)},p(o,[r]){1&r&&(i=0!=Object.keys(o[0]).length),i?n?n.p(o,r):(n=w(o),n.c(),n.m(t.parentNode,t)):n&&(n.d(1),n=null)},i:a,o:a,d(o){n&&n.d(o),o&&s(t)}}}function O(o,t,i){let r,n,e=b({});m(o,e,(o=>i(0,r=o)));let a=P(e,"join-us-component",n);function s(o,t,i){let r=o([51.505,-.09],3);j(r,t,i),x(r,t,i),y(r,t,i)}l((()=>{}));return[r,n,e,a,s,o=>s(o,r,a)]}class A extends o{constructor(o){super(),this.shadowRoot.innerHTML="",t(this,{target:this.shadowRoot,props:i(this.attributes),customElement:!0},O,k,n,{},null),o&&o.target&&r(o.target,this,o.anchor)}}customElements.define("join-us-component",A);export{A as default};
diff --git a/Server/public/js/components/landing-component.js b/Server/public/js/components/landing-component.js
index c5f6d84..9f0028d 100644
--- a/Server/public/js/components/landing-component.js
+++ b/Server/public/js/components/landing-component.js
@@ -1 +1 @@
-import{S as i,i as t,a as o,b as e,s as r,e as s,n,d as m,c as a,o as c,f as g,g as d,t as p,h as l,j as u,r as h,l as f,m as v,v as x}from"./index-ce8c147b.js";import{loadLocaleContent as w}from"../../../../../../../../../js/libraries/serverTools.js";import{w as T}from"./index-f2dbf8ff.js";function b(i){let t,o,r,s,n,a,c,x,w,T,b,y,j,k,z,E,H,L,M,O,R,N,S,q,A,B,C,D,F,G,I,J,K,P,Q,U,V,W=i[2].top+"",X=i[2].groupsTitle+"",Y=i[2].groupsText+"",Z=i[2].communitiesTitle+"",$=i[2].communitiesText+"",_=i[2].cooperativesTitle+"",ii=i[2].cooperativesText+"";return{c(){t=g("div"),o=g("picture"),o.innerHTML=' \n \n ',r=d(),s=g("div"),n=g("p"),a=p(W),c=d(),x=g("div"),w=g("div"),T=g("h2"),b=p(X),y=d(),j=g("img"),z=d(),E=g("p"),H=p(Y),L=d(),M=g("div"),O=g("h2"),R=p(Z),N=d(),S=g("img"),A=d(),B=g("p"),C=p($),D=d(),F=g("div"),G=g("h2"),I=p(_),J=d(),K=g("img"),Q=d(),U=g("p"),V=p(ii),l(j,"id","groups-img"),u(j.src,k="/img/common/groups.svg")||l(j,"src","/img/common/groups.svg"),l(j,"alt","groups"),l(S,"id","communities-img"),u(S.src,q="/img/common/communities.svg")||l(S,"src","/img/common/communities.svg"),l(S,"alt","communities"),l(K,"id","coops-img"),u(K.src,P="/img/common/coops.svg")||l(K,"src","/img/common/coops.svg"),l(K,"alt","coops"),l(x,"id","container-grid"),h(x,"--grid-width",i[1]),l(s,"id","text-container"),l(t,"id","container")},m(m,g){e(m,t,g),f(t,o),f(t,r),f(t,s),f(s,n),f(n,a),f(s,c),f(s,x),f(x,w),f(w,T),f(T,b),f(w,y),f(w,j),f(w,z),f(w,E),f(E,H),f(x,L),f(x,M),f(M,O),f(O,R),f(M,N),f(M,S),f(M,A),f(M,B),f(B,C),f(x,D),f(x,F),f(F,G),f(G,I),f(F,J),f(F,K),f(F,Q),f(F,U),f(U,V),i[5](x)},p(i,t){4&t&&W!==(W=i[2].top+"")&&v(a,W),4&t&&X!==(X=i[2].groupsTitle+"")&&v(b,X),4&t&&Y!==(Y=i[2].groupsText+"")&&v(H,Y),4&t&&Z!==(Z=i[2].communitiesTitle+"")&&v(R,Z),4&t&&$!==($=i[2].communitiesText+"")&&v(C,$),4&t&&_!==(_=i[2].cooperativesTitle+"")&&v(I,_),4&t&&ii!==(ii=i[2].cooperativesText+"")&&v(V,ii),2&t&&h(x,"--grid-width",i[1])},d(o){o&&m(t),i[5](null)}}}function y(i){let t,o=0!=Object.keys(i[2]).length,r=o&&b(i);return{c(){r&&r.c(),t=s(),this.c=n},m(i,o){r&&r.m(i,o),e(i,t,o)},p(i,[e]){4&e&&(o=0!=Object.keys(i[2]).length),o?r?r.p(i,e):(r=b(i),r.c(),r.m(t.parentNode,t)):r&&(r.d(1),r=null)},i:n,o:n,d(i){r&&r.d(i),i&&m(t)}}}function j(i,t,o){let e,r,s,n,m=T({});function g(i){o(1,s="ru"==i?"1.2fr 1.05fr 1fr":"1.2fr 1.1fr 1fr")}return a(i,m,(i=>o(2,e=i))),g(w(m,"landing-component",n,g)),c((()=>{})),[r,s,e,n,m,function(i){x[i?"unshift":"push"]((()=>{r=i,o(0,r)}))}]}class k extends i{constructor(i){super(),this.shadowRoot.innerHTML="",t(this,{target:this.shadowRoot,props:o(this.attributes),customElement:!0},j,y,r,{},null),i&&i.target&&e(i.target,this,i.anchor)}}customElements.define("landing-component",k);export{k as default};
+import{S as i,i as t,a as o,b as e,s as r,e as s,n,d as m,c as a,o as c,f as g,g as d,t as p,h as l,j as u,v as h,l as v,m as f,w as x}from"./index-4348483d.js";import{loadLocaleContent as w}from"../../../../../../../../../js/libraries/serverTools.js";import{w as T}from"./index-71440b21.js";function b(i){let t,o,r,s,n,a,c,x,w,T,b,y,j,k,z,E,H,L,M,O,R,N,S,q,A,B,C,D,F,G,I,J,K,P,Q,U,V,W=i[2].top+"",X=i[2].groupsTitle+"",Y=i[2].groupsText+"",Z=i[2].communitiesTitle+"",$=i[2].communitiesText+"",_=i[2].cooperativesTitle+"",ii=i[2].cooperativesText+"";return{c(){t=g("div"),o=g("picture"),o.innerHTML=' \n \n ',r=d(),s=g("div"),n=g("p"),a=p(W),c=d(),x=g("div"),w=g("div"),T=g("h2"),b=p(X),y=d(),j=g("img"),z=d(),E=g("p"),H=p(Y),L=d(),M=g("div"),O=g("h2"),R=p(Z),N=d(),S=g("img"),A=d(),B=g("p"),C=p($),D=d(),F=g("div"),G=g("h2"),I=p(_),J=d(),K=g("img"),Q=d(),U=g("p"),V=p(ii),l(j,"id","groups-img"),u(j.src,k="/img/common/groups.svg")||l(j,"src","/img/common/groups.svg"),l(j,"alt","groups"),l(S,"id","communities-img"),u(S.src,q="/img/common/communities.svg")||l(S,"src","/img/common/communities.svg"),l(S,"alt","communities"),l(K,"id","coops-img"),u(K.src,P="/img/common/coops.svg")||l(K,"src","/img/common/coops.svg"),l(K,"alt","coops"),l(x,"id","container-grid"),h(x,"--grid-width",i[1]),l(s,"id","text-container"),l(t,"id","container")},m(m,g){e(m,t,g),v(t,o),v(t,r),v(t,s),v(s,n),v(n,a),v(s,c),v(s,x),v(x,w),v(w,T),v(T,b),v(w,y),v(w,j),v(w,z),v(w,E),v(E,H),v(x,L),v(x,M),v(M,O),v(O,R),v(M,N),v(M,S),v(M,A),v(M,B),v(B,C),v(x,D),v(x,F),v(F,G),v(G,I),v(F,J),v(F,K),v(F,Q),v(F,U),v(U,V),i[5](x)},p(i,t){4&t&&W!==(W=i[2].top+"")&&f(a,W),4&t&&X!==(X=i[2].groupsTitle+"")&&f(b,X),4&t&&Y!==(Y=i[2].groupsText+"")&&f(H,Y),4&t&&Z!==(Z=i[2].communitiesTitle+"")&&f(R,Z),4&t&&$!==($=i[2].communitiesText+"")&&f(C,$),4&t&&_!==(_=i[2].cooperativesTitle+"")&&f(I,_),4&t&&ii!==(ii=i[2].cooperativesText+"")&&f(V,ii),2&t&&h(x,"--grid-width",i[1])},d(o){o&&m(t),i[5](null)}}}function y(i){let t,o=0!=Object.keys(i[2]).length,r=o&&b(i);return{c(){r&&r.c(),t=s(),this.c=n},m(i,o){r&&r.m(i,o),e(i,t,o)},p(i,[e]){4&e&&(o=0!=Object.keys(i[2]).length),o?r?r.p(i,e):(r=b(i),r.c(),r.m(t.parentNode,t)):r&&(r.d(1),r=null)},i:n,o:n,d(i){r&&r.d(i),i&&m(t)}}}function j(i,t,o){let e,r,s,n,m=T({});function g(i){o(1,s="ru"==i?"1.2fr 1.05fr 1fr":"1.2fr 1.1fr 1fr")}return a(i,m,(i=>o(2,e=i))),g(w(m,"landing-component",n,g)),c((()=>{})),[r,s,e,n,m,function(i){x[i?"unshift":"push"]((()=>{r=i,o(0,r)}))}]}class k extends i{constructor(i){super(),this.shadowRoot.innerHTML="",t(this,{target:this.shadowRoot,props:o(this.attributes),customElement:!0},j,y,r,{},null),i&&i.target&&e(i.target,this,i.anchor)}}customElements.define("landing-component",k);export{k as default};
diff --git a/Server/public/js/components/legend-component.js b/Server/public/js/components/legend-component.js
index 11a133a..6a643c7 100644
--- a/Server/public/js/components/legend-component.js
+++ b/Server/public/js/components/legend-component.js
@@ -1 +1 @@
-import{S as t,i as e,a as s,b as o,q as n,s as r,f as i,n as a,h as l,d as c,p,o as u,g as h,t as d,r as m,l as f,u as g,m as y,v as $}from"./index-ce8c147b.js";import{pullLegendData as b}from"../../../../../../../../../js/predict/charts.js";function w(t,e,s){const o=t.slice();return o[10]=e[s],o[11]=e,o[12]=s,o}function x(t){let e,s,n,r,a,p,u,$,b=t[10].name+"",w=t[12];const x=()=>t[6](e,w),k=()=>t[6](null,w);function v(){return t[7](t[12])}return{c(){e=i("button"),s=i("div"),n=h(),r=i("span"),a=d(b),p=h(),l(s,"class","marker"),m(s,"background-color",t[10].color)},m(t,i){o(t,e,i),f(e,s),f(e,n),f(e,r),f(r,a),f(e,p),x(),u||($=g(e,"click",v),u=!0)},p(e,o){t=e,1&o&&m(s,"background-color",t[10].color),1&o&&b!==(b=t[10].name+"")&&y(a,b),w!==t[12]&&(k(),w=t[12],x())},d(t){t&&c(e),k(),u=!1,$()}}}function k(t){let e,s=t[0],n=[];for(let e=0;et._id)),c=a[t];for(let t=0;t{c()}));return t.$$set=t=>{"option"in t&&s(4,n=t.option),"chart"in t&&s(5,r=t.chart),"data"in t&&s(3,i=t.data)},[a,l,p,i,n,r,function(t,e){$[t?"unshift":"push"]((()=>{l[e]=t,s(1,l)}))},t=>p(t)]}class j extends t{constructor(t){super(),this.shadowRoot.innerHTML="",e(this,{target:this.shadowRoot,props:s(this.attributes),customElement:!0},v,k,r,{option:4,chart:5,data:3},null),t&&(t.target&&o(t.target,this,t.anchor),t.props&&(this.$set(t.props),n()))}static get observedAttributes(){return["option","chart","data"]}get option(){return this.$$.ctx[4]}set option(t){this.$$set({option:t}),n()}get chart(){return this.$$.ctx[5]}set chart(t){this.$$set({chart:t}),n()}get data(){return this.$$.ctx[3]}set data(t){this.$$set({data:t}),n()}}customElements.define("legend-component",j);export{j as default};
+import{S as t,i as e,a as s,b as o,u as n,s as r,f as i,n as a,h as l,d as c,p,o as u,g as h,t as d,v as m,l as f,q as g,m as y,w as $}from"./index-4348483d.js";import{pullLegendData as b}from"../../../../../../../../../js/predict/charts.js";function w(t,e,s){const o=t.slice();return o[10]=e[s],o[11]=e,o[12]=s,o}function x(t){let e,s,n,r,a,p,u,$,b=t[10].name+"",w=t[12];const x=()=>t[6](e,w),k=()=>t[6](null,w);function v(){return t[7](t[12])}return{c(){e=i("button"),s=i("div"),n=h(),r=i("span"),a=d(b),p=h(),l(s,"class","marker"),m(s,"background-color",t[10].color)},m(t,i){o(t,e,i),f(e,s),f(e,n),f(e,r),f(r,a),f(e,p),x(),u||($=g(e,"click",v),u=!0)},p(e,o){t=e,1&o&&m(s,"background-color",t[10].color),1&o&&b!==(b=t[10].name+"")&&y(a,b),w!==t[12]&&(k(),w=t[12],x())},d(t){t&&c(e),k(),u=!1,$()}}}function k(t){let e,s=t[0],n=[];for(let e=0;et._id)),c=a[t];for(let t=0;t{c()}));return t.$$set=t=>{"option"in t&&s(4,n=t.option),"chart"in t&&s(5,r=t.chart),"data"in t&&s(3,i=t.data)},[a,l,p,i,n,r,function(t,e){$[t?"unshift":"push"]((()=>{l[e]=t,s(1,l)}))},t=>p(t)]}class j extends t{constructor(t){super(),this.shadowRoot.innerHTML="",e(this,{target:this.shadowRoot,props:s(this.attributes),customElement:!0},v,k,r,{option:4,chart:5,data:3},null),t&&(t.target&&o(t.target,this,t.anchor),t.props&&(this.$set(t.props),n()))}static get observedAttributes(){return["option","chart","data"]}get option(){return this.$$.ctx[4]}set option(t){this.$$set({option:t}),n()}get chart(){return this.$$.ctx[5]}set chart(t){this.$$set({chart:t}),n()}get data(){return this.$$.ctx[3]}set data(t){this.$$set({data:t}),n()}}customElements.define("legend-component",j);export{j as default};
diff --git a/Server/public/js/components/loadscreen-component.js b/Server/public/js/components/loadscreen-component.js
index bde0ec0..4feb1ba 100644
--- a/Server/public/js/components/loadscreen-component.js
+++ b/Server/public/js/components/loadscreen-component.js
@@ -1 +1 @@
-import{S as t,i as s,a as e,b as n,s as o,f as a,n as i,h as r,r as d,d as c,o as u,v as l}from"./index-ce8c147b.js";function h(t){let s;return{c(){s=a("div"),this.c=i,r(s,"id","loadscreen"),d(s,"width","100%"),d(s,"height","100%"),d(s,"background","white"),d(s,"position","absolute"),d(s,"z-index","100000")},m(e,o){n(e,s,o),t[1](s)},p:i,i:i,o:i,d(e){e&&c(s),t[1](null)}}}function p(t,s,e){let n;return u((()=>{window.addEventListener("load",(function(){e(0,n.parentNode.host.style.display="none",n)}))})),[n,function(t){l[t?"unshift":"push"]((()=>{n=t,e(0,n)}))}]}class f extends t{constructor(t){super(),s(this,{target:this.shadowRoot,props:e(this.attributes),customElement:!0},p,h,o,{},null),t&&t.target&&n(t.target,this,t.anchor)}}customElements.define("loadscreen-component",f);export{f as default};
+import{S as t,i as s,a as e,b as n,s as o,f as a,n as i,h as d,v as r,d as u,o as c,w as l}from"./index-4348483d.js";function h(t){let s;return{c(){s=a("div"),this.c=i,d(s,"id","loadscreen"),r(s,"width","100%"),r(s,"height","100%"),r(s,"background","white"),r(s,"position","absolute"),r(s,"z-index","100000")},m(e,o){n(e,s,o),t[1](s)},p:i,i:i,o:i,d(e){e&&u(s),t[1](null)}}}function p(t,s,e){let n;return c((()=>{window.addEventListener("load",(function(){e(0,n.parentNode.host.style.display="none",n)}))})),[n,function(t){l[t?"unshift":"push"]((()=>{n=t,e(0,n)}))}]}class f extends t{constructor(t){super(),s(this,{target:this.shadowRoot,props:e(this.attributes),customElement:!0},p,h,o,{},null),t&&t.target&&n(t.target,this,t.anchor)}}customElements.define("loadscreen-component",f);export{f as default};
diff --git a/Server/public/js/components/manifesto-component.js b/Server/public/js/components/manifesto-component.js
index 22d7a9f..0e99468 100644
--- a/Server/public/js/components/manifesto-component.js
+++ b/Server/public/js/components/manifesto-component.js
@@ -1 +1 @@
-import{S as t,i as e,a as n,b as i,s as l,e as o,n as r,d as s,c,o as a,f as d,h as m,l as u,t as f,g as h,j as g,r as p,u as b,m as w,p as x,v as y,y as v,H as k}from"./index-ce8c147b.js";import{w as j}from"./index-f2dbf8ff.js";import{loadLocaleContent as H,getData as I}from"../../../../../../../../../js/libraries/serverTools.js";import{px2rem as L}from"../../../../../../../../../js/libraries/miscTools.js";function T(t,e,n){const i=t.slice();return i[32]=e[n],i[33]=e,i[34]=n,i}function Y(t,e,n){const i=t.slice();return i[35]=e[n],i}function C(t,e,n){const i=t.slice();return i[35]=e[n],i}function M(t,e,n){const i=t.slice();return i[40]=e[n],i[41]=e,i[42]=n,i}function O(t,e,n){const i=t.slice();return i[43]=e[n],i[44]=e,i[45]=n,i}function z(t){let e,n,o=t[0],r=K(t);return{c(){e=d("div"),n=d("div"),r.c(),m(n,"id","text-container"),m(e,"id","container")},m(l,o){i(l,e,o),u(e,n),r.m(n,null),t[27](e)},p(t,e){1&e[0]&&l(o,o=t[0])?(r.d(1),r=K(t),r.c(),r.m(n,null)):r.p(t,e)},d(n){n&&s(e),r.d(n),t[27](null)}}}function A(t){let e,n,l,o,r,c,a=t[40].name+"",g=t[40];const p=()=>t[20](n,g),w=()=>t[20](null,g);function x(){return t[21](t[40])}return{c(){e=d("div"),n=d("button"),l=f(a),o=h(),m(n,"class","level0 heading-button"),m(e,"class","heading-button-wrapper")},m(t,s){i(t,e,s),u(e,n),u(n,l),p(),u(e,o),r||(c=b(n,"click",x),r=!0)},p(e,n){g!==(t=e)[40]&&(w(),g=t[40],p())},d(t){t&&s(e),w(),r=!1,c()}}}function V(t){let e,n=t[40],l=[];for(let e=0;et[18](n,g),w=()=>t[18](null,g);function x(){return t[19](t[43])}return{c(){e=d("div"),n=d("button"),l=f(a),o=h(),m(n,"class","level1 heading-button"),m(e,"class","heading-button-wrapper")},m(t,s){i(t,e,s),u(e,n),u(n,l),p(),u(e,o),r||(c=b(n,"click",x),r=!0)},p(e,n){g!==(t=e)[43]&&(w(),g=t[43],p())},d(t){t&&s(e),w(),r=!1,c()}}}function S(t){let e;let n=function(t,e){return Array.isArray(t[40])?V:A}(t),l=n(t);return{c(){l.c(),e=o()},m(t,n){l.m(t,n),i(t,e,n)},p(t,e){l.p(t,e)},d(t){l.d(t),t&&s(e)}}}function E(t){let e;let n=function(t,e){return t[32],"ul"==Object.keys(t[32])[0]?D:(t[32],"ol"==Object.keys(t[32])[0]?q:(t[32],"h3"==t[32].type?W:(t[32],"h2"==t[32].type?_:"#"==t[32][0]?N:B)))}(t),l=n(t);return{c(){l.c(),e=o()},m(t,n){l.m(t,n),i(t,e,n)},p(t,e){l.p(t,e)},d(t){l.d(t),t&&s(e)}}}function B(t){let e,n,l,o=t[32]+"";return{c(){e=d("p"),n=new k(!1),l=h(),n.a=l,m(e,"class","margin-end")},m(t,r){i(t,e,r),n.m(o,e),u(e,l)},p:r,d(t){t&&s(e)}}}function N(t){let e,n=t[32].slice(2,t[32].length)+"";return{c(){e=d("h1")},m(t,l){i(t,e,l),e.innerHTML=n},p:r,d(t){t&&s(e)}}}function _(t){let e,n,l,o,r,c=t[32].line+"",a=t[32];const f=()=>t[25](n,a),g=()=>t[25](null,a);return{c(){e=d("button"),n=d("h2"),l=h(),m(n,"id",t[32].id),p(e,"display","block"),p(e,"width","100%")},m(s,a){i(s,e,a),u(e,n),n.innerHTML=c,f(),u(e,l),o||(r=b(e,"click",(function(){v(t[6].scrollIntoView({block:"start"},!0))&&t[6].scrollIntoView({block:"start"},!0).apply(this,arguments)})),o=!0)},p(e,n){a!==(t=e)[32]&&(g(),a=t[32],f())},d(t){t&&s(e),g(),o=!1,r()}}}function W(t){let e,n,l,o,r,c=t[32].line+"",a=t[32];const f=()=>t[24](n,a),g=()=>t[24](null,a);return{c(){e=d("button"),n=d("h3"),l=h(),m(n,"id",t[32].id),p(e,"display","block"),p(e,"width","100%")},m(s,a){i(s,e,a),u(e,n),n.innerHTML=c,f(),u(e,l),o||(r=b(e,"click",(function(){v(t[6].scrollIntoView({block:"start"},!0))&&t[6].scrollIntoView({block:"start"},!0).apply(this,arguments)})),o=!0)},p(e,n){a!==(t=e)[32]&&(g(),a=t[32],f())},d(t){t&&s(e),g(),o=!1,r()}}}function q(t){let e,n,l=t[32].ol,o=[];for(let e=0;en(9,i=t)));let k=H(v,"manifesto-component",f);const T=["ul","ol"];function Y(t){p[t].scrollIntoView({block:"start"},!0)}I("/locales/"+k+"/manifesto.txt",(function(t){let e,i=t.split(/\r?\n/),o=0;for(let t=0;tn.includes("<"+t+">"))).findIndex((t=>t));if(-1!=l){let e=T[l],o={};o[e]=[];let r=""+e+">";for(;;){if(t+=1,n=i[t],n.includes(r)){h.push(o);break}o[e].push(n)}}else if("###"==n.slice(0,3)){let t=n.slice(4,n.length),i=t.toLowerCase().trim().replaceAll(" ","-");e.push({id:i,name:t,index:o}),o+=1,h.push({type:"h3",id:i,line:t,index:o})}else if("##"==n.slice(0,2)){let t=n.slice(3,n.length),i=t.toLowerCase().trim().replaceAll(" ","-");b.push({id:t.toLowerCase().trim().replaceAll(" ","-"),name:t,index:o}),o+=1,e=[],b.push(e),h.push({type:"h2",id:i,line:t,index:o})}else h.push(n)}n(0,l+=1)})),addEventListener("scroll",(t=>{if(window.innerWidth>1080){let t=L(window.scrollY),e=L(m.getBoundingClientRect().bottom+window.scrollY),i=L(d.getBoundingClientRect().bottom+window.scrollY);if(t>w&&t<5||t=e-1.5)x-=i-(e-1.5);else if(x>-5&&(x=-5),t<5&&0!=t){let t=L(d.offsetHeight-window.innerHeight);x=-Math.min(L(window.scrollY),5+t+2.5)}else if(twindow.innerHeight){let e=L(d.offsetHeight)-L(window.innerHeight);x>-(e+8)?x+=w-t:x=-(e+8)}n(6,d.style.marginTop=x+"rem",d),w=L(window.scrollY)}else n(6,d.style.marginTop="0rem",d)})),a((()=>{let t=localStorage.getItem("manifesto-hide-content");null!=t&&null!=t&&"true"==t&&Q(r,s)}));return[l,o,r,s,g,p,d,m,u,i,h,b,f,v,Y,function(t){y[t?"unshift":"push"]((()=>{r=t,n(2,r)}))},function(t){y[t?"unshift":"push"]((()=>{o=t,n(1,o)}))},()=>Q(r,s),function(t,e){y[t?"unshift":"push"]((()=>{g[e.index]=t,n(4,g)}))},t=>Y(t.id),function(t,e){y[t?"unshift":"push"]((()=>{g[e.index]=t,n(4,g)}))},t=>Y(t.id),function(t){y[t?"unshift":"push"]((()=>{s=t,n(3,s)}))},function(t){y[t?"unshift":"push"]((()=>{d=t,n(6,d)}))},function(t,e){y[t?"unshift":"push"]((()=>{p[e.id]=t,n(5,p)}))},function(t,e){y[t?"unshift":"push"]((()=>{p[e.id]=t,n(5,p)}))},function(t){y[t?"unshift":"push"]((()=>{u=t,n(8,u)}))},function(t){y[t?"unshift":"push"]((()=>{m=t,n(7,m)}))}]}class X extends t{constructor(t){super(),this.shadowRoot.innerHTML="",e(this,{target:this.shadowRoot,props:n(this.attributes),customElement:!0},U,P,l,{},null,[-1,-1]),t&&t.target&&i(t.target,this,t.anchor)}}customElements.define("manifesto-component",X);export{X as default};
+import{S as t,i as e,a as n,b as i,s as l,e as o,n as r,d as s,c as a,o as c,f as d,h as m,l as u,t as f,g as h,j as g,v as p,q as w,m as b,p as x,w as y,y as v,H as k}from"./index-4348483d.js";import{w as j}from"./index-71440b21.js";import{loadLocaleContent as H,getData as I}from"../../../../../../../../../js/libraries/serverTools.js";import{px2rem as L}from"../../../../../../../../../js/libraries/miscTools.js";function T(t,e,n){const i=t.slice();return i[32]=e[n],i[33]=e,i[34]=n,i}function Y(t,e,n){const i=t.slice();return i[35]=e[n],i}function C(t,e,n){const i=t.slice();return i[35]=e[n],i}function M(t,e,n){const i=t.slice();return i[40]=e[n],i[41]=e,i[42]=n,i}function O(t,e,n){const i=t.slice();return i[43]=e[n],i[44]=e,i[45]=n,i}function z(t){let e,n,o=t[0],r=K(t);return{c(){e=d("div"),n=d("div"),r.c(),m(n,"id","text-container"),m(e,"id","container")},m(l,o){i(l,e,o),u(e,n),r.m(n,null),t[27](e)},p(t,e){1&e[0]&&l(o,o=t[0])?(r.d(1),r=K(t),r.c(),r.m(n,null)):r.p(t,e)},d(n){n&&s(e),r.d(n),t[27](null)}}}function A(t){let e,n,l,o,r,a,c=t[40].name+"",g=t[40];const p=()=>t[20](n,g),b=()=>t[20](null,g);function x(){return t[21](t[40])}return{c(){e=d("div"),n=d("button"),l=f(c),o=h(),m(n,"class","level0 heading-button"),m(e,"class","heading-button-wrapper")},m(t,s){i(t,e,s),u(e,n),u(n,l),p(),u(e,o),r||(a=w(n,"click",x),r=!0)},p(e,n){g!==(t=e)[40]&&(b(),g=t[40],p())},d(t){t&&s(e),b(),r=!1,a()}}}function V(t){let e,n=t[40],l=[];for(let e=0;et[18](n,g),b=()=>t[18](null,g);function x(){return t[19](t[43])}return{c(){e=d("div"),n=d("button"),l=f(c),o=h(),m(n,"class","level1 heading-button"),m(e,"class","heading-button-wrapper")},m(t,s){i(t,e,s),u(e,n),u(n,l),p(),u(e,o),r||(a=w(n,"click",x),r=!0)},p(e,n){g!==(t=e)[43]&&(b(),g=t[43],p())},d(t){t&&s(e),b(),r=!1,a()}}}function S(t){let e;let n=function(t,e){return Array.isArray(t[40])?V:A}(t),l=n(t);return{c(){l.c(),e=o()},m(t,n){l.m(t,n),i(t,e,n)},p(t,e){l.p(t,e)},d(t){l.d(t),t&&s(e)}}}function E(t){let e;let n=function(t,e){return t[32],"ul"==Object.keys(t[32])[0]?D:(t[32],"ol"==Object.keys(t[32])[0]?W:(t[32],"h3"==t[32].type?q:(t[32],"h2"==t[32].type?_:"#"==t[32][0]?N:B)))}(t),l=n(t);return{c(){l.c(),e=o()},m(t,n){l.m(t,n),i(t,e,n)},p(t,e){l.p(t,e)},d(t){l.d(t),t&&s(e)}}}function B(t){let e,n,l,o=t[32]+"";return{c(){e=d("p"),n=new k(!1),l=h(),n.a=l,m(e,"class","margin-end")},m(t,r){i(t,e,r),n.m(o,e),u(e,l)},p:r,d(t){t&&s(e)}}}function N(t){let e,n=t[32].slice(2,t[32].length)+"";return{c(){e=d("h1")},m(t,l){i(t,e,l),e.innerHTML=n},p:r,d(t){t&&s(e)}}}function _(t){let e,n,l,o,r,a=t[32].line+"",c=t[32];const f=()=>t[25](n,c),g=()=>t[25](null,c);return{c(){e=d("button"),n=d("h2"),l=h(),m(n,"id",t[32].id),p(e,"display","block"),p(e,"width","100%")},m(s,c){i(s,e,c),u(e,n),n.innerHTML=a,f(),u(e,l),o||(r=w(e,"click",(function(){v(t[6].scrollIntoView({block:"start"},!0))&&t[6].scrollIntoView({block:"start"},!0).apply(this,arguments)})),o=!0)},p(e,n){c!==(t=e)[32]&&(g(),c=t[32],f())},d(t){t&&s(e),g(),o=!1,r()}}}function q(t){let e,n,l,o,r,a=t[32].line+"",c=t[32];const f=()=>t[24](n,c),g=()=>t[24](null,c);return{c(){e=d("button"),n=d("h3"),l=h(),m(n,"id",t[32].id),p(e,"display","block"),p(e,"width","100%")},m(s,c){i(s,e,c),u(e,n),n.innerHTML=a,f(),u(e,l),o||(r=w(e,"click",(function(){v(t[6].scrollIntoView({block:"start"},!0))&&t[6].scrollIntoView({block:"start"},!0).apply(this,arguments)})),o=!0)},p(e,n){c!==(t=e)[32]&&(g(),c=t[32],f())},d(t){t&&s(e),g(),o=!1,r()}}}function W(t){let e,n,l=t[32].ol,o=[];for(let e=0;en(9,i=t)));let k=H(v,"manifesto-component",f);const T=["ul","ol"];function Y(t){p[t].scrollIntoView({block:"start"},!0)}I("/locales/"+k+"/manifesto.txt",(function(t){let e,i=t.split(/\r?\n/),o=0;for(let t=0;tn.includes("<"+t+">"))).findIndex((t=>t));if(-1!=l){let e=T[l],o={};o[e]=[];let r=""+e+">";for(;;){if(t+=1,n=i[t],n.includes(r)){h.push(o);break}o[e].push(n)}}else if("###"==n.slice(0,3)){let t=n.slice(4,n.length),i=t.toLowerCase().trim().replaceAll(" ","-");e.push({id:i,name:t,index:o}),o+=1,h.push({type:"h3",id:i,line:t,index:o})}else if("##"==n.slice(0,2)){let t=n.slice(3,n.length),i=t.toLowerCase().trim().replaceAll(" ","-");w.push({id:t.toLowerCase().trim().replaceAll(" ","-"),name:t,index:o}),o+=1,e=[],w.push(e),h.push({type:"h2",id:i,line:t,index:o})}else h.push(n)}n(0,l+=1)})),addEventListener("scroll",(t=>{if(window.innerWidth>1080){let t=L(window.scrollY),e=L(m.getBoundingClientRect().bottom+window.scrollY),i=L(d.getBoundingClientRect().bottom+window.scrollY);if(t>b&&t<5||t=e-1.5)x-=i-(e-1.5);else if(x>-5&&(x=-5),t<5&&0!=t){let t=L(d.offsetHeight-window.innerHeight);x=-Math.min(L(window.scrollY),5+t+2.5)}else if(twindow.innerHeight){let e=L(d.offsetHeight)-L(window.innerHeight);x>-(e+8)?x+=b-t:x=-(e+8)}n(6,d.style.marginTop=x+"rem",d),b=L(window.scrollY)}else n(6,d.style.marginTop="0rem",d)})),c((()=>{let t=localStorage.getItem("manifesto-hide-content");null!=t&&null!=t&&"true"==t&&Q(r,s)}));return[l,o,r,s,g,p,d,m,u,i,h,w,f,v,Y,function(t){y[t?"unshift":"push"]((()=>{r=t,n(2,r)}))},function(t){y[t?"unshift":"push"]((()=>{o=t,n(1,o)}))},()=>Q(r,s),function(t,e){y[t?"unshift":"push"]((()=>{g[e.index]=t,n(4,g)}))},t=>Y(t.id),function(t,e){y[t?"unshift":"push"]((()=>{g[e.index]=t,n(4,g)}))},t=>Y(t.id),function(t){y[t?"unshift":"push"]((()=>{s=t,n(3,s)}))},function(t){y[t?"unshift":"push"]((()=>{d=t,n(6,d)}))},function(t,e){y[t?"unshift":"push"]((()=>{p[e.id]=t,n(5,p)}))},function(t,e){y[t?"unshift":"push"]((()=>{p[e.id]=t,n(5,p)}))},function(t){y[t?"unshift":"push"]((()=>{u=t,n(8,u)}))},function(t){y[t?"unshift":"push"]((()=>{m=t,n(7,m)}))}]}class X extends t{constructor(t){super(),this.shadowRoot.innerHTML="",e(this,{target:this.shadowRoot,props:n(this.attributes),customElement:!0},U,P,l,{},null,[-1,-1]),t&&t.target&&i(t.target,this,t.anchor)}}customElements.define("manifesto-component",X);export{X as default};
diff --git a/Server/public/js/components/map-component.js b/Server/public/js/components/map-component.js
index 038e724..6ba5414 100644
--- a/Server/public/js/components/map-component.js
+++ b/Server/public/js/components/map-component.js
@@ -1 +1 @@
-import{S as t,i as a,a as e,b as s,q as o,s as r,f as i,n,h as c,d as l,o as p,v as m}from"./index-ce8c147b.js";function h(t){let a;return{c(){a=i("div"),this.c=n,c(a,"id","map")},m(e,o){s(e,a,o),t[2](a)},p:n,i:n,o:n,d(e){e&&l(a),t[2](null)}}}function u(t,a,e){let s,{callback:o=null}=a;function r(t,a){let e=L.map(s,{center:t,zoom:a});return L.tileLayer("https://tile.openstreetmap.org/{z}/{x}/{y}.png",{attribution:'© OpenStreetMap contributors',minNativeZoom:2,minZoom:2,maxNativeZoom:16,maxZoom:16}).addTo(e),e}return p((()=>{o(r)})),t.$$set=t=>{"callback"in t&&e(1,o=t.callback)},[s,o,function(t){m[t?"unshift":"push"]((()=>{s=t,e(0,s)}))}]}class b extends t{constructor(t){super(),this.shadowRoot.innerHTML="",a(this,{target:this.shadowRoot,props:e(this.attributes),customElement:!0},u,h,r,{callback:1},null),t&&(t.target&&s(t.target,this,t.anchor),t.props&&(this.$set(t.props),o()))}static get observedAttributes(){return["callback"]}get callback(){return this.$$.ctx[1]}set callback(t){this.$$set({callback:t}),o()}}customElements.define("map-component",b);export{b as default};
+import{S as t,i as a,a as e,b as s,u as o,s as r,f as i,n,h as c,d as l,o as p,w as m}from"./index-4348483d.js";function h(t){let a;return{c(){a=i("div"),this.c=n,c(a,"id","map")},m(e,o){s(e,a,o),t[2](a)},p:n,i:n,o:n,d(e){e&&l(a),t[2](null)}}}function u(t,a,e){let s,{callback:o=null}=a;function r(t,a){let e=L.map(s,{center:t,zoom:a});return L.tileLayer("https://tile.openstreetmap.org/{z}/{x}/{y}.png",{attribution:'© OpenStreetMap contributors',minNativeZoom:2,minZoom:2,maxNativeZoom:16,maxZoom:16}).addTo(e),e}return p((()=>{o(r)})),t.$$set=t=>{"callback"in t&&e(1,o=t.callback)},[s,o,function(t){m[t?"unshift":"push"]((()=>{s=t,e(0,s)}))}]}class d extends t{constructor(t){super(),this.shadowRoot.innerHTML="",a(this,{target:this.shadowRoot,props:e(this.attributes),customElement:!0},u,h,r,{callback:1},null),t&&(t.target&&s(t.target,this,t.anchor),t.props&&(this.$set(t.props),o()))}static get observedAttributes(){return["callback"]}get callback(){return this.$$.ctx[1]}set callback(t){this.$$set({callback:t}),o()}}customElements.define("map-component",d);export{d as default};
diff --git a/Server/public/js/components/navbar-component.js b/Server/public/js/components/navbar-component.js
index a4988f7..65ed88a 100644
--- a/Server/public/js/components/navbar-component.js
+++ b/Server/public/js/components/navbar-component.js
@@ -1 +1 @@
-import{S as e,i as o,a as t,b as n,s as i,e as a,n as r,d as l,c as s,o as c,f as d,g as m,t as h,h as p,j as g,l as u,u as f,m as b,p as v,x as k,v as w}from"./index-ce8c147b.js";import{w as y}from"./index-f2dbf8ff.js";import{loadLocaleContent as x,locales as j}from"../../../../../../../../../js/libraries/serverTools.js";function z(e,o,t){const n=e.slice();return n[14]=o[t][0],n[15]=o[t][1],n}function O(e){let o,t,i,a,r,s,c,w,y,x,O,H,L,M,N,S,E,R,U,I,X,q,A,B,C,D,F,G,J,K,P,Q,V,W,Y,Z,$,_,ee,oe,te,ne,ie,ae,re=e[3].orgName+"",le=e[3].manifesto+"",se=e[3].joinUs+"",ce=e[3].groups+"",de=e[3].communities+"",me=e[3].cooperatives+"",he=e[3].partners+"",pe=Object.entries(j),ge=[];for(let o=0;o',r=m(),s=d("a"),c=d("img"),y=m(),x=d("span"),O=h(re),H=m(),L=d("nav"),M=d("ul"),N=d("li"),S=d("a"),E=h(le),R=m(),U=d("li"),I=d("a"),X=h(se),q=m(),A=d("li"),B=d("a"),C=h(ce),D=m(),F=d("li"),G=d("a"),J=h(de),K=m(),P=d("li"),Q=d("a"),V=h(me),W=m(),Y=d("li"),Z=d("a"),$=h(he),_=m(),ee=d("li"),oe=d("button"),oe.innerHTML=' \n \n ',te=m(),ne=d("div");for(let e=0;et(3,n=e)));let m=x(d,"navbar-component",l);function h(e){localStorage.setItem("locale",e);let o=location.href.split("/"),t=Object.keys(j);o=o.filter((e=>!t.includes(e)));let n=o.slice(0,o.length-1).join("/")+"/"+e+"/"+o[o.length-1];location.href=n}c((()=>{}));return[i,a,r,n,l,d,m,function(){i.checked?t(1,a.style.background="white",a):setTimeout((()=>{t(1,a.style.position="relative",a),t(1,a.style.background="",a),t(1,a.style.boxShadow="",a)}),510)},function(){"block"==r.style.display?t(2,r.style.display="none",r):t(2,r.style.display="block",r)},h,function(e){w[e?"unshift":"push"]((()=>{i=e,t(0,i)}))},e=>h(e),function(e){w[e?"unshift":"push"]((()=>{r=e,t(2,r)}))},function(e){w[e?"unshift":"push"]((()=>{a=e,t(1,a)}))}]}class M extends e{constructor(e){super(),this.shadowRoot.innerHTML="",o(this,{target:this.shadowRoot,props:t(this.attributes),customElement:!0},L,H,i,{},null),e&&e.target&&n(e.target,this,e.anchor)}}customElements.define("navbar-component",M);export{M as default};
+import{S as e,i as o,a as t,b as n,s as i,e as a,n as r,d as l,c as s,o as c,f as d,g as m,t as h,h as p,j as g,l as u,q as f,m as b,p as v,r as k,w}from"./index-4348483d.js";import{w as y}from"./index-71440b21.js";import{loadLocaleContent as x,locales as j}from"../../../../../../../../../js/libraries/serverTools.js";function z(e,o,t){const n=e.slice();return n[14]=o[t][0],n[15]=o[t][1],n}function O(e){let o,t,i,a,r,s,c,w,y,x,O,H,L,M,N,S,E,R,U,q,I,X,A,B,C,D,F,G,J,K,P,Q,V,W,Y,Z,$,_,ee,oe,te,ne,ie,ae,re=e[3].orgName+"",le=e[3].manifesto+"",se=e[3].joinUs+"",ce=e[3].groups+"",de=e[3].communities+"",me=e[3].cooperatives+"",he=e[3].partners+"",pe=Object.entries(j),ge=[];for(let o=0;o',r=m(),s=d("a"),c=d("img"),y=m(),x=d("span"),O=h(re),H=m(),L=d("nav"),M=d("ul"),N=d("li"),S=d("a"),E=h(le),R=m(),U=d("li"),q=d("a"),I=h(se),X=m(),A=d("li"),B=d("a"),C=h(ce),D=m(),F=d("li"),G=d("a"),J=h(de),K=m(),P=d("li"),Q=d("a"),V=h(me),W=m(),Y=d("li"),Z=d("a"),$=h(he),_=m(),ee=d("li"),oe=d("button"),oe.innerHTML=' \n \n ',te=m(),ne=d("div");for(let e=0;et(3,n=e)));let m=x(d,"navbar-component",l);function h(e){localStorage.setItem("locale",e);let o=location.href.split("/"),t=Object.keys(j);o=o.filter((e=>!t.includes(e)));let n=o.slice(0,o.length-1).join("/")+"/"+e+"/"+o[o.length-1];location.href=n}c((()=>{}));return[i,a,r,n,l,d,m,function(){i.checked?t(1,a.style.background="white",a):setTimeout((()=>{t(1,a.style.position="relative",a),t(1,a.style.background="",a),t(1,a.style.boxShadow="",a)}),510)},function(){"block"==r.style.display?t(2,r.style.display="none",r):t(2,r.style.display="block",r)},h,function(e){w[e?"unshift":"push"]((()=>{i=e,t(0,i)}))},e=>h(e),function(e){w[e?"unshift":"push"]((()=>{r=e,t(2,r)}))},function(e){w[e?"unshift":"push"]((()=>{a=e,t(1,a)}))}]}class M extends e{constructor(e){super(),this.shadowRoot.innerHTML="",o(this,{target:this.shadowRoot,props:t(this.attributes),customElement:!0},L,H,i,{},null),e&&e.target&&n(e.target,this,e.anchor)}}customElements.define("navbar-component",M);export{M as default};
diff --git a/Server/public/js/components/pane-aligner.js b/Server/public/js/components/pane-aligner.js
index 21e615e..784b939 100644
--- a/Server/public/js/components/pane-aligner.js
+++ b/Server/public/js/components/pane-aligner.js
@@ -1 +1 @@
-import{S as i,i as e,a,b as t,s as n,f as r,g as s,n as d,h as o,l,d as m,w as p,o as h,v as g}from"./index-ce8c147b.js";import{debounce as c}from"../../../../../../../../../js/libraries/miscTools.js";function f(i){let e,a,n,p,h,g,c,f,u,b;return{c(){e=r("div"),a=r("div"),n=r("div"),p=r("div"),p.innerHTML=' ',h=s(),g=r("div"),g.innerHTML=' ',c=s(),f=r("div"),f.innerHTML=' ',u=s(),b=r("div"),b.innerHTML=' ',this.c=d,o(p,"id","sidebar-left"),o(p,"class","pane"),o(g,"id","sidebar-left2"),o(g,"class","pane"),o(n,"id","sidebars-left"),o(n,"class","sidebar"),o(f,"id","sidebar-right"),o(f,"class","pane sidebar"),o(b,"id","main-pane"),o(b,"class","pane"),o(a,"class","pane-container"),o(e,"id","root"),o(e,"class","pane-centering")},m(r,s){t(r,e,s),l(e,a),l(a,n),l(n,p),i[5](p),l(n,h),l(n,g),i[6](g),l(a,c),l(a,f),i[7](f),l(a,u),l(a,b),i[8](b),i[9](e)},p:d,i:d,o:d,d(a){a&&m(e),i[5](null),i[6](null),i[7](null),i[8](null),i[9](null)}}}function u(i,e,a){let t,n,r,s,d,o=null!=p("alignerParent")?p("alignerParent").switchView:void 0,l=!1,m=!1,f=!1;function u(){if(null!=t.parentNode){let i=t.parentNode.host.childNodes;if(0==i.length)setTimeout(u,50);else{let e=!1,n=t.parentNode.innerHTML;for(let a of i)"sidebar-left"!=a.slot||l?"sidebar-left2"!=a.slot||m?"sidebar-right"!=a.slot||f||(n=n.replace("#sidebar-right{display:none;","#sidebar-right{"),f=!0,e=!0):(n=n.replace("#sidebar-left2{display:none}",""),m=!0,e=!0):(n=n.replace("#sidebar-left{display:none}",""),l=!0,e=!0);null!=o&&(n=n.replace("1880px",o),e=!0),e&&a(0,t.parentNode.innerHTML=n,t)}}}return window.addEventListener("resize",c(u,100)),h((()=>{u()})),[t,n,r,s,d,function(i){g[i?"unshift":"push"]((()=>{r=i,a(2,r)}))},function(i){g[i?"unshift":"push"]((()=>{s=i,a(3,s)}))},function(i){g[i?"unshift":"push"]((()=>{d=i,a(4,d)}))},function(i){g[i?"unshift":"push"]((()=>{n=i,a(1,n)}))},function(i){g[i?"unshift":"push"]((()=>{t=i,a(0,t)}))}]}class b extends i{constructor(i){super(),this.shadowRoot.innerHTML="",e(this,{target:this.shadowRoot,props:a(this.attributes),customElement:!0},u,f,n,{},null),i&&i.target&&t(i.target,this,i.anchor)}}customElements.define("pane-aligner",b);export{b as default};
+import{S as i,i as e,a,b as t,s as n,f as r,g as s,n as d,h as o,l,d as m,x as p,o as h,w as g}from"./index-4348483d.js";import{debounce as c}from"../../../../../../../../../js/libraries/miscTools.js";function f(i){let e,a,n,p,h,g,c,f,u,b;return{c(){e=r("div"),a=r("div"),n=r("div"),p=r("div"),p.innerHTML=' ',h=s(),g=r("div"),g.innerHTML=' ',c=s(),f=r("div"),f.innerHTML=' ',u=s(),b=r("div"),b.innerHTML=' ',this.c=d,o(p,"id","sidebar-left"),o(p,"class","pane"),o(g,"id","sidebar-left2"),o(g,"class","pane"),o(n,"id","sidebars-left"),o(n,"class","sidebar"),o(f,"id","sidebar-right"),o(f,"class","pane sidebar"),o(b,"id","main-pane"),o(b,"class","pane"),o(a,"class","pane-container"),o(e,"id","root"),o(e,"class","pane-centering")},m(r,s){t(r,e,s),l(e,a),l(a,n),l(n,p),i[5](p),l(n,h),l(n,g),i[6](g),l(a,c),l(a,f),i[7](f),l(a,u),l(a,b),i[8](b),i[9](e)},p:d,i:d,o:d,d(a){a&&m(e),i[5](null),i[6](null),i[7](null),i[8](null),i[9](null)}}}function u(i,e,a){let t,n,r,s,d,o=null!=p("alignerParent")?p("alignerParent").switchView:void 0,l=!1,m=!1,f=!1;function u(){if(null!=t.parentNode){let i=t.parentNode.host.childNodes;if(0==i.length)setTimeout(u,50);else{let e=!1,n=t.parentNode.innerHTML;for(let a of i)"sidebar-left"!=a.slot||l?"sidebar-left2"!=a.slot||m?"sidebar-right"!=a.slot||f||(n=n.replace("#sidebar-right{display:none;","#sidebar-right{"),f=!0,e=!0):(n=n.replace("#sidebar-left2{display:none}",""),m=!0,e=!0):(n=n.replace("#sidebar-left{display:none}",""),l=!0,e=!0);null!=o&&(n=n.replace("1880px",o),e=!0),e&&a(0,t.parentNode.innerHTML=n,t)}}}return window.addEventListener("resize",c(u,100)),h((()=>{u()})),[t,n,r,s,d,function(i){g[i?"unshift":"push"]((()=>{r=i,a(2,r)}))},function(i){g[i?"unshift":"push"]((()=>{s=i,a(3,s)}))},function(i){g[i?"unshift":"push"]((()=>{d=i,a(4,d)}))},function(i){g[i?"unshift":"push"]((()=>{n=i,a(1,n)}))},function(i){g[i?"unshift":"push"]((()=>{t=i,a(0,t)}))}]}class b extends i{constructor(i){super(),this.shadowRoot.innerHTML="",e(this,{target:this.shadowRoot,props:a(this.attributes),customElement:!0},u,f,n,{},null),i&&i.target&&t(i.target,this,i.anchor)}}customElements.define("pane-aligner",b);export{b as default};
diff --git a/Server/public/js/components/partners-component.js b/Server/public/js/components/partners-component.js
index b2ab01c..bab1fea 100644
--- a/Server/public/js/components/partners-component.js
+++ b/Server/public/js/components/partners-component.js
@@ -1 +1 @@
-import{S as e,i as t,a as n,b as i,s as o,e as a,n as r,d as s,c as l,o as m,f as c,t as g,g as d,h as p,j as h,l as f,m as u,p as b}from"./index-ce8c147b.js";import{w as x}from"./index-f2dbf8ff.js";import{loadLocaleContent as w}from"../../../../../../../../../js/libraries/serverTools.js";import"../../../../../../../../../js/components/map-component.js";function v(e,t,n){const i=e.slice();return i[5]=t[n],i}function y(e){let t,n,o,a,r,l,m,x,w,y,j,z,D,F,G,E,O,R=e[0].heading+"",S=e[0].p1+"",T=e[0].subheading1+"",_=e[0].subheading2+"",A=e[4],C=[];for(let t=0;tn(0,i=e)));let r=w(a,"partners-component",o);return m((()=>{})),[i,o,a,r,[{name:"Gaia's Fall",type:{en:"a place to discuss and organize",ru:"место для общения и организации"},link:"https://discord.libsoc.org/invite/",description:{en:"Gaia's Fall is a server that promotes Solarpunk ideals, environmentalism, anarchism, and anti-capitalism. We encourage civil debates, discussions of theories and possibilities, and the creation of communities focused on shaping a better world. It is our official Discord server where we organize and work together.",ru:"Gaia's Fall — это сервер, который продвигает идеалы соларпанка, защиту окружающей среды, анархизм и антикапитализм. Мы поощряем гражданские дебаты, обсуждение теорий и возможностей, а также создание сообществ, сосредоточенных на формировании лучшего мира. Это наш официальный сервер Discord, на котором мы организуемся и работаем вместе"},logo:"gaias_fall"}]]}class D extends e{constructor(e){super(),this.shadowRoot.innerHTML="",t(this,{target:this.shadowRoot,props:n(this.attributes),customElement:!0},z,j,o,{},null),e&&e.target&&i(e.target,this,e.anchor)}}customElements.define("partners-component",D);export{D as default};
+import{S as e,i as t,a as n,b as i,s as o,e as a,n as r,d as s,c as l,o as m,f as c,t as g,g as d,h as p,j as h,l as f,m as u,p as b}from"./index-4348483d.js";import{w as x}from"./index-71440b21.js";import{loadLocaleContent as w}from"../../../../../../../../../js/libraries/serverTools.js";import"../../../../../../../../../js/components/map-component.js";function v(e,t,n){const i=e.slice();return i[5]=t[n],i}function y(e){let t,n,o,a,r,l,m,x,w,y,j,z,D,F,G,E,O,R=e[0].heading+"",S=e[0].p1+"",T=e[0].subheading1+"",_=e[0].subheading2+"",A=e[4],C=[];for(let t=0;tn(0,i=e)));let r=w(a,"partners-component",o);return m((()=>{})),[i,o,a,r,[{name:"Gaia's Fall",type:{en:"a place to discuss and organize",ru:"место для общения и организации"},link:"https://discord.libsoc.org/invite/",description:{en:"Gaia's Fall is a server that promotes Solarpunk ideals, environmentalism, anarchism, and anti-capitalism. We encourage civil debates, discussions of theories and possibilities, and the creation of communities focused on shaping a better world. It is our official Discord server where we organize and work together.",ru:"Gaia's Fall — это сервер, который продвигает идеалы соларпанка, защиту окружающей среды, анархизм и антикапитализм. Мы поощряем гражданские дебаты, обсуждение теорий и возможностей, а также создание сообществ, сосредоточенных на формировании лучшего мира. Это наш официальный сервер Discord, на котором мы организуемся и работаем вместе"},logo:"gaias_fall"}]]}class D extends e{constructor(e){super(),this.shadowRoot.innerHTML="",t(this,{target:this.shadowRoot,props:n(this.attributes),customElement:!0},z,j,o,{},null),e&&e.target&&i(e.target,this,e.anchor)}}customElements.define("partners-component",D);export{D as default};
diff --git a/Server/public/js/components/select-component.js b/Server/public/js/components/select-component.js
index dfe17e8..df38f5d 100644
--- a/Server/public/js/components/select-component.js
+++ b/Server/public/js/components/select-component.js
@@ -1 +1 @@
-import{S as t,i as e,a as r,b as i,q as o,s as n,f as l,n as s,h as a,d,o as u,t as c,g as h,j as p,r as f,l as m,u as v,m as b,p as g,v as w}from"./index-ce8c147b.js";import{px2rem as y,getTextWidth as x,getCanvasFont as $}from"../../../../../../../../../js/libraries/miscTools.js";function k(t,e,r){const i=t.slice();return i[26]=e[r],i[27]=e,i[28]=r,i}function z(t){let e,r,o,n,s,a,u=t[26]+"",p=t[28];const f=()=>t[14](e,p),g=()=>t[14](null,p);function w(){return t[15](t[28])}return{c(){e=l("button"),r=l("span"),o=c(u),n=h(),e.value=t[28]},m(t,l){i(t,e,l),m(e,r),m(r,o),m(e,n),f(),s||(a=v(e,"click",w),s=!0)},p(e,r){t=e,4&r&&u!==(u=t[26]+"")&&b(o,u),p!==t[28]&&(g(),p=t[28],f())},d(t){t&&d(e),g(),s=!1,a()}}}function L(t){let e,r,o,n,s,u,w,y,x,$,L,j=(null!=t[0]?t[0]:"")+"",M=t[2],T=[];for(let e=0;ee==t));r(6,n.innerHTML=t,n),r(5,p[i].style.display="none",p),r(11,c=i)}r(8,f+=1)}}function b(t,e){null!=t&&null!=e&&e[t]!=d&&(r(0,d=e[t]),r(8,f+=1))}function g(){"none"==o.style.display?r(4,o.style.display="initial",o):r(4,o.style.display="none",o)}function k(t,e){r(11,c=t),r(0,d=a[t]),null!=e&&null!=e&&e(t)}function z(){r(4,o.style.display="none",o)}function L(t,e){let r;if(null!=t&&null!=e){let i=getComputedStyle(t).getPropertyValue("--width");if(isNaN(i)||""==i){if(null==m)return m=new ResizeObserver((()=>L(t,e))),void m.observe(l);i=getComputedStyle(l).getPropertyValue("width"),r=y(parseFloat(i.slice(0,i.length-2)))}else r=parseFloat(i.slice(0,i.length-2));let o=[];for(let t=0;tr){let t=1.1*n+"rem";e.style.width=t;for(let r=0;r{n=t,r(6,n)}))}function M(t){w[t?"unshift":"push"]((()=>{l=t,r(7,l)}))}function T(t,e){w[t?"unshift":"push"]((()=>{p[e]=t,r(5,p)}))}u((()=>{h.addEventListener("focusout",z)}));const E=t=>k(t,s);function H(t){w[t?"unshift":"push"]((()=>{o=t,r(4,o)}))}function R(t){w[t?"unshift":"push"]((()=>{i=t,r(3,i)}))}return t.$$set=t=>{"callback"in t&&r(1,s=t.callback),"options"in t&&r(2,a=t.options),"value"in t&&r(0,d=t.value),"valueindex"in t&&r(11,c=t.valueindex)},t.$$.update=()=>{5&t.$$.dirty&&v(d,a),2052&t.$$.dirty&&b(c,a),24&t.$$.dirty&&L(i,o)},[d,s,a,i,o,p,n,l,f,g,k,c,j,M,T,E,H,R]}class T extends t{constructor(t){super(),this.shadowRoot.innerHTML="",e(this,{target:this.shadowRoot,props:r(this.attributes),customElement:!0},M,j,n,{callback:1,options:2,value:0,valueindex:11},null),t&&(t.target&&i(t.target,this,t.anchor),t.props&&(this.$set(t.props),o()))}static get observedAttributes(){return["callback","options","value","valueindex"]}get callback(){return this.$$.ctx[1]}set callback(t){this.$$set({callback:t}),o()}get options(){return this.$$.ctx[2]}set options(t){this.$$set({options:t}),o()}get value(){return this.$$.ctx[0]}set value(t){this.$$set({value:t}),o()}get valueindex(){return this.$$.ctx[11]}set valueindex(t){this.$$set({valueindex:t}),o()}}customElements.define("select-component",T);export{T as default};
+import{S as t,i as e,a as r,b as i,u as o,s as n,f as l,n as s,h as a,d,o as u,t as c,g as h,j as p,v as f,l as m,q as v,m as b,p as g,w}from"./index-4348483d.js";import{px2rem as y,getTextWidth as x,getCanvasFont as $}from"../../../../../../../../../js/libraries/miscTools.js";function k(t,e,r){const i=t.slice();return i[26]=e[r],i[27]=e,i[28]=r,i}function z(t){let e,r,o,n,s,a,u=t[26]+"",p=t[28];const f=()=>t[14](e,p),g=()=>t[14](null,p);function w(){return t[15](t[28])}return{c(){e=l("button"),r=l("span"),o=c(u),n=h(),e.value=t[28]},m(t,l){i(t,e,l),m(e,r),m(r,o),m(e,n),f(),s||(a=v(e,"click",w),s=!0)},p(e,r){t=e,4&r&&u!==(u=t[26]+"")&&b(o,u),p!==t[28]&&(g(),p=t[28],f())},d(t){t&&d(e),g(),s=!1,a()}}}function L(t){let e,r,o,n,s,u,w,y,x,$,L,j=(null!=t[0]?t[0]:"")+"",M=t[2],T=[];for(let e=0;ee==t));r(6,n.innerHTML=t,n),r(5,p[i].style.display="none",p),r(11,c=i)}r(8,f+=1)}}function b(t,e){null!=t&&null!=e&&e[t]!=d&&(r(0,d=e[t]),r(8,f+=1))}function g(){"none"==o.style.display?r(4,o.style.display="initial",o):r(4,o.style.display="none",o)}function k(t,e){r(11,c=t),r(0,d=a[t]),null!=e&&null!=e&&e(t)}function z(){r(4,o.style.display="none",o)}function L(t,e){let r;if(null!=t&&null!=e){let i=getComputedStyle(t).getPropertyValue("--width");if(isNaN(i)||""==i){if(null==m)return m=new ResizeObserver((()=>L(t,e))),void m.observe(l);i=getComputedStyle(l).getPropertyValue("width"),r=y(parseFloat(i.slice(0,i.length-2)))}else r=parseFloat(i.slice(0,i.length-2));let o=[];for(let t=0;tr){let t=1.1*n+"rem";e.style.width=t;for(let r=0;r{n=t,r(6,n)}))}function M(t){w[t?"unshift":"push"]((()=>{l=t,r(7,l)}))}function T(t,e){w[t?"unshift":"push"]((()=>{p[e]=t,r(5,p)}))}u((()=>{h.addEventListener("focusout",z)}));const E=t=>k(t,s);function H(t){w[t?"unshift":"push"]((()=>{o=t,r(4,o)}))}function R(t){w[t?"unshift":"push"]((()=>{i=t,r(3,i)}))}return t.$$set=t=>{"callback"in t&&r(1,s=t.callback),"options"in t&&r(2,a=t.options),"value"in t&&r(0,d=t.value),"valueindex"in t&&r(11,c=t.valueindex)},t.$$.update=()=>{5&t.$$.dirty&&v(d,a),2052&t.$$.dirty&&b(c,a),24&t.$$.dirty&&L(i,o)},[d,s,a,i,o,p,n,l,f,g,k,c,j,M,T,E,H,R]}class T extends t{constructor(t){super(),this.shadowRoot.innerHTML="",e(this,{target:this.shadowRoot,props:r(this.attributes),customElement:!0},M,j,n,{callback:1,options:2,value:0,valueindex:11},null),t&&(t.target&&i(t.target,this,t.anchor),t.props&&(this.$set(t.props),o()))}static get observedAttributes(){return["callback","options","value","valueindex"]}get callback(){return this.$$.ctx[1]}set callback(t){this.$$set({callback:t}),o()}get options(){return this.$$.ctx[2]}set options(t){this.$$set({options:t}),o()}get value(){return this.$$.ctx[0]}set value(t){this.$$set({value:t}),o()}get valueindex(){return this.$$.ctx[11]}set valueindex(t){this.$$set({valueindex:t}),o()}}customElements.define("select-component",T);export{T as default};
diff --git a/Server/public/js/components/switch-component.js b/Server/public/js/components/switch-component.js
index 85268f2..bd960dc 100644
--- a/Server/public/js/components/switch-component.js
+++ b/Server/public/js/components/switch-component.js
@@ -1 +1 @@
-import{S as t,i as e,a as s,b as c,q as i,s as a,f as r,g as o,n as h,h as n,l,u as d,d as u,x as p,o as b}from"./index-ce8c147b.js";import"../../../../../../../../../js/libraries/miscTools.js";function k(t){let e,s,i,a,b,k;return{c(){e=r("label"),s=r("input"),i=o(),a=r("span"),this.c=h,n(s,"type","checkbox"),n(a,"class","switch-span"),n(e,"class","switch")},m(r,o){c(r,e,o),l(e,s),s.checked=t[0],l(e,i),l(e,a),b||(k=[d(s,"change",t[4]),d(s,"click",t[1])],b=!0)},p(t,[e]){1&e&&(s.checked=t[0])},i:h,o:h,d(t){t&&u(e),b=!1,p(k)}}}function g(t,e,s){let{callback:c=null}=e,{checked:i=!1}=e;const a=()=>{setTimeout((()=>{null!=c?(s(0,i=!i),c()):a()}),100)};return b((()=>{})),t.$$set=t=>{"callback"in t&&s(2,c=t.callback),"checked"in t&&s(0,i=t.checked)},[i,function(){null!=c&&(s(0,i=!i),c())},c,a,function(){i=this.checked,s(0,i)}]}class m extends t{constructor(t){super(),this.shadowRoot.innerHTML="",e(this,{target:this.shadowRoot,props:s(this.attributes),customElement:!0},g,k,a,{callback:2,checked:0,toggle:3},null),t&&(t.target&&c(t.target,this,t.anchor),t.props&&(this.$set(t.props),i()))}static get observedAttributes(){return["callback","checked","toggle"]}get callback(){return this.$$.ctx[2]}set callback(t){this.$$set({callback:t}),i()}get checked(){return this.$$.ctx[0]}set checked(t){this.$$set({checked:t}),i()}get toggle(){return this.$$.ctx[3]}}customElements.define("switch-component",m);export{m as default};
+import{S as t,i as e,a as s,b as c,u as i,s as a,f as r,g as o,n as h,h as n,l,q as d,d as u,r as p,o as b}from"./index-4348483d.js";import"../../../../../../../../../js/libraries/miscTools.js";function k(t){let e,s,i,a,b,k;return{c(){e=r("label"),s=r("input"),i=o(),a=r("span"),this.c=h,n(s,"type","checkbox"),n(a,"class","switch-span"),n(e,"class","switch")},m(r,o){c(r,e,o),l(e,s),s.checked=t[0],l(e,i),l(e,a),b||(k=[d(s,"change",t[4]),d(s,"click",t[1])],b=!0)},p(t,[e]){1&e&&(s.checked=t[0])},i:h,o:h,d(t){t&&u(e),b=!1,p(k)}}}function g(t,e,s){let{callback:c=null}=e,{checked:i=!1}=e;const a=()=>{setTimeout((()=>{null!=c?(s(0,i=!i),c()):a()}),100)};return b((()=>{})),t.$$set=t=>{"callback"in t&&s(2,c=t.callback),"checked"in t&&s(0,i=t.checked)},[i,function(){null!=c&&(s(0,i=!i),c())},c,a,function(){i=this.checked,s(0,i)}]}class m extends t{constructor(t){super(),this.shadowRoot.innerHTML="",e(this,{target:this.shadowRoot,props:s(this.attributes),customElement:!0},g,k,a,{callback:2,checked:0,toggle:3},null),t&&(t.target&&c(t.target,this,t.anchor),t.props&&(this.$set(t.props),i()))}static get observedAttributes(){return["callback","checked","toggle"]}get callback(){return this.$$.ctx[2]}set callback(t){this.$$set({callback:t}),i()}get checked(){return this.$$.ctx[0]}set checked(t){this.$$set({checked:t}),i()}get toggle(){return this.$$.ctx[3]}}customElements.define("switch-component",m);export{m as default};
diff --git a/Server/public/locales/en/compass-component.json b/Server/public/locales/en/compass-component.json
new file mode 100644
index 0000000..aebd810
--- /dev/null
+++ b/Server/public/locales/en/compass-component.json
@@ -0,0 +1,120 @@
+{
+ "heading": "Political compass",
+ "qs": [
+ {
+ "q": "Production should be driven by ... ",
+ "as": [
+ ["individual entrepreneurial initiative and wealth",["C"]],
+ ["the directives and plans set by the people in charge",["V"]],
+ ["collective decision-making and agreement",["LS"]]
+ ]
+ },
+ {
+ "q": "Decision-making power at work should belong to ...",
+ "as": [
+ ["those who own the place due to having wealth or political power",["C"]],
+ ["those who work there",["LS"]]
+ ]
+ },
+ {
+ "q": "Distribution of work should be based on ...",
+ "as": [
+ ["opportunities in the job market and wealth",["C"]],
+ ["the directives and assignments given by the people in charge",["V"]],
+ ["collective planning and equitable allocation according to societal needs",["LS"]]
+ ]
+ },
+ {
+ "q": "The means of production should be owned and controlled by ...",
+ "as": [
+ ["wealthy individuals",["C"]],
+ ["the people in charge of the state apparatus",["V"]],
+ ["the community as a whole",["LS"]]
+ ]
+ },
+ {
+ "q": "The production process should prioritize ...",
+ "as": [
+ ["cost-effectiveness",["C"]],
+ ["whatever the people in charge say",["V"]],
+ ["needs and sustainability",["LS"]]
+ ]
+ },
+ {
+ "q": "Infinite growth of production leads to ...",
+ "as": [
+ ["all the good stuff",["C","V"]],
+ ["destruction of our planet",["LS"]]
+ ]
+ },
+ {
+ "q": "Distribution should happen based on ...",
+ "as": [
+ ["wealth",["C"]],
+ ["whatever the people in charge say",["V"]],
+ ["collective agreement",["LS"]]
+ ]
+ },
+ {
+ "q": "Social safety nets should be ...",
+ "as": [
+ ["minimized to encourage individual self-reliance",["C"]],
+ ["controlled and distributed by the people in charge",["V"]],
+ ["comprehensive and provided as a collective responsibility",["LS"]]
+ ]
+ },
+ {
+ "q": "Access to education should be ...",
+ "as": [
+ ["dependent on financial means",["C"]],
+ ["regulated and controlled by the people in charge to shape societal values",["V"]],
+ ["guaranteed as a universal right",["LS"]]
+ ]
+ },
+ {
+ "q": "Most people are ...",
+ "as": [
+ ["incapable of making good decisions and have to be led like sheep",["C","V"]],
+ ["capable of making good decision if given an opportunity and independence",["LS"]]
+ ]
+ },
+ {
+ "q": "Power corrupts ...",
+ "as": [
+ ["sometimes, which is why we have several groups of people in power that give power to each other from time to time based on who had a better PR campaign",["C"]],
+ ["everyone but our supreme benevolent dictators",["V"]],
+ ["everyone",["LS"]]
+ ]
+ },
+ {
+ "q": "Decisions should happen based on ...",
+ "as": [
+ ["whatever the people in charge say",["C","V"]],
+ ["collective agreement",["LS"]]
+ ]
+ },
+ {
+ "q": "Use of violence is ...",
+ "as": [
+ ["justified to allow the people in charge to stay in power",["C","V"]],
+ ["unacceptable",["LS"]]
+ ]
+ },
+ {
+ "q": "Innovation and technological development should be driven by ...",
+ "as": [
+ ["market competition and individual incentives",["C"]],
+ ["objectives set by the people in charge",["V"]],
+ ["collective research and shared knowledge",["LS"]]
+ ]
+ },
+ {
+ "q": "Ownership of intellectual property rights should belong to ...",
+ "as": [
+ ["the individual inventors or their employers",["C"]],
+ ["the people in charge who regulate and control intellectual property",["V"]],
+ ["the community and shared knowledge",["LS"]]
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Server/public/locales/ru/compass-component.json b/Server/public/locales/ru/compass-component.json
new file mode 100644
index 0000000..603544a
--- /dev/null
+++ b/Server/public/locales/ru/compass-component.json
@@ -0,0 +1,3 @@
+{
+ "heading": "Политический компас"
+}
\ No newline at end of file
diff --git a/Server/public/sitemap.txt b/Server/public/sitemap.txt
index a3554c1..2c5c4b3 100644
--- a/Server/public/sitemap.txt
+++ b/Server/public/sitemap.txt
@@ -1,10 +1,10 @@
-https://www.libsoc.org/
-https://www.libsoc.org/manifesto/
-https://www.libsoc.org/join-us/
-https://www.libsoc.org/groups/
-https://www.libsoc.org/communities/
-https://www.libsoc.org/cooperatives/
-https://www.libsoc.org/partners/
+https://www.libsoc.org/en/
+https://www.libsoc.org/en/manifesto/
+https://www.libsoc.org/en/join-us/
+https://www.libsoc.org/en/groups/
+https://www.libsoc.org/en/communities/
+https://www.libsoc.org/en/cooperatives/
+https://www.libsoc.org/en/partners/
https://www.libsoc.org/ru/
https://www.libsoc.org/ru/manifesto/
https://www.libsoc.org/ru/join-us/
diff --git a/Server/routes.jl b/Server/routes.jl
index 8d97a16..9769579 100644
--- a/Server/routes.jl
+++ b/Server/routes.jl
@@ -6,22 +6,17 @@ using Server.BasicController
#---Basic-----------------------------------------------------------
route("/:locale/manifesto", BasicController.manifesto, named = :manifest)
-route("/manifesto", BasicController.manifesto)
route("/:locale/join-us", BasicController.join_us, named = :join_us)
-route("/join-us", BasicController.join_us)
route("/:locale/groups", BasicController.groups, named = :groups)
-route("/groups", BasicController.groups)
route("/:locale/cooperatives", BasicController.cooperatives, named = :cooperatives)
-route("/cooperatives", BasicController.cooperatives)
route("/:locale/communities", BasicController.communities, named = :communities)
-route("/communities", BasicController.communities)
route("/:locale/partners", BasicController.partners, named = :partners)
-route("/partners", BasicController.partners)
+
+route("/:locale/political-compass", BasicController.political_compass, named = :political_compass)
route("/:locale", BasicController.landing, named = :landing)
-route("/", BasicController.landing)
diff --git a/Server/startup.jl b/Server/startup.jl
index 03beff8..d0cd7f7 100644
--- a/Server/startup.jl
+++ b/Server/startup.jl
@@ -18,3 +18,4 @@ if ENV["GENIE_ENV"]=="dev"
else
Genie.up(async=false)
end
+