diff --git a/asset-manifest.json b/asset-manifest.json
index c5f6c50..5383caa 100644
--- a/asset-manifest.json
+++ b/asset-manifest.json
@@ -1,32 +1,32 @@
{
"files": {
"main.css": "/static/css/main.27cf20e8.chunk.css",
- "main.js": "/static/js/main.9487faa4.chunk.js",
- "main.js.map": "/static/js/main.9487faa4.chunk.js.map",
- "runtime-main.js": "/static/js/runtime-main.a185044a.js",
- "runtime-main.js.map": "/static/js/runtime-main.a185044a.js.map",
+ "main.js": "/static/js/main.4435a7aa.chunk.js",
+ "main.js.map": "/static/js/main.4435a7aa.chunk.js.map",
+ "runtime-main.js": "/static/js/runtime-main.a3cc4f85.js",
+ "runtime-main.js.map": "/static/js/runtime-main.a3cc4f85.js.map",
"static/js/2.02aed69b.chunk.js": "/static/js/2.02aed69b.chunk.js",
"static/js/2.02aed69b.chunk.js.map": "/static/js/2.02aed69b.chunk.js.map",
- "static/js/3.42f2508f.chunk.js": "/static/js/3.42f2508f.chunk.js",
- "static/js/3.42f2508f.chunk.js.map": "/static/js/3.42f2508f.chunk.js.map",
- "static/js/4.00e98f27.chunk.js": "/static/js/4.00e98f27.chunk.js",
- "static/js/4.00e98f27.chunk.js.map": "/static/js/4.00e98f27.chunk.js.map",
- "static/js/5.4a997291.chunk.js": "/static/js/5.4a997291.chunk.js",
- "static/js/5.4a997291.chunk.js.map": "/static/js/5.4a997291.chunk.js.map",
- "static/js/6.cc6e8c6a.chunk.js": "/static/js/6.cc6e8c6a.chunk.js",
- "static/js/6.cc6e8c6a.chunk.js.map": "/static/js/6.cc6e8c6a.chunk.js.map",
- "static/js/7.ffb1c4e4.chunk.js": "/static/js/7.ffb1c4e4.chunk.js",
- "static/js/7.ffb1c4e4.chunk.js.map": "/static/js/7.ffb1c4e4.chunk.js.map",
- "static/js/8.c8c6338b.chunk.js": "/static/js/8.c8c6338b.chunk.js",
- "static/js/8.c8c6338b.chunk.js.map": "/static/js/8.c8c6338b.chunk.js.map",
- "static/js/9.ba45c485.chunk.js": "/static/js/9.ba45c485.chunk.js",
- "static/js/9.ba45c485.chunk.js.map": "/static/js/9.ba45c485.chunk.js.map",
- "static/js/10.c9e8365a.chunk.js": "/static/js/10.c9e8365a.chunk.js",
- "static/js/10.c9e8365a.chunk.js.map": "/static/js/10.c9e8365a.chunk.js.map",
- "static/js/11.c6c87f3f.chunk.js": "/static/js/11.c6c87f3f.chunk.js",
- "static/js/11.c6c87f3f.chunk.js.map": "/static/js/11.c6c87f3f.chunk.js.map",
- "static/js/12.87deb0a1.chunk.js": "/static/js/12.87deb0a1.chunk.js",
- "static/js/12.87deb0a1.chunk.js.map": "/static/js/12.87deb0a1.chunk.js.map",
+ "static/js/3.f8d10e7b.chunk.js": "/static/js/3.f8d10e7b.chunk.js",
+ "static/js/3.f8d10e7b.chunk.js.map": "/static/js/3.f8d10e7b.chunk.js.map",
+ "static/js/4.b77b1f1a.chunk.js": "/static/js/4.b77b1f1a.chunk.js",
+ "static/js/4.b77b1f1a.chunk.js.map": "/static/js/4.b77b1f1a.chunk.js.map",
+ "static/js/5.f8e213df.chunk.js": "/static/js/5.f8e213df.chunk.js",
+ "static/js/5.f8e213df.chunk.js.map": "/static/js/5.f8e213df.chunk.js.map",
+ "static/js/6.a55b4f9c.chunk.js": "/static/js/6.a55b4f9c.chunk.js",
+ "static/js/6.a55b4f9c.chunk.js.map": "/static/js/6.a55b4f9c.chunk.js.map",
+ "static/js/7.71751c64.chunk.js": "/static/js/7.71751c64.chunk.js",
+ "static/js/7.71751c64.chunk.js.map": "/static/js/7.71751c64.chunk.js.map",
+ "static/js/8.db0931b9.chunk.js": "/static/js/8.db0931b9.chunk.js",
+ "static/js/8.db0931b9.chunk.js.map": "/static/js/8.db0931b9.chunk.js.map",
+ "static/js/9.29c849db.chunk.js": "/static/js/9.29c849db.chunk.js",
+ "static/js/9.29c849db.chunk.js.map": "/static/js/9.29c849db.chunk.js.map",
+ "static/js/10.5a4a0771.chunk.js": "/static/js/10.5a4a0771.chunk.js",
+ "static/js/10.5a4a0771.chunk.js.map": "/static/js/10.5a4a0771.chunk.js.map",
+ "static/js/11.285772eb.chunk.js": "/static/js/11.285772eb.chunk.js",
+ "static/js/11.285772eb.chunk.js.map": "/static/js/11.285772eb.chunk.js.map",
+ "static/js/12.2e009d98.chunk.js": "/static/js/12.2e009d98.chunk.js",
+ "static/js/12.2e009d98.chunk.js.map": "/static/js/12.2e009d98.chunk.js.map",
"static/js/13.1623337e.chunk.js": "/static/js/13.1623337e.chunk.js",
"static/js/13.1623337e.chunk.js.map": "/static/js/13.1623337e.chunk.js.map",
"static/js/14.d66df10b.chunk.js": "/static/js/14.d66df10b.chunk.js",
@@ -133,8 +133,10 @@
"static/js/64.f8205418.chunk.js.map": "/static/js/64.f8205418.chunk.js.map",
"static/js/65.3a5a1995.chunk.js": "/static/js/65.3a5a1995.chunk.js",
"static/js/65.3a5a1995.chunk.js.map": "/static/js/65.3a5a1995.chunk.js.map",
- "static/js/66.ef610dd7.chunk.js": "/static/js/66.ef610dd7.chunk.js",
- "static/js/66.ef610dd7.chunk.js.map": "/static/js/66.ef610dd7.chunk.js.map",
+ "static/js/66.bdbee425.chunk.js": "/static/js/66.bdbee425.chunk.js",
+ "static/js/66.bdbee425.chunk.js.map": "/static/js/66.bdbee425.chunk.js.map",
+ "static/js/67.fce2b980.chunk.js": "/static/js/67.fce2b980.chunk.js",
+ "static/js/67.fce2b980.chunk.js.map": "/static/js/67.fce2b980.chunk.js.map",
"index.html": "/index.html",
"static/css/main.27cf20e8.chunk.css.map": "/static/css/main.27cf20e8.chunk.css.map",
"static/js/2.02aed69b.chunk.js.LICENSE.txt": "/static/js/2.02aed69b.chunk.js.LICENSE.txt",
@@ -156,12 +158,12 @@
"static/media/btw_VoteVolt_Balken.png": "/static/media/btw_VoteVolt_Balken.7c330f71.png",
"static/media/btw_VoteVolt_Sterne_bunt.png": "/static/media/btw_VoteVolt_Sterne_bunt.4b42c584.png",
"static/media/btw_VoteVolt_Sterne_lila.png": "/static/media/btw_VoteVolt_Sterne_lila.02f0580d.png",
- "static/media/de.ftl": "/static/media/de.7506d5a9.ftl",
- "static/media/en.ftl": "/static/media/en.bbc840ca.ftl",
+ "static/media/de.ftl": "/static/media/de.48ed0fbc.ftl",
+ "static/media/en.ftl": "/static/media/en.698993b1.ftl",
"static/media/es.ftl": "/static/media/es.126119ba.ftl",
"static/media/fr.ftl": "/static/media/fr.3b8fe850.ftl",
"static/media/it.ftl": "/static/media/it.b3345292.ftl",
- "static/media/nl.ftl": "/static/media/nl.5eb5d89c.ftl",
+ "static/media/nl.ftl": "/static/media/nl.544245af.ftl",
"static/media/pl.ftl": "/static/media/pl.bc186684.ftl",
"static/media/pride-2022-1.png": "/static/media/pride-2022-1.128c6b16.png",
"static/media/pride-2022-2.png": "/static/media/pride-2022-2.826bf2cd.png",
@@ -170,9 +172,9 @@
"static/media/ukraine.png": "/static/media/ukraine.d9765a7e.png"
},
"entrypoints": [
- "static/js/runtime-main.a185044a.js",
+ "static/js/runtime-main.a3cc4f85.js",
"static/js/2.02aed69b.chunk.js",
"static/css/main.27cf20e8.chunk.css",
- "static/js/main.9487faa4.chunk.js"
+ "static/js/main.4435a7aa.chunk.js"
]
}
\ No newline at end of file
diff --git a/index.html b/index.html
index b44feb0..0c0b58e 100644
--- a/index.html
+++ b/index.html
@@ -1 +1 @@
-
Volt Social Media Frame Generator
\ No newline at end of file
+Volt Social Media Frame Generator
\ No newline at end of file
diff --git a/static/js/10.c9e8365a.chunk.js b/static/js/10.5a4a0771.chunk.js
similarity index 55%
rename from static/js/10.c9e8365a.chunk.js
rename to static/js/10.5a4a0771.chunk.js
index 937dcb0..2b1df1a 100644
--- a/static/js/10.c9e8365a.chunk.js
+++ b/static/js/10.5a4a0771.chunk.js
@@ -1,2 +1,2 @@
-(this["webpackJsonpprofile-picture-generator"]=this["webpackJsonpprofile-picture-generator"]||[]).push([[10],{111:function(t,e,p){"use strict";p.r(e),e.default=p.p+"static/media/pt.1d8c1bab.ftl"}}]);
-//# sourceMappingURL=10.c9e8365a.chunk.js.map
\ No newline at end of file
+(this["webpackJsonpprofile-picture-generator"]=this["webpackJsonpprofile-picture-generator"]||[]).push([[10],{112:function(t,e,p){"use strict";p.r(e),e.default=p.p+"static/media/pt.1d8c1bab.ftl"}}]);
+//# sourceMappingURL=10.5a4a0771.chunk.js.map
\ No newline at end of file
diff --git a/static/js/10.c9e8365a.chunk.js.map b/static/js/10.5a4a0771.chunk.js.map
similarity index 72%
rename from static/js/10.c9e8365a.chunk.js.map
rename to static/js/10.5a4a0771.chunk.js.map
index 338fb49..bb7bba2 100644
--- a/static/js/10.c9e8365a.chunk.js.map
+++ b/static/js/10.5a4a0771.chunk.js.map
@@ -1 +1 @@
-{"version":3,"sources":["locales/pt.ftl"],"names":[],"mappings":"+IAAA,OAAe,cAA0B","file":"static/js/10.c9e8365a.chunk.js","sourcesContent":["export default __webpack_public_path__ + \"static/media/pt.1d8c1bab.ftl\";"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["locales/pt.ftl"],"names":[],"mappings":"+IAAA,OAAe,cAA0B","file":"static/js/10.5a4a0771.chunk.js","sourcesContent":["export default __webpack_public_path__ + \"static/media/pt.1d8c1bab.ftl\";"],"sourceRoot":""}
\ No newline at end of file
diff --git a/static/js/11.c6c87f3f.chunk.js b/static/js/11.285772eb.chunk.js
similarity index 55%
rename from static/js/11.c6c87f3f.chunk.js
rename to static/js/11.285772eb.chunk.js
index 5f3182e..7dab3f6 100644
--- a/static/js/11.c6c87f3f.chunk.js
+++ b/static/js/11.285772eb.chunk.js
@@ -1,2 +1,2 @@
-(this["webpackJsonpprofile-picture-generator"]=this["webpackJsonpprofile-picture-generator"]||[]).push([[11],{112:function(e,t,r){"use strict";r.r(t),t.default=r.p+"static/media/ru.9be0d24d.ftl"}}]);
-//# sourceMappingURL=11.c6c87f3f.chunk.js.map
\ No newline at end of file
+(this["webpackJsonpprofile-picture-generator"]=this["webpackJsonpprofile-picture-generator"]||[]).push([[11],{113:function(e,t,r){"use strict";r.r(t),t.default=r.p+"static/media/ru.9be0d24d.ftl"}}]);
+//# sourceMappingURL=11.285772eb.chunk.js.map
\ No newline at end of file
diff --git a/static/js/11.c6c87f3f.chunk.js.map b/static/js/11.285772eb.chunk.js.map
similarity index 72%
rename from static/js/11.c6c87f3f.chunk.js.map
rename to static/js/11.285772eb.chunk.js.map
index 270ce6b..8868b7f 100644
--- a/static/js/11.c6c87f3f.chunk.js.map
+++ b/static/js/11.285772eb.chunk.js.map
@@ -1 +1 @@
-{"version":3,"sources":["locales/ru.ftl"],"names":[],"mappings":"+IAAA,OAAe,cAA0B","file":"static/js/11.c6c87f3f.chunk.js","sourcesContent":["export default __webpack_public_path__ + \"static/media/ru.9be0d24d.ftl\";"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["locales/ru.ftl"],"names":[],"mappings":"+IAAA,OAAe,cAA0B","file":"static/js/11.285772eb.chunk.js","sourcesContent":["export default __webpack_public_path__ + \"static/media/ru.9be0d24d.ftl\";"],"sourceRoot":""}
\ No newline at end of file
diff --git a/static/js/12.87deb0a1.chunk.js b/static/js/12.2e009d98.chunk.js
similarity index 96%
rename from static/js/12.87deb0a1.chunk.js
rename to static/js/12.2e009d98.chunk.js
index c3cf8a9..b2abedb 100644
--- a/static/js/12.87deb0a1.chunk.js
+++ b/static/js/12.2e009d98.chunk.js
@@ -1,2 +1,2 @@
-(this["webpackJsonpprofile-picture-generator"]=this["webpackJsonpprofile-picture-generator"]||[]).push([[12],{113:function(t,n,e){"use strict";e.r(n),e.d(n,"getCLS",(function(){return v})),e.d(n,"getFCP",(function(){return g})),e.d(n,"getFID",(function(){return h})),e.d(n,"getLCP",(function(){return y})),e.d(n,"getTTFB",(function(){return F}));var i,a,r=function(){return"".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12)},o=function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1;return{name:t,value:n,delta:0,entries:[],id:r(),isFinal:!1}},u=function(t,n){try{if(PerformanceObserver.supportedEntryTypes.includes(t)){var e=new PerformanceObserver((function(t){return t.getEntries().map(n)}));return e.observe({type:t,buffered:!0}),e}}catch(t){}},c=!1,s=!1,p=function(t){c=!t.persisted},f=function(){addEventListener("pagehide",p),addEventListener("beforeunload",(function(){}))},d=function(t){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];s||(f(),s=!0),addEventListener("visibilitychange",(function(n){var e=n.timeStamp;"hidden"===document.visibilityState&&t({timeStamp:e,isUnloading:c})}),{capture:!0,once:n})},l=function(t,n,e,i){var a;return function(){e&&n.isFinal&&e.disconnect(),n.value>=0&&(i||n.isFinal||"hidden"===document.visibilityState)&&(n.delta=n.value-(a||0),(n.delta||n.isFinal||void 0===a)&&(t(n),a=n.value))}},v=function(t){var n,e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=o("CLS",0),a=function(t){t.hadRecentInput||(i.value+=t.value,i.entries.push(t),n())},r=u("layout-shift",a);r&&(n=l(t,i,r,e),d((function(t){var e=t.isUnloading;r.takeRecords().map(a),e&&(i.isFinal=!0),n()})))},m=function(){return void 0===i&&(i="hidden"===document.visibilityState?0:1/0,d((function(t){var n=t.timeStamp;return i=n}),!0)),{get timeStamp(){return i}}},g=function(t){var n,e=o("FCP"),i=m(),a=u("paint",(function(t){"first-contentful-paint"===t.name&&t.startTime1&&void 0!==arguments[1]&&arguments[1],i=o("LCP"),a=m(),r=function(t){var e=t.startTime;e1&&void 0!==arguments[1]?arguments[1]:-1;return{name:t,value:n,delta:0,entries:[],id:r(),isFinal:!1}},u=function(t,n){try{if(PerformanceObserver.supportedEntryTypes.includes(t)){var e=new PerformanceObserver((function(t){return t.getEntries().map(n)}));return e.observe({type:t,buffered:!0}),e}}catch(t){}},c=!1,s=!1,p=function(t){c=!t.persisted},f=function(){addEventListener("pagehide",p),addEventListener("beforeunload",(function(){}))},d=function(t){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];s||(f(),s=!0),addEventListener("visibilitychange",(function(n){var e=n.timeStamp;"hidden"===document.visibilityState&&t({timeStamp:e,isUnloading:c})}),{capture:!0,once:n})},l=function(t,n,e,i){var a;return function(){e&&n.isFinal&&e.disconnect(),n.value>=0&&(i||n.isFinal||"hidden"===document.visibilityState)&&(n.delta=n.value-(a||0),(n.delta||n.isFinal||void 0===a)&&(t(n),a=n.value))}},v=function(t){var n,e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=o("CLS",0),a=function(t){t.hadRecentInput||(i.value+=t.value,i.entries.push(t),n())},r=u("layout-shift",a);r&&(n=l(t,i,r,e),d((function(t){var e=t.isUnloading;r.takeRecords().map(a),e&&(i.isFinal=!0),n()})))},m=function(){return void 0===i&&(i="hidden"===document.visibilityState?0:1/0,d((function(t){var n=t.timeStamp;return i=n}),!0)),{get timeStamp(){return i}}},g=function(t){var n,e=o("FCP"),i=m(),a=u("paint",(function(t){"first-contentful-paint"===t.name&&t.startTime1&&void 0!==arguments[1]&&arguments[1],i=o("LCP"),a=m(),r=function(t){var e=t.startTime;e1&&void 0!==arguments[1]?arguments[1]:-1;return{name:t,value:n,delta:0,entries:[],id:e(),isFinal:!1}},a=function(t,n){try{if(PerformanceObserver.supportedEntryTypes.includes(t)){var e=new PerformanceObserver((function(t){return t.getEntries().map(n)}));return e.observe({type:t,buffered:!0}),e}}catch(t){}},r=!1,o=!1,s=function(t){r=!t.persisted},u=function(){addEventListener(\"pagehide\",s),addEventListener(\"beforeunload\",(function(){}))},c=function(t){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];o||(u(),o=!0),addEventListener(\"visibilitychange\",(function(n){var e=n.timeStamp;\"hidden\"===document.visibilityState&&t({timeStamp:e,isUnloading:r})}),{capture:!0,once:n})},l=function(t,n,e,i){var a;return function(){e&&n.isFinal&&e.disconnect(),n.value>=0&&(i||n.isFinal||\"hidden\"===document.visibilityState)&&(n.delta=n.value-(a||0),(n.delta||n.isFinal||void 0===a)&&(t(n),a=n.value))}},p=function(t){var n,e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=i(\"CLS\",0),o=function(t){t.hadRecentInput||(r.value+=t.value,r.entries.push(t),n())},s=a(\"layout-shift\",o);s&&(n=l(t,r,s,e),c((function(t){var e=t.isUnloading;s.takeRecords().map(o),e&&(r.isFinal=!0),n()})))},d=function(){return void 0===t&&(t=\"hidden\"===document.visibilityState?0:1/0,c((function(n){var e=n.timeStamp;return t=e}),!0)),{get timeStamp(){return t}}},v=function(t){var n,e=i(\"FCP\"),r=d(),o=a(\"paint\",(function(t){\"first-contentful-paint\"===t.name&&t.startTime1&&void 0!==arguments[1]&&arguments[1],r=i(\"LCP\"),o=d(),s=function(t){var e=t.startTime;e1&&void 0!==arguments[1]?arguments[1]:-1;return{name:t,value:n,delta:0,entries:[],id:e(),isFinal:!1}},a=function(t,n){try{if(PerformanceObserver.supportedEntryTypes.includes(t)){var e=new PerformanceObserver((function(t){return t.getEntries().map(n)}));return e.observe({type:t,buffered:!0}),e}}catch(t){}},r=!1,o=!1,s=function(t){r=!t.persisted},u=function(){addEventListener(\"pagehide\",s),addEventListener(\"beforeunload\",(function(){}))},c=function(t){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];o||(u(),o=!0),addEventListener(\"visibilitychange\",(function(n){var e=n.timeStamp;\"hidden\"===document.visibilityState&&t({timeStamp:e,isUnloading:r})}),{capture:!0,once:n})},l=function(t,n,e,i){var a;return function(){e&&n.isFinal&&e.disconnect(),n.value>=0&&(i||n.isFinal||\"hidden\"===document.visibilityState)&&(n.delta=n.value-(a||0),(n.delta||n.isFinal||void 0===a)&&(t(n),a=n.value))}},p=function(t){var n,e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=i(\"CLS\",0),o=function(t){t.hadRecentInput||(r.value+=t.value,r.entries.push(t),n())},s=a(\"layout-shift\",o);s&&(n=l(t,r,s,e),c((function(t){var e=t.isUnloading;s.takeRecords().map(o),e&&(r.isFinal=!0),n()})))},d=function(){return void 0===t&&(t=\"hidden\"===document.visibilityState?0:1/0,c((function(n){var e=n.timeStamp;return t=e}),!0)),{get timeStamp(){return t}}},v=function(t){var n,e=i(\"FCP\"),r=d(),o=a(\"paint\",(function(t){\"first-contentful-paint\"===t.name&&t.startTime1&&void 0!==arguments[1]&&arguments[1],r=i(\"LCP\"),o=d(),s=function(t){var e=t.startTime;e0})))).map(function(){var e=Object(f.a)(b.a.mark((function e(t){var a,c;return b.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(a=t,""===t){e.next=5;break}return e.next=4,n(43)("./".concat(t,".png"));case 4:a=e.sent.default;case 5:return c=A[t]||t,e.abrupt("return",{name:c,src:a});case 7:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}())).then((function(e){l(e),p(e[0])}));case 1:case"end":return e.stop()}}),e)})))).apply(this,arguments)}!function(){e.apply(this,arguments)}()}),[w]);var m=Object(o.useCallback)((function(e){p(e)}),[p]);return Object(o.useEffect)((function(){t(j)}),[t,j]),Object(r.jsx)("div",{className:"HashtagChooser",children:u.map((function(e){var t=e.src,n=g===t;return Object(r.jsx)("button",{"data-src":t,className:n?"isInRow choosen":"isInRow",onClick:function(){return m(e)},children:""===e.name?a("button_no_hashtag"):e.name},e.name)}))})})),D=n(28),Q=n.n(D),H=n(29),T=n.n(H);function U(e,t,n){return Math.min(Math.max(t,e),n)}var N=function(e){var t=e.onChange,n=e.backgroundURL,a=e.backgroundRatio,s=e.frameURL,i=e.hashtagURL,u=Object(o.useRef)(null),O=Object(o.useRef)(null),l=Object(o.useState)(!1),h=Object(c.a)(l,2),d=h[0],j=h[1],p=Object(o.useState)(null),b=Object(c.a)(p,2),f=b[0],g=b[1],w=Object(o.useState)(null),m=Object(c.a)(w,2),x=m[0],v=m[1],A=Object(o.useState)(0),C=Object(c.a)(A,2),D=C[0],H=C[1],N=Object(o.useState)(0),k=Object(c.a)(N,2),S=k[0],F=k[1],E=Object(o.useState)(0),_=Object(c.a)(E,2),M=_[0],y=_[1],K=Object(o.useState)(0),R=Object(c.a)(K,2),B=R[0],I=R[1],L=Object(o.useState)(1),V=Object(c.a)(L,2),P=V[0],Y=V[1],G=Object(o.useState)(300),z=Object(c.a)(G,2),J=z[0],X=z[1],W=Object(o.useState)(300),Z=Object(c.a)(W,2),q=Z[0],$=Z[1],ee=Object(o.useState)(300),te=Object(c.a)(ee,2),ne=te[0],ae=te[1],ce=Object(o.useState)(300),re=Object(c.a)(ce,2),oe=re[0],se=re[1],ie=Object(o.useState)(0),ue=Object(c.a)(ie,2),Oe=ue[0],le=ue[1],he=Object(o.useState)(0),de=Object(c.a)(he,2),je=de[0],pe=de[1],be=Object(o.useState)(0),fe=Object(c.a)(be,2),ge=fe[0],we=fe[1],me=Object(o.useState)(0),xe=Object(c.a)(me,2),ve=xe[0],Ae=xe[1];Object(o.useEffect)((function(){t&&t({x:D,y:S,scale:P})}),[t,D,S,P]),Object(o.useEffect)((function(){if(u&&u.current){var e=u.current.offsetWidth,t=u.current.offsetHeight;se(t),ae(e);var n=1,c=1;a<1?n=1/a:a>1&&(c=1*a),X(n),$(c)}}),[a]),Object(o.useEffect)((function(){var e=function(e,t,n,a,c){var r=Math.max(0,e*n-a)/2,o=Math.max(0,t*n-c)/2;return{rangeMaxX:r,rangeMinX:0-r,rangeMaxY:o,rangeMinY:0-o}}(J*ne,q*oe,P,ne,oe),t=e.rangeMinX,n=e.rangeMinY,a=e.rangeMaxX,c=e.rangeMaxY;le(t),pe(n),we(a),Ae(c)}),[J,q,ne,oe,P]),Object(o.useEffect)((function(){H(0),F(0),y(0),I(0),Y(1)}),[n]);var Ce=Object(o.useCallback)((function(e){var t=1*e.target.dataset.x,n=1*e.target.dataset.y,a=U(t+e.deltaX,Oe,ge),c=U(n+e.deltaY,je,ve);e.isFinal?(H(a||0),F(c||0),y(0),I(0)):(y(a-t||0),I(c-n||0))}),[Oe,je,ge,ve]),De=Object(o.useCallback)((function(e,t,n,a){e.preventDefault();var c=U(1*e.target.dataset.scale+t/200,1,8);Y(c||1);var r=1*e.target.dataset.x,o=1*e.target.dataset.y;H(U(r,Oe,ge)||0),F(U(o,je,ve)||0)}),[Oe,je,ge,ve]);return Object(o.useEffect)((function(){if(!d&&u&&u.current){var e=u.current;e.addEventListener("mousedown",(function(e){e.preventDefault()}),!1),e.addEventListener("touchstart",(function(e){e.preventDefault()}),!1),e.addEventListener("touchend",(function(e){e.preventDefault()}),!1),e.addEventListener("touchmove",(function(e){e.preventDefault()}),!1),g(new Q.a(e,{direction:"DIRECTION_ALL"})),v(T()(e)),j(!0)}}),[u,d]),Object(o.useEffect)((function(){if(f&&x&&d&&u&&u.current)return f.on("pan",Ce),x.wheel(De),function(){f.off("pan",Ce),x.unwheel()}}),[u,Ce,De,d,f,x]),Object(r.jsxs)("div",{className:"Editor",ref:u,"data-x":D,"data-y":S,"data-scale":P,children:[Object(r.jsx)("img",{src:n,ref:O,alt:"",className:"background",style:{width:100*J+"%",height:100*q+"%",transform:"translate3d(calc(-50% + ".concat(D+M,"px), calc(-50% + ").concat(S+B,"px), 0) scale(").concat(P,",").concat(P,")")}}),Object(r.jsx)("img",{src:s,alt:"",className:"foreground"}),Object(r.jsx)("img",{src:i,alt:"",className:"hashtag"})]})},k=n.p+"static/media/VoltLogoPurple.125355f6.svg",S="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABDgAAAQ4AgMAAACRfoQcAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAJUExURVAjeFAjeE8jd3Yl3xwAAAADdFJOU//+/Q3dsqEAAATsSURBVHgB7dAxAQAABAAwQtI/ipMCvi3CgiMV6NChQ4cOHTp06NChQ4cOHTp06NChAx06dOjQoUOHDh06dOjQoUOHDh06dOhAhw4dOnTo0KFDhw4dOnTo0KFDhw4dOtChQ4cOHTp06NChQ4cOHTp06NChQ4cOdOjQoUOHDh06dOjQoUOHDh06dOjQoQMdOnTo0KFDhw4dOnTo0KFDhw4dOnToQIcOHTp06NChQ4cOHTp06NChQ4cOHejQoUOHDh06dOjQoUOHDh06dOjQoUMHOnTo0KFDhw4dOnTo0KFDhw4dOnTo0IEOHTp06NChQ4cOHTp06NChQ4cOHTp0oEOHDh06dOjQoUOHDh06dOjQoUOHDh3o0KFDhw4dOnTo0KFDhw4dOnTo0KFDBzp06NChQ4cOHTp06NChQ4cOHTp06NChQIcOHTp06NChQ4cOHTp06NChQ4cOHejQoUOHDh06dOjQoUOHDh06dOjQoUMHOnTo0KFDhw4dOnTo0KFDhw4dOnTo0IEOHTp06NChQ4cOHTp06NChQ4cOHTp0oEOHDh06dOjQoUOHDh06dOjQoUOHDh3o0KFDhw4dOnTo0KFDhw4dOnTo0KFDBzp06NChQ4cOHTp06NChQ4cOHTp06ECHDh06dOjQoUOHDh06dOjQoUOHDh060KFDhw4dOnTo0KFDhw4dOnTo0KFDhw506NChQ4cOHTp06NChQ4cOHTp06NChAx06dOjQoUOHDh06dOjQoUOHDh06dOhAhw4dOnTo0KFDhw4dOnTo0KFDhw4dOtChQ4cOHTp06NChQ4cOHTp06NChQ4cOBTp06NChQ4cOHTp06NChQ4cOHTp06ECHDh06dOjQoUOHDh06dOjQoUOHDh060KFDhw4dOnTo0KFDhw4dOnTo0KFDhw506NChQ4cOHTp06NChQ4cOHTp06NChAx06dOjQoUOHDh06dOjQoUOHDh06dOhAhw4dOnTo0KFDhw4dOnTo0KFDhw4dOtChQ4cOHTp06NChQ4cOHTp06NChQwc6dOjQoUOHDh06dOjQoUOHDh06dOjQgQ4dOnTo0KFDhw4dOnTo0KFDhw4dOnSgQ4cOHTp06NChQ4cOHTp06NChQ4cOHTx06NChQ4cOdOjQoUOHDh06dOjQoUOHDh06dOjQoQMdOnTo0KFDhw4dOnTo0KFDhw4dOnToQIcOHTp06NChQ4cOHTp06NChQ4cOHTrQoUOHDh06dOjQoUOHDh06dOjQoUOHDnTo0KFDhw4dOnTo0KFDhw4dOnTo0KEDHTp06NChQ4cOHTp06NChQ4cOHTp0oEOHDh06dOjQoUOHDh06dOjQoUOHDh3o0KFDhw4dOnTo0KFDhw4dOnTo0KFDBzp06NChQ4cOHTp06NChQ4cOHTp06NCBDh06dOjQoUOHDh06dOjQoUOHDh06dKBDhw4dOnTo0KFDhw4dOnTo0KFDhw4d6NChQ4cOHTp06NChQ4cOHTp06NChQ4cCHTp06NChQ4cOHTp06NChQ4cOHTp0oEOHDh06dOjQoUOHDh06dOjQoUOHDh3o0KFDhw4dOnTo0KFDhw4dOnTo0KFDBzp06NChQ4cOHTp06NChQ4cOHTp06NCBDh06dOjQoUOHDh06dOjQoUOHDh06dKBDhw4dOnTo0KFDhw4dOnTo0KFDhw4dxeoB30xd38yzCvgAAAAASUVORK5CYII=",F="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAALSURBVHgBY2BgAAAAAwABjPg5OgAAAABJRU5ErkJggg==",E=1080;function _(e){var t=e.href,n=e.name,a=e.target,c=e.children,s=Object(h.a)(e,["href","name","target","children"]),i=Object(o.useCallback)((function(e){return window.umami&&n&&window.umami.track("A: "+n),a?window.open(t,a):setTimeout((function(){window.location=t}),200),e.preventDefault(),!1}),[t,n,a]);return Object(r.jsx)("a",Object(l.a)(Object(l.a)({},s),{},{href:t,onClick:i,children:c}))}var M=v((function(e){var t=e.getString,n=e.locales,a=e.currentLocale,s=e.onLanguageChange,i=Object(o.useState)(null),u=Object(c.a)(i,2),h=u[0],p=u[1],b=Object(o.useState)(null),f=Object(c.a)(b,2),w=f[0],m=f[1],v=Object(o.useState)(null),A=Object(c.a)(v,2),D=A[0],Q=A[1],H=Object(o.useState)(1),T=Object(c.a)(H,2),U=T[0],M=T[1],y=Object(o.useState)(null),K=Object(c.a)(y,2),R=K[0],B=K[1],I=h?h.src:null,L=w?w.src:null,V=Object(o.useState)(0),P=Object(c.a)(V,2),Y=P[0],G=P[1],z=Object(o.useState)(0),J=Object(c.a)(z,2),X=J[0],W=J[1],Z=Object(o.useState)({x:0,y:0,scale:1}),q=Object(c.a)(Z,2),$=q[0],ee=q[1],te=Object(o.useCallback)((function(e){p(e)}),[p]),ne=Object(o.useCallback)((function(e){m(e)}),[m]),ae=Object(o.useCallback)((function(e){var t=e.x,n=e.y,a=e.scale;ee({x:t,y:n,scale:a})}),[]),ce=Object(o.useCallback)((function(e){if(e){var t=new FileReader;t.onload=function(t){var n=new Image;n.onload=function(){var a,c;n.width0?e[0]:"")}),[l]);return Object(r.jsx)(z,{userLocales:n,onLocaleChange:d,children:Object(r.jsx)(M,{locales:I,currentLocale:O,onLanguageChange:h})},"AppLocalizationProvider")}u.a.render(Object(r.jsx)(s.a.StrictMode,{children:Object(r.jsx)(J,{})}),document.getElementById("root")),y()}},[[49,1,2]]]);
+//# sourceMappingURL=main.4435a7aa.chunk.js.map
\ No newline at end of file
diff --git a/static/js/main.4435a7aa.chunk.js.map b/static/js/main.4435a7aa.chunk.js.map
new file mode 100644
index 0000000..3836bca
--- /dev/null
+++ b/static/js/main.4435a7aa.chunk.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["frames lazy /^/.//.*/.png$/ groupOptions: {} namespace object","hashtags lazy /^/.//.*/.png$/ groupOptions: {} namespace object","locales lazy /^/.//.*/.ftl$/ groupOptions: {} namespace object","FrameChooser.js","Localized.js","HashtagChooser.js","Editor.js","VoltLogoPurple.svg","purpleBG.png","empty_1x1.png","App.js","reportWebVitals.js","l10n.js","index.js"],"names":["map","webpackAsyncContext","req","__webpack_require__","o","Promise","resolve","then","e","Error","code","ids","id","keys","Object","module","exports","FrameChooser","onChange","useState","frames","setFrames","choosenFrame","setChoosenFrame","choosenFrameSRC","src","useEffect","a","all","frame_filename","default","name","new_frames","loadFrames","handleImageChoosing","useCallback","frame","className","frame_src_path","isChoosen","data-src","onClick","alt","Localized","props","elems","br","Fragment","children","withLocalization","Inner","l10n","React","useContext","FluentContext","createElement","getString","args","fallback","hashtagNameReplacers","hashtags","split","tag","trim","filter","length","clamp","value","min","max","Math","Editor","backgroundURL","backgroundRatio","frameURL","hashtagURL","editorRef","useRef","backgroundImageRef","hammer_got_init","set_hammer_got_init","hammertime","set_hammertime","hamster","set_hamster","x","set_x","y","set_y","add_x","set_add_x","add_y","set_add_y","scale","set_scale","photoWidth","setPhotoWidth","photoHeight","setPhotoHeight","editorWidth","setEditorWidth","editorHeight","setEditorHeight","rangeMinX","set_rangeMinX","rangeMinY","set_rangeMinY","rangeMaxX","set_rangeMaxX","rangeMaxY","set_rangeMaxY","current","new_editorWidth","offsetWidth","new_editorHeight","offsetHeight","new_photoWidth","new_photoHeight","imageWidth","imageHeight","imageScale","containerWidth","containerHeight","updateRange","handleMove","event","prev_x","target","dataset","prev_y","new_x","deltaX","new_y","deltaY","isFinal","handleScale","delta","preventDefault","new_scale","element","addEventListener","Hammer","direction","Hamster","on","wheel","off","unwheel","ref","data-x","data-y","data-scale","style","width","height","transform","frameSize","UmamiLink","href","handleClick","window","umami","track","open","setTimeout","location","locales","currentLocale","onLanguageChange","setFrame","hashtag","setHashtag","originalPhoto","setOriginalPhoto","originalPhotoRation","setOriginalPhotoRation","orientation","set_orientation","set_width","set_height","cords","setCords","handleFrame","newFrame","handleHashtag","newHashtag","handleCordsChange","handleReadFile","file","reader","FileReader","onload","reader_event","img","Image","callback","view","DataView","result","getUint16","byteLength","offset","marker","getUint32","little","tags","i","readAsArrayBuffer","slice","getOrientation","new_orientation","original_ration","readAsDataURL","handleImage","files_event","files","onDrop","acceptedFiles","handleDownload","canvas","document","ctx","getContext","alpha","translate","rotate","PI","width_scaled","height_scaled","drawImage","pngUrl","toDataURL","mergeImages","purpleBG","b64","data","body","appendChild","download","click","remove","trigger_download","frameName","hashtagName","join","useDropzone","accept","maxFiles","noKeyboard","isDragActive","getRootProps","VoltLogoPurple","tabIndex","outline","type","display","startsWith","empty_1x1","entries","locale","data-locale","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","de","en","es","pt","fr","it","nl","pl","ru","_supportedLocales_","fetchMessages","path","fetch","response","text","messages","FluentResource","createMessagesGenerator","currentLocales","fetched","reduce","obj","cur","assign","generateBundles","bundle","FluentBundle","addResource","f","AppLocalizationProvider","userLocales","onLocaleChange","ReactLocalization","getDefaultBundles","bundles","setBundles","negotiateLanguages","defaultLocale","loadBundles","AppLanguageWrapper","navigator","languages","setUserLocales","setCurrentLocale","systemLocales","Array","isArray","handleLanguageChange","handleCurrentLocalesChange","ReactDOM","render","StrictMode","getElementById"],"mappings":"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","file":"static/js/main.4435a7aa.chunk.js","sourcesContent":["var map = {\n\t\"./0xSOM.png\": [\n\t\t50,\n\t\t13\n\t],\n\t\"./2xSOM-Blue-Green.png\": [\n\t\t51,\n\t\t14\n\t],\n\t\"./2xSOM-Red-Yellow.png\": [\n\t\t52,\n\t\t15\n\t],\n\t\"./4xSOM-Blue-Red-Yellow-Green-Overflow.png\": [\n\t\t53,\n\t\t16\n\t],\n\t\"./4xSOM-Blue-Red-Yellow-Green.png\": [\n\t\t54,\n\t\t17\n\t],\n\t\"./5xSOM-Blue.png\": [\n\t\t55,\n\t\t18\n\t],\n\t\"./5xSOM-Green.png\": [\n\t\t56,\n\t\t19\n\t],\n\t\"./5xSOM-Pride.png\": [\n\t\t57,\n\t\t20\n\t],\n\t\"./5xSOM-Red.png\": [\n\t\t58,\n\t\t21\n\t],\n\t\"./5xSOM-White.png\": [\n\t\t59,\n\t\t22\n\t],\n\t\"./5xSOM-Yellow.png\": [\n\t\t60,\n\t\t23\n\t],\n\t\"./RectanglePurple.png\": [\n\t\t61,\n\t\t24\n\t],\n\t\"./Volt-Stars.png\": [\n\t\t62,\n\t\t25\n\t],\n\t\"./btw_Meine_Stimme_Balken.png\": [\n\t\t63,\n\t\t26\n\t],\n\t\"./btw_Meine_Stimme_Sterne_bunt.png\": [\n\t\t64,\n\t\t27\n\t],\n\t\"./btw_Meine_Stimme_Sterne_lila.png\": [\n\t\t65,\n\t\t28\n\t],\n\t\"./btw_VoteVolt_Balken.png\": [\n\t\t66,\n\t\t29\n\t],\n\t\"./btw_VoteVolt_Sterne_bunt.png\": [\n\t\t67,\n\t\t30\n\t],\n\t\"./btw_VoteVolt_Sterne_lila.png\": [\n\t\t68,\n\t\t31\n\t],\n\t\"./pride-2022-1.png\": [\n\t\t69,\n\t\t32\n\t],\n\t\"./pride-2022-2.png\": [\n\t\t70,\n\t\t33\n\t],\n\t\"./ukraine.png\": [\n\t\t71,\n\t\t34\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn __webpack_require__.e(ids[1]).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = 42;\nmodule.exports = webpackAsyncContext;","var map = {\n\t\"./#DeineWahl.png\": [\n\t\t72,\n\t\t35\n\t],\n\t\"./#EUReform.png\": [\n\t\t73,\n\t\t36\n\t],\n\t\"./#Europa.png\": [\n\t\t74,\n\t\t37\n\t],\n\t\"./#EuropeCares.png\": [\n\t\t75,\n\t\t38\n\t],\n\t\"./#European.png\": [\n\t\t76,\n\t\t39\n\t],\n\t\"./#FutureMadeInEurope.png\": [\n\t\t77,\n\t\t40\n\t],\n\t\"./#GeneratieEuropa.png\": [\n\t\t78,\n\t\t41\n\t],\n\t\"./#GeneratieVolt.png\": [\n\t\t79,\n\t\t42\n\t],\n\t\"./#GenerationEuropa.png\": [\n\t\t80,\n\t\t43\n\t],\n\t\"./#IkStemVolt.png\": [\n\t\t81,\n\t\t44\n\t],\n\t\"./#JetztBistDuDran.png\": [\n\t\t82,\n\t\t45\n\t],\n\t\"./#JoinTheChange.png\": [\n\t\t83,\n\t\t46\n\t],\n\t\"./#RejoinEU.png\": [\n\t\t84,\n\t\t47\n\t],\n\t\"./#ValuesOverPower.png\": [\n\t\t85,\n\t\t48\n\t],\n\t\"./#Volt.png\": [\n\t\t86,\n\t\t49\n\t],\n\t\"./#Volt21.png\": [\n\t\t87,\n\t\t50\n\t],\n\t\"./#VoltEuropa.png\": [\n\t\t88,\n\t\t51\n\t],\n\t\"./#VoltForLGBTIAQ.png\": [\n\t\t89,\n\t\t52\n\t],\n\t\"./#VoltGA.png\": [\n\t\t90,\n\t\t53\n\t],\n\t\"./#VoltRLP.png\": [\n\t\t91,\n\t\t54\n\t],\n\t\"./#VoteVolt.png\": [\n\t\t92,\n\t\t55\n\t],\n\t\"./#WirWerdenLaut.png\": [\n\t\t93,\n\t\t56\n\t],\n\t\"./#ZukunftMadeInEurope.png\": [\n\t\t94,\n\t\t57\n\t],\n\t\"./#ZweitstimmeVolt.png\": [\n\t\t95,\n\t\t58\n\t],\n\t\"./#democracy.png\": [\n\t\t96,\n\t\t59\n\t],\n\t\"./#paneuropäisch.png\": [\n\t\t97,\n\t\t60\n\t],\n\t\"./#pragmatisch.png\": [\n\t\t98,\n\t\t61\n\t],\n\t\"./#progressiv.png\": [\n\t\t99,\n\t\t62\n\t],\n\t\"./FriedenInEuropa.png\": [\n\t\t100,\n\t\t63\n\t],\n\t\"./IVotedFromAbroad.png\": [\n\t\t101,\n\t\t64\n\t],\n\t\"./PeaceInEurope.png\": [\n\t\t102,\n\t\t65\n\t],\n\t\"./Volt.png\": [\n\t\t103,\n\t\t66\n\t],\n\t\"./stemvolt.nl.png\": [\n\t\t104,\n\t\t67\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn __webpack_require__.e(ids[1]).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = 43;\nmodule.exports = webpackAsyncContext;","var map = {\n\t\"./de.ftl\": [\n\t\t105,\n\t\t3\n\t],\n\t\"./en.ftl\": [\n\t\t106,\n\t\t4\n\t],\n\t\"./es.ftl\": [\n\t\t107,\n\t\t5\n\t],\n\t\"./fr.ftl\": [\n\t\t108,\n\t\t6\n\t],\n\t\"./it.ftl\": [\n\t\t109,\n\t\t7\n\t],\n\t\"./nl.ftl\": [\n\t\t110,\n\t\t8\n\t],\n\t\"./pl.ftl\": [\n\t\t111,\n\t\t9\n\t],\n\t\"./pt.ftl\": [\n\t\t112,\n\t\t10\n\t],\n\t\"./ru.ftl\": [\n\t\t113,\n\t\t11\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn __webpack_require__.e(ids[1]).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = 48;\nmodule.exports = webpackAsyncContext;","import { useState, useEffect, useCallback } from 'react'\n\nfunction FrameChooser({ onChange }) {\n const [frames, setFrames] = useState([])\n const [choosenFrame, setChoosenFrame] = useState(null)\n\n const choosenFrameSRC = !!choosenFrame ? choosenFrame.src : null\n\n useEffect(() => {\n async function loadFrames(){\n Promise.all(\n [\n '5xSOM-Pride',\n 'ukraine',\n // 'btw_VoteVolt_Balken',\n // 'btw_Meine_Stimme_Balken',\n // 'btw_VoteVolt_Sterne_bunt',\n // 'btw_Meine_Stimme_Sterne_bunt',\n 'Volt-Stars',\n // 'btw_VoteVolt_Sterne_lila',\n // 'btw_Meine_Stimme_Sterne_lila',\n '0xSOM', // SOM = Stripes of Movement\n '5xSOM-Blue',\n '5xSOM-Green',\n '5xSOM-Red',\n '5xSOM-Yellow',\n // '5xSOM-White',\n // '2xSOM-Blue-Green',\n // '2xSOM-Red-Yellow',\n '4xSOM-Blue-Red-Yellow-Green',\n '4xSOM-Blue-Red-Yellow-Green-Overflow',\n 'RectanglePurple',\n // 'pride-2022-1',\n // 'pride-2022-2',\n ]\n .map(async frame_filename => {\n return {\n name: frame_filename,\n src: (await import(`./frames/${frame_filename}.png`)).default,\n }\n })\n )\n .then(new_frames => {\n setFrames(new_frames)\n setChoosenFrame(new_frames[0])\n })\n }\n loadFrames()\n }, [])\n\n const handleImageChoosing = useCallback(frame => {\n setChoosenFrame(frame)\n }, [setChoosenFrame])\n\n useEffect(() => {\n onChange(choosenFrame)\n }, [onChange, choosenFrame])\n\n return (\n \n {\n frames.map(frame => {\n const frame_src_path = frame.src\n const isChoosen = choosenFrameSRC === frame_src_path\n return
handleImageChoosing(frame)}\n >\n
\n
\n })\n }\n
\n )\n}\n\nexport default FrameChooser\n","import React from 'react'\nimport {\n Localized as LocalizedOriginal,\n // withLocalization,\n} from '@fluent/react'\n\nimport { FluentContext } from '../node_modules/@fluent/react/esm/context.js'\n\nconst Localized = props => (\n ,\n ...props.elems,\n }}\n >\n {props.children}\n \n)\n\n// A custom withLocalization to have an empty fallback.\n// It is nearly identical to the original.\nfunction withLocalization(Inner) {\n function WithLocalization(props) {\n const l10n = React.useContext(FluentContext)\n\n const getString = (id, args, fallback) => l10n.getString(id, args, fallback || ' ')\n\n return React.createElement(Inner, { getString, ...props })\n }\n return WithLocalization\n}\n\nexport {\n withLocalization,\n Localized,\n Localized as default,\n}\n\n/*\n\nimport { Localized, withLocalization } from '../Localized/'\n\n\nexport default withLocalization(componentName)\n\n\nimport Localized from '../Localized/'\n\n\nimport { withLocalization } from '@fluent/react'\nexport default withLocalization(componentName)\n\n*/\n","import { useState, useEffect, useCallback } from 'react'\nimport { withLocalization } from './Localized.js'\n\nconst hashtagNameReplacers = {\n 'IVotedFromAbroad': 'I voted from abroad!',\n 'PeaceInEurope': 'Peace in Europe',\n 'FriedenInEuropa': 'Frieden in Europa',\n}\n\nfunction HashtagChooser({ onChange, getString }) {\n const [frames, setFrames] = useState([])\n const [choosenFrame, setChoosenFrame] = useState(null)\n\n const choosenFrameSRC = !!choosenFrame ? choosenFrame.src : null\n\n let hashtags = getString('hashtags')\n\n useEffect(() => {\n async function loadFrames() {\n Promise.all(\n [\n '',\n ...(\n hashtags.split('\\n')\n .map(tag => tag.trim())\n .filter(tag => tag.length > 0)\n )\n ]\n .map(async frame_filename => {\n let src = frame_filename\n if (frame_filename !== '') {\n src = (await import(`./hashtags/${frame_filename}.png`)).default\n }\n\n const name = hashtagNameReplacers[frame_filename] || frame_filename\n\n return {\n name,\n src\n }\n })\n )\n .then(new_frames => {\n setFrames(new_frames)\n setChoosenFrame(new_frames[0])\n })\n }\n loadFrames()\n }, [hashtags])\n\n const handleImageChoosing = useCallback(frame => {\n setChoosenFrame(frame)\n }, [setChoosenFrame])\n\n useEffect(() => {\n onChange(choosenFrame)\n }, [onChange, choosenFrame])\n\n return (\n \n {\n frames.map(frame => {\n const frame_src_path = frame.src\n const isChoosen = choosenFrameSRC === frame_src_path\n return \n })\n }\n
\n )\n}\n\nexport default withLocalization(HashtagChooser)\n","import { useEffect, useRef, useState, useCallback } from 'react'\n\nimport Hammer from 'hammerjs'\nimport Hamster from 'hamsterjs'\n\nfunction updateRange(imageWidth, imageHeight, imageScale, containerWidth, containerHeight) {\n\n const rangeX = Math.max(0, (imageWidth * imageScale) - containerWidth)\n const rangeY = Math.max(0, (imageHeight * imageScale) - containerHeight)\n\n const rangeMaxX = (rangeX / 2)\n const rangeMinX = 0 - rangeMaxX\n\n const rangeMaxY = (rangeY / 2)\n const rangeMinY = 0 - rangeMaxY\n\n return {\n rangeMaxX,\n rangeMinX,\n rangeMaxY,\n rangeMinY,\n }\n}\n\nfunction clamp(value, min, max) {\n return Math.min(Math.max(min, value), max)\n}\n\n\n\nlet minScale = 1;\nlet maxScale = 8;\n\n\n\nfunction Editor({ onChange, backgroundURL, backgroundRatio, frameURL, hashtagURL }) {\n const editorRef = useRef(null)\n const backgroundImageRef = useRef(null)\n\n const [hammer_got_init, set_hammer_got_init] = useState(false)\n\n const [hammertime, set_hammertime] = useState(null)\n const [hamster, set_hamster] = useState(null)\n\n const [x, set_x] = useState(0)\n const [y, set_y] = useState(0)\n const [add_x, set_add_x] = useState(0)\n const [add_y, set_add_y] = useState(0)\n const [scale, set_scale] = useState(1)\n // const [add_scale, set_add_scale] = useState(0)\n\n const [photoWidth, setPhotoWidth] = useState(300)\n const [photoHeight, setPhotoHeight] = useState(300)\n const [editorWidth, setEditorWidth] = useState(300)\n const [editorHeight, setEditorHeight] = useState(300)\n\n const [rangeMinX, set_rangeMinX] = useState(0)\n const [rangeMinY, set_rangeMinY] = useState(0)\n const [rangeMaxX, set_rangeMaxX] = useState(0)\n const [rangeMaxY, set_rangeMaxY] = useState(0)\n\n useEffect(() => {\n if (!!onChange) {\n onChange({ x, y, scale})\n }\n }, [onChange, x, y, scale])\n\n useEffect(() => {\n if (!!editorRef && !!editorRef.current) {\n const new_editorWidth = editorRef.current.offsetWidth\n const new_editorHeight = editorRef.current.offsetHeight\n setEditorHeight(new_editorHeight)\n setEditorWidth(new_editorWidth)\n\n let new_photoWidth = 1\n let new_photoHeight = 1\n if (backgroundRatio < 1) {\n new_photoWidth = 1 / backgroundRatio\n } else if (backgroundRatio > 1) {\n new_photoHeight = 1 * backgroundRatio\n }\n\n setPhotoWidth(new_photoWidth)\n setPhotoHeight(new_photoHeight)\n }\n }, [backgroundRatio])\n\n useEffect(() => {\n const {\n rangeMinX,\n rangeMinY,\n rangeMaxX,\n rangeMaxY,\n } = updateRange(photoWidth * editorWidth, photoHeight * editorHeight, scale, editorWidth, editorHeight)\n\n set_rangeMinX(rangeMinX)\n set_rangeMinY(rangeMinY)\n set_rangeMaxX(rangeMaxX)\n set_rangeMaxY(rangeMaxY)\n }, [\n photoWidth,\n photoHeight,\n editorWidth,\n editorHeight,\n scale,\n ])\n\n useEffect(() => {\n set_x(0)\n set_y(0)\n set_add_x(0)\n set_add_y(0)\n set_scale(1)\n }, [backgroundURL])\n\n const handleMove = useCallback(event => {\n const prev_x = event.target.dataset.x * 1\n const prev_y = event.target.dataset.y * 1\n\n const new_x = clamp(prev_x + event.deltaX, rangeMinX, rangeMaxX)\n const new_y = clamp(prev_y + event.deltaY, rangeMinY, rangeMaxY)\n\n if (event.isFinal) {\n set_x(new_x || 0)\n set_y(new_y || 0)\n set_add_x(0)\n set_add_y(0)\n }else{\n set_add_x(new_x - prev_x || 0)\n set_add_y(new_y - prev_y || 0)\n }\n }, [\n rangeMinX,\n rangeMinY,\n rangeMaxX,\n rangeMaxY,\n ])\n\n const handleScale = useCallback((event, delta, deltaX, deltaY) => {\n event.preventDefault()\n\n const prev_scale = event.target.dataset.scale * 1\n const new_scale = clamp(prev_scale + delta / 200, minScale, maxScale)\n set_scale(new_scale || 1)\n\n const prev_x = event.target.dataset.x * 1\n const prev_y = event.target.dataset.y * 1\n set_x(clamp(prev_x, rangeMinX, rangeMaxX) || 0)\n set_y(clamp(prev_y, rangeMinY, rangeMaxY) || 0)\n }, [\n rangeMinX,\n rangeMinY,\n rangeMaxX,\n rangeMaxY,\n ])\n\n useEffect(() => {\n if (!hammer_got_init && !!editorRef && !!editorRef.current) {\n const element = editorRef.current\n\n element.addEventListener('mousedown', event => {\n event.preventDefault()\n // event.stopPropagation()\n }, false)\n element.addEventListener(\"touchstart\", event => {\n event.preventDefault()\n // event.stopPropagation()\n }, false)\n element.addEventListener(\"touchend\", event => {\n event.preventDefault()\n // event.stopPropagation()\n }, false)\n element.addEventListener(\"touchmove\", event => {\n event.preventDefault()\n // event.stopPropagation()\n }, false)\n\n set_hammertime(new Hammer(element, {\n direction: 'DIRECTION_ALL',\n }))\n\n set_hamster(Hamster(element))\n\n set_hammer_got_init(true)\n }\n }, [editorRef, hammer_got_init])\n\n useEffect(() => {\n if (!!hammertime && !!hamster && hammer_got_init && !!editorRef && !!editorRef.current) {\n hammertime.on('pan', handleMove)\n hamster.wheel(handleScale)\n\n return function () {\n hammertime.off('pan', handleMove)\n hamster.unwheel()\n }\n }\n }, [editorRef, handleMove, handleScale, hammer_got_init, hammertime, hamster])\n\n return (\n \n )\n}\n\nexport default Editor\n","export default __webpack_public_path__ + \"static/media/VoltLogoPurple.125355f6.svg\";","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABDgAAAQ4AgMAAACRfoQcAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAJUExURVAjeFAjeE8jd3Yl3xwAAAADdFJOU//+/Q3dsqEAAATsSURBVHgB7dAxAQAABAAwQtI/ipMCvi3CgiMV6NChQ4cOHTp06NChQ4cOHTp06NChAx06dOjQoUOHDh06dOjQoUOHDh06dOhAhw4dOnTo0KFDhw4dOnTo0KFDhw4dOtChQ4cOHTp06NChQ4cOHTp06NChQ4cOdOjQoUOHDh06dOjQoUOHDh06dOjQoQMdOnTo0KFDhw4dOnTo0KFDhw4dOnToQIcOHTp06NChQ4cOHTp06NChQ4cOHejQoUOHDh06dOjQoUOHDh06dOjQoUMHOnTo0KFDhw4dOnTo0KFDhw4dOnTo0IEOHTp06NChQ4cOHTp06NChQ4cOHTp0oEOHDh06dOjQoUOHDh06dOjQoUOHDh3o0KFDhw4dOnTo0KFDhw4dOnTo0KFDBzp06NChQ4cOHTp06NChQ4cOHTp06NChQIcOHTp06NChQ4cOHTp06NChQ4cOHejQoUOHDh06dOjQoUOHDh06dOjQoUMHOnTo0KFDhw4dOnTo0KFDhw4dOnTo0IEOHTp06NChQ4cOHTp06NChQ4cOHTp0oEOHDh06dOjQoUOHDh06dOjQoUOHDh3o0KFDhw4dOnTo0KFDhw4dOnTo0KFDBzp06NChQ4cOHTp06NChQ4cOHTp06ECHDh06dOjQoUOHDh06dOjQoUOHDh060KFDhw4dOnTo0KFDhw4dOnTo0KFDhw506NChQ4cOHTp06NChQ4cOHTp06NChAx06dOjQoUOHDh06dOjQoUOHDh06dOhAhw4dOnTo0KFDhw4dOnTo0KFDhw4dOtChQ4cOHTp06NChQ4cOHTp06NChQ4cOBTp06NChQ4cOHTp06NChQ4cOHTp06ECHDh06dOjQoUOHDh06dOjQoUOHDh060KFDhw4dOnTo0KFDhw4dOnTo0KFDhw506NChQ4cOHTp06NChQ4cOHTp06NChAx06dOjQoUOHDh06dOjQoUOHDh06dOhAhw4dOnTo0KFDhw4dOnTo0KFDhw4dOtChQ4cOHTp06NChQ4cOHTp06NChQwc6dOjQoUOHDh06dOjQoUOHDh06dOjQgQ4dOnTo0KFDhw4dOnTo0KFDhw4dOnSgQ4cOHTp06NChQ4cOHTp06NChQ4cOHTx06NChQ4cOdOjQoUOHDh06dOjQoUOHDh06dOjQoQMdOnTo0KFDhw4dOnTo0KFDhw4dOnToQIcOHTp06NChQ4cOHTp06NChQ4cOHTrQoUOHDh06dOjQoUOHDh06dOjQoUOHDnTo0KFDhw4dOnTo0KFDhw4dOnTo0KEDHTp06NChQ4cOHTp06NChQ4cOHTp0oEOHDh06dOjQoUOHDh06dOjQoUOHDh3o0KFDhw4dOnTo0KFDhw4dOnTo0KFDBzp06NChQ4cOHTp06NChQ4cOHTp06NCBDh06dOjQoUOHDh06dOjQoUOHDh06dKBDhw4dOnTo0KFDhw4dOnTo0KFDhw4d6NChQ4cOHTp06NChQ4cOHTp06NChQ4cCHTp06NChQ4cOHTp06NChQ4cOHTp0oEOHDh06dOjQoUOHDh06dOjQoUOHDh3o0KFDhw4dOnTo0KFDhw4dOnTo0KFDBzp06NChQ4cOHTp06NChQ4cOHTp06NCBDh06dOjQoUOHDh06dOjQoUOHDh06dKBDhw4dOnTo0KFDhw4dOnTo0KFDhw4dxeoB30xd38yzCvgAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAALSURBVHgBY2BgAAAAAwABjPg5OgAAAABJRU5ErkJggg==\"","import { useState, useCallback } from 'react'\nimport './App.css'\nimport { useDropzone } from 'react-dropzone'\nimport mergeImages from 'merge-images'\nimport FrameChooser from './FrameChooser.js'\nimport HashtagChooser from './HashtagChooser.js'\nimport Editor from './Editor.js'\nimport VoltLogoPurple from './VoltLogoPurple.svg'\nimport purpleBG from './purpleBG.png'\nimport empty_1x1 from './empty_1x1.png'\n\nimport { withLocalization, Localized } from './Localized.js'\n\nconst frameSize = 1080\n\nfunction getOrientation(file, callback) {\n // Source: http://stackoverflow.com/a/32490603\n // (With some modifications: I just made the code fit the style-guide.)\n const reader = new FileReader()\n\n reader.onload = function (event) {\n const view = new DataView(event.target.result)\n\n if (view.getUint16(0, false) !== 0xFFD8) {\n return callback(-2)\n }\n\n const length = view.byteLength\n let offset = 2\n\n while (offset < length) {\n const marker = view.getUint16(offset, false)\n offset += 2\n\n if (marker === 0xFFE1) {\n if (view.getUint32(offset += 2, false) !== 0x45786966) {\n return callback(-1)\n }\n const little = view.getUint16(offset += 6, false) === 0x4949\n offset += view.getUint32(offset + 4, little)\n const tags = view.getUint16(offset, little)\n offset += 2\n\n for (var i = 0; i < tags; i++) {\n if (view.getUint16(offset + (i * 12), little) === 0x0112) {\n return callback(view.getUint16(offset + (i * 12) + 8, little))\n }\n }\n } else if ((marker & 0xFF00) !== 0xFF00) {\n break\n } else {\n offset += view.getUint16(offset, false)\n }\n }\n return callback(-1)\n }\n\n reader.readAsArrayBuffer(file.slice(0, 64 * 1024))\n}\n\nfunction trigger_download(name, data){\n const a = document.createElement('a')\n document.body.appendChild(a)\n // a.target = '_blank'\n a.download = name\n a.href = data\n a.click()\n a.remove()\n}\n\nfunction UmamiLink({ href, name, target, children, ...props }) {\n const handleClick = useCallback(event => {\n\n if (window.umami && name) {\n window.umami.track('A: ' + name) // Log Anker / Link\n }\n\n // follow link\n if (!(!!target)) {\n setTimeout(() => {\n window.location = href\n }, 200)\n }else{\n window.open(href, target)\n }\n\n // Prevent normal href-follow\n event.preventDefault()\n return false\n }, [href, name, target])\n\n return \n {children}\n \n}\n\nfunction App({ getString, locales, currentLocale, onLanguageChange }) {\n const [frame, setFrame] = useState(null)\n const [hashtag, setHashtag] = useState(null)\n const [originalPhoto, setOriginalPhoto] = useState(null)\n const [originalPhotoRation, setOriginalPhotoRation] = useState(1)\n const [orientation, set_orientation] = useState(null)\n\n const frameURL = !!frame ? frame.src : null\n const hashtagURL = !!hashtag ? hashtag.src : null\n\n // const [combinedImage, set_combinedImage] = useState(null)\n\n const [width, set_width] = useState(0)\n const [height, set_height] = useState(0)\n\n const [cords, setCords] = useState({x:0, y:0, scale:1})\n\n const handleFrame = useCallback(newFrame => {\n setFrame(newFrame)\n }, [setFrame])\n\n const handleHashtag = useCallback(newHashtag => {\n setHashtag(newHashtag)\n }, [setHashtag])\n\n const handleCordsChange = useCallback(({x, y, scale}) => {\n setCords({ x, y, scale })\n }, [])\n\n const handleReadFile = useCallback(file => {\n if (!(!!file)) {\n return;\n }\n\n const reader = new FileReader()\n reader.onload = reader_event => {\n const img = new Image()\n img.onload = function () {\n let width, height;\n if (img.width < img.height) {\n height = (img.height / img.width) * frameSize\n width = frameSize\n } else {\n height = frameSize\n width = (img.width / img.height) * frameSize\n }\n\n getOrientation(file, new_orientation => {\n let original_ration = 1\n // use the correct image orientation\n switch (new_orientation) {\n // Source: https://stackoverflow.com/a/30242954/2387277\n // Source: https://stackoverflow.com/questions/19463126/how-to-draw-photo-with-correct-orientation-in-canvas-after-capture-photo-by-usin\n case 2:\n // horizontal flip\n original_ration = height / width\n break\n case 3:\n // 180° rotate left\n original_ration = height / width\n break\n case 4:\n // vertical flip\n original_ration = height / width\n break\n case 5:\n // vertical flip + 90 rotate right\n original_ration = width / height\n break\n case 6:\n // 90° rotate right\n original_ration = width / height\n break\n case 7:\n // horizontal flip + 90 rotate right\n original_ration = width / height\n break\n case 8:\n // 90° rotate left\n original_ration = width / height\n break\n default:\n original_ration = height / width\n break\n }\n\n set_width(width)\n set_height(height)\n setOriginalPhoto(reader_event.target.result)\n set_orientation(new_orientation)\n setOriginalPhotoRation(original_ration)\n })\n }\n img.src = reader_event.target.result\n }\n reader.readAsDataURL(file)\n }, [])\n\n const handleImage = useCallback(files_event => {\n handleReadFile(files_event.target.files[0])\n }, [handleReadFile])\n\n const onDrop = useCallback(acceptedFiles => {\n handleReadFile(acceptedFiles[0])\n }, [handleReadFile])\n\n const handleDownload = useCallback(() => {\n const img = new Image()\n img.onload = function () {\n const canvas = document.createElement('canvas')\n canvas.width = frameSize\n canvas.height = frameSize\n\n const ctx = canvas.getContext('2d', { alpha: true })\n\n // use the correct image orientation\n switch (orientation) {\n // Source: https://stackoverflow.com/a/30242954/2387277\n // Source: https://stackoverflow.com/questions/19463126/how-to-draw-photo-with-correct-orientation-in-canvas-after-capture-photo-by-usin\n case 2:\n // horizontal flip\n ctx.translate(canvas.width, 0)\n ctx.scale(-1, 1)\n break\n case 3:\n // 180° rotate left\n ctx.translate(canvas.width, canvas.height)\n ctx.rotate(Math.PI)\n break\n case 4:\n // vertical flip\n ctx.translate(0, canvas.height)\n ctx.scale(1, -1)\n break\n case 5:\n // vertical flip + 90 rotate right\n ctx.rotate(0.5 * Math.PI)\n ctx.scale(1, -1)\n break\n case 6:\n // 90° rotate right\n ctx.rotate(0.5 * Math.PI)\n ctx.translate(0, -canvas.height)\n break\n case 7:\n // horizontal flip + 90 rotate right\n ctx.rotate(0.5 * Math.PI)\n ctx.translate(canvas.width, -canvas.height)\n ctx.scale(-1, 1)\n break\n case 8:\n // 90° rotate left\n ctx.rotate(-0.5 * Math.PI)\n ctx.translate(-canvas.width, 0)\n break\n default:\n break\n }\n\n\n const width_scaled = width * cords.scale\n const height_scaled = height * cords.scale\n\n ctx.drawImage(\n img,\n cords.x * 3.5 + (frameSize - width_scaled) * 0.5,\n cords.y * 3.5 + (frameSize - height_scaled) * 0.5,\n width_scaled,\n height_scaled,\n )\n // ctx.drawImage(\n // img,\n // ((frameSize - width_scaled) * 0.5),\n // ((frameSize - height_scaled) * 0.5),\n // width_scaled,\n // height_scaled,\n // )\n\n const pngUrl = canvas.toDataURL()\n\n mergeImages([\n purpleBG,\n ...(pngUrl ? [pngUrl] : []),\n ...(frameURL ? [frameURL] : []),\n ...(hashtagURL ? [hashtagURL] : []),\n ])\n .then(b64 => {\n // set_combinedImage(b64)\n trigger_download('volt-profile-picture.png', b64)\n\n const frameName = frame.name || 'No-Frame'\n const hashtagName = hashtag.name || 'No-Hashtag'\n\n if (window.umami) {\n window.umami.track('F: ' + frameName) // Log Frame\n window.umami.track('H: ' + hashtagName) // Log Hashtag\n window.umami.track('C: ' + [frameName, hashtagName].join(' | ')) // Log Combined\n }\n })\n\n }\n img.src = originalPhoto\n }, [\n originalPhoto,\n cords.x,\n cords.y,\n cords.scale,\n orientation,\n frameURL,\n hashtagURL,\n height,\n width,\n frame,\n hashtag\n ])\n\n const { isDragActive, getRootProps } = useDropzone({\n onDrop,\n accept: 'image/*',\n maxFiles: 1,\n noKeyboard: true,\n })\n\n return (\n \n
\n
\n\n
\n \n
\n\n
\n
\n\n
\n\n {true || !!originalPhoto ? (<>\n
\n
\n {\n (frameURL || '').startsWith('/static/media/btw_')\n ? null\n : <>\n
\n
\n >\n }\n >) : null}\n\n {!!originalPhoto && !!frameURL ? (<>\n
\n {/*\n
Edit your Photo:
\n
Your can reposition the image and scale it. Use pinch-to-zoom or scroll to scale.
\n */}\n\n
\n\n
\n >) : null}\n\n
\n\n {\n !!locales && !!onLanguageChange\n ?
\n {\n Object.entries(locales)\n .map(([locale, name]) => {\n return \n })\n }\n
\n : null\n }\n
\n )\n}\nexport default withLocalization(App)\n","const reportWebVitals = onPerfEntry => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry)\n getFID(onPerfEntry)\n getFCP(onPerfEntry)\n getLCP(onPerfEntry)\n getTTFB(onPerfEntry)\n })\n }\n}\n\nexport default reportWebVitals\n","import React, { useEffect, useState } from 'react'\n\n// https://projectfluent.org/play/\n\n// import {LocalizationProvider,Localized} from '@fluent/react' // '@fluent/react/compat'\nimport { ReactLocalization, LocalizationProvider } from '@fluent/react'\nimport { FluentBundle, FluentResource } from '@fluent/bundle'\nimport { negotiateLanguages } from '@fluent/langneg'\n\n\nexport const locales = {\n de: 'Deutsch',\n en: 'English',\n es: 'Español',\n pt: 'Português',\n fr: 'Français',\n it: 'Italiano',\n nl: 'Nederlands',\n pl: 'Polska',\n ru: 'Pусский',\n}\n\nconst _supportedLocales_ = Object.keys(locales)\nconst _defaultLocale_ = 'en'\n\n\nasync function fetchMessages(locale) {\n const path = await import('./locales/' + locale + '.ftl')\n\n const response = await fetch(path.default)\n const messages = await response.text()\n\n return { [locale]: new FluentResource(messages) }\n}\n\nfunction getDefaultBundles() {\n const bundle = new FluentBundle('')\n bundle.addResource(new FluentResource(''))\n return new ReactLocalization([bundle])\n}\n\nasync function createMessagesGenerator(currentLocales) {\n const fetched = await Promise.all(\n currentLocales.map(fetchMessages)\n )\n const messages = fetched.reduce(\n (obj, cur) => Object.assign(obj, cur)\n )\n\n return function* generateBundles() {\n for (const locale of currentLocales) {\n const bundle = new FluentBundle(locale)\n bundle.addResource(messages[locale])\n yield bundle\n }\n }\n}\n\nexport function AppLocalizationProvider({ userLocales, children, onLocaleChange }){\n const [bundles, setBundles] = useState(getDefaultBundles())\n\n useEffect(() => {\n async function loadBundles() {\n const currentLocales = negotiateLanguages(\n userLocales,\n _supportedLocales_,\n { defaultLocale: _defaultLocale_ }\n )\n\n if (!!onLocaleChange) {\n onLocaleChange(currentLocales)\n }\n\n const generateBundles = await createMessagesGenerator(currentLocales)\n setBundles( new ReactLocalization(generateBundles()) )\n }\n loadBundles()\n }, [userLocales, onLocaleChange])\n\n if (!bundles) {\n // Show a loader.\n return Loading texts…
\n }\n\n return \n {children}\n \n}\n\n","import React, { useState, useEffect, useCallback } from 'react'\nimport ReactDOM from 'react-dom'\nimport App from './App'\nimport reportWebVitals from './reportWebVitals'\n\nimport 'intl-pluralrules'\nimport { AppLocalizationProvider, locales } from './l10n.js'\n\nfunction AppLanguageWrapper() {\n const [userLocales, setUserLocales] = useState(navigator.languages)\n const [currentLocale, setCurrentLocale] = useState(null)\n\n useEffect(() => {\n let systemLocales = navigator.languages\n if (window.umami && (!!systemLocales || Array.isArray(systemLocales))) {\n for (const locale of systemLocales) {\n window.umami.track('L: ' + locale) // Log Locale / Languages\n }\n }\n }, [])\n\n const handleLanguageChange = useCallback(event => {\n setUserLocales([event.target.dataset.locale])\n }, [setUserLocales])\n\n const handleCurrentLocalesChange = useCallback(currentLocales => {\n setCurrentLocale(currentLocales.length > 0 ? currentLocales[0] : '')\n }, [setCurrentLocale])\n\n return \n \n \n}\n\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n)\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals()\n"],"sourceRoot":""}
\ No newline at end of file
diff --git a/static/js/main.9487faa4.chunk.js b/static/js/main.9487faa4.chunk.js
deleted file mode 100644
index 38de6c0..0000000
--- a/static/js/main.9487faa4.chunk.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(this["webpackJsonpprofile-picture-generator"]=this["webpackJsonpprofile-picture-generator"]||[]).push([[0],{38:function(e,t,n){},42:function(e,t,n){var a={"./0xSOM.png":[50,13],"./2xSOM-Blue-Green.png":[51,14],"./2xSOM-Red-Yellow.png":[52,15],"./4xSOM-Blue-Red-Yellow-Green-Overflow.png":[53,16],"./4xSOM-Blue-Red-Yellow-Green.png":[54,17],"./5xSOM-Blue.png":[55,18],"./5xSOM-Green.png":[56,19],"./5xSOM-Pride.png":[57,20],"./5xSOM-Red.png":[58,21],"./5xSOM-White.png":[59,22],"./5xSOM-Yellow.png":[60,23],"./RectanglePurple.png":[61,24],"./Volt-Stars.png":[62,25],"./btw_Meine_Stimme_Balken.png":[63,26],"./btw_Meine_Stimme_Sterne_bunt.png":[64,27],"./btw_Meine_Stimme_Sterne_lila.png":[65,28],"./btw_VoteVolt_Balken.png":[66,29],"./btw_VoteVolt_Sterne_bunt.png":[67,30],"./btw_VoteVolt_Sterne_lila.png":[68,31],"./pride-2022-1.png":[69,32],"./pride-2022-2.png":[70,33],"./ukraine.png":[71,34]};function c(e){if(!n.o(a,e))return Promise.resolve().then((function(){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}));var t=a[e],c=t[0];return n.e(t[1]).then((function(){return n(c)}))}c.keys=function(){return Object.keys(a)},c.id=42,e.exports=c},43:function(e,t,n){var a={"./#DeineWahl.png":[72,35],"./#EUReform.png":[73,36],"./#Europa.png":[74,37],"./#EuropeCares.png":[75,38],"./#European.png":[76,39],"./#FutureMadeInEurope.png":[77,40],"./#GeneratieEuropa.png":[78,41],"./#GeneratieVolt.png":[79,42],"./#GenerationEuropa.png":[80,43],"./#IkStemVolt.png":[81,44],"./#JetztBistDuDran.png":[82,45],"./#JoinTheChange.png":[83,46],"./#RejoinEU.png":[84,47],"./#ValuesOverPower.png":[85,48],"./#Volt.png":[86,49],"./#Volt21.png":[87,50],"./#VoltEuropa.png":[88,51],"./#VoltForLGBTIAQ.png":[89,52],"./#VoltGA.png":[90,53],"./#VoltRLP.png":[91,54],"./#VoteVolt.png":[92,55],"./#WirWerdenLaut.png":[93,56],"./#ZukunftMadeInEurope.png":[94,57],"./#ZweitstimmeVolt.png":[95,58],"./#democracy.png":[96,59],"./#paneurop\xe4isch.png":[97,60],"./#pragmatisch.png":[98,61],"./#progressiv.png":[99,62],"./FriedenInEuropa.png":[100,63],"./IVotedFromAbroad.png":[101,64],"./PeaceInEurope.png":[102,65],"./stemvolt.nl.png":[103,66]};function c(e){if(!n.o(a,e))return Promise.resolve().then((function(){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}));var t=a[e],c=t[0];return n.e(t[1]).then((function(){return n(c)}))}c.keys=function(){return Object.keys(a)},c.id=43,e.exports=c},48:function(e,t,n){var a={"./de.ftl":[104,3],"./en.ftl":[105,4],"./es.ftl":[106,5],"./fr.ftl":[107,6],"./it.ftl":[108,7],"./nl.ftl":[109,8],"./pl.ftl":[110,9],"./pt.ftl":[111,10],"./ru.ftl":[112,11]};function c(e){if(!n.o(a,e))return Promise.resolve().then((function(){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}));var t=a[e],c=t[0];return n.e(t[1]).then((function(){return n(c)}))}c.keys=function(){return Object.keys(a)},c.id=48,e.exports=c},49:function(e,t,n){"use strict";n.r(t);var a=n(5),c=n(2),r=n(1),o=n(0),i=n.n(o),s=n(25),u=n.n(s),O=n(13),l=n(6),h=n(32),d=(n(38),n(30)),j=n(27),p=n(4),b=n.n(p),f=n(9);var g=function(e){var t=e.onChange,a=Object(o.useState)([]),i=Object(c.a)(a,2),s=i[0],u=i[1],O=Object(o.useState)(null),l=Object(c.a)(O,2),h=l[0],d=l[1],j=h?h.src:null;Object(o.useEffect)((function(){function e(){return(e=Object(f.a)(b.a.mark((function e(){return b.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:Promise.all(["5xSOM-Pride","ukraine","Volt-Stars","0xSOM","5xSOM-Blue","5xSOM-Green","5xSOM-Red","5xSOM-Yellow","4xSOM-Blue-Red-Yellow-Green","4xSOM-Blue-Red-Yellow-Green-Overflow","RectanglePurple","pride-2022-1","pride-2022-2"].map(function(){var e=Object(f.a)(b.a.mark((function e(t){return b.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.t0=t,e.next=3,n(42)("./".concat(t,".png"));case 3:return e.t1=e.sent.default,e.abrupt("return",{name:e.t0,src:e.t1});case 5:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}())).then((function(e){u(e),d(e[0])}));case 1:case"end":return e.stop()}}),e)})))).apply(this,arguments)}!function(){e.apply(this,arguments)}()}),[]);var p=Object(o.useCallback)((function(e){d(e)}),[d]);return Object(o.useEffect)((function(){t(h)}),[t,h]),Object(r.jsx)("div",{className:"FrameChooser",children:s.map((function(e){var t=e.src,n=j===t;return Object(r.jsx)("div",{"data-src":t,className:n?"frame choosen":"frame",onClick:function(){return p(e)},children:Object(r.jsx)("img",{alt:e.name,src:t})},t)}))})},w=n(17),m=n(10),x=function(e){return Object(r.jsx)(w.b,Object(l.a)(Object(l.a)({},e),{},{elems:Object(l.a)({br:Object(r.jsx)("br",{})},e.elems),children:Object(r.jsx)(i.a.Fragment,{children:e.children})}),e.id)};function v(e){return function(t){var n=i.a.useContext(m.a);return i.a.createElement(e,Object(l.a)({getString:function(e,t,a){return n.getString(e,t,a||" ")}},t))}}var A={IVotedFromAbroad:"I voted from abroad!",PeaceInEurope:"Peace in Europe",FriedenInEuropa:"Frieden in Europa"};var C=v((function(e){var t=e.onChange,a=e.getString,i=Object(o.useState)([]),s=Object(c.a)(i,2),u=s[0],l=s[1],h=Object(o.useState)(null),d=Object(c.a)(h,2),j=d[0],p=d[1],g=j?j.src:null,w=a("hashtags");Object(o.useEffect)((function(){function e(){return(e=Object(f.a)(b.a.mark((function e(){return b.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:Promise.all([""].concat(Object(O.a)(w.split("\n").map((function(e){return e.trim()})).filter((function(e){return e.length>0})))).map(function(){var e=Object(f.a)(b.a.mark((function e(t){var a,c;return b.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(a=t,""===t){e.next=5;break}return e.next=4,n(43)("./".concat(t,".png"));case 4:a=e.sent.default;case 5:return c=A[t]||t,e.abrupt("return",{name:c,src:a});case 7:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}())).then((function(e){l(e),p(e[0])}));case 1:case"end":return e.stop()}}),e)})))).apply(this,arguments)}!function(){e.apply(this,arguments)}()}),[w]);var m=Object(o.useCallback)((function(e){p(e)}),[p]);return Object(o.useEffect)((function(){t(j)}),[t,j]),Object(r.jsx)("div",{className:"HashtagChooser",children:u.map((function(e){var t=e.src,n=g===t;return Object(r.jsx)("button",{"data-src":t,className:n?"isInRow choosen":"isInRow",onClick:function(){return m(e)},children:""===e.name?a("button_no_hashtag"):e.name},e.name)}))})})),D=n(28),Q=n.n(D),H=n(29),T=n.n(H);function U(e,t,n){return Math.min(Math.max(t,e),n)}var N=function(e){var t=e.onChange,n=e.backgroundURL,a=e.backgroundRatio,i=e.frameURL,s=e.hashtagURL,u=Object(o.useRef)(null),O=Object(o.useRef)(null),l=Object(o.useState)(!1),h=Object(c.a)(l,2),d=h[0],j=h[1],p=Object(o.useState)(null),b=Object(c.a)(p,2),f=b[0],g=b[1],w=Object(o.useState)(null),m=Object(c.a)(w,2),x=m[0],v=m[1],A=Object(o.useState)(0),C=Object(c.a)(A,2),D=C[0],H=C[1],N=Object(o.useState)(0),k=Object(c.a)(N,2),S=k[0],F=k[1],E=Object(o.useState)(0),_=Object(c.a)(E,2),M=_[0],y=_[1],K=Object(o.useState)(0),R=Object(c.a)(K,2),B=R[0],I=R[1],L=Object(o.useState)(1),P=Object(c.a)(L,2),V=P[0],Y=P[1],G=Object(o.useState)(300),z=Object(c.a)(G,2),J=z[0],X=z[1],W=Object(o.useState)(300),Z=Object(c.a)(W,2),q=Z[0],$=Z[1],ee=Object(o.useState)(300),te=Object(c.a)(ee,2),ne=te[0],ae=te[1],ce=Object(o.useState)(300),re=Object(c.a)(ce,2),oe=re[0],ie=re[1],se=Object(o.useState)(0),ue=Object(c.a)(se,2),Oe=ue[0],le=ue[1],he=Object(o.useState)(0),de=Object(c.a)(he,2),je=de[0],pe=de[1],be=Object(o.useState)(0),fe=Object(c.a)(be,2),ge=fe[0],we=fe[1],me=Object(o.useState)(0),xe=Object(c.a)(me,2),ve=xe[0],Ae=xe[1];Object(o.useEffect)((function(){t&&t({x:D,y:S,scale:V})}),[t,D,S,V]),Object(o.useEffect)((function(){if(u&&u.current){var e=u.current.offsetWidth,t=u.current.offsetHeight;ie(t),ae(e);var n=1,c=1;a<1?n=1/a:a>1&&(c=1*a),X(n),$(c)}}),[a]),Object(o.useEffect)((function(){var e=function(e,t,n,a,c){var r=Math.max(0,e*n-a)/2,o=Math.max(0,t*n-c)/2;return{rangeMaxX:r,rangeMinX:0-r,rangeMaxY:o,rangeMinY:0-o}}(J*ne,q*oe,V,ne,oe),t=e.rangeMinX,n=e.rangeMinY,a=e.rangeMaxX,c=e.rangeMaxY;le(t),pe(n),we(a),Ae(c)}),[J,q,ne,oe,V]),Object(o.useEffect)((function(){H(0),F(0),y(0),I(0),Y(1)}),[n]);var Ce=Object(o.useCallback)((function(e){var t=1*e.target.dataset.x,n=1*e.target.dataset.y,a=U(t+e.deltaX,Oe,ge),c=U(n+e.deltaY,je,ve);e.isFinal?(H(a||0),F(c||0),y(0),I(0)):(y(a-t||0),I(c-n||0))}),[Oe,je,ge,ve]),De=Object(o.useCallback)((function(e,t,n,a){e.preventDefault();var c=U(1*e.target.dataset.scale+t/200,1,8);Y(c||1);var r=1*e.target.dataset.x,o=1*e.target.dataset.y;H(U(r,Oe,ge)||0),F(U(o,je,ve)||0)}),[Oe,je,ge,ve]);return Object(o.useEffect)((function(){if(!d&&u&&u.current){var e=u.current;e.addEventListener("mousedown",(function(e){e.preventDefault()}),!1),e.addEventListener("touchstart",(function(e){e.preventDefault()}),!1),e.addEventListener("touchend",(function(e){e.preventDefault()}),!1),e.addEventListener("touchmove",(function(e){e.preventDefault()}),!1),g(new Q.a(e,{direction:"DIRECTION_ALL"})),v(T()(e)),j(!0)}}),[u,d]),Object(o.useEffect)((function(){if(f&&x&&d&&u&&u.current)return f.on("pan",Ce),x.wheel(De),function(){f.off("pan",Ce),x.unwheel()}}),[u,Ce,De,d,f,x]),Object(r.jsxs)("div",{className:"Editor",ref:u,"data-x":D,"data-y":S,"data-scale":V,children:[Object(r.jsx)("img",{src:n,ref:O,alt:"",className:"background",style:{width:100*J+"%",height:100*q+"%",transform:"translate3d(calc(-50% + ".concat(D+M,"px), calc(-50% + ").concat(S+B,"px), 0) scale(").concat(V,",").concat(V,")")}}),Object(r.jsx)("img",{src:i,alt:"",className:"foreground"}),Object(r.jsx)("img",{src:s,alt:"",className:"hashtag"})]})},k=n.p+"static/media/VoltLogoPurple.125355f6.svg",S="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABDgAAAQ4AgMAAACRfoQcAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAJUExURVAjeFAjeE8jd3Yl3xwAAAADdFJOU//+/Q3dsqEAAATsSURBVHgB7dAxAQAABAAwQtI/ipMCvi3CgiMV6NChQ4cOHTp06NChQ4cOHTp06NChAx06dOjQoUOHDh06dOjQoUOHDh06dOhAhw4dOnTo0KFDhw4dOnTo0KFDhw4dOtChQ4cOHTp06NChQ4cOHTp06NChQ4cOdOjQoUOHDh06dOjQoUOHDh06dOjQoQMdOnTo0KFDhw4dOnTo0KFDhw4dOnToQIcOHTp06NChQ4cOHTp06NChQ4cOHejQoUOHDh06dOjQoUOHDh06dOjQoUMHOnTo0KFDhw4dOnTo0KFDhw4dOnTo0IEOHTp06NChQ4cOHTp06NChQ4cOHTp0oEOHDh06dOjQoUOHDh06dOjQoUOHDh3o0KFDhw4dOnTo0KFDhw4dOnTo0KFDBzp06NChQ4cOHTp06NChQ4cOHTp06NChQIcOHTp06NChQ4cOHTp06NChQ4cOHejQoUOHDh06dOjQoUOHDh06dOjQoUMHOnTo0KFDhw4dOnTo0KFDhw4dOnTo0IEOHTp06NChQ4cOHTp06NChQ4cOHTp0oEOHDh06dOjQoUOHDh06dOjQoUOHDh3o0KFDhw4dOnTo0KFDhw4dOnTo0KFDBzp06NChQ4cOHTp06NChQ4cOHTp06ECHDh06dOjQoUOHDh06dOjQoUOHDh060KFDhw4dOnTo0KFDhw4dOnTo0KFDhw506NChQ4cOHTp06NChQ4cOHTp06NChAx06dOjQoUOHDh06dOjQoUOHDh06dOhAhw4dOnTo0KFDhw4dOnTo0KFDhw4dOtChQ4cOHTp06NChQ4cOHTp06NChQ4cOBTp06NChQ4cOHTp06NChQ4cOHTp06ECHDh06dOjQoUOHDh06dOjQoUOHDh060KFDhw4dOnTo0KFDhw4dOnTo0KFDhw506NChQ4cOHTp06NChQ4cOHTp06NChAx06dOjQoUOHDh06dOjQoUOHDh06dOhAhw4dOnTo0KFDhw4dOnTo0KFDhw4dOtChQ4cOHTp06NChQ4cOHTp06NChQwc6dOjQoUOHDh06dOjQoUOHDh06dOjQgQ4dOnTo0KFDhw4dOnTo0KFDhw4dOnSgQ4cOHTp06NChQ4cOHTp06NChQ4cOHTx06NChQ4cOdOjQoUOHDh06dOjQoUOHDh06dOjQoQMdOnTo0KFDhw4dOnTo0KFDhw4dOnToQIcOHTp06NChQ4cOHTp06NChQ4cOHTrQoUOHDh06dOjQoUOHDh06dOjQoUOHDnTo0KFDhw4dOnTo0KFDhw4dOnTo0KEDHTp06NChQ4cOHTp06NChQ4cOHTp0oEOHDh06dOjQoUOHDh06dOjQoUOHDh3o0KFDhw4dOnTo0KFDhw4dOnTo0KFDBzp06NChQ4cOHTp06NChQ4cOHTp06NCBDh06dOjQoUOHDh06dOjQoUOHDh06dKBDhw4dOnTo0KFDhw4dOnTo0KFDhw4d6NChQ4cOHTp06NChQ4cOHTp06NChQ4cCHTp06NChQ4cOHTp06NChQ4cOHTp0oEOHDh06dOjQoUOHDh06dOjQoUOHDh3o0KFDhw4dOnTo0KFDhw4dOnTo0KFDBzp06NChQ4cOHTp06NChQ4cOHTp06NCBDh06dOjQoUOHDh06dOjQoUOHDh06dKBDhw4dOnTo0KFDhw4dOnTo0KFDhw4dxeoB30xd38yzCvgAAAAASUVORK5CYII=",F="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAALSURBVHgBY2BgAAAAAwABjPg5OgAAAABJRU5ErkJggg==",E=1080;function _(e){var t=e.href,n=e.name,a=e.target,c=e.children,i=Object(h.a)(e,["href","name","target","children"]),s=Object(o.useCallback)((function(e){return window.umami&&n&&window.umami.track("A: "+n),a?window.open(t,a):setTimeout((function(){window.location=t}),200),e.preventDefault(),!1}),[t,n,a]);return Object(r.jsx)("a",Object(l.a)(Object(l.a)({},i),{},{href:t,onClick:s,children:c}))}var M=v((function(e){var t=e.getString,n=e.locales,a=e.currentLocale,i=e.onLanguageChange,s=Object(o.useState)(null),u=Object(c.a)(s,2),h=u[0],p=u[1],b=Object(o.useState)(null),f=Object(c.a)(b,2),w=f[0],m=f[1],v=Object(o.useState)(null),A=Object(c.a)(v,2),D=A[0],Q=A[1],H=Object(o.useState)(1),T=Object(c.a)(H,2),U=T[0],M=T[1],y=Object(o.useState)(null),K=Object(c.a)(y,2),R=K[0],B=K[1],I=h?h.src:null,L=w?w.src:null,P=Object(o.useState)(0),V=Object(c.a)(P,2),Y=V[0],G=V[1],z=Object(o.useState)(0),J=Object(c.a)(z,2),X=J[0],W=J[1],Z=Object(o.useState)({x:0,y:0,scale:1}),q=Object(c.a)(Z,2),$=q[0],ee=q[1],te=Object(o.useCallback)((function(e){p(e)}),[p]),ne=Object(o.useCallback)((function(e){m(e)}),[m]),ae=Object(o.useCallback)((function(e){var t=e.x,n=e.y,a=e.scale;ee({x:t,y:n,scale:a})}),[]),ce=Object(o.useCallback)((function(e){if(e){var t=new FileReader;t.onload=function(t){var n=new Image;n.onload=function(){var a,c;n.width0?e[0]:"")}),[l]);return Object(r.jsx)(z,{userLocales:n,onLocaleChange:d,children:Object(r.jsx)(M,{locales:I,currentLocale:O,onLanguageChange:h})},"AppLocalizationProvider")}u.a.render(Object(r.jsx)(i.a.StrictMode,{children:Object(r.jsx)(J,{})}),document.getElementById("root")),y()}},[[49,1,2]]]);
-//# sourceMappingURL=main.9487faa4.chunk.js.map
\ No newline at end of file
diff --git a/static/js/main.9487faa4.chunk.js.map b/static/js/main.9487faa4.chunk.js.map
deleted file mode 100644
index 4498e06..0000000
--- a/static/js/main.9487faa4.chunk.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["frames lazy /^/.//.*/.png$/ groupOptions: {} namespace object","hashtags lazy /^/.//.*/.png$/ groupOptions: {} namespace object","locales lazy /^/.//.*/.ftl$/ groupOptions: {} namespace object","FrameChooser.js","Localized.js","HashtagChooser.js","Editor.js","VoltLogoPurple.svg","purpleBG.png","empty_1x1.png","App.js","reportWebVitals.js","l10n.js","index.js"],"names":["map","webpackAsyncContext","req","__webpack_require__","o","Promise","resolve","then","e","Error","code","ids","id","keys","Object","module","exports","FrameChooser","onChange","useState","frames","setFrames","choosenFrame","setChoosenFrame","choosenFrameSRC","src","useEffect","a","all","frame_filename","default","name","new_frames","loadFrames","handleImageChoosing","useCallback","frame","className","frame_src_path","isChoosen","data-src","onClick","alt","Localized","props","elems","br","Fragment","children","withLocalization","Inner","l10n","React","useContext","FluentContext","createElement","getString","args","fallback","hashtagNameReplacers","hashtags","split","tag","trim","filter","length","clamp","value","min","max","Math","Editor","backgroundURL","backgroundRatio","frameURL","hashtagURL","editorRef","useRef","backgroundImageRef","hammer_got_init","set_hammer_got_init","hammertime","set_hammertime","hamster","set_hamster","x","set_x","y","set_y","add_x","set_add_x","add_y","set_add_y","scale","set_scale","photoWidth","setPhotoWidth","photoHeight","setPhotoHeight","editorWidth","setEditorWidth","editorHeight","setEditorHeight","rangeMinX","set_rangeMinX","rangeMinY","set_rangeMinY","rangeMaxX","set_rangeMaxX","rangeMaxY","set_rangeMaxY","current","new_editorWidth","offsetWidth","new_editorHeight","offsetHeight","new_photoWidth","new_photoHeight","imageWidth","imageHeight","imageScale","containerWidth","containerHeight","updateRange","handleMove","event","prev_x","target","dataset","prev_y","new_x","deltaX","new_y","deltaY","isFinal","handleScale","delta","preventDefault","new_scale","element","addEventListener","Hammer","direction","Hamster","on","wheel","off","unwheel","ref","data-x","data-y","data-scale","style","width","height","transform","frameSize","UmamiLink","href","handleClick","window","umami","track","open","setTimeout","location","locales","currentLocale","onLanguageChange","setFrame","hashtag","setHashtag","originalPhoto","setOriginalPhoto","originalPhotoRation","setOriginalPhotoRation","orientation","set_orientation","set_width","set_height","cords","setCords","handleFrame","newFrame","handleHashtag","newHashtag","handleCordsChange","handleReadFile","file","reader","FileReader","onload","reader_event","img","Image","callback","view","DataView","result","getUint16","byteLength","offset","marker","getUint32","little","tags","i","readAsArrayBuffer","slice","getOrientation","new_orientation","original_ration","readAsDataURL","handleImage","files_event","files","onDrop","acceptedFiles","handleDownload","canvas","document","ctx","getContext","alpha","translate","rotate","PI","width_scaled","height_scaled","drawImage","pngUrl","toDataURL","mergeImages","purpleBG","b64","data","body","appendChild","download","click","remove","trigger_download","frameName","hashtagName","join","useDropzone","accept","maxFiles","noKeyboard","isDragActive","getRootProps","VoltLogoPurple","tabIndex","outline","type","display","startsWith","empty_1x1","entries","locale","data-locale","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","de","en","es","pt","fr","it","nl","pl","ru","_supportedLocales_","fetchMessages","path","fetch","response","text","messages","FluentResource","createMessagesGenerator","currentLocales","fetched","reduce","obj","cur","assign","generateBundles","bundle","FluentBundle","addResource","f","AppLocalizationProvider","userLocales","onLocaleChange","ReactLocalization","getDefaultBundles","bundles","setBundles","negotiateLanguages","defaultLocale","loadBundles","AppLanguageWrapper","navigator","languages","setUserLocales","setCurrentLocale","systemLocales","Array","isArray","handleLanguageChange","handleCurrentLocalesChange","ReactDOM","render","StrictMode","getElementById"],"mappings":"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","file":"static/js/main.9487faa4.chunk.js","sourcesContent":["var map = {\n\t\"./0xSOM.png\": [\n\t\t50,\n\t\t13\n\t],\n\t\"./2xSOM-Blue-Green.png\": [\n\t\t51,\n\t\t14\n\t],\n\t\"./2xSOM-Red-Yellow.png\": [\n\t\t52,\n\t\t15\n\t],\n\t\"./4xSOM-Blue-Red-Yellow-Green-Overflow.png\": [\n\t\t53,\n\t\t16\n\t],\n\t\"./4xSOM-Blue-Red-Yellow-Green.png\": [\n\t\t54,\n\t\t17\n\t],\n\t\"./5xSOM-Blue.png\": [\n\t\t55,\n\t\t18\n\t],\n\t\"./5xSOM-Green.png\": [\n\t\t56,\n\t\t19\n\t],\n\t\"./5xSOM-Pride.png\": [\n\t\t57,\n\t\t20\n\t],\n\t\"./5xSOM-Red.png\": [\n\t\t58,\n\t\t21\n\t],\n\t\"./5xSOM-White.png\": [\n\t\t59,\n\t\t22\n\t],\n\t\"./5xSOM-Yellow.png\": [\n\t\t60,\n\t\t23\n\t],\n\t\"./RectanglePurple.png\": [\n\t\t61,\n\t\t24\n\t],\n\t\"./Volt-Stars.png\": [\n\t\t62,\n\t\t25\n\t],\n\t\"./btw_Meine_Stimme_Balken.png\": [\n\t\t63,\n\t\t26\n\t],\n\t\"./btw_Meine_Stimme_Sterne_bunt.png\": [\n\t\t64,\n\t\t27\n\t],\n\t\"./btw_Meine_Stimme_Sterne_lila.png\": [\n\t\t65,\n\t\t28\n\t],\n\t\"./btw_VoteVolt_Balken.png\": [\n\t\t66,\n\t\t29\n\t],\n\t\"./btw_VoteVolt_Sterne_bunt.png\": [\n\t\t67,\n\t\t30\n\t],\n\t\"./btw_VoteVolt_Sterne_lila.png\": [\n\t\t68,\n\t\t31\n\t],\n\t\"./pride-2022-1.png\": [\n\t\t69,\n\t\t32\n\t],\n\t\"./pride-2022-2.png\": [\n\t\t70,\n\t\t33\n\t],\n\t\"./ukraine.png\": [\n\t\t71,\n\t\t34\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn __webpack_require__.e(ids[1]).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = 42;\nmodule.exports = webpackAsyncContext;","var map = {\n\t\"./#DeineWahl.png\": [\n\t\t72,\n\t\t35\n\t],\n\t\"./#EUReform.png\": [\n\t\t73,\n\t\t36\n\t],\n\t\"./#Europa.png\": [\n\t\t74,\n\t\t37\n\t],\n\t\"./#EuropeCares.png\": [\n\t\t75,\n\t\t38\n\t],\n\t\"./#European.png\": [\n\t\t76,\n\t\t39\n\t],\n\t\"./#FutureMadeInEurope.png\": [\n\t\t77,\n\t\t40\n\t],\n\t\"./#GeneratieEuropa.png\": [\n\t\t78,\n\t\t41\n\t],\n\t\"./#GeneratieVolt.png\": [\n\t\t79,\n\t\t42\n\t],\n\t\"./#GenerationEuropa.png\": [\n\t\t80,\n\t\t43\n\t],\n\t\"./#IkStemVolt.png\": [\n\t\t81,\n\t\t44\n\t],\n\t\"./#JetztBistDuDran.png\": [\n\t\t82,\n\t\t45\n\t],\n\t\"./#JoinTheChange.png\": [\n\t\t83,\n\t\t46\n\t],\n\t\"./#RejoinEU.png\": [\n\t\t84,\n\t\t47\n\t],\n\t\"./#ValuesOverPower.png\": [\n\t\t85,\n\t\t48\n\t],\n\t\"./#Volt.png\": [\n\t\t86,\n\t\t49\n\t],\n\t\"./#Volt21.png\": [\n\t\t87,\n\t\t50\n\t],\n\t\"./#VoltEuropa.png\": [\n\t\t88,\n\t\t51\n\t],\n\t\"./#VoltForLGBTIAQ.png\": [\n\t\t89,\n\t\t52\n\t],\n\t\"./#VoltGA.png\": [\n\t\t90,\n\t\t53\n\t],\n\t\"./#VoltRLP.png\": [\n\t\t91,\n\t\t54\n\t],\n\t\"./#VoteVolt.png\": [\n\t\t92,\n\t\t55\n\t],\n\t\"./#WirWerdenLaut.png\": [\n\t\t93,\n\t\t56\n\t],\n\t\"./#ZukunftMadeInEurope.png\": [\n\t\t94,\n\t\t57\n\t],\n\t\"./#ZweitstimmeVolt.png\": [\n\t\t95,\n\t\t58\n\t],\n\t\"./#democracy.png\": [\n\t\t96,\n\t\t59\n\t],\n\t\"./#paneuropäisch.png\": [\n\t\t97,\n\t\t60\n\t],\n\t\"./#pragmatisch.png\": [\n\t\t98,\n\t\t61\n\t],\n\t\"./#progressiv.png\": [\n\t\t99,\n\t\t62\n\t],\n\t\"./FriedenInEuropa.png\": [\n\t\t100,\n\t\t63\n\t],\n\t\"./IVotedFromAbroad.png\": [\n\t\t101,\n\t\t64\n\t],\n\t\"./PeaceInEurope.png\": [\n\t\t102,\n\t\t65\n\t],\n\t\"./stemvolt.nl.png\": [\n\t\t103,\n\t\t66\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn __webpack_require__.e(ids[1]).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = 43;\nmodule.exports = webpackAsyncContext;","var map = {\n\t\"./de.ftl\": [\n\t\t104,\n\t\t3\n\t],\n\t\"./en.ftl\": [\n\t\t105,\n\t\t4\n\t],\n\t\"./es.ftl\": [\n\t\t106,\n\t\t5\n\t],\n\t\"./fr.ftl\": [\n\t\t107,\n\t\t6\n\t],\n\t\"./it.ftl\": [\n\t\t108,\n\t\t7\n\t],\n\t\"./nl.ftl\": [\n\t\t109,\n\t\t8\n\t],\n\t\"./pl.ftl\": [\n\t\t110,\n\t\t9\n\t],\n\t\"./pt.ftl\": [\n\t\t111,\n\t\t10\n\t],\n\t\"./ru.ftl\": [\n\t\t112,\n\t\t11\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn __webpack_require__.e(ids[1]).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = 48;\nmodule.exports = webpackAsyncContext;","import { useState, useEffect, useCallback } from 'react'\n\nfunction FrameChooser({ onChange }) {\n const [frames, setFrames] = useState([])\n const [choosenFrame, setChoosenFrame] = useState(null)\n\n const choosenFrameSRC = !!choosenFrame ? choosenFrame.src : null\n\n useEffect(() => {\n async function loadFrames(){\n Promise.all(\n [\n '5xSOM-Pride',\n 'ukraine',\n // 'btw_VoteVolt_Balken',\n // 'btw_Meine_Stimme_Balken',\n // 'btw_VoteVolt_Sterne_bunt',\n // 'btw_Meine_Stimme_Sterne_bunt',\n 'Volt-Stars',\n // 'btw_VoteVolt_Sterne_lila',\n // 'btw_Meine_Stimme_Sterne_lila',\n '0xSOM', // SOM = Stripes of Movement\n '5xSOM-Blue',\n '5xSOM-Green',\n '5xSOM-Red',\n '5xSOM-Yellow',\n // '5xSOM-White',\n // '2xSOM-Blue-Green',\n // '2xSOM-Red-Yellow',\n '4xSOM-Blue-Red-Yellow-Green',\n '4xSOM-Blue-Red-Yellow-Green-Overflow',\n 'RectanglePurple',\n 'pride-2022-1',\n 'pride-2022-2',\n ]\n .map(async frame_filename => {\n return {\n name: frame_filename,\n src: (await import(`./frames/${frame_filename}.png`)).default,\n }\n })\n )\n .then(new_frames => {\n setFrames(new_frames)\n setChoosenFrame(new_frames[0])\n })\n }\n loadFrames()\n }, [])\n\n const handleImageChoosing = useCallback(frame => {\n setChoosenFrame(frame)\n }, [setChoosenFrame])\n\n useEffect(() => {\n onChange(choosenFrame)\n }, [onChange, choosenFrame])\n\n return (\n \n {\n frames.map(frame => {\n const frame_src_path = frame.src\n const isChoosen = choosenFrameSRC === frame_src_path\n return
handleImageChoosing(frame)}\n >\n
\n
\n })\n }\n
\n )\n}\n\nexport default FrameChooser\n","import React from 'react'\nimport {\n Localized as LocalizedOriginal,\n // withLocalization,\n} from '@fluent/react'\n\nimport { FluentContext } from '../node_modules/@fluent/react/esm/context.js'\n\nconst Localized = props => (\n ,\n ...props.elems,\n }}\n >\n {props.children}\n \n)\n\n// A custom withLocalization to have an empty fallback.\n// It is nearly identical to the original.\nfunction withLocalization(Inner) {\n function WithLocalization(props) {\n const l10n = React.useContext(FluentContext)\n\n const getString = (id, args, fallback) => l10n.getString(id, args, fallback || ' ')\n\n return React.createElement(Inner, { getString, ...props })\n }\n return WithLocalization\n}\n\nexport {\n withLocalization,\n Localized,\n Localized as default,\n}\n\n/*\n\nimport { Localized, withLocalization } from '../Localized/'\n\n\nexport default withLocalization(componentName)\n\n\nimport Localized from '../Localized/'\n\n\nimport { withLocalization } from '@fluent/react'\nexport default withLocalization(componentName)\n\n*/\n","import { useState, useEffect, useCallback } from 'react'\nimport { withLocalization } from './Localized.js'\n\nconst hashtagNameReplacers = {\n 'IVotedFromAbroad': 'I voted from abroad!',\n 'PeaceInEurope': 'Peace in Europe',\n 'FriedenInEuropa': 'Frieden in Europa',\n}\n\nfunction HashtagChooser({ onChange, getString }) {\n const [frames, setFrames] = useState([])\n const [choosenFrame, setChoosenFrame] = useState(null)\n\n const choosenFrameSRC = !!choosenFrame ? choosenFrame.src : null\n\n let hashtags = getString('hashtags')\n\n useEffect(() => {\n async function loadFrames() {\n Promise.all(\n [\n '',\n ...(\n hashtags.split('\\n')\n .map(tag => tag.trim())\n .filter(tag => tag.length > 0)\n )\n ]\n .map(async frame_filename => {\n let src = frame_filename\n if (frame_filename !== '') {\n src = (await import(`./hashtags/${frame_filename}.png`)).default\n }\n\n const name = hashtagNameReplacers[frame_filename] || frame_filename\n\n return {\n name,\n src\n }\n })\n )\n .then(new_frames => {\n setFrames(new_frames)\n setChoosenFrame(new_frames[0])\n })\n }\n loadFrames()\n }, [hashtags])\n\n const handleImageChoosing = useCallback(frame => {\n setChoosenFrame(frame)\n }, [setChoosenFrame])\n\n useEffect(() => {\n onChange(choosenFrame)\n }, [onChange, choosenFrame])\n\n return (\n \n {\n frames.map(frame => {\n const frame_src_path = frame.src\n const isChoosen = choosenFrameSRC === frame_src_path\n return \n })\n }\n
\n )\n}\n\nexport default withLocalization(HashtagChooser)\n","import { useEffect, useRef, useState, useCallback } from 'react'\n\nimport Hammer from 'hammerjs'\nimport Hamster from 'hamsterjs'\n\nfunction updateRange(imageWidth, imageHeight, imageScale, containerWidth, containerHeight) {\n\n const rangeX = Math.max(0, (imageWidth * imageScale) - containerWidth)\n const rangeY = Math.max(0, (imageHeight * imageScale) - containerHeight)\n\n const rangeMaxX = (rangeX / 2)\n const rangeMinX = 0 - rangeMaxX\n\n const rangeMaxY = (rangeY / 2)\n const rangeMinY = 0 - rangeMaxY\n\n return {\n rangeMaxX,\n rangeMinX,\n rangeMaxY,\n rangeMinY,\n }\n}\n\nfunction clamp(value, min, max) {\n return Math.min(Math.max(min, value), max)\n}\n\n\n\nlet minScale = 1;\nlet maxScale = 8;\n\n\n\nfunction Editor({ onChange, backgroundURL, backgroundRatio, frameURL, hashtagURL }) {\n const editorRef = useRef(null)\n const backgroundImageRef = useRef(null)\n\n const [hammer_got_init, set_hammer_got_init] = useState(false)\n\n const [hammertime, set_hammertime] = useState(null)\n const [hamster, set_hamster] = useState(null)\n\n const [x, set_x] = useState(0)\n const [y, set_y] = useState(0)\n const [add_x, set_add_x] = useState(0)\n const [add_y, set_add_y] = useState(0)\n const [scale, set_scale] = useState(1)\n // const [add_scale, set_add_scale] = useState(0)\n\n const [photoWidth, setPhotoWidth] = useState(300)\n const [photoHeight, setPhotoHeight] = useState(300)\n const [editorWidth, setEditorWidth] = useState(300)\n const [editorHeight, setEditorHeight] = useState(300)\n\n const [rangeMinX, set_rangeMinX] = useState(0)\n const [rangeMinY, set_rangeMinY] = useState(0)\n const [rangeMaxX, set_rangeMaxX] = useState(0)\n const [rangeMaxY, set_rangeMaxY] = useState(0)\n\n useEffect(() => {\n if (!!onChange) {\n onChange({ x, y, scale})\n }\n }, [onChange, x, y, scale])\n\n useEffect(() => {\n if (!!editorRef && !!editorRef.current) {\n const new_editorWidth = editorRef.current.offsetWidth\n const new_editorHeight = editorRef.current.offsetHeight\n setEditorHeight(new_editorHeight)\n setEditorWidth(new_editorWidth)\n\n let new_photoWidth = 1\n let new_photoHeight = 1\n if (backgroundRatio < 1) {\n new_photoWidth = 1 / backgroundRatio\n } else if (backgroundRatio > 1) {\n new_photoHeight = 1 * backgroundRatio\n }\n\n setPhotoWidth(new_photoWidth)\n setPhotoHeight(new_photoHeight)\n }\n }, [backgroundRatio])\n\n useEffect(() => {\n const {\n rangeMinX,\n rangeMinY,\n rangeMaxX,\n rangeMaxY,\n } = updateRange(photoWidth * editorWidth, photoHeight * editorHeight, scale, editorWidth, editorHeight)\n\n set_rangeMinX(rangeMinX)\n set_rangeMinY(rangeMinY)\n set_rangeMaxX(rangeMaxX)\n set_rangeMaxY(rangeMaxY)\n }, [\n photoWidth,\n photoHeight,\n editorWidth,\n editorHeight,\n scale,\n ])\n\n useEffect(() => {\n set_x(0)\n set_y(0)\n set_add_x(0)\n set_add_y(0)\n set_scale(1)\n }, [backgroundURL])\n\n const handleMove = useCallback(event => {\n const prev_x = event.target.dataset.x * 1\n const prev_y = event.target.dataset.y * 1\n\n const new_x = clamp(prev_x + event.deltaX, rangeMinX, rangeMaxX)\n const new_y = clamp(prev_y + event.deltaY, rangeMinY, rangeMaxY)\n\n if (event.isFinal) {\n set_x(new_x || 0)\n set_y(new_y || 0)\n set_add_x(0)\n set_add_y(0)\n }else{\n set_add_x(new_x - prev_x || 0)\n set_add_y(new_y - prev_y || 0)\n }\n }, [\n rangeMinX,\n rangeMinY,\n rangeMaxX,\n rangeMaxY,\n ])\n\n const handleScale = useCallback((event, delta, deltaX, deltaY) => {\n event.preventDefault()\n\n const prev_scale = event.target.dataset.scale * 1\n const new_scale = clamp(prev_scale + delta / 200, minScale, maxScale)\n set_scale(new_scale || 1)\n\n const prev_x = event.target.dataset.x * 1\n const prev_y = event.target.dataset.y * 1\n set_x(clamp(prev_x, rangeMinX, rangeMaxX) || 0)\n set_y(clamp(prev_y, rangeMinY, rangeMaxY) || 0)\n }, [\n rangeMinX,\n rangeMinY,\n rangeMaxX,\n rangeMaxY,\n ])\n\n useEffect(() => {\n if (!hammer_got_init && !!editorRef && !!editorRef.current) {\n const element = editorRef.current\n\n element.addEventListener('mousedown', event => {\n event.preventDefault()\n // event.stopPropagation()\n }, false)\n element.addEventListener(\"touchstart\", event => {\n event.preventDefault()\n // event.stopPropagation()\n }, false)\n element.addEventListener(\"touchend\", event => {\n event.preventDefault()\n // event.stopPropagation()\n }, false)\n element.addEventListener(\"touchmove\", event => {\n event.preventDefault()\n // event.stopPropagation()\n }, false)\n\n set_hammertime(new Hammer(element, {\n direction: 'DIRECTION_ALL',\n }))\n\n set_hamster(Hamster(element))\n\n set_hammer_got_init(true)\n }\n }, [editorRef, hammer_got_init])\n\n useEffect(() => {\n if (!!hammertime && !!hamster && hammer_got_init && !!editorRef && !!editorRef.current) {\n hammertime.on('pan', handleMove)\n hamster.wheel(handleScale)\n\n return function () {\n hammertime.off('pan', handleMove)\n hamster.unwheel()\n }\n }\n }, [editorRef, handleMove, handleScale, hammer_got_init, hammertime, hamster])\n\n return (\n \n )\n}\n\nexport default Editor\n","export default __webpack_public_path__ + \"static/media/VoltLogoPurple.125355f6.svg\";","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABDgAAAQ4AgMAAACRfoQcAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAJUExURVAjeFAjeE8jd3Yl3xwAAAADdFJOU//+/Q3dsqEAAATsSURBVHgB7dAxAQAABAAwQtI/ipMCvi3CgiMV6NChQ4cOHTp06NChQ4cOHTp06NChAx06dOjQoUOHDh06dOjQoUOHDh06dOhAhw4dOnTo0KFDhw4dOnTo0KFDhw4dOtChQ4cOHTp06NChQ4cOHTp06NChQ4cOdOjQoUOHDh06dOjQoUOHDh06dOjQoQMdOnTo0KFDhw4dOnTo0KFDhw4dOnToQIcOHTp06NChQ4cOHTp06NChQ4cOHejQoUOHDh06dOjQoUOHDh06dOjQoUMHOnTo0KFDhw4dOnTo0KFDhw4dOnTo0IEOHTp06NChQ4cOHTp06NChQ4cOHTp0oEOHDh06dOjQoUOHDh06dOjQoUOHDh3o0KFDhw4dOnTo0KFDhw4dOnTo0KFDBzp06NChQ4cOHTp06NChQ4cOHTp06NChQIcOHTp06NChQ4cOHTp06NChQ4cOHejQoUOHDh06dOjQoUOHDh06dOjQoUMHOnTo0KFDhw4dOnTo0KFDhw4dOnTo0IEOHTp06NChQ4cOHTp06NChQ4cOHTp0oEOHDh06dOjQoUOHDh06dOjQoUOHDh3o0KFDhw4dOnTo0KFDhw4dOnTo0KFDBzp06NChQ4cOHTp06NChQ4cOHTp06ECHDh06dOjQoUOHDh06dOjQoUOHDh060KFDhw4dOnTo0KFDhw4dOnTo0KFDhw506NChQ4cOHTp06NChQ4cOHTp06NChAx06dOjQoUOHDh06dOjQoUOHDh06dOhAhw4dOnTo0KFDhw4dOnTo0KFDhw4dOtChQ4cOHTp06NChQ4cOHTp06NChQ4cOBTp06NChQ4cOHTp06NChQ4cOHTp06ECHDh06dOjQoUOHDh06dOjQoUOHDh060KFDhw4dOnTo0KFDhw4dOnTo0KFDhw506NChQ4cOHTp06NChQ4cOHTp06NChAx06dOjQoUOHDh06dOjQoUOHDh06dOhAhw4dOnTo0KFDhw4dOnTo0KFDhw4dOtChQ4cOHTp06NChQ4cOHTp06NChQwc6dOjQoUOHDh06dOjQoUOHDh06dOjQgQ4dOnTo0KFDhw4dOnTo0KFDhw4dOnSgQ4cOHTp06NChQ4cOHTp06NChQ4cOHTx06NChQ4cOdOjQoUOHDh06dOjQoUOHDh06dOjQoQMdOnTo0KFDhw4dOnTo0KFDhw4dOnToQIcOHTp06NChQ4cOHTp06NChQ4cOHTrQoUOHDh06dOjQoUOHDh06dOjQoUOHDnTo0KFDhw4dOnTo0KFDhw4dOnTo0KEDHTp06NChQ4cOHTp06NChQ4cOHTp0oEOHDh06dOjQoUOHDh06dOjQoUOHDh3o0KFDhw4dOnTo0KFDhw4dOnTo0KFDBzp06NChQ4cOHTp06NChQ4cOHTp06NCBDh06dOjQoUOHDh06dOjQoUOHDh06dKBDhw4dOnTo0KFDhw4dOnTo0KFDhw4d6NChQ4cOHTp06NChQ4cOHTp06NChQ4cCHTp06NChQ4cOHTp06NChQ4cOHTp0oEOHDh06dOjQoUOHDh06dOjQoUOHDh3o0KFDhw4dOnTo0KFDhw4dOnTo0KFDBzp06NChQ4cOHTp06NChQ4cOHTp06NCBDh06dOjQoUOHDh06dOjQoUOHDh06dKBDhw4dOnTo0KFDhw4dOnTo0KFDhw4dxeoB30xd38yzCvgAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAALSURBVHgBY2BgAAAAAwABjPg5OgAAAABJRU5ErkJggg==\"","import { useState, useCallback } from 'react'\nimport './App.css'\nimport { useDropzone } from 'react-dropzone'\nimport mergeImages from 'merge-images'\nimport FrameChooser from './FrameChooser.js'\nimport HashtagChooser from './HashtagChooser.js'\nimport Editor from './Editor.js'\nimport VoltLogoPurple from './VoltLogoPurple.svg'\nimport purpleBG from './purpleBG.png'\nimport empty_1x1 from './empty_1x1.png'\n\nimport { withLocalization, Localized } from './Localized.js'\n\nconst frameSize = 1080\n\nfunction getOrientation(file, callback) {\n // Source: http://stackoverflow.com/a/32490603\n // (With some modifications: I just made the code fit the style-guide.)\n const reader = new FileReader()\n\n reader.onload = function (event) {\n const view = new DataView(event.target.result)\n\n if (view.getUint16(0, false) !== 0xFFD8) {\n return callback(-2)\n }\n\n const length = view.byteLength\n let offset = 2\n\n while (offset < length) {\n const marker = view.getUint16(offset, false)\n offset += 2\n\n if (marker === 0xFFE1) {\n if (view.getUint32(offset += 2, false) !== 0x45786966) {\n return callback(-1)\n }\n const little = view.getUint16(offset += 6, false) === 0x4949\n offset += view.getUint32(offset + 4, little)\n const tags = view.getUint16(offset, little)\n offset += 2\n\n for (var i = 0; i < tags; i++) {\n if (view.getUint16(offset + (i * 12), little) === 0x0112) {\n return callback(view.getUint16(offset + (i * 12) + 8, little))\n }\n }\n } else if ((marker & 0xFF00) !== 0xFF00) {\n break\n } else {\n offset += view.getUint16(offset, false)\n }\n }\n return callback(-1)\n }\n\n reader.readAsArrayBuffer(file.slice(0, 64 * 1024))\n}\n\nfunction trigger_download(name, data){\n const a = document.createElement('a')\n document.body.appendChild(a)\n // a.target = '_blank'\n a.download = name\n a.href = data\n a.click()\n a.remove()\n}\n\nfunction UmamiLink({ href, name, target, children, ...props }) {\n const handleClick = useCallback(event => {\n\n if (window.umami && name) {\n window.umami.track('A: ' + name) // Log Anker / Link\n }\n\n // follow link\n if (!(!!target)) {\n setTimeout(() => {\n window.location = href\n }, 200)\n }else{\n window.open(href, target)\n }\n\n // Prevent normal href-follow\n event.preventDefault()\n return false\n }, [href, name, target])\n\n return \n {children}\n \n}\n\nfunction App({ getString, locales, currentLocale, onLanguageChange }) {\n const [frame, setFrame] = useState(null)\n const [hashtag, setHashtag] = useState(null)\n const [originalPhoto, setOriginalPhoto] = useState(null)\n const [originalPhotoRation, setOriginalPhotoRation] = useState(1)\n const [orientation, set_orientation] = useState(null)\n\n const frameURL = !!frame ? frame.src : null\n const hashtagURL = !!hashtag ? hashtag.src : null\n\n // const [combinedImage, set_combinedImage] = useState(null)\n\n const [width, set_width] = useState(0)\n const [height, set_height] = useState(0)\n\n const [cords, setCords] = useState({x:0, y:0, scale:1})\n\n const handleFrame = useCallback(newFrame => {\n setFrame(newFrame)\n }, [setFrame])\n\n const handleHashtag = useCallback(newHashtag => {\n setHashtag(newHashtag)\n }, [setHashtag])\n\n const handleCordsChange = useCallback(({x, y, scale}) => {\n setCords({ x, y, scale })\n }, [])\n\n const handleReadFile = useCallback(file => {\n if (!(!!file)) {\n return;\n }\n\n const reader = new FileReader()\n reader.onload = reader_event => {\n const img = new Image()\n img.onload = function () {\n let width, height;\n if (img.width < img.height) {\n height = (img.height / img.width) * frameSize\n width = frameSize\n } else {\n height = frameSize\n width = (img.width / img.height) * frameSize\n }\n\n getOrientation(file, new_orientation => {\n let original_ration = 1\n // use the correct image orientation\n switch (new_orientation) {\n // Source: https://stackoverflow.com/a/30242954/2387277\n // Source: https://stackoverflow.com/questions/19463126/how-to-draw-photo-with-correct-orientation-in-canvas-after-capture-photo-by-usin\n case 2:\n // horizontal flip\n original_ration = height / width\n break\n case 3:\n // 180° rotate left\n original_ration = height / width\n break\n case 4:\n // vertical flip\n original_ration = height / width\n break\n case 5:\n // vertical flip + 90 rotate right\n original_ration = width / height\n break\n case 6:\n // 90° rotate right\n original_ration = width / height\n break\n case 7:\n // horizontal flip + 90 rotate right\n original_ration = width / height\n break\n case 8:\n // 90° rotate left\n original_ration = width / height\n break\n default:\n original_ration = height / width\n break\n }\n\n set_width(width)\n set_height(height)\n setOriginalPhoto(reader_event.target.result)\n set_orientation(new_orientation)\n setOriginalPhotoRation(original_ration)\n })\n }\n img.src = reader_event.target.result\n }\n reader.readAsDataURL(file)\n }, [])\n\n const handleImage = useCallback(files_event => {\n handleReadFile(files_event.target.files[0])\n }, [handleReadFile])\n\n const onDrop = useCallback(acceptedFiles => {\n handleReadFile(acceptedFiles[0])\n }, [handleReadFile])\n\n const handleDownload = useCallback(() => {\n const img = new Image()\n img.onload = function () {\n const canvas = document.createElement('canvas')\n canvas.width = frameSize\n canvas.height = frameSize\n\n const ctx = canvas.getContext('2d', { alpha: true })\n\n // use the correct image orientation\n switch (orientation) {\n // Source: https://stackoverflow.com/a/30242954/2387277\n // Source: https://stackoverflow.com/questions/19463126/how-to-draw-photo-with-correct-orientation-in-canvas-after-capture-photo-by-usin\n case 2:\n // horizontal flip\n ctx.translate(canvas.width, 0)\n ctx.scale(-1, 1)\n break\n case 3:\n // 180° rotate left\n ctx.translate(canvas.width, canvas.height)\n ctx.rotate(Math.PI)\n break\n case 4:\n // vertical flip\n ctx.translate(0, canvas.height)\n ctx.scale(1, -1)\n break\n case 5:\n // vertical flip + 90 rotate right\n ctx.rotate(0.5 * Math.PI)\n ctx.scale(1, -1)\n break\n case 6:\n // 90° rotate right\n ctx.rotate(0.5 * Math.PI)\n ctx.translate(0, -canvas.height)\n break\n case 7:\n // horizontal flip + 90 rotate right\n ctx.rotate(0.5 * Math.PI)\n ctx.translate(canvas.width, -canvas.height)\n ctx.scale(-1, 1)\n break\n case 8:\n // 90° rotate left\n ctx.rotate(-0.5 * Math.PI)\n ctx.translate(-canvas.width, 0)\n break\n default:\n break\n }\n\n\n const width_scaled = width * cords.scale\n const height_scaled = height * cords.scale\n\n ctx.drawImage(\n img,\n cords.x * 3.5 + (frameSize - width_scaled) * 0.5,\n cords.y * 3.5 + (frameSize - height_scaled) * 0.5,\n width_scaled,\n height_scaled,\n )\n // ctx.drawImage(\n // img,\n // ((frameSize - width_scaled) * 0.5),\n // ((frameSize - height_scaled) * 0.5),\n // width_scaled,\n // height_scaled,\n // )\n\n const pngUrl = canvas.toDataURL()\n\n mergeImages([\n purpleBG,\n ...(pngUrl ? [pngUrl] : []),\n ...(frameURL ? [frameURL] : []),\n ...(hashtagURL ? [hashtagURL] : []),\n ])\n .then(b64 => {\n // set_combinedImage(b64)\n trigger_download('volt-profile-picture.png', b64)\n\n const frameName = frame.name || 'No-Frame'\n const hashtagName = hashtag.name || 'No-Hashtag'\n\n if (window.umami) {\n window.umami.track('F: ' + frameName) // Log Frame\n window.umami.track('H: ' + hashtagName) // Log Hashtag\n window.umami.track('C: ' + [frameName, hashtagName].join(' | ')) // Log Combined\n }\n })\n\n }\n img.src = originalPhoto\n }, [\n originalPhoto,\n cords.x,\n cords.y,\n cords.scale,\n orientation,\n frameURL,\n hashtagURL,\n height,\n width,\n frame,\n hashtag\n ])\n\n const { isDragActive, getRootProps } = useDropzone({\n onDrop,\n accept: 'image/*',\n maxFiles: 1,\n noKeyboard: true,\n })\n\n return (\n \n
\n
\n\n
\n \n
\n\n
\n
\n\n
\n\n {true || !!originalPhoto ? (<>\n
\n
\n {\n (frameURL || '').startsWith('/static/media/btw_')\n ? null\n : <>\n
\n
\n >\n }\n >) : null}\n\n {!!originalPhoto && !!frameURL ? (<>\n
\n {/*\n
Edit your Photo:
\n
Your can reposition the image and scale it. Use pinch-to-zoom or scroll to scale.
\n */}\n\n
\n\n
\n >) : null}\n\n
\n\n {\n !!locales && !!onLanguageChange\n ?
\n {\n Object.entries(locales)\n .map(([locale, name]) => {\n return \n })\n }\n
\n : null\n }\n
\n )\n}\nexport default withLocalization(App)\n","const reportWebVitals = onPerfEntry => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry)\n getFID(onPerfEntry)\n getFCP(onPerfEntry)\n getLCP(onPerfEntry)\n getTTFB(onPerfEntry)\n })\n }\n}\n\nexport default reportWebVitals\n","import React, { useEffect, useState } from 'react'\n\n// https://projectfluent.org/play/\n\n// import {LocalizationProvider,Localized} from '@fluent/react' // '@fluent/react/compat'\nimport { ReactLocalization, LocalizationProvider } from '@fluent/react'\nimport { FluentBundle, FluentResource } from '@fluent/bundle'\nimport { negotiateLanguages } from '@fluent/langneg'\n\n\nexport const locales = {\n de: 'Deutsch',\n en: 'English',\n es: 'Español',\n pt: 'Português',\n fr: 'Français',\n it: 'Italiano',\n nl: 'Nederlands',\n pl: 'Polska',\n ru: 'Pусский',\n}\n\nconst _supportedLocales_ = Object.keys(locales)\nconst _defaultLocale_ = 'en'\n\n\nasync function fetchMessages(locale) {\n const path = await import('./locales/' + locale + '.ftl')\n\n const response = await fetch(path.default)\n const messages = await response.text()\n\n return { [locale]: new FluentResource(messages) }\n}\n\nfunction getDefaultBundles() {\n const bundle = new FluentBundle('')\n bundle.addResource(new FluentResource(''))\n return new ReactLocalization([bundle])\n}\n\nasync function createMessagesGenerator(currentLocales) {\n const fetched = await Promise.all(\n currentLocales.map(fetchMessages)\n )\n const messages = fetched.reduce(\n (obj, cur) => Object.assign(obj, cur)\n )\n\n return function* generateBundles() {\n for (const locale of currentLocales) {\n const bundle = new FluentBundle(locale)\n bundle.addResource(messages[locale])\n yield bundle\n }\n }\n}\n\nexport function AppLocalizationProvider({ userLocales, children, onLocaleChange }){\n const [bundles, setBundles] = useState(getDefaultBundles())\n\n useEffect(() => {\n async function loadBundles() {\n const currentLocales = negotiateLanguages(\n userLocales,\n _supportedLocales_,\n { defaultLocale: _defaultLocale_ }\n )\n\n if (!!onLocaleChange) {\n onLocaleChange(currentLocales)\n }\n\n const generateBundles = await createMessagesGenerator(currentLocales)\n setBundles( new ReactLocalization(generateBundles()) )\n }\n loadBundles()\n }, [userLocales, onLocaleChange])\n\n if (!bundles) {\n // Show a loader.\n return Loading texts…
\n }\n\n return \n {children}\n \n}\n\n","import React, { useState, useEffect, useCallback } from 'react'\nimport ReactDOM from 'react-dom'\nimport App from './App'\nimport reportWebVitals from './reportWebVitals'\n\nimport 'intl-pluralrules'\nimport { AppLocalizationProvider, locales } from './l10n.js'\n\nfunction AppLanguageWrapper() {\n const [userLocales, setUserLocales] = useState(navigator.languages)\n const [currentLocale, setCurrentLocale] = useState(null)\n\n useEffect(() => {\n let systemLocales = navigator.languages\n if (window.umami && (!!systemLocales || Array.isArray(systemLocales))) {\n for (const locale of systemLocales) {\n window.umami.track('L: ' + locale) // Log Locale / Languages\n }\n }\n }, [])\n\n const handleLanguageChange = useCallback(event => {\n setUserLocales([event.target.dataset.locale])\n }, [setUserLocales])\n\n const handleCurrentLocalesChange = useCallback(currentLocales => {\n setCurrentLocale(currentLocales.length > 0 ? currentLocales[0] : '')\n }, [setCurrentLocale])\n\n return \n \n \n}\n\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n)\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals()\n"],"sourceRoot":""}
\ No newline at end of file
diff --git a/static/js/runtime-main.a185044a.js b/static/js/runtime-main.a185044a.js
deleted file mode 100644
index 8b30cc3..0000000
--- a/static/js/runtime-main.a185044a.js
+++ /dev/null
@@ -1,2 +0,0 @@
-!function(e){function r(r){for(var n,c,f=r[0],d=r[1],u=r[2],l=0,p=[];l