diff --git a/.vscode/launch.json b/.vscode/launch.json index 15e9668..9a71337 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,17 +1,27 @@ { - "version": "0.2.0", - "configurations": [ - { - "name": "Launch Vite DEV server", - "request": "launch", - "runtimeExecutable": "npx", - "runtimeArgs": ["vite"], - "type": "node", - "serverReadyAction": { - "action": "debugWithChrome", - "pattern": "Local: http://localhost:([0-9]+)", - "uriFormat": "http://localhost:%s" - } - } - ] + "version": "0.2.0", + "configurations": [ + { + "name": "Launch server", + "request": "launch", + "runtimeArgs": ["dev"], + "runtimeExecutable": "pnpm", + "skipFiles": ["/**"], + "type": "node", + "console": "integratedTerminal" + }, + { + "type": "chrome", + "request": "launch", + "name": "Launch browser", + "url": "http://localhost:5173", + "webRoot": "${workspaceFolder}" + } + ], + "compounds": [ + { + "name": "Both", + "configurations": ["Launch server", "Launch browser"] + } + ] } diff --git a/package.json b/package.json index c6309b8..dc17f69 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,11 @@ "check": "svelte-check --tsconfig ./tsconfig.json", "check:watch": "svelte-check --tsconfig ./tsconfig.json --watch", "lint": "prettier --check --plugin-search-dir=. . && eslint .", - "format": "prettier --write --plugin-search-dir=. ." + "format": "prettier --write --plugin-search-dir=. .", + "site:update": "pnpm update -i -L", + "db:studio": "prisma studio", + "db:push": "prisma db push", + "db:seed": "prisma db seed" }, "prisma": { "seed": "ts-node --esm prisma/seed.ts" @@ -34,13 +38,9 @@ "just-clone": "^6.2.0", "just-debounce-it": "^3.2.0", "postcss": "^8.4.23", - "postcss-color-functional-notation": "^4.2.4", - "postcss-custom-media": "^9.1.3", - "postcss-env-function": "^4.0.6", "postcss-import": "^15.1.0", "postcss-load-config": "^4.0.1", - "postcss-media-minmax": "^5.0.0", - "postcss-nested": "^6.0.1", + "postcss-preset-env": "^8.4.2", "prettier": "^2.8.8", "prettier-plugin-svelte": "^2.10.0", "prisma": "^4.14.1", @@ -57,6 +57,10 @@ "zod": "^3.21.4" }, "type": "module", + "engines": { + "node": ">=18.12.1", + "pnpm": ">=8" + }, "dependencies": { "@axiomhq/axiom-node": "^0.12.0", "@fontsource/fira-mono": "^4.5.10", @@ -77,6 +81,7 @@ "open-props": "^1.5.8", "svelte-lazy": "^1.2.1", "svelte-lazy-loader": "^1.0.0", + "svelte-legos": "^0.2.1", "sveltekit-flash-message": "^0.11.3", "zod-to-json-schema": "^3.21.1" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bd31987..78c4309 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,8 @@ -lockfileVersion: '6.0' +lockfileVersion: '6.1' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false dependencies: '@axiomhq/axiom-node': @@ -58,6 +62,9 @@ dependencies: svelte-lazy-loader: specifier: ^1.0.0 version: 1.0.0 + svelte-legos: + specifier: ^0.2.1 + version: 0.2.1(svelte@3.59.1) sveltekit-flash-message: specifier: ^0.11.3 version: 0.11.3(@sveltejs/kit@1.19.0)(svelte@3.59.1) @@ -117,27 +124,15 @@ devDependencies: postcss: specifier: ^8.4.23 version: 8.4.23 - postcss-color-functional-notation: - specifier: ^4.2.4 - version: 4.2.4(postcss@8.4.23) - postcss-custom-media: - specifier: ^9.1.3 - version: 9.1.3(postcss@8.4.23) - postcss-env-function: - specifier: ^4.0.6 - version: 4.0.6(postcss@8.4.23) postcss-import: specifier: ^15.1.0 version: 15.1.0(postcss@8.4.23) postcss-load-config: specifier: ^4.0.1 version: 4.0.1(postcss@8.4.23)(ts-node@10.9.1) - postcss-media-minmax: - specifier: ^5.0.0 - version: 5.0.0(postcss@8.4.23) - postcss-nested: - specifier: ^6.0.1 - version: 6.0.1(postcss@8.4.23) + postcss-preset-env: + specifier: ^8.4.2 + version: 8.4.2(postcss@8.4.23) prettier: specifier: ^2.8.8 version: 2.8.8 @@ -225,6 +220,35 @@ packages: '@csstools/css-tokenizer': 2.1.1 dev: true + /@csstools/color-helpers@2.1.0: + resolution: {integrity: sha512-OWkqBa7PDzZuJ3Ha7T5bxdSVfSCfTq6K1mbAhbO1MD+GSULGjrp45i5RudyJOedstSarN/3mdwu9upJE7gDXfw==} + engines: {node: ^14 || ^16 || >=18} + dev: true + + /@csstools/css-calc@1.1.1(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1): + resolution: {integrity: sha512-Nh+iLCtjlooTzuR0lpmB8I6hPX/VupcGQ3Z1U2+wgJJ4fa8+cWkub+lCsbZcYPzBGsZLEL8fQAg+Na5dwEFJxg==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + '@csstools/css-parser-algorithms': ^2.1.1 + '@csstools/css-tokenizer': ^2.1.1 + dependencies: + '@csstools/css-parser-algorithms': 2.1.1(@csstools/css-tokenizer@2.1.1) + '@csstools/css-tokenizer': 2.1.1 + dev: true + + /@csstools/css-color-parser@1.2.0(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1): + resolution: {integrity: sha512-kt9jhqyL/Ig/Tsf1cY+iygxs2nu3/D532048G9BSeg9YjlpZxbor6I+nvgMNB1A1ppL+i15Mb/yyDHYMQmgBtQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + '@csstools/css-parser-algorithms': ^2.1.1 + '@csstools/css-tokenizer': ^2.1.1 + dependencies: + '@csstools/color-helpers': 2.1.0 + '@csstools/css-calc': 1.1.1(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1) + '@csstools/css-parser-algorithms': 2.1.1(@csstools/css-tokenizer@2.1.1) + '@csstools/css-tokenizer': 2.1.1 + dev: true + /@csstools/css-parser-algorithms@2.1.1(@csstools/css-tokenizer@2.1.1): resolution: {integrity: sha512-viRnRh02AgO4mwIQb2xQNJju0i+Fh9roNgmbR5xEuG7J3TGgxjnE95HnBLgsFJOJOksvcfxOUCgODcft6Y07cA==} engines: {node: ^14 || ^16 || >=18} @@ -239,8 +263,8 @@ packages: engines: {node: ^14 || ^16 || >=18} dev: true - /@csstools/media-query-list-parser@2.0.4(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1): - resolution: {integrity: sha512-GyYot6jHgcSDZZ+tLSnrzkR7aJhF2ZW6d+CXH66mjy5WpAQhZD4HDke2OQ36SivGRWlZJpAz7TzbW6OKlEpxAA==} + /@csstools/media-query-list-parser@2.1.0(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1): + resolution: {integrity: sha512-MXkR+TeaS2q9IkpyO6jVCdtA/bfpABJxIrfkLswThFN8EZZgI2RfAHhm6sDNDuYV25d5+b8Lj1fpTccIcSLPsQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: '@csstools/css-parser-algorithms': ^2.1.1 @@ -250,6 +274,273 @@ packages: '@csstools/css-tokenizer': 2.1.1 dev: true + /@csstools/postcss-cascade-layers@3.0.1(postcss@8.4.23): + resolution: {integrity: sha512-dD8W98dOYNOH/yX4V4HXOhfCOnvVAg8TtsL+qCGNoKXuq5z2C/d026wGWgySgC8cajXXo/wNezS31Glj5GcqrA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.11) + postcss: 8.4.23 + postcss-selector-parser: 6.0.11 + dev: true + + /@csstools/postcss-color-function@2.2.3(postcss@8.4.23): + resolution: {integrity: sha512-b1ptNkr1UWP96EEHqKBWWaV5m/0hgYGctgA/RVZhONeP1L3T/8hwoqDm9bB23yVCfOgE9U93KI9j06+pEkJTvw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-color-parser': 1.2.0(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1) + '@csstools/css-parser-algorithms': 2.1.1(@csstools/css-tokenizer@2.1.1) + '@csstools/css-tokenizer': 2.1.1 + '@csstools/postcss-progressive-custom-properties': 2.3.0(postcss@8.4.23) + postcss: 8.4.23 + dev: true + + /@csstools/postcss-color-mix-function@1.0.3(postcss@8.4.23): + resolution: {integrity: sha512-QGXjGugTluqFZWzVf+S3wCiRiI0ukXlYqCi7OnpDotP/zaVTyl/aqZujLFzTOXy24BoWnu89frGMc79ohY5eog==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-color-parser': 1.2.0(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1) + '@csstools/css-parser-algorithms': 2.1.1(@csstools/css-tokenizer@2.1.1) + '@csstools/css-tokenizer': 2.1.1 + '@csstools/postcss-progressive-custom-properties': 2.3.0(postcss@8.4.23) + postcss: 8.4.23 + dev: true + + /@csstools/postcss-font-format-keywords@2.0.2(postcss@8.4.23): + resolution: {integrity: sha512-iKYZlIs6JsNT7NKyRjyIyezTCHLh4L4BBB3F5Nx7Dc4Z/QmBgX+YJFuUSar8IM6KclGiAUFGomXFdYxAwJydlA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.23 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-gradients-interpolation-method@3.0.6(postcss@8.4.23): + resolution: {integrity: sha512-rBOBTat/YMmB0G8VHwKqDEx+RZ4KCU9j42K8LwS0IpZnyThalZZF7BCSsZ6TFlZhcRZKlZy3LLFI2pLqjNVGGA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-color-parser': 1.2.0(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1) + '@csstools/css-parser-algorithms': 2.1.1(@csstools/css-tokenizer@2.1.1) + '@csstools/css-tokenizer': 2.1.1 + '@csstools/postcss-progressive-custom-properties': 2.3.0(postcss@8.4.23) + postcss: 8.4.23 + dev: true + + /@csstools/postcss-hwb-function@2.2.2(postcss@8.4.23): + resolution: {integrity: sha512-W5Y5oaJ382HSlbdGfPf60d7dAK6Hqf10+Be1yZbd/TNNrQ/3dDdV1c07YwOXPQ3PZ6dvFMhxbIbn8EC3ki3nEg==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-color-parser': 1.2.0(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1) + '@csstools/css-parser-algorithms': 2.1.1(@csstools/css-tokenizer@2.1.1) + '@csstools/css-tokenizer': 2.1.1 + postcss: 8.4.23 + dev: true + + /@csstools/postcss-ic-unit@2.0.4(postcss@8.4.23): + resolution: {integrity: sha512-9W2ZbV7whWnr1Gt4qYgxMWzbevZMOvclUczT5vk4yR6vS53W/njiiUhtm/jh/BKYwQ1W3PECZjgAd2dH4ebJig==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/postcss-progressive-custom-properties': 2.3.0(postcss@8.4.23) + postcss: 8.4.23 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-is-pseudo-class@3.2.1(postcss@8.4.23): + resolution: {integrity: sha512-AtANdV34kJl04Al62is3eQRk/BfOfyAvEmRJvbt+nx5REqImLC+2XhuE6skgkcPli1l8ONS67wS+l1sBzySc3Q==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.11) + postcss: 8.4.23 + postcss-selector-parser: 6.0.11 + dev: true + + /@csstools/postcss-logical-float-and-clear@1.0.1(postcss@8.4.23): + resolution: {integrity: sha512-eO9z2sMLddvlfFEW5Fxbjyd03zaO7cJafDurK4rCqyRt9P7aaWwha0LcSzoROlcZrw1NBV2JAp2vMKfPMQO1xw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.23 + dev: true + + /@csstools/postcss-logical-resize@1.0.1(postcss@8.4.23): + resolution: {integrity: sha512-x1ge74eCSvpBkDDWppl+7FuD2dL68WP+wwP2qvdUcKY17vJksz+XoE1ZRV38uJgS6FNUwC0AxrPW5gy3MxsDHQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.23 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-logical-viewport-units@1.0.3(postcss@8.4.23): + resolution: {integrity: sha512-6zqcyRg9HSqIHIPMYdt6THWhRmE5/tyHKJQLysn2TeDf/ftq7Em9qwMTx98t2C/7UxIsYS8lOiHHxAVjWn2WUg==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-tokenizer': 2.1.1 + postcss: 8.4.23 + dev: true + + /@csstools/postcss-media-minmax@1.0.3(postcss@8.4.23): + resolution: {integrity: sha512-os7qe2HV/qBILKCGa/dl5AbpO6c+MZyunFBWPWJBrEVhulCYo13FgEWbhyERFM5FeJghiqYgJxM54oiJASpBnw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-calc': 1.1.1(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1) + '@csstools/css-parser-algorithms': 2.1.1(@csstools/css-tokenizer@2.1.1) + '@csstools/css-tokenizer': 2.1.1 + '@csstools/media-query-list-parser': 2.1.0(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1) + postcss: 8.4.23 + dev: true + + /@csstools/postcss-media-queries-aspect-ratio-number-values@1.0.3(postcss@8.4.23): + resolution: {integrity: sha512-JHdwBSNZsur/mJXwzuC/gxyekhfSdWJaTiSOhUITk2D8pYRYcjV1MZiCiWupQNfM2Qp2W7w1A/gEU6U/xlpIyA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-parser-algorithms': 2.1.1(@csstools/css-tokenizer@2.1.1) + '@csstools/css-tokenizer': 2.1.1 + '@csstools/media-query-list-parser': 2.1.0(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1) + postcss: 8.4.23 + dev: true + + /@csstools/postcss-nested-calc@2.0.2(postcss@8.4.23): + resolution: {integrity: sha512-jbwrP8rN4e7LNaRcpx3xpMUjhtt34I9OV+zgbcsYAAk6k1+3kODXJBf95/JMYWhu9g1oif7r06QVUgfWsKxCFw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.23 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-normalize-display-values@2.0.1(postcss@8.4.23): + resolution: {integrity: sha512-TQT5g3JQ5gPXC239YuRK8jFceXF9d25ZvBkyjzBGGoW5st5sPXFVQS8OjYb9IJ/K3CdfK4528y483cgS2DJR/w==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.23 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-oklab-function@2.2.3(postcss@8.4.23): + resolution: {integrity: sha512-AgJ2rWMnLCDcbSMTHSqBYn66DNLBym6JpBpCaqmwZ9huGdljjDRuH3DzOYzkgQ7Pm2K92IYIq54IvFHloUOdvA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-color-parser': 1.2.0(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1) + '@csstools/css-parser-algorithms': 2.1.1(@csstools/css-tokenizer@2.1.1) + '@csstools/css-tokenizer': 2.1.1 + '@csstools/postcss-progressive-custom-properties': 2.3.0(postcss@8.4.23) + postcss: 8.4.23 + dev: true + + /@csstools/postcss-progressive-custom-properties@2.3.0(postcss@8.4.23): + resolution: {integrity: sha512-Zd8ojyMlsL919TBExQ1I0CTpBDdyCpH/yOdqatZpuC3sd22K4SwC7+Yez3Q/vmXMWSAl+shjNeFZ7JMyxMjK+Q==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.23 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-relative-color-syntax@1.0.1(postcss@8.4.23): + resolution: {integrity: sha512-IskxdQqAkx/pyyOEW3Lhn3nvOu5zlaZ8wQljFl5zc3ABl+gEFf2G42yWK3+wX+J0F4jm7OikOigXo9fAISFEmg==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-color-parser': 1.2.0(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1) + '@csstools/css-parser-algorithms': 2.1.1(@csstools/css-tokenizer@2.1.1) + '@csstools/css-tokenizer': 2.1.1 + '@csstools/postcss-progressive-custom-properties': 2.3.0(postcss@8.4.23) + postcss: 8.4.23 + dev: true + + /@csstools/postcss-scope-pseudo-class@2.0.2(postcss@8.4.23): + resolution: {integrity: sha512-6Pvo4uexUCXt+Hz5iUtemQAcIuCYnL+ePs1khFR6/xPgC92aQLJ0zGHonWoewiBE+I++4gXK3pr+R1rlOFHe5w==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.23 + postcss-selector-parser: 6.0.11 + dev: true + + /@csstools/postcss-stepped-value-functions@2.1.1(postcss@8.4.23): + resolution: {integrity: sha512-YCvdF0GCZK35nhLgs7ippcxDlRVe5QsSht3+EghqTjnYnyl3BbWIN6fYQ1dKWYTJ+7Bgi41TgqQFfJDcp9Xy/w==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-calc': 1.1.1(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1) + '@csstools/css-parser-algorithms': 2.1.1(@csstools/css-tokenizer@2.1.1) + '@csstools/css-tokenizer': 2.1.1 + postcss: 8.4.23 + dev: true + + /@csstools/postcss-text-decoration-shorthand@2.2.4(postcss@8.4.23): + resolution: {integrity: sha512-zPN56sQkS/7YTCVZhOBVCWf7AiNge8fXDl7JVaHLz2RyT4pnyK2gFjckWRLpO0A2xkm1lCgZ0bepYZTwAVd/5A==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/color-helpers': 2.1.0 + postcss: 8.4.23 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-trigonometric-functions@2.1.1(postcss@8.4.23): + resolution: {integrity: sha512-XcXmHEFfHXhvYz40FtDlA4Fp4NQln2bWTsCwthd2c+MCnYArUYU3YaMqzR5CrKP3pMoGYTBnp5fMqf1HxItNyw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-calc': 1.1.1(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1) + '@csstools/css-parser-algorithms': 2.1.1(@csstools/css-tokenizer@2.1.1) + '@csstools/css-tokenizer': 2.1.1 + postcss: 8.4.23 + dev: true + + /@csstools/postcss-unset-value@2.0.1(postcss@8.4.23): + resolution: {integrity: sha512-oJ9Xl29/yU8U7/pnMJRqAZd4YXNCfGEdcP4ywREuqm/xMqcgDNDppYRoCGDt40aaZQIEKBS79LytUDN/DHf0Ew==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.23 + dev: true + + /@csstools/selector-specificity@2.2.0(postcss-selector-parser@6.0.11): + resolution: {integrity: sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss-selector-parser: ^6.0.10 + dependencies: + postcss-selector-parser: 6.0.11 + dev: true + /@esbuild/android-arm64@0.16.8: resolution: {integrity: sha512-TGQM/tdy5EV1KoFHu0+cMrKvPR8UBLGEfwS84PTCJ07KVp21Fr488aFEL2TCamz9CxoF1np36kY6XOSdLncg2Q==} engines: {node: '>=12'} @@ -1346,6 +1637,10 @@ packages: resolution: {integrity: sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ==} dev: true + /canvas-confetti@1.6.0: + resolution: {integrity: sha512-ej+w/m8Jzpv9Z7W7uJZer14Ke8P2ogsjg4ZMGIuq4iqUOqY2Jq8BNW42iGmNfRwREaaEfFIczLuZZiEVSYNHAA==} + dev: false + /chai@4.3.7: resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==} engines: {node: '>=4'} @@ -1447,6 +1742,41 @@ packages: which: 2.0.2 dev: true + /css-blank-pseudo@5.0.2(postcss@8.4.23): + resolution: {integrity: sha512-aCU4AZ7uEcVSUzagTlA9pHciz7aWPKA/YzrEkpdSopJ2pvhIxiQ5sYeMz1/KByxlIo4XBdvMNJAVKMg/GRnhfw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.23 + postcss-selector-parser: 6.0.11 + dev: true + + /css-has-pseudo@5.0.2(postcss@8.4.23): + resolution: {integrity: sha512-q+U+4QdwwB7T9VEW/LyO6CFrLAeLqOykC5mDqJXc7aKZAhDbq7BvGT13VGJe+IwBfdN2o3Xdw2kJ5IxwV1Sc9Q==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.11) + postcss: 8.4.23 + postcss-selector-parser: 6.0.11 + postcss-value-parser: 4.2.0 + dev: true + + /css-prefers-color-scheme@8.0.2(postcss@8.4.23): + resolution: {integrity: sha512-OvFghizHJ45x7nsJJUSYLyQNTzsCU8yWjxAc/nhPQg1pbs18LMoET8N3kOweFDPy0JV0OSXN2iqRFhPBHYOeMA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.23 + dev: true + + /cssdb@7.6.0: + resolution: {integrity: sha512-Nna7rph8V0jC6+JBY4Vk4ndErUmfJfV6NJCaZdurL0omggabiy+QB2HCQtu5c/ACLZ0I7REv7A4QyPIoYzZx0w==} + dev: true + /cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} @@ -2440,18 +2770,59 @@ packages: hasBin: true dev: true - /postcss-color-functional-notation@4.2.4(postcss@8.4.23): - resolution: {integrity: sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==} - engines: {node: ^12 || ^14 || >=16} + /postcss-attribute-case-insensitive@6.0.2(postcss@8.4.23): + resolution: {integrity: sha512-IRuCwwAAQbgaLhxQdQcIIK0dCVXg3XDUnzgKD8iwdiYdwU4rMWRWyl/W9/0nA4ihVpq5pyALiHB2veBJ0292pw==} + engines: {node: ^14 || ^16 || >=18} peerDependencies: - postcss: ^8.2 + postcss: ^8.4 + dependencies: + postcss: 8.4.23 + postcss-selector-parser: 6.0.11 + dev: true + + /postcss-clamp@4.1.0(postcss@8.4.23): + resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==} + engines: {node: '>=7.6.0'} + peerDependencies: + postcss: ^8.4.6 dependencies: postcss: 8.4.23 postcss-value-parser: 4.2.0 dev: true - /postcss-custom-media@9.1.3(postcss@8.4.23): - resolution: {integrity: sha512-W1C4Fu6KAZ7sKYQCuGMr8gyaE4BtjTQGPLVS4m0WCaWM6l7PgVbvmDeb4ClBc5R/7kdwESYf0hdxGtEPhi9CLA==} + /postcss-color-functional-notation@5.1.0(postcss@8.4.23): + resolution: {integrity: sha512-w2R4py6zrVE1U7FwNaAc76tNQlG9GLkrBbcFw+VhUjyDDiV28vfZG+l4LyPmpoQpeSJVtu8VgNjE8Jv5SpC7dQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/postcss-progressive-custom-properties': 2.3.0(postcss@8.4.23) + postcss: 8.4.23 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-color-hex-alpha@9.0.2(postcss@8.4.23): + resolution: {integrity: sha512-SfPjgr//VQ/DOCf80STIAsdAs7sbIbxATvVmd+Ec7JvR8onz9pjawhq3BJM3Pie40EE3TyB0P6hft16D33Nlyg==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.23 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-color-rebeccapurple@8.0.2(postcss@8.4.23): + resolution: {integrity: sha512-xWf/JmAxVoB5bltHpXk+uGRoGFwu4WDAR7210el+iyvTdqiKpDhtcT8N3edXMoVJY0WHFMrKMUieql/wRNiXkw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.23 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-custom-media@9.1.4(postcss@8.4.23): + resolution: {integrity: sha512-4A7WEG3iIyKwfpxL5bkuSlHoHHGRTHl0212Z3uvpwJPyVfZJlkZAQNNgVC+oogrJgksDnfKyuuMbG6HafZPW8Q==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 @@ -2459,13 +2830,97 @@ packages: '@csstools/cascade-layer-name-parser': 1.0.2(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1) '@csstools/css-parser-algorithms': 2.1.1(@csstools/css-tokenizer@2.1.1) '@csstools/css-tokenizer': 2.1.1 - '@csstools/media-query-list-parser': 2.0.4(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1) + '@csstools/media-query-list-parser': 2.1.0(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1) postcss: 8.4.23 dev: true - /postcss-env-function@4.0.6(postcss@8.4.23): - resolution: {integrity: sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==} - engines: {node: ^12 || ^14 || >=16} + /postcss-custom-properties@13.2.0(postcss@8.4.23): + resolution: {integrity: sha512-UYiPqbqmVayyv56y0mtGhvUKZClflwE9cTTmPaqEX8fOVjVwsotqKGYtJXSLxrJLwf9tt7ka+Luyh1ZAOhGHWA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/cascade-layer-name-parser': 1.0.2(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1) + '@csstools/css-parser-algorithms': 2.1.1(@csstools/css-tokenizer@2.1.1) + '@csstools/css-tokenizer': 2.1.1 + postcss: 8.4.23 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-custom-selectors@7.1.3(postcss@8.4.23): + resolution: {integrity: sha512-GTVscax6O/8s7agFF0HsOoIyjrnAbLjgCUle8tn+0oDGJuVx7p56U7ClSRoC49poxFuMfu2B4Q8GnxSCOeuFKw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/cascade-layer-name-parser': 1.0.2(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1) + '@csstools/css-parser-algorithms': 2.1.1(@csstools/css-tokenizer@2.1.1) + '@csstools/css-tokenizer': 2.1.1 + postcss: 8.4.23 + postcss-selector-parser: 6.0.11 + dev: true + + /postcss-dir-pseudo-class@7.0.2(postcss@8.4.23): + resolution: {integrity: sha512-cMnslilYxBf9k3qejnovrUONZx1rXeUZJw06fgIUBzABJe3D2LiLL5WAER7Imt3nrkaIgG05XZBztueLEf5P8w==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.23 + postcss-selector-parser: 6.0.11 + dev: true + + /postcss-double-position-gradients@4.0.4(postcss@8.4.23): + resolution: {integrity: sha512-nUAbUXURemLXIrl4Xoia2tiu5z/n8sY+BVDZApoeT9BlpByyrp02P/lFCRrRvZ/zrGRE+MOGLhk8o7VcMCtPtQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/postcss-progressive-custom-properties': 2.3.0(postcss@8.4.23) + postcss: 8.4.23 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-focus-visible@8.0.2(postcss@8.4.23): + resolution: {integrity: sha512-f/Vd+EC/GaKElknU59esVcRYr/Y3t1ZAQyL4u2xSOgkDy4bMCmG7VP5cGvj3+BTLNE9ETfEuz2nnt4qkZwTTeA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.23 + postcss-selector-parser: 6.0.11 + dev: true + + /postcss-focus-within@7.0.2(postcss@8.4.23): + resolution: {integrity: sha512-AHAJ89UQBcqBvFgQJE9XasGuwMNkKsGj4D/f9Uk60jFmEBHpAL14DrnSk3Rj+SwZTr/WUG+mh+Rvf8fid/346w==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.23 + postcss-selector-parser: 6.0.11 + dev: true + + /postcss-font-variant@5.0.0(postcss@8.4.23): + resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.23 + dev: true + + /postcss-gap-properties@4.0.1(postcss@8.4.23): + resolution: {integrity: sha512-V5OuQGw4lBumPlwHWk/PRfMKjaq/LTGR4WDTemIMCaMevArVfCCA9wBJiL1VjDAd+rzuCIlkRoRvDsSiAaZ4Fg==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.23 + dev: true + + /postcss-image-set-function@5.0.2(postcss@8.4.23): + resolution: {integrity: sha512-Sszjwo0ubETX0Fi5MvpYzsONwrsjeabjMoc5YqHvURFItXgIu3HdCjcVuVKGMPGzKRhgaknmdM5uVWInWPJmeg==} + engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: @@ -2485,6 +2940,27 @@ packages: resolve: 1.22.1 dev: true + /postcss-initial@4.0.1(postcss@8.4.23): + resolution: {integrity: sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.23 + dev: true + + /postcss-lab-function@5.2.3(postcss@8.4.23): + resolution: {integrity: sha512-fi32AYKzji5/rvgxo5zXHFvAYBw0u0OzELbeCNjEZVLUir18Oj+9RmNphtM8QdLUaUnrfx8zy8vVYLmFLkdmrQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-color-parser': 1.2.0(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1) + '@csstools/css-parser-algorithms': 2.1.1(@csstools/css-tokenizer@2.1.1) + '@csstools/css-tokenizer': 2.1.1 + '@csstools/postcss-progressive-custom-properties': 2.3.0(postcss@8.4.23) + postcss: 8.4.23 + dev: true + /postcss-load-config@3.1.4(postcss@8.4.23)(ts-node@10.9.1): resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} engines: {node: '>= 10'} @@ -2521,25 +2997,147 @@ packages: yaml: 2.1.3 dev: true - /postcss-media-minmax@5.0.0(postcss@8.4.23): - resolution: {integrity: sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==} - engines: {node: '>=10.0.0'} + /postcss-logical@6.2.0(postcss@8.4.23): + resolution: {integrity: sha512-aqlfKGaY0nnbgI9jwUikp4gJKBqcH5noU/EdnIVceghaaDPYhZuyJVxlvWNy55tlTG5tunRKCTAX9yljLiFgmw==} + engines: {node: ^14 || ^16 || >=18} peerDependencies: - postcss: ^8.1.0 + postcss: ^8.4 + dependencies: + postcss: 8.4.23 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-nesting@11.2.2(postcss@8.4.23): + resolution: {integrity: sha512-aOTiUniAB1bcPE6GGiynWRa6PZFPhOTAm5q3q5cem6QeSijIHHkWr6gs65ukCZMXeak8yXeZVbBJET3VM+HlhA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.11) + postcss: 8.4.23 + postcss-selector-parser: 6.0.11 + dev: true + + /postcss-opacity-percentage@2.0.0(postcss@8.4.23): + resolution: {integrity: sha512-lyDrCOtntq5Y1JZpBFzIWm2wG9kbEdujpNt4NLannF+J9c8CgFIzPa80YQfdza+Y+yFfzbYj/rfoOsYsooUWTQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.2 dependencies: postcss: 8.4.23 dev: true - /postcss-nested@6.0.1(postcss@8.4.23): - resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} - engines: {node: '>=12.0'} + /postcss-overflow-shorthand@4.0.1(postcss@8.4.23): + resolution: {integrity: sha512-HQZ0qi/9iSYHW4w3ogNqVNr2J49DHJAl7r8O2p0Meip38jsdnRPgiDW7r/LlLrrMBMe3KHkvNtAV2UmRVxzLIg==} + engines: {node: ^14 || ^16 || >=18} peerDependencies: - postcss: ^8.2.14 + postcss: ^8.4 + dependencies: + postcss: 8.4.23 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-page-break@3.0.4(postcss@8.4.23): + resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==} + peerDependencies: + postcss: ^8 + dependencies: + postcss: 8.4.23 + dev: true + + /postcss-place@8.0.1(postcss@8.4.23): + resolution: {integrity: sha512-Ow2LedN8sL4pq8ubukO77phSVt4QyCm35ZGCYXKvRFayAwcpgB0sjNJglDoTuRdUL32q/ZC1VkPBo0AOEr4Uiw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.23 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-preset-env@8.4.2(postcss@8.4.23): + resolution: {integrity: sha512-Bihxo+FsyVNjsRADiYYnj9Ez0WBSWSSHAe8WvxoMlqrw8H8m6gK9E0MkDd7P6ForoikRIF3I8grGg/pFM6ECRQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/postcss-cascade-layers': 3.0.1(postcss@8.4.23) + '@csstools/postcss-color-function': 2.2.3(postcss@8.4.23) + '@csstools/postcss-color-mix-function': 1.0.3(postcss@8.4.23) + '@csstools/postcss-font-format-keywords': 2.0.2(postcss@8.4.23) + '@csstools/postcss-gradients-interpolation-method': 3.0.6(postcss@8.4.23) + '@csstools/postcss-hwb-function': 2.2.2(postcss@8.4.23) + '@csstools/postcss-ic-unit': 2.0.4(postcss@8.4.23) + '@csstools/postcss-is-pseudo-class': 3.2.1(postcss@8.4.23) + '@csstools/postcss-logical-float-and-clear': 1.0.1(postcss@8.4.23) + '@csstools/postcss-logical-resize': 1.0.1(postcss@8.4.23) + '@csstools/postcss-logical-viewport-units': 1.0.3(postcss@8.4.23) + '@csstools/postcss-media-minmax': 1.0.3(postcss@8.4.23) + '@csstools/postcss-media-queries-aspect-ratio-number-values': 1.0.3(postcss@8.4.23) + '@csstools/postcss-nested-calc': 2.0.2(postcss@8.4.23) + '@csstools/postcss-normalize-display-values': 2.0.1(postcss@8.4.23) + '@csstools/postcss-oklab-function': 2.2.3(postcss@8.4.23) + '@csstools/postcss-progressive-custom-properties': 2.3.0(postcss@8.4.23) + '@csstools/postcss-relative-color-syntax': 1.0.1(postcss@8.4.23) + '@csstools/postcss-scope-pseudo-class': 2.0.2(postcss@8.4.23) + '@csstools/postcss-stepped-value-functions': 2.1.1(postcss@8.4.23) + '@csstools/postcss-text-decoration-shorthand': 2.2.4(postcss@8.4.23) + '@csstools/postcss-trigonometric-functions': 2.1.1(postcss@8.4.23) + '@csstools/postcss-unset-value': 2.0.1(postcss@8.4.23) + autoprefixer: 10.4.14(postcss@8.4.23) + browserslist: 4.21.5 + css-blank-pseudo: 5.0.2(postcss@8.4.23) + css-has-pseudo: 5.0.2(postcss@8.4.23) + css-prefers-color-scheme: 8.0.2(postcss@8.4.23) + cssdb: 7.6.0 + postcss: 8.4.23 + postcss-attribute-case-insensitive: 6.0.2(postcss@8.4.23) + postcss-clamp: 4.1.0(postcss@8.4.23) + postcss-color-functional-notation: 5.1.0(postcss@8.4.23) + postcss-color-hex-alpha: 9.0.2(postcss@8.4.23) + postcss-color-rebeccapurple: 8.0.2(postcss@8.4.23) + postcss-custom-media: 9.1.4(postcss@8.4.23) + postcss-custom-properties: 13.2.0(postcss@8.4.23) + postcss-custom-selectors: 7.1.3(postcss@8.4.23) + postcss-dir-pseudo-class: 7.0.2(postcss@8.4.23) + postcss-double-position-gradients: 4.0.4(postcss@8.4.23) + postcss-focus-visible: 8.0.2(postcss@8.4.23) + postcss-focus-within: 7.0.2(postcss@8.4.23) + postcss-font-variant: 5.0.0(postcss@8.4.23) + postcss-gap-properties: 4.0.1(postcss@8.4.23) + postcss-image-set-function: 5.0.2(postcss@8.4.23) + postcss-initial: 4.0.1(postcss@8.4.23) + postcss-lab-function: 5.2.3(postcss@8.4.23) + postcss-logical: 6.2.0(postcss@8.4.23) + postcss-nesting: 11.2.2(postcss@8.4.23) + postcss-opacity-percentage: 2.0.0(postcss@8.4.23) + postcss-overflow-shorthand: 4.0.1(postcss@8.4.23) + postcss-page-break: 3.0.4(postcss@8.4.23) + postcss-place: 8.0.1(postcss@8.4.23) + postcss-pseudo-class-any-link: 8.0.2(postcss@8.4.23) + postcss-replace-overflow-wrap: 4.0.0(postcss@8.4.23) + postcss-selector-not: 7.0.1(postcss@8.4.23) + postcss-value-parser: 4.2.0 + dev: true + + /postcss-pseudo-class-any-link@8.0.2(postcss@8.4.23): + resolution: {integrity: sha512-FYTIuRE07jZ2CW8POvctRgArQJ43yxhr5vLmImdKUvjFCkR09kh8pIdlCwdx/jbFm7MiW4QP58L4oOUv3grQYA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 dependencies: postcss: 8.4.23 postcss-selector-parser: 6.0.11 dev: true + /postcss-replace-overflow-wrap@4.0.0(postcss@8.4.23): + resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==} + peerDependencies: + postcss: ^8.0.3 + dependencies: + postcss: 8.4.23 + dev: true + /postcss-safe-parser@6.0.0(postcss@8.4.23): resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==} engines: {node: '>=12.0'} @@ -2549,6 +3147,16 @@ packages: postcss: 8.4.23 dev: true + /postcss-selector-not@7.0.1(postcss@8.4.23): + resolution: {integrity: sha512-1zT5C27b/zeJhchN7fP0kBr16Cc61mu7Si9uWWLoA3Px/D9tIJPKchJCkUH3tPO5D0pCFmGeApAv8XpXBQJ8SQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.23 + postcss-selector-parser: 6.0.11 + dev: true + /postcss-selector-parser@6.0.11: resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==} engines: {node: '>=4'} @@ -2590,6 +3198,10 @@ packages: hasBin: true dev: true + /prism-svelte@0.5.0: + resolution: {integrity: sha512-db91Bf3pRGKDPz1lAqLFSJXeW13mulUJxhycysFpfXV5MIK7RgWWK2E5aPAa71s8TCzQUXxF5JOV42/iOs6QkA==} + dev: false + /prisma@4.14.1: resolution: {integrity: sha512-z6hxzTMYqT9SIKlzD08dhzsLUpxjFKKsLpp5/kBDnSqiOjtUyyl/dC5tzxLcOa3jkEHQ8+RpB/fE3w8bgNP51g==} engines: {node: '>=14.17'} @@ -2598,6 +3210,11 @@ packages: dependencies: '@prisma/engines': 4.14.1 + /prismjs@1.29.0: + resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} + engines: {node: '>=6'} + dev: false + /proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} dev: false @@ -2927,6 +3544,17 @@ packages: svelte: 3.59.1 dev: false + /svelte-legos@0.2.1(svelte@3.59.1): + resolution: {integrity: sha512-M7IncWP2e8FaHzQN1DSzxLSoq/6aQYWZ93REZam9bYlvLEjdPGWLAYdpPNnnZtXlHco+o3zrgYTdwsyyS9beUQ==} + peerDependencies: + svelte: ^3.54.0 + dependencies: + canvas-confetti: 1.6.0 + prism-svelte: 0.5.0 + prismjs: 1.29.0 + svelte: 3.59.1 + dev: false + /svelte-preprocess@4.10.7(postcss-load-config@4.0.1)(postcss@8.4.23)(sass@1.62.1)(svelte@3.59.1)(typescript@4.9.5): resolution: {integrity: sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==} engines: {node: '>= 9.11.2'} diff --git a/postcss.config.cjs b/postcss.config.cjs index 279f43f..6b00645 100644 --- a/postcss.config.cjs +++ b/postcss.config.cjs @@ -1,24 +1,17 @@ -// const tailwindcss = require('tailwindcss'); -const autoprefixer = require('autoprefixer'); -const postcssMediaMinmax = require('postcss-media-minmax'); -const customMedia = require('postcss-custom-media'); +const postcssPresetEnv = require('postcss-preset-env'); const atImport = require('postcss-import'); -const postcssNested = require('postcss-nested'); -const postcssEnvFunction = require('postcss-env-function'); const config = { plugins: [ - //Some plugins, like tailwindcss/nesting, need to run before Tailwind, - // tailwindcss(), - //But others, like autoprefixer, need to run after - autoprefixer(), - postcssMediaMinmax, - customMedia, atImport(), - postcssNested, - postcssEnvFunction({ - importFrom: './src/lib/util/environmentVariables.json' - }), + postcssPresetEnv({ + stage: 3, + features: { + 'nesting-rules': true, + 'custom-media-queries': true, + 'media-query-ranges': true, + } + }) ] }; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index df8cbbb..9a0b6c9 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -21,8 +21,10 @@ model AuthUser { verified Boolean @default(false) receiveEmail Boolean @default(false) token String? @unique - createdAt DateTime @default(now()) @db.Timestamp(6) - updatedAt DateTime @updatedAt @db.Timestamp(6) + collection Collection? + wishlist Wishlist[] + createdAt DateTime @default(now()) @db.Timestamp(6) + updatedAt DateTime @updatedAt @db.Timestamp(6) auth_session AuthSession[] auth_key AuthKey[] @@ -57,8 +59,52 @@ enum Role { ADMIN } +model Collection { + id String @id @default(cuid()) + user_id String @unique + auth_user AuthUser @relation(references: [id], fields: [user_id]) + items CollectionItem[] + + @@index([user_id]) + @@map("collections") +} + +model CollectionItem { + id String @id @default(cuid()) + collection_id String + collection Collection @relation(references: [id], fields: [collection_id]) + game_id String + game Game @relation(references: [id], fields: [game_id]) + times_played Int + + @@index([game_id, collection_id]) + @@map("collection_items") +} + +model Wishlist { + id String @id @default(cuid()) + name String + user_id String + auth_user AuthUser @relation(references: [id], fields: [user_id]) + items WishlistItem[] + + @@index([user_id]) + @@map("wishlists") +} + +model WishlistItem { + id String @id @default(cuid()) + wishlist_id String + wishlist Wishlist @relation(references: [id], fields: [wishlist_id]) + game_id String + game Game @relation(references: [id], fields: [game_id]) + + @@index([game_id, wishlist_id]) + @@map("wishlist_items") +} + model Game { - id String @id + id String @id @default(cuid()) name String description String? yearPublished Int? @@ -75,24 +121,43 @@ model Game { weightUnits String? bggId String? bggUrl String? - primaryPublisher Publisher? + primary_publisher_id String + primaryPublisher Publisher? @relation("PrimaryPublishers", references: [id], fields: [primary_publisher_id]) categories Category[] mechanics Mechanic[] designers Designer[] publishers Publisher[] artists Artist[] - names String[] @db.Array + names GameName[] expansions Expansion[] + collection_items CollectionItem[] + wishlist_items WishlistItem[] + external_id String @unique + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt - @@index([game_id]) + @@index([primary_publisher_id]) @@map("games") } +model GameName { + id String @id @default(cuid()) + name String + game_id String + game Game @relation(references: [id], fields: [game_id]) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + @@index([game_id]) + @@map("game_names") +} + model Publisher { - id String @id + id String @id @default(cuid()) name String - games Game[] @relation(references: [id], fields: [game_id]) - primaryPublisher Game[] @relation("PrimaryPublisher") + games Game[] + primaryPublisher Game[] @relation("PrimaryPublishers") + external_id String @unique createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@ -100,10 +165,11 @@ model Publisher { } model Category { - id String @id + id String @id @default(cuid()) name String slug String - games Game[] @relation("GameCategories") + games Game[] + external_id String @unique createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@ -111,9 +177,10 @@ model Category { } model Mechanic { - id String @id + id String @id @default(cuid()) name String - games Game[] @relation("GameMechanics") + games Game[] + external_id String @unique createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@ -121,9 +188,10 @@ model Mechanic { } model Designer { - id String @id + id String @id @default(cuid()) name String - games Game[] @relation("GameDesigners") + games Game[] + external_id String @unique createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@ -131,9 +199,10 @@ model Designer { } model Artist { - id String @id + id String @id @default(cuid()) name String - games Game[] @relation("GameArtists") + games Game[] + external_id String @unique createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@ -141,13 +210,15 @@ model Artist { } model Expansion { - id String @id + id String @id @default(cuid()) name String yearPublished Int? - baseGame Game? @relation("Expansions", fields: [baseGameId], references: [id]) - baseGameId String? + baseGame Game? @relation(fields: [base_game_id], references: [id]) + base_game_id String? + external_id String @unique createdAt DateTime @default(now()) updatedAt DateTime @updatedAt + @@index([base_game_id]) @@map("expansions") } diff --git a/src/lib/components/button/index.svelte b/src/lib/components/button/index.svelte index ad9d981..b67a43f 100644 --- a/src/lib/components/button/index.svelte +++ b/src/lib/components/button/index.svelte @@ -23,7 +23,7 @@ text-align: start; background-color: var(--color-btn-primary-active); - @media (min-width: env(--large-viewport)) { + @media (min-width: 1000px) { min-width: 23.5rem; } } diff --git a/src/lib/components/dialog/ClearWishlistDialog.svelte b/src/lib/components/dialog/ClearWishlistDialog.svelte index 60e2967..521fe2a 100644 --- a/src/lib/components/dialog/ClearWishlistDialog.svelte +++ b/src/lib/components/dialog/ClearWishlistDialog.svelte @@ -48,7 +48,7 @@ gap: 2rem; margin: 1rem 0; - button { + & button { display: flex; place-content: center; gap: 1rem; diff --git a/src/lib/components/search/textSearch/index.svelte b/src/lib/components/search/textSearch/index.svelte index 1e8154f..7d7d24f 100644 --- a/src/lib/components/search/textSearch/index.svelte +++ b/src/lib/components/search/textSearch/index.svelte @@ -285,7 +285,7 @@ .games { margin: 2rem 0rem; - h1 { + & h1 { margin-bottom: 2rem; } } @@ -296,15 +296,19 @@ grid-template-columns: repeat(var(--listColumns), minmax(250px, 1fr)); gap: 2rem; - @media screen and (env(--large-viewport) < width <= env(--xxlarge-viewport)) { + @media (width >= 1500px) { --listColumns: 3; } - @media screen and (env(--small-viewport) < width <= env(--large-viewport)) { + @media (1000px < width <= 1500px) { + --listColumns: 3; + } + + @media (600px < width <= 1000px) { --listColumns: 2; } - @media screen and (width <= env(--small-viewport)) { + @media (width <= 600px) { --listColumns: 1; } } diff --git a/src/routes/+layout.server.ts b/src/routes/+layout.server.ts index c564df9..52d59f8 100644 --- a/src/routes/+layout.server.ts +++ b/src/routes/+layout.server.ts @@ -1,6 +1,6 @@ -export const load = async (event: { locals: { user: any }; url: URL }) => { +export const load = async ({ url, locals }) => { return { - url: event.url.pathname, - user: event.locals.user + url: url.pathname, + user: locals.user }; }; diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index b07d9ca..11bdde8 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -123,7 +123,7 @@ place-items: center; gap: 1rem; - h3 { + & h3 { color: white; } } diff --git a/src/routes/search/+page.server.ts b/src/routes/search/+page.server.ts index da8e3a5..0c84017 100644 --- a/src/routes/search/+page.server.ts +++ b/src/routes/search/+page.server.ts @@ -1,4 +1,3 @@ -import type { Actions, RequestEvent } from '../$types'; import { BOARD_GAME_ATLAS_CLIENT_ID } from '$env/static/private'; import { error } from '@sveltejs/kit'; import { superValidate } from 'sveltekit-superforms/server'; @@ -109,7 +108,7 @@ export const load = async ({ fetch, url }) => { }; }; -export const actions: Actions = { +export const actions = { random: async ({ request }): Promise => { const form = await superValidate(request, search_schema); const queryParams: SearchQuery = {