+58
.eslintrc.json
+58
.eslintrc.json
···
1
+
{
2
+
"parser": "@typescript-eslint/parser",
3
+
"parserOptions": {
4
+
"ecmaVersion": 2021,
5
+
"sourceType": "module",
6
+
"ecmaFeatures": {
7
+
"jsx": true
8
+
}
9
+
},
10
+
"extends": [
11
+
"eslint:recommended",
12
+
"plugin:@typescript-eslint/recommended",
13
+
"plugin:react/recommended",
14
+
"plugin:react-hooks/recommended",
15
+
"plugin:jsx-a11y/recommended",
16
+
"prettier"
17
+
],
18
+
"plugins": ["@typescript-eslint", "react", "react-hooks", "jsx-a11y"],
19
+
"settings": {
20
+
"react": {
21
+
"version": "detect"
22
+
}
23
+
},
24
+
"env": {
25
+
"browser": true,
26
+
"es2021": true,
27
+
"node": true
28
+
},
29
+
"rules": {
30
+
"@typescript-eslint/no-unused-vars": [
31
+
"warn",
32
+
{
33
+
"argsIgnorePattern": "^_",
34
+
"varsIgnorePattern": "^_"
35
+
}
36
+
],
37
+
"@typescript-eslint/no-explicit-any": "warn",
38
+
"react-hooks/rules-of-hooks": "error",
39
+
"react-hooks/exhaustive-deps": "warn",
40
+
"react/no-unescaped-entities": "warn",
41
+
"react/react-in-jsx-scope": "off",
42
+
"react/prop-types": "off",
43
+
"no-console": [
44
+
"warn",
45
+
{
46
+
"allow": ["warn", "error"]
47
+
}
48
+
]
49
+
},
50
+
"ignorePatterns": [
51
+
"node_modules/",
52
+
".next/",
53
+
"out/",
54
+
"public/",
55
+
"*.config.js",
56
+
"*.config.ts"
57
+
]
58
+
}
+12
.prettierrc
+12
.prettierrc
+661
-12
bun.lock
+661
-12
bun.lock
···
36
36
"@types/node": "^22.18.6",
37
37
"@types/react": "^19.1.15",
38
38
"@types/react-dom": "^19.1.9",
39
+
"@typescript-eslint/eslint-plugin": "^8.46.4",
40
+
"@typescript-eslint/parser": "^8.46.4",
41
+
"eslint": "8",
42
+
"eslint-config-next": "^16.0.3",
43
+
"eslint-config-prettier": "^10.1.8",
44
+
"eslint-plugin-jsx-a11y": "^6.10.2",
45
+
"eslint-plugin-react": "^7.37.5",
46
+
"eslint-plugin-react-hooks": "^7.0.1",
39
47
"husky": "^9.1.7",
40
48
"lint-staged": "^16.2.3",
41
49
"postcss": "^8.5.6",
42
50
"prettier": "3.6.2",
51
+
"prettier-plugin-tailwindcss": "^0.7.1",
43
52
"string-replace-loader": "^3.2.0",
44
53
"tailwindcss": "^4.1.13",
45
54
"typescript": "^5.9.2",
···
86
95
87
96
"@arcjet/transport": ["@arcjet/transport@1.0.0-beta.8", "", { "dependencies": { "@bufbuild/protobuf": "1.10.1", "@connectrpc/connect": "1.6.1", "@connectrpc/connect-node": "1.6.1", "@connectrpc/connect-web": "1.6.1" } }, "sha512-Nlbd5ngPLkkZhmDece8S/kJPgXn1FubjXgTX90XayMFqUXUU+GJ8Jh5mqK1hnV91Y8BU8MvN4CYZ6NjpJ3VZ+g=="],
88
97
98
+
"@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="],
99
+
100
+
"@babel/compat-data": ["@babel/compat-data@7.28.5", "", {}, "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA=="],
101
+
102
+
"@babel/core": ["@babel/core@7.28.5", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.28.3", "@babel/helpers": "^7.28.4", "@babel/parser": "^7.28.5", "@babel/template": "^7.27.2", "@babel/traverse": "^7.28.5", "@babel/types": "^7.28.5", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw=="],
103
+
104
+
"@babel/generator": ["@babel/generator@7.28.5", "", { "dependencies": { "@babel/parser": "^7.28.5", "@babel/types": "^7.28.5", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ=="],
105
+
106
+
"@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.27.2", "", { "dependencies": { "@babel/compat-data": "^7.27.2", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ=="],
107
+
108
+
"@babel/helper-globals": ["@babel/helper-globals@7.28.0", "", {}, "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw=="],
109
+
110
+
"@babel/helper-module-imports": ["@babel/helper-module-imports@7.27.1", "", { "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w=="],
111
+
112
+
"@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.28.3", "", { "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1", "@babel/traverse": "^7.28.3" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw=="],
113
+
114
+
"@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="],
115
+
116
+
"@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="],
117
+
118
+
"@babel/helper-validator-option": ["@babel/helper-validator-option@7.27.1", "", {}, "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="],
119
+
120
+
"@babel/helpers": ["@babel/helpers@7.28.4", "", { "dependencies": { "@babel/template": "^7.27.2", "@babel/types": "^7.28.4" } }, "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w=="],
121
+
122
+
"@babel/parser": ["@babel/parser@7.28.5", "", { "dependencies": { "@babel/types": "^7.28.5" }, "bin": "./bin/babel-parser.js" }, "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ=="],
123
+
124
+
"@babel/template": ["@babel/template@7.27.2", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/parser": "^7.27.2", "@babel/types": "^7.27.1" } }, "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw=="],
125
+
126
+
"@babel/traverse": ["@babel/traverse@7.28.5", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.28.5", "@babel/template": "^7.27.2", "@babel/types": "^7.28.5", "debug": "^4.3.1" } }, "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ=="],
127
+
128
+
"@babel/types": ["@babel/types@7.28.5", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA=="],
129
+
89
130
"@bufbuild/protobuf": ["@bufbuild/protobuf@1.10.1", "", {}, "sha512-wJ8ReQbHxsAfXhrf9ixl0aYbZorRuOWpBNzm8pL8ftmSxQx/wnJD5Eg861NwJU/czy2VXFIebCeZnZrI9rktIQ=="],
90
131
91
132
"@connectrpc/connect": ["@connectrpc/connect@1.6.1", "", { "peerDependencies": { "@bufbuild/protobuf": "^1.10.0" } }, "sha512-KchMDNtU4CDTdkyf0qG7ugJ6qHTOR/aI7XebYn3OTCNagaDYWiZUVKgRgwH79yeMkpNgvEUaXSK7wKjaBK9b/Q=="],
···
97
138
"@corex/deepmerge": ["@corex/deepmerge@4.0.43", "", {}, "sha512-N8uEMrMPL0cu/bdboEWpQYb/0i2K5Qn8eCsxzOmxSggJbbQte7ljMRoXm917AbntqTGOzdTu+vP3KOOzoC70HQ=="],
98
139
99
140
"@discoveryjs/json-ext": ["@discoveryjs/json-ext@0.5.7", "", {}, "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw=="],
141
+
142
+
"@emnapi/core": ["@emnapi/core@1.7.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" } }, "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg=="],
100
143
101
144
"@emnapi/runtime": ["@emnapi/runtime@1.7.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA=="],
102
145
146
+
"@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.1.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ=="],
147
+
148
+
"@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.9.0", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g=="],
149
+
150
+
"@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.2", "", {}, "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew=="],
151
+
152
+
"@eslint/eslintrc": ["@eslint/eslintrc@2.1.4", "", { "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" } }, "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ=="],
153
+
154
+
"@eslint/js": ["@eslint/js@8.57.1", "", {}, "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q=="],
155
+
103
156
"@fastify/busboy": ["@fastify/busboy@2.1.1", "", {}, "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA=="],
104
157
105
158
"@floating-ui/core": ["@floating-ui/core@1.7.3", "", { "dependencies": { "@floating-ui/utils": "^0.2.10" } }, "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w=="],
···
109
162
"@floating-ui/react-dom": ["@floating-ui/react-dom@2.1.6", "", { "dependencies": { "@floating-ui/dom": "^1.7.4" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw=="],
110
163
111
164
"@floating-ui/utils": ["@floating-ui/utils@0.2.10", "", {}, "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ=="],
165
+
166
+
"@humanwhocodes/config-array": ["@humanwhocodes/config-array@0.13.0", "", { "dependencies": { "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", "minimatch": "^3.0.5" } }, "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw=="],
167
+
168
+
"@humanwhocodes/module-importer": ["@humanwhocodes/module-importer@1.0.1", "", {}, "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="],
169
+
170
+
"@humanwhocodes/object-schema": ["@humanwhocodes/object-schema@2.0.3", "", {}, "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA=="],
112
171
113
172
"@img/colour": ["@img/colour@1.0.0", "", {}, "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw=="],
114
173
···
172
231
173
232
"@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="],
174
233
234
+
"@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.12", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@tybys/wasm-util": "^0.10.0" } }, "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ=="],
235
+
175
236
"@next/bundle-analyzer": ["@next/bundle-analyzer@15.5.6", "", { "dependencies": { "webpack-bundle-analyzer": "4.10.1" } }, "sha512-IHeyk2s9/fVDAGDLNbBkCSG8XBabhuMajiaJggjsg4GyFIswh78DzLo5Nl5th8QTs3U/teYeczvfeV9w1Tx3qA=="],
176
237
177
238
"@next/env": ["@next/env@16.0.3", "", {}, "sha512-IqgtY5Vwsm14mm/nmQaRMmywCU+yyMIYfk3/MHZ2ZTJvwVbBn3usZnjMi1GacrMVzVcAxJShTCpZlPs26EdEjQ=="],
239
+
240
+
"@next/eslint-plugin-next": ["@next/eslint-plugin-next@16.0.3", "", { "dependencies": { "fast-glob": "3.3.1" } }, "sha512-6sPWmZetzFWMsz7Dhuxsdmbu3fK+/AxKRtj7OB0/3OZAI2MHB/v2FeYh271LZ9abvnM1WIwWc/5umYjx0jo5sQ=="],
178
241
179
242
"@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@16.0.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-MOnbd92+OByu0p6QBAzq1ahVWzF6nyfiH07dQDez4/Nku7G249NjxDVyEfVhz8WkLiOEU+KFVnqtgcsfP2nLXg=="],
180
243
···
198
261
199
262
"@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="],
200
263
264
+
"@nolyfill/is-core-module": ["@nolyfill/is-core-module@1.0.39", "", {}, "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA=="],
265
+
201
266
"@phosphor-icons/react": ["@phosphor-icons/react@2.1.10", "", { "peerDependencies": { "react": ">= 16.8", "react-dom": ">= 16.8" } }, "sha512-vt8Tvq8GLjheAZZYa+YG/pW7HDbov8El/MANW8pOAz4eGxrwhnbfrQZq0Cp4q8zBEu8NIhHdnr+r8thnfRSNYA=="],
202
267
203
268
"@polka/url": ["@polka/url@1.0.0-next.29", "", {}, "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww=="],
···
254
319
255
320
"@resvg/resvg-wasm": ["@resvg/resvg-wasm@2.4.0", "", {}, "sha512-C7c51Nn4yTxXFKvgh2txJFNweaVcfUPQxwEUFw4aWsCmfiBDJsTSwviIF8EcwjQ6k8bPyMWCl1vw4BdxE569Cg=="],
256
321
322
+
"@rtsao/scc": ["@rtsao/scc@1.1.0", "", {}, "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g=="],
323
+
257
324
"@shuding/opentype.js": ["@shuding/opentype.js@1.4.0-beta.0", "", { "dependencies": { "fflate": "^0.7.3", "string.prototype.codepointat": "^0.2.1" }, "bin": { "ot": "bin/ot" } }, "sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA=="],
258
325
259
326
"@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="],
···
290
357
291
358
"@tailwindcss/typography": ["@tailwindcss/typography@0.5.19", "", { "dependencies": { "postcss-selector-parser": "6.0.10" }, "peerDependencies": { "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1" } }, "sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg=="],
292
359
360
+
"@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="],
361
+
293
362
"@types/eslint": ["@types/eslint@9.6.1", "", { "dependencies": { "@types/estree": "*", "@types/json-schema": "*" } }, "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag=="],
294
363
295
364
"@types/eslint-scope": ["@types/eslint-scope@3.7.7", "", { "dependencies": { "@types/eslint": "*", "@types/estree": "*" } }, "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg=="],
···
298
367
299
368
"@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="],
300
369
370
+
"@types/json5": ["@types/json5@0.0.29", "", {}, "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ=="],
371
+
301
372
"@types/node": ["@types/node@22.19.1", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ=="],
302
373
303
374
"@types/react": ["@types/react@19.2.5", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-keKxkZMqnDicuvFoJbzrhbtdLSPhj/rZThDlKWCDbgXmUg0rEUFtRssDXKYmtXluZlIqiC5VqkCgRwzuyLHKHw=="],
304
375
305
376
"@types/react-dom": ["@types/react-dom@19.2.3", "", { "peerDependencies": { "@types/react": "^19.2.0" } }, "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ=="],
306
377
378
+
"@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.46.4", "", { "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.46.4", "@typescript-eslint/type-utils": "8.46.4", "@typescript-eslint/utils": "8.46.4", "@typescript-eslint/visitor-keys": "8.46.4", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.46.4", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-R48VhmTJqplNyDxCyqqVkFSZIx1qX6PzwqgcXn1olLrzxcSBDlOsbtcnQuQhNtnNiJ4Xe5gREI1foajYaYU2Vg=="],
379
+
380
+
"@typescript-eslint/parser": ["@typescript-eslint/parser@8.46.4", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.46.4", "@typescript-eslint/types": "8.46.4", "@typescript-eslint/typescript-estree": "8.46.4", "@typescript-eslint/visitor-keys": "8.46.4", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-tK3GPFWbirvNgsNKto+UmB/cRtn6TZfyw0D6IKrW55n6Vbs7KJoZtI//kpTKzE/DUmmnAFD8/Ca46s7Obs92/w=="],
381
+
382
+
"@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.46.4", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.46.4", "@typescript-eslint/types": "^8.46.4", "debug": "^4.3.4" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-nPiRSKuvtTN+no/2N1kt2tUh/HoFzeEgOm9fQ6XQk4/ApGqjx0zFIIaLJ6wooR1HIoozvj2j6vTi/1fgAz7UYQ=="],
383
+
384
+
"@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.46.4", "", { "dependencies": { "@typescript-eslint/types": "8.46.4", "@typescript-eslint/visitor-keys": "8.46.4" } }, "sha512-tMDbLGXb1wC+McN1M6QeDx7P7c0UWO5z9CXqp7J8E+xGcJuUuevWKxuG8j41FoweS3+L41SkyKKkia16jpX7CA=="],
385
+
386
+
"@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.46.4", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-+/XqaZPIAk6Cjg7NWgSGe27X4zMGqrFqZ8atJsX3CWxH/jACqWnrWI68h7nHQld0y+k9eTTjb9r+KU4twLoo9A=="],
387
+
388
+
"@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.46.4", "", { "dependencies": { "@typescript-eslint/types": "8.46.4", "@typescript-eslint/typescript-estree": "8.46.4", "@typescript-eslint/utils": "8.46.4", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-V4QC8h3fdT5Wro6vANk6eojqfbv5bpwHuMsBcJUJkqs2z5XnYhJzyz9Y02eUmF9u3PgXEUiOt4w4KHR3P+z0PQ=="],
389
+
390
+
"@typescript-eslint/types": ["@typescript-eslint/types@8.46.4", "", {}, "sha512-USjyxm3gQEePdUwJBFjjGNG18xY9A2grDVGuk7/9AkjIF1L+ZrVnwR5VAU5JXtUnBL/Nwt3H31KlRDaksnM7/w=="],
391
+
392
+
"@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.46.4", "", { "dependencies": { "@typescript-eslint/project-service": "8.46.4", "@typescript-eslint/tsconfig-utils": "8.46.4", "@typescript-eslint/types": "8.46.4", "@typescript-eslint/visitor-keys": "8.46.4", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-7oV2qEOr1d4NWNmpXLR35LvCfOkTNymY9oyW+lUHkmCno7aOmIf/hMaydnJBUTBMRCOGZh8YjkFOc8dadEoNGA=="],
393
+
394
+
"@typescript-eslint/utils": ["@typescript-eslint/utils@8.46.4", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", "@typescript-eslint/scope-manager": "8.46.4", "@typescript-eslint/types": "8.46.4", "@typescript-eslint/typescript-estree": "8.46.4" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-AbSv11fklGXV6T28dp2Me04Uw90R2iJ30g2bgLz529Koehrmkbs1r7paFqr1vPCZi7hHwYxYtxfyQMRC8QaVSg=="],
395
+
396
+
"@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.46.4", "", { "dependencies": { "@typescript-eslint/types": "8.46.4", "eslint-visitor-keys": "^4.2.1" } }, "sha512-/++5CYLQqsO9HFGLI7APrxBJYo+5OCMpViuhV8q5/Qa3o5mMrF//eQHks+PXcsAVaLdn817fMuS7zqoXNNZGaw=="],
397
+
398
+
"@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="],
399
+
400
+
"@unrs/resolver-binding-android-arm-eabi": ["@unrs/resolver-binding-android-arm-eabi@1.11.1", "", { "os": "android", "cpu": "arm" }, "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw=="],
401
+
402
+
"@unrs/resolver-binding-android-arm64": ["@unrs/resolver-binding-android-arm64@1.11.1", "", { "os": "android", "cpu": "arm64" }, "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g=="],
403
+
404
+
"@unrs/resolver-binding-darwin-arm64": ["@unrs/resolver-binding-darwin-arm64@1.11.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g=="],
405
+
406
+
"@unrs/resolver-binding-darwin-x64": ["@unrs/resolver-binding-darwin-x64@1.11.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ=="],
407
+
408
+
"@unrs/resolver-binding-freebsd-x64": ["@unrs/resolver-binding-freebsd-x64@1.11.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw=="],
409
+
410
+
"@unrs/resolver-binding-linux-arm-gnueabihf": ["@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1", "", { "os": "linux", "cpu": "arm" }, "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw=="],
411
+
412
+
"@unrs/resolver-binding-linux-arm-musleabihf": ["@unrs/resolver-binding-linux-arm-musleabihf@1.11.1", "", { "os": "linux", "cpu": "arm" }, "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw=="],
413
+
414
+
"@unrs/resolver-binding-linux-arm64-gnu": ["@unrs/resolver-binding-linux-arm64-gnu@1.11.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ=="],
415
+
416
+
"@unrs/resolver-binding-linux-arm64-musl": ["@unrs/resolver-binding-linux-arm64-musl@1.11.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w=="],
417
+
418
+
"@unrs/resolver-binding-linux-ppc64-gnu": ["@unrs/resolver-binding-linux-ppc64-gnu@1.11.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA=="],
419
+
420
+
"@unrs/resolver-binding-linux-riscv64-gnu": ["@unrs/resolver-binding-linux-riscv64-gnu@1.11.1", "", { "os": "linux", "cpu": "none" }, "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ=="],
421
+
422
+
"@unrs/resolver-binding-linux-riscv64-musl": ["@unrs/resolver-binding-linux-riscv64-musl@1.11.1", "", { "os": "linux", "cpu": "none" }, "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew=="],
423
+
424
+
"@unrs/resolver-binding-linux-s390x-gnu": ["@unrs/resolver-binding-linux-s390x-gnu@1.11.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg=="],
425
+
426
+
"@unrs/resolver-binding-linux-x64-gnu": ["@unrs/resolver-binding-linux-x64-gnu@1.11.1", "", { "os": "linux", "cpu": "x64" }, "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w=="],
427
+
428
+
"@unrs/resolver-binding-linux-x64-musl": ["@unrs/resolver-binding-linux-x64-musl@1.11.1", "", { "os": "linux", "cpu": "x64" }, "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA=="],
429
+
430
+
"@unrs/resolver-binding-wasm32-wasi": ["@unrs/resolver-binding-wasm32-wasi@1.11.1", "", { "dependencies": { "@napi-rs/wasm-runtime": "^0.2.11" }, "cpu": "none" }, "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ=="],
431
+
432
+
"@unrs/resolver-binding-win32-arm64-msvc": ["@unrs/resolver-binding-win32-arm64-msvc@1.11.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw=="],
433
+
434
+
"@unrs/resolver-binding-win32-ia32-msvc": ["@unrs/resolver-binding-win32-ia32-msvc@1.11.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ=="],
435
+
436
+
"@unrs/resolver-binding-win32-x64-msvc": ["@unrs/resolver-binding-win32-x64-msvc@1.11.1", "", { "os": "win32", "cpu": "x64" }, "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g=="],
437
+
307
438
"@vercel/og": ["@vercel/og@0.6.8", "", { "dependencies": { "@resvg/resvg-wasm": "2.4.0", "satori": "0.12.2", "yoga-wasm-web": "0.3.3" } }, "sha512-e4kQK9mP8ntpo3dACWirGod/hHv4qO5JMj9a/0a2AZto7b4persj5YP7t1Er372gTtYFTYxNhMx34jRvHooglw=="],
308
439
309
440
"@vercel/speed-insights": ["@vercel/speed-insights@1.2.0", "", { "peerDependencies": { "@sveltejs/kit": "^1 || ^2", "next": ">= 13", "react": "^18 || ^19 || ^19.0.0-rc", "svelte": ">= 4", "vue": "^3", "vue-router": "^4" }, "optionalPeers": ["@sveltejs/kit", "next", "react", "svelte", "vue", "vue-router"] }, "sha512-y9GVzrUJ2xmgtQlzFP2KhVRoCglwfRQgjyfY607aU0hh0Un6d0OUyrJkjuAlsV18qR4zfoFPs/BiIj9YDS6Wzw=="],
···
346
477
347
478
"acorn-import-phases": ["acorn-import-phases@1.0.4", "", { "peerDependencies": { "acorn": "^8.14.0" } }, "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ=="],
348
479
480
+
"acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="],
481
+
349
482
"acorn-walk": ["acorn-walk@8.3.4", "", { "dependencies": { "acorn": "^8.11.0" } }, "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g=="],
350
483
351
-
"ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="],
484
+
"ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="],
352
485
353
486
"ajv-formats": ["ajv-formats@2.1.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA=="],
354
487
···
356
489
357
490
"ansi-escapes": ["ansi-escapes@7.2.0", "", { "dependencies": { "environment": "^1.0.0" } }, "sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw=="],
358
491
359
-
"ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="],
492
+
"ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
360
493
361
-
"ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="],
494
+
"ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="],
362
495
363
496
"arcjet": ["arcjet@1.0.0-beta.8", "", { "dependencies": { "@arcjet/analyze": "1.0.0-beta.8", "@arcjet/cache": "1.0.0-beta.8", "@arcjet/duration": "1.0.0-beta.8", "@arcjet/headers": "1.0.0-beta.8", "@arcjet/protocol": "1.0.0-beta.8", "@arcjet/runtime": "1.0.0-beta.8", "@arcjet/stable-hash": "1.0.0-beta.8" } }, "sha512-5nkeNqVbvIpqloZ7rhuYZEzUc4L2KBlBdA+kit5CQQC+XNtdpLEobNQMgDfdz3LrPn9TOfRuXwMQvNvWY8lqig=="],
364
497
498
+
"argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="],
499
+
500
+
"aria-query": ["aria-query@5.3.2", "", {}, "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw=="],
501
+
502
+
"array-buffer-byte-length": ["array-buffer-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "is-array-buffer": "^3.0.5" } }, "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw=="],
503
+
504
+
"array-includes": ["array-includes@3.1.9", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.0", "es-object-atoms": "^1.1.1", "get-intrinsic": "^1.3.0", "is-string": "^1.1.1", "math-intrinsics": "^1.1.0" } }, "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ=="],
505
+
506
+
"array.prototype.findlast": ["array.prototype.findlast@1.2.5", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-shim-unscopables": "^1.0.2" } }, "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ=="],
507
+
508
+
"array.prototype.findlastindex": ["array.prototype.findlastindex@1.2.6", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.23.9", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "es-shim-unscopables": "^1.1.0" } }, "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ=="],
509
+
510
+
"array.prototype.flat": ["array.prototype.flat@1.3.3", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-shim-unscopables": "^1.0.2" } }, "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg=="],
511
+
512
+
"array.prototype.flatmap": ["array.prototype.flatmap@1.3.3", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-shim-unscopables": "^1.0.2" } }, "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg=="],
513
+
514
+
"array.prototype.tosorted": ["array.prototype.tosorted@1.1.4", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.3", "es-errors": "^1.3.0", "es-shim-unscopables": "^1.0.2" } }, "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA=="],
515
+
516
+
"arraybuffer.prototype.slice": ["arraybuffer.prototype.slice@1.0.4", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "is-array-buffer": "^3.0.4" } }, "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ=="],
517
+
518
+
"ast-types-flow": ["ast-types-flow@0.0.8", "", {}, "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ=="],
519
+
520
+
"async-function": ["async-function@1.0.0", "", {}, "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA=="],
521
+
522
+
"available-typed-arrays": ["available-typed-arrays@1.0.7", "", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="],
523
+
524
+
"axe-core": ["axe-core@4.11.0", "", {}, "sha512-ilYanEU8vxxBexpJd8cWM4ElSQq4QctCLKih0TSfjIfCQTeyH/6zVrmIJfLPrKTKJRbiG+cfnZbQIjAlJmF1jQ=="],
525
+
526
+
"axobject-query": ["axobject-query@4.1.0", "", {}, "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="],
527
+
528
+
"balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="],
529
+
365
530
"base64-js": ["base64-js@0.0.8", "", {}, "sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw=="],
366
531
367
532
"baseline-browser-mapping": ["baseline-browser-mapping@2.8.28", "", { "bin": { "baseline-browser-mapping": "dist/cli.js" } }, "sha512-gYjt7OIqdM0PcttNYP2aVrr2G0bMALkBaoehD4BuRGjAOtipg0b6wHg1yNL+s5zSnLZZrGHOw4IrND8CD+3oIQ=="],
368
533
534
+
"brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="],
535
+
369
536
"braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="],
370
537
371
538
"browserslist": ["browserslist@4.28.0", "", { "dependencies": { "baseline-browser-mapping": "^2.8.25", "caniuse-lite": "^1.0.30001754", "electron-to-chromium": "^1.5.249", "node-releases": "^2.0.27", "update-browserslist-db": "^1.1.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ=="],
372
539
373
540
"buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="],
374
541
542
+
"call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="],
543
+
544
+
"call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="],
545
+
546
+
"call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="],
547
+
548
+
"callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="],
549
+
375
550
"camelize": ["camelize@1.0.1", "", {}, "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ=="],
376
551
377
552
"caniuse-lite": ["caniuse-lite@1.0.30001755", "", {}, "sha512-44V+Jm6ctPj7R52Na4TLi3Zri4dWUljJd+RDm+j8LtNCc/ihLCT+X1TzoOAkRETEWqjuLnh9581Tl80FvK7jVA=="],
553
+
554
+
"chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="],
378
555
379
556
"chrome-trace-event": ["chrome-trace-event@1.0.4", "", {}, "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ=="],
380
557
···
387
564
"client-only": ["client-only@0.0.1", "", {}, "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="],
388
565
389
566
"clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="],
567
+
568
+
"color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="],
390
569
391
570
"color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="],
392
571
···
394
573
395
574
"commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="],
396
575
576
+
"concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="],
577
+
578
+
"convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="],
579
+
580
+
"cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="],
581
+
397
582
"css-background-parser": ["css-background-parser@0.1.0", "", {}, "sha512-2EZLisiZQ+7m4wwur/qiYJRniHX4K5Tc9w93MT3AS0WS1u5kaZ4FKXlOTBhOjc+CgEgPiGY+fX1yWD8UwpEqUA=="],
398
583
399
584
"css-box-shadow": ["css-box-shadow@1.0.0-3", "", {}, "sha512-9jaqR6e7Ohds+aWwmhe6wILJ99xYQbfmK9QQB9CcMjDbTxPZjwEmUQpU91OG05Xgm8BahT5fW+svbsQGjS/zPg=="],
···
408
593
409
594
"csstype": ["csstype@3.2.2", "", {}, "sha512-D80T+tiqkd/8B0xNlbstWDG4x6aqVfO52+OlSUNIdkTvmNw0uQpJLeos2J/2XvpyidAFuTPmpad+tUxLndwj6g=="],
410
595
596
+
"damerau-levenshtein": ["damerau-levenshtein@1.0.8", "", {}, "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA=="],
597
+
598
+
"data-view-buffer": ["data-view-buffer@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ=="],
599
+
600
+
"data-view-byte-length": ["data-view-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ=="],
601
+
602
+
"data-view-byte-offset": ["data-view-byte-offset@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ=="],
603
+
411
604
"date-fns": ["date-fns@4.1.0", "", {}, "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg=="],
412
605
413
606
"date-fns-tz": ["date-fns-tz@3.2.0", "", { "peerDependencies": { "date-fns": "^3.0.0 || ^4.0.0" } }, "sha512-sg8HqoTEulcbbbVXeg84u5UnlsQa8GS5QXMqjjYIhS4abEVVKIUwe0/l/UhrZdKaL/W5eWZNlbTeEIiOXTcsBQ=="],
414
607
415
608
"debounce": ["debounce@1.2.1", "", {}, "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug=="],
416
609
610
+
"debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="],
611
+
612
+
"deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="],
613
+
614
+
"define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="],
615
+
616
+
"define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="],
617
+
417
618
"detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="],
619
+
620
+
"doctrine": ["doctrine@3.0.0", "", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w=="],
621
+
622
+
"dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="],
418
623
419
624
"duplexer": ["duplexer@0.1.2", "", {}, "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg=="],
420
625
421
626
"electron-to-chromium": ["electron-to-chromium@1.5.254", "", {}, "sha512-DcUsWpVhv9svsKRxnSCZ86SjD+sp32SGidNB37KpqXJncp1mfUgKbHvBomE89WJDbfVKw1mdv5+ikrvd43r+Bg=="],
422
627
423
-
"emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="],
628
+
"emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="],
424
629
425
630
"enhanced-resolve": ["enhanced-resolve@5.18.3", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww=="],
426
631
427
632
"environment": ["environment@1.1.0", "", {}, "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q=="],
428
633
634
+
"es-abstract": ["es-abstract@1.24.0", "", { "dependencies": { "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", "get-intrinsic": "^1.3.0", "get-proto": "^1.0.1", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "internal-slot": "^1.1.0", "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", "is-negative-zero": "^2.0.3", "is-regex": "^1.2.1", "is-set": "^2.0.3", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", "stop-iteration-iterator": "^1.1.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.3", "typed-array-byte-length": "^1.0.3", "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", "which-typed-array": "^1.1.19" } }, "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg=="],
635
+
636
+
"es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="],
637
+
638
+
"es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="],
639
+
640
+
"es-iterator-helpers": ["es-iterator-helpers@1.2.1", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.0.3", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.6", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "iterator.prototype": "^1.1.4", "safe-array-concat": "^1.1.3" } }, "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w=="],
641
+
429
642
"es-module-lexer": ["es-module-lexer@1.7.0", "", {}, "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA=="],
430
643
644
+
"es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="],
645
+
646
+
"es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="],
647
+
648
+
"es-shim-unscopables": ["es-shim-unscopables@1.1.0", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw=="],
649
+
650
+
"es-to-primitive": ["es-to-primitive@1.3.0", "", { "dependencies": { "is-callable": "^1.2.7", "is-date-object": "^1.0.5", "is-symbol": "^1.0.4" } }, "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g=="],
651
+
431
652
"escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="],
432
653
433
654
"escape-html": ["escape-html@1.0.3", "", {}, "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="],
434
655
435
656
"escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="],
436
657
437
-
"eslint-scope": ["eslint-scope@5.1.1", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw=="],
658
+
"eslint": ["eslint@8.57.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", "@eslint/js": "8.57.1", "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.2.2", "eslint-visitor-keys": "^3.4.3", "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "globals": "^13.19.0", "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3", "strip-ansi": "^6.0.1", "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" } }, "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA=="],
659
+
660
+
"eslint-config-next": ["eslint-config-next@16.0.3", "", { "dependencies": { "@next/eslint-plugin-next": "16.0.3", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", "eslint-plugin-import": "^2.32.0", "eslint-plugin-jsx-a11y": "^6.10.0", "eslint-plugin-react": "^7.37.0", "eslint-plugin-react-hooks": "^7.0.0", "globals": "16.4.0", "typescript-eslint": "^8.46.0" }, "peerDependencies": { "eslint": ">=9.0.0", "typescript": ">=3.3.1" }, "optionalPeers": ["typescript"] }, "sha512-5F6qDjcZldf0Y0ZbqvWvap9xzYUxyDf7/of37aeyhvkrQokj/4bT1JYWZdlWUr283aeVa+s52mPq9ogmGg+5dw=="],
661
+
662
+
"eslint-config-prettier": ["eslint-config-prettier@10.1.8", "", { "peerDependencies": { "eslint": ">=7.0.0" }, "bin": { "eslint-config-prettier": "bin/cli.js" } }, "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w=="],
663
+
664
+
"eslint-import-resolver-node": ["eslint-import-resolver-node@0.3.9", "", { "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", "resolve": "^1.22.4" } }, "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g=="],
665
+
666
+
"eslint-import-resolver-typescript": ["eslint-import-resolver-typescript@3.10.1", "", { "dependencies": { "@nolyfill/is-core-module": "1.0.39", "debug": "^4.4.0", "get-tsconfig": "^4.10.0", "is-bun-module": "^2.0.0", "stable-hash": "^0.0.5", "tinyglobby": "^0.2.13", "unrs-resolver": "^1.6.2" }, "peerDependencies": { "eslint": "*", "eslint-plugin-import": "*", "eslint-plugin-import-x": "*" }, "optionalPeers": ["eslint-plugin-import", "eslint-plugin-import-x"] }, "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ=="],
667
+
668
+
"eslint-module-utils": ["eslint-module-utils@2.12.1", "", { "dependencies": { "debug": "^3.2.7" } }, "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw=="],
669
+
670
+
"eslint-plugin-import": ["eslint-plugin-import@2.32.0", "", { "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", "array.prototype.findlastindex": "^1.2.6", "array.prototype.flat": "^1.3.3", "array.prototype.flatmap": "^1.3.3", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", "eslint-module-utils": "^2.12.1", "hasown": "^2.0.2", "is-core-module": "^2.16.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "object.groupby": "^1.0.3", "object.values": "^1.2.1", "semver": "^6.3.1", "string.prototype.trimend": "^1.0.9", "tsconfig-paths": "^3.15.0" }, "peerDependencies": { "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA=="],
671
+
672
+
"eslint-plugin-jsx-a11y": ["eslint-plugin-jsx-a11y@6.10.2", "", { "dependencies": { "aria-query": "^5.3.2", "array-includes": "^3.1.8", "array.prototype.flatmap": "^1.3.2", "ast-types-flow": "^0.0.8", "axe-core": "^4.10.0", "axobject-query": "^4.1.0", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", "hasown": "^2.0.2", "jsx-ast-utils": "^3.3.5", "language-tags": "^1.0.9", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "safe-regex-test": "^1.0.3", "string.prototype.includes": "^2.0.1" }, "peerDependencies": { "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" } }, "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q=="],
673
+
674
+
"eslint-plugin-react": ["eslint-plugin-react@7.37.5", "", { "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", "array.prototype.flatmap": "^1.3.3", "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", "es-iterator-helpers": "^1.2.1", "estraverse": "^5.3.0", "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", "object.entries": "^1.1.9", "object.fromentries": "^2.0.8", "object.values": "^1.2.1", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.5", "semver": "^6.3.1", "string.prototype.matchall": "^4.0.12", "string.prototype.repeat": "^1.0.0" }, "peerDependencies": { "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA=="],
675
+
676
+
"eslint-plugin-react-hooks": ["eslint-plugin-react-hooks@7.0.1", "", { "dependencies": { "@babel/core": "^7.24.4", "@babel/parser": "^7.24.4", "hermes-parser": "^0.25.1", "zod": "^3.25.0 || ^4.0.0", "zod-validation-error": "^3.5.0 || ^4.0.0" }, "peerDependencies": { "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, "sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA=="],
677
+
678
+
"eslint-scope": ["eslint-scope@7.2.2", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg=="],
679
+
680
+
"eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="],
681
+
682
+
"espree": ["espree@9.6.1", "", { "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.4.1" } }, "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ=="],
683
+
684
+
"esquery": ["esquery@1.6.0", "", { "dependencies": { "estraverse": "^5.1.0" } }, "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg=="],
438
685
439
686
"esrecurse": ["esrecurse@4.3.0", "", { "dependencies": { "estraverse": "^5.2.0" } }, "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="],
440
687
441
-
"estraverse": ["estraverse@4.3.0", "", {}, "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="],
688
+
"estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="],
689
+
690
+
"esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="],
442
691
443
692
"eventemitter3": ["eventemitter3@5.0.1", "", {}, "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="],
444
693
···
448
697
449
698
"fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="],
450
699
700
+
"fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="],
701
+
702
+
"fast-levenshtein": ["fast-levenshtein@2.0.6", "", {}, "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="],
703
+
451
704
"fast-uri": ["fast-uri@3.1.0", "", {}, "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA=="],
452
705
453
706
"fastq": ["fastq@1.19.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ=="],
707
+
708
+
"fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="],
454
709
455
710
"feed": ["feed@5.1.0", "", { "dependencies": { "xml-js": "^1.6.11" } }, "sha512-qGNhgYygnefSkAHHrNHqC7p3R8J0/xQDS/cYUud8er/qD9EFGWyCdUDfULHTJQN1d3H3WprzVwMc9MfB4J50Wg=="],
456
711
457
712
"fflate": ["fflate@0.7.4", "", {}, "sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw=="],
713
+
714
+
"file-entry-cache": ["file-entry-cache@6.0.1", "", { "dependencies": { "flat-cache": "^3.0.4" } }, "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg=="],
458
715
459
716
"fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="],
460
717
718
+
"find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="],
719
+
720
+
"flat-cache": ["flat-cache@3.2.0", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", "rimraf": "^3.0.2" } }, "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw=="],
721
+
722
+
"flatted": ["flatted@3.3.3", "", {}, "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg=="],
723
+
724
+
"for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="],
725
+
726
+
"fs.realpath": ["fs.realpath@1.0.0", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="],
727
+
728
+
"function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="],
729
+
730
+
"function.prototype.name": ["function.prototype.name@1.1.8", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "functions-have-names": "^1.2.3", "hasown": "^2.0.2", "is-callable": "^1.2.7" } }, "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q=="],
731
+
732
+
"functions-have-names": ["functions-have-names@1.2.3", "", {}, "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="],
733
+
734
+
"generator-function": ["generator-function@2.0.1", "", {}, "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g=="],
735
+
736
+
"gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="],
737
+
461
738
"get-east-asian-width": ["get-east-asian-width@1.4.0", "", {}, "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q=="],
462
739
463
-
"glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="],
740
+
"get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="],
741
+
742
+
"get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="],
743
+
744
+
"get-symbol-description": ["get-symbol-description@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6" } }, "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg=="],
745
+
746
+
"get-tsconfig": ["get-tsconfig@4.13.0", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ=="],
747
+
748
+
"glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="],
749
+
750
+
"glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="],
464
751
465
752
"glob-to-regexp": ["glob-to-regexp@0.4.1", "", {}, "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw=="],
466
753
754
+
"globals": ["globals@13.24.0", "", { "dependencies": { "type-fest": "^0.20.2" } }, "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ=="],
755
+
756
+
"globalthis": ["globalthis@1.0.4", "", { "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ=="],
757
+
758
+
"gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="],
759
+
467
760
"graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="],
761
+
762
+
"graphemer": ["graphemer@1.4.0", "", {}, "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="],
468
763
469
764
"gzip-size": ["gzip-size@6.0.0", "", { "dependencies": { "duplexer": "^0.1.2" } }, "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q=="],
765
+
766
+
"has-bigints": ["has-bigints@1.1.0", "", {}, "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg=="],
470
767
471
768
"has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="],
472
769
770
+
"has-property-descriptors": ["has-property-descriptors@1.0.2", "", { "dependencies": { "es-define-property": "^1.0.0" } }, "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg=="],
771
+
772
+
"has-proto": ["has-proto@1.2.0", "", { "dependencies": { "dunder-proto": "^1.0.0" } }, "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ=="],
773
+
774
+
"has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="],
775
+
776
+
"has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="],
777
+
778
+
"hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="],
779
+
780
+
"hermes-estree": ["hermes-estree@0.25.1", "", {}, "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw=="],
781
+
782
+
"hermes-parser": ["hermes-parser@0.25.1", "", { "dependencies": { "hermes-estree": "0.25.1" } }, "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA=="],
783
+
473
784
"hex-rgb": ["hex-rgb@4.3.0", "", {}, "sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw=="],
474
785
475
786
"html-escaper": ["html-escaper@2.0.2", "", {}, "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg=="],
476
787
477
788
"husky": ["husky@9.1.7", "", { "bin": { "husky": "bin.js" } }, "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA=="],
478
789
790
+
"ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="],
791
+
792
+
"import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="],
793
+
794
+
"imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="],
795
+
796
+
"inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="],
797
+
798
+
"inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="],
799
+
800
+
"internal-slot": ["internal-slot@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw=="],
801
+
802
+
"is-array-buffer": ["is-array-buffer@3.0.5", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A=="],
803
+
804
+
"is-async-function": ["is-async-function@2.1.1", "", { "dependencies": { "async-function": "^1.0.0", "call-bound": "^1.0.3", "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ=="],
805
+
806
+
"is-bigint": ["is-bigint@1.1.0", "", { "dependencies": { "has-bigints": "^1.0.2" } }, "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ=="],
807
+
808
+
"is-boolean-object": ["is-boolean-object@1.2.2", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A=="],
809
+
810
+
"is-bun-module": ["is-bun-module@2.0.0", "", { "dependencies": { "semver": "^7.7.1" } }, "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ=="],
811
+
812
+
"is-callable": ["is-callable@1.2.7", "", {}, "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="],
813
+
814
+
"is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="],
815
+
816
+
"is-data-view": ["is-data-view@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" } }, "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw=="],
817
+
818
+
"is-date-object": ["is-date-object@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg=="],
819
+
479
820
"is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="],
480
821
822
+
"is-finalizationregistry": ["is-finalizationregistry@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg=="],
823
+
481
824
"is-fullwidth-code-point": ["is-fullwidth-code-point@5.1.0", "", { "dependencies": { "get-east-asian-width": "^1.3.1" } }, "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ=="],
482
825
826
+
"is-generator-function": ["is-generator-function@1.1.2", "", { "dependencies": { "call-bound": "^1.0.4", "generator-function": "^2.0.0", "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA=="],
827
+
483
828
"is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="],
484
829
830
+
"is-map": ["is-map@2.0.3", "", {}, "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw=="],
831
+
832
+
"is-negative-zero": ["is-negative-zero@2.0.3", "", {}, "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw=="],
833
+
485
834
"is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="],
486
835
836
+
"is-number-object": ["is-number-object@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw=="],
837
+
838
+
"is-path-inside": ["is-path-inside@3.0.3", "", {}, "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ=="],
839
+
487
840
"is-plain-object": ["is-plain-object@5.0.0", "", {}, "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q=="],
488
841
842
+
"is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="],
843
+
844
+
"is-set": ["is-set@2.0.3", "", {}, "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg=="],
845
+
846
+
"is-shared-array-buffer": ["is-shared-array-buffer@1.0.4", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A=="],
847
+
848
+
"is-string": ["is-string@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA=="],
849
+
850
+
"is-symbol": ["is-symbol@1.1.1", "", { "dependencies": { "call-bound": "^1.0.2", "has-symbols": "^1.1.0", "safe-regex-test": "^1.1.0" } }, "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w=="],
851
+
852
+
"is-typed-array": ["is-typed-array@1.1.15", "", { "dependencies": { "which-typed-array": "^1.1.16" } }, "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ=="],
853
+
854
+
"is-weakmap": ["is-weakmap@2.0.2", "", {}, "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w=="],
855
+
856
+
"is-weakref": ["is-weakref@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew=="],
857
+
858
+
"is-weakset": ["is-weakset@2.0.4", "", { "dependencies": { "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ=="],
859
+
860
+
"isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="],
861
+
862
+
"isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="],
863
+
864
+
"iterator.prototype": ["iterator.prototype@1.1.5", "", { "dependencies": { "define-data-property": "^1.1.4", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.6", "get-proto": "^1.0.0", "has-symbols": "^1.1.0", "set-function-name": "^2.0.2" } }, "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g=="],
865
+
489
866
"jest-worker": ["jest-worker@27.5.1", "", { "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" } }, "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg=="],
490
867
491
868
"jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="],
492
869
870
+
"js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="],
871
+
872
+
"js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="],
873
+
874
+
"jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="],
875
+
876
+
"json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="],
877
+
493
878
"json-parse-even-better-errors": ["json-parse-even-better-errors@2.3.1", "", {}, "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="],
494
879
495
-
"json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="],
880
+
"json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="],
881
+
882
+
"json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "", {}, "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="],
883
+
884
+
"json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="],
885
+
886
+
"jsx-ast-utils": ["jsx-ast-utils@3.3.5", "", { "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", "object.assign": "^4.1.4", "object.values": "^1.1.6" } }, "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ=="],
887
+
888
+
"keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="],
889
+
890
+
"language-subtag-registry": ["language-subtag-registry@0.3.23", "", {}, "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ=="],
891
+
892
+
"language-tags": ["language-tags@1.0.9", "", { "dependencies": { "language-subtag-registry": "^0.3.20" } }, "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA=="],
893
+
894
+
"levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="],
496
895
497
896
"lightningcss": ["lightningcss@1.30.2", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.30.2", "lightningcss-darwin-arm64": "1.30.2", "lightningcss-darwin-x64": "1.30.2", "lightningcss-freebsd-x64": "1.30.2", "lightningcss-linux-arm-gnueabihf": "1.30.2", "lightningcss-linux-arm64-gnu": "1.30.2", "lightningcss-linux-arm64-musl": "1.30.2", "lightningcss-linux-x64-gnu": "1.30.2", "lightningcss-linux-x64-musl": "1.30.2", "lightningcss-win32-arm64-msvc": "1.30.2", "lightningcss-win32-x64-msvc": "1.30.2" } }, "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ=="],
498
897
···
526
925
527
926
"loader-runner": ["loader-runner@4.3.1", "", {}, "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q=="],
528
927
928
+
"locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="],
929
+
930
+
"lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="],
931
+
529
932
"log-update": ["log-update@6.1.0", "", { "dependencies": { "ansi-escapes": "^7.0.0", "cli-cursor": "^5.0.0", "slice-ansi": "^7.1.0", "strip-ansi": "^7.1.0", "wrap-ansi": "^9.0.0" } }, "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w=="],
530
933
531
934
"loops": ["loops@5.0.1", "", {}, "sha512-xM1c9mnlr8Hr4cHW944TQoK6ApynjinUWOgYZd9/B0/3lwTThq24BQ7+XLjgbFAP5kJzqDTRDQi3t+Diy51Udw=="],
532
935
936
+
"loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="],
937
+
938
+
"lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="],
939
+
533
940
"lucide-react": ["lucide-react@0.511.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-VK5a2ydJ7xm8GvBeKLS9mu1pVK6ucef9780JVUjw6bAjJL/QXnd4Y0p7SPeOUMC27YhzNCZvm5d/QX0Tp3rc0w=="],
534
941
535
942
"magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="],
943
+
944
+
"math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="],
536
945
537
946
"merge-stream": ["merge-stream@2.0.0", "", {}, "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="],
538
947
···
545
954
"mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="],
546
955
547
956
"mimic-function": ["mimic-function@5.0.1", "", {}, "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA=="],
957
+
958
+
"minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="],
548
959
549
960
"minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="],
550
961
551
962
"mrmime": ["mrmime@2.0.1", "", {}, "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ=="],
552
963
964
+
"ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
965
+
553
966
"nano-spawn": ["nano-spawn@2.0.0", "", {}, "sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw=="],
554
967
555
968
"nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="],
556
969
970
+
"napi-postinstall": ["napi-postinstall@0.3.4", "", { "bin": { "napi-postinstall": "lib/cli.js" } }, "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ=="],
971
+
972
+
"natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="],
973
+
557
974
"neo-async": ["neo-async@2.6.2", "", {}, "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="],
558
975
559
976
"next": ["next@16.0.3", "", { "dependencies": { "@next/env": "16.0.3", "@swc/helpers": "0.5.15", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "16.0.3", "@next/swc-darwin-x64": "16.0.3", "@next/swc-linux-arm64-gnu": "16.0.3", "@next/swc-linux-arm64-musl": "16.0.3", "@next/swc-linux-x64-gnu": "16.0.3", "@next/swc-linux-x64-musl": "16.0.3", "@next/swc-win32-arm64-msvc": "16.0.3", "@next/swc-win32-x64-msvc": "16.0.3", "sharp": "^0.34.4" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-Ka0/iNBblPFcIubTA1Jjh6gvwqfjrGq1Y2MTI5lbjeLIAfmC+p5bQmojpRZqgHHVu5cG4+qdIiwXiBSm/8lZ3w=="],
···
566
983
567
984
"node-releases": ["node-releases@2.0.27", "", {}, "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="],
568
985
986
+
"object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="],
987
+
988
+
"object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="],
989
+
990
+
"object-keys": ["object-keys@1.1.1", "", {}, "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="],
991
+
992
+
"object.assign": ["object.assign@4.1.7", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0", "has-symbols": "^1.1.0", "object-keys": "^1.1.1" } }, "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw=="],
993
+
994
+
"object.entries": ["object.entries@1.1.9", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-object-atoms": "^1.1.1" } }, "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw=="],
995
+
996
+
"object.fromentries": ["object.fromentries@2.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2", "es-object-atoms": "^1.0.0" } }, "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ=="],
997
+
998
+
"object.groupby": ["object.groupby@1.0.3", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2" } }, "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ=="],
999
+
1000
+
"object.values": ["object.values@1.2.1", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA=="],
1001
+
1002
+
"once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="],
1003
+
569
1004
"onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="],
570
1005
571
1006
"opener": ["opener@1.5.2", "", { "bin": { "opener": "bin/opener-bin.js" } }, "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A=="],
572
1007
1008
+
"optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="],
1009
+
1010
+
"own-keys": ["own-keys@1.0.1", "", { "dependencies": { "get-intrinsic": "^1.2.6", "object-keys": "^1.1.1", "safe-push-apply": "^1.0.0" } }, "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg=="],
1011
+
1012
+
"p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="],
1013
+
1014
+
"p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="],
1015
+
573
1016
"pako": ["pako@0.2.9", "", {}, "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA=="],
1017
+
1018
+
"parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="],
574
1019
575
1020
"parse-css-color": ["parse-css-color@0.2.1", "", { "dependencies": { "color-name": "^1.1.4", "hex-rgb": "^4.1.0" } }, "sha512-bwS/GGIFV3b6KS4uwpzCFj4w297Yl3uqnSgIPsoQkx7GMLROXfMnWvxfNkL0oh8HVhZA4hvJoEoEIqonfJ3BWg=="],
576
1021
1022
+
"path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="],
1023
+
1024
+
"path-is-absolute": ["path-is-absolute@1.0.1", "", {}, "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="],
1025
+
1026
+
"path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="],
1027
+
1028
+
"path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="],
1029
+
577
1030
"picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="],
578
1031
579
1032
"picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="],
580
1033
581
1034
"pidtree": ["pidtree@0.6.0", "", { "bin": { "pidtree": "bin/pidtree.js" } }, "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g=="],
582
1035
1036
+
"possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="],
1037
+
583
1038
"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=="],
584
1039
585
1040
"postcss-selector-parser": ["postcss-selector-parser@6.0.10", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w=="],
586
1041
587
1042
"postcss-value-parser": ["postcss-value-parser@4.2.0", "", {}, "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="],
588
1043
1044
+
"prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="],
1045
+
589
1046
"prettier": ["prettier@3.6.2", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ=="],
590
1047
1048
+
"prettier-plugin-tailwindcss": ["prettier-plugin-tailwindcss@0.7.1", "", { "peerDependencies": { "@ianvs/prettier-plugin-sort-imports": "*", "@prettier/plugin-hermes": "*", "@prettier/plugin-oxc": "*", "@prettier/plugin-pug": "*", "@shopify/prettier-plugin-liquid": "*", "@trivago/prettier-plugin-sort-imports": "*", "@zackad/prettier-plugin-twig": "*", "prettier": "^3.0", "prettier-plugin-astro": "*", "prettier-plugin-css-order": "*", "prettier-plugin-jsdoc": "*", "prettier-plugin-marko": "*", "prettier-plugin-multiline-arrays": "*", "prettier-plugin-organize-attributes": "*", "prettier-plugin-organize-imports": "*", "prettier-plugin-sort-imports": "*", "prettier-plugin-svelte": "*" }, "optionalPeers": ["@ianvs/prettier-plugin-sort-imports", "@prettier/plugin-hermes", "@prettier/plugin-oxc", "@prettier/plugin-pug", "@shopify/prettier-plugin-liquid", "@trivago/prettier-plugin-sort-imports", "@zackad/prettier-plugin-twig", "prettier-plugin-astro", "prettier-plugin-css-order", "prettier-plugin-jsdoc", "prettier-plugin-marko", "prettier-plugin-multiline-arrays", "prettier-plugin-organize-attributes", "prettier-plugin-organize-imports", "prettier-plugin-sort-imports", "prettier-plugin-svelte"] }, "sha512-Bzv1LZcuiR1Sk02iJTS1QzlFNp/o5l2p3xkopwOrbPmtMeh3fK9rVW5M3neBQzHq+kGKj/4LGQMTNcTH4NGPtQ=="],
1049
+
1050
+
"prop-types": ["prop-types@15.8.1", "", { "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg=="],
1051
+
1052
+
"punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="],
1053
+
591
1054
"queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="],
592
1055
593
1056
"randombytes": ["randombytes@2.1.0", "", { "dependencies": { "safe-buffer": "^5.1.0" } }, "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ=="],
···
598
1061
599
1062
"react-icons": ["react-icons@5.5.0", "", { "peerDependencies": { "react": "*" } }, "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw=="],
600
1063
1064
+
"react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="],
1065
+
1066
+
"reflect.getprototypeof": ["reflect.getprototypeof@1.0.10", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.9", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.7", "get-proto": "^1.0.1", "which-builtin-type": "^1.2.1" } }, "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw=="],
1067
+
1068
+
"regexp.prototype.flags": ["regexp.prototype.flags@1.5.4", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "get-proto": "^1.0.1", "gopd": "^1.2.0", "set-function-name": "^2.0.2" } }, "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA=="],
1069
+
601
1070
"require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="],
602
1071
1072
+
"resolve": ["resolve@2.0.0-next.5", "", { "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA=="],
1073
+
1074
+
"resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="],
1075
+
1076
+
"resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="],
1077
+
603
1078
"restore-cursor": ["restore-cursor@5.1.0", "", { "dependencies": { "onetime": "^7.0.0", "signal-exit": "^4.1.0" } }, "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA=="],
604
1079
605
1080
"reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="],
606
1081
607
1082
"rfdc": ["rfdc@1.4.1", "", {}, "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="],
608
1083
1084
+
"rimraf": ["rimraf@3.0.2", "", { "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" } }, "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA=="],
1085
+
609
1086
"run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="],
1087
+
1088
+
"safe-array-concat": ["safe-array-concat@1.1.3", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "has-symbols": "^1.1.0", "isarray": "^2.0.5" } }, "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q=="],
610
1089
611
1090
"safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="],
612
1091
1092
+
"safe-push-apply": ["safe-push-apply@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "isarray": "^2.0.5" } }, "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA=="],
1093
+
1094
+
"safe-regex-test": ["safe-regex-test@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" } }, "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw=="],
1095
+
613
1096
"satori": ["satori@0.12.2", "", { "dependencies": { "@shuding/opentype.js": "1.4.0-beta.0", "css-background-parser": "^0.1.0", "css-box-shadow": "1.0.0-3", "css-gradient-parser": "^0.0.16", "css-to-react-native": "^3.0.0", "emoji-regex": "^10.2.1", "escape-html": "^1.0.3", "linebreak": "^1.1.0", "parse-css-color": "^0.2.1", "postcss-value-parser": "^4.2.0", "yoga-wasm-web": "^0.3.3" } }, "sha512-3C/laIeE6UUe9A+iQ0A48ywPVCCMKCNSTU5Os101Vhgsjd3AAxGNjyq0uAA8kulMPK5n0csn8JlxPN9riXEjLA=="],
614
1097
615
1098
"sax": ["sax@1.4.3", "", {}, "sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ=="],
···
618
1101
619
1102
"schema-utils": ["schema-utils@4.3.3", "", { "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", "ajv-formats": "^2.1.1", "ajv-keywords": "^5.1.0" } }, "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA=="],
620
1103
621
-
"semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="],
1104
+
"semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
622
1105
623
1106
"serialize-javascript": ["serialize-javascript@6.0.2", "", { "dependencies": { "randombytes": "^2.1.0" } }, "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g=="],
624
1107
1108
+
"set-function-length": ["set-function-length@1.2.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2" } }, "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg=="],
1109
+
1110
+
"set-function-name": ["set-function-name@2.0.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", "has-property-descriptors": "^1.0.2" } }, "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ=="],
1111
+
1112
+
"set-proto": ["set-proto@1.0.0", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0" } }, "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw=="],
1113
+
625
1114
"sharp": ["sharp@0.34.5", "", { "dependencies": { "@img/colour": "^1.0.0", "detect-libc": "^2.1.2", "semver": "^7.7.3" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.34.5", "@img/sharp-darwin-x64": "0.34.5", "@img/sharp-libvips-darwin-arm64": "1.2.4", "@img/sharp-libvips-darwin-x64": "1.2.4", "@img/sharp-libvips-linux-arm": "1.2.4", "@img/sharp-libvips-linux-arm64": "1.2.4", "@img/sharp-libvips-linux-ppc64": "1.2.4", "@img/sharp-libvips-linux-riscv64": "1.2.4", "@img/sharp-libvips-linux-s390x": "1.2.4", "@img/sharp-libvips-linux-x64": "1.2.4", "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", "@img/sharp-libvips-linuxmusl-x64": "1.2.4", "@img/sharp-linux-arm": "0.34.5", "@img/sharp-linux-arm64": "0.34.5", "@img/sharp-linux-ppc64": "0.34.5", "@img/sharp-linux-riscv64": "0.34.5", "@img/sharp-linux-s390x": "0.34.5", "@img/sharp-linux-x64": "0.34.5", "@img/sharp-linuxmusl-arm64": "0.34.5", "@img/sharp-linuxmusl-x64": "0.34.5", "@img/sharp-wasm32": "0.34.5", "@img/sharp-win32-arm64": "0.34.5", "@img/sharp-win32-ia32": "0.34.5", "@img/sharp-win32-x64": "0.34.5" } }, "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg=="],
626
1115
1116
+
"shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="],
1117
+
1118
+
"shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="],
1119
+
1120
+
"side-channel": ["side-channel@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="],
1121
+
1122
+
"side-channel-list": ["side-channel-list@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" } }, "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA=="],
1123
+
1124
+
"side-channel-map": ["side-channel-map@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" } }, "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA=="],
1125
+
1126
+
"side-channel-weakmap": ["side-channel-weakmap@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" } }, "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="],
1127
+
627
1128
"signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="],
628
1129
629
1130
"sirv": ["sirv@2.0.4", "", { "dependencies": { "@polka/url": "^1.0.0-next.24", "mrmime": "^2.0.0", "totalist": "^3.0.0" } }, "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ=="],
···
636
1137
637
1138
"source-map-support": ["source-map-support@0.5.21", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w=="],
638
1139
1140
+
"stable-hash": ["stable-hash@0.0.5", "", {}, "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA=="],
1141
+
1142
+
"stop-iteration-iterator": ["stop-iteration-iterator@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "internal-slot": "^1.1.0" } }, "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ=="],
1143
+
639
1144
"string-argv": ["string-argv@0.3.2", "", {}, "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q=="],
640
1145
641
1146
"string-replace-loader": ["string-replace-loader@3.2.0", "", { "dependencies": { "schema-utils": "^4" }, "peerDependencies": { "webpack": "^5" } }, "sha512-q7+F4DC6MAKkszF3ZQEuZ3dDH25wXPxFA0maTLk3TOTAYPLDgwqCeCKIvOd8xJhYYYl+EXusYRCyKIJliT/olg=="],
···
644
1149
645
1150
"string.prototype.codepointat": ["string.prototype.codepointat@0.2.1", "", {}, "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg=="],
646
1151
647
-
"strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="],
1152
+
"string.prototype.includes": ["string.prototype.includes@2.0.1", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.3" } }, "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg=="],
1153
+
1154
+
"string.prototype.matchall": ["string.prototype.matchall@4.0.12", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.6", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "regexp.prototype.flags": "^1.5.3", "set-function-name": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA=="],
1155
+
1156
+
"string.prototype.repeat": ["string.prototype.repeat@1.0.0", "", { "dependencies": { "define-properties": "^1.1.3", "es-abstract": "^1.17.5" } }, "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w=="],
1157
+
1158
+
"string.prototype.trim": ["string.prototype.trim@1.2.10", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "define-data-property": "^1.1.4", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-object-atoms": "^1.0.0", "has-property-descriptors": "^1.0.2" } }, "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA=="],
1159
+
1160
+
"string.prototype.trimend": ["string.prototype.trimend@1.0.9", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ=="],
1161
+
1162
+
"string.prototype.trimstart": ["string.prototype.trimstart@1.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg=="],
1163
+
1164
+
"strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
1165
+
1166
+
"strip-bom": ["strip-bom@3.0.0", "", {}, "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA=="],
1167
+
1168
+
"strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="],
648
1169
649
1170
"styled-jsx": ["styled-jsx@5.1.6", "", { "dependencies": { "client-only": "0.0.1" }, "peerDependencies": { "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" } }, "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA=="],
650
1171
651
-
"supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="],
1172
+
"supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="],
1173
+
1174
+
"supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="],
652
1175
653
1176
"tailwind-merge": ["tailwind-merge@3.4.0", "", {}, "sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g=="],
654
1177
···
659
1182
"terser": ["terser@5.44.1", "", { "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw=="],
660
1183
661
1184
"terser-webpack-plugin": ["terser-webpack-plugin@5.3.14", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", "schema-utils": "^4.3.0", "serialize-javascript": "^6.0.2", "terser": "^5.31.1" }, "peerDependencies": { "webpack": "^5.1.0" } }, "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw=="],
1185
+
1186
+
"text-table": ["text-table@0.2.0", "", {}, "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="],
662
1187
663
1188
"tiny-inflate": ["tiny-inflate@1.0.3", "", {}, "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw=="],
664
1189
1190
+
"tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="],
1191
+
665
1192
"to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="],
666
1193
667
1194
"totalist": ["totalist@3.0.1", "", {}, "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ=="],
1195
+
1196
+
"ts-api-utils": ["ts-api-utils@2.1.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ=="],
1197
+
1198
+
"tsconfig-paths": ["tsconfig-paths@3.15.0", "", { "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg=="],
668
1199
669
1200
"tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
670
1201
1202
+
"type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="],
1203
+
1204
+
"type-fest": ["type-fest@0.20.2", "", {}, "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ=="],
1205
+
1206
+
"typed-array-buffer": ["typed-array-buffer@1.0.3", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-typed-array": "^1.1.14" } }, "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw=="],
1207
+
1208
+
"typed-array-byte-length": ["typed-array-byte-length@1.0.3", "", { "dependencies": { "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.14" } }, "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg=="],
1209
+
1210
+
"typed-array-byte-offset": ["typed-array-byte-offset@1.0.4", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.15", "reflect.getprototypeof": "^1.0.9" } }, "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ=="],
1211
+
1212
+
"typed-array-length": ["typed-array-length@1.0.7", "", { "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "is-typed-array": "^1.1.13", "possible-typed-array-names": "^1.0.0", "reflect.getprototypeof": "^1.0.6" } }, "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg=="],
1213
+
671
1214
"typeid-js": ["typeid-js@1.2.0", "", { "dependencies": { "uuid": "^10.0.0" } }, "sha512-t76ZucAnvGC60ea/HjVsB0TSoB0cw9yjnfurUgtInXQWUI/VcrlZGpO23KN3iSe8yOGUgb1zr7W7uEzJ3hSljA=="],
672
1215
673
1216
"typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="],
674
1217
1218
+
"typescript-eslint": ["typescript-eslint@8.46.4", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.46.4", "@typescript-eslint/parser": "8.46.4", "@typescript-eslint/typescript-estree": "8.46.4", "@typescript-eslint/utils": "8.46.4" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-KALyxkpYV5Ix7UhvjTwJXZv76VWsHG+NjNlt/z+a17SOQSiOcBdUXdbJdyXi7RPxrBFECtFOiPwUJQusJuCqrg=="],
1219
+
1220
+
"unbox-primitive": ["unbox-primitive@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "has-bigints": "^1.0.2", "has-symbols": "^1.1.0", "which-boxed-primitive": "^1.1.1" } }, "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw=="],
1221
+
675
1222
"undici": ["undici@5.29.0", "", { "dependencies": { "@fastify/busboy": "^2.0.0" } }, "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg=="],
676
1223
677
1224
"undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="],
678
1225
679
1226
"unicode-trie": ["unicode-trie@2.0.0", "", { "dependencies": { "pako": "^0.2.5", "tiny-inflate": "^1.0.0" } }, "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ=="],
1227
+
1228
+
"unrs-resolver": ["unrs-resolver@1.11.1", "", { "dependencies": { "napi-postinstall": "^0.3.0" }, "optionalDependencies": { "@unrs/resolver-binding-android-arm-eabi": "1.11.1", "@unrs/resolver-binding-android-arm64": "1.11.1", "@unrs/resolver-binding-darwin-arm64": "1.11.1", "@unrs/resolver-binding-darwin-x64": "1.11.1", "@unrs/resolver-binding-freebsd-x64": "1.11.1", "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", "@unrs/resolver-binding-linux-x64-musl": "1.11.1", "@unrs/resolver-binding-wasm32-wasi": "1.11.1", "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" } }, "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg=="],
680
1229
681
1230
"update-browserslist-db": ["update-browserslist-db@1.1.4", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A=="],
682
1231
1232
+
"uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="],
1233
+
683
1234
"util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="],
684
1235
685
1236
"uuid": ["uuid@10.0.0", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ=="],
···
692
1243
693
1244
"webpack-sources": ["webpack-sources@3.3.3", "", {}, "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg=="],
694
1245
1246
+
"which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="],
1247
+
1248
+
"which-boxed-primitive": ["which-boxed-primitive@1.1.1", "", { "dependencies": { "is-bigint": "^1.1.0", "is-boolean-object": "^1.2.1", "is-number-object": "^1.1.1", "is-string": "^1.1.1", "is-symbol": "^1.1.1" } }, "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA=="],
1249
+
1250
+
"which-builtin-type": ["which-builtin-type@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", "is-date-object": "^1.1.0", "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", "is-regex": "^1.2.1", "is-weakref": "^1.0.2", "isarray": "^2.0.5", "which-boxed-primitive": "^1.1.0", "which-collection": "^1.0.2", "which-typed-array": "^1.1.16" } }, "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q=="],
1251
+
1252
+
"which-collection": ["which-collection@1.0.2", "", { "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", "is-weakmap": "^2.0.2", "is-weakset": "^2.0.3" } }, "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw=="],
1253
+
1254
+
"which-typed-array": ["which-typed-array@1.1.19", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" } }, "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw=="],
1255
+
1256
+
"word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="],
1257
+
695
1258
"wrap-ansi": ["wrap-ansi@9.0.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww=="],
1259
+
1260
+
"wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="],
696
1261
697
1262
"ws": ["ws@7.5.10", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ=="],
698
1263
699
1264
"xml-js": ["xml-js@1.6.11", "", { "dependencies": { "sax": "^1.2.4" }, "bin": { "xml-js": "./bin/cli.js" } }, "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g=="],
1265
+
1266
+
"yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="],
700
1267
701
1268
"yaml": ["yaml@2.8.1", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw=="],
702
1269
1270
+
"yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="],
1271
+
703
1272
"yoga-wasm-web": ["yoga-wasm-web@0.3.3", "", {}, "sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA=="],
1273
+
1274
+
"zod": ["zod@4.1.12", "", {}, "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ=="],
1275
+
1276
+
"zod-validation-error": ["zod-validation-error@4.0.2", "", { "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" } }, "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ=="],
1277
+
1278
+
"@eslint/eslintrc/ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="],
1279
+
1280
+
"@next/eslint-plugin-next/fast-glob": ["fast-glob@3.3.1", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" } }, "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg=="],
704
1281
705
1282
"@radix-ui/react-collection/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="],
706
1283
···
720
1297
721
1298
"@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
722
1299
723
-
"esrecurse/estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="],
1300
+
"@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="],
1301
+
1302
+
"@typescript-eslint/typescript-estree/semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="],
1303
+
1304
+
"@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@4.2.1", "", {}, "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ=="],
1305
+
1306
+
"ajv-formats/ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="],
1307
+
1308
+
"ajv-keywords/ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="],
1309
+
1310
+
"eslint/ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="],
1311
+
1312
+
"eslint-config-next/globals": ["globals@16.4.0", "", {}, "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw=="],
1313
+
1314
+
"eslint-import-resolver-node/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="],
1315
+
1316
+
"eslint-import-resolver-node/resolve": ["resolve@1.22.11", "", { "dependencies": { "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ=="],
1317
+
1318
+
"eslint-module-utils/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="],
1319
+
1320
+
"eslint-plugin-import/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="],
1321
+
1322
+
"eslint-plugin-import/doctrine": ["doctrine@2.1.0", "", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw=="],
1323
+
1324
+
"eslint-plugin-react/doctrine": ["doctrine@2.1.0", "", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw=="],
1325
+
1326
+
"fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="],
1327
+
1328
+
"is-bun-module/semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="],
1329
+
1330
+
"jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="],
1331
+
1332
+
"log-update/strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="],
724
1333
725
1334
"next/postcss": ["postcss@8.4.31", "", { "dependencies": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } }, "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ=="],
726
1335
727
1336
"next-sitemap/@next/env": ["@next/env@13.5.11", "", {}, "sha512-fbb2C7HChgM7CemdCY+y3N1n8pcTKdqtQLbC7/EQtPdLvlMUT9JX/dBYl8MMZAtYG4uVMyPFHXckb68q/NRwqg=="],
728
1337
1338
+
"satori/emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="],
1339
+
1340
+
"schema-utils/ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="],
1341
+
1342
+
"sharp/semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="],
1343
+
1344
+
"slice-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="],
1345
+
1346
+
"string-width/strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="],
1347
+
729
1348
"terser/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="],
730
1349
1350
+
"tinyglobby/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="],
1351
+
1352
+
"tsconfig-paths/json5": ["json5@1.0.2", "", { "dependencies": { "minimist": "^1.2.0" }, "bin": { "json5": "lib/cli.js" } }, "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA=="],
1353
+
1354
+
"webpack/eslint-scope": ["eslint-scope@5.1.1", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw=="],
1355
+
731
1356
"webpack-bundle-analyzer/commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="],
732
1357
1358
+
"wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="],
1359
+
733
1360
"wrap-ansi/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="],
1361
+
1362
+
"wrap-ansi/strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="],
1363
+
1364
+
"@next/eslint-plugin-next/fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="],
1365
+
1366
+
"@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="],
1367
+
1368
+
"ajv-formats/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="],
1369
+
1370
+
"ajv-keywords/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="],
1371
+
1372
+
"log-update/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="],
1373
+
1374
+
"schema-utils/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="],
1375
+
1376
+
"string-width/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="],
1377
+
1378
+
"webpack/eslint-scope/estraverse": ["estraverse@4.3.0", "", {}, "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="],
1379
+
1380
+
"wrap-ansi/string-width/emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="],
1381
+
1382
+
"wrap-ansi/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="],
734
1383
}
735
1384
}
+20
-2
package.json
+20
-2
package.json
···
7
7
"build": "bunx --bun next build",
8
8
"postbuild": "next-sitemap",
9
9
"start": "bunx --bun next start",
10
-
"lint": "bunx --bun next lint",
10
+
"lint": "eslint . --ext .js,.jsx,.ts,.tsx",
11
+
"lint:fix": "eslint . --ext .js,.jsx,.ts,.tsx --fix",
12
+
"format": "prettier --write .",
13
+
"format:check": "prettier --check .",
11
14
"analyze": "ANALYZE=true bunx --bun next build",
12
15
"prepare": "husky"
13
16
},
···
44
47
"@types/node": "^22.18.6",
45
48
"@types/react": "^19.1.15",
46
49
"@types/react-dom": "^19.1.9",
50
+
"@typescript-eslint/eslint-plugin": "^8.46.4",
51
+
"@typescript-eslint/parser": "^8.46.4",
52
+
"eslint": "8",
53
+
"eslint-config-next": "^16.0.3",
54
+
"eslint-config-prettier": "^10.1.8",
55
+
"eslint-plugin-jsx-a11y": "^6.10.2",
56
+
"eslint-plugin-react": "^7.37.5",
57
+
"eslint-plugin-react-hooks": "^7.0.1",
47
58
"husky": "^9.1.7",
48
59
"lint-staged": "^16.2.3",
49
60
"postcss": "^8.5.6",
50
61
"prettier": "3.6.2",
62
+
"prettier-plugin-tailwindcss": "^0.7.1",
51
63
"string-replace-loader": "^3.2.0",
52
64
"tailwindcss": "^4.1.13",
53
65
"typescript": "^5.9.2"
···
65
77
"sharp"
66
78
],
67
79
"lint-staged": {
68
-
"**/*": "prettier --write --ignore-unknown"
80
+
"*.{js,jsx,ts,tsx}": [
81
+
"eslint --fix",
82
+
"prettier --write"
83
+
],
84
+
"*.{json,css,md,mdx}": [
85
+
"prettier --write"
86
+
]
69
87
}
70
88
}
+30
-35
src/app/(home)/page.tsx
+30
-35
src/app/(home)/page.tsx
···
6
6
import JmDark from "@public/images/jmdark-min.webp";
7
7
import JmLight from "@public/images/jmlite-min.webp";
8
8
import Link from "next/link";
9
-
import { useEffect, useState } from "react";
9
+
import { useSyncExternalStore } from "react";
10
10
11
-
export default function Home() {
12
-
const [isLightMode, setIsLightMode] = useState(false);
11
+
// Subscribe function for useSyncExternalStore
12
+
function subscribeToLightMode(callback: () => void) {
13
+
const mediaQuery = window.matchMedia("(prefers-color-scheme: light)");
14
+
mediaQuery.addEventListener("change", callback);
15
+
return () => mediaQuery.removeEventListener("change", callback);
16
+
}
13
17
14
-
useEffect(() => {
15
-
// Initialize theme
16
-
if (typeof window !== "undefined") {
17
-
const mediaQuery = window.matchMedia("(prefers-color-scheme: light)");
18
-
setIsLightMode(mediaQuery.matches);
18
+
// Get current snapshot for client
19
+
function getLightModeSnapshot() {
20
+
return window.matchMedia("(prefers-color-scheme: light)").matches;
21
+
}
19
22
20
-
// Add listener for theme changes
21
-
const handleThemeChange = (e) => {
22
-
setIsLightMode(e.matches);
23
-
};
23
+
// Get snapshot for server-side rendering
24
+
function getLightModeServerSnapshot() {
25
+
return false;
26
+
}
24
27
25
-
mediaQuery.addEventListener("change", handleThemeChange);
26
-
27
-
// Cleanup listener
28
-
return () => {
29
-
mediaQuery.removeEventListener("change", handleThemeChange);
30
-
};
31
-
}
32
-
}, []);
28
+
export default function Home() {
29
+
const isLightMode = useSyncExternalStore(
30
+
subscribeToLightMode,
31
+
getLightModeSnapshot,
32
+
getLightModeServerSnapshot
33
+
);
33
34
34
35
const imgpath = isLightMode ? JmDark : JmLight;
35
36
36
-
const fadeVariants = {
37
-
hidden: { opacity: 0 },
38
-
visible: { opacity: 1 },
39
-
exit: { opacity: 0 },
40
-
};
41
-
42
37
return (
43
-
<div className="min-h-screen min-w-screen mx-auto flex flex-col">
38
+
<div className="mx-auto flex min-h-screen min-w-screen flex-col">
44
39
<MENU pageFirstWord="Jasper" pageSecondWord="Mayone" />
45
40
<main className="flex-1">
46
41
<ConfettiWrapper />
47
-
<div className="flex flex-col md:flex-row gap-8 mx-5 mt-5 mb-5">
48
-
<div className="w-64 flex-shrink-0 mt-8 mx-auto md:mx-0 md:self-start overflow-hidden">
42
+
<div className="mx-5 mt-5 mb-5 flex flex-col gap-8 md:flex-row">
43
+
<div className="mx-auto mt-8 w-64 flex-shrink-0 overflow-hidden md:mx-0 md:self-start">
49
44
<RoundedImage
50
45
src={imgpath}
51
46
alt="Jasper Mayone"
···
56
51
</div>
57
52
<div className="flex flex-col justify-center">
58
53
<div className="space-y-4">
59
-
<p className="font-medium text-xl">
54
+
<p className="text-xl font-medium">
60
55
<span style={{ fontFamily: "var(--font-balgin)" }}>
61
56
Jasper Mayone [<i>he/they</i>]
62
57
</span>{" "}
63
-
<span className="text-gray-700 dark:text-white/70 font-normal">
58
+
<span className="font-normal text-gray-700 dark:text-white/70">
64
59
is a 19-year-old college student from rural Vermont, currently
65
60
residing in Boston.
66
61
</span>
67
62
</p>
68
-
<p className="text-gray-600 dark:text-white/70 text-sm">
63
+
<p className="text-sm text-gray-600 dark:text-white/70">
69
64
A computer science major at{" "}
70
65
<Link
71
66
className="lnk"
···
80
75
photography, computer programming, cooking, and running away to
81
76
join the circus.
82
77
</p>
83
-
<p className="text-gray-600 dark:text-white/70 text-sm">
78
+
<p className="text-sm text-gray-600 dark:text-white/70">
84
79
An avid organizer and big picture thinker, you can often find
85
80
them scheming up some sort of business venture. From developing
86
81
a small app to drafting large scale plans for a world domination
···
90
85
Jasper to take on exciting roles in various projects and
91
86
adventures, both close to home and abroad.
92
87
</p>
93
-
<p className="text-gray-600 dark:text-white/70 text-sm">
88
+
<p className="text-sm text-gray-600 dark:text-white/70">
94
89
Recently they've been focusing their time (outside of their
95
90
degree) on{" "}
96
91
<Link
···
106
101
creativity and support the next generation of makers.
107
102
</p>
108
103
109
-
<p className="text-gray-600 dark:text-white/70 text-sm">
104
+
<p className="text-sm text-gray-600 dark:text-white/70">
110
105
Previously, Jasper's adventures included working at{" "}
111
106
<Link
112
107
className="lnk"
+4
-5
src/app/api/commits/route.ts
+4
-5
src/app/api/commits/route.ts
···
1
-
// pages/api/commits.ts (for Pages Router) or app/api/commits/route.ts (for App Router)
2
-
import { NextApiRequest, NextApiResponse } from "next";
1
+
// app/api/commits/route.ts (for App Router)
3
2
4
3
interface GitHubCommitResponse {
5
4
sha: string;
···
50
49
51
50
const response = await fetch(
52
51
`https://api.github.com/repos/${owner}/${repo}/commits?per_page=${limit}`,
53
-
{ headers },
52
+
{ headers }
54
53
);
55
54
56
55
if (!response.ok) {
57
56
if (response.status === 403) {
58
57
throw new Error(
59
-
"GitHub API rate limit exceeded or repository access denied",
58
+
"GitHub API rate limit exceeded or repository access denied"
60
59
);
61
60
}
62
61
throw new Error(
63
-
`GitHub API error: ${response.status} ${response.statusText}`,
62
+
`GitHub API error: ${response.status} ${response.statusText}`
64
63
);
65
64
}
66
65
+1
-1
src/app/api/email/new.tsx
+1
-1
src/app/api/email/new.tsx
+28
-28
src/app/colophon/page.tsx
+28
-28
src/app/colophon/page.tsx
···
116
116
__html: JSON.stringify(colophonPageSchema),
117
117
}}
118
118
/>
119
-
<div className="min-h-screen flex flex-col">
119
+
<div className="flex min-h-screen flex-col">
120
120
<MENU pageFirstWord="Colophon" />
121
121
<main className="flex-1">
122
-
<div className="max-w-4xl mx-auto px-6 py-12">
122
+
<div className="mx-auto max-w-4xl px-6 py-12">
123
123
<div className="mb-16">
124
124
<h1
125
-
className="text-4xl font-bold mb-4 text-gray-900 dark:text-white"
125
+
className="mb-4 text-4xl font-bold text-gray-900 dark:text-white"
126
126
style={{ fontFamily: "var(--font-balgin)" }}
127
127
>
128
128
Colophon
···
135
135
{/* Site History Section */}
136
136
<section className="mb-16">
137
137
<h2
138
-
className="text-2xl font-bold mb-6 text-gray-900 dark:text-white"
138
+
className="mb-6 text-2xl font-bold text-gray-900 dark:text-white"
139
139
style={{ fontFamily: "var(--font-balgin)" }}
140
140
>
141
141
Site History
142
142
</h2>
143
-
<div className="border border-gray-200 dark:border-gray-700 rounded-2xl p-8">
144
-
<p className="text-gray-600 dark:text-gray-300 text-lg leading-relaxed">
143
+
<div className="rounded-2xl border border-gray-200 p-8 dark:border-gray-700">
144
+
<p className="text-lg leading-relaxed text-gray-600 dark:text-gray-300">
145
145
The original site was developed by{" "}
146
146
<Link
147
147
href="https://aram.sh?utm_source=jaspermayone.com&utm_medium=referral"
···
159
159
{/* Technology Stack Section */}
160
160
<section className="mb-16">
161
161
<h2
162
-
className="text-2xl font-bold mb-6 text-gray-900 dark:text-white"
162
+
className="mb-6 text-2xl font-bold text-gray-900 dark:text-white"
163
163
style={{ fontFamily: "var(--font-balgin)" }}
164
164
>
165
165
Technology Stack
166
166
</h2>
167
-
<div className="grid lg:grid-cols-2 gap-6">
167
+
<div className="grid gap-6 lg:grid-cols-2">
168
168
{techStack.map((tech, index) => (
169
169
<div
170
170
key={index}
171
-
className="border border-gray-200 dark:border-gray-700 rounded-2xl p-6 hover:border-gray-300 dark:hover:border-gray-600 transition-colors"
171
+
className="rounded-2xl border border-gray-200 p-6 transition-colors hover:border-gray-300 dark:border-gray-700 dark:hover:border-gray-600"
172
172
>
173
-
<div className="flex items-start justify-between mb-3">
173
+
<div className="mb-3 flex items-start justify-between">
174
174
<h3 className="text-lg font-bold text-gray-900 dark:text-white">
175
175
{tech.name}
176
176
</h3>
177
177
<span
178
-
className="px-3 py-1 text-sm font-medium text-gray-600 dark:text-gray-300 bg-gray-100 dark:bg-gray-800 rounded-full"
178
+
className="rounded-full bg-gray-100 px-3 py-1 text-sm font-medium text-gray-600 dark:bg-gray-800 dark:text-gray-300"
179
179
style={{ fontFamily: "var(--font-balgin)" }}
180
180
>
181
181
{tech.category}
182
182
</span>
183
183
</div>
184
-
<p className="text-gray-600 dark:text-gray-300 leading-relaxed">
184
+
<p className="leading-relaxed text-gray-600 dark:text-gray-300">
185
185
{tech.description}
186
186
</p>
187
187
</div>
···
192
192
{/* Hosting & Deployment Section */}
193
193
<section className="mb-16">
194
194
<h2
195
-
className="text-2xl font-bold mb-6 text-gray-900 dark:text-white"
195
+
className="mb-6 text-2xl font-bold text-gray-900 dark:text-white"
196
196
style={{ fontFamily: "var(--font-balgin)" }}
197
197
>
198
198
Hosting & Deployment
199
199
</h2>
200
-
<div className="border border-gray-200 dark:border-gray-700 rounded-2xl p-8">
201
-
<h3 className="text-xl font-bold text-gray-900 dark:text-white mb-3">
200
+
<div className="rounded-2xl border border-gray-200 p-8 dark:border-gray-700">
201
+
<h3 className="mb-3 text-xl font-bold text-gray-900 dark:text-white">
202
202
Vercel Platform
203
203
</h3>
204
-
<p className="text-gray-600 dark:text-gray-300 leading-relaxed mb-4">
204
+
<p className="mb-4 leading-relaxed text-gray-600 dark:text-gray-300">
205
205
The site is hosted on{" "}
206
206
<Link
207
207
href="https://vercel.com?utm_source=jaspermayone.com&utm_medium=referral"
···
218
218
className="flex flex-wrap gap-2"
219
219
style={{ fontFamily: "var(--font-balgin)" }}
220
220
>
221
-
<span className="px-3 py-1 text-sm font-medium text-gray-600 dark:text-gray-300 bg-gray-100 dark:bg-gray-800 rounded-full">
221
+
<span className="rounded-full bg-gray-100 px-3 py-1 text-sm font-medium text-gray-600 dark:bg-gray-800 dark:text-gray-300">
222
222
GitHub Integration
223
223
</span>
224
-
<span className="px-3 py-1 text-sm font-medium text-gray-600 dark:text-gray-300 bg-gray-100 dark:bg-gray-800 rounded-full">
224
+
<span className="rounded-full bg-gray-100 px-3 py-1 text-sm font-medium text-gray-600 dark:bg-gray-800 dark:text-gray-300">
225
225
Automatic HTTPS
226
226
</span>
227
-
<span className="px-3 py-1 text-sm font-medium text-gray-600 dark:text-gray-300 bg-gray-100 dark:bg-gray-800 rounded-full">
227
+
<span className="rounded-full bg-gray-100 px-3 py-1 text-sm font-medium text-gray-600 dark:bg-gray-800 dark:text-gray-300">
228
228
Global CDN
229
229
</span>
230
230
</div>
···
234
234
{/* Development Tools Section */}
235
235
<section className="mb-16">
236
236
<h2
237
-
className="text-2xl font-bold mb-6 text-gray-900 dark:text-white"
237
+
className="mb-6 text-2xl font-bold text-gray-900 dark:text-white"
238
238
style={{ fontFamily: "var(--font-balgin)" }}
239
239
>
240
240
Development Tools
241
241
</h2>
242
-
<div className="border border-gray-200 dark:border-gray-700 rounded-2xl p-8">
243
-
<div className="grid sm:grid-cols-2 lg:grid-cols-3 gap-6">
242
+
<div className="rounded-2xl border border-gray-200 p-8 dark:border-gray-700">
243
+
<div className="grid gap-6 sm:grid-cols-2 lg:grid-cols-3">
244
244
{tools.map((tool, index) => (
245
245
<div key={index}>
246
-
<h3 className="font-bold text-gray-900 dark:text-white mb-2">
246
+
<h3 className="mb-2 font-bold text-gray-900 dark:text-white">
247
247
{tool.name}
248
248
</h3>
249
-
<p className="text-gray-600 dark:text-gray-300 leading-relaxed">
249
+
<p className="leading-relaxed text-gray-600 dark:text-gray-300">
250
250
{tool.description}
251
251
</p>
252
252
</div>
···
258
258
{/* Hardware Section */}
259
259
<section className="mb-16">
260
260
<h2
261
-
className="text-2xl font-bold mb-6 text-gray-900 dark:text-white"
261
+
className="mb-6 text-2xl font-bold text-gray-900 dark:text-white"
262
262
style={{ fontFamily: "var(--font-balgin)" }}
263
263
>
264
264
Hardware
265
265
</h2>
266
-
<div className="border border-gray-200 dark:border-gray-700 rounded-2xl p-8">
267
-
<h3 className="text-xl font-bold text-gray-900 dark:text-white mb-2">
266
+
<div className="rounded-2xl border border-gray-200 p-8 dark:border-gray-700">
267
+
<h3 className="mb-2 text-xl font-bold text-gray-900 dark:text-white">
268
268
Apple M4 Pro MacBook Pro
269
269
</h3>
270
-
<p className="text-gray-600 dark:text-gray-300 text-lg">
270
+
<p className="text-lg text-gray-600 dark:text-gray-300">
271
271
Primary development machine for coding, design, and testing
272
272
</p>
273
273
</div>
+7
-7
src/app/concerts/page.tsx
+7
-7
src/app/concerts/page.tsx
···
73
73
__html: JSON.stringify(concertsPageSchema),
74
74
}}
75
75
/>
76
-
<div className="min-h-screen flex flex-col">
76
+
<div className="flex min-h-screen flex-col">
77
77
<MENU pageFirstWord="Concerts" />
78
78
<main className="flex-1">
79
79
<div className="mx-5 mt-4 mb-4">
80
80
<h1
81
-
className="text-xl font-bold mb-4 text-gray-800 dark:text-white"
81
+
className="mb-4 text-xl font-bold text-gray-800 dark:text-white"
82
82
style={{ fontFamily: "var(--font-balgin)" }}
83
83
>
84
84
Concerts I've Attended
85
85
</h1>
86
86
87
-
<p className="text-gray-600 dark:text-white/70 mb-6">
87
+
<p className="mb-6 text-gray-600 dark:text-white/70">
88
88
A running list of live shows and concerts I've been to over the
89
89
years.
90
90
</p>
···
93
93
{sortedConcerts.map((yearGroup) => (
94
94
<div key={yearGroup.year}>
95
95
<h2
96
-
className="text-lg font-semibold mb-3 text-gray-900 dark:text-white"
96
+
className="mb-3 text-lg font-semibold text-gray-900 dark:text-white"
97
97
style={{ fontFamily: "var(--font-balgin)" }}
98
98
>
99
99
{yearGroup.year}
···
102
102
{yearGroup.concerts.map((concert, index) => (
103
103
<li
104
104
key={index}
105
-
className="pl-4 border-l-2 border-gray-300 dark:border-gray-600"
105
+
className="border-l-2 border-gray-300 pl-4 dark:border-gray-600"
106
106
>
107
107
<div className="flex items-start gap-2">
108
108
<div className="flex-1">
···
133
133
)}
134
134
{concert.setlist && (
135
135
<div
136
-
className="text-xs mt-1"
136
+
className="mt-1 text-xs"
137
137
style={{ fontFamily: "var(--font-balgin)" }}
138
138
>
139
139
<a
140
140
href={concert.setlist}
141
141
target="_blank"
142
142
rel="noopener noreferrer"
143
-
className="text-blue-600 dark:text-blue-400 hover:underline"
143
+
className="text-blue-600 hover:underline dark:text-blue-400"
144
144
>
145
145
View Setlist →
146
146
</a>
+2
-2
src/app/contact/page.tsx
+2
-2
src/app/contact/page.tsx
···
97
97
__html: JSON.stringify(contactPageSchema),
98
98
}}
99
99
/>
100
-
<div className="min-h-screen flex flex-col">
100
+
<div className="flex min-h-screen flex-col">
101
101
<MENU pageFirstWord="Contact" />
102
102
<main className="flex-1">
103
103
<div className="mx-5 mt-4 mb-4">
104
104
<h1
105
-
className="text-xl font-bold mb-4 text-gray-800 dark:text-white"
105
+
className="mb-4 text-xl font-bold text-gray-800 dark:text-white"
106
106
style={{ fontFamily: "var(--font-balgin)" }}
107
107
>
108
108
Get in Touch
+13
-13
src/app/elsewhere/page.tsx
+13
-13
src/app/elsewhere/page.tsx
···
55
55
export default function Elsewhere() {
56
56
// Sort appearances by date (most recent first)
57
57
const sortedAppearances = [...appearances].sort(
58
-
(a, b) => new Date(b.date).getTime() - new Date(a.date).getTime(),
58
+
(a, b) => new Date(b.date).getTime() - new Date(a.date).getTime()
59
59
);
60
60
61
61
return (
···
67
67
__html: JSON.stringify(elsewherePageSchema),
68
68
}}
69
69
/>
70
-
<div className="min-h-screen flex flex-col">
70
+
<div className="flex min-h-screen flex-col">
71
71
<MENU pageFirstWord="Elsewhere" />
72
72
<main className="flex-1">
73
73
<div className="mx-5 mt-4 mb-4">
74
74
<h1
75
-
className="text-xl font-bold mb-2 text-gray-800 dark:text-white"
75
+
className="mb-2 text-xl font-bold text-gray-800 dark:text-white"
76
76
style={{ fontFamily: "var(--font-balgin)" }}
77
77
>
78
78
My appearances elsewhere.
79
79
</h1>
80
-
<p className="text-gray-600 dark:text-white/70 mb-6 italic">
80
+
<p className="mb-6 text-gray-600 italic dark:text-white/70">
81
81
a list of output or writings on sites other than one's own
82
82
</p>
83
83
84
84
{sortedAppearances.length === 0 ? (
85
-
<div className="text-center py-12">
85
+
<div className="py-12 text-center">
86
86
<p className="text-gray-500 dark:text-gray-400">
87
87
No appearances yet. Check back soon!
88
88
</p>
···
95
95
href={`${appearance.url}?utm_source=jaspermayone.com&utm_medium=referral`}
96
96
target="_blank"
97
97
rel="noopener noreferrer"
98
-
className="block p-4 border border-gray-200 dark:border-gray-700 rounded-lg hover:border-gray-300 dark:hover:border-gray-600 hover:bg-gray-50 dark:hover:bg-gray-800/30 transition-colors group"
98
+
className="group block rounded-lg border border-gray-200 p-4 transition-colors hover:border-gray-300 hover:bg-gray-50 dark:border-gray-700 dark:hover:border-gray-600 dark:hover:bg-gray-800/30"
99
99
>
100
100
<div className="flex items-start justify-between gap-4">
101
-
<div className="flex-1 min-w-0">
102
-
<div className="flex items-start gap-2 mb-1">
101
+
<div className="min-w-0 flex-1">
102
+
<div className="mb-1 flex items-start gap-2">
103
103
<h2
104
-
className="font-semibold text-gray-900 dark:text-white group-hover:text-blue-600 dark:group-hover:text-blue-400 transition-colors"
104
+
className="font-semibold text-gray-900 transition-colors group-hover:text-blue-600 dark:text-white dark:group-hover:text-blue-400"
105
105
style={{ fontFamily: "var(--font-balgin)" }}
106
106
>
107
107
{appearance.title}
108
108
</h2>
109
-
<ArrowUpRight className="w-4 h-4 text-gray-400 group-hover:text-blue-600 dark:group-hover:text-blue-400 flex-shrink-0 mt-0.5" />
109
+
<ArrowUpRight className="mt-0.5 h-4 w-4 flex-shrink-0 text-gray-400 group-hover:text-blue-600 dark:group-hover:text-blue-400" />
110
110
</div>
111
111
112
-
<div className="flex flex-wrap items-center gap-2 text-sm text-gray-600 dark:text-gray-400 mb-2">
112
+
<div className="mb-2 flex flex-wrap items-center gap-2 text-sm text-gray-600 dark:text-gray-400">
113
113
<span className="font-medium">
114
114
{appearance.platform}
115
115
</span>
···
117
117
<>
118
118
<span>•</span>
119
119
<span
120
-
className="px-2 py-0.5 text-xs rounded-full bg-gray-100 dark:bg-gray-700"
120
+
className="rounded-full bg-gray-100 px-2 py-0.5 text-xs dark:bg-gray-700"
121
121
style={{ fontFamily: "var(--font-balgin)" }}
122
122
>
123
123
{appearance.type}
···
141
141
year: "numeric",
142
142
month: "long",
143
143
day: "numeric",
144
-
},
144
+
}
145
145
)}
146
146
</time>
147
147
</div>
+5
-13
src/app/error.tsx
+5
-13
src/app/error.tsx
···
12
12
});
13
13
14
14
return (
15
-
<div className="h-screen w-screen flex flex-col items-center justify-center overflow-hidden py-6">
15
+
<div className="flex h-screen w-screen flex-col items-center justify-center overflow-hidden py-6">
16
16
{bottomSquiggles.map((config, index) => (
17
17
<SquigglyLine
18
18
key={index}
···
23
23
/>
24
24
))}
25
25
26
-
<div className="my-12 flex flex-col items-center justify-center rounded-md bg-linkHover/40 p-10">
27
-
<div className="flex gap-2 mb-1">
26
+
<div className="bg-linkHover/40 my-12 flex flex-col items-center justify-center rounded-md p-10">
27
+
<div className="mb-1 flex gap-2">
28
28
{["E", "R", "R", "O", "R"].map((letter, i) => (
29
29
<div
30
30
key={i}
31
-
className="font-cute-notes w-12 h-12 flex items-center justify-center text-5xl font-medium"
31
+
className="font-cute-notes flex h-12 w-12 items-center justify-center text-5xl font-medium"
32
32
>
33
33
{letter}
34
34
</div>
35
35
))}
36
36
</div>
37
-
38
-
{/* <SquigglyLine
39
-
frequency={50}
40
-
amplitude={0.4}
41
-
className="w-3/4"
42
-
color="#56ba8e"
43
-
/> */}
44
-
45
37
<div className="max-w-lg text-center">
46
38
<p className="inline" style={{ fontFamily: "var(--font-balgin)" }}>
47
39
Uh oh! This page seems to have lost artistic direction. Please try
48
40
to
49
41
</p>{" "}
50
-
<p className="inline underline decoration-wavy decoration-greeen hover:decoration-linkHover hover:bg-blue-400 hover:rounded-md transition-all duration-300">
42
+
<p className="decoration-greeen hover:decoration-linkHover inline underline decoration-wavy transition-all duration-300 hover:rounded-md hover:bg-blue-400">
51
43
<Link href="/">return home!</Link>
52
44
</p>
53
45
</div>
+10
-10
src/app/green/page.tsx
+10
-10
src/app/green/page.tsx
···
58
58
__html: JSON.stringify(greenPageSchema),
59
59
}}
60
60
/>
61
-
<div className="min-h-screen flex flex-col">
61
+
<div className="flex min-h-screen flex-col">
62
62
<MENU pageFirstWord="Green" />
63
63
<main className="flex-1">
64
64
<div className="mx-5 mt-4 mb-4">
65
65
<h1
66
-
className="text-xl font-bold mb-4 text-gray-800 dark:text-white"
66
+
className="mb-4 text-xl font-bold text-gray-800 dark:text-white"
67
67
style={{ fontFamily: "var(--font-balgin)" }}
68
68
>
69
69
Living Green
···
77
77
</p>
78
78
79
79
{/* Carbon Rating Card */}
80
-
<div className="border border-gray-200 dark:border-gray-700 rounded-lg p-6 bg-white dark:bg-gray-800/20">
81
-
<div className="flex items-center justify-between mb-4">
80
+
<div className="rounded-lg border border-gray-200 bg-white p-6 dark:border-gray-700 dark:bg-gray-800/20">
81
+
<div className="mb-4 flex items-center justify-between">
82
82
<h2
83
83
className="text-lg font-semibold text-gray-800 dark:text-white"
84
84
style={{ fontFamily: "var(--font-balgin)" }}
85
85
>
86
86
Website Carbon Rating
87
87
</h2>
88
-
<div className="flex items-center justify-center w-12 h-12 rounded-full bg-green-100 dark:bg-green-900/30">
88
+
<div className="flex h-12 w-12 items-center justify-center rounded-full bg-green-100 dark:bg-green-900/30">
89
89
<span
90
90
className="text-2xl font-bold text-green-700 dark:text-green-400"
91
91
style={{ fontFamily: "var(--font-balgin)" }}
···
95
95
</div>
96
96
</div>
97
97
98
-
<div className="grid grid-cols-1 md:grid-cols-3 gap-4 mb-4">
99
-
<div className="text-center p-3 rounded-md bg-gray-50 dark:bg-gray-700/30">
98
+
<div className="mb-4 grid grid-cols-1 gap-4 md:grid-cols-3">
99
+
<div className="rounded-md bg-gray-50 p-3 text-center dark:bg-gray-700/30">
100
100
<div
101
101
className="text-2xl font-bold text-gray-900 dark:text-white"
102
102
style={{ fontFamily: "var(--font-balgin)" }}
···
108
108
</div>
109
109
</div>
110
110
111
-
<div className="text-center p-3 rounded-md bg-gray-50 dark:bg-gray-700/30">
111
+
<div className="rounded-md bg-gray-50 p-3 text-center dark:bg-gray-700/30">
112
112
<div
113
113
className="text-2xl font-bold text-gray-900 dark:text-white"
114
114
style={{ fontFamily: "var(--font-balgin)" }}
···
120
120
</div>
121
121
</div>
122
122
123
-
<div className="text-center p-3 rounded-md bg-gray-50 dark:bg-gray-700/30">
123
+
<div className="rounded-md bg-gray-50 p-3 text-center dark:bg-gray-700/30">
124
124
<div
125
125
className="text-2xl font-bold text-gray-900 dark:text-white"
126
126
style={{ fontFamily: "var(--font-balgin)" }}
···
133
133
</div>
134
134
</div>
135
135
136
-
<p className="text-sm text-gray-600 dark:text-gray-400 mb-2">
136
+
<p className="mb-2 text-sm text-gray-600 dark:text-gray-400">
137
137
This website produces minimal carbon emissions with just{" "}
138
138
<strong>0.17 grams of CO₂</strong> per page view. That's
139
139
excellent for web sustainability!
+1
-1
src/app/keys/[key]/data.ts
+1
-1
src/app/keys/[key]/data.ts
+20
-20
src/app/keys/[key]/page.tsx
+20
-20
src/app/keys/[key]/page.tsx
···
117
117
/>
118
118
<main className="min-h-screen">
119
119
<div
120
-
className="max-w-4xl mx-auto px-4 py-8 md:py-12"
120
+
className="mx-auto max-w-4xl px-4 py-8 md:py-12"
121
121
style={{ fontFamily: "var(--font-balgin)" }}
122
122
>
123
123
{/* Header */}
124
124
<div className="mb-8">
125
-
<h1 className="text-3xl md:text-4xl font-bold text-gray-900 dark:text-white mb-2">
125
+
<h1 className="mb-2 text-3xl font-bold text-gray-900 md:text-4xl dark:text-white">
126
126
{title.toUpperCase()} Key
127
127
</h1>
128
128
<p className="text-gray-600 dark:text-gray-400">
···
131
131
</div>
132
132
133
133
{/* Quick Actions Card */}
134
-
<div className="bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-xl p-6 mb-6 shadow-sm">
135
-
<h2 className="text-lg font-semibold text-gray-900 dark:text-white mb-4">
134
+
<div className="mb-6 rounded-xl border border-gray-200 bg-white p-6 shadow-sm dark:border-gray-700 dark:bg-gray-800">
135
+
<h2 className="mb-4 text-lg font-semibold text-gray-900 dark:text-white">
136
136
Quick Actions
137
137
</h2>
138
-
<div className="flex flex-col sm:flex-row gap-3">
138
+
<div className="flex flex-col gap-3 sm:flex-row">
139
139
<CopyButton label="Copy Key" valueToCopy={keyData} />
140
140
<Link href={downloadURL} className="flex-1 sm:flex-initial">
141
141
<Button variant="outline" className="w-full">
···
146
146
</div>
147
147
148
148
{/* Key Details Card */}
149
-
<div className="bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-xl p-6 mb-6 shadow-sm">
150
-
<h2 className="text-lg font-semibold text-gray-900 dark:text-white mb-5">
149
+
<div className="mb-6 rounded-xl border border-gray-200 bg-white p-6 shadow-sm dark:border-gray-700 dark:bg-gray-800">
150
+
<h2 className="mb-5 text-lg font-semibold text-gray-900 dark:text-white">
151
151
Key Information
152
152
</h2>
153
153
154
154
<div className="space-y-5">
155
155
<div>
156
-
<label className="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2">
156
+
<div className="mb-2 text-sm font-medium text-gray-700 dark:text-gray-300">
157
157
Fingerprint
158
-
</label>
159
-
<div className="bg-gray-50 dark:bg-gray-900 px-4 py-3 rounded-lg border border-gray-200 dark:border-gray-700">
160
-
<code className="text-sm font-mono text-gray-800 dark:text-gray-200 break-all">
158
+
</div>
159
+
<div className="rounded-lg border border-gray-200 bg-gray-50 px-4 py-3 dark:border-gray-700 dark:bg-gray-900">
160
+
<code className="font-mono text-sm break-all text-gray-800 dark:text-gray-200">
161
161
{fingerprint}
162
162
</code>
163
163
</div>
164
164
</div>
165
165
166
166
<div>
167
-
<label className="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2">
167
+
<div className="mb-2 text-sm font-medium text-gray-700 dark:text-gray-300">
168
168
Direct Link
169
-
</label>
170
-
<div className="bg-gray-50 dark:bg-gray-900 px-4 py-3 rounded-lg border border-gray-200 dark:border-gray-700">
169
+
</div>
170
+
<div className="rounded-lg border border-gray-200 bg-gray-50 px-4 py-3 dark:border-gray-700 dark:bg-gray-900">
171
171
<Link
172
172
href={directURL}
173
-
className="text-sm text-blue-600 dark:text-blue-400 hover:underline break-all font-mono"
173
+
className="font-mono text-sm break-all text-blue-600 hover:underline dark:text-blue-400"
174
174
>
175
175
{fullDirectURL}
176
176
</Link>
···
181
181
182
182
{/* Import Command Card */}
183
183
{(title === "ssh" || title === "gpg") && (
184
-
<div className="bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-xl p-6 shadow-sm">
185
-
<h2 className="text-lg font-semibold text-gray-900 dark:text-white mb-3">
184
+
<div className="rounded-xl border border-gray-200 bg-white p-6 shadow-sm dark:border-gray-700 dark:bg-gray-800">
185
+
<h2 className="mb-3 text-lg font-semibold text-gray-900 dark:text-white">
186
186
Import Command
187
187
</h2>
188
-
<p className="text-sm text-gray-600 dark:text-gray-400 mb-4">
188
+
<p className="mb-4 text-sm text-gray-600 dark:text-gray-400">
189
189
Run this command in your terminal to import the key:
190
190
</p>
191
191
192
192
<div className="space-y-3">
193
-
<div className="bg-gray-900 dark:bg-black p-4 rounded-lg border border-gray-700 overflow-x-auto">
194
-
<code className="text-sm font-mono text-green-400 block whitespace-nowrap">
193
+
<div className="overflow-x-auto rounded-lg border border-gray-700 bg-gray-900 p-4 dark:bg-black">
194
+
<code className="block font-mono text-sm whitespace-nowrap text-green-400">
195
195
{title === "ssh" ? sshImportCommand : gpgImportCommand}
196
196
</code>
197
197
</div>
+5
-5
src/app/not-found.tsx
+5
-5
src/app/not-found.tsx
···
11
11
});
12
12
13
13
return (
14
-
<div className="h-screen w-screen flex flex-col items-center justify-center overflow-hidden py-6">
14
+
<div className="flex h-screen w-screen flex-col items-center justify-center overflow-hidden py-6">
15
15
{bottomSquiggles.map((config, index) => (
16
16
<SquigglyLine
17
17
key={index}
···
22
22
/>
23
23
))}
24
24
25
-
<div className="my-12 flex flex-col items-center justify-center rounded-md bg-linkHover/40 p-10">
26
-
<div className="flex gap-2 mb-1">
25
+
<div className="bg-linkHover/40 my-12 flex flex-col items-center justify-center rounded-md p-10">
26
+
<div className="mb-1 flex gap-2">
27
27
{["4", "0", "4"].map((letter, i) => (
28
28
<div
29
29
key={i}
30
-
className="font-cute-notes w-12 h-12 flex items-center justify-center text-5xl font-medium"
30
+
className="font-cute-notes flex h-12 w-12 items-center justify-center text-5xl font-medium"
31
31
>
32
32
{letter}
33
33
</div>
···
38
38
<p className="inline">
39
39
This page seems to have run away to join the circus.
40
40
</p>{" "}
41
-
<p className="inline underline decoration-wavy decoration-greeen hover:decoration-linkHover hover:bg-blue-400 hover:rounded-md transition-all duration-300">
41
+
<p className="decoration-greeen hover:decoration-linkHover inline underline decoration-wavy transition-all duration-300 hover:rounded-md hover:bg-blue-400">
42
42
<Link href="/">Go home!</Link>
43
43
</p>
44
44
</div>
+4
-4
src/app/now/page.tsx
+4
-4
src/app/now/page.tsx
···
82
82
__html: JSON.stringify(nowPageSchema),
83
83
}}
84
84
/>
85
-
<div className="h-screen flex flex-col">
85
+
<div className="flex h-screen flex-col">
86
86
<MENU pageFirstWord="Now" />
87
-
<main className="m-5 flex-1 overflow-hidden flex flex-col">
87
+
<main className="m-5 flex flex-1 flex-col overflow-hidden">
88
88
<div className="mb-6">
89
-
<p className="text-gray-700 mb-3">
89
+
<p className="mb-3 text-gray-700">
90
90
This is a semi-realtime status update system for posting updates
91
91
to{" "}
92
92
<Link
···
108
108
</Link>{" "}
109
109
that updates automatically.
110
110
</p>
111
-
<p className="text-gray-600 text-sm">
111
+
<p className="text-sm text-gray-600">
112
112
The original was called a.status.update and created by{" "}
113
113
<Link
114
114
href="https://dame.is/creating/shortcuts/a-status-update/?utm_source=jaspermayone.com&utm_medium=referral"
+5
-5
src/app/panera/page.tsx
+5
-5
src/app/panera/page.tsx
···
76
76
addBackground={true}
77
77
disableSquig={true}
78
78
/>
79
-
<main className="max-w-4xl mx-auto px-4 py-8">
80
-
<div className="text-center mb-8">
79
+
<main className="mx-auto max-w-4xl px-4 py-8">
80
+
<div className="mb-8 text-center">
81
81
<div
82
-
className="inline-block rounded-lg p-8 mb-4"
82
+
className="mb-4 inline-block rounded-lg p-8"
83
83
style={{
84
84
background: "#fff",
85
85
boxShadow: "0 2px 8px rgba(0,0,0,0.08)",
86
86
}}
87
87
>
88
88
<div
89
-
className="text-3xl font-bold mb-4"
89
+
className="mb-4 text-3xl font-bold"
90
90
style={{
91
91
fontFamily: "var(--font-balgin)",
92
92
color: "#051402",
···
96
96
Jasper's Panera Bread Order
97
97
</div>
98
98
<p
99
-
className="text-gray-600 max-w-2xl mx-auto"
99
+
className="mx-auto max-w-2xl text-gray-600"
100
100
style={{ lineHeight: "1.6", fontFamily: "var(--font-balgin)" }}
101
101
>
102
102
Inspired by people creating /chipotle pages with their Chipotle
+6
-6
src/app/pfp/page.tsx
+6
-6
src/app/pfp/page.tsx
···
55
55
};
56
56
57
57
export default function PFP() {
58
-
let paths = [jm, dark, lite, circus, waves];
58
+
const paths = [jm, dark, lite, circus, waves];
59
59
60
60
return (
61
61
<>
···
66
66
__html: JSON.stringify(pfpPageSchema),
67
67
}}
68
68
/>
69
-
<div className="min-h-screen flex flex-col">
69
+
<div className="flex min-h-screen flex-col">
70
70
<MENU pageFirstWord="PFPs" />
71
71
<main className="flex-1">
72
72
<div className="mx-5 mt-4 mb-4">
73
73
<h1
74
-
className="text-xl font-bold underline mb-4 text-gray-800 dark:text-white"
74
+
className="mb-4 text-xl font-bold text-gray-800 underline dark:text-white"
75
75
style={{ fontFamily: "var(--font-balgin)" }}
76
76
>
77
77
Profile Photos
···
81
81
Here's all the profile photos I've used over the years
82
82
</p>
83
83
84
-
<div className="grid grid-cols-4 md:grid-cols-5 lg:grid-cols-6 gap-4">
84
+
<div className="grid grid-cols-4 gap-4 md:grid-cols-5 lg:grid-cols-6">
85
85
{paths.map((path, index) => (
86
86
<div
87
87
key={index}
88
-
className="aspect-square overflow-hidden rounded-[10%] w-50 h-50 bg-white/50 dark:bg-gray-800/20 p-1"
88
+
className="aspect-square h-50 w-50 overflow-hidden rounded-[10%] bg-white/50 p-1 dark:bg-gray-800/20"
89
89
>
90
90
<Image
91
91
src={path}
···
95
95
aria-label="one of jasper's previous profile photos"
96
96
placeholder="blur"
97
97
priority={true}
98
-
className="w-full h-full object-cover object-center rounded-[8%]"
98
+
className="h-full w-full rounded-[8%] object-cover object-center"
99
99
/>
100
100
</div>
101
101
))}
+7
-7
src/app/podroll/page.tsx
+7
-7
src/app/podroll/page.tsx
···
98
98
__html: JSON.stringify(podrollPageSchema),
99
99
}}
100
100
/>
101
-
<div className="min-h-screen flex flex-col">
101
+
<div className="flex min-h-screen flex-col">
102
102
<MENU pageFirstWord="Podcasts" />
103
103
<main className="flex-1">
104
104
<div className="mx-5 mt-4 mb-4">
105
105
<h1
106
-
className="text-xl font-bold mb-2 text-gray-800 dark:text-white"
106
+
className="mb-2 text-xl font-bold text-gray-800 dark:text-white"
107
107
style={{ fontFamily: "var(--font-balgin)" }}
108
108
>
109
109
Recommended Podcasts
110
110
</h1>
111
111
112
-
<div className="grid grid-cols-1 md:grid-cols-2 gap-3">
112
+
<div className="grid grid-cols-1 gap-3 md:grid-cols-2">
113
113
{podcasts.map((podcast, index) => (
114
114
<Link
115
115
key={index}
116
116
href={`${podcast.url}?utm_source=jaspermayone.com&utm_medium=referral`}
117
117
target="_blank"
118
118
rel="noopener noreferrer"
119
-
className="flex p-3 bg-white/50 dark:bg-gray-800/20 rounded-lg hover:bg-blue-50 dark:hover:bg-blue-900/20 transition-colors"
119
+
className="flex rounded-lg bg-white/50 p-3 transition-colors hover:bg-blue-50 dark:bg-gray-800/20 dark:hover:bg-blue-900/20"
120
120
>
121
-
<div className="shrink-0 mr-3 text-blue-500">
121
+
<div className="mr-3 shrink-0 text-blue-500">
122
122
<HeadphonesIcon size={20} />
123
123
</div>
124
124
<div>
125
-
<h2 className="font-medium text-gray-800 dark:text-gray-100 text-sm">
125
+
<h2 className="text-sm font-medium text-gray-800 dark:text-gray-100">
126
126
{podcast.name}
127
127
</h2>
128
-
<p className="text-gray-600 dark:text-white/70 text-xs mt-1">
128
+
<p className="mt-1 text-xs text-gray-600 dark:text-white/70">
129
129
{podcast.description}
130
130
</p>
131
131
</div>
+12
-12
src/app/portfolio/page.tsx
+12
-12
src/app/portfolio/page.tsx
···
70
70
__html: JSON.stringify(portfolioSchema),
71
71
}}
72
72
/>
73
-
<div className="min-h-screen flex flex-col">
73
+
<div className="flex min-h-screen flex-col">
74
74
<MENU pageFirstWord="Portfolio" />
75
75
<main className="m-5 flex-1">
76
76
<div className="mb-8">
77
-
<p className="text-gray-700 dark:text-white/70 mb-3">
77
+
<p className="mb-3 text-gray-700 dark:text-white/70">
78
78
A collection of projects I've worked on, ranging from web
79
79
applications to creative tools and experiments.
80
80
</p>
81
81
</div>
82
82
83
-
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
83
+
<div className="grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-3">
84
84
{projects.map((project, index) => (
85
85
<div
86
86
key={index}
87
-
className="border border-gray-200 dark:border-gray-700 rounded-lg overflow-hidden hover:shadow-lg transition-shadow duration-200"
87
+
className="overflow-hidden rounded-lg border border-gray-200 transition-shadow duration-200 hover:shadow-lg dark:border-gray-700"
88
88
>
89
-
<div className="relative w-full h-48 bg-gray-100 dark:bg-gray-800">
89
+
<div className="relative h-48 w-full bg-gray-100 dark:bg-gray-800">
90
90
{project.image ? (
91
91
<Image
92
92
src={project.image}
···
99
99
blurDataURL="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAE0lEQVR42mNk+P+fgYGBgQEAAP8A/ueJdwEAAAAASUVORK5CYII="
100
100
/>
101
101
) : (
102
-
<div className="w-full h-full flex items-center justify-center text-gray-400 dark:text-gray-600 text-sm">
102
+
<div className="flex h-full w-full items-center justify-center text-sm text-gray-400 dark:text-gray-600">
103
103
No image provided
104
104
</div>
105
105
)}
106
106
</div>
107
107
<div className="p-6">
108
-
<div className="flex justify-between items-start mb-3">
108
+
<div className="mb-3 flex items-start justify-between">
109
109
<h2 className="text-xl font-semibold text-gray-900 dark:text-white">
110
110
{project.title}
111
111
</h2>
···
118
118
className="text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-white"
119
119
aria-label="Visit project"
120
120
>
121
-
<PaperclipIcon className="w-5 h-5" />
121
+
<PaperclipIcon className="h-5 w-5" />
122
122
</Link>
123
123
)}
124
124
{project.github && (
···
129
129
className="text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-white"
130
130
aria-label="View on GitHub"
131
131
>
132
-
<GithubLogoIcon className="w-5 h-5" />
132
+
<GithubLogoIcon className="h-5 w-5" />
133
133
</Link>
134
134
)}
135
135
</div>
136
136
</div>
137
137
138
-
<p className="text-gray-600 dark:text-white/70 text-sm mb-4">
138
+
<p className="mb-4 text-sm text-gray-600 dark:text-white/70">
139
139
{project.description}
140
140
</p>
141
141
142
142
{project.tags && project.tags.length > 0 && (
143
-
<div className="flex flex-wrap gap-2 mb-3">
143
+
<div className="mb-3 flex flex-wrap gap-2">
144
144
{project.tags.map((tag, tagIndex) => (
145
145
<span
146
146
key={tagIndex}
147
-
className="px-2 py-1 text-xs rounded-full bg-blue-100 dark:bg-blue-900/30 text-blue-800 dark:text-blue-300"
147
+
className="rounded-full bg-blue-100 px-2 py-1 text-xs text-blue-800 dark:bg-blue-900/30 dark:text-blue-300"
148
148
style={{ fontFamily: "var(--font-balgin)" }}
149
149
>
150
150
{tag}
+5
-5
src/app/to/page.tsx
+5
-5
src/app/to/page.tsx
···
14
14
const toRoutes = redirects.filter((redirect) => redirect.slashToLink);
15
15
16
16
return (
17
-
<div className="min-h-screen bg-background text-foreground">
17
+
<div className="bg-background text-foreground min-h-screen">
18
18
<div className="container mx-auto px-4 py-8">
19
19
<h1
20
-
className="text-3xl font-bold mb-8"
20
+
className="mb-8 text-3xl font-bold"
21
21
style={{ fontFamily: "var(--font-balgin)" }}
22
22
>
23
23
All /to Routes
···
27
27
{toRoutes.map((redirect) => (
28
28
<div
29
29
key={redirect.slug}
30
-
className="border rounded-lg p-4 hover:bg-accent/50 transition-colors"
30
+
className="hover:bg-accent/50 rounded-lg border p-4 transition-colors"
31
31
>
32
32
<div className="flex items-center justify-between">
33
33
<div>
34
-
<h3 className="font-semibold text-lg underline decoration-wavy decoration-greeen text-greeen hover:decoration-linkHover">
34
+
<h3 className="decoration-greeen text-greeen hover:decoration-linkHover text-lg font-semibold underline decoration-wavy">
35
35
{redirect.slug}
36
36
</h3>
37
37
<p className="text-muted-foreground text-sm break-all">
···
40
40
</div>
41
41
<Link
42
42
href={`/to/${redirect.slug}?utm_source=jaspermayone.com&utm_medium=referral`}
43
-
className="text-primary hover:underline text-sm"
43
+
className="text-primary text-sm hover:underline"
44
44
>
45
45
Visit →
46
46
</Link>
+7
-7
src/app/uses/page.tsx
+7
-7
src/app/uses/page.tsx
···
85
85
__html: JSON.stringify(usesPageSchema),
86
86
}}
87
87
/>
88
-
<div className="min-h-screen flex flex-col">
88
+
<div className="flex min-h-screen flex-col">
89
89
<MENU pageFirstWord="Uses" />
90
90
<main className="flex-1">
91
91
<div className="mx-5 mt-4 mb-4">
92
-
<h1 className="text-xl font-bold mb-2 text-gray-800 dark:text-white">
92
+
<h1 className="mb-2 text-xl font-bold text-gray-800 dark:text-white">
93
93
What I Use
94
94
</h1>
95
95
96
-
<div className="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-2">
96
+
<div className="grid grid-cols-1 gap-2 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4">
97
97
{tools.map((item, index) => (
98
98
<div
99
99
key={index}
100
-
className="flex items-center p-2 bg-white/50 dark:bg-gray-800/20 rounded-md"
100
+
className="flex items-center rounded-md bg-white/50 p-2 dark:bg-gray-800/20"
101
101
>
102
-
<div className="text-lg mr-2">{item.emoji}</div>
102
+
<div className="mr-2 text-lg">{item.emoji}</div>
103
103
<div>
104
-
<div className="font-medium text-sm text-gray-800 dark:text-gray-100">
104
+
<div className="text-sm font-medium text-gray-800 dark:text-gray-100">
105
105
{item.name}
106
106
</div>
107
-
<div className="text-gray-600 dark:text-white/70 text-xs">
107
+
<div className="text-xs text-gray-600 dark:text-white/70">
108
108
{item.result}
109
109
</div>
110
110
</div>
+34
-34
src/app/verify/page.tsx
+34
-34
src/app/verify/page.tsx
···
47
47
48
48
const LetterBlock = ({ letter }) => (
49
49
<span
50
-
className="inline-block py-1 mx-0.5"
50
+
className="mx-0.5 inline-block py-1"
51
51
style={{ fontFamily: "var(--font-cuteNotes)" }}
52
52
>
53
53
{letter}
···
56
56
57
57
const SectionHeader = ({ children }) => (
58
58
<h2
59
-
className="text-4xl mb-2 dark:text-white"
59
+
className="mb-2 text-4xl dark:text-white"
60
60
style={{ fontFamily: "var(--font-cuteNotes)" }}
61
61
>
62
62
{children.split("").map((letter, index) => (
···
103
103
};
104
104
105
105
const VerifyPage = () => {
106
-
const title = "/VERIFY";
106
+
const _title = "/VERIFY";
107
107
108
108
enum domainType {
109
109
personal,
···
238
238
},
239
239
];
240
240
241
-
const cryptoKeys = [
241
+
const _cryptoKeys = [
242
242
{
243
243
type: "GPG",
244
244
fingerprint: "00E6 43C2 1FAC 965F FB28 D3B7 14D0 D45A 1DAD AAFA",
···
257
257
const getIcon = (platform) => {
258
258
switch (platform.toLowerCase()) {
259
259
case "github":
260
-
return <SiGithub className="w-4 h-4" />;
260
+
return <SiGithub className="h-4 w-4" />;
261
261
case "linkedin":
262
-
return <SiLinkedin className="w-4 h-4" />;
262
+
return <SiLinkedin className="h-4 w-4" />;
263
263
case "instagram":
264
-
return <SiInstagram className="w-4 h-4" />;
264
+
return <SiInstagram className="h-4 w-4" />;
265
265
case "youtube":
266
-
return <SiYoutube className="w-4 h-4" />;
266
+
return <SiYoutube className="h-4 w-4" />;
267
267
case "buy me a coffee":
268
-
return <SiBuymeacoffee className="w-4 h-4" />;
268
+
return <SiBuymeacoffee className="h-4 w-4" />;
269
269
case "matrix":
270
-
return <SiMatrix className="w-4 h-4" />;
270
+
return <SiMatrix className="h-4 w-4" />;
271
271
case "bluesky":
272
-
return <SiBluesky className="w-4 h-4" />;
272
+
return <SiBluesky className="h-4 w-4" />;
273
273
case "threads":
274
-
return <SiThreads className="w-4 h-4" />;
274
+
return <SiThreads className="h-4 w-4" />;
275
275
case "signal":
276
-
return <SiSignal className="w-4 h-4" />;
276
+
return <SiSignal className="h-4 w-4" />;
277
277
case "reddit":
278
-
return <SiReddit className="w-4 h-4" />;
278
+
return <SiReddit className="h-4 w-4" />;
279
279
case "hackerone":
280
-
return <SiHackerone className="w-4 h-4" />;
280
+
return <SiHackerone className="h-4 w-4" />;
281
281
case "twitter/x":
282
-
return <SiX className="w-4 h-4" />;
282
+
return <SiX className="h-4 w-4" />;
283
283
case "dev.to":
284
-
return <SiDevdotto className="w-4 h-4" />;
284
+
return <SiDevdotto className="h-4 w-4" />;
285
285
case "product hunt":
286
-
return <SiProducthunt className="w-4 h-4" />;
286
+
return <SiProducthunt className="h-4 w-4" />;
287
287
case "hacker news":
288
288
// HN doesn't have an official icon, use YCombinator as a placeholder
289
-
return <SiYcombinator className="w-4 h-4" />;
289
+
return <SiYcombinator className="h-4 w-4" />;
290
290
case "thingiverse":
291
-
return <SiThingiverse className="w-4 h-4" />;
291
+
return <SiThingiverse className="h-4 w-4" />;
292
292
default:
293
-
return <AtSign className="w-4 h-4" />;
293
+
return <AtSign className="h-4 w-4" />;
294
294
}
295
295
};
296
296
···
304
304
}}
305
305
/>
306
306
<MENU pageFirstWord="/verify" />
307
-
<main className="max-w-4xl mx-auto px-4 pt-6">
307
+
<main className="mx-auto max-w-4xl px-4 pt-6">
308
308
<header className="mb-8">
309
-
<p className="text-neutral-500 dark:text-neutral-400 text-[0.60rem] mb-2">
309
+
<p className="mb-2 text-[0.60rem] text-neutral-500 dark:text-neutral-400">
310
310
Inspired by{" "}
311
311
<Link
312
312
className="lnk"
···
326
326
platforms listed below.
327
327
</p>
328
328
329
-
<p className="text-neutral-700 dark:text-neutral-300 mt-2">
329
+
<p className="mt-2 text-neutral-700 dark:text-neutral-300">
330
330
My entire identity can also be verified at{" "}
331
331
<Link
332
332
href="https://keyoxide.org/00E643C21FAC965FFB28D3B714D0D45A1DADAAFA?utm_source=jaspermayone.com&utm_medium=referral"
···
370
370
{/* Domains Section */}
371
371
<section className="mb-6">
372
372
<SectionHeader>domains</SectionHeader>
373
-
<div className="bg-gradient-to-br from-blue-50 to-pink-50 dark:from-slate-800 dark:to-slate-900 p-6 rounded-xl border border-gray-200 dark:border-gray-700">
373
+
<div className="rounded-xl border border-gray-200 bg-gradient-to-br from-blue-50 to-pink-50 p-6 dark:border-gray-700 dark:from-slate-800 dark:to-slate-900">
374
374
<p className="mb-4 text-gray-700 dark:text-gray-300">
375
375
These are the domains I own and operate. I also operate a few
376
376
other domains for work and clients that are not listed here for
377
377
privacy reasons.
378
378
</p>
379
-
<div className="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-4">
379
+
<div className="grid grid-cols-1 gap-4 sm:grid-cols-2 md:grid-cols-3">
380
380
{domains.map((domain) => {
381
381
const getBadgeStyles = (type) => {
382
382
switch (type) {
···
396
396
return (
397
397
<div
398
398
key={domain.name}
399
-
className="bg-white dark:bg-slate-800 p-4 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-blue-300 dark:hover:border-blue-500 hover:bg-blue-50 dark:hover:bg-slate-700 hover:shadow-sm transition-all duration-300"
399
+
className="rounded-lg border border-gray-200 bg-white p-4 transition-all duration-300 hover:border-blue-300 hover:bg-blue-50 hover:shadow-sm dark:border-gray-700 dark:bg-slate-800 dark:hover:border-blue-500 dark:hover:bg-slate-700"
400
400
>
401
-
<h3 className="font-medium text-lg text-gray-800 dark:text-gray-200">
401
+
<h3 className="text-lg font-medium text-gray-800 dark:text-gray-200">
402
402
{domain.name}
403
403
</h3>
404
404
<div className="mt-2 flex items-center gap-2">
405
405
<span
406
-
className={`text-xs px-2 py-1 rounded-full ${getBadgeStyles(
407
-
domain.type,
406
+
className={`rounded-full px-2 py-1 text-xs ${getBadgeStyles(
407
+
domain.type
408
408
)}`}
409
409
>
410
410
{domainType[domain.type].charAt(0).toUpperCase() +
···
423
423
{/* Email Section */}
424
424
<section className="mb-12">
425
425
<SectionHeader>email</SectionHeader>
426
-
<div className="bg-gradient-to-br from-blue-50 to-pink-50 dark:from-slate-800 dark:to-slate-900 p-6 rounded-xl border border-gray-200 dark:border-gray-700">
426
+
<div className="rounded-xl border border-gray-200 bg-gradient-to-br from-blue-50 to-pink-50 p-6 dark:border-gray-700 dark:from-slate-800 dark:to-slate-900">
427
427
<p className="mb-4 text-gray-700 dark:text-gray-300">
428
428
I maintain email addresses across various domains. Some addresses
429
429
for organizations I am a part of are not published here for
430
430
privacy reasons.
431
431
</p>
432
-
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
432
+
<div className="grid grid-cols-1 gap-4 md:grid-cols-2">
433
433
{emails.map((email) => (
434
434
<EmailCard
435
435
key={email.address}
···
455
455
{/* Accounts Section */}
456
456
<section className="mb-12">
457
457
<SectionHeader>accounts</SectionHeader>
458
-
<div className="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4">
458
+
<div className="grid grid-cols-1 gap-4 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4">
459
459
{accounts.map((account) => (
460
460
<Link
461
461
key={account.platform}
462
462
href={`${account.url}?utm_source=jaspermayone.com&utm_medium=referral`}
463
463
rel="me"
464
-
className="block p-4 rounded-lg border border-gray-200 dark:border-gray-700 transition-all duration-300 bg-white dark:bg-slate-800 hover:bg-blue-50 dark:hover:bg-slate-700 hover:border-blue-300 dark:hover:border-blue-500 hover:shadow-sm group"
464
+
className="group block rounded-lg border border-gray-200 bg-white p-4 transition-all duration-300 hover:border-blue-300 hover:bg-blue-50 hover:shadow-sm dark:border-gray-700 dark:bg-slate-800 dark:hover:border-blue-500 dark:hover:bg-slate-700"
465
465
style={{
466
466
height: account.note ? "auto" : "5rem",
467
467
minHeight: "5rem",
+1
-1
src/components/AnimatedTitle.tsx
+1
-1
src/components/AnimatedTitle.tsx
+60
-54
src/components/ConfettiWrapper.tsx
+60
-54
src/components/ConfettiWrapper.tsx
···
1
1
"use client";
2
2
3
3
import { usePathname } from "next/navigation";
4
-
import { useEffect, useState } from "react";
4
+
import { useEffect, useState, useSyncExternalStore } from "react";
5
5
6
6
const ImageConfetti = ({ imagePath, duration = 3000 }) => {
7
7
// Existing confetti implementation remains the same
···
80
80
ctx.save();
81
81
ctx.translate(
82
82
particle.x + particle.size / 2,
83
-
particle.y + particle.size / 2,
83
+
particle.y + particle.size / 2
84
84
);
85
85
ctx.rotate((particle.rotation * Math.PI) / 180);
86
86
···
92
92
-particle.size / 2,
93
93
-particle.size / 2,
94
94
particle.size,
95
-
particle.size,
95
+
particle.size
96
96
);
97
97
ctx.restore();
98
98
···
185
185
return null;
186
186
};
187
187
188
+
// Subscribe function for dark mode detection
189
+
function subscribeToDarkMode(callback: () => void) {
190
+
const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
191
+
mediaQuery.addEventListener("change", callback);
192
+
return () => mediaQuery.removeEventListener("change", callback);
193
+
}
194
+
195
+
// Get current snapshot for client
196
+
function getDarkModeSnapshot() {
197
+
return window.matchMedia("(prefers-color-scheme: dark)").matches;
198
+
}
199
+
200
+
// Get snapshot for server-side rendering
201
+
function getDarkModeServerSnapshot() {
202
+
return false;
203
+
}
204
+
188
205
export default function ConfettiWrapper() {
189
206
enum confettiTrigger {
190
207
wit = "wit",
···
234
251
235
252
const pathname = usePathname();
236
253
const [showConfetti, setShowConfetti] = useState(false);
237
-
const [isDarkMode, setIsDarkMode] = useState(false);
254
+
const isDarkMode = useSyncExternalStore(
255
+
subscribeToDarkMode,
256
+
getDarkModeSnapshot,
257
+
getDarkModeServerSnapshot
258
+
);
238
259
const [activeImage, setActiveImage] = useState<(typeof images)[0] | null>(
239
-
null,
260
+
null
240
261
);
241
262
242
263
// Use a ref to track if we've already shown confetti in this page load
···
256
277
// Check if browser environment
257
278
if (typeof window === "undefined") return;
258
279
259
-
// Detect dark mode
260
-
const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
261
-
setIsDarkMode(mediaQuery.matches);
262
-
263
-
// Add listener for theme changes
264
-
const handleThemeChange = (e: MediaQueryListEvent) => {
265
-
setIsDarkMode(e.matches);
266
-
};
267
-
268
-
mediaQuery.addEventListener("change", handleThemeChange);
269
-
270
-
// Cleanup listener
271
-
return () => {
272
-
mediaQuery.removeEventListener("change", handleThemeChange);
273
-
};
274
-
}, []);
275
-
276
-
useEffect(() => {
277
-
// Check if browser environment
278
-
if (typeof window === "undefined") return;
280
+
// Skip if already shown
281
+
if (hasShownThisSession || showConfetti) return;
279
282
280
283
// Check URL parameters for any configured triggers
281
284
const searchParams = new URLSearchParams(window.location.search);
···
289
292
})
290
293
: null;
291
294
292
-
// Only run once on page load when matched and not shown yet
293
-
if (matchedConfig && !hasShownThisSession && !showConfetti) {
294
-
// Mark that we've shown it this session
295
-
setHasShownThisSession(true);
296
-
setActiveImage(matchedConfig);
295
+
// Only run once on page load when matched
296
+
if (matchedConfig) {
297
+
// Schedule state updates asynchronously to avoid cascading renders
298
+
queueMicrotask(() => {
299
+
// Mark that we've shown it this session
300
+
setHasShownThisSession(true);
301
+
setActiveImage(matchedConfig);
297
302
298
-
// Show confetti
299
-
setShowConfetti(true);
303
+
// Show confetti
304
+
setShowConfetti(true);
300
305
301
-
// Track confetti display with Umami
302
-
const trackingElement = document.createElement("div");
303
-
trackingElement.setAttribute(
304
-
"data-umami-event",
305
-
matchedConfig.trackingEvent,
306
-
);
307
-
trackingElement.setAttribute("data-umami-event-path", pathname);
308
-
trackingElement.setAttribute(
309
-
"data-umami-event-triggered-by",
310
-
"url-param",
311
-
);
312
-
trackingElement.style.display = "none";
313
-
document.body.appendChild(trackingElement);
306
+
// Track confetti display with Umami
307
+
const trackingElement = document.createElement("div");
308
+
trackingElement.setAttribute(
309
+
"data-umami-event",
310
+
matchedConfig.trackingEvent
311
+
);
312
+
trackingElement.setAttribute("data-umami-event-path", pathname);
313
+
trackingElement.setAttribute(
314
+
"data-umami-event-triggered-by",
315
+
"url-param"
316
+
);
317
+
trackingElement.style.display = "none";
318
+
document.body.appendChild(trackingElement);
314
319
315
-
// Clean up the tracking element after a brief delay
316
-
setTimeout(() => {
317
-
if (document.body.contains(trackingElement)) {
318
-
document.body.removeChild(trackingElement);
319
-
}
320
-
}, 100);
320
+
// Clean up the tracking element after a brief delay
321
+
setTimeout(() => {
322
+
if (document.body.contains(trackingElement)) {
323
+
document.body.removeChild(trackingElement);
324
+
}
325
+
}, 100);
321
326
322
-
// Hide confetti after it finishes (4 seconds total: 2.5s active + 1.5s fade out)
323
-
setTimeout(() => setShowConfetti(false), 4000);
327
+
// Hide confetti after it finishes (4 seconds total: 2.5s active + 1.5s fade out)
328
+
setTimeout(() => setShowConfetti(false), 4000);
329
+
});
324
330
}
325
-
}, [pathname, showConfetti, hasShownThisSession]);
331
+
}, [pathname, showConfetti, hasShownThisSession, images]);
326
332
327
333
return showConfetti && activeImage ? (
328
334
<ImageConfetti
+10
-10
src/components/EmailCard.tsx
+10
-10
src/components/EmailCard.tsx
···
25
25
};
26
26
27
27
return (
28
-
<div className="group relative bg-white dark:bg-slate-800 p-4 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-blue-300 dark:hover:border-blue-500 transition-all duration-300">
28
+
<div className="group relative rounded-lg border border-gray-200 bg-white p-4 transition-all duration-300 hover:border-blue-300 dark:border-gray-700 dark:bg-slate-800 dark:hover:border-blue-500">
29
29
<div className="flex items-center gap-2">
30
-
<Mailbox className="w-4 h-4 text-gray-400 dark:text-gray-500" />
30
+
<Mailbox className="h-4 w-4 text-gray-400 dark:text-gray-500" />
31
31
<span className="font-mono text-sm text-gray-800 dark:text-gray-200">
32
32
{formatEmail(email)}
33
33
</span>
···
39
39
<a
40
40
href={`mailto:${email}`}
41
41
rel="me"
42
-
className="flex items-center gap-1 text-xs px-3 py-1 rounded-full bg-blue-50 dark:bg-blue-900/50 text-blue-600 dark:text-blue-200 hover:bg-blue-100 dark:hover:bg-blue-800/50 transition-colors duration-200"
42
+
className="flex items-center gap-1 rounded-full bg-blue-50 px-3 py-1 text-xs text-blue-600 transition-colors duration-200 hover:bg-blue-100 dark:bg-blue-900/50 dark:text-blue-200 dark:hover:bg-blue-800/50"
43
43
>
44
-
<Mail className="w-3 h-3" />
44
+
<Mail className="h-3 w-3" />
45
45
Send Email
46
46
</a>
47
47
)}
···
53
53
)}
54
54
55
55
{isPrimary && (
56
-
<span className="flex items-center gap-1 bg-rose-100 dark:bg-rose-900/50 text-rose-800 dark:text-rose-200 text-xs px-2 py-1 rounded-full">
57
-
<Star className="w-3 h-3" />
56
+
<span className="flex items-center gap-1 rounded-full bg-rose-100 px-2 py-1 text-xs text-rose-800 dark:bg-rose-900/50 dark:text-rose-200">
57
+
<Star className="h-3 w-3" />
58
58
Primary
59
59
</span>
60
60
)}
···
65
65
</span>
66
66
)} */}
67
67
{isSchool && (
68
-
<span className="flex items-center gap-1 bg-violet-100 dark:bg-violet-900/50 text-violet-800 dark:text-violet-200 text-xs px-2 py-1 rounded-full">
69
-
<GraduationCap className="w-3 h-3" />
68
+
<span className="flex items-center gap-1 rounded-full bg-violet-100 px-2 py-1 text-xs text-violet-800 dark:bg-violet-900/50 dark:text-violet-200">
69
+
<GraduationCap className="h-3 w-3" />
70
70
School
71
71
</span>
72
72
)}
73
73
{isBusiness && (
74
-
<span className="flex items-center gap-1 bg-green-100 dark:bg-green-900/50 text-green-800 dark:text-green-200 text-xs px-2 py-1 rounded-full">
75
-
<Briefcase className="w-3 h-3" />
74
+
<span className="flex items-center gap-1 rounded-full bg-green-100 px-2 py-1 text-xs text-green-800 dark:bg-green-900/50 dark:text-green-200">
75
+
<Briefcase className="h-3 w-3" />
76
76
Business
77
77
</span>
78
78
)}
+4
-4
src/components/FOOTER.tsx
+4
-4
src/components/FOOTER.tsx
···
13
13
const currentYear = new Date().getFullYear().toString();
14
14
15
15
return (
16
-
<footer className="w-full flex justify-center">
16
+
<footer className="flex w-full justify-center">
17
17
{/* Constrain width and center content */}
18
18
<div
19
19
className="max-w-screen-md px-4"
···
32
32
}
33
33
>
34
34
{/* Social icons row */}
35
-
<div className="flex w-full items-center justify-center gap-1.5 pt-2 overflow-x-hidden">
35
+
<div className="flex w-full items-center justify-center gap-1.5 overflow-x-hidden pt-2">
36
36
{socialLinks.map(({ href, label, Icon }) => (
37
37
<Link
38
38
key={label}
···
40
40
target="_blank"
41
41
rel="noopener noreferrer"
42
42
aria-label={label}
43
-
className="transition-colors duration-200 hover:!text-[#56ba8e] inline-flex items-center justify-center"
43
+
className="inline-flex items-center justify-center transition-colors duration-200 hover:!text-[#56ba8e]"
44
44
style={{ color: textColor }}
45
45
>
46
46
<Icon size={16} />
···
54
54
style={{ color: textColor }}
55
55
>
56
56
<p
57
-
className="text-xs text-center leading-relaxed break-words"
57
+
className="text-center text-xs leading-relaxed break-words"
58
58
style={{ fontFamily: "var(--font-balgin)", color: textColor }}
59
59
>
60
60
©{currentYear} Jasper Mayone. Made with <3 in{" "}
+8
-4
src/components/ImageConfetti.jsx
+8
-4
src/components/ImageConfetti.jsx
···
17
17
18
18
const ctx = canvas.getContext("2d");
19
19
20
+
// Define animation frame reference for cleanup
21
+
let animationFrame = null;
22
+
20
23
// Load the image
21
24
const img = new Image();
22
25
img.src = imagePath;
···
40
43
}
41
44
42
45
// Animation loop
43
-
let animationFrame;
44
46
const animate = () => {
45
47
ctx.clearRect(0, 0, canvas.width, canvas.height);
46
48
···
48
50
ctx.save();
49
51
ctx.translate(
50
52
particle.x + particle.size / 2,
51
-
particle.y + particle.size / 2,
53
+
particle.y + particle.size / 2
52
54
);
53
55
ctx.rotate((particle.rotation * Math.PI) / 180);
54
56
ctx.drawImage(
···
56
58
-particle.size / 2,
57
59
-particle.size / 2,
58
60
particle.size,
59
-
particle.size,
61
+
particle.size
60
62
);
61
63
ctx.restore();
62
64
···
98
100
if (document.body.contains(canvas)) {
99
101
document.body.removeChild(canvas);
100
102
}
101
-
cancelAnimationFrame(animationFrame);
103
+
if (animationFrame !== null) {
104
+
cancelAnimationFrame(animationFrame);
105
+
}
102
106
};
103
107
}, [imagePath, duration]);
104
108
+3
-3
src/components/MENU.tsx
+3
-3
src/components/MENU.tsx
···
22
22
addBackground,
23
23
} = props;
24
24
return (
25
-
<div className="pb-1 w-full">
26
-
<div className="pt-3 w-full">
27
-
<div className="flex w-full justify-center items-center mb-4 text-center">
25
+
<div className="w-full pb-1">
26
+
<div className="w-full pt-3">
27
+
<div className="mb-4 flex w-full items-center justify-center text-center">
28
28
<div
29
29
style={
30
30
addBackground
+5
-5
src/components/PostList.tsx
+5
-5
src/components/PostList.tsx
···
64
64
return (
65
65
<div className="space-y-3">
66
66
<div className="flex items-center justify-center py-8">
67
-
<div className="animate-spin rounded-full h-6 w-6 border-b-2 border-gray-600"></div>
67
+
<div className="h-6 w-6 animate-spin rounded-full border-b-2 border-gray-600"></div>
68
68
<span
69
69
className="ml-3 text-gray-600"
70
70
style={{ fontFamily: "var(--font-balgin)" }}
···
87
87
>
88
88
Failed to load updates
89
89
</p>
90
-
<p className="text-sm mt-1">{error}</p>
90
+
<p className="mt-1 text-sm">{error}</p>
91
91
</div>
92
92
</div>
93
93
</div>
···
101
101
<div className="space-y-3">
102
102
{postsToShow.map((post, index) => (
103
103
<div key={index} className="flex items-start gap-3">
104
-
<div className="w-2 h-2 bg-gray-400 rounded-full mt-2 shrink-0"></div>
104
+
<div className="mt-2 h-2 w-2 shrink-0 rounded-full bg-gray-400"></div>
105
105
<div className="flex-1">
106
106
<p
107
107
className="text-gray-800"
···
109
109
>
110
110
{post.text}
111
111
</p>
112
-
<p className="text-xs text-gray-500 mt-1">
112
+
<p className="mt-1 text-xs text-gray-500">
113
113
{formatTimeAgo(post.createdAt)}
114
114
</p>
115
115
</div>
···
119
119
<div className="flex justify-center pt-4">
120
120
<button
121
121
onClick={() => setShowCount((prev) => prev + 5)}
122
-
className="px-4 py-2 text-sm text-gray-600 hover:text-gray-800 hover:bg-gray-100 rounded-md transition-colors"
122
+
className="rounded-md px-4 py-2 text-sm text-gray-600 transition-colors hover:bg-gray-100 hover:text-gray-800"
123
123
>
124
124
Show more
125
125
</button>
+8
-8
src/components/ProfileEmailCard.tsx
+8
-8
src/components/ProfileEmailCard.tsx
···
15
15
const [user, domain] = email.split("@");
16
16
17
17
return (
18
-
<div className="w-64 mt-2 p-3 border border-greeen rounded-lg hover:bg-blue-100 transition-all duration-300 bg-white/50">
19
-
<h3 className="text-gray-700 font-medium text-sm mb-2 text-center">
18
+
<div className="border-greeen mt-2 w-64 rounded-lg border bg-white/50 p-3 transition-all duration-300 hover:bg-blue-100">
19
+
<h3 className="mb-2 text-center text-sm font-medium text-gray-700">
20
20
Contact me
21
21
</h3>
22
-
<div className="text-sm text-gray-600 font-mono mb-2 text-center">
22
+
<div className="mb-2 text-center font-mono text-sm text-gray-600">
23
23
{user}[at]{domain}
24
24
</div>
25
25
<div className="flex gap-2">
26
26
<Link
27
27
rel="me"
28
28
href={`mailto:${email}`}
29
-
className="flex items-center justify-center gap-1 px-2 py-1 rounded-md bg-blue-50 text-blue-600 hover:bg-blue-50 transition-colors duration-200 text-xs flex-1"
29
+
className="flex flex-1 items-center justify-center gap-1 rounded-md bg-blue-50 px-2 py-1 text-xs text-blue-600 transition-colors duration-200 hover:bg-blue-50"
30
30
>
31
-
<Mail className="w-3 h-3" />
31
+
<Mail className="h-3 w-3" />
32
32
Email
33
33
</Link>
34
34
<button
35
35
onClick={copyToClipboard}
36
-
className="flex items-center justify-center space-x-2 px-3 py-2 rounded bg-gray-200 text-gray-600 hover:bg-gray-300 transition-colors duration-200 outline-1 outline-gray-300 text-sm w-full"
36
+
className="flex w-full items-center justify-center space-x-2 rounded bg-gray-200 px-3 py-2 text-sm text-gray-600 outline-1 outline-gray-300 transition-colors duration-200 hover:bg-gray-300"
37
37
data-umami-event="copy_email"
38
38
>
39
39
{copied ? (
40
40
<>
41
-
<Check className="w-3 h-3" />
41
+
<Check className="h-3 w-3" />
42
42
Copied
43
43
</>
44
44
) : (
45
45
<>
46
-
<Copy className="w-3 h-3" />
46
+
<Copy className="h-3 w-3" />
47
47
Copy
48
48
</>
49
49
)}
+1
-1
src/components/RoundedImage.tsx
+1
-1
src/components/RoundedImage.tsx
···
32
32
loading={isPriority ? undefined : loading} // Remove loading prop when priority is true
33
33
placeholder="blur"
34
34
priority={isPriority}
35
-
className="border-2 border-dotted border-stone-950 dark:border-stone-50 rounded-[10%]"
35
+
className="rounded-[10%] border-2 border-dotted border-stone-950 dark:border-stone-50"
36
36
style={{
37
37
maxWidth: "100%",
38
38
height: "auto",
+4
-4
src/components/SquigglyLine.tsx
+4
-4
src/components/SquigglyLine.tsx
···
46
46
47
47
// Create a smooth sine wave
48
48
const points = [];
49
-
const steps = screenWidth;
49
+
const _steps = screenWidth;
50
50
const waveLength = screenWidth / frequency;
51
51
52
52
for (let x = 0; x <= screenWidth; x++) {
53
53
const y = amplitude * Math.sin((2 * Math.PI * x) / waveLength);
54
-
// @ts-expect-error
54
+
// @ts-expect-error - TypeScript infers string[] but we know it's a valid point string
55
55
points.push(`${x},${y}`);
56
56
}
57
57
58
58
// Create the path with smooth curves
59
59
const path = points.reduce((acc, point, i) => {
60
60
if (i === 0) return `M ${point}`;
61
-
// @ts-expect-error
61
+
// @ts-expect-error - Array destructuring from split() returns string[], which is correct here
62
62
const [prevX, prevY] = points[i - 1].split(",");
63
-
// @ts-expect-error
63
+
// @ts-expect-error - Array destructuring from split() returns string[], which is correct here
64
64
const [x, y] = point.split(",");
65
65
66
66
// Calculate control points for smooth curve
+2
-2
src/components/WavyDivider.tsx
+2
-2
src/components/WavyDivider.tsx
+8
-8
src/components/email.tsx
+8
-8
src/components/email.tsx
···
64
64
};
65
65
66
66
return (
67
-
<div className="w-full max-w-6xl mx-auto px-4">
67
+
<div className="mx-auto w-full max-w-6xl px-4">
68
68
{/* h2 with custom .ul class */}
69
69
<h2 className={styles.lightUl}>Newsletter</h2>
70
-
<p className="text-gray-700 dark:text-white/70 text-sm mb-4">
70
+
<p className="mb-4 text-sm text-gray-700 dark:text-white/70">
71
71
Subscribe to my newsletter to get <i>occasioal</i> updates on what I'm
72
72
up to.
73
73
</p>
74
74
75
75
{!submitted ? (
76
76
<form onSubmit={onSubmit} className="w-full">
77
-
<div className="flex flex-col sm:flex-row gap-3 w-full">
77
+
<div className="flex w-full flex-col gap-3 sm:flex-row">
78
78
<Input
79
79
type="email"
80
80
placeholder="example@example.com"
81
-
className="flex-1 text-sm outline-none border-1 border-gray-300 focus:border-blue-400 focus:ring-blue-400"
81
+
className="flex-1 border-1 border-gray-300 text-sm outline-none focus:border-blue-400 focus:ring-blue-400"
82
82
value={email}
83
83
onChange={handleInputChange}
84
84
aria-label="email"
···
86
86
/>
87
87
<Button
88
88
type="submit"
89
-
className="text-sm whitespace-nowrap bg-blue-400"
89
+
className="bg-blue-400 text-sm whitespace-nowrap"
90
90
aria-label="submit"
91
91
disabled={isLoading}
92
92
data-umami-event="newsletter_submit"
···
97
97
</div>
98
98
99
99
{woahThere && (
100
-
<p className="text-purple-500 text-sm mt-2">
100
+
<p className="mt-2 text-sm text-purple-500">
101
101
Slow down cowboy! You're not Jasper!
102
102
</p>
103
103
)}
104
-
{error && <p className="text-red-500 text-sm mt-2">{error}</p>}
104
+
{error && <p className="mt-2 text-sm text-red-500">{error}</p>}
105
105
</form>
106
106
) : (
107
-
<p className="text-green-400 text-sm">
107
+
<p className="text-sm text-green-400">
108
108
Submitted! Be sure to look out for emails in the future!
109
109
</p>
110
110
)}
+35
-41
src/components/experience.tsx
+35
-41
src/components/experience.tsx
···
8
8
import { ExperienceItem } from "@/lib/types";
9
9
import styles from "@/styles/Misc.module.css";
10
10
11
+
const ExperienceColumn = ({ items }: { items: ExperienceItem[] }) => (
12
+
<div className="flex-1">
13
+
<Accordion type="single" collapsible>
14
+
{items.map((item, index) => (
15
+
<AccordionItem
16
+
key={item.company}
17
+
value={`item-${index}`}
18
+
className="mb-2 border-b-0 last:mb-0"
19
+
>
20
+
<AccordionTrigger className="rounded-lg px-2 py-2 text-sm hover:bg-blue-50 hover:no-underline data-[state=open]:bg-blue-50 dark:hover:bg-slate-600 dark:data-[state=open]:bg-slate-600">
21
+
<div className="text-left group-hover:bg-blue-50 dark:group-hover:bg-slate-700">
22
+
{item.company}
23
+
</div>
24
+
</AccordionTrigger>
25
+
<AccordionContent className="px-2 py-2">
26
+
<p className="text-sm text-gray-700 dark:text-stone-200">
27
+
{item.role}
28
+
</p>
29
+
<p className="mt-1 text-xs text-gray-500 dark:text-stone-400">
30
+
{item.location}
31
+
</p>
32
+
<p className="text-xs text-gray-500 italic dark:text-stone-400">
33
+
{item.date}
34
+
</p>
35
+
</AccordionContent>
36
+
</AccordionItem>
37
+
))}
38
+
</Accordion>
39
+
</div>
40
+
);
41
+
11
42
export default function Experience() {
12
43
const columnSize = Math.ceil(experience.length / 2);
13
44
const firstColumn = experience.slice(0, columnSize);
14
45
const secondColumn = experience.slice(columnSize, columnSize * 2);
15
46
16
-
const ExperienceColumn = ({
17
-
items,
18
-
columnId,
19
-
}: {
20
-
items: ExperienceItem[];
21
-
columnId: string;
22
-
}) => (
23
-
<div className="flex-1">
24
-
<Accordion type="single" collapsible>
25
-
{items.map((item, index) => (
26
-
<AccordionItem
27
-
key={item.company}
28
-
value={`item-${index}`}
29
-
className="mb-2 last:mb-0 border-b-0"
30
-
>
31
-
<AccordionTrigger className="py-2 rounded-lg px-2 text-sm hover:bg-blue-50 dark:hover:bg-slate-600 hover:no-underline data-[state=open]:bg-blue-50 dark:data-[state=open]:bg-slate-600">
32
-
<div className="text-left group-hover:bg-blue-50 dark:group-hover:bg-slate-700">
33
-
{item.company}
34
-
</div>
35
-
</AccordionTrigger>
36
-
<AccordionContent className="px-2 py-2">
37
-
<p className="text-gray-700 dark:text-stone-200 text-sm">
38
-
{item.role}
39
-
</p>
40
-
<p className="text-xs text-gray-500 dark:text-stone-400 mt-1">
41
-
{item.location}
42
-
</p>
43
-
<p className="text-xs text-gray-500 dark:text-stone-400 italic">
44
-
{item.date}
45
-
</p>
46
-
</AccordionContent>
47
-
</AccordionItem>
48
-
))}
49
-
</Accordion>
50
-
</div>
51
-
);
52
-
53
47
return (
54
-
<div className="w-full max-w-6xl mx-auto px-4 sm:px-6 lg:px-8">
48
+
<div className="mx-auto w-full max-w-6xl px-4 sm:px-6 lg:px-8">
55
49
<h2 className={styles.lightUl}>Experience</h2>
56
-
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
57
-
<ExperienceColumn items={firstColumn} columnId="first" />
58
-
<ExperienceColumn items={secondColumn} columnId="second" />
50
+
<div className="grid grid-cols-1 gap-4 md:grid-cols-2">
51
+
<ExperienceColumn items={firstColumn} />
52
+
<ExperienceColumn items={secondColumn} />
59
53
</div>
60
54
</div>
61
55
);
+3
-4
src/components/helpers/commitHash.tsx
+3
-4
src/components/helpers/commitHash.tsx
···
1
1
"use client";
2
2
3
3
import * as TooltipPrimitive from "@radix-ui/react-tooltip";
4
-
import { formatDistanceToNow, isWeekend } from "date-fns";
4
+
import { formatDistanceToNow } from "date-fns";
5
5
6
6
interface CommitHashProps {
7
7
color?: string;
···
9
9
10
10
export default function CommitHash({ color }: CommitHashProps) {
11
11
const commitDate = new Date(process.env.COMMIT_DATE!);
12
-
const isitweekend = isWeekend(commitDate);
13
12
const formattedCommitDate = formatDistanceToNow(commitDate, {
14
13
addSuffix: true,
15
14
});
···
24
23
<TooltipPrimitive.Root>
25
24
<TooltipPrimitive.Trigger asChild>
26
25
<a
27
-
className="decoration-wavy underline hover:text-blur transition-colors duration-300"
26
+
className="hover:text-blur underline decoration-wavy transition-colors duration-300"
28
27
style={{
29
28
color: linkColor,
30
29
textDecorationColor: linkColor,
···
36
35
</TooltipPrimitive.Trigger>
37
36
<TooltipPrimitive.Portal>
38
37
<TooltipPrimitive.Content
39
-
className="rounded-xl bg-white dark:bg-slate-800 p-3 font-mono text-sm text-slate-800 dark:text-slate-200 shadow-xl border border-slate-200 dark:border-slate-600 backdrop-blur-sm z-50"
38
+
className="z-50 rounded-xl border border-slate-200 bg-white p-3 font-mono text-sm text-slate-800 shadow-xl backdrop-blur-sm dark:border-slate-600 dark:bg-slate-800 dark:text-slate-200"
40
39
sideOffset={5}
41
40
>
42
41
{process.env.FULL_COMMIT_HASH}
+2
-2
src/components/theme-updater.tsx
+2
-2
src/components/theme-updater.tsx
···
25
25
26
26
// Update the apple-mobile-web-app-status-bar-style
27
27
const appleMetaTag = document.querySelector(
28
-
'meta[name="apple-mobile-web-app-status-bar-style"]',
28
+
'meta[name="apple-mobile-web-app-status-bar-style"]'
29
29
);
30
30
if (appleMetaTag) {
31
31
appleMetaTag.setAttribute(
32
32
"content",
33
-
resolvedTheme === "dark" ? "black-translucent" : "default",
33
+
resolvedTheme === "dark" ? "black-translucent" : "default"
34
34
);
35
35
}
36
36
}, [resolvedTheme]);
+4
-4
src/components/ui/accordion.tsx
+4
-4
src/components/ui/accordion.tsx
···
27
27
ref={ref}
28
28
className={cn(
29
29
"flex flex-1 items-center justify-between py-4 text-sm font-medium transition-all [&[data-state=open]>svg]:rotate-180",
30
-
className,
30
+
className
31
31
)}
32
32
{...props}
33
33
>
34
34
{children}
35
-
<CaretDownIcon className="h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200" />
35
+
<CaretDownIcon className="text-muted-foreground h-4 w-4 shrink-0 transition-transform duration-200" />
36
36
</AccordionPrimitive.Trigger>
37
37
</AccordionPrimitive.Header>
38
38
));
···
44
44
>(({ className, children, ...props }, ref) => (
45
45
<AccordionPrimitive.Content
46
46
ref={ref}
47
-
className="overflow-hidden text-sm data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down"
47
+
className="data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm"
48
48
{...props}
49
49
>
50
-
<div className={cn("pb-4 pt-0", className)}>{children}</div>
50
+
<div className={cn("pt-0 pb-4", className)}>{children}</div>
51
51
</AccordionPrimitive.Content>
52
52
));
53
53
AccordionContent.displayName = AccordionPrimitive.Content.displayName;
+9
-7
src/components/ui/card.tsx
+9
-7
src/components/ui/card.tsx
···
10
10
<div
11
11
ref={ref}
12
12
className={cn(
13
-
"rounded-lg border bg-card text-card-foreground shadow-sm",
14
-
className,
13
+
"bg-card text-card-foreground rounded-lg border shadow-sm",
14
+
className
15
15
)}
16
16
{...props}
17
17
/>
···
33
33
const CardTitle = React.forwardRef<
34
34
HTMLParagraphElement,
35
35
React.HTMLAttributes<HTMLHeadingElement>
36
-
>(({ className, ...props }, ref) => (
36
+
>(({ className, children, ...props }, ref) => (
37
37
<h3
38
38
ref={ref}
39
39
className={cn(
40
-
"text-2xl font-semibold leading-none tracking-tight",
41
-
className,
40
+
"text-2xl leading-none font-semibold tracking-tight",
41
+
className
42
42
)}
43
43
{...props}
44
-
/>
44
+
>
45
+
{children}
46
+
</h3>
45
47
));
46
48
CardTitle.displayName = "CardTitle";
47
49
···
51
53
>(({ className, ...props }, ref) => (
52
54
<p
53
55
ref={ref}
54
-
className={cn("text-sm text-muted-foreground", className)}
56
+
className={cn("text-muted-foreground text-sm", className)}
55
57
{...props}
56
58
/>
57
59
));
+4
-5
src/components/ui/input.tsx
+4
-5
src/components/ui/input.tsx
···
2
2
3
3
import { cn } from "../../lib/utils";
4
4
5
-
export interface InputProps
6
-
extends React.InputHTMLAttributes<HTMLInputElement> {}
5
+
export type InputProps = React.InputHTMLAttributes<HTMLInputElement>;
7
6
8
7
const Input = React.forwardRef<HTMLInputElement, InputProps>(
9
8
({ className, type, ...props }, ref) => {
···
11
10
<input
12
11
type={type}
13
12
className={cn(
14
-
"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50",
15
-
className,
13
+
"border-input placeholder:text-muted-foreground focus-visible:ring-ring flex h-9 w-full rounded-md border bg-transparent px-3 py-1 text-sm shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:ring-1 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50",
14
+
className
16
15
)}
17
16
ref={ref}
18
17
aria-label="input"
19
18
{...props}
20
19
/>
21
20
);
22
-
},
21
+
}
23
22
);
24
23
Input.displayName = "Input";
25
24
+2
-2
src/components/ui/tooltip.tsx
+2
-2
src/components/ui/tooltip.tsx
···
17
17
ref={ref}
18
18
sideOffset={sideOffset}
19
19
className={cn(
20
-
"z-50 overflow-hidden rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
21
-
className,
20
+
"bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 overflow-hidden rounded-md px-3 py-1.5 text-xs",
21
+
className
22
22
)}
23
23
{...props}
24
24
/>
+3
-3
src/lib/keysIndex.ts
+3
-3
src/lib/keysIndex.ts
···
10
10
title: string,
11
11
fingerprint: string,
12
12
key: string,
13
-
fileExtension: string = "pub",
13
+
fileExtension: string = "pub"
14
14
) {
15
15
this.title = title;
16
16
this.fingerprint = fingerprint;
···
25
25
"ssh",
26
26
"256 MD5:b7:e0:9e:44:c3:98:8d:64:3e:6b:da:5f:01:db:58:dc jsp@remus (ED25519)",
27
27
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHm7lo7umraewipgQu1Pifmoo/V8jYGDHjBTmt+7SOCe jsp@remus",
28
-
"pub",
28
+
"pub"
29
29
),
30
30
gpg: new Key(
31
31
"gpg",
···
255
255
ayb88UeQwysyCDxW1JAA
256
256
=gjq7
257
257
-----END PGP PUBLIC KEY BLOCK-----`,
258
-
"gpg",
258
+
"gpg"
259
259
),
260
260
});
261
261
+1
-1
src/lib/og-image.tsx
+1
-1
src/lib/og-image.tsx
+2
-2
src/lib/og-utils.ts
+2
-2
src/lib/og-utils.ts
···
97
97
// Helper function to generate OG image URL for any page
98
98
export const getOGImageUrl = (
99
99
path: string,
100
-
customData?: Partial<OGImageData>,
100
+
customData?: Partial<OGImageData>
101
101
) => {
102
102
const baseUrl = "/api/og";
103
103
const params = new URLSearchParams();
···
120
120
path: string,
121
121
title: string,
122
122
description: string,
123
-
customData?: Partial<OGImageData>,
123
+
customData?: Partial<OGImageData>
124
124
) => {
125
125
const ogImageUrl = getOGImageUrl(path, customData);
126
126
+17
-6
tsconfig.json
+17
-6
tsconfig.json
···
1
1
{
2
2
"compilerOptions": {
3
3
"target": "ES2017",
4
-
"lib": ["dom", "dom.iterable", "esnext"],
4
+
"lib": [
5
+
"dom",
6
+
"dom.iterable",
7
+
"esnext"
8
+
],
5
9
"allowJs": true,
6
10
"skipLibCheck": true,
7
11
"strict": true,
···
20
24
}
21
25
],
22
26
"paths": {
23
-
"@/*": ["./src/*"],
24
-
"@public/*": ["./public/*"]
25
-
}
27
+
"@/*": [
28
+
"./src/*"
29
+
],
30
+
"@public/*": [
31
+
"./public/*"
32
+
]
33
+
},
34
+
// "baseUrl": "src/"
26
35
},
27
36
"include": [
28
37
"next-env.d.ts",
···
31
40
".next/types/**/*.ts",
32
41
".next/dev/types/**/*.ts"
33
42
],
34
-
"exclude": ["node_modules"]
35
-
}
43
+
"exclude": [
44
+
"node_modules"
45
+
]
46
+
}