diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 9b2611c6f2ece5740089676886a899744f1adf18..04c39087f7809a575662163b68da9283fa4dffb9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -48,6 +48,10 @@ pages: - git checkout dev - git pull + # Check for favicon updates + - npm install -g cli-real-favicon + - real-favicon check-for-update --fail-on-update faviconData.json + # Build for GitLab Pages - npm run build-gitlab - cp -a dist/. public/ diff --git a/css/main.css b/css/main.css index 57f548b397795fc57b5a1b8e66fb2e6901b1d164..bc78357add4bbd4312da6eaddfc74f40a33e438e 100644 --- a/css/main.css +++ b/css/main.css @@ -1,50 +1,73 @@ +:root { + --main-accent-color: #97010e; + --sub-accent-color: #f34c3f; + --main-highlight-color: #b8caba; + --sub-highlight-color: #5a6b5d; + --100-color: #e1e1e1; + --200-color: #adadad; + --300-color: #949494; + --400-color: #474747; +} + body { display: flex; flex-flow: column wrap; - font-family: ui-sans-serif, sans-serif; + font-family: "Roboto Mono", ui-monospace, monospace, ui-sans-serif, sans-serif; -webkit-user-select: none; /* still needed for Safari 16 */ user-select: none; } +#viewer-settings-knob { + position: fixed; + background: var(--100-color); + margin: 0.5rem; + padding: 0.5rem; + border-radius: 0.75rem; + display: none; +} + menu { - display: inline-block; + display: inline-flex; list-style-type: none; padding: 0; margin: 0; } -header { - display: none; -} - -#tailorbirdLogo { - --logosize-scalefactor: 1.5; - height: calc(102px / var(--logosize-scalefactor)); - width: calc(334px / var(--logosize-scalefactor)); -} - -menu > li { - display: inline-block; -} - menu button { border-radius: 0.25rem; - background-color: #ccc; + background-color: var(--200-color); padding: 0.25rem 0.75rem; margin: 0 0.5rem; - border: 1.5px solid #ccc; - transition: 0.3s; + border: 1.5px solid var(--300-color); cursor: pointer; } +menu button#zoomIntoViewButton { + cursor: zoom-in; +} +menu button#zoomOutViewButton { + cursor: zoom-out; +} +menu button.buttonRightFlat { + margin-right: 0; + border-right: none; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +menu button.buttonLeftFlat { + margin-left: 0; + border-left: none; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} menu button:hover { - background-color: #bbb; - border-color: #7a7a7a; + background-color: var(--300-color); + border-color: var(--400-color); } menu button:active { - background-color: #999; + background-color: var(--400-color); } menu button:disabled { - color: #aaa; + color: var(--100-color); } menu.menu-impressum { padding-left: 1rem; @@ -56,7 +79,7 @@ menu.menu-impressum li:not(:last-child)::after { } menu.menu-impressum a { text-decoration: none; - color: #000; + color: black; } menu.menu-right { float: right; @@ -69,7 +92,7 @@ main { } section { - outline: 2px solid black; + outline: 2px solid var(--400-color); display: flex; flex-direction: column; height: 100vh; @@ -80,13 +103,16 @@ section#viewer { } article#viewer-settings { - background-color: #eee; - padding: 0.5rem 0 0 0.5rem; - outline: 2px solid black; + position: fixed; + background: no-repeat url("/icon.svg") var(--100-color); + margin: 0 1vw; + padding: 0.75rem 0 0 3rem; + outline: 2px solid var(--400-color); + transition: 0.3s; } section#tools { - background-color: #eee; + background-color: var(--100-color); flex: none; /* Equivalent to flex: 0 0 auto; */ } @@ -120,15 +146,15 @@ article#tools-list { } #list-commands { - background-color: #eee; + background-color: var(--100-color); } #list-commands > ul { - background-color: #bbb; + background-color: var(--200-color); } #list-commands > ul > ul { - background-color: #999; + background-color: var(--400-color); } #list-commands li { @@ -139,17 +165,16 @@ article#tools-list { #list-commands li.selected { color: white; - background-color: darkslategray; + background-color: var(--sub-highlight-color); } #list-commands li:hover { - color: white; - background-color: darkgray; + background-color: var(--main-highlight-color); } #list-commands li.selected:hover { color: white; - background-color: darkslategray; + background-color: var(--sub-highlight-color); } article#tools-list-buttons { @@ -161,59 +186,26 @@ article#tools-list-buttons { padding: 0; } -#helpDialog ul > li > span.helpControlText { +#helpDialog span.helpControlText { position: absolute; left: 3rem; } -/* Zdog */ - -.zdog-canvas { - display: block; - width: 100%; - height: calc(100vh - 3rem); /* 3rem is height of footer incl. margin */ -} - -/*ul { - padding-left: 0; - margin-bottom: 0; -} - -#command-area { - height: 400px; -} - -#list-commands-wrapper { - margin: 1rem 0; - width: 300px; - float: left; - background-color: slategray; - outline-radius: 10px; +#helpDialog a { + text-decoration: none; + color: black; } -#list-commands > li { - width: 200px; - margin: 1rem auto; - padding: 0.5rem 1rem; - background-color: lightgray; - outline-radius: 10px; +#helpLogo { + width: 75px; + height: 75px; + float: right; } -#list-commands .command-active { - background-color: white; -} +/* Zdog */ -#popup-edit { - margin: 1rem 0; - width: 300px; - display: none; - float: right; - background-color: white; - padding: 2rem 3rem; - height: 300px; - outline-radius: 10px; +.zdog-canvas { + display: block; + width: 100%; + height: 100vh; } - -#popup-edit-parameters { - list-style: none; -}*/ diff --git a/faviconData.json b/faviconData.json new file mode 100644 index 0000000000000000000000000000000000000000..94ba3a652e2ee680a1e0f706c5395254e35f311d --- /dev/null +++ b/faviconData.json @@ -0,0 +1 @@ +{"result":{"status":"success"},"favicon":{"package_url":"https://realfavicongenerator.net/files/99cf5207dde3f7619c6fb5a9800c66ae90c92df3/favicon_package_v0.16.zip","files_urls":["https://realfavicongenerator.net/files/99cf5207dde3f7619c6fb5a9800c66ae90c92df3/package_files/android-chrome-192x192.png","https://realfavicongenerator.net/files/99cf5207dde3f7619c6fb5a9800c66ae90c92df3/package_files/android-chrome-512x512.png","https://realfavicongenerator.net/files/99cf5207dde3f7619c6fb5a9800c66ae90c92df3/package_files/apple-touch-icon.png","https://realfavicongenerator.net/files/99cf5207dde3f7619c6fb5a9800c66ae90c92df3/package_files/browserconfig.xml","https://realfavicongenerator.net/files/99cf5207dde3f7619c6fb5a9800c66ae90c92df3/package_files/favicon-16x16.png","https://realfavicongenerator.net/files/99cf5207dde3f7619c6fb5a9800c66ae90c92df3/package_files/favicon-32x32.png","https://realfavicongenerator.net/files/99cf5207dde3f7619c6fb5a9800c66ae90c92df3/package_files/favicon.ico","https://realfavicongenerator.net/files/99cf5207dde3f7619c6fb5a9800c66ae90c92df3/package_files/mstile-144x144.png","https://realfavicongenerator.net/files/99cf5207dde3f7619c6fb5a9800c66ae90c92df3/package_files/mstile-150x150.png","https://realfavicongenerator.net/files/99cf5207dde3f7619c6fb5a9800c66ae90c92df3/package_files/mstile-310x150.png","https://realfavicongenerator.net/files/99cf5207dde3f7619c6fb5a9800c66ae90c92df3/package_files/mstile-310x310.png","https://realfavicongenerator.net/files/99cf5207dde3f7619c6fb5a9800c66ae90c92df3/package_files/mstile-70x70.png","https://realfavicongenerator.net/files/99cf5207dde3f7619c6fb5a9800c66ae90c92df3/package_files/safari-pinned-tab.svg","https://realfavicongenerator.net/files/99cf5207dde3f7619c6fb5a9800c66ae90c92df3/package_files/site.webmanifest"],"html_code":"<link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"/apple-touch-icon.png\">\n<link rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/favicon-32x32.png\">\n<link rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/favicon-16x16.png\">\n<link rel=\"manifest\" href=\"/site.webmanifest\">\n<link rel=\"mask-icon\" href=\"/safari-pinned-tab.svg\" color=\"#5a6b5d\">\n<meta name=\"apple-mobile-web-app-title\" content=\"Tailorbird\">\n<meta name=\"application-name\" content=\"Tailorbird\">\n<meta name=\"msapplication-TileColor\" content=\"#e1e1e1\">\n<meta name=\"theme-color\" content=\"#e1e1e1\">","compression":"false","overlapping_markups":["link[rel=\"apple-touch-icon\"]","meta[name=\"apple-mobile-web-app-title\"]","link[rel=\"shortcut\"]","link[rel=\"shortcut icon\"]","link[rel=\"icon\",sizes=\"16x16\"]","link[rel=\"icon\",sizes=\"32x32\"]","meta[name=\"msapplication-TileColor\"]","meta[name=\"application-name\"]","link[rel=\"manifest\"]","meta[name=\"theme-color\"]","link[rel=\"mask-icon\"]"]},"files_location":{"type":"path","path":"/"},"preview_picture_url":"https://realfavicongenerator.net/files/99cf5207dde3f7619c6fb5a9800c66ae90c92df3/favicon_preview.png","version":"0.16"} \ No newline at end of file diff --git a/faviconDescription.json b/faviconDescription.json new file mode 100644 index 0000000000000000000000000000000000000000..7b8af8907023b833beb81d16785aecf0409848d2 --- /dev/null +++ b/faviconDescription.json @@ -0,0 +1,64 @@ +{ + "masterPicture": "img/icon.svg", + "iconsPath": "/", + "design": { + "ios": { + "pictureAspect": "backgroundAndMargin", + "backgroundColor": "#e1e1e1", + "margin": "0%", + "assets": { + "ios6AndPriorIcons": false, + "ios7AndLaterIcons": false, + "precomposedIcons": false, + "declareOnlyDefaultIcon": true + }, + "appName": "Tailorbird" + }, + "desktopBrowser": { + "design": "raw" + }, + "windows": { + "pictureAspect": "noChange", + "backgroundColor": "#e1e1e1", + "onConflict": "override", + "assets": { + "windows80Ie10Tile": false, + "windows10Ie11EdgeTiles": { + "small": false, + "medium": true, + "big": false, + "rectangle": false + } + }, + "appName": "Tailorbird" + }, + "androidChrome": { + "pictureAspect": "noChange", + "themeColor": "#e1e1e1", + "manifest": { + "name": "Tailorbird", + "startUrl": "https://tailorbird3d.rwth-aachen.de/", + "display": "standalone", + "orientation": "notSet", + "onConflict": "override", + "declared": true + }, + "assets": { + "legacyIcon": false, + "lowResolutionIcons": false + } + }, + "safariPinnedTab": { + "pictureAspect": "blackAndWhite", + "threshold": 77.96875, + "themeColor": "#5a6b5d" + } + }, + "settings": { + "scalingAlgorithm": "Mitchell", + "errorOnImageTooSmall": false, + "readmeFile": false, + "htmlCodeFile": false, + "usePathAsIs": false + } +} diff --git a/img/logo-big.png b/img/logo-big.png deleted file mode 100644 index 35100594bc4c7ae493259a6c5eedf552abbef2f0..0000000000000000000000000000000000000000 Binary files a/img/logo-big.png and /dev/null differ diff --git a/img/logo-new.jpg b/img/logo-new.jpg deleted file mode 100644 index d929ff3c0504cd7d4227e5917a0fc8384ea73749..0000000000000000000000000000000000000000 Binary files a/img/logo-new.jpg and /dev/null differ diff --git a/img/logo.png b/img/logo.png deleted file mode 100644 index 60ec9ec1d14ce473f34b41e3a8f9c54a3d39869b..0000000000000000000000000000000000000000 Binary files a/img/logo.png and /dev/null differ diff --git a/index.html b/index.html index 64172c48d0f454018e866b309b7c8fd2aa30aefc..9b64b8e465a8bd056d64b78b4a168637c53bc04d 100644 --- a/index.html +++ b/index.html @@ -4,6 +4,21 @@ <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Tailorbird</title> + <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" /> + <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" /> + <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png" /> + <link rel="manifest" href="/site.webmanifest" /> + <link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5a6b5d" /> + <meta name="apple-mobile-web-app-title" content="Tailorbird" /> + <meta name="application-name" content="Tailorbird" /> + <meta name="msapplication-TileColor" content="#e1e1e1" /> + <meta name="theme-color" content="#e1e1e1" /> + <link rel="preconnect" href="https://fonts.googleapis.com" /> + <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> + <link + href="https://fonts.googleapis.com/css2?family=Roboto+Mono&display=swap" + rel="stylesheet" + /> </head> <body> <div id="app"></div> diff --git a/js/project.js b/js/project.js index 5edcd3f9be82e6e83a0fab68b75fc833f6ed895c..1badb1d0023e42fe40bbd97cf565b26794a7fec0 100644 --- a/js/project.js +++ b/js/project.js @@ -81,7 +81,7 @@ class Project { } // Vertical center line - new Zdog.Shape({ + /*new Zdog.Shape({ addTo: window.illoGridGroup, path: [ { @@ -97,7 +97,7 @@ class Project { ], stroke: 0.5, color: "#111111", - }); + });*/ } addLine(flow, speed, toX, toY, toZ) { @@ -175,7 +175,13 @@ class Project { } break; } - var newMove = new Move(prevCoords.e + flowStep * i, speed, newX, newY, newZ); + var newMove = new Move( + prevCoords.e + flowStep * i, + speed, + newX, + newY, + newZ + ); this.model.append(newMove); } } diff --git a/main.js b/main.js index 44d2fae8789ceb84541bcc81c233fff11cd3c7cb..5b73ee4c9a4b4b0916846c8c128b0fdcc2e6b4cb 100644 --- a/main.js +++ b/main.js @@ -1,6 +1,5 @@ import "normalize.css"; import "./css/main.css"; -import tailorbirdLogo from "./img/logo-new.jpg"; // Zdog import * as Zdog from "zdog"; @@ -16,7 +15,7 @@ var aboutText = ` `; if (import.meta.env.VITE_APP_BRANCH == "dev") { aboutText = ` - <i class="fa-solid fa-kiwi-bird fa-bounce"></i> TESTING</h1> + <i class="fa-solid fa-kiwi-bird fa-bounce"></i></h1> <p>Version: ${import.meta.env.VITE_APP_DATE} (${import.meta.env.VITE_APP_BRANCH} ${import.meta.env.VITE_APP_HASH})</p> @@ -26,46 +25,35 @@ if (import.meta.env.VITE_APP_BRANCH == "dev") { document.querySelector("#app").innerHTML = ` <main> <section id="viewer"> - <article id="viewer-main"> - <canvas class="zdog-canvas"></canvas> + <article id="viewer-settings-knob"> + <i class="fa-solid fa-bars"></i> </article> <article id="viewer-settings"> <menu> - <li> - <button id="zoomIntoViewButton"> + <!-- <li> + <button id="zoomIntoViewButton" class="buttonRightFlat"> <i class="fa-solid fa-magnifying-glass-plus"></i> </button> </li> <li> - <button id="zoomOutViewButton"> + <button id="zoomOutViewButton" class="buttonLeftFlat"> <i class="fa-solid fa-magnifying-glass-minus"></i> </button> - </li> + </li> --> <li> <button id="playViewButton"> <i class="fa-solid fa-play"></i> Simulate </button> </li> </menu> - <menu class="menu-impressum"> - <li> - <a href="#" id="helpLink">About</a> - </li> - <li> - <a href="mailto:yanagibashi@kg.rwth-aachen.de">Contact</a> - </li> - <li> - <a href="https://www.kg.rwth-aachen.de/cms/KG/Footer/Service/~vcyq/Impressum/">Impressum</a> - </li> - </menu> <menu class="menu-right"> <li> - <button id="saveProjectMenuButton"> + <button id="saveProjectMenuButton" class="buttonRightFlat"> <i class="fa-solid fa-floppy-disk"></i> Save </button> </li> <li> - <button id="loadProjectMenuButton"> + <button id="loadProjectMenuButton" class="buttonLeftFlat"> <i class="fa-solid fa-folder-open"></i> Load </button> </li> @@ -81,19 +69,21 @@ document.querySelector("#app").innerHTML = ` </li> </menu> </article> + <article id="viewer-main"> + <canvas class="zdog-canvas"></canvas> + </article> </section> <section id="tools"> - <img id="tailorbirdLogo" src="${tailorbirdLogo}" /> <article id="tools-edit"> <menu> <li> <button id="addLineEditButton"> - <i class="fa-solid fa-lines-leaning"></i> Add line + <i class="fa-solid fa-lines-leaning"></i> New line </button> </li> <li> <button id="addArcEditButton"> - <i class="fa-solid fa-bezier-curve"></i> Add arc + <i class="fa-solid fa-bezier-curve"></i> New arc </button> </li> </menu> @@ -114,12 +104,18 @@ document.querySelector("#app").innerHTML = ` </button> </li> </menu> + <menu class="menu-impressum"> + <li> + <a href="#" id="helpLink">About Tailorbird</a> + </li> + </menu> </article> </section> </main> <!-- Dialogs --> <dialog id="helpDialog"> + <img src="./icon.svg" width="75" height="75" id="helpLogo"> <h1>Tailorbird 3D ${aboutText} <h2><i class="fa-solid fa-keyboard"></i> Controls</h2> <p> @@ -131,11 +127,22 @@ document.querySelector("#app").innerHTML = ` <li><i class="fa-solid fa-share fa-rotate-90"></i> <span class="helpControlText">Jump to: O</span></li> </ul> </p> + <h2><i class="fa-solid fa-address-card"></i></i> Help</h2> + <p> + <ul> + <li> + <a href="mailto:yanagibashi@kg.rwth-aachen.de"><i class="fa-solid fa-envelope"></i> <span class="helpControlText">Contact</span></a> + </li> + <li> + <a href="https://www.kg.rwth-aachen.de/cms/KG/Footer/Service/~vcyq/Impressum/"><i class="fa-solid fa-circle-info"></i> <span class="helpControlText">Impressum</span></a> + </li> + </ul> + </p> <form method="dialog"> <menu> - <button value="example1">Load example 1</button> - <button value="example2">Load example 2</button> - <button value="cancel">Close</button> + <li><button value="example1">Load example 1</button></li> + <li><button value="example2">Load example 2</button></li> + <li><button value="cancel">Close</button></li> </menu> </form> </dialog> @@ -176,7 +183,7 @@ document.querySelector("#app").innerHTML = ` <!-- Dialogs Edit menu --> <dialog id="addLineDialog"> <form method="dialog" id="addLineForm"> - <h3>Add line</h3> + <h3>New line</h3> <fieldset> <legend>Position</legend> <input @@ -239,7 +246,7 @@ document.querySelector("#app").innerHTML = ` <dialog id="addArcDialog"> <form method="dialog" id="addArcForm"> - <h3>Add arc</h3> + <h3>New arc</h3> <fieldset> <legend>Properties</legend> Size: <input type="text" id="addArcInputSize" /><br /> @@ -786,6 +793,24 @@ function initEditEventListeners() { function initViewEventListeners() { document + .getElementById("viewer-settings") + .addEventListener("click", function (e) { + if (e.eventPhase !== 2) return; /* make sure not triggered by bubbling */ + if (e.offsetX > 50) return; /* only react for clicks on logo */ + // Hide viewer settings + this.style.visibility = "hidden"; + this.style.opacity = "0"; + document.getElementById("viewer-settings-knob").style.display = "block"; + }); + document + .getElementById("viewer-settings-knob") + .addEventListener("click", function (e) { + // Hide viewer settings + document.getElementById("viewer-settings").style.visibility = "visible"; + document.getElementById("viewer-settings").style.opacity = "1"; + this.style.display = "none"; + }); + /*document .getElementById("zoomIntoViewButton") .addEventListener("click", function (e) { // Zoom into @@ -796,7 +821,7 @@ function initViewEventListeners() { .addEventListener("click", function (e) { // Zoom out window.illo.scale.multiply(1 / 1.1); - }); + });*/ document .getElementById("playViewButton") .addEventListener("click", function (e) { diff --git a/package-lock.json b/package-lock.json index c439eecf49bad3a3f9a2aa5e22e25e1efa69b470..c9526f393538a6626c025e876a08e0dd057da438 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,8 @@ "zdog": "^1.1.3" }, "devDependencies": { - "vite": "^4.0.0" + "vite": "^4.0.0", + "vite-plugin-webfont-dl": "^3.7.4" } }, "node_modules/@esbuild/android-arm": { @@ -384,6 +385,78 @@ "resolved": "https://registry.npmjs.org/ajon/-/ajon-2.1.4.tgz", "integrity": "sha512-1ps1cw66hwwm3K9OkF+7T6nZX9V3KKAgpzKqqlRXW7G7mheBYjW8eea0T3kc9rleyqcilcvpJwhNwTMkCqN8CA==" }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/axios": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", + "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/clean-css": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", + "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/esbuild": { "version": "0.17.18", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.18.tgz", @@ -421,6 +494,65 @@ "@esbuild/win32-x64": "0.17.18" } }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", @@ -435,6 +567,75 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "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/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/nanoid": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", @@ -458,6 +659,24 @@ "resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-8.0.1.tgz", "integrity": "sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==" }, + "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/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -492,6 +711,12 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, "node_modules/rhaboo": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/rhaboo/-/rhaboo-3.2.2.tgz", @@ -500,10 +725,25 @@ "ajon": "^2.0.0" } }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/rollup": { - "version": "3.21.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.21.3.tgz", - "integrity": "sha512-VnPfEG51nIv2xPLnZaekkuN06q9ZbnyDcLkaBdJa/W7UddyhOfMP2yOPziYQfeY7k++fZM8FdQIummFN5y14kA==", + "version": "3.21.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.21.5.tgz", + "integrity": "sha512-a4NTKS4u9PusbUJcfF4IMxuqjFzjm6ifj76P54a7cKnvVzJaG12BLVR+hgU2YDGHzyMMQNxLAZWuALsn8q2oQg==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -516,6 +756,15 @@ "fsevents": "~2.3.2" } }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", @@ -526,9 +775,9 @@ } }, "node_modules/vite": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.4.tgz", - "integrity": "sha512-f90aqGBoxSFxWph2b39ae2uHAxm5jFBBdnfueNxZAT1FTpM13ccFQExCaKbR2xFW5atowjleRniQ7onjJ22QEg==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.5.tgz", + "integrity": "sha512-0gEnL9wiRFxgz40o/i/eTBwm+NEbpUeTWhzKrZDSdKm6nplj+z4lKz8ANDgildxHm47Vg8EUia0aicKbawUVVA==", "dev": true, "dependencies": { "esbuild": "^0.17.5", @@ -573,6 +822,27 @@ } } }, + "node_modules/vite-plugin-webfont-dl": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/vite-plugin-webfont-dl/-/vite-plugin-webfont-dl-3.7.4.tgz", + "integrity": "sha512-cCvP4aMHevcug0KAPd8v0ll8eA7NqWOI7SQ/qKTshpb4Di18zsdo2Z/ECgZSrVd9UpJhCFVso52WgO+zM0sQeQ==", + "dev": true, + "dependencies": { + "axios": "^1.2", + "clean-css": "^5.3", + "flat-cache": "^3.0", + "picocolors": "^1.0" + }, + "peerDependencies": { + "vite": "^2 || ^3 || ^4" + } + }, + "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/zdog": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/zdog/-/zdog-1.1.3.tgz", diff --git a/package.json b/package.json index 8776bb8fb20360746751c34ee58b8a6a62a47aae..ad288a990ddc7c8eda81cffd8f2011abb9e219ba 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "zdog": "^1.1.3" }, "devDependencies": { - "vite": "^4.0.0" + "vite": "^4.0.0", + "vite-plugin-webfont-dl": "^3.7.4" } } diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..d7d67ddbbac034298537356fec27f49549181ca6 Binary files /dev/null and b/public/android-chrome-192x192.png differ diff --git a/public/android-chrome-512x512.png b/public/android-chrome-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..071f36d7f5e03cb0bff9a257e0e6bf8df3a149af Binary files /dev/null and b/public/android-chrome-512x512.png differ diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1e61eb47acff4f7d46bba03d937d6b4e9a35e541 Binary files /dev/null and b/public/apple-touch-icon.png differ diff --git a/public/browserconfig.xml b/public/browserconfig.xml new file mode 100644 index 0000000000000000000000000000000000000000..c465f9cbce87fcce7890d667a88bcb7233a24271 --- /dev/null +++ b/public/browserconfig.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8"?> +<browserconfig> + <msapplication> + <tile> + <square150x150logo src="/mstile-150x150.png"/> + <TileColor>#e1e1e1</TileColor> + </tile> + </msapplication> +</browserconfig> diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..c1abebfc289500006b15e7b37e0e86f0b210461a Binary files /dev/null and b/public/favicon-16x16.png differ diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..a7ba8336c7cec0cd0d3ccccee34340157ab53dc3 Binary files /dev/null and b/public/favicon-32x32.png differ diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..16e5516378ad474607897b8a9615c14c30801a97 Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/icon.svg b/public/icon.svg new file mode 100644 index 0000000000000000000000000000000000000000..b7e5c1ad20ddff042b29dfb9df138c7b0ef9a38e --- /dev/null +++ b/public/icon.svg @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg id="b" data-name="FAVICON HELL" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500 500"> + <defs> + <style> + .g { + fill: #e1e1e1; + } + + .h { + fill: #474747; + } + + .i { + fill: #5a6b5d; + } + + .j { + fill: none; + stroke: #5a6b5d; + stroke-linecap: round; + stroke-miterlimit: 10; + stroke-width: 19px; + } + </style> + </defs> + <circle class="g" cx="250" cy="250" r="250"/> + <path class="h" d="m319.17,217.96c-.31-8.89-.77-17.68-2.36-26.24-1.55-8.59-4.12-16.93-7.14-25.12-5.96-16.14-13.76-32.01-24.68-45.3-8.1-10-17.94-18.14-28.55-25.43-1.99-1.32-6.16-4.34-8.06-5.56-11.59-7.25-24.73-13.04-37.59-18.11-4.87-1.78-9.69-3.73-14.39-4.51,0,0-.05,0,.03.01.07,0,.06,0,.27.02,1.91-.08,3.28-.61,5.09-2.18,2.49-2.2,3.37-6.56,1.93-9.32-.03-.06-.06-.12-.09-.18-.1-.16-.04-.1-.07-.14-.02-.04,0-.02.03.02,1.55,1.9,10.22,10.04,12.12,11.95,3.03,2.94,6.19,6.27,9.07,9.4,3.82,4.32,6.8,8.94,9.35,13.61,1.87,3.54,3.6,7.02,4.84,11.04.72,2.56,1.34,5.56.43,8.63-1.65,6.05-8.07,9.2-13.83,7.78-4.88-1.16-9.36-3.72-13.72-5.73-15.58-7.46-30.72-14.94-47.23-19.68-13.15-3.54-26.85-5.68-40.07-3.14-2.11.5-3.93.96-5.39,1.93-.03.02-.07.04-.02.03.14-.08.28-.18.39-.31.16-.13.31-.3.44-.46.79-1.39-1.63,2.93,1.79-3.16,2.66-6.03-.86-12.87-2.56-14.06-2.01-2.03-2.54-2.17-4-2.95-.3-.13-.35-.16-.54-.23l-.35-.14c-.08-.03.04,0,.17.03,0,0,2.75.58,2.75.58,11.3,2.25,23.01,5.26,34,9.08,2.59.85,5.56,2.1,7.9,3.31,9.5,5.04,23.05,12.71,27.75,22.81,4.22,9,.23,18.77-7.83,23.91-3.44,2.23-7.49,3.54-11.45,4.24-10.41,1.69-21.1.77-31.21,1.47-7.64.43-14.45,1.58-21.46,4.05-16.05,5.23-33.11,17.51-37.55,33.15-.51-3.75-3.25-7.07-6.47-9.12-2.88-1.81-6.48-2.85-9.84-2.26,0,0,.2-.04.2-.04.2-.03.91-.18,1.16-.23,12.19-2.88,24.61-3.88,37.03-3.63,7.24.28,13.77.55,21.15,2.65,9.51,2.67,16.11,11.37,13.56,21.41-1.35,5.27-5.4,9.44-10.06,11.57-6.15,2.71-11.76,3.72-17.77,5.78-11.61,3.69-22.59,8.61-32.82,15.25-7.16,4.68-14.79,10.26-20.14,16.56-.04-.03-.05-.06.02-.66.03-.4.03-.88-.02-1.3-.25-3.3-3.19-6.57-6.29-7.08-.27-.02-.13.02-.14.04l.37.1c2.34.4,4.72.44,7.34.56,6.54.14,13.25.33,19.84.31,1.68.04,3.85.02,5.69.26,6.13.52,9.09,7.25,4.86,11.75-1.74,1.84-4.1,3-6.18,4.12-8.14,4.13-16.03,7.78-24.08,11.92-.87.44-1.94.09-2.38-.79-.35-.71-.19-1.54.35-2.07,3.25-3.14,6.66-6.11,10.06-9.09,4.39-3.94,9.33-7.32,13.26-11.5,0,0,.06-.12.06-.12.02-.04-.04-.01-.05-.01-.03.01-.16.14-.21.22-1.32,1.59-.9,4.97.81,6.43.7.73,1.67,1.18,2.49,1.42,0,0-.1.04-.1.04-.01,0-.11.03-.2.04-10.08,1.95-20.04,4.18-30.42,5.12-1.92.12-3.76.21-5.76-.22-5.42-1.03-9.16-6.46-8.78-11.98.7-9.1,8.61-17.61,14.15-23.77,10.05-10.67,21.74-19.68,34.59-26.74,6.35-3.53,12.96-6.52,19.62-9.2,2.59-1.1,5.67-2.16,7.72-3.32-.65.17-1.65.99-2.29,1.57-7.34,6.7-5.41,19.79,3.82,23.82.75.3-.08.09-.89.06-7.26-.45-15.34.22-22.67,1.13-6.29.81-12.08,2.23-18.07,3.9-7.63,2.17-15.57,1.12-21.4-4.65-8.42-8.19-8.05-21.8-4.67-31.92,9.1-27.81,35.34-46.75,62.59-53.8,16.26-4.74,34.06-3.59,49.66-2.62,2.73.11,4.67.17,6.98,0,.26,0,.25-.03.37-.01.01,0-.04.02-.05.04-.03.06-.12.06-.18.1-5.43,2.97-7.31,11.27-4.15,16.57.07.08.26.4.33.42-.04-.22-.5-.65-.97-1.17-4.28-4.13-10.07-8.17-15.4-10.85-6.33-2.66-12.95-4.98-19.56-6.99-5.71-1.78-11.47-2.97-17.49-4.74-.65-.2-1.37-.5-2.06-.81-1.74-.88-2.5-1.19-4.7-3.39-1.79-1.29-5.38-8.27-2.66-14.43,3.48-6.22,1.17-1.98,2.04-3.49,0,0,.37-.44.37-.44.88-1.05,1.95-2.09,3.01-2.96,7.36-5.77,16.98-7.46,25.83-7.99,21.19-.93,41.71,4.75,60.72,13.22,14.36,6.3,28.03,14.51,41.76,21.59,0,0,.11.05.11.05.04.02-.03,0-.04,0,0,0-.04,0-.04,0l-.19-.04c-2.17-.41-4.84.15-6.76,1.45-.81.48-2.42,1.9-3.12,3.2-.96,1.54-1.35,3.12-1.41,4.59,0,.75.05.93.07,1.04.05.19,0-.1-.05-.34-1.7-6.03-5.21-12.7-8.91-17.52-.88-1.11-2.63-3.14-3.56-4.24-2.79-3.32-10.34-11.33-13.38-14.64-1.83-2.05-3.89-4.28-5.22-6.91-2.92-5.45-.14-12.47,6-13.97,3.43-.95,7.22.2,10.3,1.16,9.2,3.17,17.1,7.08,25.57,11.34,9.62,5.01,19.43,10.36,28.3,17.09,5.62,4.51,11.78,9.09,17.13,14.01,21.03,18.28,34.09,43.98,41.67,70.39,2.5,8.71,4.55,17.62,5.49,26.66,1,9.07.8,18.13.46,27.02-.22,2.21-3.32,2.25-3.5,0h0Z"/> + <rect class="h" x="102.69" y="216.05" width="56.96" height="97.77" rx="21.81" ry="21.81"/> + <path class="h" d="m300.7,314.35c-7.61-11.47-18.81-20.47-33.61-26.99,11.54-6.24,20.27-14.19,26.17-23.83,5.91-9.64,8.86-20.84,8.86-33.61,0-24.17-8.63-43.39-25.87-57.64-10.8-8.93-23.94-15.06-39.42-18.39-15.24-3.28-29.57,8.53-29.57,24.12h0c0,9.94,6.02,18.81,15.16,22.72,3.73,1.6,7.04,3.76,9.94,6.49,6.99,6.59,10.49,15.51,10.49,26.79,0,13.58-4.11,23.66-12.32,30.25-8.22,6.59-16.01,9.88-32.84,9.88h-5.69c-.2,0-.4-.03-.6-.03-11.14,0-20.17,9.03-20.17,20.17s9.02,20.16,20.15,20.17v.02h6.72c19.69,0,29.45,3.53,38.75,10.59,9.3,7.06,13.95,18,13.95,32.79s-4.01,25.77-12.02,33.3c-8.01,7.54-19.83,11.3-35.44,11.3-14.26,0-25.19-4.24-32.79-12.73-7.58-8.46-11.38-20.53-11.4-36.21,0-.06,0-.11,0-.17,0-15.58-12.63-28.21-28.21-28.21s-28.21,12.63-28.21,28.21c0,0,0,.01,0,.02h0v.81c0,30.83,8.89,54.59,26.68,71.29,17.79,16.7,42.98,25.05,75.57,25.05s58.93-8.55,78.22-25.66c19.28-17.11,28.92-40.26,28.92-69.46,0-15.89-3.8-29.57-11.41-41.04Z"/> + <path class="h" d="m274.81,265.55c4.94,7.52,17.1,4.68,36.73,7.35.73.1,16.03,3.75,32.4,8.6,31.53,9.35,60.64,26.34,63.09,26.54.25.02.41-.02.48-.12,1.09-1.54-21.48-17.63-24.3-19.64-29.79-21.24-95.78-53.25-108.35-37.77-3.28,4.04-2.69,11.03-.05,15.04Z"/> + <g> + <path class="j" d="m448.33,351.41c-11.12,0-24.2,0-35.41,0-49.29,0-89.3,39.62-89.98,88.75"/> + <path class="j" d="m435.72,373.6c-6.26,0-15.9,0-22.8,0-36.91,0-66.86,29.74-67.23,66.56"/> + <path class="j" d="m418.2,395.78c-1.68,0-3.72,0-5.28,0-23.94,0-44.7,19.21-44.7,44.38"/> + <path class="i" d="m399.19,216.92c-13.82,7.74-23.44,20.86-31.19,34.29-6.86,12.31-14.34,27.89-9.58,41.77,11.66,29.3,49.64,27.85,76.29,26.89,5.25-.25,9.7,3.8,9.95,9.05.3,5.57-4.41,10.25-9.97,9.95-24.31-1.54-52.83-3.28-71.83-20.64-6.56-6.12-11.84-13.81-13.83-22.68-3.01-12.89,1.69-26,8.26-36.82,10.32-16.83,23.48-33.64,41.9-41.81h0Z"/> + </g> + <path class="h" d="m287.59,226c18.67-9.54,41.95.8,65.19,11.12,2.49,1.11,9.89,4.58,20.57,10.59,40.14,22.58,56.27,42.63,55.53,43.47-.49.56-12-5.31-36.96-17.63-14.07-6.95-33.12-14.55-55.46-18.95-38.57-7.6-62.11,1.31-65.35-7.32-2.28-6.05,7.05-16.47,16.47-21.28Z"/> +</svg> \ No newline at end of file diff --git a/public/mstile-144x144.png b/public/mstile-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..9e19ddce816abc73df0dc97bdf9e97eccfc230f0 Binary files /dev/null and b/public/mstile-144x144.png differ diff --git a/public/mstile-150x150.png b/public/mstile-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..6b7d269591e2bd0a9d5910205a9766ab244fffd7 Binary files /dev/null and b/public/mstile-150x150.png differ diff --git a/public/mstile-310x150.png b/public/mstile-310x150.png new file mode 100644 index 0000000000000000000000000000000000000000..6625b450c287501b0b4c5c7abb8688100084cb56 Binary files /dev/null and b/public/mstile-310x150.png differ diff --git a/public/mstile-310x310.png b/public/mstile-310x310.png new file mode 100644 index 0000000000000000000000000000000000000000..125382f0a9c49fc6d944ad78bc571b42c069180b Binary files /dev/null and b/public/mstile-310x310.png differ diff --git a/public/mstile-70x70.png b/public/mstile-70x70.png new file mode 100644 index 0000000000000000000000000000000000000000..f33ec8589cdaac202db17e55bdfff0be37103d8f Binary files /dev/null and b/public/mstile-70x70.png differ diff --git a/public/safari-pinned-tab.svg b/public/safari-pinned-tab.svg new file mode 100644 index 0000000000000000000000000000000000000000..ff1c63ecca700d56c922f1a2c6eb90fe03863150 --- /dev/null +++ b/public/safari-pinned-tab.svg @@ -0,0 +1,67 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" + "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> +<svg version="1.0" xmlns="http://www.w3.org/2000/svg" + width="700.000000pt" height="700.000000pt" viewBox="0 0 700.000000 700.000000" + preserveAspectRatio="xMidYMid meet"> +<metadata> +Created by potrace 1.14, written by Peter Selinger 2001-2017 +</metadata> +<g transform="translate(0.000000,700.000000) scale(0.100000,-0.100000)" +fill="#000000" stroke="none"> +<path d="M2672 6280 c-35 -22 -62 -72 -62 -117 0 -47 37 -105 135 -211 52 -56 +95 -104 95 -106 0 -3 -60 24 -132 59 -223 106 -436 174 -637 204 -106 16 -342 +14 -425 -4 -85 -18 -180 -61 -230 -105 -98 -87 -106 -226 -16 -302 44 -38 61 +-45 230 -89 119 -32 123 -34 85 -40 -390 -67 -611 -169 -830 -380 -279 -270 +-380 -609 -245 -822 25 -40 91 -94 134 -110 6 -3 -23 -40 -65 -83 -151 -156 +-225 -270 -235 -362 -7 -59 25 -126 76 -161 33 -22 41 -23 145 -17 61 4 125 9 +144 13 32 5 32 4 -35 -58 -70 -64 -87 -95 -61 -105 22 -8 417 191 450 226 37 +42 37 89 -2 132 l-29 33 -144 5 -143 5 65 46 c181 129 340 208 565 280 276 88 +303 102 352 186 35 59 39 156 10 214 -64 130 -202 179 -501 179 l-151 1 58 54 +c69 66 182 134 292 176 136 53 235 68 510 79 268 10 330 20 418 68 54 29 108 +89 132 145 31 75 11 201 -42 259 -9 10 -14 20 -11 23 6 6 62 -18 338 -148 184 +-86 224 -102 275 -105 45 -2 69 1 95 16 45 24 80 85 80 138 0 70 -52 197 -129 +314 -20 30 -40 61 -44 68 -16 25 233 -108 346 -184 396 -270 597 -518 770 +-954 99 -248 144 -441 154 -663 6 -133 16 -163 47 -151 17 7 18 20 13 233 -5 +246 -21 349 -88 566 -133 436 -324 747 -613 994 -235 201 -391 302 -687 445 +-278 134 -383 161 -457 116z"/> +<path d="M3181 4849 c-107 -21 -195 -88 -243 -187 -30 -61 -33 -75 -33 -157 0 +-74 5 -99 24 -137 37 -77 92 -130 182 -178 202 -109 280 -239 282 -465 1 -235 +-82 -388 -261 -483 -101 -54 -143 -63 -339 -71 -169 -8 -186 -10 -237 -35 +-102 -50 -159 -142 -159 -258 0 -116 64 -213 172 -261 36 -16 79 -21 240 -28 +255 -11 326 -28 457 -110 116 -73 190 -179 225 -319 20 -79 17 -288 -4 -370 +-77 -292 -313 -436 -686 -418 -257 13 -433 133 -516 351 -30 82 -44 157 -55 +311 -7 108 -13 133 -39 189 -37 78 -118 157 -198 195 -51 23 -71 27 -158 27 +-88 0 -107 -3 -157 -27 -77 -36 -121 -70 -164 -129 -60 -82 -75 -143 -75 -292 +3 -448 165 -808 470 -1037 230 -174 574 -270 958 -270 502 1 893 145 1169 431 +130 135 214 276 272 459 76 238 83 576 15 785 -79 245 -250 443 -496 571 l-78 +41 79 51 c44 28 108 79 143 113 l63 61 116 -7 c63 -4 144 -11 180 -16 60 -8 +308 -71 470 -119 l70 -21 0 -57 c1 -137 63 -282 170 -396 176 -186 423 -281 +825 -316 256 -22 248 -21 284 -3 70 36 97 111 65 178 -33 70 -44 72 -337 78 +-280 5 -382 17 -510 62 -150 52 -262 145 -321 267 -38 79 -54 138 -38 138 21 +0 322 -130 497 -214 99 -48 186 -85 194 -84 37 7 -312 271 -541 409 l-136 82 +26 73 c14 41 31 74 38 74 35 0 261 -98 554 -240 179 -86 336 -160 348 -165 21 +-6 22 -5 14 12 -59 110 -385 368 -704 558 -54 31 -98 60 -98 62 0 3 24 40 54 +82 72 102 170 206 244 261 34 24 60 46 58 48 -6 5 -104 -56 -166 -104 -53 -40 +-166 -154 -223 -223 l-28 -34 -137 66 c-330 157 -571 237 -716 237 -54 0 -55 +0 -60 33 -21 128 -29 163 -50 224 -116 340 -404 586 -807 687 -109 28 -120 29 +-188 15z m1416 -1399 c112 -16 361 -72 383 -85 4 -2 -7 -33 -24 -68 l-31 -64 +-120 60 c-66 33 -183 86 -260 118 -158 66 -153 70 52 39z"/> +<path d="M1660 3967 c-94 -26 -177 -107 -212 -206 -10 -27 -13 -144 -13 -476 +l0 -440 26 -56 c34 -71 87 -125 158 -157 49 -23 72 -27 186 -30 206 -7 305 30 +381 141 52 75 55 111 52 579 l-3 423 -28 57 c-32 65 -90 121 -156 151 -39 18 +-69 22 -196 24 -99 2 -165 -2 -195 -10z"/> +<path d="M5649 2209 c-194 -17 -419 -92 -592 -196 -385 -232 -647 -663 -664 +-1093 -4 -112 -2 -128 15 -156 39 -61 127 -79 188 -39 44 29 56 59 65 172 23 +285 136 530 336 724 132 128 262 209 430 265 138 47 204 53 538 54 172 0 326 +5 346 10 19 5 48 24 65 41 25 26 29 38 29 89 0 51 -4 63 -29 89 -17 17 -46 36 +-65 41 -43 12 -525 11 -662 -1z"/> +<path d="M5685 1900 c-256 -22 -490 -134 -672 -321 -91 -94 -138 -161 -198 +-284 -62 -125 -90 -227 -105 -368 -9 -89 -8 -103 9 -142 33 -75 113 -104 181 +-67 53 29 70 67 81 184 33 347 275 627 614 709 66 16 118 19 300 19 194 0 225 +3 262 19 97 44 102 181 9 237 -27 17 -54 19 -211 20 -99 1 -220 -2 -270 -6z"/> +<path d="M5595 1570 c-286 -75 -501 -300 -559 -582 -33 -158 -14 -232 67 -272 +50 -24 98 -15 144 27 32 30 35 39 43 109 18 154 52 232 144 324 100 99 209 +144 355 144 100 0 143 17 178 69 41 61 23 143 -40 181 -44 27 -230 27 -332 0z"/> +</g> +</svg> diff --git a/public/site.webmanifest b/public/site.webmanifest new file mode 100644 index 0000000000000000000000000000000000000000..2024d5566cb56a351740650ce0736e2001366b4e --- /dev/null +++ b/public/site.webmanifest @@ -0,0 +1,20 @@ +{ + "name": "Tailorbird", + "short_name": "Tailorbird", + "icons": [ + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#e1e1e1", + "background_color": "#e1e1e1", + "start_url": "https://tailorbird3d.rwth-aachen.de/", + "display": "standalone" +} diff --git a/vite.config.js b/vite.config.js index 431d05d09a376068f129faee8109233134d7c4ad..a31b1655b8a6a77d57a84e36e7c114a270397d28 100644 --- a/vite.config.js +++ b/vite.config.js @@ -1,14 +1,24 @@ -import { defineConfig } from 'vite' +import { defineConfig } from "vite"; import * as child from "child_process"; +import webfontDownload from "vite-plugin-webfont-dl"; -const commitDate = new Date(child.execSync('git log -1 --format=%cI').toString().trimEnd()).toDateString(); -const branchName = child.execSync('git rev-parse --abbrev-ref HEAD').toString().trimEnd(); -const commitHash = child.execSync('git rev-parse --short HEAD').toString().trimEnd(); +const commitDate = new Date( + child.execSync("git log -1 --format=%cI").toString().trimEnd() +).toDateString(); +const branchName = child + .execSync("git rev-parse --abbrev-ref HEAD") + .toString() + .trimEnd(); +const commitHash = child + .execSync("git rev-parse --short HEAD") + .toString() + .trimEnd(); export default defineConfig({ - define: { - 'import.meta.env.VITE_APP_DATE': JSON.stringify(commitDate), - 'import.meta.env.VITE_APP_BRANCH': JSON.stringify(branchName), - 'import.meta.env.VITE_APP_HASH': JSON.stringify(commitHash), - } -}); \ No newline at end of file + define: { + "import.meta.env.VITE_APP_DATE": JSON.stringify(commitDate), + "import.meta.env.VITE_APP_BRANCH": JSON.stringify(branchName), + "import.meta.env.VITE_APP_HASH": JSON.stringify(commitHash), + }, + plugins: [webfontDownload()], +});