diff --git a/asset-manifest.json b/asset-manifest.json index 8457a32..90e0ca9 100644 --- a/asset-manifest.json +++ b/asset-manifest.json @@ -1,8 +1,8 @@ { "files": { - "main.css": "/static/css/main.13420bc5.chunk.css", - "main.js": "/static/js/main.9031a004.chunk.js", - "main.js.map": "/static/js/main.9031a004.chunk.js.map", + "main.css": "/static/css/main.e77f4a10.chunk.css", + "main.js": "/static/js/main.72b276c0.chunk.js", + "main.js.map": "/static/js/main.72b276c0.chunk.js.map", "runtime-main.js": "/static/js/runtime-main.fc01a661.js", "runtime-main.js.map": "/static/js/runtime-main.fc01a661.js.map", "static/js/2.03a535fa.chunk.js": "/static/js/2.03a535fa.chunk.js", @@ -48,7 +48,7 @@ "static/js/22.92336828.chunk.js": "/static/js/22.92336828.chunk.js", "static/js/22.92336828.chunk.js.map": "/static/js/22.92336828.chunk.js.map", "index.html": "/index.html", - "static/css/main.13420bc5.chunk.css.map": "/static/css/main.13420bc5.chunk.css.map", + "static/css/main.e77f4a10.chunk.css.map": "/static/css/main.e77f4a10.chunk.css.map", "static/js/2.03a535fa.chunk.js.LICENSE.txt": "/static/js/2.03a535fa.chunk.js.LICENSE.txt", "static/media/HeaderImage.1f39a672.svg": "/static/media/HeaderImage.1f39a672.svg", "static/media/ProfileFrame Blue Bars.png": "/static/media/ProfileFrame Blue Bars.698613ff.png", @@ -61,7 +61,7 @@ "entrypoints": [ "static/js/runtime-main.fc01a661.js", "static/js/2.03a535fa.chunk.js", - "static/css/main.13420bc5.chunk.css", - "static/js/main.9031a004.chunk.js" + "static/css/main.e77f4a10.chunk.css", + "static/js/main.72b276c0.chunk.js" ] } \ No newline at end of file diff --git a/index.html b/index.html index 6cdd435..d3cdb58 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/css/main.13420bc5.chunk.css b/static/css/main.13420bc5.chunk.css deleted file mode 100644 index b0e2527..0000000 --- a/static/css/main.13420bc5.chunk.css +++ /dev/null @@ -1,2 +0,0 @@ -:root{--volt-purple:#582c83;--background:#140022;--editor-purple:#522b79}*{margin:0;padding:0;font-family:"Ubuntu",-apple-system,BlinkMacSystemFont,"Segoe UI","Roboto","Oxygen","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{background-color:#140022;background-color:var(--background)}.App{text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:calc(10px + 2vmin);color:#fff;padding:10vmin}h2{margin:10vh 0 2vh;font-size:calc(10px + 4vmin)}p{max-width:100%;width:calc(40vh + 15vw)}.HeaderImage{height:calc(10px + 30vmin);max-width:100%}.FinishedFrame{height:36vh;margin:2vh}.FrameChooser .frame{height:12vh;margin:2vh;cursor:pointer;box-shadow:0 0 0 1vh hsla(0,0%,100%,0);transition:transform .2s ease}.FrameChooser .frame:hover{transform-origin:center center;transform:scale(1.1)}.FrameChooser .frame.choosen{box-shadow:0 0 0 1vh #fff}.HashtagChooser .hashtag_button{position:relative;margin:1vmin}.HashtagChooser .hashtag_button.choosen:after{content:"";position:absolute;top:-.5vh;right:-.5vh;bottom:-.5vh;left:-.5vh;box-shadow:0 0 0 .5vh #fff}.labelButton,button{outline:none;border:none;margin:2vh;padding:1vh 2vh;font-size:calc(10px + 2vmin);font-weight:700;cursor:pointer;background:#fff;color:#582c83;color:var(--volt-purple);transition:transform .2s ease}.labelButton:hover,button:hover{transform-origin:center center;transform:scale(1.05)}.labelButton img{display:inline;height:calc(10px + 4vmin);margin:0 2vh 0 -1vh}.labelButton img,.labelButton span{vertical-align:middle}.droparea{position:fixed;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:calc(10px + 10vmin);background:rgba(20,0,34,.7);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);pointer-events:none;opacity:0;transition:opacity .2s ease}.droparea.active{opacity:1}.Editor{pointer-events:all;position:relative;margin:2vh;font-size:0;cursor:move;overflow:hidden;background:#522b79;background:var(--editor-purple)}.Editor .background{pointer-events:none;position:absolute;top:50%;left:50%}.Editor .foreground{pointer-events:none;position:relative;width:36vh;height:36vh}.Editor .hashtag{pointer-events:none;position:absolute;top:0;left:0;width:100%;height:100%} -/*# sourceMappingURL=main.13420bc5.chunk.css.map */ \ No newline at end of file diff --git a/static/css/main.13420bc5.chunk.css.map b/static/css/main.13420bc5.chunk.css.map deleted file mode 100644 index bfe1f44..0000000 --- a/static/css/main.13420bc5.chunk.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack://src/App.css"],"names":[],"mappings":"AAAA,MACI,qBAAsB,CACtB,oBAAqB,CACrB,uBACJ,CAEA,EACI,QAAS,CACT,SAAU,CACV,mJAEU,CACV,kCAAmC,CACnC,iCACJ,CAEA,KACI,wBAAmC,CAAnC,kCACJ,CAEA,KACI,iBAAkB,CAGlB,YAAa,CACb,qBAAsB,CACtB,kBAAmB,CACnB,sBAAuB,CACvB,4BAA6B,CAC7B,UAAY,CACZ,cACJ,CAEA,GACI,iBAAoB,CACpB,4BACJ,CAEA,EACI,cAAe,CACf,uBACJ,CAEA,aACI,0BAA2B,CAC3B,cACJ,CAEA,eACI,WAAY,CACZ,UACJ,CAEA,qBACI,WAAY,CACZ,UAAW,CACX,cAAe,CACf,sCAAyC,CACzC,6BACJ,CACA,2BACI,8BAA+B,CAC/B,oBACJ,CACA,6BACI,yBACJ,CAEA,gCACI,iBAAkB,CAElB,YACJ,CACA,8CACI,UAAW,CACX,iBAAkB,CAClB,SAAW,CACX,WAAa,CACb,YAAc,CACd,UAAY,CACZ,0BACJ,CAEA,oBAEI,YAAa,CACb,WAAY,CACZ,UAAW,CACX,eAAgB,CAChB,4BAA6B,CAC7B,eAAiB,CACjB,cAAe,CAEf,eAAiB,CACjB,aAAyB,CAAzB,wBAAyB,CACzB,6BACJ,CACA,gCAEI,8BAA+B,CAC/B,qBACJ,CAEA,iBACI,cAAe,CACf,yBAA0B,CAE1B,mBACJ,CACA,mCAHI,qBAKJ,CAGA,UACI,cAAe,CACf,KAAM,CACN,OAAQ,CACR,QAAS,CACT,MAAO,CAEP,YAAa,CACb,kBAAmB,CACnB,sBAAuB,CAEvB,eAAiB,CACjB,6BAA8B,CAE9B,2BAAgC,CAChC,kCAA2B,CAA3B,0BAA2B,CAE3B,mBAAoB,CACpB,SAAU,CACV,2BACJ,CACA,iBACI,SACJ,CAGA,QACI,kBAAmB,CACnB,iBAAkB,CAClB,UAAW,CACX,WAAY,CACZ,WAAY,CACZ,eAAgB,CAChB,kBAAgC,CAAhC,+BACJ,CACA,oBACI,mBAAoB,CACpB,iBAAkB,CAClB,OAAQ,CACR,QACJ,CACA,oBACI,mBAAoB,CACpB,iBAAkB,CAClB,UAAW,CACX,WACJ,CACA,iBACI,mBAAoB,CACpB,iBAAkB,CAClB,KAAM,CACN,MAAO,CACP,UAAW,CACX,WACJ","file":"main.13420bc5.chunk.css","sourcesContent":[":root{\n --volt-purple: #582C83;\n --background: #140022;\n --editor-purple: #522B79;\n}\n\n*{\n margin: 0;\n padding: 0;\n font-family: 'Ubuntu', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\n 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',\n sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\nbody{\n background-color: var(--background);\n}\n\n.App {\n text-align: center;\n\n /* min-height: 100vh; */\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n font-size: calc(10px + 2vmin);\n color: white;\n padding: 10vmin;\n}\n\nh2{\n margin: 10vh 0 2vh 0;\n font-size: calc(10px + 4vmin);\n}\n\np{\n max-width: 100%;\n width: calc(40vh + 15vw);\n}\n\n.HeaderImage{\n height: calc(10px + 30vmin);\n max-width: 100%;\n}\n\n.FinishedFrame {\n height: 36vh;\n margin: 2vh;\n}\n\n.FrameChooser .frame{\n height: 12vh;\n margin: 2vh;\n cursor: pointer;\n box-shadow: 0 0 0 1vh rgba(255,255,255,0);\n transition: transform 0.2s ease;\n}\n.FrameChooser .frame:hover{\n transform-origin: center center;\n transform: scale(1.1);\n}\n.FrameChooser .frame.choosen{\n box-shadow: 0 0 0 1vh white;\n}\n\n.HashtagChooser .hashtag_button {\n position: relative;\n /* display: block; */\n margin: 1vmin;\n}\n.HashtagChooser .hashtag_button.choosen:after {\n content: \"\";\n position: absolute;\n top: -0.5vh;\n right: -0.5vh;\n bottom: -0.5vh;\n left: -0.5vh;\n box-shadow: 0 0 0 0.5vh white;\n}\n\nbutton,\n.labelButton{\n outline: none;\n border: none;\n margin: 2vh;\n padding: 1vh 2vh;\n font-size: calc(10px + 2vmin);\n font-weight: bold;\n cursor: pointer;\n\n background: white;\n color: var(--volt-purple);\n transition: transform 0.2s ease;\n}\nbutton:hover,\n.labelButton:hover{\n transform-origin: center center;\n transform: scale(1.05);\n}\n\n.labelButton img{\n display: inline;\n height: calc(10px + 4vmin);\n vertical-align: middle;\n margin: 0 2vh 0 -1vh;\n}\n.labelButton span{\n vertical-align: middle;\n}\n\n\n.droparea{\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n \n display: flex;\n align-items: center;\n justify-content: center;\n\n font-weight: bold;\n font-size: calc(10px + 10vmin);\n\n background: rgba(20, 0, 34, 0.7);\n backdrop-filter: blur(10px);\n\n pointer-events: none;\n opacity: 0;\n transition: opacity 0.2s ease;\n}\n.droparea.active{\n opacity: 1;\n}\n\n\n.Editor{\n pointer-events: all;\n position: relative;\n margin: 2vh;\n font-size: 0;\n cursor: move;\n overflow: hidden;\n background: var(--editor-purple);\n}\n.Editor .background{\n pointer-events: none; \n position: absolute; \n top: 50%;\n left: 50%;\n}\n.Editor .foreground{\n pointer-events: none;\n position: relative;\n width: 36vh;\n height: 36vh;\n}\n.Editor .hashtag{\n pointer-events: none; \n position: absolute; \n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n"]} \ No newline at end of file diff --git a/static/css/main.e77f4a10.chunk.css b/static/css/main.e77f4a10.chunk.css new file mode 100644 index 0000000..8de3eb8 --- /dev/null +++ b/static/css/main.e77f4a10.chunk.css @@ -0,0 +1,2 @@ +:root{--volt-purple:#582c83;--background:#140022;--editor-purple:#522b79}*{margin:0;padding:0;font-family:"Ubuntu",-apple-system,BlinkMacSystemFont,"Segoe UI","Roboto","Oxygen","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{background-color:#140022;background-color:var(--background)}.App{text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:calc(10px + 2vmin);color:#fff;padding:10vmin}h2{margin:10vh 0 2vh;font-size:calc(10px + 4vmin)}p{max-width:100%;width:calc(40vh + 15vw)}a{color:#fff}a:hover{color:hsla(0,0%,100%,.8)}.HeaderImage{height:calc(10px + 30vmin);max-width:100%}.FinishedFrame{height:36vh;margin:2vh}.FrameChooser .frame{height:12vh;margin:2vh;cursor:pointer;box-shadow:0 0 0 1vh hsla(0,0%,100%,0);transition:transform .2s ease}.FrameChooser .frame:hover{transform-origin:center center;transform:scale(1.1)}.FrameChooser .frame.choosen{box-shadow:0 0 0 1vh #fff}.HashtagChooser .hashtag_button{position:relative;margin:1vmin}.HashtagChooser .hashtag_button.choosen:after{content:"";position:absolute;top:-.5vh;right:-.5vh;bottom:-.5vh;left:-.5vh;box-shadow:0 0 0 .5vh #fff}.labelButton,button{outline:none;border:none;margin:2vh;padding:1vh 2vh;font-size:calc(10px + 2vmin);font-weight:700;cursor:pointer;background:#fff;color:#582c83;color:var(--volt-purple);transition:transform .2s ease}.labelButton:hover,button:hover{transform-origin:center center;transform:scale(1.05)}.labelButton img{display:inline;height:calc(10px + 4vmin);margin:0 2vh 0 -1vh}.labelButton img,.labelButton span{vertical-align:middle}.droparea{position:fixed;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:calc(10px + 10vmin);background:rgba(20,0,34,.7);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);pointer-events:none;opacity:0;transition:opacity .2s ease}.droparea.active{opacity:1}.Editor{pointer-events:all;position:relative;margin:2vh;font-size:0;cursor:move;overflow:hidden;background:#522b79;background:var(--editor-purple)}.Editor .background{pointer-events:none;position:absolute;top:50%;left:50%}.Editor .foreground{pointer-events:none;position:relative;width:36vh;height:36vh}.Editor .hashtag{pointer-events:none;position:absolute;top:0;left:0;width:100%;height:100%} +/*# sourceMappingURL=main.e77f4a10.chunk.css.map */ \ No newline at end of file diff --git a/static/css/main.e77f4a10.chunk.css.map b/static/css/main.e77f4a10.chunk.css.map new file mode 100644 index 0000000..3f8d9fe --- /dev/null +++ b/static/css/main.e77f4a10.chunk.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack://src/App.css"],"names":[],"mappings":"AAAA,MACI,qBAAsB,CACtB,oBAAqB,CACrB,uBACJ,CAEA,EACI,QAAS,CACT,SAAU,CACV,mJAEU,CACV,kCAAmC,CACnC,iCACJ,CAEA,KACI,wBAAmC,CAAnC,kCACJ,CAEA,KACI,iBAAkB,CAGlB,YAAa,CACb,qBAAsB,CACtB,kBAAmB,CACnB,sBAAuB,CACvB,4BAA6B,CAC7B,UAAY,CACZ,cACJ,CAEA,GACI,iBAAoB,CACpB,4BACJ,CAEA,EACI,cAAe,CACf,uBACJ,CAEA,EACI,UACJ,CACA,QACI,wBACJ,CAEA,aACI,0BAA2B,CAC3B,cACJ,CAEA,eACI,WAAY,CACZ,UACJ,CAEA,qBACI,WAAY,CACZ,UAAW,CACX,cAAe,CACf,sCAAyC,CACzC,6BACJ,CACA,2BACI,8BAA+B,CAC/B,oBACJ,CACA,6BACI,yBACJ,CAEA,gCACI,iBAAkB,CAElB,YACJ,CACA,8CACI,UAAW,CACX,iBAAkB,CAClB,SAAW,CACX,WAAa,CACb,YAAc,CACd,UAAY,CACZ,0BACJ,CAEA,oBAEI,YAAa,CACb,WAAY,CACZ,UAAW,CACX,eAAgB,CAChB,4BAA6B,CAC7B,eAAiB,CACjB,cAAe,CAEf,eAAiB,CACjB,aAAyB,CAAzB,wBAAyB,CACzB,6BACJ,CACA,gCAEI,8BAA+B,CAC/B,qBACJ,CAEA,iBACI,cAAe,CACf,yBAA0B,CAE1B,mBACJ,CACA,mCAHI,qBAKJ,CAGA,UACI,cAAe,CACf,KAAM,CACN,OAAQ,CACR,QAAS,CACT,MAAO,CAEP,YAAa,CACb,kBAAmB,CACnB,sBAAuB,CAEvB,eAAiB,CACjB,6BAA8B,CAE9B,2BAAgC,CAChC,kCAA2B,CAA3B,0BAA2B,CAE3B,mBAAoB,CACpB,SAAU,CACV,2BACJ,CACA,iBACI,SACJ,CAGA,QACI,kBAAmB,CACnB,iBAAkB,CAClB,UAAW,CACX,WAAY,CACZ,WAAY,CACZ,eAAgB,CAChB,kBAAgC,CAAhC,+BACJ,CACA,oBACI,mBAAoB,CACpB,iBAAkB,CAClB,OAAQ,CACR,QACJ,CACA,oBACI,mBAAoB,CACpB,iBAAkB,CAClB,UAAW,CACX,WACJ,CACA,iBACI,mBAAoB,CACpB,iBAAkB,CAClB,KAAM,CACN,MAAO,CACP,UAAW,CACX,WACJ","file":"main.e77f4a10.chunk.css","sourcesContent":[":root{\n --volt-purple: #582C83;\n --background: #140022;\n --editor-purple: #522B79;\n}\n\n*{\n margin: 0;\n padding: 0;\n font-family: 'Ubuntu', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\n 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',\n sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\nbody{\n background-color: var(--background);\n}\n\n.App {\n text-align: center;\n\n /* min-height: 100vh; */\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n font-size: calc(10px + 2vmin);\n color: white;\n padding: 10vmin;\n}\n\nh2{\n margin: 10vh 0 2vh 0;\n font-size: calc(10px + 4vmin);\n}\n\np{\n max-width: 100%;\n width: calc(40vh + 15vw);\n}\n\na{\n color: white;\n}\na:hover{\n color: rgba(255,255,255,0.8);\n}\n\n.HeaderImage{\n height: calc(10px + 30vmin);\n max-width: 100%;\n}\n\n.FinishedFrame {\n height: 36vh;\n margin: 2vh;\n}\n\n.FrameChooser .frame{\n height: 12vh;\n margin: 2vh;\n cursor: pointer;\n box-shadow: 0 0 0 1vh rgba(255,255,255,0);\n transition: transform 0.2s ease;\n}\n.FrameChooser .frame:hover{\n transform-origin: center center;\n transform: scale(1.1);\n}\n.FrameChooser .frame.choosen{\n box-shadow: 0 0 0 1vh white;\n}\n\n.HashtagChooser .hashtag_button {\n position: relative;\n /* display: block; */\n margin: 1vmin;\n}\n.HashtagChooser .hashtag_button.choosen:after {\n content: \"\";\n position: absolute;\n top: -0.5vh;\n right: -0.5vh;\n bottom: -0.5vh;\n left: -0.5vh;\n box-shadow: 0 0 0 0.5vh white;\n}\n\nbutton,\n.labelButton{\n outline: none;\n border: none;\n margin: 2vh;\n padding: 1vh 2vh;\n font-size: calc(10px + 2vmin);\n font-weight: bold;\n cursor: pointer;\n\n background: white;\n color: var(--volt-purple);\n transition: transform 0.2s ease;\n}\nbutton:hover,\n.labelButton:hover{\n transform-origin: center center;\n transform: scale(1.05);\n}\n\n.labelButton img{\n display: inline;\n height: calc(10px + 4vmin);\n vertical-align: middle;\n margin: 0 2vh 0 -1vh;\n}\n.labelButton span{\n vertical-align: middle;\n}\n\n\n.droparea{\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n \n display: flex;\n align-items: center;\n justify-content: center;\n\n font-weight: bold;\n font-size: calc(10px + 10vmin);\n\n background: rgba(20, 0, 34, 0.7);\n backdrop-filter: blur(10px);\n\n pointer-events: none;\n opacity: 0;\n transition: opacity 0.2s ease;\n}\n.droparea.active{\n opacity: 1;\n}\n\n\n.Editor{\n pointer-events: all;\n position: relative;\n margin: 2vh;\n font-size: 0;\n cursor: move;\n overflow: hidden;\n background: var(--editor-purple);\n}\n.Editor .background{\n pointer-events: none; \n position: absolute; \n top: 50%;\n left: 50%;\n}\n.Editor .foreground{\n pointer-events: none;\n position: relative;\n width: 36vh;\n height: 36vh;\n}\n.Editor .hashtag{\n pointer-events: none; \n position: absolute; \n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n"]} \ No newline at end of file diff --git a/static/js/main.9031a004.chunk.js b/static/js/main.72b276c0.chunk.js similarity index 74% rename from static/js/main.9031a004.chunk.js rename to static/js/main.72b276c0.chunk.js index f3934d0..6377215 100644 --- a/static/js/main.9031a004.chunk.js +++ b/static/js/main.72b276c0.chunk.js @@ -1,2 +1,2 @@ -(this["webpackJsonpprofile-picture-generator"]=this["webpackJsonpprofile-picture-generator"]||[]).push([[0],{22:function(e,t,a){},26:function(e,t,a){var n={"./ProfileFrame Blue Bars.png":[29,4],"./ProfileFrame Green Bars.png":[30,5],"./ProfileFrame Mixed Bars.png":[31,6],"./ProfileFrame Purple.png":[32,7],"./ProfileFrame Red Bars.png":[33,8],"./ProfileFrame White Bars.png":[34,9],"./ProfileFrame Yellow Bars.png":[35,10],"./white-round-bottom-logo.png":[36,11]};function c(e){if(!a.o(n,e))return Promise.resolve().then((function(){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}));var t=n[e],c=t[0];return a.e(t[1]).then((function(){return a(c)}))}c.keys=function(){return Object.keys(n)},c.id=26,e.exports=c},27:function(e,t,a){var n={"./DeineWahl.png":[37,12],"./Europa.png":[38,13],"./JetztBistDuDran.png":[39,14],"./Volt.png":[40,15],"./Volt21.png":[41,16],"./VoltEuropa.png":[42,17],"./VoltRLP.png":[43,18],"./VoteVolt.png":[44,19],"./paneurop\xe4isch.png":[45,20],"./pragmatisch.png":[46,21],"./progressiv.png":[47,22]};function c(e){if(!a.o(n,e))return Promise.resolve().then((function(){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}));var t=n[e],c=t[0];return a.e(t[1]).then((function(){return a(c)}))}c.keys=function(){return Object.keys(n)},c.id=27,e.exports=c},28:function(e,t,a){"use strict";a.r(t);var n=a(1),c=a(0),r=a.n(c),o=a(11),O=a.n(o),s=a(10),h=a(8),i=a(2),u=(a(22),a(16)),d=a(4),l=a.n(d),j=a(5);var b=function(e){var t=e.onChange,r=Object(c.useState)([]),o=Object(i.a)(r,2),O=o[0],s=o[1],h=Object(c.useState)(null),u=Object(i.a)(h,2),d=u[0],b=u[1];Object(c.useEffect)((function(){function e(){return(e=Object(j.a)(l.a.mark((function e(){return l.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:Promise.all(["ProfileFrame Purple","ProfileFrame Mixed Bars","ProfileFrame Yellow Bars","ProfileFrame Red Bars","ProfileFrame Blue Bars","ProfileFrame Green Bars","ProfileFrame White Bars","white-round-bottom-logo"].map(function(){var e=Object(j.a)(l.a.mark((function e(t){return l.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.t0=t,e.next=3,a(26)("./".concat(t,".png"));case 3:return e.t1=e.sent,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){s(e),b(e[0].src.default)}));case 1:case"end":return e.stop()}}),e)})))).apply(this,arguments)}!function(){e.apply(this,arguments)}()}),[]);var f=Object(c.useCallback)((function(e){b(e.target.dataset.src)}),[b]);return Object(c.useEffect)((function(){t(d)}),[t,d]),Object(n.jsxs)("div",{className:"FrameChooser",children:[Object(n.jsx)("h2",{children:"Choose a frame:"}),O.map((function(e){var t=e.src.default,a=d===t;return Object(n.jsx)("img",{alt:e.name,"data-src":t,src:t,className:a?"frame choosen":"frame",onClick:f},t)}))]})};var f=function(e){var t=e.onChange,r=Object(c.useState)([]),o=Object(i.a)(r,2),O=o[0],s=o[1],h=Object(c.useState)(null),u=Object(i.a)(h,2),d=u[0],b=u[1];Object(c.useEffect)((function(){function e(){return(e=Object(j.a)(l.a.mark((function e(){return l.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:Promise.all(["","DeineWahl","Europa","JetztBistDuDran","paneurop\xe4isch","pragmatisch","progressiv","Volt","Volt21","VoltEuropa","VoltRLP","VoteVolt"].map(function(){var e=Object(j.a)(l.a.mark((function e(t){return l.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(e.t0=t,""!==t){e.next=5;break}e.t1="",e.next=8;break;case 5:return e.next=7,a(27)("./".concat(t,".png"));case 7:e.t1=e.sent;case 8:return e.t2=e.t1,e.abrupt("return",{name:e.t0,src:e.t2});case 10:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}())).then((function(e){s(e),b(e[0].src.default)}));case 1:case"end":return e.stop()}}),e)})))).apply(this,arguments)}!function(){e.apply(this,arguments)}()}),[]);var f=Object(c.useCallback)((function(e){b(e.target.dataset.src)}),[b]);return Object(c.useEffect)((function(){t(d)}),[t,d]),Object(n.jsxs)("div",{className:"HashtagChooser",children:[Object(n.jsx)("h2",{children:"Choose a Hashtag:"}),O.map((function(e){var t=e.src.default,a=d===t;return Object(n.jsx)("button",{"data-src":t,className:a?"hashtag_button choosen":"hashtag_button",onClick:f,children:""===e.name?"No Hashtag":"#"+e.name},t)}))]})},p=a(13),g=a.n(p),A=a(14),D=a.n(A);function Q(e,t,a){return Math.min(Math.max(t,e),a)}var C=function(e){var t=e.onChange,a=e.backgroundURL,r=e.backgroundRatio,o=e.frameURL,O=e.hashtagURL,s=Object(c.useRef)(null),h=Object(c.useRef)(null),u=Object(c.useState)(!1),d=Object(i.a)(u,2),l=d[0],j=d[1],b=Object(c.useState)(null),f=Object(i.a)(b,2),p=f[0],A=f[1],C=Object(c.useState)(null),H=Object(i.a)(C,2),T=H[0],m=H[1],w=Object(c.useState)(0),v=Object(i.a)(w,2),U=v[0],x=v[1],F=Object(c.useState)(0),N=Object(i.a)(F,2),K=N[0],B=N[1],E=Object(c.useState)(0),k=Object(i.a)(E,2),P=k[0],S=k[1],y=Object(c.useState)(0),R=Object(i.a)(y,2),M=R[0],I=R[1],L=Object(c.useState)(1),V=Object(i.a)(L,2),Y=V[0],z=V[1],J=Object(c.useState)(300),X=Object(i.a)(J,2),_=X[0],G=X[1],W=Object(c.useState)(300),q=Object(i.a)(W,2),Z=q[0],$=q[1],ee=Object(c.useState)(300),te=Object(i.a)(ee,2),ae=te[0],ne=te[1],ce=Object(c.useState)(300),re=Object(i.a)(ce,2),oe=re[0],Oe=re[1],se=Object(c.useState)(0),he=Object(i.a)(se,2),ie=he[0],ue=he[1],de=Object(c.useState)(0),le=Object(i.a)(de,2),je=le[0],be=le[1],fe=Object(c.useState)(0),pe=Object(i.a)(fe,2),ge=pe[0],Ae=pe[1],De=Object(c.useState)(0),Qe=Object(i.a)(De,2),Ce=Qe[0],He=Qe[1];Object(c.useEffect)((function(){t&&t({x:U,y:K,scale:Y})}),[t,U,K,Y]),Object(c.useEffect)((function(){if(s&&s.current){var e=s.current.offsetWidth,t=s.current.offsetHeight;Oe(t),ne(e);var a=1,n=1;r<1?a=1/r:r>1&&(n=1*r),G(a),$(n)}}),[r]),Object(c.useEffect)((function(){var e=function(e,t,a,n,c){var r=Math.max(0,e*a-n)/2,o=Math.max(0,t*a-c)/2;return{rangeMaxX:r,rangeMinX:0-r,rangeMaxY:o,rangeMinY:0-o}}(_*ae,Z*oe,Y,ae,oe),t=e.rangeMinX,a=e.rangeMinY,n=e.rangeMaxX,c=e.rangeMaxY;ue(t),be(a),Ae(n),He(c)}),[_,Z,ae,oe,Y]),Object(c.useEffect)((function(){x(0),B(0),S(0),I(0),z(1)}),[a]);var Te=Object(c.useCallback)((function(e){var t=1*e.target.dataset.x,a=1*e.target.dataset.y,n=Q(t+e.deltaX,ie,ge),c=Q(a+e.deltaY,je,Ce);e.isFinal?(x(n||0),B(c||0),S(0),I(0)):(S(n-t||0),I(c-a||0))}),[ie,je,ge,Ce]),me=Object(c.useCallback)((function(e,t,a,n){e.preventDefault();var c=Q(1*e.target.dataset.scale+t/200,1,8);z(c||1);var r=1*e.target.dataset.x,o=1*e.target.dataset.y;x(Q(r,ie,ge)||0),B(Q(o,je,Ce)||0)}),[ie,je,ge,Ce]);return Object(c.useEffect)((function(){if(!l&&s&&s.current){var e=s.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),A(new g.a(e,{direction:"DIRECTION_ALL"})),m(D()(e)),j(!0)}}),[s,l]),Object(c.useEffect)((function(){if(p&&T&&l&&s&&s.current)return p.on("pan",Te),T.wheel(me),function(){p.off("pan",Te),T.unwheel()}}),[s,Te,me,l,p,T]),Object(n.jsxs)("div",{className:"Editor",ref:s,"data-x":U,"data-y":K,"data-scale":Y,children:[Object(n.jsx)("img",{src:a,ref:h,alt:"",className:"background",style:{width:100*_+"%",height:100*Z+"%",transform:"translate3d(calc(-50% + ".concat(U+P,"px), calc(-50% + ").concat(K+M,"px), 0) scale(").concat(Y,",").concat(Y,")")}}),Object(n.jsx)("img",{src:o,alt:"",className:"foreground"}),Object(n.jsx)("img",{src:O,alt:"",className:"hashtag"})]})},H=a.p+"static/media/HeaderImage.1f39a672.svg",T="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABDgAAAQ4AgMAAACRfoQcAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAJUExURVIreVIreVEreKabc9cAAAADdFJOU//+/Q3dsqEAAATsSURBVHgB7dAxAQAABAAwQtI/ipMCvi3CgiMV6NChQ4cOHTp06NChQ4cOHTp06NChAx06dOjQoUOHDh06dOjQoUOHDh06dOhAhw4dOnTo0KFDhw4dOnTo0KFDhw4dOtChQ4cOHTp06NChQ4cOHTp06NChQ4cOdOjQoUOHDh06dOjQoUOHDh06dOjQoQMdOnTo0KFDhw4dOnTo0KFDhw4dOnToQIcOHTp06NChQ4cOHTp06NChQ4cOHejQoUOHDh06dOjQoUOHDh06dOjQoUMHOnTo0KFDhw4dOnTo0KFDhw4dOnTo0IEOHTp06NChQ4cOHTp06NChQ4cOHTp0oEOHDh06dOjQoUOHDh06dOjQoUOHDh3o0KFDhw4dOnTo0KFDhw4dOnTo0KFDBzp06NChQ4cOHTp06NChQ4cOHTp06NChQIcOHTp06NChQ4cOHTp06NChQ4cOHejQoUOHDh06dOjQoUOHDh06dOjQoUMHOnTo0KFDhw4dOnTo0KFDhw4dOnTo0IEOHTp06NChQ4cOHTp06NChQ4cOHTp0oEOHDh06dOjQoUOHDh06dOjQoUOHDh3o0KFDhw4dOnTo0KFDhw4dOnTo0KFDBzp06NChQ4cOHTp06NChQ4cOHTp06ECHDh06dOjQoUOHDh06dOjQoUOHDh060KFDhw4dOnTo0KFDhw4dOnTo0KFDhw506NChQ4cOHTp06NChQ4cOHTp06NChAx06dOjQoUOHDh06dOjQoUOHDh06dOhAhw4dOnTo0KFDhw4dOnTo0KFDhw4dOtChQ4cOHTp06NChQ4cOHTp06NChQ4cOBTp06NChQ4cOHTp06NChQ4cOHTp06ECHDh06dOjQoUOHDh06dOjQoUOHDh060KFDhw4dOnTo0KFDhw4dOnTo0KFDhw506NChQ4cOHTp06NChQ4cOHTp06NChAx06dOjQoUOHDh06dOjQoUOHDh06dOhAhw4dOnTo0KFDhw4dOnTo0KFDhw4dOtChQ4cOHTp06NChQ4cOHTp06NChQwc6dOjQoUOHDh06dOjQoUOHDh06dOjQgQ4dOnTo0KFDhw4dOnTo0KFDhw4dOnSgQ4cOHTp06NChQ4cOHTp06NChQ4cOHTx06NChQ4cOdOjQoUOHDh06dOjQoUOHDh06dOjQoQMdOnTo0KFDhw4dOnTo0KFDhw4dOnToQIcOHTp06NChQ4cOHTp06NChQ4cOHTrQoUOHDh06dOjQoUOHDh06dOjQoUOHDnTo0KFDhw4dOnTo0KFDhw4dOnTo0KEDHTp06NChQ4cOHTp06NChQ4cOHTp0oEOHDh06dOjQoUOHDh06dOjQoUOHDh3o0KFDhw4dOnTo0KFDhw4dOnTo0KFDBzp06NChQ4cOHTp06NChQ4cOHTp06NCBDh06dOjQoUOHDh06dOjQoUOHDh06dKBDhw4dOnTo0KFDhw4dOnTo0KFDhw4d6NChQ4cOHTp06NChQ4cOHTp06NChQ4cCHTp06NChQ4cOHTp06NChQ4cOHTp0oEOHDh06dOjQoUOHDh06dOjQoUOHDh3o0KFDhw4dOnTo0KFDhw4dOnTo0KFDBzp06NChQ4cOHTp06NChQ4cOHTp06NCBDh06dOjQoUOHDh06dOjQoUOHDh06dKBDhw4dOnTo0KFDhw4dOnTo0KFDhw4dxeoB30xd38yzCvgAAAAASUVORK5CYII=",m="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAALSURBVHgBY2BgAAAAAwABjPg5OgAAAABJRU5ErkJggg==",w=a(15),v=1080;var U=function(){var e=Object(c.useState)(null),t=Object(i.a)(e,2),a=t[0],r=t[1],o=Object(c.useState)(null),O=Object(i.a)(o,2),d=O[0],l=O[1],j=Object(c.useState)(null),p=Object(i.a)(j,2),g=p[0],A=p[1],D=Object(c.useState)(1),Q=Object(i.a)(D,2),U=Q[0],x=Q[1],F=Object(c.useState)(null),N=Object(i.a)(F,2),K=N[0],B=N[1],E=Object(c.useState)(0),k=Object(i.a)(E,2),P=k[0],S=k[1],y=Object(c.useState)(0),R=Object(i.a)(y,2),M=R[0],I=R[1],L=Object(c.useState)({x:0,y:0,scale:1}),V=Object(i.a)(L,2),Y=V[0],z=V[1],J=Object(c.useCallback)((function(e){r(e)}),[r]),X=Object(c.useCallback)((function(e){l(e)}),[l]),_=Object(c.useCallback)((function(e){var t=e.x,a=e.y,n=e.scale;z({x:t,y:a,scale:n})}),[]),G=Object(c.useCallback)((function(e){if(e){var t=new FileReader;t.onload=function(t){var a=new Image;a.onload=function(){var n,c;a.width1&&(n=1*r),G(a),$(n)}}),[r]),Object(c.useEffect)((function(){var e=function(e,t,a,n,c){var r=Math.max(0,e*a-n)/2,o=Math.max(0,t*a-c)/2;return{rangeMaxX:r,rangeMinX:0-r,rangeMaxY:o,rangeMinY:0-o}}(_*ae,Z*oe,Y,ae,oe),t=e.rangeMinX,a=e.rangeMinY,n=e.rangeMaxX,c=e.rangeMaxY;ue(t),be(a),Ae(n),He(c)}),[_,Z,ae,oe,Y]),Object(c.useEffect)((function(){U(0),B(0),S(0),I(0),z(1)}),[a]);var we=Object(c.useCallback)((function(e){var t=1*e.target.dataset.x,a=1*e.target.dataset.y,n=C(t+e.deltaX,ie,ge),c=C(a+e.deltaY,je,Qe);e.isFinal?(U(n||0),B(c||0),S(0),I(0)):(S(n-t||0),I(c-a||0))}),[ie,je,ge,Qe]),me=Object(c.useCallback)((function(e,t,a,n){e.preventDefault();var c=C(1*e.target.dataset.scale+t/200,1,8);z(c||1);var r=1*e.target.dataset.x,o=1*e.target.dataset.y;U(C(r,ie,ge)||0),B(C(o,je,Qe)||0)}),[ie,je,ge,Qe]);return Object(c.useEffect)((function(){if(!l&&O&&O.current){var e=O.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),A(new g.a(e,{direction:"DIRECTION_ALL"})),m(D()(e)),j(!0)}}),[O,l]),Object(c.useEffect)((function(){if(p&&w&&l&&O&&O.current)return p.on("pan",we),w.wheel(me),function(){p.off("pan",we),w.unwheel()}}),[O,we,me,l,p,w]),Object(n.jsxs)("div",{className:"Editor",ref:O,"data-x":x,"data-y":K,"data-scale":Y,children:[Object(n.jsx)("img",{src:a,ref:h,alt:"",className:"background",style:{width:100*_+"%",height:100*Z+"%",transform:"translate3d(calc(-50% + ".concat(x+P,"px), calc(-50% + ").concat(K+M,"px), 0) scale(").concat(Y,",").concat(Y,")")}}),Object(n.jsx)("img",{src:o,alt:"",className:"foreground"}),Object(n.jsx)("img",{src:s,alt:"",className:"hashtag"})]})},H=a.p+"static/media/HeaderImage.1f39a672.svg",w="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABDgAAAQ4AgMAAACRfoQcAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAJUExURVIreVIreVEreKabc9cAAAADdFJOU//+/Q3dsqEAAATsSURBVHgB7dAxAQAABAAwQtI/ipMCvi3CgiMV6NChQ4cOHTp06NChQ4cOHTp06NChAx06dOjQoUOHDh06dOjQoUOHDh06dOhAhw4dOnTo0KFDhw4dOnTo0KFDhw4dOtChQ4cOHTp06NChQ4cOHTp06NChQ4cOdOjQoUOHDh06dOjQoUOHDh06dOjQoQMdOnTo0KFDhw4dOnTo0KFDhw4dOnToQIcOHTp06NChQ4cOHTp06NChQ4cOHejQoUOHDh06dOjQoUOHDh06dOjQoUMHOnTo0KFDhw4dOnTo0KFDhw4dOnTo0IEOHTp06NChQ4cOHTp06NChQ4cOHTp0oEOHDh06dOjQoUOHDh06dOjQoUOHDh3o0KFDhw4dOnTo0KFDhw4dOnTo0KFDBzp06NChQ4cOHTp06NChQ4cOHTp06NChQIcOHTp06NChQ4cOHTp06NChQ4cOHejQoUOHDh06dOjQoUOHDh06dOjQoUMHOnTo0KFDhw4dOnTo0KFDhw4dOnTo0IEOHTp06NChQ4cOHTp06NChQ4cOHTp0oEOHDh06dOjQoUOHDh06dOjQoUOHDh3o0KFDhw4dOnTo0KFDhw4dOnTo0KFDBzp06NChQ4cOHTp06NChQ4cOHTp06ECHDh06dOjQoUOHDh06dOjQoUOHDh060KFDhw4dOnTo0KFDhw4dOnTo0KFDhw506NChQ4cOHTp06NChQ4cOHTp06NChAx06dOjQoUOHDh06dOjQoUOHDh06dOhAhw4dOnTo0KFDhw4dOnTo0KFDhw4dOtChQ4cOHTp06NChQ4cOHTp06NChQ4cOBTp06NChQ4cOHTp06NChQ4cOHTp06ECHDh06dOjQoUOHDh06dOjQoUOHDh060KFDhw4dOnTo0KFDhw4dOnTo0KFDhw506NChQ4cOHTp06NChQ4cOHTp06NChAx06dOjQoUOHDh06dOjQoUOHDh06dOhAhw4dOnTo0KFDhw4dOnTo0KFDhw4dOtChQ4cOHTp06NChQ4cOHTp06NChQwc6dOjQoUOHDh06dOjQoUOHDh06dOjQgQ4dOnTo0KFDhw4dOnTo0KFDhw4dOnSgQ4cOHTp06NChQ4cOHTp06NChQ4cOHTx06NChQ4cOdOjQoUOHDh06dOjQoUOHDh06dOjQoQMdOnTo0KFDhw4dOnTo0KFDhw4dOnToQIcOHTp06NChQ4cOHTp06NChQ4cOHTrQoUOHDh06dOjQoUOHDh06dOjQoUOHDnTo0KFDhw4dOnTo0KFDhw4dOnTo0KEDHTp06NChQ4cOHTp06NChQ4cOHTp0oEOHDh06dOjQoUOHDh06dOjQoUOHDh3o0KFDhw4dOnTo0KFDhw4dOnTo0KFDBzp06NChQ4cOHTp06NChQ4cOHTp06NCBDh06dOjQoUOHDh06dOjQoUOHDh06dKBDhw4dOnTo0KFDhw4dOnTo0KFDhw4d6NChQ4cOHTp06NChQ4cOHTp06NChQ4cCHTp06NChQ4cOHTp06NChQ4cOHTp0oEOHDh06dOjQoUOHDh06dOjQoUOHDh3o0KFDhw4dOnTo0KFDhw4dOnTo0KFDBzp06NChQ4cOHTp06NChQ4cOHTp06NCBDh06dOjQoUOHDh06dOjQoUOHDh06dKBDhw4dOnTo0KFDhw4dOnTo0KFDhw4dxeoB30xd38yzCvgAAAAASUVORK5CYII=",m="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAALSURBVHgBY2BgAAAAAwABjPg5OgAAAABJRU5ErkJggg==",T=a(15),v=1080;var x=function(){var e=Object(c.useState)(null),t=Object(i.a)(e,2),a=t[0],r=t[1],o=Object(c.useState)(null),s=Object(i.a)(o,2),d=s[0],l=s[1],j=Object(c.useState)(null),p=Object(i.a)(j,2),g=p[0],A=p[1],D=Object(c.useState)(1),C=Object(i.a)(D,2),x=C[0],U=C[1],F=Object(c.useState)(null),N=Object(i.a)(F,2),K=N[0],B=N[1],E=Object(c.useState)(0),k=Object(i.a)(E,2),P=k[0],S=k[1],y=Object(c.useState)(0),R=Object(i.a)(y,2),M=R[0],I=R[1],L=Object(c.useState)({x:0,y:0,scale:1}),V=Object(i.a)(L,2),Y=V[0],z=V[1],J=Object(c.useCallback)((function(e){r(e)}),[r]),X=Object(c.useCallback)((function(e){l(e)}),[l]),_=Object(c.useCallback)((function(e){var t=e.x,a=e.y,n=e.scale;z({x:t,y:a,scale:n})}),[]),G=Object(c.useCallback)((function(e){if(e){var t=new FileReader;t.onload=function(t){var a=new Image;a.onload=function(){var n,c;a.width {\n async function loadFrames(){\n Promise.all(\n [\n 'ProfileFrame Purple',\n 'ProfileFrame Mixed Bars',\n 'ProfileFrame Yellow Bars',\n 'ProfileFrame Red Bars',\n 'ProfileFrame Blue Bars',\n 'ProfileFrame Green Bars',\n 'ProfileFrame White Bars',\n 'white-round-bottom-logo',\n ]\n .map(async frame_filename => {\n return {\n name: frame_filename,\n src: await import(`./frames/${frame_filename}.png`),\n }\n })\n )\n .then(new_frames => {\n setFrames(new_frames)\n setChoosenFrame(new_frames[0].src.default)\n })\n }\n loadFrames()\n }, [])\n\n const handleImageChoosing = useCallback(event => {\n setChoosenFrame(event.target.dataset.src)\n }, [setChoosenFrame])\n\n useEffect(() => {\n onChange(choosenFrame)\n }, [onChange, choosenFrame])\n\n return (\n
\n

Choose a frame:

\n {\n frames.map(frame => {\n const frame_src_path = frame.src.default\n const isChoosen = choosenFrame === frame_src_path\n return {frame.name}\n })\n } \n
\n )\n}\n\nexport default FrameChooser\n","import { useState, useEffect, useCallback } from 'react'\n\nfunction HashtagChooser({ onChange }) {\n const [frames, setFrames] = useState([])\n const [choosenFrame, setChoosenFrame] = useState(null)\n\n useEffect(() => {\n async function loadFrames() {\n Promise.all(\n [\n '',\n 'DeineWahl',\n 'Europa',\n 'JetztBistDuDran',\n 'paneuropäisch',\n 'pragmatisch',\n 'progressiv',\n 'Volt',\n 'Volt21',\n 'VoltEuropa',\n 'VoltRLP',\n 'VoteVolt',\n ]\n .map(async frame_filename => {\n return {\n name: frame_filename,\n src: frame_filename === '' ? '' : await import(`./hashtags/${frame_filename}.png`),\n }\n })\n )\n .then(new_frames => {\n setFrames(new_frames)\n setChoosenFrame(new_frames[0].src.default)\n })\n }\n loadFrames()\n }, [])\n\n const handleImageChoosing = useCallback(event => {\n setChoosenFrame(event.target.dataset.src)\n }, [setChoosenFrame])\n\n useEffect(() => {\n onChange(choosenFrame)\n }, [onChange, choosenFrame])\n\n return (\n
\n

Choose a Hashtag:

\n {\n frames.map(frame => {\n const frame_src_path = frame.src.default\n const isChoosen = choosenFrame === frame_src_path\n return \n })\n }\n
\n )\n}\n\nexport default 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 \n \n )\n}\n\nexport default Editor\n","export default __webpack_public_path__ + \"static/media/HeaderImage.1f39a672.svg\";","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABDgAAAQ4AgMAAACRfoQcAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAJUExURVIreVIreVEreKabc9cAAAADdFJOU//+/Q3dsqEAAATsSURBVHgB7dAxAQAABAAwQtI/ipMCvi3CgiMV6NChQ4cOHTp06NChQ4cOHTp06NChAx06dOjQoUOHDh06dOjQoUOHDh06dOhAhw4dOnTo0KFDhw4dOnTo0KFDhw4dOtChQ4cOHTp06NChQ4cOHTp06NChQ4cOdOjQoUOHDh06dOjQoUOHDh06dOjQoQMdOnTo0KFDhw4dOnTo0KFDhw4dOnToQIcOHTp06NChQ4cOHTp06NChQ4cOHejQoUOHDh06dOjQoUOHDh06dOjQoUMHOnTo0KFDhw4dOnTo0KFDhw4dOnTo0IEOHTp06NChQ4cOHTp06NChQ4cOHTp0oEOHDh06dOjQoUOHDh06dOjQoUOHDh3o0KFDhw4dOnTo0KFDhw4dOnTo0KFDBzp06NChQ4cOHTp06NChQ4cOHTp06NChQIcOHTp06NChQ4cOHTp06NChQ4cOHejQoUOHDh06dOjQoUOHDh06dOjQoUMHOnTo0KFDhw4dOnTo0KFDhw4dOnTo0IEOHTp06NChQ4cOHTp06NChQ4cOHTp0oEOHDh06dOjQoUOHDh06dOjQoUOHDh3o0KFDhw4dOnTo0KFDhw4dOnTo0KFDBzp06NChQ4cOHTp06NChQ4cOHTp06ECHDh06dOjQoUOHDh06dOjQoUOHDh060KFDhw4dOnTo0KFDhw4dOnTo0KFDhw506NChQ4cOHTp06NChQ4cOHTp06NChAx06dOjQoUOHDh06dOjQoUOHDh06dOhAhw4dOnTo0KFDhw4dOnTo0KFDhw4dOtChQ4cOHTp06NChQ4cOHTp06NChQ4cOBTp06NChQ4cOHTp06NChQ4cOHTp06ECHDh06dOjQoUOHDh06dOjQoUOHDh060KFDhw4dOnTo0KFDhw4dOnTo0KFDhw506NChQ4cOHTp06NChQ4cOHTp06NChAx06dOjQoUOHDh06dOjQoUOHDh06dOhAhw4dOnTo0KFDhw4dOnTo0KFDhw4dOtChQ4cOHTp06NChQ4cOHTp06NChQwc6dOjQoUOHDh06dOjQoUOHDh06dOjQgQ4dOnTo0KFDhw4dOnTo0KFDhw4dOnSgQ4cOHTp06NChQ4cOHTp06NChQ4cOHTx06NChQ4cOdOjQoUOHDh06dOjQoUOHDh06dOjQoQMdOnTo0KFDhw4dOnTo0KFDhw4dOnToQIcOHTp06NChQ4cOHTp06NChQ4cOHTrQoUOHDh06dOjQoUOHDh06dOjQoUOHDnTo0KFDhw4dOnTo0KFDhw4dOnTo0KEDHTp06NChQ4cOHTp06NChQ4cOHTp0oEOHDh06dOjQoUOHDh06dOjQoUOHDh3o0KFDhw4dOnTo0KFDhw4dOnTo0KFDBzp06NChQ4cOHTp06NChQ4cOHTp06NCBDh06dOjQoUOHDh06dOjQoUOHDh06dKBDhw4dOnTo0KFDhw4dOnTo0KFDhw4d6NChQ4cOHTp06NChQ4cOHTp06NChQ4cCHTp06NChQ4cOHTp06NChQ4cOHTp0oEOHDh06dOjQoUOHDh06dOjQoUOHDh3o0KFDhw4dOnTo0KFDhw4dOnTo0KFDBzp06NChQ4cOHTp06NChQ4cOHTp06NCBDh06dOjQoUOHDh06dOjQoUOHDh06dKBDhw4dOnTo0KFDhw4dOnTo0KFDhw4dxeoB30xd38yzCvgAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAALSURBVHgBY2BgAAAAAwABjPg5OgAAAABJRU5ErkJggg==\"","import { useState, useCallback } from 'react'\nimport './App.css'\nimport { useDropzone } from 'react-dropzone'\nimport FrameChooser from './FrameChooser.js'\nimport HashtagChooser from './HashtagChooser.js'\nimport Editor from './Editor.js'\nimport HeaderImage from './HeaderImage.svg'\nimport purpleBG from './purpleBG.png'\nimport empty_1x1 from './empty_1x1.png'\n\nimport mergeImages from 'merge-images'\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 App() {\n const [frameURL, setFrameURL] = useState(null)\n const [hashtagURL, setHashtagURL] = useState(null)\n const [originalPhoto, setOriginalPhoto] = useState(null)\n const [originalPhotoRation, setOriginalPhotoRation] = useState(1)\n const [orientation, set_orientation] = useState(null)\n\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 handleFrameURL = useCallback(newFrameURL => {\n setFrameURL(newFrameURL)\n }, [setFrameURL])\n\n const handleHashtagURL = useCallback(newHashtagURL => {\n setHashtagURL(newHashtagURL)\n }, [setHashtagURL])\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\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 ])\n\n const { isDragActive, getRootProps } = useDropzone({\n onDrop,\n accept: 'image/*',\n maxFiles: 1,\n noKeyboard: true,\n })\n\n\n return (\n
\n \"Volt\n\n
\n Drop your photo here ...\n
\n\n

Choose your Photo:

\n

It should best be a square image or your face in the middle. The photo is not saved and never leaves your computer.

\n\n \n\n {!!originalPhoto ? (<>\n \n \n ) : null}\n\n {!!originalPhoto && !!frameURL ? (<>\n

Reposition your Photo:

\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}\n\nexport default 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 from 'react'\nimport ReactDOM from 'react-dom'\nimport App from './App'\nimport reportWebVitals from './reportWebVitals'\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.9031a004.chunk.js.map b/static/js/main.9031a004.chunk.js.map deleted file mode 100644 index fe85502..0000000 --- a/static/js/main.9031a004.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["frames lazy /^/.//.*/.png$/ groupOptions: {} namespace object","hashtags lazy /^/.//.*/.png$/ groupOptions: {} namespace object","FrameChooser.js","HashtagChooser.js","Editor.js","HeaderImage.svg","purpleBG.png","empty_1x1.png","App.js","reportWebVitals.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","useEffect","a","all","frame_filename","name","src","new_frames","default","loadFrames","handleImageChoosing","useCallback","event","target","dataset","className","frame","frame_src_path","isChoosen","alt","data-src","onClick","HashtagChooser","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","prev_x","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","App","setFrameURL","setHashtagURL","originalPhoto","setOriginalPhoto","originalPhotoRation","setOriginalPhotoRation","orientation","set_orientation","set_width","set_height","cords","setCords","handleFrameURL","newFrameURL","handleHashtagURL","newHashtagURL","handleCordsChange","handleReadFile","file","reader","FileReader","onload","reader_event","img","Image","callback","view","DataView","result","getUint16","length","byteLength","offset","marker","getUint32","little","tags","i","readAsArrayBuffer","slice","getOrientation","new_orientation","original_ration","readAsDataURL","handleImage","files_event","files","onDrop","acceptedFiles","handleDownload","canvas","document","createElement","ctx","getContext","alpha","translate","rotate","PI","width_scaled","height_scaled","drawImage","pngUrl","toDataURL","mergeImages","purpleBG","b64","data","body","appendChild","download","href","click","remove","trigger_download","useDropzone","accept","maxFiles","noKeyboard","isDragActive","getRootProps","HeaderImage","tabIndex","outline","type","display","empty_1x1","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","StrictMode","getElementById"],"mappings":"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","file":"static/js/main.9031a004.chunk.js","sourcesContent":["var map = {\n\t\"./ProfileFrame Blue Bars.png\": [\n\t\t29,\n\t\t4\n\t],\n\t\"./ProfileFrame Green Bars.png\": [\n\t\t30,\n\t\t5\n\t],\n\t\"./ProfileFrame Mixed Bars.png\": [\n\t\t31,\n\t\t6\n\t],\n\t\"./ProfileFrame Purple.png\": [\n\t\t32,\n\t\t7\n\t],\n\t\"./ProfileFrame Red Bars.png\": [\n\t\t33,\n\t\t8\n\t],\n\t\"./ProfileFrame White Bars.png\": [\n\t\t34,\n\t\t9\n\t],\n\t\"./ProfileFrame Yellow Bars.png\": [\n\t\t35,\n\t\t10\n\t],\n\t\"./white-round-bottom-logo.png\": [\n\t\t36,\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 = 26;\nmodule.exports = webpackAsyncContext;","var map = {\n\t\"./DeineWahl.png\": [\n\t\t37,\n\t\t12\n\t],\n\t\"./Europa.png\": [\n\t\t38,\n\t\t13\n\t],\n\t\"./JetztBistDuDran.png\": [\n\t\t39,\n\t\t14\n\t],\n\t\"./Volt.png\": [\n\t\t40,\n\t\t15\n\t],\n\t\"./Volt21.png\": [\n\t\t41,\n\t\t16\n\t],\n\t\"./VoltEuropa.png\": [\n\t\t42,\n\t\t17\n\t],\n\t\"./VoltRLP.png\": [\n\t\t43,\n\t\t18\n\t],\n\t\"./VoteVolt.png\": [\n\t\t44,\n\t\t19\n\t],\n\t\"./paneuropäisch.png\": [\n\t\t45,\n\t\t20\n\t],\n\t\"./pragmatisch.png\": [\n\t\t46,\n\t\t21\n\t],\n\t\"./progressiv.png\": [\n\t\t47,\n\t\t22\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 = 27;\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 useEffect(() => {\n async function loadFrames(){\n Promise.all(\n [\n 'ProfileFrame Purple',\n 'ProfileFrame Mixed Bars',\n 'ProfileFrame Yellow Bars',\n 'ProfileFrame Red Bars',\n 'ProfileFrame Blue Bars',\n 'ProfileFrame Green Bars',\n 'ProfileFrame White Bars',\n 'white-round-bottom-logo',\n ]\n .map(async frame_filename => {\n return {\n name: frame_filename,\n src: await import(`./frames/${frame_filename}.png`),\n }\n })\n )\n .then(new_frames => {\n setFrames(new_frames)\n setChoosenFrame(new_frames[0].src.default)\n })\n }\n loadFrames()\n }, [])\n\n const handleImageChoosing = useCallback(event => {\n setChoosenFrame(event.target.dataset.src)\n }, [setChoosenFrame])\n\n useEffect(() => {\n onChange(choosenFrame)\n }, [onChange, choosenFrame])\n\n return (\n
\n

Choose a frame:

\n {\n frames.map(frame => {\n const frame_src_path = frame.src.default\n const isChoosen = choosenFrame === frame_src_path\n return {frame.name}\n })\n } \n
\n )\n}\n\nexport default FrameChooser\n","import { useState, useEffect, useCallback } from 'react'\n\nfunction HashtagChooser({ onChange }) {\n const [frames, setFrames] = useState([])\n const [choosenFrame, setChoosenFrame] = useState(null)\n\n useEffect(() => {\n async function loadFrames() {\n Promise.all(\n [\n '',\n 'DeineWahl',\n 'Europa',\n 'JetztBistDuDran',\n 'paneuropäisch',\n 'pragmatisch',\n 'progressiv',\n 'Volt',\n 'Volt21',\n 'VoltEuropa',\n 'VoltRLP',\n 'VoteVolt',\n ]\n .map(async frame_filename => {\n return {\n name: frame_filename,\n src: frame_filename === '' ? '' : await import(`./hashtags/${frame_filename}.png`),\n }\n })\n )\n .then(new_frames => {\n setFrames(new_frames)\n setChoosenFrame(new_frames[0].src.default)\n })\n }\n loadFrames()\n }, [])\n\n const handleImageChoosing = useCallback(event => {\n setChoosenFrame(event.target.dataset.src)\n }, [setChoosenFrame])\n\n useEffect(() => {\n onChange(choosenFrame)\n }, [onChange, choosenFrame])\n\n return (\n
\n

Choose a Hashtag:

\n {\n frames.map(frame => {\n const frame_src_path = frame.src.default\n const isChoosen = choosenFrame === frame_src_path\n return \n })\n }\n
\n )\n}\n\nexport default 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 \n \n )\n}\n\nexport default Editor\n","export default __webpack_public_path__ + \"static/media/HeaderImage.1f39a672.svg\";","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABDgAAAQ4AgMAAACRfoQcAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAJUExURVIreVIreVEreKabc9cAAAADdFJOU//+/Q3dsqEAAATsSURBVHgB7dAxAQAABAAwQtI/ipMCvi3CgiMV6NChQ4cOHTp06NChQ4cOHTp06NChAx06dOjQoUOHDh06dOjQoUOHDh06dOhAhw4dOnTo0KFDhw4dOnTo0KFDhw4dOtChQ4cOHTp06NChQ4cOHTp06NChQ4cOdOjQoUOHDh06dOjQoUOHDh06dOjQoQMdOnTo0KFDhw4dOnTo0KFDhw4dOnToQIcOHTp06NChQ4cOHTp06NChQ4cOHejQoUOHDh06dOjQoUOHDh06dOjQoUMHOnTo0KFDhw4dOnTo0KFDhw4dOnTo0IEOHTp06NChQ4cOHTp06NChQ4cOHTp0oEOHDh06dOjQoUOHDh06dOjQoUOHDh3o0KFDhw4dOnTo0KFDhw4dOnTo0KFDBzp06NChQ4cOHTp06NChQ4cOHTp06NChQIcOHTp06NChQ4cOHTp06NChQ4cOHejQoUOHDh06dOjQoUOHDh06dOjQoUMHOnTo0KFDhw4dOnTo0KFDhw4dOnTo0IEOHTp06NChQ4cOHTp06NChQ4cOHTp0oEOHDh06dOjQoUOHDh06dOjQoUOHDh3o0KFDhw4dOnTo0KFDhw4dOnTo0KFDBzp06NChQ4cOHTp06NChQ4cOHTp06ECHDh06dOjQoUOHDh06dOjQoUOHDh060KFDhw4dOnTo0KFDhw4dOnTo0KFDhw506NChQ4cOHTp06NChQ4cOHTp06NChAx06dOjQoUOHDh06dOjQoUOHDh06dOhAhw4dOnTo0KFDhw4dOnTo0KFDhw4dOtChQ4cOHTp06NChQ4cOHTp06NChQ4cOBTp06NChQ4cOHTp06NChQ4cOHTp06ECHDh06dOjQoUOHDh06dOjQoUOHDh060KFDhw4dOnTo0KFDhw4dOnTo0KFDhw506NChQ4cOHTp06NChQ4cOHTp06NChAx06dOjQoUOHDh06dOjQoUOHDh06dOhAhw4dOnTo0KFDhw4dOnTo0KFDhw4dOtChQ4cOHTp06NChQ4cOHTp06NChQwc6dOjQoUOHDh06dOjQoUOHDh06dOjQgQ4dOnTo0KFDhw4dOnTo0KFDhw4dOnSgQ4cOHTp06NChQ4cOHTp06NChQ4cOHTx06NChQ4cOdOjQoUOHDh06dOjQoUOHDh06dOjQoQMdOnTo0KFDhw4dOnTo0KFDhw4dOnToQIcOHTp06NChQ4cOHTp06NChQ4cOHTrQoUOHDh06dOjQoUOHDh06dOjQoUOHDnTo0KFDhw4dOnTo0KFDhw4dOnTo0KEDHTp06NChQ4cOHTp06NChQ4cOHTp0oEOHDh06dOjQoUOHDh06dOjQoUOHDh3o0KFDhw4dOnTo0KFDhw4dOnTo0KFDBzp06NChQ4cOHTp06NChQ4cOHTp06NCBDh06dOjQoUOHDh06dOjQoUOHDh06dKBDhw4dOnTo0KFDhw4dOnTo0KFDhw4d6NChQ4cOHTp06NChQ4cOHTp06NChQ4cCHTp06NChQ4cOHTp06NChQ4cOHTp0oEOHDh06dOjQoUOHDh06dOjQoUOHDh3o0KFDhw4dOnTo0KFDhw4dOnTo0KFDBzp06NChQ4cOHTp06NChQ4cOHTp06NCBDh06dOjQoUOHDh06dOjQoUOHDh06dKBDhw4dOnTo0KFDhw4dOnTo0KFDhw4dxeoB30xd38yzCvgAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAALSURBVHgBY2BgAAAAAwABjPg5OgAAAABJRU5ErkJggg==\"","import { useState, useCallback } from 'react'\nimport './App.css'\nimport { useDropzone } from 'react-dropzone'\nimport FrameChooser from './FrameChooser.js'\nimport HashtagChooser from './HashtagChooser.js'\nimport Editor from './Editor.js'\nimport HeaderImage from './HeaderImage.svg'\nimport purpleBG from './purpleBG.png'\nimport empty_1x1 from './empty_1x1.png'\n\nimport mergeImages from 'merge-images'\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 App() {\n const [frameURL, setFrameURL] = useState(null)\n const [hashtagURL, setHashtagURL] = useState(null)\n const [originalPhoto, setOriginalPhoto] = useState(null)\n const [originalPhotoRation, setOriginalPhotoRation] = useState(1)\n const [orientation, set_orientation] = useState(null)\n\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 handleFrameURL = useCallback(newFrameURL => {\n setFrameURL(newFrameURL)\n }, [setFrameURL])\n\n const handleHashtagURL = useCallback(newHashtagURL => {\n setHashtagURL(newHashtagURL)\n }, [setHashtagURL])\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\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 ])\n\n const { isDragActive, getRootProps } = useDropzone({\n onDrop,\n accept: 'image/*',\n maxFiles: 1,\n noKeyboard: true,\n })\n\n\n return (\n
\n \"Volt\n\n
\n Drop your photo here ...\n
\n\n

Choose your Photo:

\n

It should best be a square image or your face in the middle. The photo is not saved and never leaves your computer.

\n\n \n\n {!!originalPhoto ? (<>\n \n \n ) : null}\n\n {!!originalPhoto && !!frameURL ? (<>\n

Reposition your Photo:

\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\nexport default 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 from 'react'\nimport ReactDOM from 'react-dom'\nimport App from './App'\nimport reportWebVitals from './reportWebVitals'\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