This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

feat: add url stats on semble page og image

+272 -235
+77 -173
package-lock.json
··· 1126 1126 "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.4.tgz", 1127 1127 "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", 1128 1128 "dev": true, 1129 + "peer": true, 1129 1130 "dependencies": { 1130 1131 "@babel/code-frame": "^7.27.1", 1131 1132 "@babel/generator": "^7.28.3", ··· 1783 1784 "url": "https://opencollective.com/csstools" 1784 1785 } 1785 1786 ], 1787 + "peer": true, 1786 1788 "engines": { 1787 1789 "node": ">=18" 1788 1790 }, ··· 1805 1807 "url": "https://opencollective.com/csstools" 1806 1808 } 1807 1809 ], 1810 + "peer": true, 1808 1811 "engines": { 1809 1812 "node": ">=18" 1810 1813 } ··· 3151 3154 "os": [ 3152 3155 "darwin" 3153 3156 ], 3154 - "peer": true, 3155 3157 "engines": { 3156 3158 "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 3157 3159 }, ··· 3175 3177 "os": [ 3176 3178 "darwin" 3177 3179 ], 3178 - "peer": true, 3179 3180 "engines": { 3180 3181 "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 3181 3182 }, ··· 3199 3200 "os": [ 3200 3201 "darwin" 3201 3202 ], 3202 - "peer": true, 3203 3203 "funding": { 3204 3204 "url": "https://opencollective.com/libvips" 3205 3205 } ··· 3217 3217 "os": [ 3218 3218 "darwin" 3219 3219 ], 3220 - "peer": true, 3221 3220 "funding": { 3222 3221 "url": "https://opencollective.com/libvips" 3223 3222 } ··· 3235 3234 "os": [ 3236 3235 "linux" 3237 3236 ], 3238 - "peer": true, 3239 3237 "funding": { 3240 3238 "url": "https://opencollective.com/libvips" 3241 3239 } ··· 3253 3251 "os": [ 3254 3252 "linux" 3255 3253 ], 3256 - "peer": true, 3257 3254 "funding": { 3258 3255 "url": "https://opencollective.com/libvips" 3259 3256 } ··· 3271 3268 "os": [ 3272 3269 "linux" 3273 3270 ], 3274 - "peer": true, 3275 3271 "funding": { 3276 3272 "url": "https://opencollective.com/libvips" 3277 3273 } ··· 3289 3285 "os": [ 3290 3286 "linux" 3291 3287 ], 3292 - "peer": true, 3293 3288 "funding": { 3294 3289 "url": "https://opencollective.com/libvips" 3295 3290 } ··· 3307 3302 "os": [ 3308 3303 "linux" 3309 3304 ], 3310 - "peer": true, 3311 3305 "funding": { 3312 3306 "url": "https://opencollective.com/libvips" 3313 3307 } ··· 3325 3319 "os": [ 3326 3320 "linux" 3327 3321 ], 3328 - "peer": true, 3329 3322 "funding": { 3330 3323 "url": "https://opencollective.com/libvips" 3331 3324 } ··· 3343 3336 "os": [ 3344 3337 "linux" 3345 3338 ], 3346 - "peer": true, 3347 3339 "funding": { 3348 3340 "url": "https://opencollective.com/libvips" 3349 3341 } ··· 3361 3353 "os": [ 3362 3354 "linux" 3363 3355 ], 3364 - "peer": true, 3365 3356 "funding": { 3366 3357 "url": "https://opencollective.com/libvips" 3367 3358 } ··· 3379 3370 "os": [ 3380 3371 "linux" 3381 3372 ], 3382 - "peer": true, 3383 3373 "engines": { 3384 3374 "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 3385 3375 }, ··· 3403 3393 "os": [ 3404 3394 "linux" 3405 3395 ], 3406 - "peer": true, 3407 3396 "engines": { 3408 3397 "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 3409 3398 }, ··· 3427 3416 "os": [ 3428 3417 "linux" 3429 3418 ], 3430 - "peer": true, 3431 3419 "engines": { 3432 3420 "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 3433 3421 }, ··· 3451 3439 "os": [ 3452 3440 "linux" 3453 3441 ], 3454 - "peer": true, 3455 3442 "engines": { 3456 3443 "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 3457 3444 }, ··· 3475 3462 "os": [ 3476 3463 "linux" 3477 3464 ], 3478 - "peer": true, 3479 3465 "engines": { 3480 3466 "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 3481 3467 }, ··· 3499 3485 "os": [ 3500 3486 "linux" 3501 3487 ], 3502 - "peer": true, 3503 3488 "engines": { 3504 3489 "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 3505 3490 }, ··· 3523 3508 "os": [ 3524 3509 "linux" 3525 3510 ], 3526 - "peer": true, 3527 3511 "engines": { 3528 3512 "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 3529 3513 }, ··· 3547 3531 "os": [ 3548 3532 "linux" 3549 3533 ], 3550 - "peer": true, 3551 3534 "engines": { 3552 3535 "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 3553 3536 }, ··· 3568 3551 "dev": true, 3569 3552 "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", 3570 3553 "optional": true, 3571 - "peer": true, 3572 3554 "dependencies": { 3573 3555 "@emnapi/runtime": "^1.7.0" 3574 3556 }, ··· 3592 3574 "os": [ 3593 3575 "win32" 3594 3576 ], 3595 - "peer": true, 3596 3577 "engines": { 3597 3578 "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 3598 3579 }, ··· 3613 3594 "os": [ 3614 3595 "win32" 3615 3596 ], 3616 - "peer": true, 3617 3597 "engines": { 3618 3598 "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 3619 3599 }, ··· 3634 3614 "os": [ 3635 3615 "win32" 3636 3616 ], 3637 - "peer": true, 3638 3617 "engines": { 3639 3618 "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 3640 3619 }, ··· 4733 4712 "version": "3.1.1", 4734 4713 "resolved": "https://registry.npmjs.org/@mdx-js/loader/-/loader-3.1.1.tgz", 4735 4714 "integrity": "sha512-0TTacJyZ9mDmY+VefuthVshaNIyCGZHJG2fMnGaDttCt8HmjUF7SizlHJpaCDoGnN635nK1wpzfpx/Xx5S4WnQ==", 4715 + "peer": true, 4736 4716 "dependencies": { 4737 4717 "@mdx-js/mdx": "^3.0.0", 4738 4718 "source-map": "^0.7.0" ··· 4790 4770 "version": "3.1.1", 4791 4771 "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.1.tgz", 4792 4772 "integrity": "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==", 4773 + "peer": true, 4793 4774 "dependencies": { 4794 4775 "@types/mdx": "^2.0.0" 4795 4776 }, ··· 4987 4968 "os": [ 4988 4969 "darwin" 4989 4970 ], 4990 - "peer": true, 4991 4971 "engines": { 4992 4972 "node": ">= 10" 4993 4973 } ··· 5005 4985 "os": [ 5006 4986 "darwin" 5007 4987 ], 5008 - "peer": true, 5009 4988 "engines": { 5010 4989 "node": ">= 10" 5011 4990 } ··· 5023 5002 "os": [ 5024 5003 "linux" 5025 5004 ], 5026 - "peer": true, 5027 5005 "engines": { 5028 5006 "node": ">= 10" 5029 5007 } ··· 5041 5019 "os": [ 5042 5020 "linux" 5043 5021 ], 5044 - "peer": true, 5045 5022 "engines": { 5046 5023 "node": ">= 10" 5047 5024 } ··· 5059 5036 "os": [ 5060 5037 "linux" 5061 5038 ], 5062 - "peer": true, 5063 5039 "engines": { 5064 5040 "node": ">= 10" 5065 5041 } ··· 5077 5053 "os": [ 5078 5054 "linux" 5079 5055 ], 5080 - "peer": true, 5081 5056 "engines": { 5082 5057 "node": ">= 10" 5083 5058 } ··· 5095 5070 "os": [ 5096 5071 "win32" 5097 5072 ], 5098 - "peer": true, 5099 5073 "engines": { 5100 5074 "node": ">= 10" 5101 5075 } ··· 5113 5087 "os": [ 5114 5088 "win32" 5115 5089 ], 5116 - "peer": true, 5117 5090 "engines": { 5118 5091 "node": ">= 10" 5119 5092 } ··· 5191 5164 "version": "1.9.0", 5192 5165 "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", 5193 5166 "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", 5167 + "peer": true, 5194 5168 "engines": { 5195 5169 "node": ">=8.0.0" 5196 5170 } ··· 5210 5184 "version": "2.6.0", 5211 5185 "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-2.6.0.tgz", 5212 5186 "integrity": "sha512-L8UyDwqpTcbkIK5cgwDRDYDoEhQoj8wp8BwsO19w3LB1Z41yEQm2VJyNfAi9DrLP/YTqXqWpKHyZfR9/tFYo1Q==", 5187 + "peer": true, 5213 5188 "engines": { 5214 5189 "node": "^18.19.0 || >=20.6.0" 5215 5190 }, ··· 5221 5196 "version": "2.2.0", 5222 5197 "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.2.0.tgz", 5223 5198 "integrity": "sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw==", 5199 + "peer": true, 5224 5200 "dependencies": { 5225 5201 "@opentelemetry/semantic-conventions": "^1.29.0" 5226 5202 }, ··· 5795 5771 "version": "2.2.0", 5796 5772 "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.2.0.tgz", 5797 5773 "integrity": "sha512-xWQgL0Bmctsalg6PaXExmzdedSp3gyKV8mQBwK/j9VGdCDu2fmXIb2gAehBKbkXCpJ4HPkgv3QfoJWRT4dHWbw==", 5774 + "peer": true, 5798 5775 "dependencies": { 5799 5776 "@opentelemetry/core": "2.2.0", 5800 5777 "@opentelemetry/resources": "2.2.0", ··· 5826 5803 "version": "1.39.0", 5827 5804 "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.39.0.tgz", 5828 5805 "integrity": "sha512-R5R9tb2AXs2IRLNKLBJDynhkfmx7mX0vi8NkhZb3gUkPWHn6HXk5J8iQ/dql0U3ApfWym4kXXmBDRGO+oeOfjg==", 5806 + "peer": true, 5829 5807 "engines": { 5830 5808 "node": ">=14" 5831 5809 } ··· 6000 5978 "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.9.3.tgz", 6001 5979 "integrity": "sha512-4KlM1Zr/jpsqWuMXr2zmGsaOUs1zMMFh9vfCNKRZkptf+uk8I3sugHbNdo+F5B+4e2yMuOEb1zgAmvJLeuH6ww==", 6002 5980 "dev": true, 5981 + "peer": true, 6003 5982 "dependencies": { 6004 5983 "@mischnic/json-sourcemap": "^0.1.0", 6005 5984 "@parcel/cache": "2.9.3", ··· 7926 7905 "os": [ 7927 7906 "android" 7928 7907 ], 7929 - "peer": true, 7930 7908 "engines": { 7931 7909 "node": ">= 10.0.0" 7932 7910 }, ··· 7947 7925 "os": [ 7948 7926 "darwin" 7949 7927 ], 7950 - "peer": true, 7951 7928 "engines": { 7952 7929 "node": ">= 10.0.0" 7953 7930 }, ··· 7968 7945 "os": [ 7969 7946 "darwin" 7970 7947 ], 7971 - "peer": true, 7972 7948 "engines": { 7973 7949 "node": ">= 10.0.0" 7974 7950 }, ··· 7989 7965 "os": [ 7990 7966 "freebsd" 7991 7967 ], 7992 - "peer": true, 7993 7968 "engines": { 7994 7969 "node": ">= 10.0.0" 7995 7970 }, ··· 8010 7985 "os": [ 8011 7986 "linux" 8012 7987 ], 8013 - "peer": true, 8014 7988 "engines": { 8015 7989 "node": ">= 10.0.0" 8016 7990 }, ··· 8031 8005 "os": [ 8032 8006 "linux" 8033 8007 ], 8034 - "peer": true, 8035 8008 "engines": { 8036 8009 "node": ">= 10.0.0" 8037 8010 }, ··· 8052 8025 "os": [ 8053 8026 "linux" 8054 8027 ], 8055 - "peer": true, 8056 8028 "engines": { 8057 8029 "node": ">= 10.0.0" 8058 8030 }, ··· 8073 8045 "os": [ 8074 8046 "linux" 8075 8047 ], 8076 - "peer": true, 8077 8048 "engines": { 8078 8049 "node": ">= 10.0.0" 8079 8050 }, ··· 8094 8065 "os": [ 8095 8066 "linux" 8096 8067 ], 8097 - "peer": true, 8098 8068 "engines": { 8099 8069 "node": ">= 10.0.0" 8100 8070 }, ··· 8115 8085 "os": [ 8116 8086 "linux" 8117 8087 ], 8118 - "peer": true, 8119 8088 "engines": { 8120 8089 "node": ">= 10.0.0" 8121 8090 }, ··· 8136 8105 "os": [ 8137 8106 "win32" 8138 8107 ], 8139 - "peer": true, 8140 8108 "engines": { 8141 8109 "node": ">= 10.0.0" 8142 8110 }, ··· 8157 8125 "os": [ 8158 8126 "win32" 8159 8127 ], 8160 - "peer": true, 8161 8128 "engines": { 8162 8129 "node": ">= 10.0.0" 8163 8130 }, ··· 8178 8145 "os": [ 8179 8146 "win32" 8180 8147 ], 8181 - "peer": true, 8182 8148 "engines": { 8183 8149 "node": ">= 10.0.0" 8184 8150 }, ··· 8849 8815 "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", 8850 8816 "dev": true, 8851 8817 "hasInstallScript": true, 8818 + "peer": true, 8852 8819 "bin": { 8853 8820 "esbuild": "bin/esbuild" 8854 8821 }, ··· 9015 8982 "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", 9016 8983 "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", 9017 8984 "dev": true, 8985 + "peer": true, 9018 8986 "bin": { 9019 8987 "tsc": "bin/tsc", 9020 8988 "tsserver": "bin/tsserver" ··· 10680 10648 "integrity": "sha512-dRBP2TnX6fGdS0T2mXBHjkS/3Nlu1ra1huovZVFuM67CYMzrhM/3hX/zru1vWSC5rqY93ZaAhjMciPW4pK5mMQ==", 10681 10649 "dev": true, 10682 10650 "license": "MIT", 10683 - "peer": true, 10684 10651 "dependencies": { 10685 10652 "@storybook/theming": "8.6.18", 10686 10653 "better-opn": "^3.0.2", ··· 10713 10680 "integrity": "sha512-n6OEjEtHupa2PdTwWzRepr7cO8NkDd4rgF6BKLitRbujOspLxzMBEqdphs+QLcuiCIgf33SqmEA64QWnbSMhPw==", 10714 10681 "dev": true, 10715 10682 "license": "MIT", 10716 - "peer": true, 10717 10683 "funding": { 10718 10684 "type": "opencollective", 10719 10685 "url": "https://opencollective.com/storybook" ··· 11049 11015 "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz", 11050 11016 "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==", 11051 11017 "dev": true, 11018 + "peer": true, 11052 11019 "dependencies": { 11053 11020 "@babel/core": "^7.19.6", 11054 11021 "@svgr/babel-preset": "^6.5.1", ··· 11291 11258 "os": [ 11292 11259 "darwin" 11293 11260 ], 11294 - "peer": true, 11295 11261 "engines": { 11296 11262 "node": ">=10" 11297 11263 } ··· 11308 11274 "os": [ 11309 11275 "darwin" 11310 11276 ], 11311 - "peer": true, 11312 11277 "engines": { 11313 11278 "node": ">=10" 11314 11279 } ··· 11325 11290 "os": [ 11326 11291 "linux" 11327 11292 ], 11328 - "peer": true, 11329 11293 "engines": { 11330 11294 "node": ">=10" 11331 11295 } ··· 11342 11306 "os": [ 11343 11307 "linux" 11344 11308 ], 11345 - "peer": true, 11346 11309 "engines": { 11347 11310 "node": ">=10" 11348 11311 } ··· 11359 11322 "os": [ 11360 11323 "linux" 11361 11324 ], 11362 - "peer": true, 11363 11325 "engines": { 11364 11326 "node": ">=10" 11365 11327 } ··· 11376 11338 "os": [ 11377 11339 "linux" 11378 11340 ], 11379 - "peer": true, 11380 11341 "engines": { 11381 11342 "node": ">=10" 11382 11343 } ··· 11393 11354 "os": [ 11394 11355 "linux" 11395 11356 ], 11396 - "peer": true, 11397 11357 "engines": { 11398 11358 "node": ">=10" 11399 11359 } ··· 11410 11370 "os": [ 11411 11371 "win32" 11412 11372 ], 11413 - "peer": true, 11414 11373 "engines": { 11415 11374 "node": ">=10" 11416 11375 } ··· 11427 11386 "os": [ 11428 11387 "win32" 11429 11388 ], 11430 - "peer": true, 11431 11389 "engines": { 11432 11390 "node": ">=10" 11433 11391 } ··· 11444 11402 "os": [ 11445 11403 "win32" 11446 11404 ], 11447 - "peer": true, 11448 11405 "engines": { 11449 11406 "node": ">=10" 11450 11407 } ··· 11531 11488 "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", 11532 11489 "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", 11533 11490 "dev": true, 11534 - "peer": true, 11535 11491 "dependencies": { 11536 11492 "@babel/code-frame": "^7.10.4", 11537 11493 "@babel/runtime": "^7.12.5", ··· 11551 11507 "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 11552 11508 "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 11553 11509 "dev": true, 11554 - "peer": true, 11555 11510 "engines": { 11556 11511 "node": ">=8" 11557 11512 } ··· 11561 11516 "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", 11562 11517 "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", 11563 11518 "dev": true, 11564 - "peer": true, 11565 11519 "engines": { 11566 11520 "node": ">=10" 11567 11521 }, ··· 11574 11528 "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", 11575 11529 "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", 11576 11530 "dev": true, 11577 - "peer": true, 11578 11531 "dependencies": { 11579 11532 "dequal": "^2.0.3" 11580 11533 } ··· 11584 11537 "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", 11585 11538 "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", 11586 11539 "dev": true, 11587 - "peer": true, 11588 11540 "dependencies": { 11589 11541 "ansi-regex": "^5.0.1", 11590 11542 "ansi-styles": "^5.0.0", ··· 11598 11550 "version": "17.0.2", 11599 11551 "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", 11600 11552 "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", 11601 - "dev": true, 11602 - "peer": true 11553 + "dev": true 11603 11554 }, 11604 11555 "node_modules/@testing-library/jest-dom": { 11605 11556 "version": "6.9.1", ··· 11669 11620 "version": "5.0.4", 11670 11621 "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", 11671 11622 "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", 11672 - "dev": true, 11673 - "peer": true 11623 + "dev": true 11674 11624 }, 11675 11625 "node_modules/@types/babel__core": { 11676 11626 "version": "7.20.5", ··· 11834 11784 "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.3.tgz", 11835 11785 "integrity": "sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw==", 11836 11786 "dev": true, 11787 + "peer": true, 11837 11788 "dependencies": { 11838 11789 "@types/body-parser": "*", 11839 11790 "@types/express-serve-static-core": "^5.0.0", ··· 12022 11973 "version": "20.19.23", 12023 11974 "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.23.tgz", 12024 11975 "integrity": "sha512-yIdlVVVHXpmqRhtyovZAcSy0MiPcYWGkoO4CGe/+jpP0hmNuihm4XhHbADpK++MsiLHP5MVlv+bcgdF99kSiFQ==", 11976 + "peer": true, 12025 11977 "dependencies": { 12026 11978 "undici-types": "~6.21.0" 12027 11979 } ··· 12067 12019 "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", 12068 12020 "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", 12069 12021 "license": "MIT", 12022 + "peer": true, 12070 12023 "dependencies": { 12071 12024 "csstype": "^3.2.2" 12072 12025 } ··· 12268 12221 "integrity": "sha512-gGkiNMPqerb2cJSVcruigx9eHBlLG14fSdPdqMoOcBfh+vvn4iCq2C8MzUB89PrxOXk0y3GZ1yIWb9aOzL93bw==", 12269 12222 "dev": true, 12270 12223 "license": "MIT", 12224 + "peer": true, 12271 12225 "dependencies": { 12272 12226 "@typescript-eslint/scope-manager": "8.58.1", 12273 12227 "@typescript-eslint/types": "8.58.1", ··· 12894 12848 "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz", 12895 12849 "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==", 12896 12850 "dev": true, 12851 + "peer": true, 12897 12852 "dependencies": { 12898 12853 "@vitest/utils": "3.2.4", 12899 12854 "pathe": "^2.0.3", ··· 13178 13133 "version": "8.15.0", 13179 13134 "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", 13180 13135 "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", 13136 + "peer": true, 13181 13137 "bin": { 13182 13138 "acorn": "bin/acorn" 13183 13139 }, ··· 13205 13161 "version": "1.7.1", 13206 13162 "resolved": "https://registry.npmjs.org/aframe/-/aframe-1.7.1.tgz", 13207 13163 "integrity": "sha512-dcc7PWI5z8pyJ0s2W0mUd8d83339frgMXhUvWr1yxkdgg6zSExkuQwsSJjiNn7XWKMUUqKYDvV/WzQQRA+OBXA==", 13208 - "peer": true, 13209 13164 "dependencies": { 13210 13165 "buffer": "^6.0.3", 13211 13166 "debug": "^4.3.4", ··· 13253 13208 "name": "super-three", 13254 13209 "version": "0.173.5", 13255 13210 "resolved": "https://registry.npmjs.org/super-three/-/super-three-0.173.5.tgz", 13256 - "integrity": "sha512-ecjojbhUg/5QrixwqF4s6gvtJap9XQz7TcnFUX/J8Yosgb2eE2ZUqsyqr/JczFG//6hwIaZPeAa9M5DNaM1dmQ==", 13257 - "peer": true 13211 + "integrity": "sha512-ecjojbhUg/5QrixwqF4s6gvtJap9XQz7TcnFUX/J8Yosgb2eE2ZUqsyqr/JczFG//6hwIaZPeAa9M5DNaM1dmQ==" 13258 13212 }, 13259 13213 "node_modules/agent-base": { 13260 13214 "version": "7.1.4", ··· 13285 13239 "node_modules/an-array": { 13286 13240 "version": "1.0.0", 13287 13241 "resolved": "https://registry.npmjs.org/an-array/-/an-array-1.0.0.tgz", 13288 - "integrity": "sha512-M175GYI7RmsYu24Ok383yZQa3eveDfNnmhTe3OQ3bm70bEovz2gWenH+ST/n32M8lrwLWk74hcPds5CDRPe2wg==", 13289 - "peer": true 13242 + "integrity": "sha512-M175GYI7RmsYu24Ok383yZQa3eveDfNnmhTe3OQ3bm70bEovz2gWenH+ST/n32M8lrwLWk74hcPds5CDRPe2wg==" 13290 13243 }, 13291 13244 "node_modules/ansi-escapes": { 13292 13245 "version": "4.3.2", ··· 13472 13425 "version": "1.0.1", 13473 13426 "resolved": "https://registry.npmjs.org/array-shuffle/-/array-shuffle-1.0.1.tgz", 13474 13427 "integrity": "sha512-PBqgo1Y2XWSksBzq3GFPEb798ZrW2snAcmr4drbVeF/6MT/5aBlkGJEvu5A/CzXHf4EjbHOj/ZowatjlIiVidA==", 13475 - "peer": true, 13476 13428 "engines": { 13477 13429 "node": ">=0.10.0" 13478 13430 } ··· 13603 13555 "node_modules/as-number": { 13604 13556 "version": "1.0.0", 13605 13557 "resolved": "https://registry.npmjs.org/as-number/-/as-number-1.0.0.tgz", 13606 - "integrity": "sha512-HkI/zLo2AbSRO4fqVkmyf3hms0bJDs3iboHqTrNuwTiCRvdYXM7HFhfhB6Dk51anV2LM/IMB83mtK9mHw4FlAg==", 13607 - "peer": true 13558 + "integrity": "sha512-HkI/zLo2AbSRO4fqVkmyf3hms0bJDs3iboHqTrNuwTiCRvdYXM7HFhfhB6Dk51anV2LM/IMB83mtK9mHw4FlAg==" 13608 13559 }, 13609 13560 "node_modules/asap": { 13610 13561 "version": "2.0.6", ··· 14265 14216 "version": "1.2.1", 14266 14217 "resolved": "https://registry.npmjs.org/browser-assert/-/browser-assert-1.2.1.tgz", 14267 14218 "integrity": "sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==", 14268 - "dev": true, 14269 - "peer": true 14219 + "dev": true 14270 14220 }, 14271 14221 "node_modules/browserslist": { 14272 14222 "version": "4.27.0", ··· 14287 14237 "url": "https://github.com/sponsors/ai" 14288 14238 } 14289 14239 ], 14240 + "peer": true, 14290 14241 "dependencies": { 14291 14242 "baseline-browser-mapping": "^2.8.19", 14292 14243 "caniuse-lite": "^1.0.30001751", ··· 14358 14309 "version": "0.0.1", 14359 14310 "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", 14360 14311 "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", 14361 - "peer": true, 14362 14312 "engines": { 14363 14313 "node": ">=0.4.0" 14364 14314 } ··· 14652 14602 "version": "2.7.0", 14653 14603 "resolved": "https://registry.npmjs.org/centra/-/centra-2.7.0.tgz", 14654 14604 "integrity": "sha512-PbFMgMSrmgx6uxCdm57RUos9Tc3fclMvhLSATYN39XsDV29B89zZ3KA89jmY0vwSGazyU+uerqwa6t+KaodPcg==", 14655 - "peer": true, 14656 14605 "dependencies": { 14657 14606 "follow-redirects": "^1.15.6" 14658 14607 } ··· 15096 15045 "version": "1.0.3", 15097 15046 "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", 15098 15047 "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", 15099 - "peer": true, 15100 15048 "dependencies": { 15101 15049 "mimic-response": "^1.0.0" 15102 15050 }, ··· 15108 15056 "version": "1.0.1", 15109 15057 "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 15110 15058 "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", 15111 - "peer": true, 15112 15059 "engines": { 15113 15060 "node": ">=4" 15114 15061 } ··· 15841 15788 "version": "3.0.0", 15842 15789 "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", 15843 15790 "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", 15791 + "peer": true, 15844 15792 "engines": { 15845 15793 "node": ">=12" 15846 15794 } ··· 16001 15949 "node_modules/dayjs": { 16002 15950 "version": "1.11.18", 16003 15951 "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.18.tgz", 16004 - "integrity": "sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==" 15952 + "integrity": "sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==", 15953 + "peer": true 16005 15954 }, 16006 15955 "node_modules/debug": { 16007 15956 "version": "4.4.3", ··· 16082 16031 "version": "2.0.0", 16083 16032 "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-2.0.0.tgz", 16084 16033 "integrity": "sha512-2QhG3Kxulu4XIF3WL5C5x0sc/S17JLgm1SfvDfIRsR/5m7ZGmcejII7fZ2RyWhN0UWIJm0TNM/eKow6LAn3evQ==", 16085 - "peer": true, 16086 16034 "dependencies": { 16087 16035 "is-obj": "^1.0.0" 16088 16036 }, ··· 16423 16371 "version": "0.5.16", 16424 16372 "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", 16425 16373 "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", 16426 - "dev": true, 16427 - "peer": true 16374 + "dev": true 16428 16375 }, 16429 16376 "node_modules/dom-helpers": { 16430 16377 "version": "5.2.1", ··· 16461 16408 "node_modules/dom-walk": { 16462 16409 "version": "0.1.2", 16463 16410 "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", 16464 - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", 16465 - "peer": true 16411 + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" 16466 16412 }, 16467 16413 "node_modules/domelementtype": { 16468 16414 "version": "2.3.0", ··· 16688 16634 "version": "2.0.0", 16689 16635 "resolved": "https://registry.npmjs.org/dtype/-/dtype-2.0.0.tgz", 16690 16636 "integrity": "sha512-s2YVcLKdFGS0hpFqJaTwscsyt0E8nNFdmo73Ocd81xNPj4URI4rj6D60A+vFMIw7BXWlb4yRkEwfBqcZzPGiZg==", 16691 - "peer": true, 16692 16637 "engines": { 16693 16638 "node": ">= 0.8.0" 16694 16639 } ··· 16709 16654 "node_modules/duplexer3": { 16710 16655 "version": "0.1.5", 16711 16656 "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", 16712 - "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", 16713 - "peer": true 16657 + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" 16714 16658 }, 16715 16659 "node_modules/eastasianwidth": { 16716 16660 "version": "0.2.0", ··· 16736 16680 "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", 16737 16681 "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", 16738 16682 "dev": true, 16683 + "peer": true, 16739 16684 "dependencies": { 16740 16685 "jake": "^10.8.5" 16741 16686 }, ··· 16824 16769 "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", 16825 16770 "dev": true, 16826 16771 "optional": true, 16827 - "peer": true, 16828 16772 "dependencies": { 16829 16773 "prr": "~1.0.1" 16830 16774 }, ··· 17049 16993 "integrity": "sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==", 17050 16994 "dev": true, 17051 16995 "hasInstallScript": true, 16996 + "peer": true, 17052 16997 "bin": { 17053 16998 "esbuild": "bin/esbuild" 17054 16999 }, ··· 17128 17073 "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==", 17129 17074 "dev": true, 17130 17075 "license": "MIT", 17076 + "peer": true, 17131 17077 "dependencies": { 17132 17078 "@eslint-community/eslint-utils": "^4.8.0", 17133 17079 "@eslint-community/regexpp": "^4.12.1", ··· 17227 17173 "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", 17228 17174 "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", 17229 17175 "dev": true, 17176 + "peer": true, 17230 17177 "bin": { 17231 17178 "eslint-config-prettier": "bin/cli.js" 17232 17179 }, ··· 17322 17269 "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", 17323 17270 "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", 17324 17271 "dev": true, 17272 + "peer": true, 17325 17273 "dependencies": { 17326 17274 "@rtsao/scc": "^1.1.0", 17327 17275 "array-includes": "^3.1.9", ··· 18364 18312 "url": "https://github.com/sponsors/RubenVerborgh" 18365 18313 } 18366 18314 ], 18367 - "peer": true, 18368 18315 "engines": { 18369 18316 "node": ">=4.0" 18370 18317 }, ··· 18754 18701 "version": "4.4.0", 18755 18702 "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", 18756 18703 "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", 18757 - "peer": true, 18758 18704 "dependencies": { 18759 18705 "min-document": "^2.19.0", 18760 18706 "process": "^0.11.10" ··· 18895 18841 "integrity": "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==", 18896 18842 "dev": true, 18897 18843 "license": "MIT", 18844 + "peer": true, 18898 18845 "dependencies": { 18899 18846 "minimist": "^1.2.5", 18900 18847 "neo-async": "^2.6.2", ··· 19367 19314 "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", 19368 19315 "dev": true, 19369 19316 "optional": true, 19370 - "peer": true, 19371 19317 "bin": { 19372 19318 "image-size": "bin/image-size.js" 19373 19319 }, ··· 19593 19539 "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", 19594 19540 "dev": true, 19595 19541 "license": "MIT", 19596 - "peer": true, 19597 19542 "dependencies": { 19598 19543 "call-bound": "^1.0.2", 19599 19544 "has-tostringtag": "^1.0.2" ··· 19693 19638 "node_modules/is-buffer": { 19694 19639 "version": "1.1.6", 19695 19640 "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 19696 - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", 19697 - "peer": true 19641 + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" 19698 19642 }, 19699 19643 "node_modules/is-bun-module": { 19700 19644 "version": "2.0.0", ··· 19825 19769 "node_modules/is-function": { 19826 19770 "version": "1.0.2", 19827 19771 "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", 19828 - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", 19829 - "peer": true 19772 + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" 19830 19773 }, 19831 19774 "node_modules/is-generator-fn": { 19832 19775 "version": "2.1.0", ··· 19936 19879 "version": "1.0.1", 19937 19880 "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", 19938 19881 "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", 19939 - "peer": true, 19940 19882 "engines": { 19941 19883 "node": ">=0.10.0" 19942 19884 } ··· 20308 20250 "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", 20309 20251 "dev": true, 20310 20252 "license": "MIT", 20253 + "peer": true, 20311 20254 "dependencies": { 20312 20255 "@jest/core": "^29.7.0", 20313 20256 "@jest/types": "^29.6.3", ··· 21017 20960 "integrity": "sha512-iZ8Bdb84lWRuGHamRXFyML07r21pcwBrLkHEuHgEY5UbCouBwv7ECknDRKzsQIXMiqpPymqtIf8TC/shYKB5rw==", 21018 20961 "dev": true, 21019 20962 "license": "MIT", 21020 - "peer": true, 21021 20963 "engines": { 21022 20964 "node": ">=12.0.0" 21023 20965 } ··· 21027 20969 "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz", 21028 20970 "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", 21029 20971 "dev": true, 20972 + "peer": true, 21030 20973 "dependencies": { 21031 20974 "cssstyle": "^4.2.1", 21032 20975 "data-urls": "^5.0.0", ··· 21260 21203 "version": "1.3.4", 21261 21204 "resolved": "https://registry.npmjs.org/layout-bmfont-text/-/layout-bmfont-text-1.3.4.tgz", 21262 21205 "integrity": "sha512-mceomHZ8W7pSKQhTdLvOe1Im4n37u8xa5Gr0J3KPCHRMO/9o7+goWIOzZcUUd+Xgzy3+22bvoIQ0OaN3LRtgaw==", 21263 - "peer": true, 21264 21206 "dependencies": { 21265 21207 "as-number": "^1.0.0", 21266 21208 "word-wrapper": "^1.0.7", ··· 21347 21289 "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", 21348 21290 "dev": true, 21349 21291 "optional": true, 21350 - "peer": true, 21351 21292 "dependencies": { 21352 21293 "pify": "^4.0.1", 21353 21294 "semver": "^5.6.0" ··· 21362 21303 "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 21363 21304 "dev": true, 21364 21305 "optional": true, 21365 - "peer": true, 21366 21306 "bin": { 21367 21307 "mime": "cli.js" 21368 21308 }, ··· 21376 21316 "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", 21377 21317 "dev": true, 21378 21318 "optional": true, 21379 - "peer": true, 21380 21319 "bin": { 21381 21320 "semver": "bin/semver" 21382 21321 } ··· 21387 21326 "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 21388 21327 "dev": true, 21389 21328 "optional": true, 21390 - "peer": true, 21391 21329 "engines": { 21392 21330 "node": ">=0.10.0" 21393 21331 } ··· 21455 21393 "os": [ 21456 21394 "android" 21457 21395 ], 21458 - "peer": true, 21459 21396 "engines": { 21460 21397 "node": ">= 12.0.0" 21461 21398 }, ··· 21476 21413 "os": [ 21477 21414 "darwin" 21478 21415 ], 21479 - "peer": true, 21480 21416 "engines": { 21481 21417 "node": ">= 12.0.0" 21482 21418 }, ··· 21497 21433 "os": [ 21498 21434 "darwin" 21499 21435 ], 21500 - "peer": true, 21501 21436 "engines": { 21502 21437 "node": ">= 12.0.0" 21503 21438 }, ··· 21518 21453 "os": [ 21519 21454 "freebsd" 21520 21455 ], 21521 - "peer": true, 21522 21456 "engines": { 21523 21457 "node": ">= 12.0.0" 21524 21458 }, ··· 21539 21473 "os": [ 21540 21474 "linux" 21541 21475 ], 21542 - "peer": true, 21543 21476 "engines": { 21544 21477 "node": ">= 12.0.0" 21545 21478 }, ··· 21560 21493 "os": [ 21561 21494 "linux" 21562 21495 ], 21563 - "peer": true, 21564 21496 "engines": { 21565 21497 "node": ">= 12.0.0" 21566 21498 }, ··· 21581 21513 "os": [ 21582 21514 "linux" 21583 21515 ], 21584 - "peer": true, 21585 21516 "engines": { 21586 21517 "node": ">= 12.0.0" 21587 21518 }, ··· 21602 21533 "os": [ 21603 21534 "linux" 21604 21535 ], 21605 - "peer": true, 21606 21536 "engines": { 21607 21537 "node": ">= 12.0.0" 21608 21538 }, ··· 21623 21553 "os": [ 21624 21554 "linux" 21625 21555 ], 21626 - "peer": true, 21627 21556 "engines": { 21628 21557 "node": ">= 12.0.0" 21629 21558 }, ··· 21644 21573 "os": [ 21645 21574 "win32" 21646 21575 ], 21647 - "peer": true, 21648 21576 "engines": { 21649 21577 "node": ">= 12.0.0" 21650 21578 }, ··· 21665 21593 "os": [ 21666 21594 "win32" 21667 21595 ], 21668 - "peer": true, 21669 21596 "engines": { 21670 21597 "node": ">= 12.0.0" 21671 21598 }, ··· 21747 21674 "version": "1.4.2", 21748 21675 "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.2.tgz", 21749 21676 "integrity": "sha512-qElWkmjW9Oq1F9EI5Gt7aD9zcdHb9spJCW1L/dmPf7KzCCEJxq8nhHz5eCgI9aMf7vrG/wyaCqdsI+Iy9ZTlog==", 21750 - "peer": true, 21751 21677 "dependencies": { 21752 21678 "buffer-equal": "0.0.1", 21753 21679 "mime": "^1.3.4", ··· 21763 21689 "version": "1.6.0", 21764 21690 "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 21765 21691 "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 21766 - "peer": true, 21767 21692 "bin": { 21768 21693 "mime": "cli.js" 21769 21694 }, ··· 21806 21731 "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", 21807 21732 "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", 21808 21733 "dev": true, 21809 - "license": "MIT" 21734 + "license": "MIT", 21735 + "peer": true 21810 21736 }, 21811 21737 "node_modules/lodash-es": { 21812 21738 "version": "4.17.23", ··· 21949 21875 "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", 21950 21876 "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", 21951 21877 "dev": true, 21952 - "peer": true, 21953 21878 "bin": { 21954 21879 "lz-string": "bin/bin.js" 21955 21880 } ··· 22008 21933 "version": "0.0.1", 22009 21934 "resolved": "https://registry.npmjs.org/map-limit/-/map-limit-0.0.1.tgz", 22010 21935 "integrity": "sha512-pJpcfLPnIF/Sk3taPW21G/RQsEEirGaFpCW3oXRwH9dnFHPHNGjNyvh++rdmC2fNqEaTw2MhYJraoJWAHx8kEg==", 22011 - "peer": true, 22012 21936 "dependencies": { 22013 21937 "once": "~1.3.0" 22014 21938 } ··· 22017 21941 "version": "1.3.3", 22018 21942 "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", 22019 21943 "integrity": "sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==", 22020 - "peer": true, 22021 21944 "dependencies": { 22022 21945 "wrappy": "1" 22023 21946 } ··· 22916 22839 "version": "2.19.2", 22917 22840 "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.2.tgz", 22918 22841 "integrity": "sha512-8S5I8db/uZN8r9HSLFVWPdJCvYOejMcEC82VIzNUc6Zkklf/d1gg2psfE79/vyhWOj4+J8MtwmoOz3TmvaGu5A==", 22919 - "peer": true, 22920 22842 "dependencies": { 22921 22843 "dom-walk": "^0.1.0" 22922 22844 } ··· 23134 23056 "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", 23135 23057 "dev": true, 23136 23058 "optional": true, 23137 - "peer": true, 23138 23059 "dependencies": { 23139 23060 "iconv-lite": "^0.6.3", 23140 23061 "sax": "^1.2.4" ··· 23163 23084 "node_modules/new-array": { 23164 23085 "version": "1.0.0", 23165 23086 "resolved": "https://registry.npmjs.org/new-array/-/new-array-1.0.0.tgz", 23166 - "integrity": "sha512-K5AyFYbuHZ4e/ti52y7k18q8UHsS78FlRd85w2Fmsd6AkuLipDihPflKC0p3PN5i8II7+uHxo+CtkLiJDfmS5A==", 23167 - "peer": true 23087 + "integrity": "sha512-K5AyFYbuHZ4e/ti52y7k18q8UHsS78FlRd85w2Fmsd6AkuLipDihPflKC0p3PN5i8II7+uHxo+CtkLiJDfmS5A==" 23168 23088 }, 23169 23089 "node_modules/next": { 23170 23090 "version": "15.5.14", ··· 23239 23159 "url": "https://github.com/sponsors/ai" 23240 23160 } 23241 23161 ], 23242 - "peer": true, 23243 23162 "dependencies": { 23244 23163 "nanoid": "^3.3.6", 23245 23164 "picocolors": "^1.0.0", ··· 23286 23205 "version": "3.0.0", 23287 23206 "resolved": "https://registry.npmjs.org/nice-color-palettes/-/nice-color-palettes-3.0.0.tgz", 23288 23207 "integrity": "sha512-lL4AjabAAFi313tjrtmgm/bxCRzp4l3vCshojfV/ij3IPdtnRqv6Chcw+SqJUhbe7g3o3BecaqCJYUNLswGBhQ==", 23289 - "peer": true, 23290 23208 "dependencies": { 23291 23209 "got": "^9.2.2", 23292 23210 "map-limit": "0.0.1", ··· 23301 23219 "version": "0.14.0", 23302 23220 "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", 23303 23221 "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", 23304 - "peer": true, 23305 23222 "engines": { 23306 23223 "node": ">=6" 23307 23224 } ··· 23310 23227 "version": "1.1.2", 23311 23228 "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", 23312 23229 "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", 23313 - "peer": true, 23314 23230 "dependencies": { 23315 23231 "defer-to-connect": "^1.0.1" 23316 23232 }, ··· 23322 23238 "version": "6.1.0", 23323 23239 "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", 23324 23240 "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", 23325 - "peer": true, 23326 23241 "dependencies": { 23327 23242 "clone-response": "^1.0.2", 23328 23243 "get-stream": "^5.1.0", ··· 23340 23255 "version": "5.2.0", 23341 23256 "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 23342 23257 "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 23343 - "peer": true, 23344 23258 "dependencies": { 23345 23259 "pump": "^3.0.0" 23346 23260 }, ··· 23355 23269 "version": "2.0.0", 23356 23270 "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", 23357 23271 "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", 23358 - "peer": true, 23359 23272 "engines": { 23360 23273 "node": ">=8" 23361 23274 } ··· 23364 23277 "version": "3.3.0", 23365 23278 "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", 23366 23279 "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", 23367 - "peer": true, 23368 23280 "dependencies": { 23369 23281 "mimic-response": "^1.0.0" 23370 23282 }, ··· 23375 23287 "node_modules/nice-color-palettes/node_modules/defer-to-connect": { 23376 23288 "version": "1.1.3", 23377 23289 "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", 23378 - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", 23379 - "peer": true 23290 + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" 23380 23291 }, 23381 23292 "node_modules/nice-color-palettes/node_modules/get-stream": { 23382 23293 "version": "4.1.0", 23383 23294 "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", 23384 23295 "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", 23385 - "peer": true, 23386 23296 "dependencies": { 23387 23297 "pump": "^3.0.0" 23388 23298 }, ··· 23394 23304 "version": "9.6.0", 23395 23305 "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", 23396 23306 "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", 23397 - "peer": true, 23398 23307 "dependencies": { 23399 23308 "@sindresorhus/is": "^0.14.0", 23400 23309 "@szmarczak/http-timer": "^1.1.2", ··· 23415 23324 "node_modules/nice-color-palettes/node_modules/json-buffer": { 23416 23325 "version": "3.0.0", 23417 23326 "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", 23418 - "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", 23419 - "peer": true 23327 + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" 23420 23328 }, 23421 23329 "node_modules/nice-color-palettes/node_modules/keyv": { 23422 23330 "version": "3.1.0", 23423 23331 "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", 23424 23332 "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", 23425 - "peer": true, 23426 23333 "dependencies": { 23427 23334 "json-buffer": "3.0.0" 23428 23335 } ··· 23431 23338 "version": "1.0.1", 23432 23339 "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", 23433 23340 "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", 23434 - "peer": true, 23435 23341 "engines": { 23436 23342 "node": ">=0.10.0" 23437 23343 } ··· 23440 23346 "version": "1.0.1", 23441 23347 "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 23442 23348 "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", 23443 - "peer": true, 23444 23349 "engines": { 23445 23350 "node": ">=4" 23446 23351 } ··· 23449 23354 "version": "4.5.1", 23450 23355 "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", 23451 23356 "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", 23452 - "peer": true, 23453 23357 "engines": { 23454 23358 "node": ">=8" 23455 23359 } ··· 23458 23362 "version": "1.1.0", 23459 23363 "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", 23460 23364 "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", 23461 - "peer": true, 23462 23365 "engines": { 23463 23366 "node": ">=6" 23464 23367 } ··· 23467 23370 "version": "1.0.2", 23468 23371 "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", 23469 23372 "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", 23470 - "peer": true, 23471 23373 "dependencies": { 23472 23374 "lowercase-keys": "^1.0.0" 23473 23375 } ··· 24133 24035 "node_modules/parse-bmfont-ascii": { 24134 24036 "version": "1.0.6", 24135 24037 "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", 24136 - "integrity": "sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==", 24137 - "peer": true 24038 + "integrity": "sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==" 24138 24039 }, 24139 24040 "node_modules/parse-bmfont-binary": { 24140 24041 "version": "1.0.6", 24141 24042 "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", 24142 - "integrity": "sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==", 24143 - "peer": true 24043 + "integrity": "sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==" 24144 24044 }, 24145 24045 "node_modules/parse-bmfont-xml": { 24146 24046 "version": "1.1.6", 24147 24047 "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.6.tgz", 24148 24048 "integrity": "sha512-0cEliVMZEhrFDwMh4SxIyVJpqYoOWDJ9P895tFuS+XuNzI5UBmBk5U5O4KuJdTnZpSBI4LFA2+ZiJaiwfSwlMA==", 24149 - "peer": true, 24150 24049 "dependencies": { 24151 24050 "xml-parse-from-string": "^1.0.0", 24152 24051 "xml2js": "^0.5.0" ··· 24178 24077 "node_modules/parse-headers": { 24179 24078 "version": "2.0.6", 24180 24079 "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.6.tgz", 24181 - "integrity": "sha512-Tz11t3uKztEW5FEVZnj1ox8GKblWn+PvHY9TmJV5Mll2uHEwRdR/5Li1OlXoECjLYkApdhWy44ocONwXLiKO5A==", 24182 - "peer": true 24080 + "integrity": "sha512-Tz11t3uKztEW5FEVZnj1ox8GKblWn+PvHY9TmJV5Mll2uHEwRdR/5Li1OlXoECjLYkApdhWy44ocONwXLiKO5A==" 24183 24081 }, 24184 24082 "node_modules/parse-json": { 24185 24083 "version": "5.2.0", ··· 24368 24266 "resolved": "https://registry.npmjs.org/pg/-/pg-8.16.3.tgz", 24369 24267 "integrity": "sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==", 24370 24268 "dev": true, 24269 + "peer": true, 24371 24270 "dependencies": { 24372 24271 "pg-connection-string": "^2.9.1", 24373 24272 "pg-pool": "^3.10.1", ··· 24454 24353 "resolved": "https://registry.npmjs.org/phin/-/phin-3.7.1.tgz", 24455 24354 "integrity": "sha512-GEazpTWwTZaEQ9RhL7Nyz0WwqilbqgLahDM3D0hxWwmVDI52nXEybHqiN6/elwpkJBhcuj+WbBu+QfT0uhPGfQ==", 24456 24355 "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", 24457 - "peer": true, 24458 24356 "dependencies": { 24459 24357 "centra": "^2.7.0" 24460 24358 }, ··· 24486 24384 "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", 24487 24385 "dev": true, 24488 24386 "optional": true, 24489 - "peer": true, 24490 24387 "engines": { 24491 24388 "node": ">=6" 24492 24389 } ··· 25251 25148 "url": "https://github.com/sponsors/ai" 25252 25149 } 25253 25150 ], 25151 + "peer": true, 25254 25152 "dependencies": { 25255 25153 "nanoid": "^3.3.11", 25256 25154 "picocolors": "^1.1.1", ··· 25425 25323 "version": "3.4.7", 25426 25324 "resolved": "https://registry.npmjs.org/postgres/-/postgres-3.4.7.tgz", 25427 25325 "integrity": "sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw==", 25326 + "peer": true, 25428 25327 "engines": { 25429 25328 "node": ">=12" 25430 25329 }, ··· 25473 25372 "resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.351.4.tgz", 25474 25373 "integrity": "sha512-vLSYHMN31FGs1cTJ/SCW0aCLiV6K6ZW63Q1K3B16iWRBVTwz/kg6sJZi6Z/oFeKOuy9I5K/LbVLDBCaTTlcESA==", 25475 25374 "dev": true, 25375 + "peer": true, 25476 25376 "dependencies": { 25477 25377 "@opentelemetry/api": "^1.9.0", 25478 25378 "@opentelemetry/api-logs": "^0.208.0", ··· 25566 25466 "version": "2.0.0", 25567 25467 "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", 25568 25468 "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", 25569 - "peer": true, 25570 25469 "engines": { 25571 25470 "node": ">=4" 25572 25471 } ··· 25576 25475 "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", 25577 25476 "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", 25578 25477 "dev": true, 25478 + "peer": true, 25579 25479 "bin": { 25580 25480 "prettier": "bin/prettier.cjs" 25581 25481 }, ··· 25768 25668 "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", 25769 25669 "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", 25770 25670 "dev": true, 25771 - "optional": true, 25772 - "peer": true 25671 + "optional": true 25773 25672 }, 25774 25673 "node_modules/pstree.remy": { 25775 25674 "version": "1.1.8", ··· 25829 25728 "version": "2.0.1", 25830 25729 "resolved": "https://registry.npmjs.org/quad-indices/-/quad-indices-2.0.1.tgz", 25831 25730 "integrity": "sha512-6jtmCsEbGAh5npThXrBaubbTjPcF0rMbn57XCJVI7LkW8PUT56V+uIrRCCWCn85PSgJC9v8Pm5tnJDwmOBewvA==", 25832 - "peer": true, 25833 25731 "dependencies": { 25834 25732 "an-array": "^1.0.0", 25835 25733 "dtype": "^2.0.0", ··· 25949 25847 "version": "19.1.0", 25950 25848 "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", 25951 25849 "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", 25850 + "peer": true, 25952 25851 "engines": { 25953 25852 "node": ">=0.10.0" 25954 25853 } ··· 25999 25898 "version": "19.1.0", 26000 25899 "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", 26001 25900 "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", 25901 + "peer": true, 26002 25902 "dependencies": { 26003 25903 "scheduler": "^0.26.0" 26004 25904 }, ··· 26703 26603 "integrity": "sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==", 26704 26604 "dev": true, 26705 26605 "license": "MIT", 26606 + "peer": true, 26706 26607 "dependencies": { 26707 26608 "@types/estree": "1.0.8" 26708 26609 }, ··· 26893 26794 "resolved": "https://registry.npmjs.org/sass/-/sass-1.93.2.tgz", 26894 26795 "integrity": "sha512-t+YPtOQHpGW1QWsh1CHQ5cPIr9lbbGZLZnbihP/D/qZj/yuV68m8qarcV17nvkOX81BCrvzAlq2klCQFZghyTg==", 26895 26796 "devOptional": true, 26797 + "peer": true, 26896 26798 "dependencies": { 26897 26799 "chokidar": "^4.0.0", 26898 26800 "immutable": "^5.0.2", ··· 27464 27366 "integrity": "sha512-6rME2tww6PFhm96iG2Xx44yzwLDWBiDWy+kJ2ub6x90werSTOiuo+tZJ94BgCfFutR0tEfLRIq59s+Zg6YyChA==", 27465 27367 "dev": true, 27466 27368 "license": "MIT", 27369 + "peer": true, 27467 27370 "dependencies": { 27468 27371 "@storybook/global": "^5.0.0", 27469 27372 "@testing-library/jest-dom": "^6.6.3", ··· 28007 27910 "node_modules/super-animejs": { 28008 27911 "version": "3.1.0", 28009 27912 "resolved": "https://registry.npmjs.org/super-animejs/-/super-animejs-3.1.0.tgz", 28010 - "integrity": "sha512-6MFAFJDRuvwkovxQZPruuyHinTa4rgj4hNLOndjcYYhZLckoXtVRY9rJPuq8p6c/tgZJrFYEAYAfJ2/hhNtUCA==", 28011 - "peer": true 27913 + "integrity": "sha512-6MFAFJDRuvwkovxQZPruuyHinTa4rgj4hNLOndjcYYhZLckoXtVRY9rJPuq8p6c/tgZJrFYEAYAfJ2/hhNtUCA==" 28012 27914 }, 28013 27915 "node_modules/superagent": { 28014 27916 "version": "10.2.3", ··· 28072 27974 "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.2.tgz", 28073 27975 "integrity": "sha512-My2tytF2e2NnHSpn2M7/3VdXT4JdTglYVUuSuK/mXL2XtulPYbeBfl8Dm1QiaKRn0zoULRnL+EtfZHHP0k4H3A==", 28074 27976 "devOptional": true, 27977 + "peer": true, 28075 27978 "dependencies": { 28076 27979 "@ampproject/remapping": "^2.2.1", 28077 27980 "@jridgewell/sourcemap-codec": "^1.4.15", ··· 28336 28239 "node_modules/three": { 28337 28240 "version": "0.183.2", 28338 28241 "resolved": "https://registry.npmjs.org/three/-/three-0.183.2.tgz", 28339 - "integrity": "sha512-di3BsL2FEQ1PA7Hcvn4fyJOlxRRgFYBpMTcyOgkwJIaDOdJMebEFPA+t98EvjuljDx4hNulAGwF6KIjtwI5jgQ==" 28242 + "integrity": "sha512-di3BsL2FEQ1PA7Hcvn4fyJOlxRRgFYBpMTcyOgkwJIaDOdJMebEFPA+t98EvjuljDx4hNulAGwF6KIjtwI5jgQ==", 28243 + "peer": true 28340 28244 }, 28341 28245 "node_modules/three-bmfont-text": { 28342 28246 "version": "3.0.0", 28343 28247 "resolved": "git+ssh://git@github.com/dmarcos/three-bmfont-text.git#eed4878795be9b3e38cf6aec6b903f56acd1f695", 28344 28248 "integrity": "sha512-JcaccaRCcK/A4c0igPQ9RCw91cil7pLhogDVmrThEvP20B/vbFaaNlmn3frF7pWeo3lATUiNrxVfgxm9qfr9GA==", 28345 - "peer": true, 28346 28249 "dependencies": { 28347 28250 "array-shuffle": "^1.0.1", 28348 28251 "layout-bmfont-text": "^1.2.0", ··· 28510 28413 "version": "1.0.0", 28511 28414 "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", 28512 28415 "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", 28513 - "peer": true, 28514 28416 "engines": { 28515 28417 "node": ">=6" 28516 28418 } ··· 29032 28934 "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", 29033 28935 "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", 29034 28936 "dev": true, 28937 + "peer": true, 29035 28938 "bin": { 29036 28939 "tsc": "bin/tsc", 29037 28940 "tsserver": "bin/tsserver" ··· 29368 29271 "version": "3.0.0", 29369 29272 "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", 29370 29273 "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", 29371 - "peer": true, 29372 29274 "dependencies": { 29373 29275 "prepend-http": "^2.0.0" 29374 29276 }, ··· 29425 29327 "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", 29426 29328 "dev": true, 29427 29329 "license": "MIT", 29428 - "peer": true, 29429 29330 "dependencies": { 29430 29331 "inherits": "^2.0.3", 29431 29332 "is-arguments": "^1.0.4", ··· 29527 29428 "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz", 29528 29429 "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", 29529 29430 "dev": true, 29431 + "peer": true, 29530 29432 "dependencies": { 29531 29433 "esbuild": "^0.25.0", 29532 29434 "fdir": "^6.4.4", ··· 29673 29575 "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz", 29674 29576 "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==", 29675 29577 "dev": true, 29578 + "peer": true, 29676 29579 "dependencies": { 29677 29580 "@types/chai": "^5.2.2", 29678 29581 "@vitest/expect": "3.2.4", ··· 29745 29648 "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz", 29746 29649 "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==", 29747 29650 "devOptional": true, 29651 + "peer": true, 29748 29652 "dependencies": { 29749 29653 "@vue/compiler-dom": "3.3.4", 29750 29654 "@vue/compiler-sfc": "3.3.4", ··· 29987 29891 "node_modules/word-wrapper": { 29988 29892 "version": "1.0.7", 29989 29893 "resolved": "https://registry.npmjs.org/word-wrapper/-/word-wrapper-1.0.7.tgz", 29990 - "integrity": "sha512-VOPBFCm9b6FyYKQYfn9AVn2dQvdR/YOVFV6IBRA1TBMJWKffvhEX1af6FMGrttILs2Q9ikCRhLqkbY2weW6dOQ==", 29991 - "peer": true 29894 + "integrity": "sha512-VOPBFCm9b6FyYKQYfn9AVn2dQvdR/YOVFV6IBRA1TBMJWKffvhEX1af6FMGrttILs2Q9ikCRhLqkbY2weW6dOQ==" 29992 29895 }, 29993 29896 "node_modules/wordwrap": { 29994 29897 "version": "1.0.0", ··· 30158 30061 "version": "2.6.0", 30159 30062 "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", 30160 30063 "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", 30161 - "peer": true, 30162 30064 "dependencies": { 30163 30065 "global": "~4.4.0", 30164 30066 "is-function": "^1.0.1", ··· 30178 30080 "node_modules/xml-parse-from-string": { 30179 30081 "version": "1.0.1", 30180 30082 "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", 30181 - "integrity": "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==", 30182 - "peer": true 30083 + "integrity": "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==" 30183 30084 }, 30184 30085 "node_modules/xml2js": { 30185 30086 "version": "0.5.0", 30186 30087 "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", 30187 30088 "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", 30188 - "peer": true, 30189 30089 "dependencies": { 30190 30090 "sax": ">=0.6.0", 30191 30091 "xmlbuilder": "~11.0.0" ··· 30198 30098 "version": "11.0.1", 30199 30099 "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", 30200 30100 "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", 30201 - "peer": true, 30202 30101 "engines": { 30203 30102 "node": ">=4.0" 30204 30103 } ··· 30370 30269 "version": "3.25.76", 30371 30270 "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", 30372 30271 "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", 30272 + "peer": true, 30373 30273 "funding": { 30374 30274 "url": "https://github.com/sponsors/colinhacks" 30375 30275 } ··· 30536 30436 "resolved": "https://registry.npmjs.org/@mantine/core/-/core-9.0.0.tgz", 30537 30437 "integrity": "sha512-GUUXlf+4uDpRu5iZ1PFy1NmgG7ttI+1I6VTw3v/b7N1jwOUhARwL1moGjPMjo3Eie3tHdVOCiVMYAvhlQ1GI5Q==", 30538 30438 "license": "MIT", 30439 + "peer": true, 30539 30440 "dependencies": { 30540 30441 "@floating-ui/react": "^0.27.19", 30541 30442 "clsx": "^2.1.1", ··· 30599 30500 "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-9.0.0.tgz", 30600 30501 "integrity": "sha512-TKcz+k0JH/jtblBfwOw/vXBX2EpJO66psJ5ZVmdDhwc6vbHDsvY6oYN8ynt9TfRn/eHZXsEmLPNj+wuGtWy4BA==", 30601 30502 "license": "MIT", 30503 + "peer": true, 30602 30504 "peerDependencies": { 30603 30505 "react": "^19.2.0" 30604 30506 } ··· 30860 30762 "resolved": "https://registry.npmjs.org/react/-/react-19.2.5.tgz", 30861 30763 "integrity": "sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==", 30862 30764 "license": "MIT", 30765 + "peer": true, 30863 30766 "engines": { 30864 30767 "node": ">=0.10.0" 30865 30768 } ··· 30869 30772 "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.5.tgz", 30870 30773 "integrity": "sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag==", 30871 30774 "license": "MIT", 30775 + "peer": true, 30872 30776 "dependencies": { 30873 30777 "scheduler": "^0.27.0" 30874 30778 },
+159 -33
src/webapp/app/api/opengraph/semble/route.tsx
··· 3 3 import { getUrlMetadata } from '@/features/cards/lib/dal'; 4 4 import { truncateText } from '@/lib/utils/text'; 5 5 import { getDomain, getUrlFromSlug } from '@/lib/utils/link'; 6 - import { getLibrariesForUrl } from '@/features/semble/lib/dal'; 7 6 8 7 export const runtime = 'edge'; 9 8 ··· 13 12 domain?: string; 14 13 imageUrl?: string; 15 14 libraries?: number; 15 + collections?: number; 16 + connections?: number; 17 + notes?: number; 16 18 } 17 19 18 20 export async function GET(request: NextRequest) { ··· 22 24 let metadata: Metadata = {}; 23 25 if (url) { 24 26 try { 25 - const result = await getUrlMetadata({ url: getUrlFromSlug([url]) }); 26 - const libraries = await getLibrariesForUrl(getUrlFromSlug([url])); 27 + const result = await getUrlMetadata({ 28 + url: getUrlFromSlug([url]), 29 + includeStats: true, 30 + }); 31 + 32 + const stats = result?.stats; 27 33 28 34 metadata = { 29 35 ...(result?.metadata || {}), 30 36 domain: getDomain(url), 31 - libraries: Number(libraries.pagination.totalCount) || 0, 37 + libraries: stats?.libraryCount ?? 0, 38 + collections: stats?.collectionCount ?? 0, 39 + connections: stats?.connections?.all?.total ?? 0, 40 + notes: stats?.noteCount ?? 0, 32 41 }; 33 42 } catch (error) { 34 43 console.error('Error fetching metadata:', error); 35 44 metadata = {}; 36 45 } 37 46 } 47 + 48 + const hasStats = 49 + metadata.libraries !== undefined || 50 + metadata.collections !== undefined || 51 + metadata.connections !== undefined || 52 + metadata.notes !== undefined; 38 53 39 54 const imageResponse = await OpenGraphCard({ 40 55 children: ( ··· 85 100 {metadata.title || metadata.url || metadata.domain || 'Unknown'} 86 101 </p> 87 102 88 - {/* libraries */} 89 - {metadata.libraries !== 0 && ( 103 + {/* stats row */} 104 + {hasStats && ( 90 105 <div 91 106 style={{ 92 107 display: 'flex', 93 - flexDirection: 'column', 94 - gap: 10, 108 + flexDirection: 'row', 109 + gap: 40, 95 110 marginTop: 40, 111 + flexWrap: 'wrap', 96 112 }} 97 113 > 98 - <svg 99 - viewBox="0 0 24 24" 100 - width="45" 101 - height="45" 102 - stroke="#868e96" 103 - strokeWidth={2} 104 - strokeLinecap="round" 105 - strokeLinejoin="round" 106 - fill="none" 107 - xmlns="http://www.w3.org/2000/svg" 114 + {/* libraries */} 115 + <div 116 + style={{ 117 + display: 'flex', 118 + flexDirection: 'row', 119 + alignItems: 'center', 120 + gap: 8, 121 + }} 108 122 > 109 - <path d="m16 6 4 14" /> 110 - <path d="M12 6v14" /> 111 - <path d="M8 8v12" /> 112 - <path d="M4 4v16" /> 113 - </svg> 123 + {/* LuLibrary icon */} 124 + <svg 125 + viewBox="0 0 24 24" 126 + width="36" 127 + height="36" 128 + stroke="#15aabf" 129 + strokeWidth={2} 130 + strokeLinecap="round" 131 + strokeLinejoin="round" 132 + fill="none" 133 + xmlns="http://www.w3.org/2000/svg" 134 + > 135 + <path d="m16 6 4 14" /> 136 + <path d="M12 6v14" /> 137 + <path d="M8 8v12" /> 138 + <path d="M4 4v16" /> 139 + </svg> 140 + <p 141 + style={{ 142 + fontSize: 28, 143 + lineHeight: 1, 144 + color: '#495057', 145 + margin: 0, 146 + }} 147 + > 148 + {metadata.libraries}{' '} 149 + {metadata.libraries === 1 ? 'save' : 'saves'} 150 + </p> 151 + </div> 114 152 115 - <p 153 + {/* collections */} 154 + <div 116 155 style={{ 117 - fontSize: 30, 118 - lineHeight: 1, 119 - color: '#495057', 120 - margin: 0, 156 + display: 'flex', 157 + flexDirection: 'row', 158 + alignItems: 'center', 159 + gap: 8, 121 160 }} 122 161 > 123 - In {metadata.libraries}{' '} 124 - {metadata.libraries && metadata.libraries > 1 125 - ? 'libraries' 126 - : 'library'} 127 - </p> 162 + {/* BiCollection icon */} 163 + <svg 164 + viewBox="0 0 24 24" 165 + width="36" 166 + height="36" 167 + fill="#15aabf" 168 + xmlns="http://www.w3.org/2000/svg" 169 + > 170 + <path d="M19 10H5c-1.103 0-2 .897-2 2v8c0 1.103.897 2 2 2h14c1.103 0 2-.897 2-2v-8c0-1.103-.897-2-2-2zM5 20v-8h14l.002 8H5zM5 6h14v2H5zm2-4h10v2H7z" /> 171 + </svg> 172 + <p 173 + style={{ 174 + fontSize: 28, 175 + lineHeight: 1, 176 + color: '#495057', 177 + margin: 0, 178 + }} 179 + > 180 + {metadata.collections}{' '} 181 + {metadata.collections === 1 182 + ? 'collection' 183 + : 'collections'} 184 + </p> 185 + </div> 186 + 187 + {/* connections */} 188 + <div 189 + style={{ 190 + display: 'flex', 191 + flexDirection: 'row', 192 + alignItems: 'center', 193 + gap: 8, 194 + }} 195 + > 196 + {/* BiLink icon */} 197 + <svg 198 + viewBox="0 0 24 24" 199 + width="36" 200 + height="36" 201 + fill="#15aabf" 202 + xmlns="http://www.w3.org/2000/svg" 203 + > 204 + <path d="M8.465 11.293c1.133-1.133 3.109-1.133 4.242 0l.707.707 1.414-1.414-.707-.707c-.943-.944-2.199-1.465-3.535-1.465s-2.592.521-3.535 1.465L4.929 12a5.008 5.008 0 0 0 0 7.071 4.983 4.983 0 0 0 3.535 1.462A4.982 4.982 0 0 0 12 19.071l.707-.707-1.414-1.414-.707.707a3.007 3.007 0 0 1-4.243 0 3.005 3.005 0 0 1 0-4.243l2.122-2.121z" /> 205 + <path d="m12 4.929-.707.707 1.414 1.414.707-.707a3.007 3.007 0 0 1 4.243 0 3.005 3.005 0 0 1 0 4.243l-2.122 2.121c-1.133 1.133-3.109 1.133-4.242 0L10.586 12l-1.414 1.414.707.707c.943.944 2.199 1.465 3.535 1.465s2.592-.521 3.535-1.465L19.071 12a5.008 5.008 0 0 0 0-7.071 5.006 5.006 0 0 0-7.071 0z" /> 206 + </svg> 207 + <p 208 + style={{ 209 + fontSize: 28, 210 + lineHeight: 1, 211 + color: '#495057', 212 + margin: 0, 213 + }} 214 + > 215 + {metadata.connections}{' '} 216 + {metadata.connections === 1 217 + ? 'connection' 218 + : 'connections'} 219 + </p> 220 + </div> 221 + 222 + {/* notes */} 223 + <div 224 + style={{ 225 + display: 'flex', 226 + flexDirection: 'row', 227 + alignItems: 'center', 228 + gap: 8, 229 + }} 230 + > 231 + {/* MdOutlineStickyNote2 icon */} 232 + <svg 233 + viewBox="0 0 24 24" 234 + width="36" 235 + height="36" 236 + fill="#15aabf" 237 + xmlns="http://www.w3.org/2000/svg" 238 + > 239 + <path fill="none" d="M0 0h24v24H0z" /> 240 + <path d="M19 5v9h-5v5H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h10l6-6V5c0-1.1-.9-2-2-2zm-7 11H7v-2h5v2zm5-4H7V8h10v2z" /> 241 + </svg> 242 + <p 243 + style={{ 244 + fontSize: 28, 245 + lineHeight: 1, 246 + color: '#495057', 247 + margin: 0, 248 + }} 249 + > 250 + {metadata.notes ?? 0}{' '} 251 + {metadata.notes === 1 ? 'note' : 'notes'} 252 + </p> 253 + </div> 128 254 </div> 129 255 )} 130 256 </div>
+27 -27
src/webapp/features/openGraph/components/openGraphCard/OpenGraphCard.tsx
··· 30 30 fontFamily: 'Hanken Grotesk', 31 31 }} 32 32 > 33 - <svg 34 - width="70" 35 - height="97.5" 36 - viewBox="0 0 32 43" 37 - fill="none" 38 - xmlns="http://www.w3.org/2000/svg" 39 - > 40 - <path 41 - d="M31.0164 33.1306C31.0164 38.581 25.7882 42.9994 15.8607 42.9994C5.93311 42.9994 0 37.5236 0 32.0732C0 26.6228 5.93311 23.2617 15.8607 23.2617C25.7882 23.2617 31.0164 27.6802 31.0164 33.1306Z" 42 - fill="#FF6400" 43 - /> 44 - <path 45 - d="M25.7295 19.3862C25.7295 22.5007 20.7964 22.2058 15.1558 22.2058C9.51511 22.2058 4.93445 22.1482 4.93445 19.0337C4.93445 15.9192 9.71537 12.6895 15.356 12.6895C20.9967 12.6895 25.7295 16.2717 25.7295 19.3862Z" 46 - fill="#FF6400" 47 - /> 48 - <path 49 - d="M25.0246 10.9256C25.0246 14.0401 20.7964 11.9829 15.1557 11.9829C9.51506 11.9829 6.34424 13.6876 6.34424 10.5731C6.34424 7.45857 9.51506 5.63867 15.1557 5.63867C20.7964 5.63867 25.0246 7.81103 25.0246 10.9256Z" 50 - fill="#FF6400" 51 - /> 52 - <path 53 - d="M20.4426 3.5755C20.4426 5.8323 18.2088 4.22951 15.2288 4.22951C12.2489 4.22951 10.5737 5.8323 10.5737 3.5755C10.5737 1.31871 12.2489 0 15.2288 0C18.2088 0 20.4426 1.31871 20.4426 3.5755Z" 54 - fill="#FF6400" 55 - /> 56 - </svg> 57 - 58 33 <div 59 34 style={{ 60 35 display: 'flex', 61 - alignItems: 'flex-end', 36 + alignItems: 'flex-start', 62 37 justifyContent: 'space-between', 63 38 width: '100%', 64 39 }} 65 40 > 66 - {props.children} 41 + <svg 42 + width="70" 43 + height="97.5" 44 + viewBox="0 0 32 43" 45 + fill="none" 46 + xmlns="http://www.w3.org/2000/svg" 47 + > 48 + <path 49 + d="M31.0164 33.1306C31.0164 38.581 25.7882 42.9994 15.8607 42.9994C5.93311 42.9994 0 37.5236 0 32.0732C0 26.6228 5.93311 23.2617 15.8607 23.2617C25.7882 23.2617 31.0164 27.6802 31.0164 33.1306Z" 50 + fill="#FF6400" 51 + /> 52 + <path 53 + d="M25.7295 19.3862C25.7295 22.5007 20.7964 22.2058 15.1558 22.2058C9.51511 22.2058 4.93445 22.1482 4.93445 19.0337C4.93445 15.9192 9.71537 12.6895 15.356 12.6895C20.9967 12.6895 25.7295 16.2717 25.7295 19.3862Z" 54 + fill="#FF6400" 55 + /> 56 + <path 57 + d="M25.0246 10.9256C25.0246 14.0401 20.7964 11.9829 15.1557 11.9829C9.51506 11.9829 6.34424 13.6876 6.34424 10.5731C6.34424 7.45857 9.51506 5.63867 15.1557 5.63867C20.7964 5.63867 25.0246 7.81103 25.0246 10.9256Z" 58 + fill="#FF6400" 59 + /> 60 + <path 61 + d="M20.4426 3.5755C20.4426 5.8323 18.2088 4.22951 15.2288 4.22951C12.2489 4.22951 10.5737 5.8323 10.5737 3.5755C10.5737 1.31871 12.2489 0 15.2288 0C18.2088 0 20.4426 1.31871 20.4426 3.5755Z" 62 + fill="#FF6400" 63 + /> 64 + </svg> 67 65 <p 68 66 style={{ 69 67 fontSize: '40px', ··· 74 72 semble.so 75 73 </p> 76 74 </div> 75 + 76 + {props.children} 77 77 </div> 78 78 ), 79 79 {
+9 -2
src/webapp/features/openGraph/lib/utils/index.ts
··· 1 1 export const loadGoogleFont = async (font = 'Hanken Grotesk') => { 2 2 const url = `https://fonts.googleapis.com/css2?family=${encodeURIComponent(font)}:wght@700`; 3 - const css = await (await fetch(url)).text(); 3 + const css = await ( 4 + await fetch(url, { 5 + headers: { 6 + 'User-Agent': 7 + 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; de-at) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1', 8 + }, 9 + }) 10 + ).text(); 4 11 const resource = css.match( 5 - /src: url\((.+)\) format\('(opentype|truetype)'\)/, 12 + /src: url\((.+)\) format\('(opentype|truetype|woff2)'\)/, 6 13 ); 7 14 8 15 if (resource) {