diff --git a/.gitignore b/.gitignore index 5097b74..2042c2b 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,12 @@ npm-debug.log* yarn-debug.log* yarn-error.log* + +# elm +elm-stuff +repl-temp-* + +# this file will be built. +*/michelaben/index.js + +*/michelaben/node_modules diff --git a/Dockerfile b/Dockerfile index 3ca8b6c..5221bc7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,15 +1,27 @@ -# stage1 - build react app first +# stage 1 - build react and elm apps first FROM node:20.5.1-alpine as build + +RUN apk update &&\ + apk --no-cache add curl &&\ + curl -sL https://github.com/elm/compiler/releases/download/0.19.1/binary-for-linux-64-bit.gz -o /tmp/elm.gz &&\ + gunzip /tmp/elm.gz &&\ + mv /tmp/elm /usr/local/bin/elm &&\ + chmod +x /usr/local/bin/elm &&\ + apk del curl + WORKDIR /app ENV PATH /app/node_modules/.bin:$PATH COPY ./package.json /app/ RUN npm install COPY . /app RUN npm run build +WORKDIR /app/src/michelaben +RUN elm make src/Main.elm --output=index.js # stage 2 - build the final image and copy the react build files FROM nginx:1.25.1-alpine COPY --from=build /app/build /usr/share/nginx/html +COPY --from=build /app/src/michelaben /usr/share/nginx/html/michelaben RUN rm /etc/nginx/conf.d/default.conf COPY config/nginx/nginx.conf /etc/nginx/conf.d EXPOSE 80 diff --git a/README.md b/README.md index bfcbb92..724003d 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ `docker pull pa4kev/portfolio-reactjs-full` if required, run certbot to set the certificates. -`docker run -it --rm -p 80:80 --name certbot -v "/etc/letsencrypt:/etc/letsencrypt" -v "/var/lib/letsencrypt:/var/lib/letsencrypt" certbot/certbot certonly --standalone --break-my-certs -d matsubara.nl -d www.matsubara.nl -d pa4kev.nl -d www.pa4kev.nl` +`docker run -it --rm -p 80:80 --name certbot -v "/etc/letsencrypt:/etc/letsencrypt" -v "/var/lib/letsencrypt:/var/lib/letsencrypt" certbot/certbot certonly --standalone --break-my-certs -d matsubara.nl -d www.matsubara.nl -d pa4kev.nl -d www.pa4kev.nl -d michelaben.nl -d www.michelaben.nl` `docker run -d --name react -p 80:80 -p 443:443 -v /etc/letsencrypt:/etc/letsencrypt -v /var/lib/letsencrypt:/var/lib/letsencrypt -v /var/www/html:/var/www/html pa4kev/portfolio-reactjs-full` @@ -47,6 +47,33 @@ Update all dependancies: `npm update` --- +`elm init` + +`npm init -y` + +`elm install mdgriffith/elm-ui` + +`elm install elm-community/random-extra` + +Add to `package.json` +``` +"scripts": { + "dev": "elm-live src/Main.elm -- --debug --output=index.js", +}, +"devDependencies": { + "elm-live": "^4.0.2" +} +``` + +`npm install` + +You can now run for development: +`npm run dev` + +`elm make src/Main.elm --output=index.js` + +--- + ## Documentation [Create React App](https://github.com/facebook/create-react-app) diff --git a/config/nginx/nginx.conf b/config/nginx/nginx.conf index ae356af..64f196c 100644 --- a/config/nginx/nginx.conf +++ b/config/nginx/nginx.conf @@ -1,3 +1,5 @@ +# matsubara.nl + server { server_name matsubara.nl www.matsubara.nl; listen 80; @@ -38,3 +40,44 @@ server { root /var/www/certbot; } } + +# michelaben.nl + +server { + server_name michelaben.nl www.michelaben.nl; + listen 80; + listen [::]:80; + + return 301 https://$host$request_uri; +} + +server { + server_name michelaben.nl www.michelaben.nl; + server_tokens off; + + listen 443 ssl http2; + listen [::]:443 ssl http2; + + # These two directives define the paths to the TLS certificate and secret key. + # These will be provisioned using Certbot and mounted into the Nginx container in the next step. + ssl_certificate /etc/letsencrypt/live/matsubara.nl/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/matsubara.nl/privkey.pem; + + location / { + root /usr/share/nginx/html/michelaben; # Update the path to your specific directory + index index.html; + + # Redirect all requests to index.html + try_files $uri /index.html; + } + + error_page 500 502 503 504 /50x.html; + + location = /50x.html { + root /usr/share/nginx/html; + } + + location /.well-known/acme-challenge/ { + root /var/www/certbot; + } +} diff --git a/src/michelaben/elm.json b/src/michelaben/elm.json new file mode 100644 index 0000000..b9a40c2 --- /dev/null +++ b/src/michelaben/elm.json @@ -0,0 +1,25 @@ +{ + "type": "application", + "source-directories": [ + "src" + ], + "elm-version": "0.19.1", + "dependencies": { + "direct": { + "elm/browser": "1.0.2", + "elm/core": "1.0.5", + "elm/html": "1.0.0", + "mdgriffith/elm-ui": "1.1.8" + }, + "indirect": { + "elm/json": "1.1.3", + "elm/time": "1.0.0", + "elm/url": "1.0.0", + "elm/virtual-dom": "1.0.3" + } + }, + "test-dependencies": { + "direct": {}, + "indirect": {} + } +} \ No newline at end of file diff --git a/src/michelaben/images/elm-icon.webp b/src/michelaben/images/elm-icon.webp new file mode 100644 index 0000000..623bf7c Binary files /dev/null and b/src/michelaben/images/elm-icon.webp differ diff --git a/src/michelaben/images/michel-aben.webp b/src/michelaben/images/michel-aben.webp new file mode 100644 index 0000000..2d93373 Binary files /dev/null and b/src/michelaben/images/michel-aben.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-1.webp b/src/michelaben/images/tekeningen/michael-aben-1.webp new file mode 100644 index 0000000..379631b Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-1.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-10.webp b/src/michelaben/images/tekeningen/michael-aben-10.webp new file mode 100644 index 0000000..b12ca96 Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-10.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-11.webp b/src/michelaben/images/tekeningen/michael-aben-11.webp new file mode 100644 index 0000000..ecd0bd1 Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-11.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-12.webp b/src/michelaben/images/tekeningen/michael-aben-12.webp new file mode 100644 index 0000000..bf04397 Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-12.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-13.webp b/src/michelaben/images/tekeningen/michael-aben-13.webp new file mode 100644 index 0000000..5ae5538 Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-13.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-14.webp b/src/michelaben/images/tekeningen/michael-aben-14.webp new file mode 100644 index 0000000..8e8c03c Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-14.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-15.webp b/src/michelaben/images/tekeningen/michael-aben-15.webp new file mode 100644 index 0000000..77a11c7 Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-15.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-16.webp b/src/michelaben/images/tekeningen/michael-aben-16.webp new file mode 100644 index 0000000..92384f6 Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-16.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-17.webp b/src/michelaben/images/tekeningen/michael-aben-17.webp new file mode 100644 index 0000000..0578f51 Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-17.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-18.webp b/src/michelaben/images/tekeningen/michael-aben-18.webp new file mode 100644 index 0000000..d113f7c Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-18.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-19.webp b/src/michelaben/images/tekeningen/michael-aben-19.webp new file mode 100644 index 0000000..e6e771c Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-19.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-2.webp b/src/michelaben/images/tekeningen/michael-aben-2.webp new file mode 100644 index 0000000..232a25a Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-2.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-20.webp b/src/michelaben/images/tekeningen/michael-aben-20.webp new file mode 100644 index 0000000..d6152f8 Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-20.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-21.webp b/src/michelaben/images/tekeningen/michael-aben-21.webp new file mode 100644 index 0000000..58854ad Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-21.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-22.webp b/src/michelaben/images/tekeningen/michael-aben-22.webp new file mode 100644 index 0000000..a5d2468 Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-22.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-23.webp b/src/michelaben/images/tekeningen/michael-aben-23.webp new file mode 100644 index 0000000..b7dad60 Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-23.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-24.webp b/src/michelaben/images/tekeningen/michael-aben-24.webp new file mode 100644 index 0000000..0feae1d Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-24.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-25.webp b/src/michelaben/images/tekeningen/michael-aben-25.webp new file mode 100644 index 0000000..14b898c Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-25.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-26.webp b/src/michelaben/images/tekeningen/michael-aben-26.webp new file mode 100644 index 0000000..d2bc822 Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-26.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-27.webp b/src/michelaben/images/tekeningen/michael-aben-27.webp new file mode 100644 index 0000000..029033e Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-27.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-28.webp b/src/michelaben/images/tekeningen/michael-aben-28.webp new file mode 100644 index 0000000..bdf5669 Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-28.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-29.webp b/src/michelaben/images/tekeningen/michael-aben-29.webp new file mode 100644 index 0000000..0c88d29 Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-29.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-3.webp b/src/michelaben/images/tekeningen/michael-aben-3.webp new file mode 100644 index 0000000..5b34731 Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-3.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-30.webp b/src/michelaben/images/tekeningen/michael-aben-30.webp new file mode 100644 index 0000000..6f45ce8 Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-30.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-31.webp b/src/michelaben/images/tekeningen/michael-aben-31.webp new file mode 100644 index 0000000..198b95e Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-31.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-32.webp b/src/michelaben/images/tekeningen/michael-aben-32.webp new file mode 100644 index 0000000..5481fe5 Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-32.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-33.webp b/src/michelaben/images/tekeningen/michael-aben-33.webp new file mode 100644 index 0000000..5e87f29 Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-33.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-34.webp b/src/michelaben/images/tekeningen/michael-aben-34.webp new file mode 100644 index 0000000..3552f36 Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-34.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-35.webp b/src/michelaben/images/tekeningen/michael-aben-35.webp new file mode 100644 index 0000000..1f2d98e Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-35.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-36.webp b/src/michelaben/images/tekeningen/michael-aben-36.webp new file mode 100644 index 0000000..b3dbb1d Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-36.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-37.webp b/src/michelaben/images/tekeningen/michael-aben-37.webp new file mode 100644 index 0000000..413cd43 Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-37.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-38.webp b/src/michelaben/images/tekeningen/michael-aben-38.webp new file mode 100644 index 0000000..7d1c506 Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-38.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-39.webp b/src/michelaben/images/tekeningen/michael-aben-39.webp new file mode 100644 index 0000000..2949aa2 Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-39.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-4.webp b/src/michelaben/images/tekeningen/michael-aben-4.webp new file mode 100644 index 0000000..f58685b Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-4.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-40.webp b/src/michelaben/images/tekeningen/michael-aben-40.webp new file mode 100644 index 0000000..7e04970 Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-40.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-41.webp b/src/michelaben/images/tekeningen/michael-aben-41.webp new file mode 100644 index 0000000..6487466 Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-41.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-42.webp b/src/michelaben/images/tekeningen/michael-aben-42.webp new file mode 100644 index 0000000..ec15ac2 Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-42.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-43.webp b/src/michelaben/images/tekeningen/michael-aben-43.webp new file mode 100644 index 0000000..266dac1 Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-43.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-44.webp b/src/michelaben/images/tekeningen/michael-aben-44.webp new file mode 100644 index 0000000..77748e1 Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-44.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-45.webp b/src/michelaben/images/tekeningen/michael-aben-45.webp new file mode 100644 index 0000000..4b9819f Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-45.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-46.webp b/src/michelaben/images/tekeningen/michael-aben-46.webp new file mode 100644 index 0000000..1775721 Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-46.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-47.webp b/src/michelaben/images/tekeningen/michael-aben-47.webp new file mode 100644 index 0000000..fe06651 Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-47.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-48.webp b/src/michelaben/images/tekeningen/michael-aben-48.webp new file mode 100644 index 0000000..16fbc3b Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-48.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-49.webp b/src/michelaben/images/tekeningen/michael-aben-49.webp new file mode 100644 index 0000000..f874c2d Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-49.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-5.webp b/src/michelaben/images/tekeningen/michael-aben-5.webp new file mode 100644 index 0000000..df5d72a Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-5.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-50.webp b/src/michelaben/images/tekeningen/michael-aben-50.webp new file mode 100644 index 0000000..1caf312 Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-50.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-51.webp b/src/michelaben/images/tekeningen/michael-aben-51.webp new file mode 100644 index 0000000..31ed0d2 Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-51.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-52.webp b/src/michelaben/images/tekeningen/michael-aben-52.webp new file mode 100644 index 0000000..d99ab5c Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-52.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-53.webp b/src/michelaben/images/tekeningen/michael-aben-53.webp new file mode 100644 index 0000000..53e603d Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-53.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-54.webp b/src/michelaben/images/tekeningen/michael-aben-54.webp new file mode 100644 index 0000000..7bfb532 Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-54.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-55.webp b/src/michelaben/images/tekeningen/michael-aben-55.webp new file mode 100644 index 0000000..0b2bbec Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-55.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-6.webp b/src/michelaben/images/tekeningen/michael-aben-6.webp new file mode 100644 index 0000000..d6db6cf Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-6.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-7.webp b/src/michelaben/images/tekeningen/michael-aben-7.webp new file mode 100644 index 0000000..96bf897 Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-7.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-8.webp b/src/michelaben/images/tekeningen/michael-aben-8.webp new file mode 100644 index 0000000..ad04dbf Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-8.webp differ diff --git a/src/michelaben/images/tekeningen/michael-aben-9.webp b/src/michelaben/images/tekeningen/michael-aben-9.webp new file mode 100644 index 0000000..302b8da Binary files /dev/null and b/src/michelaben/images/tekeningen/michael-aben-9.webp differ diff --git a/src/michelaben/index.html b/src/michelaben/index.html new file mode 100644 index 0000000..b02de8c --- /dev/null +++ b/src/michelaben/index.html @@ -0,0 +1,21 @@ + + + + + + + Michel Aben + + + +
+ + + + + + \ No newline at end of file diff --git a/src/michelaben/package-lock.json b/src/michelaben/package-lock.json new file mode 100644 index 0000000..3982f01 --- /dev/null +++ b/src/michelaben/package-lock.json @@ -0,0 +1,971 @@ +{ + "name": "michelaben", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "michelaben", + "version": "1.0.0", + "license": "ISC", + "devDependencies": { + "elm-live": "^4.0.2" + } + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.0.2.tgz", + "integrity": "sha512-c4PR2egjNjI1um6bamCQ6bUNPDiyofNQruHvKgHQ4gDUP/ITSVSzNsiI5OWtHOsX323i5ha/kk4YmOZ1Ktg7KA==", + "dev": true, + "dependencies": { + "anymatch": "^3.0.1", + "braces": "^3.0.2", + "glob-parent": "^5.0.0", + "is-binary-path": "^2.1.0", + "is-glob": "^4.0.1", + "normalize-path": "^3.0.0", + "readdirp": "^3.1.1" + }, + "engines": { + "node": ">= 8" + }, + "optionalDependencies": { + "fsevents": "^2.0.6" + } + }, + "node_modules/commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + }, + "node_modules/crocks": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/crocks/-/crocks-0.12.1.tgz", + "integrity": "sha512-2qCRJwBmPlRQXzd50k9gt9PaItultOP8lj/cKSH2Eai9aeBuNqAnDuyolAm9TGn6Pw/4BgbxtPJLU1S+tQ4WMQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.0.1.tgz", + "integrity": "sha512-77q+/Kkp43OBZUppmezGBqwB1qdjGk8y1Kb6zdPaYVz8qKFRdGpL6TRLqJhlhG5RhtGkNnKaeEYCt7b/vtYteg==", + "dev": true, + "dependencies": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dev": true, + "dependencies": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==", + "dev": true + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/elm-hot": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/elm-hot/-/elm-hot-1.1.4.tgz", + "integrity": "sha512-qPDP/o/Fkifriaxaf3E7hHFB5L6Ijihyg8is4A6xna6/h/zebUiNssbQrxywI2oxNUkr6W/leEu/WlIC1tmVnw==", + "dev": true + }, + "node_modules/elm-live": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/elm-live/-/elm-live-4.0.2.tgz", + "integrity": "sha512-4I3UvJxF6MubC14VsgtV11B0zBxaaKtdKKsWquoaa5a3UHBIGW83qgTnt/NxOj4omOLfupaftmDaE4yRMTgTcw==", + "dev": true, + "dependencies": { + "chalk": "^1.1.1", + "chokidar": "3.0.2", + "commander": "2.17.1", + "crocks": "0.12.1", + "cross-spawn": "5.0.1", + "elm-hot": "1.1.4", + "finalhandler": "1.1.2", + "http-proxy": "1.17.0", + "internal-ip": "4.3.0", + "mime": "2.4.3", + "open": "6.4.0", + "pem": "1.14.2", + "serve-static": "1.14.1", + "ws": "7.1.1" + }, + "bin": { + "elm-live": "bin/elm-live.js" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/es6-promisify": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.1.1.tgz", + "integrity": "sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg==", + "dev": true + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", + "dev": true + }, + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/execa/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-proxy": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", + "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", + "dev": true, + "dependencies": { + "eventemitter3": "^3.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "dev": true, + "dependencies": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dev": true, + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "node_modules/mime": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.3.tgz", + "integrity": "sha512-QgrPRJfE+riq5TPZMcHZOtm8c6K/yYrMbKIoRfapfiGLxS8OTeIfRhUGW5LU7MlRa52KOAGCfUNruqLrIBvWZw==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dev": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/open": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "dev": true, + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pem": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/pem/-/pem-1.14.2.tgz", + "integrity": "sha512-TOnPtq3ZFnCniOZ+rka4pk8UIze9xG1qI+wNE7EmkiR/cg+53uVvk5QbkWZ7M6RsuOxzz62FW1hlAobJr/lTOA==", + "dev": true, + "dependencies": { + "es6-promisify": "^6.0.0", + "md5": "^2.2.1", + "os-tmpdir": "^1.0.1", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "node_modules/serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/ws": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.1.1.tgz", + "integrity": "sha512-o41D/WmDeca0BqYhsr3nJzQyg9NF5X8l/UdnFNux9cS3lwB+swm8qGWX5rn+aD6xfBU3rGmtHij7g7x6LxFU3A==", + "dev": true, + "dependencies": { + "async-limiter": "^1.0.0" + } + }, + "node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true + } + } +} diff --git a/src/michelaben/package.json b/src/michelaben/package.json new file mode 100644 index 0000000..809b94d --- /dev/null +++ b/src/michelaben/package.json @@ -0,0 +1,16 @@ +{ + "name": "michelaben", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "dev": "elm-live src/Main.elm -- --debug --output=index.js", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "devDependencies": { + "elm-live": "^4.0.2" + } +} \ No newline at end of file diff --git a/src/michelaben/src/Main.elm b/src/michelaben/src/Main.elm new file mode 100644 index 0000000..dee044d --- /dev/null +++ b/src/michelaben/src/Main.elm @@ -0,0 +1,176 @@ +module Main exposing (..) + +import Browser +import Element as E +import Element.Font as EF exposing (alignRight) +import Element.Region as ER +import Html as H exposing (Html, br, div, hr, p) +import Html.Attributes as HA +import String exposing (fromInt) + + +type alias ImageInfo = + { src : String + , description : String + } + + +type alias Model = + { backgroundColour : Maybe E.Color + , images : List ImageInfo + } + + +type Msg + = MsgChangeColours + + +modelInit : Model +modelInit = + { backgroundColour = Nothing --Just E.rgb255 0xEE 0xEE 0xFF + , images = generateImageList 1 55 + } + + +generateImageList : Int -> Int -> List ImageInfo +generateImageList start end = + List.range start end + |> List.map (\n -> { src = "images/tekeningen/michael-aben-" ++ fromInt n ++ ".webp", description = "" }) + + +main : Program () Model Msg +main = + Browser.sandbox + { init = modelInit + , view = viewLayout + , update = update + } + + +viewLayout : Model -> Html Msg +viewLayout model = + E.layoutWith + { options = + [ E.focusStyle + { backgroundColor = model.backgroundColour + , borderColor = Nothing + , shadow = Nothing + } + ] + } + [ E.padding 22 + ] + (viewArtImages model) + + +viewTitle : E.Element msg +viewTitle = + E.paragraph + [ EF.bold + , EF.size 28 + , ER.heading 1 + ] + [ E.text "Michaël Aben's Tekeningen: Een Creatieve Wereld Ontdekt." + ] + + +text1 : String +text1 = + "Welkom in de wereld van Michaël Aben. Onze \"ome Michel\" genoot altijd erg veel van tekenen en het gebruik van kleuren om iets moois te maken. Hij had een grote liefde voor geometrische vormen zoals pyramides. Ook tekende hij graag gebouwen en soms gezichten. Hier vind je een collectie van zijn passie." + + +viewContent : E.Element msg +viewContent = + let + elmLink = + E.link [] { label = E.text "Elm", url = "https://elm-lang.org/" } + + matsubaraLink = + E.link [] { label = E.text "Kevin Matsubara", url = "https://matsubara.nl/" } + in + E.column + [ E.paddingXY 0 10 + , ER.mainContent + ] + [ E.paragraph + [ EF.size 18 + , E.paddingXY 0 20 + ] + [ E.text text1 ] + , E.paragraph + [ EF.size 18 + , E.paddingXY 0 10 + ] + [ E.text "Mensen zoals jij, kleuren het leven net iets mooier." ] + , E.paragraph + [ EF.size 14 + , E.paddingXY 0 10 + ] + [ E.text "☼ 5 december 1947", E.html (br [] []), E.text "† 19 oktober 2023" ] + , E.paragraph + [ EF.size 18 + , E.paddingXY 0 10 + ] + [ E.text "Aan alle mooie liedjes komt ooit eens een eind. Een kort en mooi verhaal, dat plotseling verdwijnt." ] + , E.paragraph + [ EF.size 18 + , E.paddingXY 0 10 + ] + [ E.text "Onthou vooral het ritme en neurie het of zing, zo blijft dat mooiste lied een top herinnering." ] + , E.paragraph + [ EF.size 14 + , E.paddingXY 0 5 + ] + [ E.html (hr [] []), E.text "Deze website is gemaakt in ", elmLink, E.text " door ", matsubaraLink, E.text "." ] + ] + + +update : Msg -> Model -> Model +update _ model = + model + + +elmIcon : E.Element msg +elmIcon = + let + icon = + E.image + [] + { src = "images/elm-icon.webp" + , description = "elm icon" + } + in + E.link [ E.centerX ] + { label = icon, url = "https://elm-lang.org/" } + + +mainImage : E.Element msg +mainImage = + E.image + [ E.paddingXY 0 20 + , E.centerX + ] + { src = "images/michel-aben.webp", description = "Michel Aben" } + + +viewArtImages : Model -> E.Element msg +viewArtImages model = + E.column [] + (viewTitle + :: viewContent + :: elmIcon + :: mainImage + :: List.map viewArtImage model.images + ) + + +viewArtImage : ImageInfo -> E.Element msg +viewArtImage imageInfo = + E.image + [ E.width (E.maximum 600 E.fill) + , E.centerX + , E.paddingXY 0 20 + ] + { src = imageInfo.src + , description = imageInfo.description + }