From 4104094f96f60974682a0ed93dabfcb718c540bd Mon Sep 17 00:00:00 2001 From: Zoe <62722391+juls0730@users.noreply.github.com> Date: Thu, 2 Oct 2025 00:16:53 -0500 Subject: [PATCH] V0.3.2: Improved admin UI and performance galore This commit fixes a plethora of bugs related to the admin UI, as well as dramatically improving the performance of in-place editing. Furthermore, several server bugs and misc bugs have been fixed. The admin UI is now entirely client side when adding, deleting, or editng a category or link. Other internal improvements hasve also been made. --- .prettierrc | 19 + IDEAS.md | 6 + README.md | 18 +- bun.lock | 512 ++++++++ go.mod | 3 + go.sum | 8 + package.json | 17 + postcss.config.js | 16 + src/assets/fonts/InstrumentSans-Regular.woff2 | Bin 0 -> 14648 bytes ...mentSans-VariableFont_wdth,wght-subset.ttf | Bin 0 -> 46788 bytes ...ntSans-VariableFont_wdth,wght-subset.woff2 | Bin 0 -> 18360 bytes .../InstrumentSans-VariableFont_wdth,wght.ttf | Bin 0 -> 193696 bytes src/assets/foo.css | 2 + src/main.go | 93 +- src/scripts/admin.js | 1106 +++++++++++++++++ src/styles/adminUi.css | 70 ++ src/styles/main.css | 348 ++++++ src/styles/main.scss | 159 --- src/templates/layouts/admin.hbs | 20 + src/templates/layouts/main.hbs | 23 +- src/templates/views/admin/index.hbs | 968 +-------------- src/templates/views/index.hbs | 83 +- zqdgr.config.json | 15 +- 23 files changed, 2310 insertions(+), 1176 deletions(-) create mode 100644 .prettierrc create mode 100644 IDEAS.md create mode 100644 bun.lock create mode 100644 package.json create mode 100644 postcss.config.js create mode 100644 src/assets/fonts/InstrumentSans-Regular.woff2 create mode 100644 src/assets/fonts/InstrumentSans-VariableFont_wdth,wght-subset.ttf create mode 100644 src/assets/fonts/InstrumentSans-VariableFont_wdth,wght-subset.woff2 create mode 100644 src/assets/fonts/InstrumentSans-VariableFont_wdth,wght.ttf create mode 100644 src/assets/foo.css create mode 100644 src/scripts/admin.js create mode 100644 src/styles/adminUi.css create mode 100644 src/styles/main.css delete mode 100644 src/styles/main.scss create mode 100644 src/templates/layouts/admin.hbs diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..88dec24 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,19 @@ +{ + "tabWidth": 4, + "useTabs": false, + "singleQuote": false, + "semi": true, + "trailingComma": "es5", + "bracketSpacing": true, + "bracketSameLine": false, + "arrowParens": "always", + "endOfLine": "lf", + "printWidth": 80, + "proseWrap": "preserve", + "quoteProps": "as-needed", + "requirePragma": false, + "embeddedLanguageFormatting": "auto", + "vueIndentScriptAndStyle": false, + "htmlWhitespaceSensitivity": "css", + "insertPragma": false +} \ No newline at end of file diff --git a/IDEAS.md b/IDEAS.md new file mode 100644 index 0000000..822a351 --- /dev/null +++ b/IDEAS.md @@ -0,0 +1,6 @@ +# random things I kinda wanna do + +- Quick links (eg tiny buttons on the bottom right of the main section) +- add the ability to change cards links + +TODO: fixup readme diff --git a/README.md b/README.md index 128c949..39946e3 100644 --- a/README.md +++ b/README.md @@ -10,16 +10,16 @@ Passport is a simple, fast, and lightweight web dashboard/new tab replacement. ### Prerequisites -- [ZQDGR](https://github.com/juls0730/zqdgr) -- [Go](https://go.dev/doc/install) -- [sqlite3](https://www.sqlite.org/download.html) -- [TailwdinCSS CLI](https://github.com/tailwindlabs/tailwindcss/releases/latest) +- [ZQDGR](https://github.com/juls0730/zqdgr) +- [Go](https://go.dev/doc/install) +- [sqlite3](https://www.sqlite.org/download.html) +- [TailwdinCSS CLI](https://github.com/tailwindlabs/tailwindcss/releases/latest) ## Usage ### Docker -Passport is available as a Docker image via this repository. This is the recommended way to run Passport. +Passport is available as a Docker image via this repository for both amd64 and arm64. This is the recommended way to run Passport. ```bash docker run -d --name passport -p 3000:3000 -v passport_data:/data -e PASSPORT_ADMIN_USERNAME=admin -e PASSPORT_ADMIN_PASSWORD=password ghcr.io/juls0730/passport:latest @@ -35,9 +35,11 @@ If you want to build from source, you will need to install the dependencies firs # note entirely necessary, but strongly recommended go install github.com/juls0730/zqdgr@latest -curl -sLO https://github.com/tailwindlabs/tailwindcss/releases/download/v4.1.13/tailwindcss-linux-x64 -chmod +x tailwindcss-linux-x64 -mv tailwindcss-linux-x64 /usr/local/bin/tailwindcss +# install bun +curl -fsSL https://bun.sh/install | bash + +# install css build deps +bun install # you may also have to install sqlite3... ``` diff --git a/bun.lock b/bun.lock new file mode 100644 index 0000000..e620136 --- /dev/null +++ b/bun.lock @@ -0,0 +1,512 @@ +{ + "lockfileVersion": 1, + "workspaces": { + "": { + "name": "passport-css-compiler", + "devDependencies": { + "@fullhuman/postcss-purgecss": "^7.0.2", + "cssnano": "^7.1.1", + "postcss": "^8.4.35", + "postcss-cli": "^11.0.0", + "postcss-preset-env": "^10.4.0", + }, + }, + }, + "packages": { + "@csstools/cascade-layer-name-parser": ["@csstools/cascade-layer-name-parser@2.0.5", "", { "peerDependencies": { "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4" } }, "sha512-p1ko5eHgV+MgXFVa4STPKpvPxr6ReS8oS2jzTukjR74i5zJNyWO1ZM1m8YKBXnzDKWfBN1ztLYlHxbVemDD88A=="], + + "@csstools/color-helpers": ["@csstools/color-helpers@5.1.0", "", {}, "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA=="], + + "@csstools/css-calc": ["@csstools/css-calc@2.1.4", "", { "peerDependencies": { "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4" } }, "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ=="], + + "@csstools/css-color-parser": ["@csstools/css-color-parser@3.1.0", "", { "dependencies": { "@csstools/color-helpers": "^5.1.0", "@csstools/css-calc": "^2.1.4" }, "peerDependencies": { "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4" } }, "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA=="], + + "@csstools/css-parser-algorithms": ["@csstools/css-parser-algorithms@3.0.5", "", { "peerDependencies": { "@csstools/css-tokenizer": "^3.0.4" } }, "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ=="], + + "@csstools/css-tokenizer": ["@csstools/css-tokenizer@3.0.4", "", {}, "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw=="], + + "@csstools/media-query-list-parser": ["@csstools/media-query-list-parser@4.0.3", "", { "peerDependencies": { "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4" } }, "sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ=="], + + "@csstools/postcss-alpha-function": ["@csstools/postcss-alpha-function@1.0.1", "", { "dependencies": { "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-isfLLwksH3yHkFXfCI2Gcaqg7wGGHZZwunoJzEZk0yKYIokgre6hYVFibKL3SYAoR1kBXova8LB+JoO5vZzi9w=="], + + "@csstools/postcss-cascade-layers": ["@csstools/postcss-cascade-layers@5.0.2", "", { "dependencies": { "@csstools/selector-specificity": "^5.0.0", "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-nWBE08nhO8uWl6kSAeCx4im7QfVko3zLrtgWZY4/bP87zrSPpSyN/3W3TDqz1jJuH+kbKOHXg5rJnK+ZVYcFFg=="], + + "@csstools/postcss-color-function": ["@csstools/postcss-color-function@4.0.12", "", { "dependencies": { "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-yx3cljQKRaSBc2hfh8rMZFZzChaFgwmO2JfFgFr1vMcF3C/uyy5I4RFIBOIWGq1D+XbKCG789CGkG6zzkLpagA=="], + + "@csstools/postcss-color-function-display-p3-linear": ["@csstools/postcss-color-function-display-p3-linear@1.0.1", "", { "dependencies": { "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-E5qusdzhlmO1TztYzDIi8XPdPoYOjoTY6HBYBCYSj+Gn4gQRBlvjgPQXzfzuPQqt8EhkC/SzPKObg4Mbn8/xMg=="], + + "@csstools/postcss-color-mix-function": ["@csstools/postcss-color-mix-function@3.0.12", "", { "dependencies": { "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-4STERZfCP5Jcs13P1U5pTvI9SkgLgfMUMhdXW8IlJWkzOOOqhZIjcNhWtNJZes2nkBDsIKJ0CJtFtuaZ00moag=="], + + "@csstools/postcss-color-mix-variadic-function-arguments": ["@csstools/postcss-color-mix-variadic-function-arguments@1.0.2", "", { "dependencies": { "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-rM67Gp9lRAkTo+X31DUqMEq+iK+EFqsidfecmhrteErxJZb6tUoJBVQca1Vn1GpDql1s1rD1pKcuYzMsg7Z1KQ=="], + + "@csstools/postcss-content-alt-text": ["@csstools/postcss-content-alt-text@2.0.8", "", { "dependencies": { "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-9SfEW9QCxEpTlNMnpSqFaHyzsiRpZ5J5+KqCu1u5/eEJAWsMhzT40qf0FIbeeglEvrGRMdDzAxMIz3wqoGSb+Q=="], + + "@csstools/postcss-contrast-color-function": ["@csstools/postcss-contrast-color-function@2.0.12", "", { "dependencies": { "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-YbwWckjK3qwKjeYz/CijgcS7WDUCtKTd8ShLztm3/i5dhh4NaqzsbYnhm4bjrpFpnLZ31jVcbK8YL77z3GBPzA=="], + + "@csstools/postcss-exponential-functions": ["@csstools/postcss-exponential-functions@2.0.9", "", { "dependencies": { "@csstools/css-calc": "^2.1.4", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-abg2W/PI3HXwS/CZshSa79kNWNZHdJPMBXeZNyPQFbbj8sKO3jXxOt/wF7juJVjyDTc6JrvaUZYFcSBZBhaxjw=="], + + "@csstools/postcss-font-format-keywords": ["@csstools/postcss-font-format-keywords@4.0.0", "", { "dependencies": { "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-usBzw9aCRDvchpok6C+4TXC57btc4bJtmKQWOHQxOVKen1ZfVqBUuCZ/wuqdX5GHsD0NRSr9XTP+5ID1ZZQBXw=="], + + "@csstools/postcss-gamut-mapping": ["@csstools/postcss-gamut-mapping@2.0.11", "", { "dependencies": { "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-fCpCUgZNE2piVJKC76zFsgVW1apF6dpYsqGyH8SIeCcM4pTEsRTWTLCaJIMKFEundsCKwY1rwfhtrio04RJ4Dw=="], + + "@csstools/postcss-gradients-interpolation-method": ["@csstools/postcss-gradients-interpolation-method@5.0.12", "", { "dependencies": { "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-jugzjwkUY0wtNrZlFeyXzimUL3hN4xMvoPnIXxoZqxDvjZRiSh+itgHcVUWzJ2VwD/VAMEgCLvtaJHX+4Vj3Ow=="], + + "@csstools/postcss-hwb-function": ["@csstools/postcss-hwb-function@4.0.12", "", { "dependencies": { "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-mL/+88Z53KrE4JdePYFJAQWFrcADEqsLprExCM04GDNgHIztwFzj0Mbhd/yxMBngq0NIlz58VVxjt5abNs1VhA=="], + + "@csstools/postcss-ic-unit": ["@csstools/postcss-ic-unit@4.0.4", "", { "dependencies": { "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-yQ4VmossuOAql65sCPppVO1yfb7hDscf4GseF0VCA/DTDaBc0Wtf8MTqVPfjGYlT5+2buokG0Gp7y0atYZpwjg=="], + + "@csstools/postcss-initial": ["@csstools/postcss-initial@2.0.1", "", { "peerDependencies": { "postcss": "^8.4" } }, "sha512-L1wLVMSAZ4wovznquK0xmC7QSctzO4D0Is590bxpGqhqjboLXYA16dWZpfwImkdOgACdQ9PqXsuRroW6qPlEsg=="], + + "@csstools/postcss-is-pseudo-class": ["@csstools/postcss-is-pseudo-class@5.0.3", "", { "dependencies": { "@csstools/selector-specificity": "^5.0.0", "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-jS/TY4SpG4gszAtIg7Qnf3AS2pjcUM5SzxpApOrlndMeGhIbaTzWBzzP/IApXoNWEW7OhcjkRT48jnAUIFXhAQ=="], + + "@csstools/postcss-light-dark-function": ["@csstools/postcss-light-dark-function@2.0.11", "", { "dependencies": { "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-fNJcKXJdPM3Lyrbmgw2OBbaioU7yuKZtiXClf4sGdQttitijYlZMD5K7HrC/eF83VRWRrYq6OZ0Lx92leV2LFA=="], + + "@csstools/postcss-logical-float-and-clear": ["@csstools/postcss-logical-float-and-clear@3.0.0", "", { "peerDependencies": { "postcss": "^8.4" } }, "sha512-SEmaHMszwakI2rqKRJgE+8rpotFfne1ZS6bZqBoQIicFyV+xT1UF42eORPxJkVJVrH9C0ctUgwMSn3BLOIZldQ=="], + + "@csstools/postcss-logical-overflow": ["@csstools/postcss-logical-overflow@2.0.0", "", { "peerDependencies": { "postcss": "^8.4" } }, "sha512-spzR1MInxPuXKEX2csMamshR4LRaSZ3UXVaRGjeQxl70ySxOhMpP2252RAFsg8QyyBXBzuVOOdx1+bVO5bPIzA=="], + + "@csstools/postcss-logical-overscroll-behavior": ["@csstools/postcss-logical-overscroll-behavior@2.0.0", "", { "peerDependencies": { "postcss": "^8.4" } }, "sha512-e/webMjoGOSYfqLunyzByZj5KKe5oyVg/YSbie99VEaSDE2kimFm0q1f6t/6Jo+VVCQ/jbe2Xy+uX+C4xzWs4w=="], + + "@csstools/postcss-logical-resize": ["@csstools/postcss-logical-resize@3.0.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-DFbHQOFW/+I+MY4Ycd/QN6Dg4Hcbb50elIJCfnwkRTCX05G11SwViI5BbBlg9iHRl4ytB7pmY5ieAFk3ws7yyg=="], + + "@csstools/postcss-logical-viewport-units": ["@csstools/postcss-logical-viewport-units@3.0.4", "", { "dependencies": { "@csstools/css-tokenizer": "^3.0.4", "@csstools/utilities": "^2.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-q+eHV1haXA4w9xBwZLKjVKAWn3W2CMqmpNpZUk5kRprvSiBEGMgrNH3/sJZ8UA3JgyHaOt3jwT9uFa4wLX4EqQ=="], + + "@csstools/postcss-media-minmax": ["@csstools/postcss-media-minmax@2.0.9", "", { "dependencies": { "@csstools/css-calc": "^2.1.4", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "@csstools/media-query-list-parser": "^4.0.3" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-af9Qw3uS3JhYLnCbqtZ9crTvvkR+0Se+bBqSr7ykAnl9yKhk6895z9rf+2F4dClIDJWxgn0iZZ1PSdkhrbs2ig=="], + + "@csstools/postcss-media-queries-aspect-ratio-number-values": ["@csstools/postcss-media-queries-aspect-ratio-number-values@3.0.5", "", { "dependencies": { "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "@csstools/media-query-list-parser": "^4.0.3" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-zhAe31xaaXOY2Px8IYfoVTB3wglbJUVigGphFLj6exb7cjZRH9A6adyE22XfFK3P2PzwRk0VDeTJmaxpluyrDg=="], + + "@csstools/postcss-nested-calc": ["@csstools/postcss-nested-calc@4.0.0", "", { "dependencies": { "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-jMYDdqrQQxE7k9+KjstC3NbsmC063n1FTPLCgCRS2/qHUbHM0mNy9pIn4QIiQGs9I/Bg98vMqw7mJXBxa0N88A=="], + + "@csstools/postcss-normalize-display-values": ["@csstools/postcss-normalize-display-values@4.0.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-HlEoG0IDRoHXzXnkV4in47dzsxdsjdz6+j7MLjaACABX2NfvjFS6XVAnpaDyGesz9gK2SC7MbNwdCHusObKJ9Q=="], + + "@csstools/postcss-oklab-function": ["@csstools/postcss-oklab-function@4.0.12", "", { "dependencies": { "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-HhlSmnE1NKBhXsTnNGjxvhryKtO7tJd1w42DKOGFD6jSHtYOrsJTQDKPMwvOfrzUAk8t7GcpIfRyM7ssqHpFjg=="], + + "@csstools/postcss-progressive-custom-properties": ["@csstools/postcss-progressive-custom-properties@4.2.1", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-uPiiXf7IEKtUQXsxu6uWtOlRMXd2QWWy5fhxHDnPdXKCQckPP3E34ZgDoZ62r2iT+UOgWsSbM4NvHE5m3mAEdw=="], + + "@csstools/postcss-random-function": ["@csstools/postcss-random-function@2.0.1", "", { "dependencies": { "@csstools/css-calc": "^2.1.4", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-q+FQaNiRBhnoSNo+GzqGOIBKoHQ43lYz0ICrV+UudfWnEF6ksS6DsBIJSISKQT2Bvu3g4k6r7t0zYrk5pDlo8w=="], + + "@csstools/postcss-relative-color-syntax": ["@csstools/postcss-relative-color-syntax@3.0.12", "", { "dependencies": { "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-0RLIeONxu/mtxRtf3o41Lq2ghLimw0w9ByLWnnEVuy89exmEEq8bynveBxNW3nyHqLAFEeNtVEmC1QK9MZ8Huw=="], + + "@csstools/postcss-scope-pseudo-class": ["@csstools/postcss-scope-pseudo-class@4.0.1", "", { "dependencies": { "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-IMi9FwtH6LMNuLea1bjVMQAsUhFxJnyLSgOp/cpv5hrzWmrUYU5fm0EguNDIIOHUqzXode8F/1qkC/tEo/qN8Q=="], + + "@csstools/postcss-sign-functions": ["@csstools/postcss-sign-functions@1.1.4", "", { "dependencies": { "@csstools/css-calc": "^2.1.4", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-P97h1XqRPcfcJndFdG95Gv/6ZzxUBBISem0IDqPZ7WMvc/wlO+yU0c5D/OCpZ5TJoTt63Ok3knGk64N+o6L2Pg=="], + + "@csstools/postcss-stepped-value-functions": ["@csstools/postcss-stepped-value-functions@4.0.9", "", { "dependencies": { "@csstools/css-calc": "^2.1.4", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-h9btycWrsex4dNLeQfyU3y3w40LMQooJWFMm/SK9lrKguHDcFl4VMkncKKoXi2z5rM9YGWbUQABI8BT2UydIcA=="], + + "@csstools/postcss-text-decoration-shorthand": ["@csstools/postcss-text-decoration-shorthand@4.0.3", "", { "dependencies": { "@csstools/color-helpers": "^5.1.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-KSkGgZfx0kQjRIYnpsD7X2Om9BUXX/Kii77VBifQW9Ih929hK0KNjVngHDH0bFB9GmfWcR9vJYJJRvw/NQjkrA=="], + + "@csstools/postcss-trigonometric-functions": ["@csstools/postcss-trigonometric-functions@4.0.9", "", { "dependencies": { "@csstools/css-calc": "^2.1.4", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-Hnh5zJUdpNrJqK9v1/E3BbrQhaDTj5YiX7P61TOvUhoDHnUmsNNxcDAgkQ32RrcWx9GVUvfUNPcUkn8R3vIX6A=="], + + "@csstools/postcss-unset-value": ["@csstools/postcss-unset-value@4.0.0", "", { "peerDependencies": { "postcss": "^8.4" } }, "sha512-cBz3tOCI5Fw6NIFEwU3RiwK6mn3nKegjpJuzCndoGq3BZPkUjnsq7uQmIeMNeMbMk7YD2MfKcgCpZwX5jyXqCA=="], + + "@csstools/selector-resolve-nested": ["@csstools/selector-resolve-nested@3.1.0", "", { "peerDependencies": { "postcss-selector-parser": "^7.0.0" } }, "sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g=="], + + "@csstools/selector-specificity": ["@csstools/selector-specificity@5.0.0", "", { "peerDependencies": { "postcss-selector-parser": "^7.0.0" } }, "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw=="], + + "@csstools/utilities": ["@csstools/utilities@2.0.0", "", { "peerDependencies": { "postcss": "^8.4" } }, "sha512-5VdOr0Z71u+Yp3ozOx8T11N703wIFGVRgOWbOZMKgglPJsWA54MRIoMNVMa7shUToIhx5J8vX4sOZgD2XiihiQ=="], + + "@fullhuman/postcss-purgecss": ["@fullhuman/postcss-purgecss@7.0.2", "", { "dependencies": { "purgecss": "^7.0.2" }, "peerDependencies": { "postcss": "^8.0.0" } }, "sha512-U4zAXNaVztbDxO9EdcLp51F3UxxYsb/7DN89rFxFJhfk2Wua2pvw2Kf3HdspbPhW/wpHjSjsxWYoIlbTgRSjbQ=="], + + "@isaacs/balanced-match": ["@isaacs/balanced-match@4.0.1", "", {}, "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ=="], + + "@isaacs/brace-expansion": ["@isaacs/brace-expansion@5.0.0", "", { "dependencies": { "@isaacs/balanced-match": "^4.0.1" } }, "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA=="], + + "@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], + + "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="], + + "autoprefixer": ["autoprefixer@10.4.21", "", { "dependencies": { "browserslist": "^4.24.4", "caniuse-lite": "^1.0.30001702", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.1.0" }, "bin": { "autoprefixer": "bin/autoprefixer" } }, "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ=="], + + "baseline-browser-mapping": ["baseline-browser-mapping@2.8.10", "", { "bin": { "baseline-browser-mapping": "dist/cli.js" } }, "sha512-uLfgBi+7IBNay8ECBO2mVMGZAc1VgZWEChxm4lv+TobGdG82LnXMjuNGo/BSSZZL4UmkWhxEHP2f5ziLNwGWMA=="], + + "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="], + + "boolbase": ["boolbase@1.0.0", "", {}, "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="], + + "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], + + "browserslist": ["browserslist@4.26.3", "", { "dependencies": { "baseline-browser-mapping": "^2.8.9", "caniuse-lite": "^1.0.30001746", "electron-to-chromium": "^1.5.227", "node-releases": "^2.0.21", "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w=="], + + "caniuse-api": ["caniuse-api@3.0.0", "", { "dependencies": { "browserslist": "^4.0.0", "caniuse-lite": "^1.0.0", "lodash.memoize": "^4.1.2", "lodash.uniq": "^4.5.0" } }, "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw=="], + + "caniuse-lite": ["caniuse-lite@1.0.30001746", "", {}, "sha512-eA7Ys/DGw+pnkWWSE/id29f2IcPHVoE8wxtvE5JdvD2V28VTDPy1yEeo11Guz0sJ4ZeGRcm3uaTcAqK1LXaphA=="], + + "chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], + + "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + + "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], + + "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + + "colord": ["colord@2.9.3", "", {}, "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw=="], + + "commander": ["commander@12.1.0", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="], + + "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], + + "css-blank-pseudo": ["css-blank-pseudo@7.0.1", "", { "dependencies": { "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-jf+twWGDf6LDoXDUode+nc7ZlrqfaNphrBIBrcmeP3D8yw1uPaix1gCC8LUQUGQ6CycuK2opkbFFWFuq/a94ag=="], + + "css-declaration-sorter": ["css-declaration-sorter@7.3.0", "", { "peerDependencies": { "postcss": "^8.0.9" } }, "sha512-LQF6N/3vkAMYF4xoHLJfG718HRJh34Z8BnNhd6bosOMIVjMlhuZK5++oZa3uYAgrI5+7x2o27gUqTR2U/KjUOQ=="], + + "css-has-pseudo": ["css-has-pseudo@7.0.3", "", { "dependencies": { "@csstools/selector-specificity": "^5.0.0", "postcss-selector-parser": "^7.0.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-oG+vKuGyqe/xvEMoxAQrhi7uY16deJR3i7wwhBerVrGQKSqUC5GiOVxTpM9F9B9hw0J+eKeOWLH7E9gZ1Dr5rA=="], + + "css-prefers-color-scheme": ["css-prefers-color-scheme@10.0.0", "", { "peerDependencies": { "postcss": "^8.4" } }, "sha512-VCtXZAWivRglTZditUfB4StnsWr6YVZ2PRtuxQLKTNRdtAf8tpzaVPE9zXIF3VaSc7O70iK/j1+NXxyQCqdPjQ=="], + + "css-select": ["css-select@5.2.2", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", "domhandler": "^5.0.2", "domutils": "^3.0.1", "nth-check": "^2.0.1" } }, "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw=="], + + "css-tree": ["css-tree@3.1.0", "", { "dependencies": { "mdn-data": "2.12.2", "source-map-js": "^1.0.1" } }, "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w=="], + + "css-what": ["css-what@6.2.2", "", {}, "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA=="], + + "cssdb": ["cssdb@8.4.2", "", {}, "sha512-PzjkRkRUS+IHDJohtxkIczlxPPZqRo0nXplsYXOMBRPjcVRjj1W4DfvRgshUYTVuUigU7ptVYkFJQ7abUB0nyg=="], + + "cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], + + "cssnano": ["cssnano@7.1.1", "", { "dependencies": { "cssnano-preset-default": "^7.0.9", "lilconfig": "^3.1.3" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-fm4D8ti0dQmFPeF8DXSAA//btEmqCOgAc/9Oa3C1LW94h5usNrJEfrON7b4FkPZgnDEn6OUs5NdxiJZmAtGOpQ=="], + + "cssnano-preset-default": ["cssnano-preset-default@7.0.9", "", { "dependencies": { "browserslist": "^4.25.1", "css-declaration-sorter": "^7.2.0", "cssnano-utils": "^5.0.1", "postcss-calc": "^10.1.1", "postcss-colormin": "^7.0.4", "postcss-convert-values": "^7.0.7", "postcss-discard-comments": "^7.0.4", "postcss-discard-duplicates": "^7.0.2", "postcss-discard-empty": "^7.0.1", "postcss-discard-overridden": "^7.0.1", "postcss-merge-longhand": "^7.0.5", "postcss-merge-rules": "^7.0.6", "postcss-minify-font-values": "^7.0.1", "postcss-minify-gradients": "^7.0.1", "postcss-minify-params": "^7.0.4", "postcss-minify-selectors": "^7.0.5", "postcss-normalize-charset": "^7.0.1", "postcss-normalize-display-values": "^7.0.1", "postcss-normalize-positions": "^7.0.1", "postcss-normalize-repeat-style": "^7.0.1", "postcss-normalize-string": "^7.0.1", "postcss-normalize-timing-functions": "^7.0.1", "postcss-normalize-unicode": "^7.0.4", "postcss-normalize-url": "^7.0.1", "postcss-normalize-whitespace": "^7.0.1", "postcss-ordered-values": "^7.0.2", "postcss-reduce-initial": "^7.0.4", "postcss-reduce-transforms": "^7.0.1", "postcss-svgo": "^7.1.0", "postcss-unique-selectors": "^7.0.4" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-tCD6AAFgYBOVpMBX41KjbvRh9c2uUjLXRyV7KHSIrwHiq5Z9o0TFfUCoM3TwVrRsRteN3sVXGNvjVNxYzkpTsA=="], + + "cssnano-utils": ["cssnano-utils@5.0.1", "", { "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-ZIP71eQgG9JwjVZsTPSqhc6GHgEr53uJ7tK5///VfyWj6Xp2DBmixWHqJgPno+PqATzn48pL42ww9x5SSGmhZg=="], + + "csso": ["csso@5.0.5", "", { "dependencies": { "css-tree": "~2.2.0" } }, "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ=="], + + "dependency-graph": ["dependency-graph@1.0.0", "", {}, "sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg=="], + + "dom-serializer": ["dom-serializer@2.0.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", "entities": "^4.2.0" } }, "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg=="], + + "domelementtype": ["domelementtype@2.3.0", "", {}, "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="], + + "domhandler": ["domhandler@5.0.3", "", { "dependencies": { "domelementtype": "^2.3.0" } }, "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w=="], + + "domutils": ["domutils@3.2.2", "", { "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3" } }, "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw=="], + + "eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="], + + "electron-to-chromium": ["electron-to-chromium@1.5.229", "", {}, "sha512-cwhDcZKGcT/rEthLRJ9eBlMDkh1sorgsuk+6dpsehV0g9CABsIqBxU4rLRjG+d/U6pYU1s37A4lSKrVc5lSQYg=="], + + "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + + "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], + + "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], + + "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], + + "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], + + "foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], + + "fraction.js": ["fraction.js@4.3.7", "", {}, "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew=="], + + "fs-extra": ["fs-extra@11.3.2", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A=="], + + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + + "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], + + "glob": ["glob@11.0.3", "", { "dependencies": { "foreground-child": "^3.3.1", "jackspeak": "^4.1.1", "minimatch": "^10.0.3", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^2.0.0" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA=="], + + "glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + + "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], + + "is-binary-path": ["is-binary-path@2.1.0", "", { "dependencies": { "binary-extensions": "^2.0.0" } }, "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="], + + "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], + + "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], + + "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], + + "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], + + "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], + + "jackspeak": ["jackspeak@4.1.1", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" } }, "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ=="], + + "jsonfile": ["jsonfile@6.2.0", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg=="], + + "lilconfig": ["lilconfig@3.1.3", "", {}, "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw=="], + + "lodash.memoize": ["lodash.memoize@4.1.2", "", {}, "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag=="], + + "lodash.uniq": ["lodash.uniq@4.5.0", "", {}, "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ=="], + + "lru-cache": ["lru-cache@11.2.2", "", {}, "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg=="], + + "mdn-data": ["mdn-data@2.12.2", "", {}, "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA=="], + + "minimatch": ["minimatch@10.0.3", "", { "dependencies": { "@isaacs/brace-expansion": "^5.0.0" } }, "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw=="], + + "minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], + + "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + + "node-releases": ["node-releases@2.0.21", "", {}, "sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw=="], + + "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], + + "normalize-range": ["normalize-range@0.1.2", "", {}, "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA=="], + + "nth-check": ["nth-check@2.1.1", "", { "dependencies": { "boolbase": "^1.0.0" } }, "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="], + + "package-json-from-dist": ["package-json-from-dist@1.0.1", "", {}, "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="], + + "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], + + "path-scurry": ["path-scurry@2.0.0", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg=="], + + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + + "picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "pify": ["pify@2.3.0", "", {}, "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog=="], + + "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], + + "postcss-attribute-case-insensitive": ["postcss-attribute-case-insensitive@7.0.1", "", { "dependencies": { "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-Uai+SupNSqzlschRyNx3kbCTWgY/2hcwtHEI/ej2LJWc9JJ77qKgGptd8DHwY1mXtZ7Aoh4z4yxfwMBue9eNgw=="], + + "postcss-calc": ["postcss-calc@10.1.1", "", { "dependencies": { "postcss-selector-parser": "^7.0.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.38" } }, "sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw=="], + + "postcss-clamp": ["postcss-clamp@4.1.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.6" } }, "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow=="], + + "postcss-cli": ["postcss-cli@11.0.1", "", { "dependencies": { "chokidar": "^3.3.0", "dependency-graph": "^1.0.0", "fs-extra": "^11.0.0", "picocolors": "^1.0.0", "postcss-load-config": "^5.0.0", "postcss-reporter": "^7.0.0", "pretty-hrtime": "^1.0.3", "read-cache": "^1.0.0", "slash": "^5.0.0", "tinyglobby": "^0.2.12", "yargs": "^17.0.0" }, "peerDependencies": { "postcss": "^8.0.0" }, "bin": { "postcss": "index.js" } }, "sha512-0UnkNPSayHKRe/tc2YGW6XnSqqOA9eqpiRMgRlV1S6HdGi16vwJBx7lviARzbV1HpQHqLLRH3o8vTcB0cLc+5g=="], + + "postcss-color-functional-notation": ["postcss-color-functional-notation@7.0.12", "", { "dependencies": { "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-TLCW9fN5kvO/u38/uesdpbx3e8AkTYhMvDZYa9JpmImWuTE99bDQ7GU7hdOADIZsiI9/zuxfAJxny/khknp1Zw=="], + + "postcss-color-hex-alpha": ["postcss-color-hex-alpha@10.0.0", "", { "dependencies": { "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-1kervM2cnlgPs2a8Vt/Qbe5cQ++N7rkYo/2rz2BkqJZIHQwaVuJgQH38REHrAi4uM0b1fqxMkWYmese94iMp3w=="], + + "postcss-color-rebeccapurple": ["postcss-color-rebeccapurple@10.0.0", "", { "dependencies": { "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-JFta737jSP+hdAIEhk1Vs0q0YF5P8fFcj+09pweS8ktuGuZ8pPlykHsk6mPxZ8awDl4TrcxUqJo9l1IhVr/OjQ=="], + + "postcss-colormin": ["postcss-colormin@7.0.4", "", { "dependencies": { "browserslist": "^4.25.1", "caniuse-api": "^3.0.0", "colord": "^2.9.3", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-ziQuVzQZBROpKpfeDwmrG+Vvlr0YWmY/ZAk99XD+mGEBuEojoFekL41NCsdhyNUtZI7DPOoIWIR7vQQK9xwluw=="], + + "postcss-convert-values": ["postcss-convert-values@7.0.7", "", { "dependencies": { "browserslist": "^4.25.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-HR9DZLN04Xbe6xugRH6lS4ZQH2zm/bFh/ZyRkpedZozhvh+awAfbA0P36InO4fZfDhvYfNJeNvlTf1sjwGbw/A=="], + + "postcss-custom-media": ["postcss-custom-media@11.0.6", "", { "dependencies": { "@csstools/cascade-layer-name-parser": "^2.0.5", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "@csstools/media-query-list-parser": "^4.0.3" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-C4lD4b7mUIw+RZhtY7qUbf4eADmb7Ey8BFA2px9jUbwg7pjTZDl4KY4bvlUV+/vXQvzQRfiGEVJyAbtOsCMInw=="], + + "postcss-custom-properties": ["postcss-custom-properties@14.0.6", "", { "dependencies": { "@csstools/cascade-layer-name-parser": "^2.0.5", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-fTYSp3xuk4BUeVhxCSJdIPhDLpJfNakZKoiTDx7yRGCdlZrSJR7mWKVOBS4sBF+5poPQFMj2YdXx1VHItBGihQ=="], + + "postcss-custom-selectors": ["postcss-custom-selectors@8.0.5", "", { "dependencies": { "@csstools/cascade-layer-name-parser": "^2.0.5", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-9PGmckHQswiB2usSO6XMSswO2yFWVoCAuih1yl9FVcwkscLjRKjwsjM3t+NIWpSU2Jx3eOiK2+t4vVTQaoCHHg=="], + + "postcss-dir-pseudo-class": ["postcss-dir-pseudo-class@9.0.1", "", { "dependencies": { "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-tRBEK0MHYvcMUrAuYMEOa0zg9APqirBcgzi6P21OhxtJyJADo/SWBwY1CAwEohQ/6HDaa9jCjLRG7K3PVQYHEA=="], + + "postcss-discard-comments": ["postcss-discard-comments@7.0.4", "", { "dependencies": { "postcss-selector-parser": "^7.1.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-6tCUoql/ipWwKtVP/xYiFf1U9QgJ0PUvxN7pTcsQ8Ns3Fnwq1pU5D5s1MhT/XySeLq6GXNvn37U46Ded0TckWg=="], + + "postcss-discard-duplicates": ["postcss-discard-duplicates@7.0.2", "", { "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-eTonaQvPZ/3i1ASDHOKkYwAybiM45zFIc7KXils4mQmHLqIswXD9XNOKEVxtTFnsmwYzF66u4LMgSr0abDlh5w=="], + + "postcss-discard-empty": ["postcss-discard-empty@7.0.1", "", { "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-cFrJKZvcg/uxB6Ijr4l6qmn3pXQBna9zyrPC+sK0zjbkDUZew+6xDltSF7OeB7rAtzaaMVYSdbod+sZOCWnMOg=="], + + "postcss-discard-overridden": ["postcss-discard-overridden@7.0.1", "", { "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-7c3MMjjSZ/qYrx3uc1940GSOzN1Iqjtlqe8uoSg+qdVPYyRb0TILSqqmtlSFuE4mTDECwsm397Ya7iXGzfF7lg=="], + + "postcss-double-position-gradients": ["postcss-double-position-gradients@6.0.4", "", { "dependencies": { "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-m6IKmxo7FxSP5nF2l63QbCC3r+bWpFUWmZXZf096WxG0m7Vl1Q1+ruFOhpdDRmKrRS+S3Jtk+TVk/7z0+BVK6g=="], + + "postcss-focus-visible": ["postcss-focus-visible@10.0.1", "", { "dependencies": { "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-U58wyjS/I1GZgjRok33aE8juW9qQgQUNwTSdxQGuShHzwuYdcklnvK/+qOWX1Q9kr7ysbraQ6ht6r+udansalA=="], + + "postcss-focus-within": ["postcss-focus-within@9.0.1", "", { "dependencies": { "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-fzNUyS1yOYa7mOjpci/bR+u+ESvdar6hk8XNK/TRR0fiGTp2QT5N+ducP0n3rfH/m9I7H/EQU6lsa2BrgxkEjw=="], + + "postcss-font-variant": ["postcss-font-variant@5.0.0", "", { "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA=="], + + "postcss-gap-properties": ["postcss-gap-properties@6.0.0", "", { "peerDependencies": { "postcss": "^8.4" } }, "sha512-Om0WPjEwiM9Ru+VhfEDPZJAKWUd0mV1HmNXqp2C29z80aQ2uP9UVhLc7e3aYMIor/S5cVhoPgYQ7RtfeZpYTRw=="], + + "postcss-image-set-function": ["postcss-image-set-function@7.0.0", "", { "dependencies": { "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-QL7W7QNlZuzOwBTeXEmbVckNt1FSmhQtbMRvGGqqU4Nf4xk6KUEQhAoWuMzwbSv5jxiRiSZ5Tv7eiDB9U87znA=="], + + "postcss-lab-function": ["postcss-lab-function@7.0.12", "", { "dependencies": { "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-tUcyRk1ZTPec3OuKFsqtRzW2Go5lehW29XA21lZ65XmzQkz43VY2tyWEC202F7W3mILOjw0voOiuxRGTsN+J9w=="], + + "postcss-load-config": ["postcss-load-config@5.1.0", "", { "dependencies": { "lilconfig": "^3.1.1", "yaml": "^2.4.2" }, "peerDependencies": { "jiti": ">=1.21.0", "postcss": ">=8.0.9", "tsx": "^4.8.1" }, "optionalPeers": ["jiti", "postcss", "tsx"] }, "sha512-G5AJ+IX0aD0dygOE0yFZQ/huFFMSNneyfp0e3/bT05a8OfPC5FUoZRPfGijUdGOJNMewJiwzcHJXFafFzeKFVA=="], + + "postcss-logical": ["postcss-logical@8.1.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-pL1hXFQ2fEXNKiNiAgtfA005T9FBxky5zkX6s4GZM2D8RkVgRqz3f4g1JUoq925zXv495qk8UNldDwh8uGEDoA=="], + + "postcss-merge-longhand": ["postcss-merge-longhand@7.0.5", "", { "dependencies": { "postcss-value-parser": "^4.2.0", "stylehacks": "^7.0.5" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-Kpu5v4Ys6QI59FxmxtNB/iHUVDn9Y9sYw66D6+SZoIk4QTz1prC4aYkhIESu+ieG1iylod1f8MILMs1Em3mmIw=="], + + "postcss-merge-rules": ["postcss-merge-rules@7.0.6", "", { "dependencies": { "browserslist": "^4.25.1", "caniuse-api": "^3.0.0", "cssnano-utils": "^5.0.1", "postcss-selector-parser": "^7.1.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-2jIPT4Tzs8K87tvgCpSukRQ2jjd+hH6Bb8rEEOUDmmhOeTcqDg5fEFK8uKIu+Pvc3//sm3Uu6FRqfyv7YF7+BQ=="], + + "postcss-minify-font-values": ["postcss-minify-font-values@7.0.1", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-2m1uiuJeTplll+tq4ENOQSzB8LRnSUChBv7oSyFLsJRtUgAAJGP6LLz0/8lkinTgxrmJSPOEhgY1bMXOQ4ZXhQ=="], + + "postcss-minify-gradients": ["postcss-minify-gradients@7.0.1", "", { "dependencies": { "colord": "^2.9.3", "cssnano-utils": "^5.0.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-X9JjaysZJwlqNkJbUDgOclyG3jZEpAMOfof6PUZjPnPrePnPG62pS17CjdM32uT1Uq1jFvNSff9l7kNbmMSL2A=="], + + "postcss-minify-params": ["postcss-minify-params@7.0.4", "", { "dependencies": { "browserslist": "^4.25.1", "cssnano-utils": "^5.0.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-3OqqUddfH8c2e7M35W6zIwv7jssM/3miF9cbCSb1iJiWvtguQjlxZGIHK9JRmc8XAKmE2PFGtHSM7g/VcW97sw=="], + + "postcss-minify-selectors": ["postcss-minify-selectors@7.0.5", "", { "dependencies": { "cssesc": "^3.0.0", "postcss-selector-parser": "^7.1.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-x2/IvofHcdIrAm9Q+p06ZD1h6FPcQ32WtCRVodJLDR+WMn8EVHI1kvLxZuGKz/9EY5nAmI6lIQIrpo4tBy5+ug=="], + + "postcss-nesting": ["postcss-nesting@13.0.2", "", { "dependencies": { "@csstools/selector-resolve-nested": "^3.1.0", "@csstools/selector-specificity": "^5.0.0", "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ=="], + + "postcss-normalize-charset": ["postcss-normalize-charset@7.0.1", "", { "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-sn413ofhSQHlZFae//m9FTOfkmiZ+YQXsbosqOWRiVQncU2BA3daX3n0VF3cG6rGLSFVc5Di/yns0dFfh8NFgQ=="], + + "postcss-normalize-display-values": ["postcss-normalize-display-values@7.0.1", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-E5nnB26XjSYz/mGITm6JgiDpAbVuAkzXwLzRZtts19jHDUBFxZ0BkXAehy0uimrOjYJbocby4FVswA/5noOxrQ=="], + + "postcss-normalize-positions": ["postcss-normalize-positions@7.0.1", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-pB/SzrIP2l50ZIYu+yQZyMNmnAcwyYb9R1fVWPRxm4zcUFCY2ign7rcntGFuMXDdd9L2pPNUgoODDk91PzRZuQ=="], + + "postcss-normalize-repeat-style": ["postcss-normalize-repeat-style@7.0.1", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-NsSQJ8zj8TIDiF0ig44Byo3Jk9e4gNt9x2VIlJudnQQ5DhWAHJPF4Tr1ITwyHio2BUi/I6Iv0HRO7beHYOloYQ=="], + + "postcss-normalize-string": ["postcss-normalize-string@7.0.1", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-QByrI7hAhsoze992kpbMlJSbZ8FuCEc1OT9EFbZ6HldXNpsdpZr+YXC5di3UEv0+jeZlHbZcoCADgb7a+lPmmQ=="], + + "postcss-normalize-timing-functions": ["postcss-normalize-timing-functions@7.0.1", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-bHifyuuSNdKKsnNJ0s8fmfLMlvsQwYVxIoUBnowIVl2ZAdrkYQNGVB4RxjfpvkMjipqvbz0u7feBZybkl/6NJg=="], + + "postcss-normalize-unicode": ["postcss-normalize-unicode@7.0.4", "", { "dependencies": { "browserslist": "^4.25.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-LvIURTi1sQoZqj8mEIE8R15yvM+OhbR1avynMtI9bUzj5gGKR/gfZFd8O7VMj0QgJaIFzxDwxGl/ASMYAkqO8g=="], + + "postcss-normalize-url": ["postcss-normalize-url@7.0.1", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-sUcD2cWtyK1AOL/82Fwy1aIVm/wwj5SdZkgZ3QiUzSzQQofrbq15jWJ3BA7Z+yVRwamCjJgZJN0I9IS7c6tgeQ=="], + + "postcss-normalize-whitespace": ["postcss-normalize-whitespace@7.0.1", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-vsbgFHMFQrJBJKrUFJNZ2pgBeBkC2IvvoHjz1to0/0Xk7sII24T0qFOiJzG6Fu3zJoq/0yI4rKWi7WhApW+EFA=="], + + "postcss-opacity-percentage": ["postcss-opacity-percentage@3.0.0", "", { "peerDependencies": { "postcss": "^8.4" } }, "sha512-K6HGVzyxUxd/VgZdX04DCtdwWJ4NGLG212US4/LA1TLAbHgmAsTWVR86o+gGIbFtnTkfOpb9sCRBx8K7HO66qQ=="], + + "postcss-ordered-values": ["postcss-ordered-values@7.0.2", "", { "dependencies": { "cssnano-utils": "^5.0.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-AMJjt1ECBffF7CEON/Y0rekRLS6KsePU6PRP08UqYW4UGFRnTXNrByUzYK1h8AC7UWTZdQ9O3Oq9kFIhm0SFEw=="], + + "postcss-overflow-shorthand": ["postcss-overflow-shorthand@6.0.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-BdDl/AbVkDjoTofzDQnwDdm/Ym6oS9KgmO7Gr+LHYjNWJ6ExORe4+3pcLQsLA9gIROMkiGVjjwZNoL/mpXHd5Q=="], + + "postcss-page-break": ["postcss-page-break@3.0.4", "", { "peerDependencies": { "postcss": "^8" } }, "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ=="], + + "postcss-place": ["postcss-place@10.0.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-5EBrMzat2pPAxQNWYavwAfoKfYcTADJ8AXGVPcUZ2UkNloUTWzJQExgrzrDkh3EKzmAx1evfTAzF9I8NGcc+qw=="], + + "postcss-preset-env": ["postcss-preset-env@10.4.0", "", { "dependencies": { "@csstools/postcss-alpha-function": "^1.0.1", "@csstools/postcss-cascade-layers": "^5.0.2", "@csstools/postcss-color-function": "^4.0.12", "@csstools/postcss-color-function-display-p3-linear": "^1.0.1", "@csstools/postcss-color-mix-function": "^3.0.12", "@csstools/postcss-color-mix-variadic-function-arguments": "^1.0.2", "@csstools/postcss-content-alt-text": "^2.0.8", "@csstools/postcss-contrast-color-function": "^2.0.12", "@csstools/postcss-exponential-functions": "^2.0.9", "@csstools/postcss-font-format-keywords": "^4.0.0", "@csstools/postcss-gamut-mapping": "^2.0.11", "@csstools/postcss-gradients-interpolation-method": "^5.0.12", "@csstools/postcss-hwb-function": "^4.0.12", "@csstools/postcss-ic-unit": "^4.0.4", "@csstools/postcss-initial": "^2.0.1", "@csstools/postcss-is-pseudo-class": "^5.0.3", "@csstools/postcss-light-dark-function": "^2.0.11", "@csstools/postcss-logical-float-and-clear": "^3.0.0", "@csstools/postcss-logical-overflow": "^2.0.0", "@csstools/postcss-logical-overscroll-behavior": "^2.0.0", "@csstools/postcss-logical-resize": "^3.0.0", "@csstools/postcss-logical-viewport-units": "^3.0.4", "@csstools/postcss-media-minmax": "^2.0.9", "@csstools/postcss-media-queries-aspect-ratio-number-values": "^3.0.5", "@csstools/postcss-nested-calc": "^4.0.0", "@csstools/postcss-normalize-display-values": "^4.0.0", "@csstools/postcss-oklab-function": "^4.0.12", "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/postcss-random-function": "^2.0.1", "@csstools/postcss-relative-color-syntax": "^3.0.12", "@csstools/postcss-scope-pseudo-class": "^4.0.1", "@csstools/postcss-sign-functions": "^1.1.4", "@csstools/postcss-stepped-value-functions": "^4.0.9", "@csstools/postcss-text-decoration-shorthand": "^4.0.3", "@csstools/postcss-trigonometric-functions": "^4.0.9", "@csstools/postcss-unset-value": "^4.0.0", "autoprefixer": "^10.4.21", "browserslist": "^4.26.0", "css-blank-pseudo": "^7.0.1", "css-has-pseudo": "^7.0.3", "css-prefers-color-scheme": "^10.0.0", "cssdb": "^8.4.2", "postcss-attribute-case-insensitive": "^7.0.1", "postcss-clamp": "^4.1.0", "postcss-color-functional-notation": "^7.0.12", "postcss-color-hex-alpha": "^10.0.0", "postcss-color-rebeccapurple": "^10.0.0", "postcss-custom-media": "^11.0.6", "postcss-custom-properties": "^14.0.6", "postcss-custom-selectors": "^8.0.5", "postcss-dir-pseudo-class": "^9.0.1", "postcss-double-position-gradients": "^6.0.4", "postcss-focus-visible": "^10.0.1", "postcss-focus-within": "^9.0.1", "postcss-font-variant": "^5.0.0", "postcss-gap-properties": "^6.0.0", "postcss-image-set-function": "^7.0.0", "postcss-lab-function": "^7.0.12", "postcss-logical": "^8.1.0", "postcss-nesting": "^13.0.2", "postcss-opacity-percentage": "^3.0.0", "postcss-overflow-shorthand": "^6.0.0", "postcss-page-break": "^3.0.4", "postcss-place": "^10.0.0", "postcss-pseudo-class-any-link": "^10.0.1", "postcss-replace-overflow-wrap": "^4.0.0", "postcss-selector-not": "^8.0.1" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-2kqpOthQ6JhxqQq1FSAAZGe9COQv75Aw8WbsOvQVNJ2nSevc9Yx/IKZGuZ7XJ+iOTtVon7LfO7ELRzg8AZ+sdw=="], + + "postcss-pseudo-class-any-link": ["postcss-pseudo-class-any-link@10.0.1", "", { "dependencies": { "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-3el9rXlBOqTFaMFkWDOkHUTQekFIYnaQY55Rsp8As8QQkpiSgIYEcF/6Ond93oHiDsGb4kad8zjt+NPlOC1H0Q=="], + + "postcss-reduce-initial": ["postcss-reduce-initial@7.0.4", "", { "dependencies": { "browserslist": "^4.25.1", "caniuse-api": "^3.0.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-rdIC9IlMBn7zJo6puim58Xd++0HdbvHeHaPgXsimMfG1ijC5A9ULvNLSE0rUKVJOvNMcwewW4Ga21ngyJjY/+Q=="], + + "postcss-reduce-transforms": ["postcss-reduce-transforms@7.0.1", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-MhyEbfrm+Mlp/36hvZ9mT9DaO7dbncU0CvWI8V93LRkY6IYlu38OPg3FObnuKTUxJ4qA8HpurdQOo5CyqqO76g=="], + + "postcss-replace-overflow-wrap": ["postcss-replace-overflow-wrap@4.0.0", "", { "peerDependencies": { "postcss": "^8.0.3" } }, "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw=="], + + "postcss-reporter": ["postcss-reporter@7.1.0", "", { "dependencies": { "picocolors": "^1.0.0", "thenby": "^1.3.4" }, "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-/eoEylGWyy6/DOiMP5lmFRdmDKThqgn7D6hP2dXKJI/0rJSO1ADFNngZfDzxL0YAxFvws+Rtpuji1YIHj4mySA=="], + + "postcss-selector-not": ["postcss-selector-not@8.0.1", "", { "dependencies": { "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-kmVy/5PYVb2UOhy0+LqUYAhKj7DUGDpSWa5LZqlkWJaaAV+dxxsOG3+St0yNLu6vsKD7Dmqx+nWQt0iil89+WA=="], + + "postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], + + "postcss-svgo": ["postcss-svgo@7.1.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0", "svgo": "^4.0.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-KnAlfmhtoLz6IuU3Sij2ycusNs4jPW+QoFE5kuuUOK8awR6tMxZQrs5Ey3BUz7nFCzT3eqyFgqkyrHiaU2xx3w=="], + + "postcss-unique-selectors": ["postcss-unique-selectors@7.0.4", "", { "dependencies": { "postcss-selector-parser": "^7.1.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-pmlZjsmEAG7cHd7uK3ZiNSW6otSZ13RHuZ/4cDN/bVglS5EpF2r2oxY99SuOHa8m7AWoBCelTS3JPpzsIs8skQ=="], + + "postcss-value-parser": ["postcss-value-parser@4.2.0", "", {}, "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="], + + "pretty-hrtime": ["pretty-hrtime@1.0.3", "", {}, "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A=="], + + "purgecss": ["purgecss@7.0.2", "", { "dependencies": { "commander": "^12.1.0", "glob": "^11.0.0", "postcss": "^8.4.47", "postcss-selector-parser": "^6.1.2" }, "bin": { "purgecss": "bin/purgecss.js" } }, "sha512-4Ku8KoxNhOWi9X1XJ73XY5fv+I+hhTRedKpGs/2gaBKU8ijUiIKF/uyyIyh7Wo713bELSICF5/NswjcuOqYouQ=="], + + "read-cache": ["read-cache@1.0.0", "", { "dependencies": { "pify": "^2.3.0" } }, "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA=="], + + "readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], + + "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], + + "sax": ["sax@1.4.1", "", {}, "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg=="], + + "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], + + "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], + + "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + + "slash": ["slash@5.1.0", "", {}, "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg=="], + + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + + "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "string-width-cjs": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "strip-ansi-cjs": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "stylehacks": ["stylehacks@7.0.6", "", { "dependencies": { "browserslist": "^4.25.1", "postcss-selector-parser": "^7.1.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-iitguKivmsueOmTO0wmxURXBP8uqOO+zikLGZ7Mm9e/94R4w5T999Js2taS/KBOnQ/wdC3jN3vNSrkGDrlnqQg=="], + + "svgo": ["svgo@4.0.0", "", { "dependencies": { "commander": "^11.1.0", "css-select": "^5.1.0", "css-tree": "^3.0.1", "css-what": "^6.1.0", "csso": "^5.0.5", "picocolors": "^1.1.1", "sax": "^1.4.1" }, "bin": "./bin/svgo.js" }, "sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw=="], + + "thenby": ["thenby@1.3.4", "", {}, "sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ=="], + + "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], + + "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], + + "universalify": ["universalify@2.0.1", "", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="], + + "update-browserslist-db": ["update-browserslist-db@1.1.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw=="], + + "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], + + "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], + + "wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + + "wrap-ansi-cjs": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + + "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], + + "yaml": ["yaml@2.8.1", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw=="], + + "yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + + "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], + + "@csstools/postcss-cascade-layers/postcss-selector-parser": ["postcss-selector-parser@7.1.0", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA=="], + + "@csstools/postcss-is-pseudo-class/postcss-selector-parser": ["postcss-selector-parser@7.1.0", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA=="], + + "@csstools/postcss-scope-pseudo-class/postcss-selector-parser": ["postcss-selector-parser@7.1.0", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA=="], + + "@csstools/selector-resolve-nested/postcss-selector-parser": ["postcss-selector-parser@7.1.0", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA=="], + + "@csstools/selector-specificity/postcss-selector-parser": ["postcss-selector-parser@7.1.0", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA=="], + + "@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], + + "@isaacs/cliui/strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], + + "@isaacs/cliui/wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], + + "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "css-blank-pseudo/postcss-selector-parser": ["postcss-selector-parser@7.1.0", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA=="], + + "css-has-pseudo/postcss-selector-parser": ["postcss-selector-parser@7.1.0", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA=="], + + "csso/css-tree": ["css-tree@2.2.1", "", { "dependencies": { "mdn-data": "2.0.28", "source-map-js": "^1.0.1" } }, "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA=="], + + "postcss-attribute-case-insensitive/postcss-selector-parser": ["postcss-selector-parser@7.1.0", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA=="], + + "postcss-calc/postcss-selector-parser": ["postcss-selector-parser@7.1.0", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA=="], + + "postcss-custom-selectors/postcss-selector-parser": ["postcss-selector-parser@7.1.0", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA=="], + + "postcss-dir-pseudo-class/postcss-selector-parser": ["postcss-selector-parser@7.1.0", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA=="], + + "postcss-discard-comments/postcss-selector-parser": ["postcss-selector-parser@7.1.0", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA=="], + + "postcss-focus-visible/postcss-selector-parser": ["postcss-selector-parser@7.1.0", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA=="], + + "postcss-focus-within/postcss-selector-parser": ["postcss-selector-parser@7.1.0", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA=="], + + "postcss-merge-rules/postcss-selector-parser": ["postcss-selector-parser@7.1.0", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA=="], + + "postcss-minify-selectors/postcss-selector-parser": ["postcss-selector-parser@7.1.0", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA=="], + + "postcss-nesting/postcss-selector-parser": ["postcss-selector-parser@7.1.0", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA=="], + + "postcss-pseudo-class-any-link/postcss-selector-parser": ["postcss-selector-parser@7.1.0", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA=="], + + "postcss-selector-not/postcss-selector-parser": ["postcss-selector-parser@7.1.0", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA=="], + + "postcss-unique-selectors/postcss-selector-parser": ["postcss-selector-parser@7.1.0", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA=="], + + "readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "stylehacks/postcss-selector-parser": ["postcss-selector-parser@7.1.0", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA=="], + + "svgo/commander": ["commander@11.1.0", "", {}, "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ=="], + + "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], + + "@isaacs/cliui/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], + + "@isaacs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], + + "csso/css-tree/mdn-data": ["mdn-data@2.0.28", "", {}, "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g=="], + } +} diff --git a/go.mod b/go.mod index 6f62166..9cceb57 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,7 @@ go 1.25.0 require ( github.com/HugoSmits86/nativewebp v1.2.0 + github.com/NarmadaWeb/gonify/v3 v3.0.0-beta github.com/caarlos0/env/v11 v11.3.1 github.com/disintegration/imaging v1.6.2 github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd @@ -19,6 +20,7 @@ require ( github.com/philhofer/fwd v1.2.0 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/sirupsen/logrus v1.8.1 // indirect + github.com/tdewolff/parse/v2 v2.8.3 // indirect github.com/tinylib/msgp v1.4.0 // indirect golang.org/x/crypto v0.42.0 // indirect golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b // indirect @@ -44,6 +46,7 @@ require ( github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-runewidth v0.0.15 // indirect github.com/rivo/uniseg v0.2.0 // indirect + github.com/tdewolff/minify/v2 v2.24.3 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/valyala/fasthttp v1.66.0 // indirect golang.org/x/sys v0.36.0 // indirect diff --git a/go.sum b/go.sum index 941ae82..deb3a4f 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,7 @@ github.com/HugoSmits86/nativewebp v1.2.0 h1:XJtXeTg7FsOi9VB1elQYZy3n6VjYLqofSr3gGRLUOp4= github.com/HugoSmits86/nativewebp v1.2.0/go.mod h1:YNQuWenlVmSUUASVNhTDwf4d7FwYQGbGhklC8p72Vr8= +github.com/NarmadaWeb/gonify/v3 v3.0.0-beta h1:tNj6Rq9S3UUnF2800h6Ns7wmx+q7MwoZBVD24fPCSlo= +github.com/NarmadaWeb/gonify/v3 v3.0.0-beta/go.mod h1:AoLhZCGC/9XGqOE+0amArp/dFIZSfZSvbyPI/IbQ7Q0= github.com/andybalholm/brotli v1.2.0 h1:ukwgCxwYrmACq68yiUqwIWnGY0cTPox/M94sVwToPjQ= github.com/andybalholm/brotli v1.2.0/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY= github.com/caarlos0/env/v11 v11.3.1 h1:cArPWC15hWmEt+gWk7YBi7lEXTXCvpaSdCiZE2X5mCA= @@ -64,6 +66,12 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.11.0 h1:ib4sjIrwZKxE5u/Japgo/7SJV3PvgjGiRNAvTVGqQl8= github.com/stretchr/testify v1.11.0/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +github.com/tdewolff/minify/v2 v2.24.3 h1:BaKgWSFLKbKDiUskbeRgbe2n5d1Ci1x3cN/eXna8zOA= +github.com/tdewolff/minify/v2 v2.24.3/go.mod h1:1JrCtoZXaDbqioQZfk3Jdmr0GPJKiU7c1Apmb+7tCeE= +github.com/tdewolff/parse/v2 v2.8.3 h1:5VbvtJ83cfb289A1HzRA9sf02iT8YyUwN84ezjkdY1I= +github.com/tdewolff/parse/v2 v2.8.3/go.mod h1:Hwlni2tiVNKyzR1o6nUs4FOF07URA+JLBLd6dlIXYqo= +github.com/tdewolff/test v1.0.11 h1:FdLbwQVHxqG16SlkGveC0JVyrJN62COWTRyUFzfbtBE= +github.com/tdewolff/test v1.0.11/go.mod h1:XPuWBzvdUzhCuxWO1ojpXsyzsA5bFoS3tO/Q3kFuTG8= github.com/tinylib/msgp v1.4.0 h1:SYOeDRiydzOw9kSiwdYp9UcBgPFtLU2WDHaJXyHruf8= github.com/tinylib/msgp v1.4.0/go.mod h1:cvjFkb4RiC8qSBOPMGPSzSAx47nAsfhLVTCZZNuHv5o= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= diff --git a/package.json b/package.json new file mode 100644 index 0000000..86b5a72 --- /dev/null +++ b/package.json @@ -0,0 +1,17 @@ +{ + "name": "passport-css-compiler", + "private": true, + "description": "A manifest to acquire CLI tools for passport. Not a Node app, only required for compiling CSS.", + "license": "MIT", + "type": "module", + "scripts": { + "build": "postcss src/styles/*.css --dir src/assets/styles" + }, + "devDependencies": { + "@fullhuman/postcss-purgecss": "^7.0.2", + "cssnano": "^7.1.1", + "postcss": "^8.4.35", + "postcss-cli": "^11.0.0", + "postcss-preset-env": "^10.4.0" + } +} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..ffaffd1 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,16 @@ +import { purgeCSSPlugin } from "@fullhuman/postcss-purgecss"; +import postcssPresetEnv from "postcss-preset-env"; +import cssnano from "cssnano"; + +export default { + plugins: [ + purgeCSSPlugin({ + content: ["./src/**/*.hbs", "./src/**/*.js"], + }), + postcssPresetEnv({ + browsers: "last 4 versions", + autoprefixer: {}, + }), + cssnano, + ], +}; diff --git a/src/assets/fonts/InstrumentSans-Regular.woff2 b/src/assets/fonts/InstrumentSans-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..2934f1643eec1330f235e2e201615b12201db027 GIT binary patch literal 14648 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 literal 0 HcmV?d00001 diff --git a/src/assets/fonts/InstrumentSans-VariableFont_wdth,wght-subset.woff2 b/src/assets/fonts/InstrumentSans-VariableFont_wdth,wght-subset.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..b8b338e3b96999c0efdf92b7aa4c35e692da23d4 GIT binary patch literal 18360 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 TqRcnLBm9)f+=@@;>i_@%%YbQD literal 0 HcmV?d00001 diff --git a/src/assets/fonts/InstrumentSans-VariableFont_wdth,wght.ttf b/src/assets/fonts/InstrumentSans-VariableFont_wdth,wght.ttf new file mode 100644 index 0000000000000000000000000000000000000000..153c5ae4f4dae5791d43a8c8c1e88122f93ea1e6 GIT binary patch literal 193696 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

%aL~k6 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 literal 0 HcmV?d00001 diff --git a/src/assets/foo.css b/src/assets/foo.css new file mode 100644 index 0000000..efd579b --- /dev/null +++ b/src/assets/foo.css @@ -0,0 +1,2 @@ +aaaaaaaaaa +ssssssssssssss \ No newline at end of file diff --git a/src/main.go b/src/main.go index 10d5a19..a4566a4 100644 --- a/src/main.go +++ b/src/main.go @@ -1,4 +1,4 @@ -//go:generate tailwindcss -i styles/main.scss -o assets/tailwind.css --minify +//go:generate npm run build package main @@ -17,7 +17,6 @@ import ( "log/slog" "mime/multipart" "net/http" - "net/url" "os" "os/signal" "path/filepath" @@ -27,10 +26,13 @@ import ( "time" "github.com/HugoSmits86/nativewebp" + "github.com/NarmadaWeb/gonify/v3" "github.com/caarlos0/env/v11" "github.com/disintegration/imaging" "github.com/gofiber/fiber/v3" + "github.com/gofiber/fiber/v3/middleware/compress" "github.com/gofiber/fiber/v3/middleware/helmet" + "github.com/gofiber/fiber/v3/middleware/logger" "github.com/gofiber/fiber/v3/middleware/static" "github.com/gofiber/template/handlebars/v2" "github.com/google/uuid" @@ -43,7 +45,7 @@ import ( _ "modernc.org/sqlite" ) -//go:embed assets/** templates/** schema.sql +//go:embed assets/** templates/** schema.sql scripts/**.js var embeddedAssets embed.FS var devContent = `", content) + case ".css": + return fmt.Sprintf("", content) + default: + return string(content) + } }) engine.AddFunc("devContent", func() string { @@ -717,10 +746,6 @@ func main() { return "" }) - engine.AddFunc("eq", func(a, b any) bool { - return a == b - }) - router := fiber.New(fiber.Config{ Views: engine, }) @@ -732,6 +757,19 @@ func main() { return c.Redirect().To("/assets/favicon.ico") }) + router.Use(logger.New()) + + router.Use(compress.New(compress.Config{ + Level: compress.LevelBestSpeed, + })) + + router.Use(gonify.New(gonify.Config{ + MinifySVG: !app.DevMode, + MinifyCSS: !app.DevMode, + MinifyJS: !app.DevMode, + MinifyHTML: !app.DevMode, + })) + router.Use("/", static.New("./public", static.Config{ Browse: false, MaxAge: 31536000, @@ -739,10 +777,13 @@ func main() { router.Use("/assets", static.New("", static.Config{ FS: assetsDir, + Browse: false, MaxAge: 31536000, })) router.Get("/", func(c fiber.Ctx) error { + c.Response().Header.Set("Link", "; rel=preload; as=font; type=font/woff2; crossorigin, ; rel=preload; as=style; type=text/css") + renderData := fiber.Map{ "SearchProviderURL": app.Config.SearchProvider.URL, "SearchParam": app.Config.SearchProvider.Query, @@ -822,7 +863,7 @@ func main() { return c.Render("views/admin/index", fiber.Map{ "Categories": app.CategoryManager.GetCategories(), - }, "layouts/main") + }, "layouts/admin") }) api := router.Group("/api") @@ -879,9 +920,7 @@ func main() { }) } - filename := fmt.Sprintf("%d_%s.svg", time.Now().Unix(), strings.ReplaceAll(req.Name[:min(10, len(req.Name))], " ", "_")) - - iconPath, err := UploadFile(file, filename, contentType, c) + iconPath, err := UploadFile(file, contentType, c) if err != nil { return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ "message": "Failed to upload file, please try again!", @@ -974,9 +1013,7 @@ func main() { }) } - filename := fmt.Sprintf("%d_%s.webp", time.Now().Unix(), strings.ReplaceAll(req.Name[:min(10, len(req.Name))], " ", "_")) - - iconPath, err := UploadFile(file, filename, contentType, c) + iconPath, err := UploadFile(file, contentType, c) if err != nil { slog.Error("Failed to upload file", "error", err) return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ @@ -1068,9 +1105,7 @@ func main() { oldIconPath := category.Icon - filename := fmt.Sprintf("%d_%s.svg", time.Now().Unix(), strings.ReplaceAll(req.Name[:min(10, len(req.Name))], " ", "_")) - - iconPath, err := UploadFile(file, filename, contentType, c) + iconPath, err := UploadFile(file, contentType, c) if err != nil { slog.Error("Failed to upload file", "error", err) return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ @@ -1188,9 +1223,7 @@ func main() { oldIconPath := link.Icon - filename := fmt.Sprintf("%d_%s.webp", time.Now().Unix(), strings.ReplaceAll(req.Name[:min(10, len(req.Name))], " ", "_")) - - iconPath, err := UploadFile(file, filename, contentType, c) + iconPath, err := UploadFile(file, contentType, c) if err != nil { slog.Error("Failed to upload file", "error", err) return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ diff --git a/src/scripts/admin.js b/src/scripts/admin.js new file mode 100644 index 0000000..11fe07d --- /dev/null +++ b/src/scripts/admin.js @@ -0,0 +1,1106 @@ +// idfk what this variable capitalization is, it's a mess +let modalContainer = document.getElementById("modal-container"); +let modal = modalContainer.querySelector("div"); +let pageElement = document.getElementById("blur-target"); +let iconUploadInput = document.getElementById("icon-upload"); +let targetCategoryID = null; +let activeModal = null; + +let teleportStorage = document.getElementById("teleport-storage"); +let confirmActions = document.getElementById("confirm-actions"); +let selectIconButton = document.getElementById("select-icon-button"); + +document.addEventListener("DOMContentLoaded", () => { + modalContainer.classList.remove("hidden"); + modalContainer.classList.add("flex"); +}); + +/** + * Submits a form to the given URL + * @param {Event} event - The event that triggered the function + * @param {string} url - The URL to submit the form to + * @param {"category" | "link"} target - The target to close the modal for + * @returns {Promise} + */ +async function submitRequest(event, url, target) { + event.preventDefault(); + let data = new FormData(event.target); + + let res = await fetch(url, { + method: "POST", + body: data, + }); + + if (res.status === 201) { + closeModal(target); + document.getElementById(`${target}-form`).reset(); + location.reload(); + } else { + let json = await res.json(); + document.getElementById(`${target}-message`).innerText = json.message; + } +} + +/** + * Adds an event listener for the given from to error check after the first submit + * @param {"category" | "link"} form - The form to initialize + * @returns {void} + */ +function addErrorListener(form) { + document + .getElementById(`${form}-form`) + .querySelector("button") + .addEventListener("click", (event) => { + event.target.parentElement + .querySelectorAll("[required]") + .forEach((el) => { + el.classList.add("invalid:border-[#861024]!"); + }); + }); +} + +/** + * Currently editing link or category + * @typedef {Object} actionButtonObj + * @property {string} clickAction - The function to be called when this button is clicked + * @property {string} label - The label of the button + */ + +/** + * Clones the edit actions template and returns it + * @param {[actionButtonObj, actionButtonObj]} primaryActions - The primary actions to clone + * @returns {HTMLElement} The cloned edit actions element + */ +function cloneEditActions(primaryActions) { + let editActions = document + .getElementById("template-edit-actions") + .cloneNode(true); + editActions.removeAttribute("id"); + editActions.classList.remove("hidden"); + + let i = 0; + for (i = 0; i < primaryActions.length; i++) { + let actionButtonObj = primaryActions[i]; + + let actionButton = editActions.querySelector( + `div[data-primary-actions] button:nth-child(${i + 1})` + ); + actionButton.setAttribute("onclick", actionButtonObj.clickAction); + actionButton.setAttribute("aria-label", actionButtonObj.label); + } + + return editActions; +} + +addErrorListener("link"); +document + .getElementById("link-form") + .addEventListener("submit", async (event) => { + event.preventDefault(); + let data = new FormData(event.target); + + let res = await fetch(`/api/category/${targetCategoryID}/link`, { + method: "POST", + body: data, + }); + + if (res.status === 201) { + let json = await res.json(); + + let category = document.getElementById( + `${targetCategoryID}_category` + ); + let linkGrid = category.nextElementSibling; + + let newLinkCard = document + .getElementById("template-link-card") + .cloneNode(true); + + newLinkCard.classList.remove("hidden"); + newLinkCard.classList.add("link-card", "admin", "relative"); + + let newLinkImgElement = newLinkCard.querySelector( + "div[data-img-container] img" + ); + + newLinkImgElement.src = await processFile(data.get("icon")); + newLinkImgElement.alt = data.get("name"); + + newLinkCard.querySelector("h3").textContent = data.get("name"); + newLinkCard.querySelector("p").textContent = + data.get("description"); + + newLinkCard.setAttribute("id", `${json.link.id}_link`); + + let editActions = cloneEditActions([ + { + clickAction: "editLink(this)", + label: "Edit link", + }, + { + clickAction: "deleteLink(this)", + label: "Delete link", + }, + ]); + + editActions.classList.add("absolute", "right-1", "top-1"); + + newLinkCard.appendChild(editActions); + + // append the card as the second to last element + linkGrid.insertBefore(newLinkCard, linkGrid.lastElementChild); + closeModal("link"); + + // after the close animation plays + setTimeout(() => { + document.getElementById(`link-form`).reset(); + }, 300); + } else { + let json = await res.json(); + document.getElementById(`link-message`).innerText = json.message; + } + }); + +addErrorListener("category"); +document + .getElementById("category-form") + .addEventListener("submit", async (event) => { + event.preventDefault(); + let data = new FormData(event.target); + + let res = await fetch(`/api/category`, { + method: "POST", + body: data, + }); + + if (res.status === 201) { + let json = await res.json(); + + let newCategory = document + .getElementById("template-category") + .cloneNode(true); + + let linkGrid = newCategory.querySelector("div:nth-child(2)"); + let categoryHeader = newCategory.querySelector(".category-header"); + categoryHeader.setAttribute("id", `${json.category.id}_category`); + categoryHeader.querySelector("h2").textContent = json.category.name; + + let editActions = cloneEditActions([ + { + clickAction: "editCategory(this)", + label: "Edit category", + }, + { + clickAction: "deleteCategory(this)", + label: "Delete category", + }, + ]); + + editActions.classList.add("pl-2"); + + categoryHeader.appendChild(editActions); + + let categoryImg = categoryHeader.querySelector(".category-img"); + + categoryImg.querySelector("img").src = await processFile( + data.get("icon") + ); + + linkGrid + .querySelector("div") + .setAttribute( + "onclick", + `openModal('link', ${json.category.id})` + ); + + let addCategoryButton = document.getElementById( + "add-category-button" + ); + addCategoryButton.parentElement.insertBefore( + categoryHeader, + addCategoryButton + ); + addCategoryButton.parentElement.insertBefore( + linkGrid, + addCategoryButton + ); + + closeModal("category"); + + // after the close animation plays + setTimeout(() => { + document.getElementById(`category-form`).reset(); + }, 300); + } else { + let json = await res.json(); + document.getElementById(`category-message`).innerText = + json.message; + } + }); + +// when the background is clicked, close the modal +modalContainer.addEventListener("click", (event) => { + if (event.target === modalContainer) { + closeModal(); + } +}); + +function selectIcon() { + iconUploadInput.click(); +} + +/** + * Processes a file and returns a data URL. + * @param {File} file The file to process. + * @returns {Promise} A promise that resolves to a data URL. + */ +async function processFile(file) { + let reader = new FileReader(); + return new Promise((resolve) => { + if (file.type === "image/svg+xml") { + reader.addEventListener("load", async (event) => { + let svgString = event.target.result; + + svgString = svgString.replaceAll( + "currentColor", + "oklch(87% 0.015 286)" + ); + + // turn svgString into a data URL + resolve( + "data:image/svg+xml;base64," + + btoa(unescape(encodeURIComponent(svgString))) + ); + }); + + reader.readAsText(file); + } else { + // these should be jpg, png, or webp + // make a DataURL out of it + reader.addEventListener("load", async (event) => { + resolve(event.target.result); + }); + + reader.readAsDataURL(file); + } + }); +} + +let targetedImageElement = null; +iconUploadInput.addEventListener("change", async (event) => { + let file = event.target.files[0]; + if (file === null) { + return; + } + + if (targetedImageElement === null) { + throw new Error( + "icon upload element was clicked, but no target image element was set" + ); + } + + let dataURL = await processFile(file); + targetedImageElement.src = dataURL; +}); + +function openModal(modalKind, categoryID) { + activeModal = modalKind; + targetCategoryID = categoryID; + + pageElement.style.filter = "blur(20px)"; + document.getElementById(modalKind + "-contents").classList.remove("hidden"); + + modalContainer.classList.add("is-visible"); + modal.classList.add("is-visible"); + + if (document.getElementById(modalKind + "-form") !== null) { + document.getElementById(modalKind + "-form").reset(); + } +} + +function closeModal() { + pageElement.style.filter = ""; + + modalContainer.classList.remove("is-visible"); + modal.classList.remove("is-visible"); + + setTimeout(() => { + document + .getElementById(activeModal + "-contents") + .classList.add("hidden"); + activeModal = null; + }, 300); + + if (document.getElementById(activeModal + "-form") !== null) { + document + .getElementById(activeModal + "-form") + .querySelectorAll("[required]") + .forEach((el) => { + el.classList.remove("invalid:border-[#861024]!"); + }); + } + + targetCategoryID = null; +} + +/** + * Currently editing link or category + * @typedef {Object} currentlyEditingObj + * @property {"link" | "category" | undefined} type - The type of the currently editing element + * @property {string | undefined} linkID - The ID of the link we are currently editing if we are editing a link + * @property {string | undefined} categoryID - The ID of the category we are currently editing, or that the link belongs to + * @property {string | undefined} originalText - The original text of the currently editing element + * @property {string | undefined} originalDescription - The original description of the currently editing element + * @property {string | undefined} icon - The original icon of the currently editing element + * @property {Function | undefined} cleanup - The cleanup function for the currently editing element + */ + +/** @type {currentlyEditingObj} */ +let currentlyEditing = {}; + +/** + * Teleports the upload overlay to the given image node + * @param {HTMLElement} element The node to teleport into the destination + * @param {HTMLElement} destination The image node to teleport the upload overlay into + * @returns {HTMLElement} A reference to the teleported element + */ +function teleportElement(element, destination) { + destination.appendChild(element); +} + +function unteleportElement(element) { + teleportElement(element, teleportStorage); +} + +function confirmEdit() { + if (currentlyEditing.cleanup !== undefined) { + // this function could be called via deleting something, which doesn't have a cleanup function + currentlyEditing.cleanup(); + } + + switch (currentlyEditing.type) { + case "link": + confirmLinkEdit(); + break; + case "category": + confirmCategoryEdit(); + break; + default: + console.error("Unknown currentlyEditing type"); + break; + } +} + +function cancelEdit() { + if (currentlyEditing.cleanup !== undefined) { + // this function could be called via deleting something, which doesn't have a cleanup function + currentlyEditing.cleanup(); + } + + switch (currentlyEditing.type) { + case "link": + cancelLinkEdit(); + break; + case "category": + cancelCategoryEdit(currentlyEditing.originalText); + break; + default: + console.error("Unknown currentlyEditing type"); + break; + } + + currentlyEditing = {}; +} + +/** + * Edits the link with the given html element + * @param {HTMLElement} target The target element that was clicked + */ +function editLink(target) { + let startTime = performance.now(); + + // we do it in this dynamic way so that if we add a new link without refreshing the page, it still works + let linkEl = target.closest(".link-card"); + let linkID = parseInt(linkEl.id); + let categoryID = parseInt(linkEl.parentElement.previousElementSibling.id); + + if (currentlyEditing.linkID !== undefined) { + // cancel the edit if it's already in progress + cancelEdit(); + } + + let linkImg = linkEl.querySelector("div[data-img-container] img"); + let linkName = linkEl.querySelector("div[data-text-container] h3"); + let linkDesc = linkEl.querySelector("div[data-text-container] p"); + let editActions = linkEl.querySelector("[data-edit-actions]"); + + currentlyEditing = { + type: "link", + linkID: linkID, + categoryID: categoryID, + originalText: linkName.textContent, + originalDescription: linkDesc.textContent, + icon: linkImg.src, + }; + + if (!currentlyEditing.linkID || !currentlyEditing.categoryID) { + throw new Error("failed to find link ID or category ID"); + } + + iconUploadInput.accept = "image/*"; + targetedImageElement = linkImg; + + teleportElement(selectIconButton, linkImg.parentElement); + teleportElement(confirmActions, editActions); + + editActions.querySelector("div[data-primary-actions]").style.display = + "none"; + + requestAnimationFrame(() => { + currentlyEditing.cleanup = replaceWithResizableTextarea([ + { targetEl: linkName, fill: false }, + { targetEl: linkDesc }, + ]); + // by adding a delay, we dont block the UI + setTimeout(() => { + linkEl.querySelector("textarea").focus(); + }, 0); + }); +} + +async function confirmLinkEdit() { + let linkEl = document.getElementById(`${currentlyEditing.linkID}_link`); + let linkNameInput = linkEl.querySelector("textarea"); + let linkDescInput = linkNameInput.nextElementSibling; + + linkNameInput.value = linkNameInput.value.trim(); + linkDescInput.value = linkDescInput.value.trim(); + if (linkNameInput.value === "") { + return; + } + + let formData = new FormData(); + if (linkNameInput.value !== currentlyEditing.originalText) { + formData.append("name", linkNameInput.value); + } + + if (linkDescInput.value !== currentlyEditing.originalDescription) { + formData.append("description", linkDescInput.value); + } + + if (iconUploadInput.files.length > 0) { + formData.append("icon", iconUploadInput.files[0]); + } + + // nothing to update + if ( + formData.get("name") === null && + formData.get("description") === null && + formData.get("icon") === null + ) { + return; + } + + let res = await fetch( + `/api/category/${currentlyEditing.categoryID}/link/${currentlyEditing.linkID}`, + { + method: "PATCH", + body: formData, + } + ); + + if (res.status === 200) { + iconUploadInput.value = ""; + + currentlyEditing.icon = undefined; + cancelLinkEdit(linkNameInput.value, linkDescInput.value); + currentlyEditing = {}; + } else { + console.error("Failed to edit category"); + } +} + +function cancelLinkEdit( + text = currentlyEditing.originalText, + description = currentlyEditing.originalDescription +) { + let linkEl = document.getElementById(`${currentlyEditing.linkID}_link`); + let linkInput = linkEl.querySelector("textarea"); + let linkTextarea = linkInput.nextElementSibling; + let linkImg = linkEl.querySelector("div[data-img-container] img"); + let editActions = linkEl.querySelector("[data-edit-actions]"); + + if (currentlyEditing.icon !== undefined) { + linkImg.src = currentlyEditing.icon; + } + + editActions.querySelector("div[data-primary-actions]").style.display = ""; + + // teleport the teleported elements back to the body for literally safe keeping + unteleportElement(selectIconButton); + unteleportElement(confirmActions); + + restoreElementFromInput(linkInput, text); + restoreElementFromInput(linkTextarea, description); + + currentlyEditing = {}; + targetedImageElement = null; +} + +/** + * Deletes the link with the given html element + * @param {HTMLElement} target The target element that was clicked + */ +function deleteLink(target) { + // we do it in this dynamic way so that if we add a new link without refreshing the page, it still works + let linkEl = target.closest(".link-card"); + let linkID = parseInt(linkEl.id); + let categoryID = parseInt(linkEl.parentElement.previousElementSibling.id); + + if (currentlyEditing.linkID !== undefined) { + // cancel the edit if it's already in progress + cancelEdit(); + } + + currentlyEditing.linkID = linkID; + currentlyEditing.categoryID = categoryID; + + let linkNameSpan = document.getElementById("link-name"); + linkNameSpan.textContent = linkEl.querySelector("h3").textContent; + + openModal("link-delete"); +} + +async function confirmDeleteLink() { + let res = await fetch( + `/api/category/${currentlyEditing.categoryID}/link/${currentlyEditing.linkID}`, + { + method: "DELETE", + } + ); + + if (res.status === 200) { + let linkEl = document.getElementById(`${currentlyEditing.linkID}_link`); + linkEl.remove(); + + closeModal(); + currentlyEditing = {}; + } +} + +/** + * Edits the category with the given html element + * @param {HTMLElement} target The target element that was clicked + */ +function editCategory(target) { + let categoryEl = target.closest(".category-header"); + let categoryID = parseInt(categoryEl.id); + + if (currentlyEditing.linkID !== undefined) { + // cancel the edit if it's already in progress + cancelEdit(); + } + + let categoryName = categoryEl.querySelector("h2"); + let categoryIcon = categoryEl.querySelector("div[data-img-container] img"); + let editActions = categoryEl.querySelector("[data-edit-actions]"); + + currentlyEditing = { + type: "category", + categoryID: categoryID, + originalText: categoryName.textContent, + icon: categoryIcon.src, + }; + + if (!currentlyEditing.categoryID) { + throw new Error("failed to find category ID"); + } + + iconUploadInput.accept = "image/svg+xml"; + targetedImageElement = categoryIcon; + + teleportElement(selectIconButton, categoryIcon.parentElement); + teleportElement(confirmActions, editActions); + + editActions.querySelector("div[data-primary-actions]").style.display = + "none"; + + requestAnimationFrame(() => { + currentlyEditing.cleanup = replaceWithResizableTextarea([ + { targetEl: categoryName, fill: false }, + ]); + // by adding a delay, we dont block the UI + setTimeout(() => { + categoryEl.querySelector("textarea").focus(); + }, 0); + }); +} + +async function confirmCategoryEdit() { + let categoryEl = document.getElementById( + `${currentlyEditing.categoryID}_category` + ); + let categoryInput = categoryEl.querySelector("textarea"); + + if (categoryInput.value === "") { + return; + } + + categoryInput.value = categoryInput.value.trim(); + + let formData = new FormData(); + if (categoryInput.value !== currentlyEditing.originalText) { + formData.append("name", categoryInput.value); + } + + if (iconUploadInput.files.length > 0) { + formData.append("icon", iconUploadInput.files[0]); + } + + // nothing to update + if (formData.get("name") === null && formData.get("icon") === null) { + return; + } + + let res = await fetch(`/api/category/${currentlyEditing.categoryID}`, { + method: "PATCH", + body: formData, + }); + + if (res.status === 200) { + iconUploadInput.value = ""; + + currentlyEditing.icon = undefined; + + cancelCategoryEdit(categoryInput.value); + + currentlyEditing = {}; + } else { + console.error("Failed to edit category"); + } +} + +function cancelCategoryEdit(text = currentlyEditing.originalText) { + let categoryEl = document.getElementById( + `${currentlyEditing.categoryID}_category` + ); + + let categoryInput = categoryEl.querySelector("textarea"); + let categoryIcon = categoryEl.querySelector(".category-img img"); + let editActions = categoryEl.querySelector("[data-edit-actions]"); + + if (currentlyEditing.icon !== undefined) { + categoryIcon.src = currentlyEditing.icon; + } + + unteleportElement(selectIconButton); + unteleportElement(confirmActions); + + editActions.querySelector("div[data-primary-actions]").style.display = ""; + + restoreElementFromInput(categoryInput, text); + + currentlyEditing = {}; + targetedImageElement = null; +} + +/** + * Deletes the category with the given html element + * @param {HTMLElement} target The target element that was clicked + */ +function deleteCategory(target) { + let categoryEl = target.closest(".category-header"); + + if (currentlyEditing.categoryID !== undefined) { + // cancel the edit if it's already in progress + cancelEdit(); + } + + let categoryID = parseInt(categoryEl.id); + + currentlyEditing.categoryID = categoryID; + + let categoryNameSpan = document.getElementById("category-name"); + categoryNameSpan.textContent = categoryEl.querySelector("h2").textContent; + + openModal("category-delete"); +} + +async function confirmDeleteCategory() { + let res = await fetch(`/api/category/${currentlyEditing.categoryID}`, { + method: "DELETE", + }); + + if (res.status === 200) { + let categoryEl = document.getElementById( + `${currentlyEditing.categoryID}_category` + ); + // get the next element and remove it (its the link grid) + let nextEl = categoryEl.nextElementSibling; + nextEl.remove(); + categoryEl.remove(); + + closeModal(); + currentlyEditing = {}; + } +} + +function roundToNearestHundredth(num) { + return Math.round(num * 100) / 100; +} + +const stylesToCopy = [ + "font-family", + "font-size", + "font-weight", + "font-style", + "color", + "line-height", + "letter-spacing", + "text-transform", + "text-align", +]; + +let _textMeasuringSpan, + _textMeasuringDiv = null; + +/** + * @typedef {Object} ResizeableTextareaOptions + * @property {HTMLElement} targetEl The element to replace. + * @property {boolean} [fill=true] Whether to make the textarea fill the available space, or grow with the text inside. + */ + +/** + * Replaces an element with a resizable textarea containing the same text. + * @param {ResizeableTextareaOptions[]} targetEls The elements to replace. + * @returns (() => void) A cleanup function to remove event listeners + */ +function replaceWithResizableTextarea(targetEls) { + let startTime = performance.now(); + + /** + * @typedef {Object} TargetInfo + * @property {HTMLElement} targetEl The element to replace. + * @property {boolean} fill Whether to make the textarea fill the available space, or grow with the text inside. + * @property {string} originalText The original text of the element + * @property {CSSStyleDeclaration} computedStyle The computed style of the element + * @property {DOMRect} boundingRect The bounding rect of the element + * @property {number} borderWidth The border width of the element + * @property {number} borderHeight The border height of the element + * @property {number} maxWidth The maximum width of the element + */ + + /** + * @type {TargetInfo[]} + */ + let targetInfos = []; + + targetEls.forEach((target) => { + let targetEl = target.targetEl; + let fill = target.fill === undefined ? true : target.fill; + // step 1: batch reads + const originalText = targetEl.textContent; + const computedStyle = window.getComputedStyle(targetEl); + const boundingRect = targetEl.getBoundingClientRect(); + const parentBoundingRect = + targetEl.parentElement.getBoundingClientRect(); + + const borderWidth = + parseFloat(computedStyle.borderLeftWidth) + + parseFloat(computedStyle.borderRightWidth); + const borderHeight = + parseFloat(computedStyle.borderTopWidth) + + parseFloat(computedStyle.borderBottomWidth); + + let maxWidth = parentBoundingRect.width - borderWidth; + // take care of category headers specifically because the parent bounding box contains two other elements + if (targetEl.tagName === "H2") { + let imageWidth = + targetEl.previousElementSibling.getBoundingClientRect().width; + let actionButtonWidth = + targetEl.nextElementSibling.getBoundingClientRect().width; + + maxWidth -= imageWidth + actionButtonWidth; + } + + maxWidth = roundToNearestHundredth(maxWidth); + + targetInfos.push({ + targetEl, + fill, + originalText, + computedStyle, + boundingRect, + borderWidth, + borderHeight, + maxWidth, + }); + }); + + const caretBuffer = 10; + + // step 2: calculate styles + let elsInitialStyles = []; + + targetInfos.forEach((targetInfo) => { + let fill = targetInfo.fill; + + let initialStyles = {}; + initialStyles.width = ""; + initialStyles.height = `${parseFloat( + roundToNearestHundredth(targetInfo.boundingRect.height) + )}px`; + if (fill) { + initialStyles.width = `100%`; + } else { + if (!_textMeasuringSpan) { + _textMeasuringSpan = document.createElement("span"); + // Keep it off-screen and static once appended + Object.assign(_textMeasuringSpan.style, { + position: "absolute", + left: "-9999px", + top: "0", + visibility: "hidden", + whiteSpace: "nowrap", + }); + document.body.appendChild(_textMeasuringSpan); + } + + stylesToCopy.forEach((prop) => { + _textMeasuringSpan.style[prop] = targetInfo.computedStyle[prop]; + }); + + _textMeasuringSpan.textContent = + targetInfo.originalText === "" + ? targetInfo.boundingRect.placeholder || "W" + : targetInfo.originalText; + + let measuredTextWidth = roundToNearestHundredth( + _textMeasuringSpan.getBoundingClientRect().width + ); + + let finalWidth = Math.min( + measuredTextWidth + caretBuffer, + targetInfo.maxWidth + ); + initialStyles.width = `${finalWidth}px`; + } + + elsInitialStyles.push({ + originalText: targetInfo.originalText, + targetEl: targetInfo.targetEl, + targetElComputedStyle: targetInfo.computedStyle, + fill: fill, + initialStyles, + }); + }); + + // step 3: batch writes + let inputElements = []; + + elsInitialStyles.forEach((elInfo) => { + const inputElement = document.createElement("textarea"); + inputElement.value = elInfo.originalText; + inputElement.className = "resizable-input"; + inputElement.placeholder = elInfo.targetEl.dataset.placeholder; + inputElement.dataset.originalElementType = elInfo.targetEl.tagName; + inputElement.dataset.originalClassName = elInfo.targetEl.className; + + let computedStyles = {}; + // Apply inherited styles + stylesToCopy.forEach((prop) => { + computedStyles[prop] = elInfo.targetElComputedStyle[prop]; + }); + + // Apply custom styles and calculated dimensions + Object.assign(inputElement.style, { + backgroundColor: "var(--color-base)", + border: `1px solid var(--color-highlight-sm)`, + borderRadius: "0.375rem", + resize: "none", + overflow: "hidden", + outline: "none", + ...computedStyles, // Apply calculated width and height + ...elInfo.initialStyles, // Apply calculated width and height + }); + + inputElement.setAttribute( + "maxlength", + elInfo.targetEl.tagName[0] === "H" ? 50 : 150 + ); + + inputElements.push({ + targetEl: elInfo.targetEl, + fill: elInfo.fill, + element: inputElement, + }); + }); + + function resize(inputElement, fill = false) { + const currentInputComputedStyle = window.getComputedStyle(inputElement); + const currentInputBorderWidth = + parseFloat(currentInputComputedStyle.borderLeftWidth) + + parseFloat(currentInputComputedStyle.borderRightWidth); + + const currentParentElBoundingRectWidth = + inputElement.parentElement.getBoundingClientRect().width; + + let maxWidth = roundToNearestHundredth( + currentParentElBoundingRectWidth + ); + + // is it maybe a bit of some math that doesnt entirely make sense to me? you bet. But does it work? Hell yeah it does + if (inputElement.dataset.originalElementType === "H2") { + let imageWidth = + inputElement.previousElementSibling.getBoundingClientRect() + .width; + let actionButtonWidth = + inputElement.nextElementSibling.getBoundingClientRect().width; + + // the brain cells rub together and this vaguely makes sense to me I think but I cant explain it + maxWidth -= imageWidth + actionButtonWidth + caretBuffer; + maxWidth += currentInputBorderWidth; + } + + let currentContentWidth; + + if (!fill) { + if (!_textMeasuringSpan) { + // Should already be created, but just in case + _textMeasuringSpan = document.createElement("span"); + Object.assign(_textMeasuringSpan.style, { + position: "absolute", + left: "-9999px", + top: "0", + visibility: "hidden", + whiteSpace: "nowrap", + }); + document.body.appendChild(_textMeasuringSpan); + } + + stylesToCopy.forEach((prop) => { + _textMeasuringSpan.style[prop] = + currentInputComputedStyle[prop]; + }); + + _textMeasuringSpan.textContent = + inputElement.value === "" + ? inputElement.placeholder || "W" + : inputElement.value; + + let measuredTextWidth = + _textMeasuringSpan.getBoundingClientRect().width; + + currentContentWidth = Math.min( + roundToNearestHundredth( + measuredTextWidth + currentInputBorderWidth + ) + caretBuffer, + maxWidth + ); + } else { + // if fill is true, width is flexible, but for measuring we need to know the *actual* width of the content + currentContentWidth = maxWidth; + } + + if (!_textMeasuringDiv) { + _textMeasuringDiv = document.createElement("div"); + Object.assign(_textMeasuringDiv.style, { + position: "absolute", + left: "-9999px", + top: "0", + visibility: "hidden", + // Allow wrapping exactly like a textarea + whiteSpace: "pre-wrap", + wordWrap: "break-word", + }); + document.body.appendChild(_textMeasuringDiv); + } + + [ + "borderLeftWidth", + "borderRightWidth", + "borderTopWidth", + "borderBottomWidth", + ...stylesToCopy, + ].forEach((prop) => { + _textMeasuringDiv.style[prop] = currentInputComputedStyle[prop]; + }); + + _textMeasuringDiv.style.width = `${currentContentWidth}px`; + _textMeasuringDiv.textContent = + inputElement.value === "" + ? inputElement.placeholder || "W" + : inputElement.value; + let measuredContentHeight = + _textMeasuringDiv.getBoundingClientRect().height; + + // we set the height = 0 so that if a row is deleted, the height will be recalculated correctly + inputElement.style.width = `${currentContentWidth}px`; + inputElement.style.height = "0px"; + inputElement.style.height = `${measuredContentHeight}px`; + } + + function resizeAll() { + inputElements.forEach((inputEl) => { + resize(inputEl.element, inputEl.fill); + }); + } + + // step 4: append + inputElements.forEach((inputEl) => { + inputEl.targetEl.parentNode.replaceChild( + inputEl.element, + inputEl.targetEl + ); + inputEl.element.addEventListener("input", () => { + resize(inputEl.element, inputEl.fill); + }); + }); + + let resizeScheduled = false; + + function windowResize() { + if (!resizeScheduled) { + resizeScheduled = true; + requestAnimationFrame(() => { + resizeAll(); + resizeScheduled = false; + }); + } + } + + window.addEventListener("resize", windowResize); + + // if the caller wants to focus the textarea, they can do it themselves + + return () => { + window.removeEventListener("resize", windowResize); + }; +} + +/** + * Restores an element from a textarea + * @param {HTMLElement} inputEl The textarea to restore + * @param {string} originalText The original text of the textarea + */ +function restoreElementFromInput(inputEl, originalText) { + const computedStyle = window.getComputedStyle(inputEl); + let styles = {}; + + let elementType = inputEl.dataset.originalElementType; + const newElement = document.createElement(elementType); + newElement.textContent = originalText; + newElement.className = inputEl.dataset.originalClassName; + newElement.dataset.placeholder = inputEl.placeholder; + + stylesToCopy.forEach((prop) => { + styles[prop] = computedStyle[prop]; + }); + + Object.assign(newElement.style, { + ...styles, + border: "1px solid #0000", + }); + + inputEl.parentNode.replaceChild(newElement, inputEl); +} diff --git a/src/styles/adminUi.css b/src/styles/adminUi.css new file mode 100644 index 0000000..ffbb209 --- /dev/null +++ b/src/styles/adminUi.css @@ -0,0 +1,70 @@ +.modal-bg { + visibility: hidden; + opacity: 0; +} + +.modal-bg.is-visible { + visibility: visible; + opacity: 1; +} + +.modal { + opacity: 0; +} + +.modal.is-visible { + opacity: 1; +} + +@media (prefers-reduced-motion: no-preference) { + .modal-bg { + visibility: hidden; + opacity: 0; + + transition: opacity 0.3s ease, visibility 0s 0.3s; + transition-timing-function: cubic-bezier(0.45, 0, 0.55, 1); + } + + .modal-bg.is-visible { + visibility: visible; + opacity: 1; + transition-delay: 0s; + } + + .modal { + opacity: 0; + transform: translateY(20px) scale(0.95); + + transition: opacity 0.3s ease, transform 0.3s ease; + transition-timing-function: cubic-bezier(0.45, 0, 0.55, 1); + } + + .modal.is-visible { + opacity: 1; + visibility: visible; + transform: translateY(0) scale(1); + transition-delay: 0s; + } +} + +.action-button { + display: flex; + width: fit-content; + height: fit-content; + padding: 0.25rem; + background-color: var(--color-highlight-sm); + border: 1px solid color-mix(in srgb, var(--color-highlight) 70%, #0000); + border-radius: 9999px; + box-shadow: var(--shadow-sm); + cursor: pointer; + transition: filter 0.15s cubic-bezier(0.45, 0, 0.55, 1); + contain: layout style paint; + + &:hover { + filter: brightness(125%); + } + + &:active { + filter: brightness(95%); + } +} diff --git a/src/styles/main.css b/src/styles/main.css new file mode 100644 index 0000000..3430f82 --- /dev/null +++ b/src/styles/main.css @@ -0,0 +1,348 @@ +@layer reset, base, components, utilities; +@font-face { + font-family: "Instrument Sans"; + src: url("/assets/fonts/InstrumentSans-VariableFont_wdth,wght.woff2") + format("woff2"); + font-display: swap; +} + +@layer reset { + /* + Josh's Custom CSS Reset slightly Modified + https://www.joshwcomeau.com/css/custom-css-reset/ + */ + + *, + *::before, + *::after { + box-sizing: border-box; + } + + * { + line-height: calc(1em + 0.5rem); + margin: 0; + padding: 0; + } + + body { + -webkit-font-smoothing: antialiased; + } + + img, + picture, + video, + canvas, + svg { + display: block; + max-width: 100%; + } + + input, + button, + textarea, + select { + font: inherit; + } + + button { + cursor: pointer; + } + + p, + h1, + h2, + h3, + h4, + h5, + h6 { + word-break: break-word; + } + + p { + text-wrap: pretty; + hyphens: auto; + } + + h1, + h2, + h3, + h4, + h5, + h6 { + text-wrap: balance; + } + + a { + color: #fff; + } +} + +@layer base { + :root { + --family-sans: "Instrument Sans", ui-sans-serif, system-ui, sans-serif, + "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", + "Noto Color Emoji"; + --color-accent: oklch(57.93% 0.258 294.12); + --color-success: oklch(70.19% 0.158 160.44); + --color-error: oklch(53% 0.251 28.48); + + --color-base: oklch(11% 0.007 285); + --color-surface: oklch(19% 0.007 285.66); + --color-overlay: oklch(26% 0.008 285.66); + + --color-muted: oklch(63% 0.015 286); + --color-subtle: oklch(72% 0.015 286); + --color-text: oklch(87% 0.015 286); + + --color-highlight-sm: oklch(30.67% 0.007 286); + --color-highlight: oklch(39.26% 0.01 286); + --color-highlight-lg: oklch(47.72% 0.011 286); + + --spacing-1: 0.125rem; + --spacing-2: 0.25rem; + --spacing-3: 0.375rem; + --spacing-4: 0.5rem; + --spacing-5: 0.625rem; + --spacing-6: 0.75rem; + --spacing-7: 0.875rem; + --spacing-8: 1rem; + } + + html { + font-family: var(--family-sans); + color-scheme: dark; + color: var(--color-text); + background-color: var(--color-surface); + } + + h1, + h2, + h3, + h4, + h5, + h6 { + font-weight: 600; + } + + h1 { + font-size: clamp(42px, 10vw, 64px); + } + + h2 { + font-size: clamp(30px, 6vw, 36px); + } + + h3 { + font-size: 1.25rem; + } + + input:not(.search) { + @apply px-4 py-2 rounded-md w-full bg-surface border border-highlight/70 placeholder:text-highlight text-text focus-visible:outline-none transition-colors duration-300 ease-out overflow-hidden; + + &[type="file"] { + @apply p-0 cursor-pointer; + + &::file-selector-button { + @apply px-2 py-2 mr-1 bg-highlight text-subtle cursor-pointer; + } + } + } +} + +@layer components { + .link-card { + background: var(--color-overlay); + display: flex; + flex-direction: row; + text-decoration: none; + border-radius: var(--spacing-8); + padding: var(--spacing-5); + align-items: center; + transition-property: box-shadow, transform, translate; + transition-duration: 150ms; + transition-timing-function: cubic-bezier(0.45, 0, 0.55, 1); + box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), + 0 2px 4px -2px rgb(0 0 0 / 0.1); + contain: layout style paint; + + &:not(.admin) { + &:hover { + box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), + 0 4px 6px -4px rgb(0 0 0 / 0.1); + transform: translateY(-4px); + } + + &:active { + box-shadow: 0 2px 4px -2px rgb(0 0 0 / 0.1); + transform: translateY(2px); + } + } + } + + @media (prefers-reduced-motion: reduce) { + .link-card { + transition: none; + + &:hover { + transform: none; + } + + &:active { + transform: none; + } + } + } + + /* Div that holds the image */ + .link-card div[data-img-container] { + flex-shrink: 0; + padding-right: var(--spacing-4); + } + + .link-card div[data-img-container] img { + user-select: none; + border-radius: var(--spacing-3); + aspect-ratio: 1/1; + object-fit: cover; + } + + /* Div that holds the text */ + .link-card div[data-text-container] { + display: flex; + flex-grow: 1; + flex-direction: column; + row-gap: 1px; + overflow: hidden; + word-break: break-all; + } + + .link-card div[data-text-container] p { + color: var(--color-subtle); + white-space: pre-wrap; + border: 1px solid #0000; + min-height: calc(1em + 0.5rem); + } + + .new-link-card { + display: flex; + flex-direction: row; + align-items: center; + padding: var(--spacing-5); + border: var(--spcaing-1) dashed var(--color-subtle); + border-radius: var(--spacing-8); + transition: box-shadow, transofrm 150ms cubic-bezier(0.45, 0, 0.55, 1); + cursor: pointer; + user-select: none; + + &:hover { + text-decoration: underline; + } + } + + .categoy-header { + display: flex; + align-items: center; + } + + .category-header div[data-img-container] { + display: flex; + flex-shrink: 0; + position: relative; + margin-right: var(--spacing-4); + align-items: center; + justify-content: center; + width: 8rem; + height: 8rem; + } + + .categoy-header div[data-img-container] img { + user-select: none; + object-fit: cover; + aspect-ratio: 1/1; + } + + .category-header h2 { + text-transform: capitalize; + word-break: break-all; + border-width: 1px; + border-color: #0000; + } + + .link-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(min(330px, 100%), 1fr)); + gap: var(--spacing-4); + padding: var(--spacing-5); + contain: layout style paint; + } + + .hero { + /* grid grid-rows-3 grid-cols-[1fr] justify-center items-center h-screen bg-base */ + display: grid; + grid-template: repeat(3, minmax(0, 1fr)) / 1fr; + justify-content: center; + align-items: center; + height: 100vh; + background-color: var(--color-base); + } + + .glance-container { + display: flex; + color: var(--color-subtle); + height: 100%; + padding: var(--spacing-5); + justify-content: space-between; + } + + .primary-hero-container { + display: flex; + flex-direction: column; + align-items: center; + grid-row-start: 2; + padding: var(--spacing-6); + } + + .weather-data { + display: flex; + height: fit-content; + align-items: center; + font-weight: 600; + } + + .weather-data span { + margin-right: var(--spacing-4); + } + + .uptime-data { + display: flex; + flex-direction: column; + align-items: end; + + & > div { + display: flex; + align-items: center; + + & > span { + margin-right: var(--spacing-4); + } + } + } + + .uptime-status { + position: relative; + margin-top: auto; + margin-bottom: auto; + width: var(--spacing-4); + height: var(--spacing-4); + } +} + +@layer utilities { + .flex { + display: flex; + } + + .leading-condensed { + line-height: normal; + } +} diff --git a/src/styles/main.scss b/src/styles/main.scss deleted file mode 100644 index 2ebfdd7..0000000 --- a/src/styles/main.scss +++ /dev/null @@ -1,159 +0,0 @@ -@import "tailwindcss"; - - -@theme { - --color-accent: oklch(57.93% 0.258 294.12); - --color-success: oklch(70.19% 0.158 160.44); - --color-error: oklch(53% 0.251 28.48); - - --color-base: oklch(11% .007 285); - --color-surface: oklch(19% 0.007 285.66); - --color-overlay: oklch(26% 0.008 285.66); - - --color-muted: oklch(63% 0.015 286); - --color-subtle: oklch(72% 0.015 286); - --color-text: oklch(87% 0.015 286); - - --color-highlight-sm: oklch(30.67% 0.007 286); - --color-highlight: oklch(39.26% 0.010 286); - --color-highlight-lg: oklch(47.72% 0.011 286); -} - -@font-face { - font-family: "Instrument Sans"; - src: url("/assets/fonts/InstrumentSans-VariableFont_wdth,wght.woff2") format("woff2"); - font-display: swap; -} - -:root { - --default-font-family: "Instrument Sans", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; -} - -html { - line-height: normal; - color-scheme: dark; - color: var(--color-text); -} - -h1, -h2, -h3, -h4, -h5, -h6 { - @apply font-semibold; -} - -h1 { - font-size: clamp(42px, 10vw, 64px); -} - -h2 { - font-size: clamp(30px, 6vw, 36px); -} - -h3 { - font-size: 1.25rem; -} - -button { - cursor: pointer; -} - -input:not(.search) { - @apply px-4 py-2 rounded-md w-full bg-surface border border-highlight/70 placeholder:text-highlight text-text focus-visible:outline-none transition-colors duration-300 ease-out overflow-hidden; - - &[type="file"] { - @apply p-0 cursor-pointer; - - &::file-selector-button { - @apply px-2 py-2 mr-1 bg-highlight text-subtle cursor-pointer; - } - } -} - -.link-card { - background: var(--color-overlay); - display: flex; - flex-direction: row; - text-decoration: none; - border-radius: 1rem; - padding: 0.625rem; - align-items: center; - transition-property: box-shadow, transform, translate; - transition-duration: 150ms; - transition-timing-function: cubic-bezier(0.45, 0, 0.55, 1); - box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); - contain: layout style paint; - - &:not(.admin) { - &:hover { - box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); - transform: translateY(-4px); - } - - &:active { - box-shadow: 0 2px 4px -2px rgb(0 0 0 / 0.1); - transform: translateY(2px); - } - } -} - -@media (prefers-reduced-motion: reduce) { - .link-card { - transition: none; - - &:hover { - transform: none; - } - - &:active { - transform: none; - } - } -} - -/* Div that holds the image */ -.link-card div[data-img-container] { - flex-shrink: 0; - margin-right: 0.5rem; -} - -.link-card div[data-img-container] img { - user-select: none; - border-radius: 0.375rem; - aspect-ratio: 1/1; - object-fit: cover; -} - -/* Div that holds the text */ -.link-card div[data-text-container] { - word-break: break-all; -} - -.link-card div[data-text-container] p { - color: var(--color-subtle); -} - - -.categoy-header { - display: flex; - align-items: center; -} - -.category-header div[data-img-container] { - @apply shrink-0 relative mr-2 h-full flex items-center justify-center size-8; -} - -.categoy-header div[data-img-container] img { - user-select: none; - object-fit: cover; - aspect-ratio: 1/1; -} - -.category-header h2 { - text-transform: capitalize; - word-break: break-all; - border-width: 1px; - border-color: #0000; -} \ No newline at end of file diff --git a/src/templates/layouts/admin.hbs b/src/templates/layouts/admin.hbs new file mode 100644 index 0000000..0aaaafd --- /dev/null +++ b/src/templates/layouts/admin.hbs @@ -0,0 +1,20 @@ + + + + + Passport + + + + {{{embedFile "assets/styles/main.css"}}} + {{{embedFile "assets/styles/adminUi.css"}}} + + + + {{embed}} + + +{{{devContent}}} + + \ No newline at end of file diff --git a/src/templates/layouts/main.hbs b/src/templates/layouts/main.hbs index 8ab1f0d..959b4cd 100644 --- a/src/templates/layouts/main.hbs +++ b/src/templates/layouts/main.hbs @@ -3,14 +3,29 @@ Passport - - - - + + + + + + {{{embedFile "assets/styles/main.css"}}} {{embed}} + {{{devContent}}} + \ No newline at end of file diff --git a/src/templates/views/admin/index.hbs b/src/templates/views/admin/index.hbs index e12308d..c74dae5 100644 --- a/src/templates/views/admin/index.hbs +++ b/src/templates/views/admin/index.hbs @@ -17,15 +17,14 @@

{{#each Categories}} -
+
{{this.Name}}
-

{{this.Name}}

-
+

{{~ this.Name ~}}

+
-
-
-
+