diff --git a/Dockerfile b/Dockerfile index e537dcf..d8abef2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,10 +2,9 @@ FROM debian:bullseye-slim as builder RUN apt update WORKDIR /data COPY . . -RUN apt install -y npm +RUN apt-get install npm RUN npm install -i package.json \ && npm run build - FROM alpine RUN apk update \ && apk add lighttpd \ diff --git a/dist/index.5c78f897.js b/dist/index.5c78f897.js new file mode 100644 index 0000000..c765f7c --- /dev/null +++ b/dist/index.5c78f897.js @@ -0,0 +1,2 @@ +!function(){function e(e){return e&&e.__esModule?e.default:e}var t;t=JSON.parse('[{"command":"help","responseType":"list","value":["a-propos : Affiche les informations me concernant","clear : Nettoie le terminal","experiences : Affiche la liste de mes expériences","get cv : Télécharge le CV","help : Affiche l\'aide","hobby : Affiche la liste de mes passes temps","projets-perso : Affiche la liste de mes projets personnels","dark/light : Change le thème de la page","Vous pouvez utiliser la touche TAB afin de compléter une commande","Vous pouvez retrouver les anciennes commandes avec les flèches haut et bas."]},{"command":"a-propos","responseType":"code","value":["{"," \\"nom\\" : \\"Gregory Lebreton\\","," \\"poste\\" : \\"Formateur Devops\\","," \\"experience\\" : \\"6\\","," \\"ville\\" : \\"Paris, France\\"","}"]},{"command":"experiences","responseType":"table","headers":["Date","Client","Description","Tech"],"rows":[["maintenant
03/2021","
Le garage numérique","Formateur Devops pour le CNAM,
administrateur système et intégrateur pour le Garage","Docker
Python
Bash"],["09/2019
06/2019","
Safran, S.A.E","Mise en place d\'une plateforme mettant en relation les
différents acteurs de la DSI sur une plateforme logicielle.","Docker
Kubernetes
Jenkins"],["03/2019
12/2017","PHP dev
Leading Frog","Module PHP permettant l\'envoie de cartes postales
numériques avec implémentation API Stripe.","PHP
JavaScript
SQL"]]},{"command":"hobby","responseType":"list","value":["Musique: Skateboard, Unity, VR","Programmation: Python, bash, PHP, C#","Autre: Famille, Cinéma, Environnement"]},{"command":"projets-perso","responseType":"table","headers":["Nom","Description","Tech","Liens"],"rows":[["Personal website
(2021)","Site web personnel me permettant de montrer mes projets et tester des applicatifs
","PHP/JS","Lien"],["GoldeneyeVR
(2020)","Implémentation VR au célèbre jeux de 1997.","C# WPF","Lien"]]}]');var i={};!function e(t,i,n,s){var o=!!(t.Worker&&t.Blob&&t.Promise&&t.OffscreenCanvas&&t.OffscreenCanvasRenderingContext2D&&t.HTMLCanvasElement&&t.HTMLCanvasElement.prototype.transferControlToOffscreen&&t.URL&&t.URL.createObjectURL);function a(){}function r(e){var n=i.exports.Promise,s=void 0!==n?n:t.Promise;return"function"==typeof s?new s(e):(e(a,a),null)}var c,h,d,l,u,m,f,p,v,_=(d=Math.floor(1e3/60),l={},u=0,"function"==typeof requestAnimationFrame&&"function"==typeof cancelAnimationFrame?(c=function(e){var t=Math.random();return l[t]=requestAnimationFrame((function i(n){u===n||u+d-1{var e={511:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Explosion=void 0;var n=i(909);t.Explosion=class{constructor(e){var{x:t,y:i,ctx:s,hue:o,exp:a,gravity:r,friction:c,brightness:h,explosionLength:d}=e;for(this._coordinates=[],this._alpha=1,this._x=t,this._y=i,this._exp=a,this._ctx=s,this._gravity=r,this._friction=c,this._explosionLength=d;this._explosionLength--;)this._coordinates.push([t,i]);this._angle=n.randomFloat(0,2*Math.PI),this._speed=n.randomInt(1,10),this._hue=n.randomInt(o-20,o+20),this._brightness=n.randomInt(h.min,h.max),this._decay=n.randomFloat(h.decay.min,h.decay.max)}update(e){this._coordinates.pop(),this._coordinates.unshift([this._x,this._y]),this._speed*=this._friction,this._x+=Math.cos(this._angle)*this._speed,this._y+=Math.sin(this._angle)*this._speed+this._gravity,this._alpha-=this._decay,this._alpha<=this._decay&&e()}draw(){var e=this._coordinates.length-1;this._ctx.beginPath(),this._exp&&(this._ctx.arc(this._x,this._y,n.randomFloat(.5,1.5),0,2*Math.PI),this._ctx.fill()),this._ctx.fillStyle=n.hsla(this._hue,this._brightness,this._alpha),this._ctx.moveTo(this._coordinates[e][0],this._coordinates[e][1]),this._ctx.lineTo(this._x,this._y),this._ctx.strokeStyle=n.hsla(this._hue,this._brightness,this._alpha),this._ctx.stroke()}}},909:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.hsla=t.getDistance=t.randomInt=t.randomFloat=void 0,t.randomFloat=function(e,t){return Math.random()*(t-e)+e},t.randomInt=function(e,t){return Math.floor(e+Math.random()*(t+1-e))},t.getDistance=function(e,t,i,n){var s=Math.pow;return Math.sqrt(s(e-i,2)+s(t-n,2))},t.hsla=function(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;return"hsla(".concat(e,", 100%, ").concat(t,"%, ").concat(i,")")}},449:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(s,o){function a(e){try{c(n.next(e))}catch(e){o(e)}}function r(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(a,r)}c((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.Sound=void 0;var s=i(909);t.Sound=class{constructor(e){this._buffer=[],this.onInit=!0,this._audioContext=new(window.AudioContext||window.webkitAudioContext),this.options=Object.assign({enabled:!1,files:["explosion0.mp3","explosion1.mp3","explosion2.mp3"],volume:{min:4,max:8}},e),this.init()}init(){this.onInit&&this.options.enabled&&(this.onInit=!1,this.load())}load(){return n(this,void 0,void 0,(function*(){for(var e of this.options.files){var t=yield(yield fetch(e)).arrayBuffer();this._audioContext.decodeAudioData(t).then((e=>{this._buffer.push(e)})).catch((e=>{throw e}))}}))}play(){if(this.options.enabled&&this._buffer.length){var e=this._audioContext.createBufferSource(),t=this._buffer[s.randomInt(0,this._buffer.length-1)],i=this._audioContext.createGain();e.buffer=t,i.gain.value=s.randomFloat(this.options.volume.min/100,this.options.volume.max/100),i.connect(this._audioContext.destination),e.connect(i),e.start(0)}else this.init()}}},668:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Trace=void 0;var n=i(909);t.Trace=class{constructor(e){var{x:t,y:i,dx:s,dy:o,ctx:a,hue:r,speed:c,traceLength:h,acceleration:d}=e;for(this._coordinates=[],this._currentDistance=0,this._x=t,this._y=i,this._sx=t,this._sy=i,this._dx=s,this._dy=o,this._ctx=a,this._hue=r,this._speed=c,this._traceLength=h,this._acceleration=d,this._totalDistance=n.getDistance(t,i,s,o);this._traceLength--;)this._coordinates.push([t,i]);this._angle=Math.atan2(o-i,s-t),this._brightness=n.randomInt(50,70)}update(e){this._coordinates.pop(),this._coordinates.unshift([this._x,this._y]),this._speed*=this._acceleration;var t=Math.cos(this._angle)*this._speed,i=Math.sin(this._angle)*this._speed;this._currentDistance=n.getDistance(this._sx,this._sy,this._x+t,this._y+i),this._currentDistance>=this._totalDistance?e(this._dx,this._dy,this._hue):(this._x+=t,this._y+=i)}draw(){var e=this._coordinates.length-1;this._ctx.beginPath(),this._ctx.moveTo(this._coordinates[e][0],this._coordinates[e][1]),this._ctx.lineTo(this._x,this._y),this._ctx.strokeStyle=n.hsla(this._hue,this._brightness),this._ctx.stroke()}}}},t={};function i(n){var s=t[n];if(void 0!==s)return s.exports;var o=t[n]={exports:{}};return e[n].call(o.exports,o,o.exports,i),o.exports}var n={};return(()=>{var e=n;Object.defineProperty(e,"__esModule",{value:!0}),e.Fireworks=void 0;var t=i(668),s=i(449),o=i(511),a=i(909);e.Fireworks=class{constructor(e){var{autoresize:t=!0,boundaries:i,brightness:n,delay:o,hue:a,mouse:r,sound:c,trace:h=3,speed:d=2,explosion:l=5,gravity:u=1.5,opacity:m=.5,particles:f=50,friction:p=.95,rocketsPoint:v=50,acceleration:_=1.05}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this._tick=0,this._version="1.3.5",this._running=!1,this._randomRocketsPoint=!1,this._experimentals=!1,this._m=!1,this._container=e,this._canvas=document.createElement("canvas"),this._ctx=this._canvas.getContext("2d"),this._container.appendChild(this._canvas),this._sound=new s.Sound(c),this.setSize(),this.setBoundaries(Object.assign({visible:!1,x:50,y:50},i)),this.autoresize=t,this.trace=h,this.speed=d,this.explosion=l,this.gravity=u,this.opacity=m,this.particles=f,this.friction=p,this.rocketsPoint=v,this.acceleration=_,this.hue=Object.assign({min:0,max:360},a),this.mouse=Object.assign({click:!1,move:!1,max:1},r),this.delay=Object.assign({min:15,max:30},o),this.brightness=Object.assign({min:50,max:80,decay:{min:.015,max:.03}},n),this.autoresize&&window.addEventListener("resize",(()=>this.windowResize())),this._canvas.addEventListener("mousedown",(e=>this.mouseDown(e))),this._canvas.addEventListener("mouseup",(e=>this.mouseUp(e))),this._canvas.addEventListener("mousemove",(e=>this.mouseMove(e)))}get isRunning(){return this._running}get version(){return this._version}start(){this._running||(this._running=!0,this.clear(),this.render())}stop(){this._running&&(this._running=!1,this.clear())}unmount(){window.removeEventListener("resize",this.windowResize),this._canvas.addEventListener("mousedown",this.mouseDown),this._canvas.addEventListener("mouseup",this.mouseUp),this._canvas.addEventListener("mousemove",this.mouseMove)}pause(){this._running=!this._running}clear(){this._ctx&&(this._traces=[],this._explosions=[],this._ctx.clearRect(0,0,this._width,this._height))}setOptions(e){for(var[t,i]of Object.entries(e)){var n=Object.prototype.hasOwnProperty.call(this,t);if("function"==typeof this[t])throw new Error("You cannot change the methods of the class!");n&&("object"==typeof this[t]?Object.assign(this[t],i):this[t]=i),"sound"===t&&Object.assign(this._sound.options,i)}}setSize(){var{width:e=this._container.clientWidth,height:t=this._container.clientHeight}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._width=e,this._height=t,this._canvas.width=e,this._canvas.height=t,this.setBoundaries({width:e,height:t})}setBoundaries(e){this.boundaries=Object.assign(Object.assign({},this.boundaries),e)}useMouse(e,t){(this.mouse.click||this.mouse.move)&&(this._mx=e.pageX-this._canvas.offsetLeft,this._my=e.pageY-this._canvas.offsetTop,this._m=t)}windowResize(){this.setSize()}mouseDown(e){this.useMouse(e,this.mouse.click)}mouseUp(e){this.useMouse(e,!1)}mouseMove(e){this.useMouse(e,this._m)}render(){this._ctx&&this._running&&(requestAnimationFrame((()=>this.render())),this._ctx.globalCompositeOperation="destination-out",this._ctx.fillStyle="rgba(0, 0, 0, ".concat(this.opacity,")"),this._ctx.fillRect(0,0,this._width,this._height),this._ctx.globalCompositeOperation="lighter",this.drawBoundaries(),this.initTrace(),this.drawTrace(),this.drawExplosion(),this._tick++)}drawBoundaries(){this.boundaries.visible&&(this._ctx.beginPath(),this._ctx.strokeStyle="red",this._ctx.rect(this.boundaries.x,this.boundaries.y,this.boundaries.width-2*this.boundaries.x,.5*this.boundaries.height),this._ctx.stroke())}initTrace(){this._ds=a.randomInt(this.delay.min,this.delay.max),(2*this._dsthis._traces.length)&&(this._traces.push(new t.Trace({x:this._width*(this._randomRocketsPoint?a.randomInt(0,100):this.rocketsPoint)/100,y:this._height,dx:this._mx&&this.mouse.move||this._m?this._mx:a.randomInt(this.boundaries.x,this.boundaries.width-2*this.boundaries.x),dy:this._my&&this.mouse.move||this._m?this._my:a.randomInt(this.boundaries.y,.5*this.boundaries.height),ctx:this._ctx,hue:a.randomInt(this.hue.min,this.hue.max),speed:this.speed,acceleration:this.acceleration,traceLength:this.trace})),this._tick=0)}drawTrace(){for(var e=this._traces.length;e--;)this._traces[e].draw(),this._traces[e].update(((t,i,n)=>{this.initExplosion(t,i,n),this._sound.play(),this._traces.splice(e,1)}))}initExplosion(e,t,i){for(var n=this.particles;n--;)this._explosions.push(new o.Explosion({x:e,y:t,ctx:this._ctx,hue:i,friction:this.friction,gravity:this.gravity,explosionLength:this.explosion,brightness:this.brightness,exp:this._experimentals}))}drawExplosion(){for(var e=this._explosions.length;e--;)this._explosions[e].draw(),this._explosions[e].update((()=>{this._explosions.splice(e,1)}))}}})(),n})()}));var a=[];e(t).forEach((function(e){a.push(e.command)}));var r=["clear","dark","light","get cv"];a=a.concat(r);var c=["pif","rm -rf /"];window.innerWidth>1024&&function(e){var t=0,i=0,n=0,s=0,o=document.querySelector(".terminal__header");function a(e){(e=e||window.event).preventDefault(),n=e.clientX,s=e.clientY,document.onmouseup=c,document.onmousemove=r}function r(o){(o=o||window.event).preventDefault(),t=n-o.clientX,i=s-o.clientY,n=o.clientX,s=o.clientY,e.style.top=e.offsetTop-i+"px",e.style.left=e.offsetLeft-t+"px"}function c(){document.onmouseup=null,document.onmousemove=null}o?o.onmousedown=a:e.onmousedown=a}(document.querySelector(".terminal"));var h=[],d=!1,l=-1,u=document.querySelector(".terminal__body");if(v(),11===(new Date).getMonth()){for(var m="",f=0;f<6;f++)m+='
';var p='");document.body.append(function(e){return document.createRange().createContextualFragment(e)}(p))}function v(e){var t=void 0===e?null:e,i=Math.random().toString(36).replace("0.",""),n=document.createElement("div");n.classList.add("terminal__line");var s=document.createElement("div");s.classList.add("terminal__response"),s.id="response-".concat(i);var o=document.createElement("input");if(o.type="text",o.id="input-".concat(i),o.autocapitalize="off",o.dataset.uid=i,o.dataset.active="1",o.addEventListener("keydown",_),n.appendChild(o),t){var a=document.getElementById(t);a&&(a.setAttribute("disabled","true"),a.removeEventListener("keydown",_),delete a.dataset.active)}document.getElementById("terminal").appendChild(n),document.getElementById("terminal").appendChild(s),o.focus()}function _(i){var m=i.target.value.trim().toLowerCase();if(13===i.keyCode){if(""!==m){d=!1;var f,p="response-".concat(i.target.dataset.uid),_=document.getElementById(p);f=c.includes(m)||r.includes(m)?function(e){switch(e){case"pif":return function(){var e={origin:{y:.7}};function t(t,i){n(Object.assign({},e,i,{particleCount:Math.floor(200*t)}))}t(.25,{spread:26,startVelocity:55}),t(.2,{spread:60}),t(.35,{spread:100,decay:.91,scalar:.8}),t(.1,{spread:120,startVelocity:25,decay:.92,scalar:1.2}),t(.1,{spread:120,startVelocity:45})}(),"Let's go !";case"light":return document.body.classList.contains("dark-mode")?(o(!1),"Your are now in light mode."):"You are already in light mode.";case"dark":return document.body.classList.contains("dark-mode")?"You are already in dark mode.":(o(!0),"You are now in dark mode.");case"get cv":return(t=document.createElement("a")).href="resources/resume.pdf",t.setAttribute("download","CV - Gregory Lebreton.pdf"),t.click(),"The CV will be downloaded.";case"rm -rf /":return o(!0),document.body.classList.add("firework"),new s.Fireworks(document.body,{mouse:{click:!0,move:!1,max:7}}).start(),"🎆";case"clear":return void(u.innerHTML='
')}var t}(m):function(i){var n=e(t).find((function(e){return e.command===i})),s="";if(void 0===n)s="'".concat(i.split(" ")[0],"' is not recognized as an internal command or external command, operable program or batch file. Type the help command to display a list of available commands.");else if("list"===n.responseType&&Array.isArray(n.value))s="";else if("text"===n.responseType)s=n.value;else if("table"===n.responseType){var o=n.headers,a=n.rows,r=o.map((function(e){return"".concat(e,"")})).join(""),c=a.map((function(e){return"".concat(e.map((function(e){return"".concat(e,"")})).join(""),"")})).join("");s="".concat(r,"").concat(c,"
")}else"code"===n.responseType&&(s="
".concat(n.value.join("\n"),"
"));return s}(m),_&&(_.innerHTML=f,h.push(m),v(i.target.id))}}else if(9===i.keyCode){if(i.preventDefault(),""===m)this.value="help";else{var g=a.find((function(e){return e.startsWith(m)}));g&&(this.value=g)}d=!1}else 38!==i.keyCode&&40!==i.keyCode||(h.length>0&&(!1===d?l=h.length-1:38===i.keyCode&&0!==l?l--:40===i.keyCode&&l!==h.length-1&&l++,this.value=h[l]),d=!0)}window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches&&o(!0),document.body.addEventListener("click",(function(e){"INPUT"!==e.target.tagName&&document.querySelector("input[data-active]").focus()})),document.querySelector(".fake-close").addEventListener("click",(function(e){var t=document.querySelector(".terminal");t.parentElement.removeChild(t)}))}(); +//# sourceMappingURL=index.5c78f897.js.map diff --git a/dist/index.5c78f897.js.map b/dist/index.5c78f897.js.map new file mode 100644 index 0000000..3a39a4e --- /dev/null +++ b/dist/index.5c78f897.js.map @@ -0,0 +1 @@ +{"mappings":"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","sources":["src/resources/commands.json","node_modules/canvas-confetti/dist/confetti.module.mjs","src/custom-comands.js","node_modules/fireworks-js/dist/fireworks.js","src/app.js","src/draggable.js"],"sourcesContent":["[\n {\n \"command\":\"help\",\n \"responseType\":\"list\",\n \"value\":[\n \"a-propos : Affiche les informations me concernant\",\n \"clear : Nettoie le terminal\",\n \"experiences : Affiche la liste de mes expériences\",\n \"get cv : Télécharge le CV\",\n \"help : Affiche l'aide\",\n \"hobby : Affiche la liste de mes passes temps\",\n \"projets-perso : Affiche la liste de mes projets personnels\",\n \"dark/light : Change le thème de la page\",\n \"Vous pouvez utiliser la touche TAB afin de compléter une commande\",\n \"Vous pouvez retrouver les anciennes commandes avec les flèches haut et bas.\"\n ]\n },\n {\n \"command\":\"a-propos\",\n \"responseType\":\"code\",\n \"value\":[\n \"{\",\n \" \\\"nom\\\" : \\\"Gregory Lebreton\\\",\",\n \" \\\"poste\\\" : \\\"Formateur Devops\\\",\",\n \" \\\"experience\\\" : \\\"6\\\",\",\n \" \\\"ville\\\" : \\\"Paris, France\\\"\",\n \"}\"\n ]\n },\n {\n \"command\":\"experiences\",\n \"responseType\":\"table\",\n \"headers\":[\n \"Date\",\n \"Client\",\n \"Description\",\n \"Tech\"\n ],\n \"rows\":[\n [\n \"maintenant
03/2021\",\n \"
Le garage numérique\",\n \"Formateur Devops pour le CNAM,
administrateur système et intégrateur pour le Garage\",\n \"Docker
Python
Bash\"\n ],\n [\n \"09/2019
06/2019\",\n \"
Safran, S.A.E\",\n \"Mise en place d'une plateforme mettant en relation les
différents acteurs de la DSI sur une plateforme logicielle.\",\n \"Docker
Kubernetes
Jenkins\"\n ],\n [\n \"03/2019
12/2017\",\n \"PHP dev
Leading Frog\",\n \"Module PHP permettant l'envoie de cartes postales
numériques avec implémentation API Stripe.\",\n \"PHP
JavaScript
SQL\"\n ]\n ]\n },\n {\n \"command\":\"hobby\",\n \"responseType\":\"list\",\n \"value\":[\n \"Musique: Skateboard, Unity, VR\",\n \"Programmation: Python, bash, PHP, C#\",\n \"Autre: Famille, Cinéma, Environnement\"\n ]\n },\n {\n \"command\":\"projets-perso\",\n \"responseType\":\"table\",\n \"headers\":[\n \"Nom\",\n \"Description\",\n \"Tech\",\n \"Liens\"\n ],\n \"rows\":[\n [\n \"Personal website
(2021)\",\n \"Site web personnel me permettant de montrer mes projets et tester des applicatifs
\",\n \"PHP/JS\",\n \"Lien\"\n ],\n [\n \"GoldeneyeVR
(2020)\",\n \"Implémentation VR au célèbre jeux de 1997.\",\n \"C# WPF\",\n \"Lien\"\n ]\n ]\n }\n]\n","// canvas-confetti v1.5.1 built on 2022-02-08T22:20:40.944Z\nvar module = {};\n\n// source content\n(function main(global, module, isWorker, workerSize) {\n var canUseWorker = !!(\n global.Worker &&\n global.Blob &&\n global.Promise &&\n global.OffscreenCanvas &&\n global.OffscreenCanvasRenderingContext2D &&\n global.HTMLCanvasElement &&\n global.HTMLCanvasElement.prototype.transferControlToOffscreen &&\n global.URL &&\n global.URL.createObjectURL);\n\n function noop() {}\n\n // create a promise if it exists, otherwise, just\n // call the function directly\n function promise(func) {\n var ModulePromise = module.exports.Promise;\n var Prom = ModulePromise !== void 0 ? ModulePromise : global.Promise;\n\n if (typeof Prom === 'function') {\n return new Prom(func);\n }\n\n func(noop, noop);\n\n return null;\n }\n\n var raf = (function () {\n var TIME = Math.floor(1000 / 60);\n var frame, cancel;\n var frames = {};\n var lastFrameTime = 0;\n\n if (typeof requestAnimationFrame === 'function' && typeof cancelAnimationFrame === 'function') {\n frame = function (cb) {\n var id = Math.random();\n\n frames[id] = requestAnimationFrame(function onFrame(time) {\n if (lastFrameTime === time || lastFrameTime + TIME - 1 < time) {\n lastFrameTime = time;\n delete frames[id];\n\n cb();\n } else {\n frames[id] = requestAnimationFrame(onFrame);\n }\n });\n\n return id;\n };\n cancel = function (id) {\n if (frames[id]) {\n cancelAnimationFrame(frames[id]);\n }\n };\n } else {\n frame = function (cb) {\n return setTimeout(cb, TIME);\n };\n cancel = function (timer) {\n return clearTimeout(timer);\n };\n }\n\n return { frame: frame, cancel: cancel };\n }());\n\n var getWorker = (function () {\n var worker;\n var prom;\n var resolves = {};\n\n function decorate(worker) {\n function execute(options, callback) {\n worker.postMessage({ options: options || {}, callback: callback });\n }\n worker.init = function initWorker(canvas) {\n var offscreen = canvas.transferControlToOffscreen();\n worker.postMessage({ canvas: offscreen }, [offscreen]);\n };\n\n worker.fire = function fireWorker(options, size, done) {\n if (prom) {\n execute(options, null);\n return prom;\n }\n\n var id = Math.random().toString(36).slice(2);\n\n prom = promise(function (resolve) {\n function workerDone(msg) {\n if (msg.data.callback !== id) {\n return;\n }\n\n delete resolves[id];\n worker.removeEventListener('message', workerDone);\n\n prom = null;\n done();\n resolve();\n }\n\n worker.addEventListener('message', workerDone);\n execute(options, id);\n\n resolves[id] = workerDone.bind(null, { data: { callback: id }});\n });\n\n return prom;\n };\n\n worker.reset = function resetWorker() {\n worker.postMessage({ reset: true });\n\n for (var id in resolves) {\n resolves[id]();\n delete resolves[id];\n }\n };\n }\n\n return function () {\n if (worker) {\n return worker;\n }\n\n if (!isWorker && canUseWorker) {\n var code = [\n 'var CONFETTI, SIZE = {}, module = {};',\n '(' + main.toString() + ')(this, module, true, SIZE);',\n 'onmessage = function(msg) {',\n ' if (msg.data.options) {',\n ' CONFETTI(msg.data.options).then(function () {',\n ' if (msg.data.callback) {',\n ' postMessage({ callback: msg.data.callback });',\n ' }',\n ' });',\n ' } else if (msg.data.reset) {',\n ' CONFETTI.reset();',\n ' } else if (msg.data.resize) {',\n ' SIZE.width = msg.data.resize.width;',\n ' SIZE.height = msg.data.resize.height;',\n ' } else if (msg.data.canvas) {',\n ' SIZE.width = msg.data.canvas.width;',\n ' SIZE.height = msg.data.canvas.height;',\n ' CONFETTI = module.exports.create(msg.data.canvas);',\n ' }',\n '}',\n ].join('\\n');\n try {\n worker = new Worker(URL.createObjectURL(new Blob([code])));\n } catch (e) {\n // eslint-disable-next-line no-console\n typeof console !== undefined && typeof console.warn === 'function' ? console.warn('🎊 Could not load worker', e) : null;\n\n return null;\n }\n\n decorate(worker);\n }\n\n return worker;\n };\n })();\n\n var defaults = {\n particleCount: 50,\n angle: 90,\n spread: 45,\n startVelocity: 45,\n decay: 0.9,\n gravity: 1,\n drift: 0,\n ticks: 200,\n x: 0.5,\n y: 0.5,\n shapes: ['square', 'circle'],\n zIndex: 100,\n colors: [\n '#26ccff',\n '#a25afd',\n '#ff5e7e',\n '#88ff5a',\n '#fcff42',\n '#ffa62d',\n '#ff36ff'\n ],\n // probably should be true, but back-compat\n disableForReducedMotion: false,\n scalar: 1\n };\n\n function convert(val, transform) {\n return transform ? transform(val) : val;\n }\n\n function isOk(val) {\n return !(val === null || val === undefined);\n }\n\n function prop(options, name, transform) {\n return convert(\n options && isOk(options[name]) ? options[name] : defaults[name],\n transform\n );\n }\n\n function onlyPositiveInt(number){\n return number < 0 ? 0 : Math.floor(number);\n }\n\n function randomInt(min, max) {\n // [min, max)\n return Math.floor(Math.random() * (max - min)) + min;\n }\n\n function toDecimal(str) {\n return parseInt(str, 16);\n }\n\n function colorsToRgb(colors) {\n return colors.map(hexToRgb);\n }\n\n function hexToRgb(str) {\n var val = String(str).replace(/[^0-9a-f]/gi, '');\n\n if (val.length < 6) {\n val = val[0]+val[0]+val[1]+val[1]+val[2]+val[2];\n }\n\n return {\n r: toDecimal(val.substring(0,2)),\n g: toDecimal(val.substring(2,4)),\n b: toDecimal(val.substring(4,6))\n };\n }\n\n function getOrigin(options) {\n var origin = prop(options, 'origin', Object);\n origin.x = prop(origin, 'x', Number);\n origin.y = prop(origin, 'y', Number);\n\n return origin;\n }\n\n function setCanvasWindowSize(canvas) {\n canvas.width = document.documentElement.clientWidth;\n canvas.height = document.documentElement.clientHeight;\n }\n\n function setCanvasRectSize(canvas) {\n var rect = canvas.getBoundingClientRect();\n canvas.width = rect.width;\n canvas.height = rect.height;\n }\n\n function getCanvas(zIndex) {\n var canvas = document.createElement('canvas');\n\n canvas.style.position = 'fixed';\n canvas.style.top = '0px';\n canvas.style.left = '0px';\n canvas.style.pointerEvents = 'none';\n canvas.style.zIndex = zIndex;\n\n return canvas;\n }\n\n function ellipse(context, x, y, radiusX, radiusY, rotation, startAngle, endAngle, antiClockwise) {\n context.save();\n context.translate(x, y);\n context.rotate(rotation);\n context.scale(radiusX, radiusY);\n context.arc(0, 0, 1, startAngle, endAngle, antiClockwise);\n context.restore();\n }\n\n function randomPhysics(opts) {\n var radAngle = opts.angle * (Math.PI / 180);\n var radSpread = opts.spread * (Math.PI / 180);\n\n return {\n x: opts.x,\n y: opts.y,\n wobble: Math.random() * 10,\n wobbleSpeed: Math.min(0.11, Math.random() * 0.1 + 0.05),\n velocity: (opts.startVelocity * 0.5) + (Math.random() * opts.startVelocity),\n angle2D: -radAngle + ((0.5 * radSpread) - (Math.random() * radSpread)),\n tiltAngle: (Math.random() * (0.75 - 0.25) + 0.25) * Math.PI,\n color: opts.color,\n shape: opts.shape,\n tick: 0,\n totalTicks: opts.ticks,\n decay: opts.decay,\n drift: opts.drift,\n random: Math.random() + 2,\n tiltSin: 0,\n tiltCos: 0,\n wobbleX: 0,\n wobbleY: 0,\n gravity: opts.gravity * 3,\n ovalScalar: 0.6,\n scalar: opts.scalar\n };\n }\n\n function updateFetti(context, fetti) {\n fetti.x += Math.cos(fetti.angle2D) * fetti.velocity + fetti.drift;\n fetti.y += Math.sin(fetti.angle2D) * fetti.velocity + fetti.gravity;\n fetti.wobble += fetti.wobbleSpeed;\n fetti.velocity *= fetti.decay;\n fetti.tiltAngle += 0.1;\n fetti.tiltSin = Math.sin(fetti.tiltAngle);\n fetti.tiltCos = Math.cos(fetti.tiltAngle);\n fetti.random = Math.random() + 2;\n fetti.wobbleX = fetti.x + ((10 * fetti.scalar) * Math.cos(fetti.wobble));\n fetti.wobbleY = fetti.y + ((10 * fetti.scalar) * Math.sin(fetti.wobble));\n\n var progress = (fetti.tick++) / fetti.totalTicks;\n\n var x1 = fetti.x + (fetti.random * fetti.tiltCos);\n var y1 = fetti.y + (fetti.random * fetti.tiltSin);\n var x2 = fetti.wobbleX + (fetti.random * fetti.tiltCos);\n var y2 = fetti.wobbleY + (fetti.random * fetti.tiltSin);\n\n context.fillStyle = 'rgba(' + fetti.color.r + ', ' + fetti.color.g + ', ' + fetti.color.b + ', ' + (1 - progress) + ')';\n context.beginPath();\n\n if (fetti.shape === 'circle') {\n context.ellipse ?\n context.ellipse(fetti.x, fetti.y, Math.abs(x2 - x1) * fetti.ovalScalar, Math.abs(y2 - y1) * fetti.ovalScalar, Math.PI / 10 * fetti.wobble, 0, 2 * Math.PI) :\n ellipse(context, fetti.x, fetti.y, Math.abs(x2 - x1) * fetti.ovalScalar, Math.abs(y2 - y1) * fetti.ovalScalar, Math.PI / 10 * fetti.wobble, 0, 2 * Math.PI);\n } else {\n context.moveTo(Math.floor(fetti.x), Math.floor(fetti.y));\n context.lineTo(Math.floor(fetti.wobbleX), Math.floor(y1));\n context.lineTo(Math.floor(x2), Math.floor(y2));\n context.lineTo(Math.floor(x1), Math.floor(fetti.wobbleY));\n }\n\n context.closePath();\n context.fill();\n\n return fetti.tick < fetti.totalTicks;\n }\n\n function animate(canvas, fettis, resizer, size, done) {\n var animatingFettis = fettis.slice();\n var context = canvas.getContext('2d');\n var animationFrame;\n var destroy;\n\n var prom = promise(function (resolve) {\n function onDone() {\n animationFrame = destroy = null;\n\n context.clearRect(0, 0, size.width, size.height);\n\n done();\n resolve();\n }\n\n function update() {\n if (isWorker && !(size.width === workerSize.width && size.height === workerSize.height)) {\n size.width = canvas.width = workerSize.width;\n size.height = canvas.height = workerSize.height;\n }\n\n if (!size.width && !size.height) {\n resizer(canvas);\n size.width = canvas.width;\n size.height = canvas.height;\n }\n\n context.clearRect(0, 0, size.width, size.height);\n\n animatingFettis = animatingFettis.filter(function (fetti) {\n return updateFetti(context, fetti);\n });\n\n if (animatingFettis.length) {\n animationFrame = raf.frame(update);\n } else {\n onDone();\n }\n }\n\n animationFrame = raf.frame(update);\n destroy = onDone;\n });\n\n return {\n addFettis: function (fettis) {\n animatingFettis = animatingFettis.concat(fettis);\n\n return prom;\n },\n canvas: canvas,\n promise: prom,\n reset: function () {\n if (animationFrame) {\n raf.cancel(animationFrame);\n }\n\n if (destroy) {\n destroy();\n }\n }\n };\n }\n\n function confettiCannon(canvas, globalOpts) {\n var isLibCanvas = !canvas;\n var allowResize = !!prop(globalOpts || {}, 'resize');\n var globalDisableForReducedMotion = prop(globalOpts, 'disableForReducedMotion', Boolean);\n var shouldUseWorker = canUseWorker && !!prop(globalOpts || {}, 'useWorker');\n var worker = shouldUseWorker ? getWorker() : null;\n var resizer = isLibCanvas ? setCanvasWindowSize : setCanvasRectSize;\n var initialized = (canvas && worker) ? !!canvas.__confetti_initialized : false;\n var preferLessMotion = typeof matchMedia === 'function' && matchMedia('(prefers-reduced-motion)').matches;\n var animationObj;\n\n function fireLocal(options, size, done) {\n var particleCount = prop(options, 'particleCount', onlyPositiveInt);\n var angle = prop(options, 'angle', Number);\n var spread = prop(options, 'spread', Number);\n var startVelocity = prop(options, 'startVelocity', Number);\n var decay = prop(options, 'decay', Number);\n var gravity = prop(options, 'gravity', Number);\n var drift = prop(options, 'drift', Number);\n var colors = prop(options, 'colors', colorsToRgb);\n var ticks = prop(options, 'ticks', Number);\n var shapes = prop(options, 'shapes');\n var scalar = prop(options, 'scalar');\n var origin = getOrigin(options);\n\n var temp = particleCount;\n var fettis = [];\n\n var startX = canvas.width * origin.x;\n var startY = canvas.height * origin.y;\n\n while (temp--) {\n fettis.push(\n randomPhysics({\n x: startX,\n y: startY,\n angle: angle,\n spread: spread,\n startVelocity: startVelocity,\n color: colors[temp % colors.length],\n shape: shapes[randomInt(0, shapes.length)],\n ticks: ticks,\n decay: decay,\n gravity: gravity,\n drift: drift,\n scalar: scalar\n })\n );\n }\n\n // if we have a previous canvas already animating,\n // add to it\n if (animationObj) {\n return animationObj.addFettis(fettis);\n }\n\n animationObj = animate(canvas, fettis, resizer, size , done);\n\n return animationObj.promise;\n }\n\n function fire(options) {\n var disableForReducedMotion = globalDisableForReducedMotion || prop(options, 'disableForReducedMotion', Boolean);\n var zIndex = prop(options, 'zIndex', Number);\n\n if (disableForReducedMotion && preferLessMotion) {\n return promise(function (resolve) {\n resolve();\n });\n }\n\n if (isLibCanvas && animationObj) {\n // use existing canvas from in-progress animation\n canvas = animationObj.canvas;\n } else if (isLibCanvas && !canvas) {\n // create and initialize a new canvas\n canvas = getCanvas(zIndex);\n document.body.appendChild(canvas);\n }\n\n if (allowResize && !initialized) {\n // initialize the size of a user-supplied canvas\n resizer(canvas);\n }\n\n var size = {\n width: canvas.width,\n height: canvas.height\n };\n\n if (worker && !initialized) {\n worker.init(canvas);\n }\n\n initialized = true;\n\n if (worker) {\n canvas.__confetti_initialized = true;\n }\n\n function onResize() {\n if (worker) {\n // TODO this really shouldn't be immediate, because it is expensive\n var obj = {\n getBoundingClientRect: function () {\n if (!isLibCanvas) {\n return canvas.getBoundingClientRect();\n }\n }\n };\n\n resizer(obj);\n\n worker.postMessage({\n resize: {\n width: obj.width,\n height: obj.height\n }\n });\n return;\n }\n\n // don't actually query the size here, since this\n // can execute frequently and rapidly\n size.width = size.height = null;\n }\n\n function done() {\n animationObj = null;\n\n if (allowResize) {\n global.removeEventListener('resize', onResize);\n }\n\n if (isLibCanvas && canvas) {\n document.body.removeChild(canvas);\n canvas = null;\n initialized = false;\n }\n }\n\n if (allowResize) {\n global.addEventListener('resize', onResize, false);\n }\n\n if (worker) {\n return worker.fire(options, size, done);\n }\n\n return fireLocal(options, size, done);\n }\n\n fire.reset = function () {\n if (worker) {\n worker.reset();\n }\n\n if (animationObj) {\n animationObj.reset();\n }\n };\n\n return fire;\n }\n\n // Make default export lazy to defer worker creation until called.\n var defaultFire;\n function getDefaultFire() {\n if (!defaultFire) {\n defaultFire = confettiCannon(null, { useWorker: true, resize: true });\n }\n return defaultFire;\n }\n\n module.exports = function() {\n return getDefaultFire().apply(this, arguments);\n };\n module.exports.reset = function() {\n getDefaultFire().reset();\n };\n module.exports.create = confettiCannon;\n}((function () {\n if (typeof window !== 'undefined') {\n return window;\n }\n\n if (typeof self !== 'undefined') {\n return self;\n }\n\n return this || {};\n})(), module, false));\n\n// end source content\n\nexport default module.exports;\nexport var create = module.exports.create;\n","import confetti from \"canvas-confetti\";\nimport { Fireworks } from \"fireworks-js\";\n\n/**\n * Affiche des confettis sur la page\n */\nexport function pif() {\n const count = 200;\n const defaults = {\n origin: { y: 0.7 },\n };\n\n function fire(particleRatio, opts) {\n confetti(\n Object.assign({}, defaults, opts, {\n particleCount: Math.floor(count * particleRatio),\n })\n );\n }\n\n fire(0.25, {\n spread: 26,\n startVelocity: 55,\n });\n fire(0.2, {\n spread: 60,\n });\n fire(0.35, {\n spread: 100,\n decay: 0.91,\n scalar: 0.8,\n });\n fire(0.1, {\n spread: 120,\n startVelocity: 25,\n decay: 0.92,\n scalar: 1.2,\n });\n fire(0.1, {\n spread: 120,\n startVelocity: 45,\n });\n}\n\nexport function setDarkMode(value) {\n if (value) {\n document.body.classList.add(\"dark-mode\");\n } else {\n document.body.classList.remove(\"dark-mode\");\n }\n}\n\nexport function getCV() {\n const a = document.createElement(\"a\");\n a.href = \"resources/resume.pdf\";\n a.setAttribute(\"download\", \"CV - Gregory Lebreton.pdf\");\n a.click();\n}\n\nexport function rmRf() {\n setDarkMode(true);\n document.body.classList.add(\"firework\");\n const fireworks = new Fireworks(document.body, {\n mouse: { click: true, move: false, max: 7 },\n });\n fireworks.start();\n}\n","/*!\n * fireworks-js 1.3.5 by Vitalij Ryndin (https://crashmax.ru)\n * https://fireworks.js.org\n * License MIT\n */\n!function(t,i){if(\"object\"==typeof exports&&\"object\"==typeof module)module.exports=i();else if(\"function\"==typeof define&&define.amd)define([],i);else{var s=i();for(var e in s)(\"object\"==typeof exports?exports:t)[e]=s[e]}}(this,(function(){return(()=>{\"use strict\";var t={511:(t,i,s)=>{Object.defineProperty(i,\"__esModule\",{value:!0}),i.Explosion=void 0;var e=s(909);i.Explosion=class{constructor(t){var{x:i,y:s,ctx:h,hue:n,exp:o,gravity:a,friction:r,brightness:c,explosionLength:_}=t;for(this._coordinates=[],this._alpha=1,this._x=i,this._y=s,this._exp=o,this._ctx=h,this._gravity=a,this._friction=r,this._explosionLength=_;this._explosionLength--;)this._coordinates.push([i,s]);this._angle=(0,e.randomFloat)(0,2*Math.PI),this._speed=(0,e.randomInt)(1,10),this._hue=(0,e.randomInt)(n-20,n+20),this._brightness=(0,e.randomInt)(c.min,c.max),this._decay=(0,e.randomFloat)(c.decay.min,c.decay.max)}update(t){this._coordinates.pop(),this._coordinates.unshift([this._x,this._y]),this._speed*=this._friction,this._x+=Math.cos(this._angle)*this._speed,this._y+=Math.sin(this._angle)*this._speed+this._gravity,this._alpha-=this._decay,this._alpha<=this._decay&&t()}draw(){var t=this._coordinates.length-1;this._ctx.beginPath(),this._exp&&(this._ctx.arc(this._x,this._y,(0,e.randomFloat)(.5,1.5),0,2*Math.PI),this._ctx.fill()),this._ctx.fillStyle=(0,e.hsla)(this._hue,this._brightness,this._alpha),this._ctx.moveTo(this._coordinates[t][0],this._coordinates[t][1]),this._ctx.lineTo(this._x,this._y),this._ctx.strokeStyle=(0,e.hsla)(this._hue,this._brightness,this._alpha),this._ctx.stroke()}}},909:(t,i)=>{Object.defineProperty(i,\"__esModule\",{value:!0}),i.hsla=i.getDistance=i.randomInt=i.randomFloat=void 0,i.randomFloat=function(t,i){return Math.random()*(i-t)+t},i.randomInt=function(t,i){return Math.floor(t+Math.random()*(i+1-t))},i.getDistance=function(t,i,s,e){var h=Math.pow;return Math.sqrt(h(t-s,2)+h(i-e,2))},i.hsla=function(t,i){var s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;return\"hsla(\".concat(t,\", 100%, \").concat(i,\"%, \").concat(s,\")\")}},449:function(t,i,s){var e=this&&this.__awaiter||function(t,i,s,e){return new(s||(s=Promise))((function(h,n){function o(t){try{r(e.next(t))}catch(t){n(t)}}function a(t){try{r(e.throw(t))}catch(t){n(t)}}function r(t){var i;t.done?h(t.value):(i=t.value,i instanceof s?i:new s((function(t){t(i)}))).then(o,a)}r((e=e.apply(t,i||[])).next())}))};Object.defineProperty(i,\"__esModule\",{value:!0}),i.Sound=void 0;var h=s(909);i.Sound=class{constructor(t){this._buffer=[],this.onInit=!0,this._audioContext=new(window.AudioContext||window.webkitAudioContext),this.options=Object.assign({enabled:!1,files:[\"explosion0.mp3\",\"explosion1.mp3\",\"explosion2.mp3\"],volume:{min:4,max:8}},t),this.init()}init(){this.onInit&&this.options.enabled&&(this.onInit=!1,this.load())}load(){return e(this,void 0,void 0,(function*(){for(var t of this.options.files){var i=yield(yield fetch(t)).arrayBuffer();this._audioContext.decodeAudioData(i).then((t=>{this._buffer.push(t)})).catch((t=>{throw t}))}}))}play(){if(this.options.enabled&&this._buffer.length){var t=this._audioContext.createBufferSource(),i=this._buffer[(0,h.randomInt)(0,this._buffer.length-1)],s=this._audioContext.createGain();t.buffer=i,s.gain.value=(0,h.randomFloat)(this.options.volume.min/100,this.options.volume.max/100),s.connect(this._audioContext.destination),t.connect(s),t.start(0)}else this.init()}}},668:(t,i,s)=>{Object.defineProperty(i,\"__esModule\",{value:!0}),i.Trace=void 0;var e=s(909);i.Trace=class{constructor(t){var{x:i,y:s,dx:h,dy:n,ctx:o,hue:a,speed:r,traceLength:c,acceleration:_}=t;for(this._coordinates=[],this._currentDistance=0,this._x=i,this._y=s,this._sx=i,this._sy=s,this._dx=h,this._dy=n,this._ctx=o,this._hue=a,this._speed=r,this._traceLength=c,this._acceleration=_,this._totalDistance=(0,e.getDistance)(i,s,h,n);this._traceLength--;)this._coordinates.push([i,s]);this._angle=Math.atan2(n-s,h-i),this._brightness=(0,e.randomInt)(50,70)}update(t){this._coordinates.pop(),this._coordinates.unshift([this._x,this._y]),this._speed*=this._acceleration;var i=Math.cos(this._angle)*this._speed,s=Math.sin(this._angle)*this._speed;this._currentDistance=(0,e.getDistance)(this._sx,this._sy,this._x+i,this._y+s),this._currentDistance>=this._totalDistance?t(this._dx,this._dy,this._hue):(this._x+=i,this._y+=s)}draw(){var t=this._coordinates.length-1;this._ctx.beginPath(),this._ctx.moveTo(this._coordinates[t][0],this._coordinates[t][1]),this._ctx.lineTo(this._x,this._y),this._ctx.strokeStyle=(0,e.hsla)(this._hue,this._brightness),this._ctx.stroke()}}}},i={};function s(e){var h=i[e];if(void 0!==h)return h.exports;var n=i[e]={exports:{}};return t[e].call(n.exports,n,n.exports,s),n.exports}var e={};return(()=>{var t=e;Object.defineProperty(t,\"__esModule\",{value:!0}),t.Fireworks=void 0;var i=s(668),h=s(449),n=s(511),o=s(909);t.Fireworks=class{constructor(t){var{autoresize:i=!0,boundaries:s,brightness:e,delay:n,hue:o,mouse:a,sound:r,trace:c=3,speed:_=2,explosion:d=5,gravity:u=1.5,opacity:l=.5,particles:p=50,friction:x=.95,rocketsPoint:m=50,acceleration:v=1.05}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this._tick=0,this._version=\"1.3.5\",this._running=!1,this._randomRocketsPoint=!1,this._experimentals=!1,this._m=!1,this._container=t,this._canvas=document.createElement(\"canvas\"),this._ctx=this._canvas.getContext(\"2d\"),this._container.appendChild(this._canvas),this._sound=new h.Sound(r),this.setSize(),this.setBoundaries(Object.assign({visible:!1,x:50,y:50},s)),this.autoresize=i,this.trace=c,this.speed=_,this.explosion=d,this.gravity=u,this.opacity=l,this.particles=p,this.friction=x,this.rocketsPoint=m,this.acceleration=v,this.hue=Object.assign({min:0,max:360},o),this.mouse=Object.assign({click:!1,move:!1,max:1},a),this.delay=Object.assign({min:15,max:30},n),this.brightness=Object.assign({min:50,max:80,decay:{min:.015,max:.03}},e),this.autoresize&&window.addEventListener(\"resize\",(()=>this.windowResize())),this._canvas.addEventListener(\"mousedown\",(t=>this.mouseDown(t))),this._canvas.addEventListener(\"mouseup\",(t=>this.mouseUp(t))),this._canvas.addEventListener(\"mousemove\",(t=>this.mouseMove(t)))}get isRunning(){return this._running}get version(){return this._version}start(){this._running||(this._running=!0,this.clear(),this.render())}stop(){this._running&&(this._running=!1,this.clear())}unmount(){window.removeEventListener(\"resize\",this.windowResize),this._canvas.addEventListener(\"mousedown\",this.mouseDown),this._canvas.addEventListener(\"mouseup\",this.mouseUp),this._canvas.addEventListener(\"mousemove\",this.mouseMove)}pause(){this._running=!this._running}clear(){this._ctx&&(this._traces=[],this._explosions=[],this._ctx.clearRect(0,0,this._width,this._height))}setOptions(t){for(var[i,s]of Object.entries(t)){var e=Object.prototype.hasOwnProperty.call(this,i);if(\"function\"==typeof this[i])throw new Error(\"You cannot change the methods of the class!\");e&&(\"object\"==typeof this[i]?Object.assign(this[i],s):this[i]=s),\"sound\"===i&&Object.assign(this._sound.options,s)}}setSize(){var{width:t=this._container.clientWidth,height:i=this._container.clientHeight}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._width=t,this._height=i,this._canvas.width=t,this._canvas.height=i,this.setBoundaries({width:t,height:i})}setBoundaries(t){this.boundaries=Object.assign(Object.assign({},this.boundaries),t)}useMouse(t,i){(this.mouse.click||this.mouse.move)&&(this._mx=t.pageX-this._canvas.offsetLeft,this._my=t.pageY-this._canvas.offsetTop,this._m=i)}windowResize(){this.setSize()}mouseDown(t){this.useMouse(t,this.mouse.click)}mouseUp(t){this.useMouse(t,!1)}mouseMove(t){this.useMouse(t,this._m)}render(){this._ctx&&this._running&&(requestAnimationFrame((()=>this.render())),this._ctx.globalCompositeOperation=\"destination-out\",this._ctx.fillStyle=\"rgba(0, 0, 0, \".concat(this.opacity,\")\"),this._ctx.fillRect(0,0,this._width,this._height),this._ctx.globalCompositeOperation=\"lighter\",this.drawBoundaries(),this.initTrace(),this.drawTrace(),this.drawExplosion(),this._tick++)}drawBoundaries(){this.boundaries.visible&&(this._ctx.beginPath(),this._ctx.strokeStyle=\"red\",this._ctx.rect(this.boundaries.x,this.boundaries.y,this.boundaries.width-2*this.boundaries.x,.5*this.boundaries.height),this._ctx.stroke())}initTrace(){this._ds=(0,o.randomInt)(this.delay.min,this.delay.max),(2*this._dsthis._traces.length)&&(this._traces.push(new i.Trace({x:this._width*(this._randomRocketsPoint?(0,o.randomInt)(0,100):this.rocketsPoint)/100,y:this._height,dx:this._mx&&this.mouse.move||this._m?this._mx:(0,o.randomInt)(this.boundaries.x,this.boundaries.width-2*this.boundaries.x),dy:this._my&&this.mouse.move||this._m?this._my:(0,o.randomInt)(this.boundaries.y,.5*this.boundaries.height),ctx:this._ctx,hue:(0,o.randomInt)(this.hue.min,this.hue.max),speed:this.speed,acceleration:this.acceleration,traceLength:this.trace})),this._tick=0)}drawTrace(){for(var t=this._traces.length;t--;)this._traces[t].draw(),this._traces[t].update(((i,s,e)=>{this.initExplosion(i,s,e),this._sound.play(),this._traces.splice(t,1)}))}initExplosion(t,i,s){for(var e=this.particles;e--;)this._explosions.push(new n.Explosion({x:t,y:i,ctx:this._ctx,hue:s,friction:this.friction,gravity:this.gravity,explosionLength:this.explosion,brightness:this.brightness,exp:this._experimentals}))}drawExplosion(){for(var t=this._explosions.length;t--;)this._explosions[t].draw(),this._explosions[t].update((()=>{this._explosions.splice(t,1)}))}}})(),e})()}));","/**\n * @typedef Command\n * @property {string} command\n * @property {string} responseType\n * @property {string?} value\n * @property {string[]?} headers\n * @property {string[]?} rows\n */\n\n/**\n * @type {Command[]} commands\n */\nimport commands from \"./resources/commands.json\";\nimport { getCV, pif, rmRf, setDarkMode } from \"./custom-comands\";\nimport { dragElement } from \"./draggable\";\n\n// Table containing the orders (useful for the completion of the orders)\nlet commandsList = [];\ncommands.forEach((c) => {\n commandsList.push(c.command);\n});\n\n// Commands that require JS processing\nconst customCommands = [\"clear\", \"dark\", \"light\", \"get cv\"];\ncommandsList = commandsList.concat(customCommands);\n\n// Eyster eggs' commands not available for autocompletion\nconst hiddenCommands = [\"pif\", \"rm -rf /\"];\n\n// Added the ability to move the window for PCs\nif (window.innerWidth > 1024) {\n dragElement(document.querySelector(\".terminal\"));\n}\n\n// Order history table\nconst commandsHistory = [];\nlet historyMode = false;\nlet historyIndex = -1;\nconst terminalBody = document.querySelector(\".terminal__body\");\n\n// Adding the default line\naddNewLine();\n\n// December Easter egg, adding snowflakes\nconst now = new Date();\nif (now.getMonth() === 11) {\n let htmlFlakes = \"\";\n for (let i = 0; i < 6; i++) {\n htmlFlakes += `
`;\n }\n const html = `
${htmlFlakes}
`;\n document.body.append(stringToDom(html));\n}\n\n// Set to dark mode if the browser theme is dark\nif (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {\n setDarkMode(true);\n}\n\n/**\n * Returns the HTML of the response for a given command\n * @param {string} command\n */\nfunction getDomForCommand(command) {\n const commandObj = commands.find((el) => el.command === command);\n let html = \"\";\n if (commandObj === undefined) {\n html = `'${\n command.split(\" \")[0]\n }' is not recognized as an internal command or external command, operable program or batch file. Type the help command to display a list of available commands.`;\n } else {\n if (commandObj.responseType === \"list\" && Array.isArray(commandObj.value)) {\n html = \"
    \";\n html += commandObj.value.map((s) => `
  • ${s}
  • `).join(\"\");\n html += \"
\";\n } else if (commandObj.responseType === \"text\") {\n html = commandObj.value;\n } else if (commandObj.responseType === \"table\") {\n const headers = commandObj.headers;\n const rows = commandObj.rows;\n const thsHtml = headers.map((h) => `${h}`).join(\"\");\n const tdsHtml = rows\n .map((r) => `${r.map((rtd) => `${rtd}`).join(\"\")}`)\n .join(\"\");\n html = `${thsHtml}${tdsHtml}
`;\n } else if (commandObj.responseType === \"code\") {\n html = `
${commandObj.value.join(\"\\n\")}
`;\n }\n }\n\n return html;\n}\n\n/**\n * Adds a new command input line and disables the previous one.\n * @param {string|null} previousUid uid de la ligne précédente.\n */\nfunction addNewLine(previousUid = null) {\n const uid = Math.random().toString(36).replace(\"0.\", \"\");\n // terminal__line\n const terminalLineEl = document.createElement(\"div\");\n terminalLineEl.classList.add(\"terminal__line\");\n\n // terminal__response\n const terminalResponseEl = document.createElement(\"div\");\n terminalResponseEl.classList.add(\"terminal__response\");\n terminalResponseEl.id = `response-${uid}`;\n\n // input text\n const inputEl = document.createElement(\"input\");\n inputEl.type = \"text\";\n inputEl.id = `input-${uid}`;\n inputEl.autocapitalize = \"off\";\n inputEl.dataset.uid = uid;\n inputEl.dataset.active = \"1\"; // Needed for focus\n inputEl.addEventListener(\"keydown\", onCommandInput);\n\n terminalLineEl.appendChild(inputEl);\n if (previousUid) {\n const previousInputEl = document.getElementById(previousUid);\n if (previousInputEl) {\n previousInputEl.setAttribute(\"disabled\", \"true\");\n previousInputEl.removeEventListener(\"keydown\", onCommandInput);\n delete previousInputEl.dataset.active;\n }\n }\n document.getElementById(\"terminal\").appendChild(terminalLineEl);\n document.getElementById(\"terminal\").appendChild(terminalResponseEl);\n\n inputEl.focus(); // Adds the focus as soon as the field is created\n}\n\n/**\n * Manages the keydown on the command input.\n * @param e\n */\nfunction onCommandInput(e) {\n const commandValue = e.target.value.trim().toLowerCase();\n if (e.keyCode === 13) {\n // ENTER\n if (commandValue !== \"\") {\n historyMode = false;\n const idResponse = `response-${e.target.dataset.uid}`;\n const responseEl = document.getElementById(idResponse);\n let html;\n if (\n hiddenCommands.includes(commandValue) ||\n customCommands.includes(commandValue)\n ) {\n html = handleCustomCommands(commandValue);\n } else {\n html = getDomForCommand(commandValue);\n }\n if (responseEl) {\n responseEl.innerHTML = html;\n commandsHistory.push(commandValue);\n addNewLine(e.target.id);\n }\n }\n } else if (e.keyCode === 9) {\n // TAB\n e.preventDefault();\n if (commandValue === \"\") {\n this.value = \"help\";\n } else {\n const matchingCommand = commandsList.find((c) =>\n c.startsWith(commandValue)\n );\n if (matchingCommand) {\n this.value = matchingCommand;\n }\n }\n historyMode = false;\n } else if (e.keyCode === 38 || e.keyCode === 40) {\n // UP / DOWN\n // History management\n if (commandsHistory.length > 0) {\n if (historyMode === false) {\n historyIndex = commandsHistory.length - 1;\n } else {\n if (e.keyCode === 38 && historyIndex !== 0) {\n // UP\n historyIndex--;\n } else if (\n e.keyCode === 40 &&\n historyIndex !== commandsHistory.length - 1\n ) {\n historyIndex++;\n }\n }\n this.value = commandsHistory[historyIndex];\n }\n historyMode = true;\n }\n}\n\n/**\n * Allows to manage hidden commands (not proposed in the autocompletion)\n * @param {string} command\n * @returns {string|void} Html to be displayed in the response of the command\n */\nfunction handleCustomCommands(command) {\n switch (command) {\n case \"pif\":\n pif();\n return \"Let's go !\";\n case \"light\":\n if (!document.body.classList.contains(\"dark-mode\"))\n return \"You are already in light mode.\";\n setDarkMode(false);\n return \"Your are now in light mode.\";\n case \"dark\":\n if (document.body.classList.contains(\"dark-mode\"))\n return \"You are already in dark mode.\";\n setDarkMode(true);\n return \"You are now in dark mode.\";\n case \"get cv\":\n getCV();\n return \"The CV will be downloaded.\";\n case \"rm -rf /\":\n rmRf();\n return \"🎆\";\n case \"clear\":\n terminalBody.innerHTML = `
`;\n return;\n }\n}\n\n/**\n * Convert HTML to DOM object\n * @param html\n * @returns {DocumentFragment}\n */\nfunction stringToDom(html) {\n return document.createRange().createContextualFragment(html);\n}\n\n// ------------------------------------------------------------------------------------\n// EVENT LISTENNER\n// ------------------------------------------------------------------------------------\n\n// Added focus on the input even if you click on the body (to keep the cursor)\ndocument.body.addEventListener(\"click\", function (e) {\n if (e.target.tagName !== \"INPUT\") {\n const activeInput = document.querySelector(\"input[data-active]\");\n activeInput.focus();\n }\n});\n\ndocument.querySelector(\".fake-close\").addEventListener(\"click\", function (e) {\n const terminalEl = document.querySelector(\".terminal\");\n terminalEl.parentElement.removeChild(terminalEl);\n});\n","export function dragElement(elmnt) {\n var pos1 = 0,\n pos2 = 0,\n pos3 = 0,\n pos4 = 0;\n const element = document.querySelector(\".terminal__header\");\n if (element) {\n // if present, the header is where you move the DIV from:\n element.onmousedown = dragMouseDown;\n } else {\n // otherwise, move the DIV from anywhere inside the DIV:\n elmnt.onmousedown = dragMouseDown;\n }\n\n function dragMouseDown(e) {\n e = e || window.event;\n e.preventDefault();\n // get the mouse cursor position at startup:\n pos3 = e.clientX;\n pos4 = e.clientY;\n document.onmouseup = closeDragElement;\n // call a function whenever the cursor moves:\n document.onmousemove = elementDrag;\n }\n\n function elementDrag(e) {\n e = e || window.event;\n e.preventDefault();\n // calculate the new cursor position:\n pos1 = pos3 - e.clientX;\n pos2 = pos4 - e.clientY;\n pos3 = e.clientX;\n pos4 = e.clientY;\n // set the element's new position:\n elmnt.style.top = elmnt.offsetTop - pos2 + \"px\";\n elmnt.style.left = elmnt.offsetLeft - pos1 + \"px\";\n }\n\n function closeDragElement() {\n // stop moving when mouse button is released:\n document.onmouseup = null;\n document.onmousemove = null;\n }\n}\n"],"names":["$d92092a09195f7d1$exports","JSON","parse","$34c903c393c5d006$var$module","main","global","module","isWorker","workerSize","canUseWorker","Worker","Blob","Promise","OffscreenCanvas","OffscreenCanvasRenderingContext2D","HTMLCanvasElement","prototype","transferControlToOffscreen","URL","createObjectURL","noop","promise","func","ModulePromise","exports","Prom","frame","cancel","TIME","frames","lastFrameTime","worker","prom","resolves","defaultFire","raf","Math","floor","requestAnimationFrame","cancelAnimationFrame","cb","id","random","onFrame","time","setTimeout","timer","clearTimeout","getWorker","code","toString","join","e","console","warn","execute","options","callback","postMessage","init","canvas","offscreen","fire","size","done","slice","resolve","workerDone","msg","data","removeEventListener","addEventListener","bind","reset","decorate","defaults","particleCount","angle","spread","startVelocity","decay","gravity","drift","ticks","x","y","shapes","zIndex","colors","disableForReducedMotion","scalar","prop","name","transform","val","convert","onlyPositiveInt","number","toDecimal","str","parseInt","colorsToRgb","map","hexToRgb","String","replace","length","r","substring","g","b","setCanvasWindowSize","width","document","documentElement","clientWidth","height","clientHeight","setCanvasRectSize","rect","getBoundingClientRect","animate","fettis","resizer","animationFrame","destroy","animatingFettis","context","getContext","onDone","clearRect","update","filter","fetti","cos","angle2D","velocity","sin","wobble","wobbleSpeed","tiltAngle","tiltSin","tiltCos","wobbleX","wobbleY","progress","tick","totalTicks","x1","y1","x2","y2","fillStyle","color","beginPath","shape","ellipse","abs","ovalScalar","PI","radiusX","radiusY","rotation","startAngle","endAngle","antiClockwise","save","translate","rotate","scale","arc","restore","moveTo","lineTo","closePath","fill","updateFetti","addFettis","concat","confettiCannon","globalOpts","animationObj","isLibCanvas","allowResize","globalDisableForReducedMotion","Boolean","initialized","__confetti_initialized","preferLessMotion","matchMedia","matches","fireLocal","opts","radAngle","radSpread","min","max","Number","origin","Object","getOrigin","temp","startX","startY","push","createElement","style","position","top","left","pointerEvents","getCanvas","body","appendChild","onResize","obj","resize","removeChild","getDefaultFire","useWorker","apply","this","arguments","create","window","self","$34c903c393c5d006$export$2e2bcd8739ae039","$f36443a0b7a43964$export$faf76607d863714d","value","classList","add","remove","t","i","$96ebb6bf3d64fea6$exports","define","amd","s","t1","defineProperty","Explosion","ctx","h","hue","n","exp","o","a","friction","brightness","c","explosionLength","_","_coordinates","_alpha","_x","_y","_exp","_ctx","_gravity","_friction","_explosionLength","_angle","randomFloat","_speed","randomInt","_hue","_brightness","_decay","pop","unshift","draw","hsla","strokeStyle","stroke","getDistance","pow","sqrt","__awaiter","next","throw","then","Sound","_buffer","onInit","_audioContext","AudioContext","webkitAudioContext","assign","enabled","files","volume","load","fetch","arrayBuffer","decodeAudioData","catch","play","createBufferSource","createGain","buffer","gain","connect","destination","start","Trace","dx","dy","speed","traceLength","acceleration","_currentDistance","_sx","_sy","_dx","_dy","_traceLength","_acceleration","_totalDistance","atan2","call","t2","Fireworks","autoresize","boundaries","delay","mouse","sound","trace","explosion","d","u","opacity","l","particles","p","rocketsPoint","m","v","_tick","_version","_running","_randomRocketsPoint","_experimentals","_m","_container","_canvas","_sound","setSize","setBoundaries","visible","click","move","windowResize","mouseDown","mouseUp","mouseMove","isRunning","version","clear","render","stop","unmount","pause","_traces","_explosions","_width","_height","setOptions","entries","hasOwnProperty","Error","useMouse","_mx","pageX","offsetLeft","_my","pageY","offsetTop","globalCompositeOperation","fillRect","drawBoundaries","initTrace","drawTrace","drawExplosion","_ds","initExplosion","splice","$02a59f831d44c109$var$commandsList","$parcel$interopDefault","forEach","command","$02a59f831d44c109$var$customCommands","$02a59f831d44c109$var$hiddenCommands","innerWidth","elmnt","pos1","pos2","pos3","pos4","element","querySelector","dragMouseDown","event","preventDefault","clientX","clientY","onmouseup","closeDragElement","onmousemove","elementDrag","onmousedown","$83df960a9e28805f$export$69374dc2b307e4","$02a59f831d44c109$var$commandsHistory","$02a59f831d44c109$var$historyMode","$02a59f831d44c109$var$historyIndex","$02a59f831d44c109$var$terminalBody","$02a59f831d44c109$var$addNewLine","Date","getMonth","htmlFlakes","html","append","createRange","createContextualFragment","$02a59f831d44c109$var$stringToDom","param","previousUid","uid","terminalLineEl","terminalResponseEl","inputEl","type","autocapitalize","dataset","active","$02a59f831d44c109$var$onCommandInput","previousInputEl","getElementById","setAttribute","focus","commandValue","target","trim","toLowerCase","keyCode","idResponse","responseEl","includes","particleRatio","$f36443a0b7a43964$export$6de48e3f8be72096","contains","href","innerHTML","$02a59f831d44c109$var$handleCustomCommands","commandObj","find","el","undefined","split","responseType","Array","isArray","headers","rows","thsHtml","tdsHtml","rtd","$02a59f831d44c109$var$getDomForCommand","matchingCommand","startsWith","tagName","terminalEl","parentElement"],"version":3,"file":"index.5c78f897.js.map"} \ No newline at end of file diff --git a/dist/index.777834ac.css b/dist/index.777834ac.css new file mode 100644 index 0000000..9d7c1d7 --- /dev/null +++ b/dist/index.777834ac.css @@ -0,0 +1,2 @@ +:root{--text-color:#fff;--text-accent-color:#e9967a;--link-color:#ff8c00;--bg-1:#f27121;--bg-2:#e94057;--bg-3:#8a2387;--bg-1-social:#f3a183;--bg-2-social:#ec6f66;--username-color:#5f9ea0;--terminal-bg:rgba(56,4,40,0.9);--terminal-header-bg:#bbb}body{align-items:center;background:var(--bg-3);background:-webkit-linear-gradient(to right,var(--bg-1),var(--bg-2),var(--bg-3));background:linear-gradient(to right,var(--bg-1),var(--bg-2),var(--bg-3));box-sizing:border-box;display:flex;flex-direction:column;height:100vh;justify-content:space-around;margin:0}body.dark-mode{--text-accent-color:#ffca85;--link-color:#deb887;--bg-1:#211f20;--bg-2:#292d34;--bg-3:#213030;--bg-1-social:#414141;--bg-2-social:#485461;--username-color:#858585;--terminal-bg:rgb(0 0 0/90%);--terminal-header-bg:#585252}body.dark-mode.firework{--terminal-bg:rgb(0 0 0/15%)}ul{margin:0}.terminal{height:450px;overflow:hidden;position:absolute;resize:both;width:min(900px,90vw)}.terminal .terminal__header{background-color:var(--terminal-header-bg);border-top-left-radius:5px;border-top-right-radius:5px;cursor:move;height:25px;margin:0 auto;padding:0 8px}.terminal .terminal__header .fake-button{border:1px solid #000;border-radius:50%;cursor:pointer;display:inline-block;height:10px;left:6px;position:relative;top:6px;width:10px}.terminal .terminal__header .fake-button.fake-close{background-color:#ff3b47;border-color:#9d252b;left:6px}.terminal .terminal__header .fake-button.fake-minimize{background-color:#ffc100;border-color:#9d802c;left:11px}.terminal .terminal__header .fake-button.fake-zoom{background-color:#00d742;border-color:#049931;left:16px}.terminal .terminal__body{background:var(--terminal-bg);border-bottom-left-radius:5px;border-bottom-right-radius:5px;box-shadow:0 12px 28px 0 rgba(0,0,0,.2),0 2px 4px 0 rgba(0,0,0,.1),inset 0 0 0 1px hsla(0,0%,100%,.05);color:var(--text-color);font-family:Ubuntu Mono,monospace;height:calc(100% - 41px);overflow-x:hidden;overflow-y:scroll;padding:8px}.terminal .terminal__body code{color:var(--text-accent-color);font-size:14px}.terminal .terminal__body .terminal__banner{color:var(--text-color);display:flex;flex-direction:column;justify-content:center}.terminal .terminal__body .terminal__banner .terminal__author{text-align:right}.terminal .terminal__body .terminal__line{margin-bottom:8px}.terminal .terminal__body .terminal__line:before{color:var(--username-color);content:"Greg LEBRETON ~$ "}.terminal .terminal__body .terminal__line input[type=text]{background:none;border:none;color:var(--text-color);font-family:Ubuntu Mono,monospace;font-size:15px;outline:none;width:calc(100% - 150px)}.terminal .terminal__body .terminal__response{margin:8px 0 16px}.terminal .terminal__body .terminal__response table{border:1px dashed;padding:4px;width:100%}.terminal .terminal__body .terminal__response table a{color:#ff8c00;text-decoration:none}.terminal .terminal__body .terminal__response table thead th{border-bottom:1px solid #fff;color:#5f9ea0;font-weight:400;padding-bottom:4px}.terminal .terminal__body .terminal__response table tbody td{padding:4px}.terminal .terminal__body .terminal__response table tbody tr:not(:last-child) td{border-bottom:1px solid #fff}.socials{bottom:16px;display:flex;gap:16px;position:absolute;right:16px}.socials a{background:var(--bg-2-social);background:-webkit-linear-gradient(to left,var(--bg-1-social),var(--bg-2-social));background:linear-gradient(to left,var(--bg-1-social),var(--bg-2-social));border-radius:50%}.socials a,.socials a:hover{align-items:center;box-shadow:0 2px 8px 0 rgba(99,99,99,.2);display:flex;height:4em;justify-content:center;text-decoration:none;width:4em}.socials a:hover{background:var(--bg-2-social);background:-webkit-linear-gradient(to right,var(--bg-1-social),var(--bg-2-social));background:linear-gradient(to right,var(--bg-1-social),var(--bg-2-social))}.socials a i{color:#fff;font-size:2em}#banner-github{position:absolute;right:0;top:0}@media (max-width:880px){.terminal .terminal__body .terminal__banner pre{font-size:10px}}@media (max-width:640px){body{align-items:center;flex-direction:column;justify-content:space-evenly}canvas{bottom:0;left:0;position:fixed;right:0;top:0;z-index:-1}.terminal{height:unset;position:unset;resize:none;width:unset}.terminal .terminal__body{height:70vh;max-width:unset;width:90vw}.terminal .terminal__body .terminal__banner pre{font-size:5px}.socials{bottom:unset;font-size:13px;position:relative;right:unset}#banner-github img{height:100px;width:100px}#version{font-size:13px;right:38px;top:38px}}.snowflake{color:#fff;font-family:Arial,sans-serif;font-size:1em;text-shadow:0 0 5px #000}@-webkit-keyframes snowflakes-fall{0%{top:-10%}to{top:100%}}@-webkit-keyframes snowflakes-shake{0%,to{-webkit-transform:translateX(0);transform:translateX(0)}50%{-webkit-transform:translateX(80px);transform:translateX(80px)}}@keyframes snowflakes-fall{0%{top:-10%}to{top:100%}}@keyframes snowflakes-shake{0%,to{transform:translateX(0)}50%{transform:translateX(80px)}}.snowflake{-webkit-animation-duration:10s,3s;animation-duration:10s,3s;-webkit-animation-iteration-count:infinite,infinite;animation-iteration-count:infinite,infinite;-webkit-animation-name:snowflakes-fall,snowflakes-shake;animation-name:snowflakes-fall,snowflakes-shake;-webkit-animation-play-state:running,running;animation-play-state:running,running;-webkit-animation-timing-function:linear,ease-in-out;animation-timing-function:linear,ease-in-out;cursor:default;position:fixed;top:-10%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:9999}.snowflake:nth-of-type(0){-webkit-animation-delay:0s,0s;animation-delay:0s,0s;left:1%}.snowflake:first-of-type{-webkit-animation-delay:1s,1s;animation-delay:1s,1s;left:10%}.snowflake:nth-of-type(2){-webkit-animation-delay:6s,.5s;animation-delay:6s,.5s;left:20%}.snowflake:nth-of-type(3){-webkit-animation-delay:4s,2s;animation-delay:4s,2s;left:30%}.snowflake:nth-of-type(4){-webkit-animation-delay:2s,2s;animation-delay:2s,2s;left:40%}.snowflake:nth-of-type(5){-webkit-animation-delay:8s,3s;animation-delay:8s,3s;left:50%}.snowflake:nth-of-type(6){-webkit-animation-delay:6s,2s;animation-delay:6s,2s;left:60%}.snowflake:nth-of-type(7){-webkit-animation-delay:2.5s,1s;animation-delay:2.5s,1s;left:70%}.snowflake:nth-of-type(8){-webkit-animation-delay:1s,0s;animation-delay:1s,0s;left:80%}.snowflake:nth-of-type(9){-webkit-animation-delay:3s,1.5s;animation-delay:3s,1.5s;left:90%}.snowflake:nth-of-type(10){-webkit-animation-delay:2s,0s;animation-delay:2s,0s;left:25%}.snowflake:nth-of-type(11){-webkit-animation-delay:4s,2.5s;animation-delay:4s,2.5s;left:65%} +/*# sourceMappingURL=index.777834ac.css.map */ diff --git a/dist/index.777834ac.css.map b/dist/index.777834ac.css.map new file mode 100644 index 0000000..c74d2e6 --- /dev/null +++ b/dist/index.777834ac.css.map @@ -0,0 +1 @@ +{"mappings":"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","sources":["src/scss/style.scss","%3Cinput%20css%209zLUgg%3E","src/scss/_snowflakes.scss"],"sourcesContent":["$border-radius: 5px;\n\n:root {\n --text-color: #fff;\n --text-accent-color: darksalmon;\n --link-color: darkorange;\n --bg-1: #f27121;\n --bg-2: #e94057;\n --bg-3: #8a2387;\n --bg-1-social: #f3a183;\n --bg-2-social: #ec6f66;\n --username-color: cadetblue;\n --terminal-bg: rgba(56, 4, 40, 0.9);\n --terminal-header-bg: #bbb;\n}\n\nbody {\n &.dark-mode {\n --text-accent-color: #ffca85;\n --link-color: burlywood;\n --bg-1: #211F20;\n --bg-2: #292D34;\n --bg-3: #213030;\n --bg-1-social: #414141;\n --bg-2-social: #485461;\n --username-color: #858585;\n --terminal-bg: rgb(0 0 0 / 90%);\n --terminal-header-bg: #585252;\n &.firework {\n --terminal-bg: rgb(0 0 0 / 15%);\n }\n }\n box-sizing: border-box;\n margin: 0;\n display: flex;\n justify-content: space-around;\n align-items: center;\n flex-direction: column;\n height: 100vh;\n background: var(--bg-3); /* fallback for old browsers */\n background: -webkit-linear-gradient(\n to right,\n var(--bg-1),\n var(--bg-2),\n var(--bg-3)\n ); /* Chrome 10-25, Safari 5.1-6 */\n background: linear-gradient(\n to right,\n var(--bg-1),\n var(--bg-2),\n var(--bg-3)\n ); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */\n}\n\nul {\n margin: 0;\n}\n\n.terminal {\n position: absolute;\n resize: both;\n overflow: hidden;\n height: 450px;\n width: min(900px, 90vw);\n\n .terminal__header {\n height: 25px;\n padding: 0 8px;\n background-color: var(--terminal-header-bg);\n margin: 0 auto;\n border-top-right-radius: $border-radius;\n border-top-left-radius: $border-radius;\n cursor: move;\n\n .fake-button {\n height: 10px;\n width: 10px;\n border-radius: 50%;\n border: 1px solid #000;\n position: relative;\n top: 6px;\n left: 6px;\n display: inline-block;\n cursor: pointer;\n\n &.fake-close {\n left: 6px;\n background-color: #ff3b47;\n border-color: #9d252b;\n }\n\n &.fake-minimize {\n left: 11px;\n background-color: #ffc100;\n border-color: #9d802c;\n }\n\n &.fake-zoom {\n left: 16px;\n background-color: #00d742;\n border-color: #049931;\n }\n }\n }\n\n .terminal__body {\n font-family: \"Ubuntu Mono\", monospace;\n background: var(--terminal-bg);\n color: var(--text-color);\n padding: 8px;\n overflow-y: scroll;\n overflow-x: hidden;\n box-shadow: rgba(0, 0, 0, 0.2) 0px 12px 28px 0px,\n rgba(0, 0, 0, 0.1) 0px 2px 4px 0px,\n rgba(255, 255, 255, 0.05) 0px 0px 0px 1px inset;\n border-bottom-right-radius: $border-radius;\n border-bottom-left-radius: $border-radius;\n height: calc(100% - 41px);\n\n code {\n color: var(--text-accent-color);\n font-size: 14px;\n }\n\n .terminal__banner {\n display: flex;\n flex-direction: column;\n justify-content: center;\n color: var(--text-color);\n\n .terminal__author {\n text-align: right;\n }\n }\n\n .terminal__line {\n margin-bottom: 8px;\n\n &::before {\n content: \"Greg LEBRETON ~$ \";\n color: var(--username-color);\n }\n\n input[type=\"text\"] {\n background: none;\n border: none;\n font-family: \"Ubuntu Mono\", monospace;\n color: var(--text-color);\n outline: none;\n font-size: 15px;\n width: calc(100% - 150px);\n }\n }\n\n .terminal__response {\n margin: 8px 0 16px 0;\n\n table {\n border: 1px dashed;\n padding: 4px;\n width: 100%;\n\n a {\n text-decoration: none;\n color: darkorange;\n }\n\n thead {\n th {\n font-weight: normal;\n color: cadetblue;\n border-bottom: 1px solid white;\n padding-bottom: 4px;\n }\n }\n\n tbody {\n td {\n padding: 4px;\n }\n\n tr:not(:last-child) {\n td {\n border-bottom: 1px solid white;\n }\n }\n }\n }\n }\n }\n}\n\n.socials {\n position: absolute;\n right: 16px;\n bottom: 16px;\n display: flex;\n gap: 16px;\n\n a {\n border-radius: 50%;\n background: var(--bg-2-social); /* fallback for old browsers */\n background: -webkit-linear-gradient(\n to left,\n var(--bg-1-social),\n var(--bg-2-social)\n ); /* Chrome 10-25, Safari 5.1-6 */\n background: linear-gradient(\n to left,\n var(--bg-1-social),\n var(--bg-2-social)\n ); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */\n box-shadow: rgba(99, 99, 99, 0.2) 0px 2px 8px 0px;\n width: 4em;\n height: 4em;\n display: flex;\n justify-content: center;\n align-items: center;\n text-decoration: none;\n &:hover {\n background: var(--bg-2-social); /* fallback for old browsers */\n background: -webkit-linear-gradient(\n to right,\n var(--bg-1-social),\n var(--bg-2-social)\n ); /* Chrome 10-25, Safari 5.1-6 */\n background: linear-gradient(\n to right,\n var(--bg-1-social),\n var(--bg-2-social)\n ); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */\n box-shadow: rgba(99, 99, 99, 0.2) 0px 2px 8px 0px;\n width: 4em;\n height: 4em;\n display: flex;\n justify-content: center;\n align-items: center;\n text-decoration: none;\n }\n i {\n color: white;\n font-size: 2em;\n }\n }\n}\n\n#banner-github {\n position: absolute;\n top: 0;\n right: 0;\n}\n\n@media (max-width: 880px) {\n .terminal .terminal__body {\n .terminal__banner {\n pre {\n font-size: 10px;\n }\n }\n }\n}\n\n@media (max-width: 640px) {\n body {\n align-items: center;\n flex-direction: column;\n justify-content: space-evenly;\n }\n canvas {\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: -1;\n }\n\n .terminal {\n position: unset;\n width: unset;\n height: unset;\n resize: none;\n .terminal__body {\n max-width: unset;\n width: 90vw;\n height: 70vh;\n\n .terminal__banner {\n pre {\n font-size: 5px;\n }\n }\n }\n }\n .socials {\n font-size: 13px;\n position: relative;\n bottom: unset;\n right: unset;\n }\n #banner-github {\n img {\n width: 100px;\n height: 100px;\n }\n }\n #version {\n top: 38px;\n right: 38px;\n font-size: 13px;\n }\n}\n\n@import \"snowflakes\";\n",":root {\n --text-color: #fff;\n --text-accent-color: darksalmon;\n --link-color: darkorange;\n --bg-1: #f27121;\n --bg-2: #e94057;\n --bg-3: #8a2387;\n --bg-1-social: #f3a183;\n --bg-2-social: #ec6f66;\n --username-color: cadetblue;\n --terminal-bg: rgba(56, 4, 40, 0.9);\n --terminal-header-bg: #bbb;\n}\n\nbody {\n box-sizing: border-box;\n margin: 0;\n display: flex;\n justify-content: space-around;\n align-items: center;\n flex-direction: column;\n height: 100vh;\n background: var(--bg-3);\n /* fallback for old browsers */\n background: -webkit-linear-gradient(to right, var(--bg-1), var(--bg-2), var(--bg-3));\n /* Chrome 10-25, Safari 5.1-6 */\n background: linear-gradient(to right, var(--bg-1), var(--bg-2), var(--bg-3));\n /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */\n}\nbody.dark-mode {\n --text-accent-color: #ffca85;\n --link-color: burlywood;\n --bg-1: #211F20;\n --bg-2: #292D34;\n --bg-3: #213030;\n --bg-1-social: #414141;\n --bg-2-social: #485461;\n --username-color: #858585;\n --terminal-bg: rgb(0 0 0 / 90%);\n --terminal-header-bg: #585252;\n}\nbody.dark-mode.firework {\n --terminal-bg: rgb(0 0 0 / 15%);\n}\n\nul {\n margin: 0;\n}\n\n.terminal {\n position: absolute;\n resize: both;\n overflow: hidden;\n height: 450px;\n width: min(900px, 90vw);\n}\n.terminal .terminal__header {\n height: 25px;\n padding: 0 8px;\n background-color: var(--terminal-header-bg);\n margin: 0 auto;\n border-top-right-radius: 5px;\n border-top-left-radius: 5px;\n cursor: move;\n}\n.terminal .terminal__header .fake-button {\n height: 10px;\n width: 10px;\n border-radius: 50%;\n border: 1px solid #000;\n position: relative;\n top: 6px;\n left: 6px;\n display: inline-block;\n cursor: pointer;\n}\n.terminal .terminal__header .fake-button.fake-close {\n left: 6px;\n background-color: #ff3b47;\n border-color: #9d252b;\n}\n.terminal .terminal__header .fake-button.fake-minimize {\n left: 11px;\n background-color: #ffc100;\n border-color: #9d802c;\n}\n.terminal .terminal__header .fake-button.fake-zoom {\n left: 16px;\n background-color: #00d742;\n border-color: #049931;\n}\n.terminal .terminal__body {\n font-family: \"Ubuntu Mono\", monospace;\n background: var(--terminal-bg);\n color: var(--text-color);\n padding: 8px;\n overflow-y: scroll;\n overflow-x: hidden;\n box-shadow: rgba(0, 0, 0, 0.2) 0px 12px 28px 0px, rgba(0, 0, 0, 0.1) 0px 2px 4px 0px, rgba(255, 255, 255, 0.05) 0px 0px 0px 1px inset;\n border-bottom-right-radius: 5px;\n border-bottom-left-radius: 5px;\n height: calc(100% - 41px);\n}\n.terminal .terminal__body code {\n color: var(--text-accent-color);\n font-size: 14px;\n}\n.terminal .terminal__body .terminal__banner {\n display: flex;\n flex-direction: column;\n justify-content: center;\n color: var(--text-color);\n}\n.terminal .terminal__body .terminal__banner .terminal__author {\n text-align: right;\n}\n.terminal .terminal__body .terminal__line {\n margin-bottom: 8px;\n}\n.terminal .terminal__body .terminal__line::before {\n content: \"Greg LEBRETON ~$ \";\n color: var(--username-color);\n}\n.terminal .terminal__body .terminal__line input[type=text] {\n background: none;\n border: none;\n font-family: \"Ubuntu Mono\", monospace;\n color: var(--text-color);\n outline: none;\n font-size: 15px;\n width: calc(100% - 150px);\n}\n.terminal .terminal__body .terminal__response {\n margin: 8px 0 16px 0;\n}\n.terminal .terminal__body .terminal__response table {\n border: 1px dashed;\n padding: 4px;\n width: 100%;\n}\n.terminal .terminal__body .terminal__response table a {\n text-decoration: none;\n color: darkorange;\n}\n.terminal .terminal__body .terminal__response table thead th {\n font-weight: normal;\n color: cadetblue;\n border-bottom: 1px solid white;\n padding-bottom: 4px;\n}\n.terminal .terminal__body .terminal__response table tbody td {\n padding: 4px;\n}\n.terminal .terminal__body .terminal__response table tbody tr:not(:last-child) td {\n border-bottom: 1px solid white;\n}\n\n.socials {\n position: absolute;\n right: 16px;\n bottom: 16px;\n display: flex;\n gap: 16px;\n}\n.socials a {\n border-radius: 50%;\n background: var(--bg-2-social);\n /* fallback for old browsers */\n background: -webkit-linear-gradient(to left, var(--bg-1-social), var(--bg-2-social));\n /* Chrome 10-25, Safari 5.1-6 */\n background: linear-gradient(to left, var(--bg-1-social), var(--bg-2-social));\n /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */\n box-shadow: rgba(99, 99, 99, 0.2) 0px 2px 8px 0px;\n width: 4em;\n height: 4em;\n display: flex;\n justify-content: center;\n align-items: center;\n text-decoration: none;\n}\n.socials a:hover {\n background: var(--bg-2-social);\n /* fallback for old browsers */\n background: -webkit-linear-gradient(to right, var(--bg-1-social), var(--bg-2-social));\n /* Chrome 10-25, Safari 5.1-6 */\n background: linear-gradient(to right, var(--bg-1-social), var(--bg-2-social));\n /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */\n box-shadow: rgba(99, 99, 99, 0.2) 0px 2px 8px 0px;\n width: 4em;\n height: 4em;\n display: flex;\n justify-content: center;\n align-items: center;\n text-decoration: none;\n}\n.socials a i {\n color: white;\n font-size: 2em;\n}\n\n#banner-github {\n position: absolute;\n top: 0;\n right: 0;\n}\n\n@media (max-width: 880px) {\n .terminal .terminal__body .terminal__banner pre {\n font-size: 10px;\n }\n}\n@media (max-width: 640px) {\n body {\n align-items: center;\n flex-direction: column;\n justify-content: space-evenly;\n }\n\n canvas {\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: -1;\n }\n\n .terminal {\n position: unset;\n width: unset;\n height: unset;\n resize: none;\n }\n .terminal .terminal__body {\n max-width: unset;\n width: 90vw;\n height: 70vh;\n }\n .terminal .terminal__body .terminal__banner pre {\n font-size: 5px;\n }\n\n .socials {\n font-size: 13px;\n position: relative;\n bottom: unset;\n right: unset;\n }\n\n #banner-github img {\n width: 100px;\n height: 100px;\n }\n\n #version {\n top: 38px;\n right: 38px;\n font-size: 13px;\n }\n}\n.snowflake {\n color: #fff;\n font-size: 1em;\n font-family: Arial, sans-serif;\n text-shadow: 0 0 5px #000;\n}\n\n@-webkit-keyframes snowflakes-fall {\n 0% {\n top: -10%;\n }\n 100% {\n top: 100%;\n }\n}\n@-webkit-keyframes snowflakes-shake {\n 0%, 100% {\n -webkit-transform: translateX(0);\n transform: translateX(0);\n }\n 50% {\n -webkit-transform: translateX(80px);\n transform: translateX(80px);\n }\n}\n@keyframes snowflakes-fall {\n 0% {\n top: -10%;\n }\n 100% {\n top: 100%;\n }\n}\n@keyframes snowflakes-shake {\n 0%, 100% {\n transform: translateX(0);\n }\n 50% {\n transform: translateX(80px);\n }\n}\n.snowflake {\n position: fixed;\n top: -10%;\n z-index: 9999;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n cursor: default;\n -webkit-animation-name: snowflakes-fall, snowflakes-shake;\n -webkit-animation-duration: 10s, 3s;\n -webkit-animation-timing-function: linear, ease-in-out;\n -webkit-animation-iteration-count: infinite, infinite;\n -webkit-animation-play-state: running, running;\n animation-name: snowflakes-fall, snowflakes-shake;\n animation-duration: 10s, 3s;\n animation-timing-function: linear, ease-in-out;\n animation-iteration-count: infinite, infinite;\n animation-play-state: running, running;\n}\n\n.snowflake:nth-of-type(0) {\n left: 1%;\n -webkit-animation-delay: 0s, 0s;\n animation-delay: 0s, 0s;\n}\n\n.snowflake:nth-of-type(1) {\n left: 10%;\n -webkit-animation-delay: 1s, 1s;\n animation-delay: 1s, 1s;\n}\n\n.snowflake:nth-of-type(2) {\n left: 20%;\n -webkit-animation-delay: 6s, 0.5s;\n animation-delay: 6s, 0.5s;\n}\n\n.snowflake:nth-of-type(3) {\n left: 30%;\n -webkit-animation-delay: 4s, 2s;\n animation-delay: 4s, 2s;\n}\n\n.snowflake:nth-of-type(4) {\n left: 40%;\n -webkit-animation-delay: 2s, 2s;\n animation-delay: 2s, 2s;\n}\n\n.snowflake:nth-of-type(5) {\n left: 50%;\n -webkit-animation-delay: 8s, 3s;\n animation-delay: 8s, 3s;\n}\n\n.snowflake:nth-of-type(6) {\n left: 60%;\n -webkit-animation-delay: 6s, 2s;\n animation-delay: 6s, 2s;\n}\n\n.snowflake:nth-of-type(7) {\n left: 70%;\n -webkit-animation-delay: 2.5s, 1s;\n animation-delay: 2.5s, 1s;\n}\n\n.snowflake:nth-of-type(8) {\n left: 80%;\n -webkit-animation-delay: 1s, 0s;\n animation-delay: 1s, 0s;\n}\n\n.snowflake:nth-of-type(9) {\n left: 90%;\n -webkit-animation-delay: 3s, 1.5s;\n animation-delay: 3s, 1.5s;\n}\n\n.snowflake:nth-of-type(10) {\n left: 25%;\n -webkit-animation-delay: 2s, 0s;\n animation-delay: 2s, 0s;\n}\n\n.snowflake:nth-of-type(11) {\n left: 65%;\n -webkit-animation-delay: 4s, 2.5s;\n animation-delay: 4s, 2.5s;\n}\n/*# sourceMappingURL=index.777834ac.css.map */\n",".snowflake {\n color: #fff;\n font-size: 1em;\n font-family: Arial, sans-serif;\n text-shadow: 0 0 5px #000;\n}\n\n@-webkit-keyframes snowflakes-fall {\n 0% {\n top: -10%\n }\n 100% {\n top: 100%\n }\n}\n\n@-webkit-keyframes snowflakes-shake {\n 0%, 100% {\n -webkit-transform: translateX(0);\n transform: translateX(0)\n }\n 50% {\n -webkit-transform: translateX(80px);\n transform: translateX(80px)\n }\n}\n\n@keyframes snowflakes-fall {\n 0% {\n top: -10%\n }\n 100% {\n top: 100%\n }\n}\n\n@keyframes snowflakes-shake {\n 0%, 100% {\n transform: translateX(0)\n }\n 50% {\n transform: translateX(80px)\n }\n}\n\n.snowflake {\n position: fixed;\n top: -10%;\n z-index: 9999;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n cursor: default;\n -webkit-animation-name: snowflakes-fall, snowflakes-shake;\n -webkit-animation-duration: 10s, 3s;\n -webkit-animation-timing-function: linear, ease-in-out;\n -webkit-animation-iteration-count: infinite, infinite;\n -webkit-animation-play-state: running, running;\n animation-name: snowflakes-fall, snowflakes-shake;\n animation-duration: 10s, 3s;\n animation-timing-function: linear, ease-in-out;\n animation-iteration-count: infinite, infinite;\n animation-play-state: running, running\n}\n\n.snowflake:nth-of-type(0) {\n left: 1%;\n -webkit-animation-delay: 0s, 0s;\n animation-delay: 0s, 0s\n}\n\n.snowflake:nth-of-type(1) {\n left: 10%;\n -webkit-animation-delay: 1s, 1s;\n animation-delay: 1s, 1s\n}\n\n.snowflake:nth-of-type(2) {\n left: 20%;\n -webkit-animation-delay: 6s, .5s;\n animation-delay: 6s, .5s\n}\n\n.snowflake:nth-of-type(3) {\n left: 30%;\n -webkit-animation-delay: 4s, 2s;\n animation-delay: 4s, 2s\n}\n\n.snowflake:nth-of-type(4) {\n left: 40%;\n -webkit-animation-delay: 2s, 2s;\n animation-delay: 2s, 2s\n}\n\n.snowflake:nth-of-type(5) {\n left: 50%;\n -webkit-animation-delay: 8s, 3s;\n animation-delay: 8s, 3s\n}\n\n.snowflake:nth-of-type(6) {\n left: 60%;\n -webkit-animation-delay: 6s, 2s;\n animation-delay: 6s, 2s\n}\n\n.snowflake:nth-of-type(7) {\n left: 70%;\n -webkit-animation-delay: 2.5s, 1s;\n animation-delay: 2.5s, 1s\n}\n\n.snowflake:nth-of-type(8) {\n left: 80%;\n -webkit-animation-delay: 1s, 0s;\n animation-delay: 1s, 0s\n}\n\n.snowflake:nth-of-type(9) {\n left: 90%;\n -webkit-animation-delay: 3s, 1.5s;\n animation-delay: 3s, 1.5s\n}\n\n.snowflake:nth-of-type(10) {\n left: 25%;\n -webkit-animation-delay: 2s, 0s;\n animation-delay: 2s, 0s\n}\n\n.snowflake:nth-of-type(11) {\n left: 65%;\n -webkit-animation-delay: 4s, 2.5s;\n animation-delay: 4s, 2.5s\n}\n"],"names":[],"version":3,"file":"index.777834ac.css.map"} \ No newline at end of file diff --git a/dist/index.e1c8579d.js b/dist/index.e1c8579d.js new file mode 100644 index 0000000..bc5eae7 --- /dev/null +++ b/dist/index.e1c8579d.js @@ -0,0 +1,2 @@ +function e(e){return e&&e.__esModule?e.default:e}var t;t=JSON.parse('[{"command":"help","responseType":"list","value":["a-propos : Affiche les informations me concernant","clear : Nettoie le terminal","experiences : Affiche la liste de mes expériences","get cv : Télécharge le CV","help : Affiche l\'aide","hobby : Affiche la liste de mes passes temps","projets-perso : Affiche la liste de mes projets personnels","dark/light : Change le thème de la page","Vous pouvez utiliser la touche TAB afin de compléter une commande","Vous pouvez retrouver les anciennes commandes avec les flèches haut et bas."]},{"command":"a-propos","responseType":"code","value":["{"," \\"nom\\" : \\"Gregory Lebreton\\","," \\"poste\\" : \\"Formateur Devops\\","," \\"experience\\" : \\"6\\","," \\"ville\\" : \\"Paris, France\\"","}"]},{"command":"experiences","responseType":"table","headers":["Date","Client","Description","Tech"],"rows":[["maintenant
03/2021","
Le garage numérique","Formateur Devops pour le CNAM,
administrateur système et intégrateur pour le Garage","Docker
Python
Bash"],["09/2019
06/2019","
Safran, S.A.E","Mise en place d\'une plateforme mettant en relation les
différents acteurs de la DSI sur une plateforme logicielle.","Docker
Kubernetes
Jenkins"],["03/2019
12/2017","PHP dev
Leading Frog","Module PHP permettant l\'envoie de cartes postales
numériques avec implémentation API Stripe.","PHP
JavaScript
SQL"]]},{"command":"hobby","responseType":"list","value":["Musique: Skateboard, Unity, VR","Programmation: Python, bash, PHP, C#","Autre: Famille, Cinéma, Environnement"]},{"command":"projets-perso","responseType":"table","headers":["Nom","Description","Tech","Liens"],"rows":[["Personal website
(2021)","Site web personnel me permettant de montrer mes projets et tester des applicatifs
","PHP/JS","Lien"],["GoldeneyeVR
(2020)","Implémentation VR au célèbre jeux de 1997.","C# WPF","Lien"]]}]');var i={};!function e(t,i,n,s){var o=!!(t.Worker&&t.Blob&&t.Promise&&t.OffscreenCanvas&&t.OffscreenCanvasRenderingContext2D&&t.HTMLCanvasElement&&t.HTMLCanvasElement.prototype.transferControlToOffscreen&&t.URL&&t.URL.createObjectURL);function a(){}function r(e){var n=i.exports.Promise,s=void 0!==n?n:t.Promise;return"function"==typeof s?new s(e):(e(a,a),null)}var c,h,d,l,u,m,f,p,_,g=(d=Math.floor(1e3/60),l={},u=0,"function"==typeof requestAnimationFrame&&"function"==typeof cancelAnimationFrame?(c=function(e){var t=Math.random();return l[t]=requestAnimationFrame((function i(n){u===n||u+d-1{var e={511:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Explosion=void 0;var n=i(909);t.Explosion=class{constructor(e){var{x:t,y:i,ctx:s,hue:o,exp:a,gravity:r,friction:c,brightness:h,explosionLength:d}=e;for(this._coordinates=[],this._alpha=1,this._x=t,this._y=i,this._exp=a,this._ctx=s,this._gravity=r,this._friction=c,this._explosionLength=d;this._explosionLength--;)this._coordinates.push([t,i]);this._angle=n.randomFloat(0,2*Math.PI),this._speed=n.randomInt(1,10),this._hue=n.randomInt(o-20,o+20),this._brightness=n.randomInt(h.min,h.max),this._decay=n.randomFloat(h.decay.min,h.decay.max)}update(e){this._coordinates.pop(),this._coordinates.unshift([this._x,this._y]),this._speed*=this._friction,this._x+=Math.cos(this._angle)*this._speed,this._y+=Math.sin(this._angle)*this._speed+this._gravity,this._alpha-=this._decay,this._alpha<=this._decay&&e()}draw(){var e=this._coordinates.length-1;this._ctx.beginPath(),this._exp&&(this._ctx.arc(this._x,this._y,n.randomFloat(.5,1.5),0,2*Math.PI),this._ctx.fill()),this._ctx.fillStyle=n.hsla(this._hue,this._brightness,this._alpha),this._ctx.moveTo(this._coordinates[e][0],this._coordinates[e][1]),this._ctx.lineTo(this._x,this._y),this._ctx.strokeStyle=n.hsla(this._hue,this._brightness,this._alpha),this._ctx.stroke()}}},909:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.hsla=t.getDistance=t.randomInt=t.randomFloat=void 0,t.randomFloat=function(e,t){return Math.random()*(t-e)+e},t.randomInt=function(e,t){return Math.floor(e+Math.random()*(t+1-e))},t.getDistance=function(e,t,i,n){var s=Math.pow;return Math.sqrt(s(e-i,2)+s(t-n,2))},t.hsla=function(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;return"hsla(".concat(e,", 100%, ").concat(t,"%, ").concat(i,")")}},449:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(s,o){function a(e){try{c(n.next(e))}catch(e){o(e)}}function r(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(a,r)}c((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.Sound=void 0;var s=i(909);t.Sound=class{constructor(e){this._buffer=[],this.onInit=!0,this._audioContext=new(window.AudioContext||window.webkitAudioContext),this.options=Object.assign({enabled:!1,files:["explosion0.mp3","explosion1.mp3","explosion2.mp3"],volume:{min:4,max:8}},e),this.init()}init(){this.onInit&&this.options.enabled&&(this.onInit=!1,this.load())}load(){return n(this,void 0,void 0,(function*(){for(var e of this.options.files){var t=yield(yield fetch(e)).arrayBuffer();this._audioContext.decodeAudioData(t).then((e=>{this._buffer.push(e)})).catch((e=>{throw e}))}}))}play(){if(this.options.enabled&&this._buffer.length){var e=this._audioContext.createBufferSource(),t=this._buffer[s.randomInt(0,this._buffer.length-1)],i=this._audioContext.createGain();e.buffer=t,i.gain.value=s.randomFloat(this.options.volume.min/100,this.options.volume.max/100),i.connect(this._audioContext.destination),e.connect(i),e.start(0)}else this.init()}}},668:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Trace=void 0;var n=i(909);t.Trace=class{constructor(e){var{x:t,y:i,dx:s,dy:o,ctx:a,hue:r,speed:c,traceLength:h,acceleration:d}=e;for(this._coordinates=[],this._currentDistance=0,this._x=t,this._y=i,this._sx=t,this._sy=i,this._dx=s,this._dy=o,this._ctx=a,this._hue=r,this._speed=c,this._traceLength=h,this._acceleration=d,this._totalDistance=n.getDistance(t,i,s,o);this._traceLength--;)this._coordinates.push([t,i]);this._angle=Math.atan2(o-i,s-t),this._brightness=n.randomInt(50,70)}update(e){this._coordinates.pop(),this._coordinates.unshift([this._x,this._y]),this._speed*=this._acceleration;var t=Math.cos(this._angle)*this._speed,i=Math.sin(this._angle)*this._speed;this._currentDistance=n.getDistance(this._sx,this._sy,this._x+t,this._y+i),this._currentDistance>=this._totalDistance?e(this._dx,this._dy,this._hue):(this._x+=t,this._y+=i)}draw(){var e=this._coordinates.length-1;this._ctx.beginPath(),this._ctx.moveTo(this._coordinates[e][0],this._coordinates[e][1]),this._ctx.lineTo(this._x,this._y),this._ctx.strokeStyle=n.hsla(this._hue,this._brightness),this._ctx.stroke()}}}},t={};function i(n){var s=t[n];if(void 0!==s)return s.exports;var o=t[n]={exports:{}};return e[n].call(o.exports,o,o.exports,i),o.exports}var n={};return(()=>{var e=n;Object.defineProperty(e,"__esModule",{value:!0}),e.Fireworks=void 0;var t=i(668),s=i(449),o=i(511),a=i(909);e.Fireworks=class{constructor(e){var{autoresize:t=!0,boundaries:i,brightness:n,delay:o,hue:a,mouse:r,sound:c,trace:h=3,speed:d=2,explosion:l=5,gravity:u=1.5,opacity:m=.5,particles:f=50,friction:p=.95,rocketsPoint:_=50,acceleration:g=1.05}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this._tick=0,this._version="1.3.5",this._running=!1,this._randomRocketsPoint=!1,this._experimentals=!1,this._m=!1,this._container=e,this._canvas=document.createElement("canvas"),this._ctx=this._canvas.getContext("2d"),this._container.appendChild(this._canvas),this._sound=new s.Sound(c),this.setSize(),this.setBoundaries(Object.assign({visible:!1,x:50,y:50},i)),this.autoresize=t,this.trace=h,this.speed=d,this.explosion=l,this.gravity=u,this.opacity=m,this.particles=f,this.friction=p,this.rocketsPoint=_,this.acceleration=g,this.hue=Object.assign({min:0,max:360},a),this.mouse=Object.assign({click:!1,move:!1,max:1},r),this.delay=Object.assign({min:15,max:30},o),this.brightness=Object.assign({min:50,max:80,decay:{min:.015,max:.03}},n),this.autoresize&&window.addEventListener("resize",(()=>this.windowResize())),this._canvas.addEventListener("mousedown",(e=>this.mouseDown(e))),this._canvas.addEventListener("mouseup",(e=>this.mouseUp(e))),this._canvas.addEventListener("mousemove",(e=>this.mouseMove(e)))}get isRunning(){return this._running}get version(){return this._version}start(){this._running||(this._running=!0,this.clear(),this.render())}stop(){this._running&&(this._running=!1,this.clear())}unmount(){window.removeEventListener("resize",this.windowResize),this._canvas.addEventListener("mousedown",this.mouseDown),this._canvas.addEventListener("mouseup",this.mouseUp),this._canvas.addEventListener("mousemove",this.mouseMove)}pause(){this._running=!this._running}clear(){this._ctx&&(this._traces=[],this._explosions=[],this._ctx.clearRect(0,0,this._width,this._height))}setOptions(e){for(var[t,i]of Object.entries(e)){var n=Object.prototype.hasOwnProperty.call(this,t);if("function"==typeof this[t])throw new Error("You cannot change the methods of the class!");n&&("object"==typeof this[t]?Object.assign(this[t],i):this[t]=i),"sound"===t&&Object.assign(this._sound.options,i)}}setSize(){var{width:e=this._container.clientWidth,height:t=this._container.clientHeight}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._width=e,this._height=t,this._canvas.width=e,this._canvas.height=t,this.setBoundaries({width:e,height:t})}setBoundaries(e){this.boundaries=Object.assign(Object.assign({},this.boundaries),e)}useMouse(e,t){(this.mouse.click||this.mouse.move)&&(this._mx=e.pageX-this._canvas.offsetLeft,this._my=e.pageY-this._canvas.offsetTop,this._m=t)}windowResize(){this.setSize()}mouseDown(e){this.useMouse(e,this.mouse.click)}mouseUp(e){this.useMouse(e,!1)}mouseMove(e){this.useMouse(e,this._m)}render(){this._ctx&&this._running&&(requestAnimationFrame((()=>this.render())),this._ctx.globalCompositeOperation="destination-out",this._ctx.fillStyle="rgba(0, 0, 0, ".concat(this.opacity,")"),this._ctx.fillRect(0,0,this._width,this._height),this._ctx.globalCompositeOperation="lighter",this.drawBoundaries(),this.initTrace(),this.drawTrace(),this.drawExplosion(),this._tick++)}drawBoundaries(){this.boundaries.visible&&(this._ctx.beginPath(),this._ctx.strokeStyle="red",this._ctx.rect(this.boundaries.x,this.boundaries.y,this.boundaries.width-2*this.boundaries.x,.5*this.boundaries.height),this._ctx.stroke())}initTrace(){this._ds=a.randomInt(this.delay.min,this.delay.max),(2*this._dsthis._traces.length)&&(this._traces.push(new t.Trace({x:this._width*(this._randomRocketsPoint?a.randomInt(0,100):this.rocketsPoint)/100,y:this._height,dx:this._mx&&this.mouse.move||this._m?this._mx:a.randomInt(this.boundaries.x,this.boundaries.width-2*this.boundaries.x),dy:this._my&&this.mouse.move||this._m?this._my:a.randomInt(this.boundaries.y,.5*this.boundaries.height),ctx:this._ctx,hue:a.randomInt(this.hue.min,this.hue.max),speed:this.speed,acceleration:this.acceleration,traceLength:this.trace})),this._tick=0)}drawTrace(){for(var e=this._traces.length;e--;)this._traces[e].draw(),this._traces[e].update(((t,i,n)=>{this.initExplosion(t,i,n),this._sound.play(),this._traces.splice(e,1)}))}initExplosion(e,t,i){for(var n=this.particles;n--;)this._explosions.push(new o.Explosion({x:e,y:t,ctx:this._ctx,hue:i,friction:this.friction,gravity:this.gravity,explosionLength:this.explosion,brightness:this.brightness,exp:this._experimentals}))}drawExplosion(){for(var e=this._explosions.length;e--;)this._explosions[e].draw(),this._explosions[e].update((()=>{this._explosions.splice(e,1)}))}}})(),n})()}));let a=[];e(t).forEach((e=>{a.push(e.command)}));const r=["clear","dark","light","get cv"];a=a.concat(r);const c=["pif","rm -rf /"];window.innerWidth>1024&&function(e){var t=0,i=0,n=0,s=0;const o=document.querySelector(".terminal__header");function a(e){(e=e||window.event).preventDefault(),n=e.clientX,s=e.clientY,document.onmouseup=c,document.onmousemove=r}function r(o){(o=o||window.event).preventDefault(),t=n-o.clientX,i=s-o.clientY,n=o.clientX,s=o.clientY,e.style.top=e.offsetTop-i+"px",e.style.left=e.offsetLeft-t+"px"}function c(){document.onmouseup=null,document.onmousemove=null}o?o.onmousedown=a:e.onmousedown=a}(document.querySelector(".terminal"));const h=[];let d=!1,l=-1;const u=document.querySelector(".terminal__body");m();if(11===(new Date).getMonth()){let e="";for(let t=0;t<6;t++)e+='
';const t=``;document.body.append(function(e){return document.createRange().createContextualFragment(e)}(t))}function m(e=null){const t=Math.random().toString(36).replace("0.",""),i=document.createElement("div");i.classList.add("terminal__line");const n=document.createElement("div");n.classList.add("terminal__response"),n.id=`response-${t}`;const s=document.createElement("input");if(s.type="text",s.id=`input-${t}`,s.autocapitalize="off",s.dataset.uid=t,s.dataset.active="1",s.addEventListener("keydown",f),i.appendChild(s),e){const t=document.getElementById(e);t&&(t.setAttribute("disabled","true"),t.removeEventListener("keydown",f),delete t.dataset.active)}document.getElementById("terminal").appendChild(i),document.getElementById("terminal").appendChild(n),s.focus()}function f(i){const f=i.target.value.trim().toLowerCase();if(13===i.keyCode){if(""!==f){d=!1;const a=`response-${i.target.dataset.uid}`,l=document.getElementById(a);let p;p=c.includes(f)||r.includes(f)?function(e){switch(e){case"pif":return function(){const e={origin:{y:.7}};function t(t,i){n(Object.assign({},e,i,{particleCount:Math.floor(200*t)}))}t(.25,{spread:26,startVelocity:55}),t(.2,{spread:60}),t(.35,{spread:100,decay:.91,scalar:.8}),t(.1,{spread:120,startVelocity:25,decay:.92,scalar:1.2}),t(.1,{spread:120,startVelocity:45})}(),"Let's go !";case"light":return document.body.classList.contains("dark-mode")?(o(!1),"Your are now in light mode."):"You are already in light mode.";case"dark":return document.body.classList.contains("dark-mode")?"You are already in dark mode.":(o(!0),"You are now in dark mode.");case"get cv":return function(){const e=document.createElement("a");e.href="resources/resume.pdf",e.setAttribute("download","CV - Gregory Lebreton.pdf"),e.click()}(),"The CV will be downloaded.";case"rm -rf /":return o(!0),document.body.classList.add("firework"),new s.Fireworks(document.body,{mouse:{click:!0,move:!1,max:7}}).start(),"🎆";case"clear":return void(u.innerHTML='
')}}(f):function(i){const n=e(t).find((e=>e.command===i));let s="";if(void 0===n)s=`'${i.split(" ")[0]}' is not recognized as an internal command or external command, operable program or batch file. Type the help command to display a list of available commands.`;else if("list"===n.responseType&&Array.isArray(n.value))s="
    ",s+=n.value.map((e=>`
  • ${e}
  • `)).join(""),s+="
";else if("text"===n.responseType)s=n.value;else if("table"===n.responseType){const e=n.headers,t=n.rows;s=`${e.map((e=>``)).join("")}${t.map((e=>`${e.map((e=>``)).join("")}`)).join("")}
${e}
${e}
`}else"code"===n.responseType&&(s=`
${n.value.join("\n")}
`);return s}(f),l&&(l.innerHTML=p,h.push(f),m(i.target.id))}}else if(9===i.keyCode){if(i.preventDefault(),""===f)this.value="help";else{const e=a.find((e=>e.startsWith(f)));e&&(this.value=e)}d=!1}else 38!==i.keyCode&&40!==i.keyCode||(h.length>0&&(!1===d?l=h.length-1:38===i.keyCode&&0!==l?l--:40===i.keyCode&&l!==h.length-1&&l++,this.value=h[l]),d=!0)}window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches&&o(!0),document.body.addEventListener("click",(function(e){if("INPUT"!==e.target.tagName){document.querySelector("input[data-active]").focus()}})),document.querySelector(".fake-close").addEventListener("click",(function(e){const t=document.querySelector(".terminal");t.parentElement.removeChild(t)})); +//# sourceMappingURL=index.e1c8579d.js.map diff --git a/dist/index.e1c8579d.js.map b/dist/index.e1c8579d.js.map new file mode 100644 index 0000000..807b042 --- /dev/null +++ b/dist/index.e1c8579d.js.map @@ -0,0 +1 @@ +{"mappings":"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","sources":["src/resources/commands.json","node_modules/canvas-confetti/dist/confetti.module.mjs","src/custom-comands.js","node_modules/fireworks-js/dist/fireworks.js","src/app.js","src/draggable.js"],"sourcesContent":["[\n {\n \"command\":\"help\",\n \"responseType\":\"list\",\n \"value\":[\n \"a-propos : Affiche les informations me concernant\",\n \"clear : Nettoie le terminal\",\n \"experiences : Affiche la liste de mes expériences\",\n \"get cv : Télécharge le CV\",\n \"help : Affiche l'aide\",\n \"hobby : Affiche la liste de mes passes temps\",\n \"projets-perso : Affiche la liste de mes projets personnels\",\n \"dark/light : Change le thème de la page\",\n \"Vous pouvez utiliser la touche TAB afin de compléter une commande\",\n \"Vous pouvez retrouver les anciennes commandes avec les flèches haut et bas.\"\n ]\n },\n {\n \"command\":\"a-propos\",\n \"responseType\":\"code\",\n \"value\":[\n \"{\",\n \" \\\"nom\\\" : \\\"Gregory Lebreton\\\",\",\n \" \\\"poste\\\" : \\\"Formateur Devops\\\",\",\n \" \\\"experience\\\" : \\\"6\\\",\",\n \" \\\"ville\\\" : \\\"Paris, France\\\"\",\n \"}\"\n ]\n },\n {\n \"command\":\"experiences\",\n \"responseType\":\"table\",\n \"headers\":[\n \"Date\",\n \"Client\",\n \"Description\",\n \"Tech\"\n ],\n \"rows\":[\n [\n \"maintenant
03/2021\",\n \"
Le garage numérique\",\n \"Formateur Devops pour le CNAM,
administrateur système et intégrateur pour le Garage\",\n \"Docker
Python
Bash\"\n ],\n [\n \"09/2019
06/2019\",\n \"
Safran, S.A.E\",\n \"Mise en place d'une plateforme mettant en relation les
différents acteurs de la DSI sur une plateforme logicielle.\",\n \"Docker
Kubernetes
Jenkins\"\n ],\n [\n \"03/2019
12/2017\",\n \"PHP dev
Leading Frog\",\n \"Module PHP permettant l'envoie de cartes postales
numériques avec implémentation API Stripe.\",\n \"PHP
JavaScript
SQL\"\n ]\n ]\n },\n {\n \"command\":\"hobby\",\n \"responseType\":\"list\",\n \"value\":[\n \"Musique: Skateboard, Unity, VR\",\n \"Programmation: Python, bash, PHP, C#\",\n \"Autre: Famille, Cinéma, Environnement\"\n ]\n },\n {\n \"command\":\"projets-perso\",\n \"responseType\":\"table\",\n \"headers\":[\n \"Nom\",\n \"Description\",\n \"Tech\",\n \"Liens\"\n ],\n \"rows\":[\n [\n \"Personal website
(2021)\",\n \"Site web personnel me permettant de montrer mes projets et tester des applicatifs
\",\n \"PHP/JS\",\n \"Lien\"\n ],\n [\n \"GoldeneyeVR
(2020)\",\n \"Implémentation VR au célèbre jeux de 1997.\",\n \"C# WPF\",\n \"Lien\"\n ]\n ]\n }\n]\n","// canvas-confetti v1.5.1 built on 2022-02-08T22:20:40.944Z\nvar module = {};\n\n// source content\n(function main(global, module, isWorker, workerSize) {\n var canUseWorker = !!(\n global.Worker &&\n global.Blob &&\n global.Promise &&\n global.OffscreenCanvas &&\n global.OffscreenCanvasRenderingContext2D &&\n global.HTMLCanvasElement &&\n global.HTMLCanvasElement.prototype.transferControlToOffscreen &&\n global.URL &&\n global.URL.createObjectURL);\n\n function noop() {}\n\n // create a promise if it exists, otherwise, just\n // call the function directly\n function promise(func) {\n var ModulePromise = module.exports.Promise;\n var Prom = ModulePromise !== void 0 ? ModulePromise : global.Promise;\n\n if (typeof Prom === 'function') {\n return new Prom(func);\n }\n\n func(noop, noop);\n\n return null;\n }\n\n var raf = (function () {\n var TIME = Math.floor(1000 / 60);\n var frame, cancel;\n var frames = {};\n var lastFrameTime = 0;\n\n if (typeof requestAnimationFrame === 'function' && typeof cancelAnimationFrame === 'function') {\n frame = function (cb) {\n var id = Math.random();\n\n frames[id] = requestAnimationFrame(function onFrame(time) {\n if (lastFrameTime === time || lastFrameTime + TIME - 1 < time) {\n lastFrameTime = time;\n delete frames[id];\n\n cb();\n } else {\n frames[id] = requestAnimationFrame(onFrame);\n }\n });\n\n return id;\n };\n cancel = function (id) {\n if (frames[id]) {\n cancelAnimationFrame(frames[id]);\n }\n };\n } else {\n frame = function (cb) {\n return setTimeout(cb, TIME);\n };\n cancel = function (timer) {\n return clearTimeout(timer);\n };\n }\n\n return { frame: frame, cancel: cancel };\n }());\n\n var getWorker = (function () {\n var worker;\n var prom;\n var resolves = {};\n\n function decorate(worker) {\n function execute(options, callback) {\n worker.postMessage({ options: options || {}, callback: callback });\n }\n worker.init = function initWorker(canvas) {\n var offscreen = canvas.transferControlToOffscreen();\n worker.postMessage({ canvas: offscreen }, [offscreen]);\n };\n\n worker.fire = function fireWorker(options, size, done) {\n if (prom) {\n execute(options, null);\n return prom;\n }\n\n var id = Math.random().toString(36).slice(2);\n\n prom = promise(function (resolve) {\n function workerDone(msg) {\n if (msg.data.callback !== id) {\n return;\n }\n\n delete resolves[id];\n worker.removeEventListener('message', workerDone);\n\n prom = null;\n done();\n resolve();\n }\n\n worker.addEventListener('message', workerDone);\n execute(options, id);\n\n resolves[id] = workerDone.bind(null, { data: { callback: id }});\n });\n\n return prom;\n };\n\n worker.reset = function resetWorker() {\n worker.postMessage({ reset: true });\n\n for (var id in resolves) {\n resolves[id]();\n delete resolves[id];\n }\n };\n }\n\n return function () {\n if (worker) {\n return worker;\n }\n\n if (!isWorker && canUseWorker) {\n var code = [\n 'var CONFETTI, SIZE = {}, module = {};',\n '(' + main.toString() + ')(this, module, true, SIZE);',\n 'onmessage = function(msg) {',\n ' if (msg.data.options) {',\n ' CONFETTI(msg.data.options).then(function () {',\n ' if (msg.data.callback) {',\n ' postMessage({ callback: msg.data.callback });',\n ' }',\n ' });',\n ' } else if (msg.data.reset) {',\n ' CONFETTI.reset();',\n ' } else if (msg.data.resize) {',\n ' SIZE.width = msg.data.resize.width;',\n ' SIZE.height = msg.data.resize.height;',\n ' } else if (msg.data.canvas) {',\n ' SIZE.width = msg.data.canvas.width;',\n ' SIZE.height = msg.data.canvas.height;',\n ' CONFETTI = module.exports.create(msg.data.canvas);',\n ' }',\n '}',\n ].join('\\n');\n try {\n worker = new Worker(URL.createObjectURL(new Blob([code])));\n } catch (e) {\n // eslint-disable-next-line no-console\n typeof console !== undefined && typeof console.warn === 'function' ? console.warn('🎊 Could not load worker', e) : null;\n\n return null;\n }\n\n decorate(worker);\n }\n\n return worker;\n };\n })();\n\n var defaults = {\n particleCount: 50,\n angle: 90,\n spread: 45,\n startVelocity: 45,\n decay: 0.9,\n gravity: 1,\n drift: 0,\n ticks: 200,\n x: 0.5,\n y: 0.5,\n shapes: ['square', 'circle'],\n zIndex: 100,\n colors: [\n '#26ccff',\n '#a25afd',\n '#ff5e7e',\n '#88ff5a',\n '#fcff42',\n '#ffa62d',\n '#ff36ff'\n ],\n // probably should be true, but back-compat\n disableForReducedMotion: false,\n scalar: 1\n };\n\n function convert(val, transform) {\n return transform ? transform(val) : val;\n }\n\n function isOk(val) {\n return !(val === null || val === undefined);\n }\n\n function prop(options, name, transform) {\n return convert(\n options && isOk(options[name]) ? options[name] : defaults[name],\n transform\n );\n }\n\n function onlyPositiveInt(number){\n return number < 0 ? 0 : Math.floor(number);\n }\n\n function randomInt(min, max) {\n // [min, max)\n return Math.floor(Math.random() * (max - min)) + min;\n }\n\n function toDecimal(str) {\n return parseInt(str, 16);\n }\n\n function colorsToRgb(colors) {\n return colors.map(hexToRgb);\n }\n\n function hexToRgb(str) {\n var val = String(str).replace(/[^0-9a-f]/gi, '');\n\n if (val.length < 6) {\n val = val[0]+val[0]+val[1]+val[1]+val[2]+val[2];\n }\n\n return {\n r: toDecimal(val.substring(0,2)),\n g: toDecimal(val.substring(2,4)),\n b: toDecimal(val.substring(4,6))\n };\n }\n\n function getOrigin(options) {\n var origin = prop(options, 'origin', Object);\n origin.x = prop(origin, 'x', Number);\n origin.y = prop(origin, 'y', Number);\n\n return origin;\n }\n\n function setCanvasWindowSize(canvas) {\n canvas.width = document.documentElement.clientWidth;\n canvas.height = document.documentElement.clientHeight;\n }\n\n function setCanvasRectSize(canvas) {\n var rect = canvas.getBoundingClientRect();\n canvas.width = rect.width;\n canvas.height = rect.height;\n }\n\n function getCanvas(zIndex) {\n var canvas = document.createElement('canvas');\n\n canvas.style.position = 'fixed';\n canvas.style.top = '0px';\n canvas.style.left = '0px';\n canvas.style.pointerEvents = 'none';\n canvas.style.zIndex = zIndex;\n\n return canvas;\n }\n\n function ellipse(context, x, y, radiusX, radiusY, rotation, startAngle, endAngle, antiClockwise) {\n context.save();\n context.translate(x, y);\n context.rotate(rotation);\n context.scale(radiusX, radiusY);\n context.arc(0, 0, 1, startAngle, endAngle, antiClockwise);\n context.restore();\n }\n\n function randomPhysics(opts) {\n var radAngle = opts.angle * (Math.PI / 180);\n var radSpread = opts.spread * (Math.PI / 180);\n\n return {\n x: opts.x,\n y: opts.y,\n wobble: Math.random() * 10,\n wobbleSpeed: Math.min(0.11, Math.random() * 0.1 + 0.05),\n velocity: (opts.startVelocity * 0.5) + (Math.random() * opts.startVelocity),\n angle2D: -radAngle + ((0.5 * radSpread) - (Math.random() * radSpread)),\n tiltAngle: (Math.random() * (0.75 - 0.25) + 0.25) * Math.PI,\n color: opts.color,\n shape: opts.shape,\n tick: 0,\n totalTicks: opts.ticks,\n decay: opts.decay,\n drift: opts.drift,\n random: Math.random() + 2,\n tiltSin: 0,\n tiltCos: 0,\n wobbleX: 0,\n wobbleY: 0,\n gravity: opts.gravity * 3,\n ovalScalar: 0.6,\n scalar: opts.scalar\n };\n }\n\n function updateFetti(context, fetti) {\n fetti.x += Math.cos(fetti.angle2D) * fetti.velocity + fetti.drift;\n fetti.y += Math.sin(fetti.angle2D) * fetti.velocity + fetti.gravity;\n fetti.wobble += fetti.wobbleSpeed;\n fetti.velocity *= fetti.decay;\n fetti.tiltAngle += 0.1;\n fetti.tiltSin = Math.sin(fetti.tiltAngle);\n fetti.tiltCos = Math.cos(fetti.tiltAngle);\n fetti.random = Math.random() + 2;\n fetti.wobbleX = fetti.x + ((10 * fetti.scalar) * Math.cos(fetti.wobble));\n fetti.wobbleY = fetti.y + ((10 * fetti.scalar) * Math.sin(fetti.wobble));\n\n var progress = (fetti.tick++) / fetti.totalTicks;\n\n var x1 = fetti.x + (fetti.random * fetti.tiltCos);\n var y1 = fetti.y + (fetti.random * fetti.tiltSin);\n var x2 = fetti.wobbleX + (fetti.random * fetti.tiltCos);\n var y2 = fetti.wobbleY + (fetti.random * fetti.tiltSin);\n\n context.fillStyle = 'rgba(' + fetti.color.r + ', ' + fetti.color.g + ', ' + fetti.color.b + ', ' + (1 - progress) + ')';\n context.beginPath();\n\n if (fetti.shape === 'circle') {\n context.ellipse ?\n context.ellipse(fetti.x, fetti.y, Math.abs(x2 - x1) * fetti.ovalScalar, Math.abs(y2 - y1) * fetti.ovalScalar, Math.PI / 10 * fetti.wobble, 0, 2 * Math.PI) :\n ellipse(context, fetti.x, fetti.y, Math.abs(x2 - x1) * fetti.ovalScalar, Math.abs(y2 - y1) * fetti.ovalScalar, Math.PI / 10 * fetti.wobble, 0, 2 * Math.PI);\n } else {\n context.moveTo(Math.floor(fetti.x), Math.floor(fetti.y));\n context.lineTo(Math.floor(fetti.wobbleX), Math.floor(y1));\n context.lineTo(Math.floor(x2), Math.floor(y2));\n context.lineTo(Math.floor(x1), Math.floor(fetti.wobbleY));\n }\n\n context.closePath();\n context.fill();\n\n return fetti.tick < fetti.totalTicks;\n }\n\n function animate(canvas, fettis, resizer, size, done) {\n var animatingFettis = fettis.slice();\n var context = canvas.getContext('2d');\n var animationFrame;\n var destroy;\n\n var prom = promise(function (resolve) {\n function onDone() {\n animationFrame = destroy = null;\n\n context.clearRect(0, 0, size.width, size.height);\n\n done();\n resolve();\n }\n\n function update() {\n if (isWorker && !(size.width === workerSize.width && size.height === workerSize.height)) {\n size.width = canvas.width = workerSize.width;\n size.height = canvas.height = workerSize.height;\n }\n\n if (!size.width && !size.height) {\n resizer(canvas);\n size.width = canvas.width;\n size.height = canvas.height;\n }\n\n context.clearRect(0, 0, size.width, size.height);\n\n animatingFettis = animatingFettis.filter(function (fetti) {\n return updateFetti(context, fetti);\n });\n\n if (animatingFettis.length) {\n animationFrame = raf.frame(update);\n } else {\n onDone();\n }\n }\n\n animationFrame = raf.frame(update);\n destroy = onDone;\n });\n\n return {\n addFettis: function (fettis) {\n animatingFettis = animatingFettis.concat(fettis);\n\n return prom;\n },\n canvas: canvas,\n promise: prom,\n reset: function () {\n if (animationFrame) {\n raf.cancel(animationFrame);\n }\n\n if (destroy) {\n destroy();\n }\n }\n };\n }\n\n function confettiCannon(canvas, globalOpts) {\n var isLibCanvas = !canvas;\n var allowResize = !!prop(globalOpts || {}, 'resize');\n var globalDisableForReducedMotion = prop(globalOpts, 'disableForReducedMotion', Boolean);\n var shouldUseWorker = canUseWorker && !!prop(globalOpts || {}, 'useWorker');\n var worker = shouldUseWorker ? getWorker() : null;\n var resizer = isLibCanvas ? setCanvasWindowSize : setCanvasRectSize;\n var initialized = (canvas && worker) ? !!canvas.__confetti_initialized : false;\n var preferLessMotion = typeof matchMedia === 'function' && matchMedia('(prefers-reduced-motion)').matches;\n var animationObj;\n\n function fireLocal(options, size, done) {\n var particleCount = prop(options, 'particleCount', onlyPositiveInt);\n var angle = prop(options, 'angle', Number);\n var spread = prop(options, 'spread', Number);\n var startVelocity = prop(options, 'startVelocity', Number);\n var decay = prop(options, 'decay', Number);\n var gravity = prop(options, 'gravity', Number);\n var drift = prop(options, 'drift', Number);\n var colors = prop(options, 'colors', colorsToRgb);\n var ticks = prop(options, 'ticks', Number);\n var shapes = prop(options, 'shapes');\n var scalar = prop(options, 'scalar');\n var origin = getOrigin(options);\n\n var temp = particleCount;\n var fettis = [];\n\n var startX = canvas.width * origin.x;\n var startY = canvas.height * origin.y;\n\n while (temp--) {\n fettis.push(\n randomPhysics({\n x: startX,\n y: startY,\n angle: angle,\n spread: spread,\n startVelocity: startVelocity,\n color: colors[temp % colors.length],\n shape: shapes[randomInt(0, shapes.length)],\n ticks: ticks,\n decay: decay,\n gravity: gravity,\n drift: drift,\n scalar: scalar\n })\n );\n }\n\n // if we have a previous canvas already animating,\n // add to it\n if (animationObj) {\n return animationObj.addFettis(fettis);\n }\n\n animationObj = animate(canvas, fettis, resizer, size , done);\n\n return animationObj.promise;\n }\n\n function fire(options) {\n var disableForReducedMotion = globalDisableForReducedMotion || prop(options, 'disableForReducedMotion', Boolean);\n var zIndex = prop(options, 'zIndex', Number);\n\n if (disableForReducedMotion && preferLessMotion) {\n return promise(function (resolve) {\n resolve();\n });\n }\n\n if (isLibCanvas && animationObj) {\n // use existing canvas from in-progress animation\n canvas = animationObj.canvas;\n } else if (isLibCanvas && !canvas) {\n // create and initialize a new canvas\n canvas = getCanvas(zIndex);\n document.body.appendChild(canvas);\n }\n\n if (allowResize && !initialized) {\n // initialize the size of a user-supplied canvas\n resizer(canvas);\n }\n\n var size = {\n width: canvas.width,\n height: canvas.height\n };\n\n if (worker && !initialized) {\n worker.init(canvas);\n }\n\n initialized = true;\n\n if (worker) {\n canvas.__confetti_initialized = true;\n }\n\n function onResize() {\n if (worker) {\n // TODO this really shouldn't be immediate, because it is expensive\n var obj = {\n getBoundingClientRect: function () {\n if (!isLibCanvas) {\n return canvas.getBoundingClientRect();\n }\n }\n };\n\n resizer(obj);\n\n worker.postMessage({\n resize: {\n width: obj.width,\n height: obj.height\n }\n });\n return;\n }\n\n // don't actually query the size here, since this\n // can execute frequently and rapidly\n size.width = size.height = null;\n }\n\n function done() {\n animationObj = null;\n\n if (allowResize) {\n global.removeEventListener('resize', onResize);\n }\n\n if (isLibCanvas && canvas) {\n document.body.removeChild(canvas);\n canvas = null;\n initialized = false;\n }\n }\n\n if (allowResize) {\n global.addEventListener('resize', onResize, false);\n }\n\n if (worker) {\n return worker.fire(options, size, done);\n }\n\n return fireLocal(options, size, done);\n }\n\n fire.reset = function () {\n if (worker) {\n worker.reset();\n }\n\n if (animationObj) {\n animationObj.reset();\n }\n };\n\n return fire;\n }\n\n // Make default export lazy to defer worker creation until called.\n var defaultFire;\n function getDefaultFire() {\n if (!defaultFire) {\n defaultFire = confettiCannon(null, { useWorker: true, resize: true });\n }\n return defaultFire;\n }\n\n module.exports = function() {\n return getDefaultFire().apply(this, arguments);\n };\n module.exports.reset = function() {\n getDefaultFire().reset();\n };\n module.exports.create = confettiCannon;\n}((function () {\n if (typeof window !== 'undefined') {\n return window;\n }\n\n if (typeof self !== 'undefined') {\n return self;\n }\n\n return this || {};\n})(), module, false));\n\n// end source content\n\nexport default module.exports;\nexport var create = module.exports.create;\n","import confetti from \"canvas-confetti\";\nimport { Fireworks } from \"fireworks-js\";\n\n/**\n * Affiche des confettis sur la page\n */\nexport function pif() {\n const count = 200;\n const defaults = {\n origin: { y: 0.7 },\n };\n\n function fire(particleRatio, opts) {\n confetti(\n Object.assign({}, defaults, opts, {\n particleCount: Math.floor(count * particleRatio),\n })\n );\n }\n\n fire(0.25, {\n spread: 26,\n startVelocity: 55,\n });\n fire(0.2, {\n spread: 60,\n });\n fire(0.35, {\n spread: 100,\n decay: 0.91,\n scalar: 0.8,\n });\n fire(0.1, {\n spread: 120,\n startVelocity: 25,\n decay: 0.92,\n scalar: 1.2,\n });\n fire(0.1, {\n spread: 120,\n startVelocity: 45,\n });\n}\n\nexport function setDarkMode(value) {\n if (value) {\n document.body.classList.add(\"dark-mode\");\n } else {\n document.body.classList.remove(\"dark-mode\");\n }\n}\n\nexport function getCV() {\n const a = document.createElement(\"a\");\n a.href = \"resources/resume.pdf\";\n a.setAttribute(\"download\", \"CV - Gregory Lebreton.pdf\");\n a.click();\n}\n\nexport function rmRf() {\n setDarkMode(true);\n document.body.classList.add(\"firework\");\n const fireworks = new Fireworks(document.body, {\n mouse: { click: true, move: false, max: 7 },\n });\n fireworks.start();\n}\n","/*!\n * fireworks-js 1.3.5 by Vitalij Ryndin (https://crashmax.ru)\n * https://fireworks.js.org\n * License MIT\n */\n!function(t,i){if(\"object\"==typeof exports&&\"object\"==typeof module)module.exports=i();else if(\"function\"==typeof define&&define.amd)define([],i);else{var s=i();for(var e in s)(\"object\"==typeof exports?exports:t)[e]=s[e]}}(this,(function(){return(()=>{\"use strict\";var t={511:(t,i,s)=>{Object.defineProperty(i,\"__esModule\",{value:!0}),i.Explosion=void 0;var e=s(909);i.Explosion=class{constructor(t){var{x:i,y:s,ctx:h,hue:n,exp:o,gravity:a,friction:r,brightness:c,explosionLength:_}=t;for(this._coordinates=[],this._alpha=1,this._x=i,this._y=s,this._exp=o,this._ctx=h,this._gravity=a,this._friction=r,this._explosionLength=_;this._explosionLength--;)this._coordinates.push([i,s]);this._angle=(0,e.randomFloat)(0,2*Math.PI),this._speed=(0,e.randomInt)(1,10),this._hue=(0,e.randomInt)(n-20,n+20),this._brightness=(0,e.randomInt)(c.min,c.max),this._decay=(0,e.randomFloat)(c.decay.min,c.decay.max)}update(t){this._coordinates.pop(),this._coordinates.unshift([this._x,this._y]),this._speed*=this._friction,this._x+=Math.cos(this._angle)*this._speed,this._y+=Math.sin(this._angle)*this._speed+this._gravity,this._alpha-=this._decay,this._alpha<=this._decay&&t()}draw(){var t=this._coordinates.length-1;this._ctx.beginPath(),this._exp&&(this._ctx.arc(this._x,this._y,(0,e.randomFloat)(.5,1.5),0,2*Math.PI),this._ctx.fill()),this._ctx.fillStyle=(0,e.hsla)(this._hue,this._brightness,this._alpha),this._ctx.moveTo(this._coordinates[t][0],this._coordinates[t][1]),this._ctx.lineTo(this._x,this._y),this._ctx.strokeStyle=(0,e.hsla)(this._hue,this._brightness,this._alpha),this._ctx.stroke()}}},909:(t,i)=>{Object.defineProperty(i,\"__esModule\",{value:!0}),i.hsla=i.getDistance=i.randomInt=i.randomFloat=void 0,i.randomFloat=function(t,i){return Math.random()*(i-t)+t},i.randomInt=function(t,i){return Math.floor(t+Math.random()*(i+1-t))},i.getDistance=function(t,i,s,e){var h=Math.pow;return Math.sqrt(h(t-s,2)+h(i-e,2))},i.hsla=function(t,i){var s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;return\"hsla(\".concat(t,\", 100%, \").concat(i,\"%, \").concat(s,\")\")}},449:function(t,i,s){var e=this&&this.__awaiter||function(t,i,s,e){return new(s||(s=Promise))((function(h,n){function o(t){try{r(e.next(t))}catch(t){n(t)}}function a(t){try{r(e.throw(t))}catch(t){n(t)}}function r(t){var i;t.done?h(t.value):(i=t.value,i instanceof s?i:new s((function(t){t(i)}))).then(o,a)}r((e=e.apply(t,i||[])).next())}))};Object.defineProperty(i,\"__esModule\",{value:!0}),i.Sound=void 0;var h=s(909);i.Sound=class{constructor(t){this._buffer=[],this.onInit=!0,this._audioContext=new(window.AudioContext||window.webkitAudioContext),this.options=Object.assign({enabled:!1,files:[\"explosion0.mp3\",\"explosion1.mp3\",\"explosion2.mp3\"],volume:{min:4,max:8}},t),this.init()}init(){this.onInit&&this.options.enabled&&(this.onInit=!1,this.load())}load(){return e(this,void 0,void 0,(function*(){for(var t of this.options.files){var i=yield(yield fetch(t)).arrayBuffer();this._audioContext.decodeAudioData(i).then((t=>{this._buffer.push(t)})).catch((t=>{throw t}))}}))}play(){if(this.options.enabled&&this._buffer.length){var t=this._audioContext.createBufferSource(),i=this._buffer[(0,h.randomInt)(0,this._buffer.length-1)],s=this._audioContext.createGain();t.buffer=i,s.gain.value=(0,h.randomFloat)(this.options.volume.min/100,this.options.volume.max/100),s.connect(this._audioContext.destination),t.connect(s),t.start(0)}else this.init()}}},668:(t,i,s)=>{Object.defineProperty(i,\"__esModule\",{value:!0}),i.Trace=void 0;var e=s(909);i.Trace=class{constructor(t){var{x:i,y:s,dx:h,dy:n,ctx:o,hue:a,speed:r,traceLength:c,acceleration:_}=t;for(this._coordinates=[],this._currentDistance=0,this._x=i,this._y=s,this._sx=i,this._sy=s,this._dx=h,this._dy=n,this._ctx=o,this._hue=a,this._speed=r,this._traceLength=c,this._acceleration=_,this._totalDistance=(0,e.getDistance)(i,s,h,n);this._traceLength--;)this._coordinates.push([i,s]);this._angle=Math.atan2(n-s,h-i),this._brightness=(0,e.randomInt)(50,70)}update(t){this._coordinates.pop(),this._coordinates.unshift([this._x,this._y]),this._speed*=this._acceleration;var i=Math.cos(this._angle)*this._speed,s=Math.sin(this._angle)*this._speed;this._currentDistance=(0,e.getDistance)(this._sx,this._sy,this._x+i,this._y+s),this._currentDistance>=this._totalDistance?t(this._dx,this._dy,this._hue):(this._x+=i,this._y+=s)}draw(){var t=this._coordinates.length-1;this._ctx.beginPath(),this._ctx.moveTo(this._coordinates[t][0],this._coordinates[t][1]),this._ctx.lineTo(this._x,this._y),this._ctx.strokeStyle=(0,e.hsla)(this._hue,this._brightness),this._ctx.stroke()}}}},i={};function s(e){var h=i[e];if(void 0!==h)return h.exports;var n=i[e]={exports:{}};return t[e].call(n.exports,n,n.exports,s),n.exports}var e={};return(()=>{var t=e;Object.defineProperty(t,\"__esModule\",{value:!0}),t.Fireworks=void 0;var i=s(668),h=s(449),n=s(511),o=s(909);t.Fireworks=class{constructor(t){var{autoresize:i=!0,boundaries:s,brightness:e,delay:n,hue:o,mouse:a,sound:r,trace:c=3,speed:_=2,explosion:d=5,gravity:u=1.5,opacity:l=.5,particles:p=50,friction:x=.95,rocketsPoint:m=50,acceleration:v=1.05}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this._tick=0,this._version=\"1.3.5\",this._running=!1,this._randomRocketsPoint=!1,this._experimentals=!1,this._m=!1,this._container=t,this._canvas=document.createElement(\"canvas\"),this._ctx=this._canvas.getContext(\"2d\"),this._container.appendChild(this._canvas),this._sound=new h.Sound(r),this.setSize(),this.setBoundaries(Object.assign({visible:!1,x:50,y:50},s)),this.autoresize=i,this.trace=c,this.speed=_,this.explosion=d,this.gravity=u,this.opacity=l,this.particles=p,this.friction=x,this.rocketsPoint=m,this.acceleration=v,this.hue=Object.assign({min:0,max:360},o),this.mouse=Object.assign({click:!1,move:!1,max:1},a),this.delay=Object.assign({min:15,max:30},n),this.brightness=Object.assign({min:50,max:80,decay:{min:.015,max:.03}},e),this.autoresize&&window.addEventListener(\"resize\",(()=>this.windowResize())),this._canvas.addEventListener(\"mousedown\",(t=>this.mouseDown(t))),this._canvas.addEventListener(\"mouseup\",(t=>this.mouseUp(t))),this._canvas.addEventListener(\"mousemove\",(t=>this.mouseMove(t)))}get isRunning(){return this._running}get version(){return this._version}start(){this._running||(this._running=!0,this.clear(),this.render())}stop(){this._running&&(this._running=!1,this.clear())}unmount(){window.removeEventListener(\"resize\",this.windowResize),this._canvas.addEventListener(\"mousedown\",this.mouseDown),this._canvas.addEventListener(\"mouseup\",this.mouseUp),this._canvas.addEventListener(\"mousemove\",this.mouseMove)}pause(){this._running=!this._running}clear(){this._ctx&&(this._traces=[],this._explosions=[],this._ctx.clearRect(0,0,this._width,this._height))}setOptions(t){for(var[i,s]of Object.entries(t)){var e=Object.prototype.hasOwnProperty.call(this,i);if(\"function\"==typeof this[i])throw new Error(\"You cannot change the methods of the class!\");e&&(\"object\"==typeof this[i]?Object.assign(this[i],s):this[i]=s),\"sound\"===i&&Object.assign(this._sound.options,s)}}setSize(){var{width:t=this._container.clientWidth,height:i=this._container.clientHeight}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._width=t,this._height=i,this._canvas.width=t,this._canvas.height=i,this.setBoundaries({width:t,height:i})}setBoundaries(t){this.boundaries=Object.assign(Object.assign({},this.boundaries),t)}useMouse(t,i){(this.mouse.click||this.mouse.move)&&(this._mx=t.pageX-this._canvas.offsetLeft,this._my=t.pageY-this._canvas.offsetTop,this._m=i)}windowResize(){this.setSize()}mouseDown(t){this.useMouse(t,this.mouse.click)}mouseUp(t){this.useMouse(t,!1)}mouseMove(t){this.useMouse(t,this._m)}render(){this._ctx&&this._running&&(requestAnimationFrame((()=>this.render())),this._ctx.globalCompositeOperation=\"destination-out\",this._ctx.fillStyle=\"rgba(0, 0, 0, \".concat(this.opacity,\")\"),this._ctx.fillRect(0,0,this._width,this._height),this._ctx.globalCompositeOperation=\"lighter\",this.drawBoundaries(),this.initTrace(),this.drawTrace(),this.drawExplosion(),this._tick++)}drawBoundaries(){this.boundaries.visible&&(this._ctx.beginPath(),this._ctx.strokeStyle=\"red\",this._ctx.rect(this.boundaries.x,this.boundaries.y,this.boundaries.width-2*this.boundaries.x,.5*this.boundaries.height),this._ctx.stroke())}initTrace(){this._ds=(0,o.randomInt)(this.delay.min,this.delay.max),(2*this._dsthis._traces.length)&&(this._traces.push(new i.Trace({x:this._width*(this._randomRocketsPoint?(0,o.randomInt)(0,100):this.rocketsPoint)/100,y:this._height,dx:this._mx&&this.mouse.move||this._m?this._mx:(0,o.randomInt)(this.boundaries.x,this.boundaries.width-2*this.boundaries.x),dy:this._my&&this.mouse.move||this._m?this._my:(0,o.randomInt)(this.boundaries.y,.5*this.boundaries.height),ctx:this._ctx,hue:(0,o.randomInt)(this.hue.min,this.hue.max),speed:this.speed,acceleration:this.acceleration,traceLength:this.trace})),this._tick=0)}drawTrace(){for(var t=this._traces.length;t--;)this._traces[t].draw(),this._traces[t].update(((i,s,e)=>{this.initExplosion(i,s,e),this._sound.play(),this._traces.splice(t,1)}))}initExplosion(t,i,s){for(var e=this.particles;e--;)this._explosions.push(new n.Explosion({x:t,y:i,ctx:this._ctx,hue:s,friction:this.friction,gravity:this.gravity,explosionLength:this.explosion,brightness:this.brightness,exp:this._experimentals}))}drawExplosion(){for(var t=this._explosions.length;t--;)this._explosions[t].draw(),this._explosions[t].update((()=>{this._explosions.splice(t,1)}))}}})(),e})()}));","/**\n * @typedef Command\n * @property {string} command\n * @property {string} responseType\n * @property {string?} value\n * @property {string[]?} headers\n * @property {string[]?} rows\n */\n\n/**\n * @type {Command[]} commands\n */\nimport commands from \"./resources/commands.json\";\nimport { getCV, pif, rmRf, setDarkMode } from \"./custom-comands\";\nimport { dragElement } from \"./draggable\";\n\n// Table containing the orders (useful for the completion of the orders)\nlet commandsList = [];\ncommands.forEach((c) => {\n commandsList.push(c.command);\n});\n\n// Commands that require JS processing\nconst customCommands = [\"clear\", \"dark\", \"light\", \"get cv\"];\ncommandsList = commandsList.concat(customCommands);\n\n// Eyster eggs' commands not available for autocompletion\nconst hiddenCommands = [\"pif\", \"rm -rf /\"];\n\n// Added the ability to move the window for PCs\nif (window.innerWidth > 1024) {\n dragElement(document.querySelector(\".terminal\"));\n}\n\n// Order history table\nconst commandsHistory = [];\nlet historyMode = false;\nlet historyIndex = -1;\nconst terminalBody = document.querySelector(\".terminal__body\");\n\n// Adding the default line\naddNewLine();\n\n// December Easter egg, adding snowflakes\nconst now = new Date();\nif (now.getMonth() === 11) {\n let htmlFlakes = \"\";\n for (let i = 0; i < 6; i++) {\n htmlFlakes += `
`;\n }\n const html = `
${htmlFlakes}
`;\n document.body.append(stringToDom(html));\n}\n\n// Set to dark mode if the browser theme is dark\nif (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {\n setDarkMode(true);\n}\n\n/**\n * Returns the HTML of the response for a given command\n * @param {string} command\n */\nfunction getDomForCommand(command) {\n const commandObj = commands.find((el) => el.command === command);\n let html = \"\";\n if (commandObj === undefined) {\n html = `'${\n command.split(\" \")[0]\n }' is not recognized as an internal command or external command, operable program or batch file. Type the help command to display a list of available commands.`;\n } else {\n if (commandObj.responseType === \"list\" && Array.isArray(commandObj.value)) {\n html = \"
    \";\n html += commandObj.value.map((s) => `
  • ${s}
  • `).join(\"\");\n html += \"
\";\n } else if (commandObj.responseType === \"text\") {\n html = commandObj.value;\n } else if (commandObj.responseType === \"table\") {\n const headers = commandObj.headers;\n const rows = commandObj.rows;\n const thsHtml = headers.map((h) => `${h}`).join(\"\");\n const tdsHtml = rows\n .map((r) => `${r.map((rtd) => `${rtd}`).join(\"\")}`)\n .join(\"\");\n html = `${thsHtml}${tdsHtml}
`;\n } else if (commandObj.responseType === \"code\") {\n html = `
${commandObj.value.join(\"\\n\")}
`;\n }\n }\n\n return html;\n}\n\n/**\n * Adds a new command input line and disables the previous one.\n * @param {string|null} previousUid uid de la ligne précédente.\n */\nfunction addNewLine(previousUid = null) {\n const uid = Math.random().toString(36).replace(\"0.\", \"\");\n // terminal__line\n const terminalLineEl = document.createElement(\"div\");\n terminalLineEl.classList.add(\"terminal__line\");\n\n // terminal__response\n const terminalResponseEl = document.createElement(\"div\");\n terminalResponseEl.classList.add(\"terminal__response\");\n terminalResponseEl.id = `response-${uid}`;\n\n // input text\n const inputEl = document.createElement(\"input\");\n inputEl.type = \"text\";\n inputEl.id = `input-${uid}`;\n inputEl.autocapitalize = \"off\";\n inputEl.dataset.uid = uid;\n inputEl.dataset.active = \"1\"; // Needed for focus\n inputEl.addEventListener(\"keydown\", onCommandInput);\n\n terminalLineEl.appendChild(inputEl);\n if (previousUid) {\n const previousInputEl = document.getElementById(previousUid);\n if (previousInputEl) {\n previousInputEl.setAttribute(\"disabled\", \"true\");\n previousInputEl.removeEventListener(\"keydown\", onCommandInput);\n delete previousInputEl.dataset.active;\n }\n }\n document.getElementById(\"terminal\").appendChild(terminalLineEl);\n document.getElementById(\"terminal\").appendChild(terminalResponseEl);\n\n inputEl.focus(); // Adds the focus as soon as the field is created\n}\n\n/**\n * Manages the keydown on the command input.\n * @param e\n */\nfunction onCommandInput(e) {\n const commandValue = e.target.value.trim().toLowerCase();\n if (e.keyCode === 13) {\n // ENTER\n if (commandValue !== \"\") {\n historyMode = false;\n const idResponse = `response-${e.target.dataset.uid}`;\n const responseEl = document.getElementById(idResponse);\n let html;\n if (\n hiddenCommands.includes(commandValue) ||\n customCommands.includes(commandValue)\n ) {\n html = handleCustomCommands(commandValue);\n } else {\n html = getDomForCommand(commandValue);\n }\n if (responseEl) {\n responseEl.innerHTML = html;\n commandsHistory.push(commandValue);\n addNewLine(e.target.id);\n }\n }\n } else if (e.keyCode === 9) {\n // TAB\n e.preventDefault();\n if (commandValue === \"\") {\n this.value = \"help\";\n } else {\n const matchingCommand = commandsList.find((c) =>\n c.startsWith(commandValue)\n );\n if (matchingCommand) {\n this.value = matchingCommand;\n }\n }\n historyMode = false;\n } else if (e.keyCode === 38 || e.keyCode === 40) {\n // UP / DOWN\n // History management\n if (commandsHistory.length > 0) {\n if (historyMode === false) {\n historyIndex = commandsHistory.length - 1;\n } else {\n if (e.keyCode === 38 && historyIndex !== 0) {\n // UP\n historyIndex--;\n } else if (\n e.keyCode === 40 &&\n historyIndex !== commandsHistory.length - 1\n ) {\n historyIndex++;\n }\n }\n this.value = commandsHistory[historyIndex];\n }\n historyMode = true;\n }\n}\n\n/**\n * Allows to manage hidden commands (not proposed in the autocompletion)\n * @param {string} command\n * @returns {string|void} Html to be displayed in the response of the command\n */\nfunction handleCustomCommands(command) {\n switch (command) {\n case \"pif\":\n pif();\n return \"Let's go !\";\n case \"light\":\n if (!document.body.classList.contains(\"dark-mode\"))\n return \"You are already in light mode.\";\n setDarkMode(false);\n return \"Your are now in light mode.\";\n case \"dark\":\n if (document.body.classList.contains(\"dark-mode\"))\n return \"You are already in dark mode.\";\n setDarkMode(true);\n return \"You are now in dark mode.\";\n case \"get cv\":\n getCV();\n return \"The CV will be downloaded.\";\n case \"rm -rf /\":\n rmRf();\n return \"🎆\";\n case \"clear\":\n terminalBody.innerHTML = `
`;\n return;\n }\n}\n\n/**\n * Convert HTML to DOM object\n * @param html\n * @returns {DocumentFragment}\n */\nfunction stringToDom(html) {\n return document.createRange().createContextualFragment(html);\n}\n\n// ------------------------------------------------------------------------------------\n// EVENT LISTENNER\n// ------------------------------------------------------------------------------------\n\n// Added focus on the input even if you click on the body (to keep the cursor)\ndocument.body.addEventListener(\"click\", function (e) {\n if (e.target.tagName !== \"INPUT\") {\n const activeInput = document.querySelector(\"input[data-active]\");\n activeInput.focus();\n }\n});\n\ndocument.querySelector(\".fake-close\").addEventListener(\"click\", function (e) {\n const terminalEl = document.querySelector(\".terminal\");\n terminalEl.parentElement.removeChild(terminalEl);\n});\n","export function dragElement(elmnt) {\n var pos1 = 0,\n pos2 = 0,\n pos3 = 0,\n pos4 = 0;\n const element = document.querySelector(\".terminal__header\");\n if (element) {\n // if present, the header is where you move the DIV from:\n element.onmousedown = dragMouseDown;\n } else {\n // otherwise, move the DIV from anywhere inside the DIV:\n elmnt.onmousedown = dragMouseDown;\n }\n\n function dragMouseDown(e) {\n e = e || window.event;\n e.preventDefault();\n // get the mouse cursor position at startup:\n pos3 = e.clientX;\n pos4 = e.clientY;\n document.onmouseup = closeDragElement;\n // call a function whenever the cursor moves:\n document.onmousemove = elementDrag;\n }\n\n function elementDrag(e) {\n e = e || window.event;\n e.preventDefault();\n // calculate the new cursor position:\n pos1 = pos3 - e.clientX;\n pos2 = pos4 - e.clientY;\n pos3 = e.clientX;\n pos4 = e.clientY;\n // set the element's new position:\n elmnt.style.top = elmnt.offsetTop - pos2 + \"px\";\n elmnt.style.left = elmnt.offsetLeft - pos1 + \"px\";\n }\n\n function closeDragElement() {\n // stop moving when mouse button is released:\n document.onmouseup = null;\n document.onmousemove = null;\n }\n}\n"],"names":["$d8a01dcfa0a5762f$exports","JSON","parse","$eebc2c287dcd06b1$var$module","main","global","module","isWorker","workerSize","canUseWorker","Worker","Blob","Promise","OffscreenCanvas","OffscreenCanvasRenderingContext2D","HTMLCanvasElement","prototype","transferControlToOffscreen","URL","createObjectURL","noop","promise","func","ModulePromise","exports","Prom","frame","cancel","TIME","frames","lastFrameTime","worker","prom","resolves","defaultFire","raf","Math","floor","requestAnimationFrame","cancelAnimationFrame","cb","id","random","onFrame","time","setTimeout","timer","clearTimeout","getWorker","code","toString","join","e","console","warn","execute","options","callback","postMessage","init","canvas","offscreen","fire","size","done","slice","resolve","workerDone","msg","data","removeEventListener","addEventListener","bind","reset","decorate","defaults","particleCount","angle","spread","startVelocity","decay","gravity","drift","ticks","x","y","shapes","zIndex","colors","disableForReducedMotion","scalar","prop","name","transform","val","convert","onlyPositiveInt","number","toDecimal","str","parseInt","colorsToRgb","map","hexToRgb","String","replace","length","r","substring","g","b","setCanvasWindowSize","width","document","documentElement","clientWidth","height","clientHeight","setCanvasRectSize","rect","getBoundingClientRect","animate","fettis","resizer","animationFrame","destroy","animatingFettis","context","getContext","onDone","clearRect","update","filter","fetti","cos","angle2D","velocity","sin","wobble","wobbleSpeed","tiltAngle","tiltSin","tiltCos","wobbleX","wobbleY","progress","tick","totalTicks","x1","y1","x2","y2","fillStyle","color","beginPath","shape","ellipse","abs","ovalScalar","PI","radiusX","radiusY","rotation","startAngle","endAngle","antiClockwise","save","translate","rotate","scale","arc","restore","moveTo","lineTo","closePath","fill","updateFetti","addFettis","concat","confettiCannon","globalOpts","animationObj","isLibCanvas","allowResize","globalDisableForReducedMotion","Boolean","initialized","__confetti_initialized","preferLessMotion","matchMedia","matches","fireLocal","opts","radAngle","radSpread","min","max","Number","origin","Object","getOrigin","temp","startX","startY","push","createElement","style","position","top","left","pointerEvents","getCanvas","body","appendChild","onResize","obj","resize","removeChild","getDefaultFire","useWorker","apply","this","arguments","create","window","self","$eebc2c287dcd06b1$export$2e2bcd8739ae039","$dcf1a4d0a69352ac$export$faf76607d863714d","value","classList","add","remove","t","i","$cb75fafee029b816$exports","define","amd","s","t1","defineProperty","Explosion","ctx","h","hue","n","exp","o","a","friction","brightness","c","explosionLength","_","_coordinates","_alpha","_x","_y","_exp","_ctx","_gravity","_friction","_explosionLength","_angle","randomFloat","_speed","randomInt","_hue","_brightness","_decay","pop","unshift","draw","hsla","strokeStyle","stroke","getDistance","pow","sqrt","__awaiter","next","throw","then","Sound","_buffer","onInit","_audioContext","AudioContext","webkitAudioContext","assign","enabled","files","volume","load","fetch","arrayBuffer","decodeAudioData","catch","play","createBufferSource","createGain","buffer","gain","connect","destination","start","Trace","dx","dy","speed","traceLength","acceleration","_currentDistance","_sx","_sy","_dx","_dy","_traceLength","_acceleration","_totalDistance","atan2","call","t2","Fireworks","autoresize","boundaries","delay","mouse","sound","trace","explosion","d","u","opacity","l","particles","p","rocketsPoint","m","v","_tick","_version","_running","_randomRocketsPoint","_experimentals","_m","_container","_canvas","_sound","setSize","setBoundaries","visible","click","move","windowResize","mouseDown","mouseUp","mouseMove","isRunning","version","clear","render","stop","unmount","pause","_traces","_explosions","_width","_height","setOptions","entries","hasOwnProperty","Error","useMouse","_mx","pageX","offsetLeft","_my","pageY","offsetTop","globalCompositeOperation","fillRect","drawBoundaries","initTrace","drawTrace","drawExplosion","_ds","initExplosion","splice","$1e660b916d30a31c$var$commandsList","$parcel$interopDefault","forEach","command","$1e660b916d30a31c$var$customCommands","$1e660b916d30a31c$var$hiddenCommands","innerWidth","elmnt","pos1","pos2","pos3","pos4","element","querySelector","dragMouseDown","event","preventDefault","clientX","clientY","onmouseup","closeDragElement","onmousemove","elementDrag","onmousedown","$a701256f05b28a22$export$69374dc2b307e4","$1e660b916d30a31c$var$commandsHistory","$1e660b916d30a31c$var$historyMode","$1e660b916d30a31c$var$historyIndex","$1e660b916d30a31c$var$terminalBody","$1e660b916d30a31c$var$addNewLine","Date","getMonth","htmlFlakes","html","append","createRange","createContextualFragment","$1e660b916d30a31c$var$stringToDom","previousUid","uid","terminalLineEl","terminalResponseEl","inputEl","type","autocapitalize","dataset","active","$1e660b916d30a31c$var$onCommandInput","previousInputEl","getElementById","setAttribute","focus","commandValue","target","trim","toLowerCase","keyCode","idResponse","responseEl","includes","particleRatio","$dcf1a4d0a69352ac$export$6de48e3f8be72096","contains","href","$dcf1a4d0a69352ac$export$9dab01f508b084d5","innerHTML","$1e660b916d30a31c$var$handleCustomCommands","commandObj","find","el","undefined","split","responseType","Array","isArray","headers","rows","rtd","$1e660b916d30a31c$var$getDomForCommand","matchingCommand","startsWith","tagName","terminalEl","parentElement"],"version":3,"file":"index.e1c8579d.js.map"} \ No newline at end of file diff --git a/dist/index.html b/dist/index.html index 3c158c7..ebd7816 100644 --- a/dist/index.html +++ b/dist/index.html @@ -1,58 +1,7 @@ - - - - - - - - - - - - - Terminal CV - - - - - - - - - - - - -
-
-
-
-
-
-
-
+Terminal CV 
             ██████╗ ██╗   ██╗    ████████╗███████╗██████╗ ███╗   ███╗██╗███╗   ██╗ █████╗ ██╗     
             ██╔════╝██║   ██║    ╚══██╔══╝██╔════╝██╔══██╗████╗ ████║██║████╗  ██║██╔══██╗██║     
             ██║     ██║   ██║       ██║   █████╗  ██████╔╝██╔████╔██║██║██╔██╗ ██║███████║██║     
             ██║     ╚██╗ ██╔╝       ██║   ██╔══╝  ██╔══██╗██║╚██╔╝██║██║██║╚██╗██║██╔══██║██║     
             ╚██████╗ ╚████╔╝        ██║   ███████╗██║  ██║██║ ╚═╝ ██║██║██║ ╚████║██║  ██║███████╗
-             ╚═════╝  ╚═══╝         ╚═╝   ╚══════╝╚═╝  ╚═╝╚═╝     ╚═╝╚═╝╚═╝  ╚═══╝╚═╝  ╚═╝╚══════╝
-
Greg Lebreton
-

Bienvenue sur mon CV terminal ! Pour afficher les commandes disponibles tapez help. Pour valider chaque commande appuyez sur Entrer, vous pouvez utiliser la touche Tabulation afin de vous aider à compléter une commande.

-
-
-
-
- - - - - + ╚═════╝ ╚═══╝ ╚═╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝╚══════╝
Greg Lebreton

Bienvenue sur mon CV terminal ! Pour afficher les commandes disponibles tapez help. Pour valider chaque commande appuyez sur Entrer, vous pouvez utiliser la touche Tabulation afin de vous aider à compléter une commande.

\ No newline at end of file diff --git a/dist/resources/resume.pdf b/dist/resources/resume.pdf index af1ea2a..0c99516 100644 Binary files a/dist/resources/resume.pdf and b/dist/resources/resume.pdf differ diff --git a/dist/site.webmanifest b/dist/site.webmanifest index 8e35506..f426e0f 100644 --- a/dist/site.webmanifest +++ b/dist/site.webmanifest @@ -1 +1 @@ -{"name":"Resume Antoine DAUTRY","short_name":"Resume","icons":[{"src":"/android-chrome-192x192.6d487ae0.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.b5266908.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} \ No newline at end of file +{"name":"Resume Antoine DAUTRY","short_name":"Resume","icons":[{"src":"/android-chrome-192x192.35fc9d7f.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.eadb6c24.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} \ No newline at end of file diff --git a/resume.pdf b/resume.pdf new file mode 100644 index 0000000..0c99516 Binary files /dev/null and b/resume.pdf differ diff --git a/src/custom-comands.js b/src/custom-comands.js index 5c5c873..c0fed0f 100644 --- a/src/custom-comands.js +++ b/src/custom-comands.js @@ -53,7 +53,7 @@ export function setDarkMode(value) { export function getCV() { const a = document.createElement("a"); a.href = "resources/resume.pdf"; - a.setAttribute("download", "CV - Antoine DAUTRY.pdf"); + a.setAttribute("download", "CV - Gregory Lebreton.pdf"); a.click(); } diff --git a/src/resources/commands.json b/src/resources/commands.json index daaf42c..76ab5dc 100644 --- a/src/resources/commands.json +++ b/src/resources/commands.json @@ -82,6 +82,12 @@ "PHP/JS", "Lien" ], + [ + "LA2029
(2023)", + "FPS shooter en VR dans le monde de Terminator.", + "C# WPF", + "Lien" + ], [ "GoldeneyeVR
(2020)", "Implémentation VR au célèbre jeux de 1997.", diff --git a/static/resume.pdf b/static/resume.pdf new file mode 100644 index 0000000..0c99516 Binary files /dev/null and b/static/resume.pdf differ