diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1e0d23471..7bcf42dea 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -23,7 +23,7 @@ dependencies: version: 2.8.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.0)(framer-motion@10.16.4)(react-dom@18.2.0)(react@18.2.0) '@chakra-ui/theme-tools': specifier: 2.1.2 - version: 2.1.2(@chakra-ui/styled-system@2.9.2) + version: 2.1.2(@chakra-ui/styled-system@2.12.0) '@contentful/rich-text-react-renderer': specifier: 15.21.2 version: 15.21.2(react-dom@18.2.0)(react@18.2.0) @@ -80,7 +80,7 @@ dependencies: version: 1.9.7(react-redux@8.1.2)(react@18.2.0) '@sentry/nextjs': specifier: 8.26.0 - version: 8.26.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1)(@opentelemetry/instrumentation@0.52.1)(@opentelemetry/sdk-trace-base@1.25.1)(next@14.1.4)(react@18.2.0)(webpack@5.94.0) + version: 8.26.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.27.0)(@opentelemetry/instrumentation@0.52.1)(@opentelemetry/sdk-trace-base@1.27.0)(next@14.1.4)(react@18.2.0)(webpack@5.95.0) '@stacks/auth': specifier: 6.15.0 version: 6.15.0 @@ -176,7 +176,7 @@ dependencies: version: 3.0.1(onigasm@2.2.5) monaco-vscode-textmate-theme-converter: specifier: 0.1.7 - version: 0.1.7(tslib@2.6.2) + version: 0.1.7(tslib@2.8.0) monacode: specifier: 0.3.1 version: 0.3.1 @@ -185,7 +185,7 @@ dependencies: version: 1.10.0 next: specifier: 14.1.4 - version: 14.1.4(@babel/core@7.25.7)(@opentelemetry/api@1.9.0)(react-dom@18.2.0)(react@18.2.0) + version: 14.1.4(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@18.2.0)(react@18.2.0) nookies: specifier: 2.5.2 version: 2.5.2 @@ -197,7 +197,7 @@ dependencies: version: 8.0.0 preact-render-to-string: specifier: 5.1.19 - version: 5.1.19(preact@10.19.3) + version: 5.1.19(preact@10.24.3) prismjs: specifier: 1.29.0 version: 1.29.0 @@ -212,7 +212,7 @@ dependencies: version: 6.1.0(react@18.2.0) react-countup: specifier: 6.4.2 - version: 6.4.2(@babel/core@7.25.7)(react@18.2.0) + version: 6.4.2(@babel/core@7.26.0)(react@18.2.0) react-csv: specifier: 2.2.2 version: 2.2.2 @@ -242,7 +242,7 @@ dependencies: version: 0.13.1(react-dom@18.2.0)(react@18.2.0) react-ssr-prepass: specifier: npm:preact-ssr-prepass - version: /preact-ssr-prepass@1.2.1(preact@10.19.3) + version: /preact-ssr-prepass@1.2.1(preact@10.24.3) recharts: specifier: 2.12.7 version: 2.12.7(react-dom@18.2.0)(react@18.2.0) @@ -289,7 +289,7 @@ devDependencies: version: 1.40.0 '@stacks/eslint-config': specifier: 2.0.0 - version: 2.0.0(eslint-plugin-import@2.29.0)(eslint-plugin-prettier@5.0.1)(eslint-plugin-unused-imports@3.0.0)(eslint@8.54.0)(typescript@5.3.2) + version: 2.0.0(eslint-plugin-import@2.29.0)(eslint-plugin-prettier@5.0.1)(eslint-plugin-unused-imports@4.1.4)(eslint@8.54.0)(typescript@5.3.2) '@stacks/prettier-config': specifier: 0.0.10 version: 0.0.10 @@ -316,7 +316,7 @@ devDependencies: version: 8.3.5(react-dom@18.2.0)(react@18.2.0)(storybook@8.3.5) '@storybook/nextjs': specifier: 8.3.5 - version: 8.3.5(esbuild@0.23.1)(next@14.1.4)(react-dom@18.2.0)(react@18.2.0)(storybook@8.3.5)(typescript@5.3.2)(webpack@5.94.0) + version: 8.3.5(esbuild@0.23.1)(next@14.1.4)(react-dom@18.2.0)(react@18.2.0)(storybook@8.3.5)(typescript@5.3.2)(webpack@5.95.0) '@storybook/react': specifier: 8.3.5 version: 8.3.5(@storybook/test@8.3.5)(react-dom@18.2.0)(react@18.2.0)(storybook@8.3.5)(typescript@5.3.2) @@ -450,6 +450,13 @@ packages: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.20 + /@ampproject/remapping@2.3.0: + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + /@babel/code-frame@7.23.4: resolution: {integrity: sha512-r1IONyb6Ia+jYR2vvIDhdWdlTGhqbBoFqLTQidzZ4kepUFH15ejXvFHxCVbtl7BOXIudsIubf4E81xeA3h3IXA==} engines: {node: '>=6.9.0'} @@ -470,6 +477,15 @@ packages: dependencies: '@babel/highlight': 7.25.7 picocolors: 1.0.0 + dev: true + + /@babel/code-frame@7.26.0: + resolution: {integrity: sha512-INCKxTtbXtcNbUZ3YXutwMpEleqttcswhAdee7dhuoVrD2cnuc3PqtERBtxkX5nziX9vnBL8WXmSGwv8CuPV6g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 /@babel/compat-data@7.23.3: resolution: {integrity: sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==} @@ -483,6 +499,11 @@ packages: /@babel/compat-data@7.25.7: resolution: {integrity: sha512-9ickoLz+hcXCeh7jrcin+/SLWm+GkxE2kTvoYyp38p4WkdFXfQJxDFGWp/YHjiKLPx06z2A7W8XKuqbReXDzsw==} engines: {node: '>=6.9.0'} + dev: true + + /@babel/compat-data@7.26.0: + resolution: {integrity: sha512-qETICbZSLe7uXv9VE8T/RWOdIE5qqyTucOt4zLYMafj2MRO271VGgLd4RACJMeBO37UPWhXiKMBk7YlJ0fOzQA==} + engines: {node: '>=6.9.0'} /@babel/core@7.23.3: resolution: {integrity: sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==} @@ -499,7 +520,7 @@ packages: '@babel/traverse': 7.23.4 '@babel/types': 7.23.4 convert-source-map: 2.0.0 - debug: 4.3.4 + debug: 4.3.7 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -522,7 +543,7 @@ packages: '@babel/traverse': 7.23.6 '@babel/types': 7.23.6 convert-source-map: 2.0.0 - debug: 4.3.6 + debug: 4.3.7 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -550,6 +571,29 @@ packages: semver: 6.3.1 transitivePeerDependencies: - supports-color + dev: true + + /@babel/core@7.26.0: + resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.0 + '@babel/generator': 7.26.0 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helpers': 7.26.0 + '@babel/parser': 7.26.1 + '@babel/template': 7.25.9 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + convert-source-map: 2.0.0 + debug: 4.3.7 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color /@babel/generator@7.17.7: resolution: {integrity: sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==} @@ -587,6 +631,17 @@ packages: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.0.2 + dev: true + + /@babel/generator@7.26.0: + resolution: {integrity: sha512-/AIkAmInnWwgEAJGQr9vY0c66Mj6kjkE2ZPB1PurTRaRAh3U+J45sAQMjQDJdh4WbR3l0x5xkimXBKyBXXAu2w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/parser': 7.26.1 + '@babel/types': 7.26.0 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.0.2 /@babel/helper-annotate-as-pure@7.25.7: resolution: {integrity: sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==} @@ -635,6 +690,17 @@ packages: browserslist: 4.24.0 lru-cache: 5.1.1 semver: 6.3.1 + dev: true + + /@babel/helper-compilation-targets@7.25.9: + resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.26.0 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.2 + lru-cache: 5.1.1 + semver: 6.3.1 /@babel/helper-create-class-features-plugin@7.25.7(@babel/core@7.25.7): resolution: {integrity: sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==} @@ -674,7 +740,7 @@ packages: '@babel/core': 7.25.7 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.25.7 - debug: 4.3.6 + debug: 4.3.7 lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: @@ -722,6 +788,16 @@ packages: '@babel/types': 7.25.7 transitivePeerDependencies: - supports-color + dev: true + + /@babel/helper-module-imports@7.25.9: + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.3): resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} @@ -763,6 +839,20 @@ packages: '@babel/traverse': 7.25.7 transitivePeerDependencies: - supports-color + dev: true + + /@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0): + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color /@babel/helper-optimise-call-expression@7.25.7: resolution: {integrity: sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==} @@ -823,6 +913,7 @@ packages: '@babel/types': 7.25.7 transitivePeerDependencies: - supports-color + dev: true /@babel/helper-skip-transparent-expression-wrappers@7.25.7: resolution: {integrity: sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==} @@ -847,6 +938,11 @@ packages: /@babel/helper-string-parser@7.25.7: resolution: {integrity: sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==} engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-string-parser@7.25.9: + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} /@babel/helper-validator-identifier@7.22.20: resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} @@ -855,6 +951,11 @@ packages: /@babel/helper-validator-identifier@7.25.7: resolution: {integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==} engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-identifier@7.25.9: + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} /@babel/helper-validator-option@7.22.15: resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} @@ -868,6 +969,11 @@ packages: /@babel/helper-validator-option@7.25.7: resolution: {integrity: sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==} engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-option@7.25.9: + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} /@babel/helper-wrap-function@7.25.7: resolution: {integrity: sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg==} @@ -907,6 +1013,14 @@ packages: dependencies: '@babel/template': 7.25.7 '@babel/types': 7.25.7 + dev: true + + /@babel/helpers@7.26.0: + resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.25.9 + '@babel/types': 7.26.0 /@babel/highlight@7.23.4: resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} @@ -924,6 +1038,7 @@ packages: chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.0.0 + dev: true /@babel/parser@7.23.4: resolution: {integrity: sha512-vf3Xna6UEprW+7t6EtOmFpHNAuxw3xqPZghy+brsnusscJRW5BMUzzHZc5ICjULee81WeUV2jjakG09MDglJXQ==} @@ -945,6 +1060,14 @@ packages: hasBin: true dependencies: '@babel/types': 7.25.7 + dev: true + + /@babel/parser@7.26.1: + resolution: {integrity: sha512-reoQYNiAJreZNsJzyrDNzFQ+IQ5JFiIzAHJg9bn94S3l+4++J7RsIhNMoB+lgP/9tpmiAQqspv+xfdxTSzREOw==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.26.0 /@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.7(@babel/core@7.25.7): resolution: {integrity: sha512-UV9Lg53zyebzD1DwQoT9mzkEKa922LNUp5YkTJ6Uta0RbyXaQNUgcvSt7qIu1PpPzVb6rd10OVNTzkyBGeVmxQ==} @@ -2154,6 +2277,15 @@ packages: '@babel/code-frame': 7.25.7 '@babel/parser': 7.25.7 '@babel/types': 7.25.7 + dev: true + + /@babel/template@7.25.9: + resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.26.0 + '@babel/parser': 7.26.1 + '@babel/types': 7.26.0 /@babel/traverse@7.23.2: resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==} @@ -2185,7 +2317,7 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.23.4 '@babel/types': 7.23.4 - debug: 4.3.4 + debug: 4.3.7 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -2203,7 +2335,7 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.23.6 '@babel/types': 7.23.6 - debug: 4.3.6 + debug: 4.3.7 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -2217,7 +2349,22 @@ packages: '@babel/parser': 7.25.7 '@babel/template': 7.25.7 '@babel/types': 7.25.7 - debug: 4.3.6 + debug: 4.3.7 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/traverse@7.25.9: + resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.26.0 + '@babel/generator': 7.26.0 + '@babel/parser': 7.26.1 + '@babel/template': 7.25.9 + '@babel/types': 7.26.0 + debug: 4.3.7 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -2252,6 +2399,14 @@ packages: '@babel/helper-string-parser': 7.25.7 '@babel/helper-validator-identifier': 7.25.7 to-fast-properties: 2.0.0 + dev: true + + /@babel/types@7.26.0: + resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 /@base2/pretty-print-object@1.0.1: resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} @@ -2657,7 +2812,7 @@ packages: '@chakra-ui/react': 2.8.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.0)(framer-motion@10.16.4)(react-dom@18.2.0)(react@18.2.0) '@emotion/cache': 11.11.0 '@emotion/react': 11.11.1(@types/react@18.2.0)(react@18.2.0) - next: 14.1.4(@babel/core@7.25.7)(@opentelemetry/api@1.9.0)(react-dom@18.2.0)(react@18.2.0) + next: 14.1.4(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 dev: false @@ -3161,6 +3316,15 @@ packages: react: 18.2.0 dev: false + /@chakra-ui/styled-system@2.12.0(react@18.2.0): + resolution: {integrity: sha512-zoqLw1I2y4GlZ0LDoyw8o0JjoDOW6u0IwFPAoHuw0UMbP8glHUGvwEL1STug/i/GzBKw83yoF6ae41HIQvhMww==} + dependencies: + '@chakra-ui/utils': 2.2.2(react@18.2.0) + csstype: 3.1.3 + transitivePeerDependencies: + - react + dev: false + /@chakra-ui/styled-system@2.9.2: resolution: {integrity: sha512-To/Z92oHpIE+4nk11uVMWqo2GGRS86coeMmjxtpnErmWRdLcp1WVCVRAvn+ZwpLiNR+reWFr2FFqJRsREuZdAg==} dependencies: @@ -3257,6 +3421,17 @@ packages: react: 18.2.0 dev: false + /@chakra-ui/theme-tools@2.1.2(@chakra-ui/styled-system@2.12.0): + resolution: {integrity: sha512-Qdj8ajF9kxY4gLrq7gA+Azp8CtFHGO9tWMN2wfF9aQNgG9AuMhPrUzMq9AMQ0MXiYcgNq/FD3eegB43nHVmXVA==} + peerDependencies: + '@chakra-ui/styled-system': '>=2.0.0' + dependencies: + '@chakra-ui/anatomy': 2.2.2 + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/styled-system': 2.12.0(react@18.2.0) + color2k: 2.0.2 + dev: false + /@chakra-ui/theme-tools@2.1.2(@chakra-ui/styled-system@2.9.2): resolution: {integrity: sha512-Qdj8ajF9kxY4gLrq7gA+Azp8CtFHGO9tWMN2wfF9aQNgG9AuMhPrUzMq9AMQ0MXiYcgNq/FD3eegB43nHVmXVA==} peerDependencies: @@ -3353,6 +3528,16 @@ packages: lodash.mergewith: 4.6.2 dev: false + /@chakra-ui/utils@2.2.2(react@18.2.0): + resolution: {integrity: sha512-jUPLT0JzRMWxpdzH6c+t0YMJYrvc5CLericgITV3zDSXblkfx3DsYXqU11DJTSGZI9dUKzM1Wd0Wswn4eJwvFQ==} + peerDependencies: + react: '>=16.8.0' + dependencies: + '@types/lodash.mergewith': 4.6.9 + lodash.mergewith: 4.6.2 + react: 18.2.0 + dev: false + /@chakra-ui/visually-hidden@2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0): resolution: {integrity: sha512-KmKDg01SrQ7VbTD3+cPWf/UfpF5MSwm3v7MWi0n5t8HnnadT13MF0MJCDSXbBWnzLv1ZKJ6zlyAOeARWX+DpjQ==} peerDependencies: @@ -3549,11 +3734,11 @@ packages: engines: {node: '>=10.0.0'} dev: false - /@emnapi/runtime@1.3.0: - resolution: {integrity: sha512-XMBySMuNZs3DM96xcJmLW4EfGnf+uGmFNjzpehMjuX5PLB5j87ar2Zc4e3PVeZ3I5g3tYtAqskB28manlF69Zw==} + /@emnapi/runtime@1.3.1: + resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} requiresBuild: true dependencies: - tslib: 2.6.2 + tslib: 2.8.0 dev: true optional: true @@ -3986,13 +4171,13 @@ packages: resolution: {integrity: sha512-PEVLoa3zBevWSCZzPIM/lvPCi8P5l4G+NXQMc/CjEiaCWgyHieUoo0nM7Bs0n/NbuQ6JpXEolivQ9pKSBHaDlA==} dependencies: '@formatjs/intl-localematcher': 0.5.2 - tslib: 2.6.2 + tslib: 2.8.0 dev: false /@formatjs/fast-memoize@2.2.0: resolution: {integrity: sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA==} dependencies: - tslib: 2.6.2 + tslib: 2.8.0 dev: false /@formatjs/icu-messageformat-parser@2.7.3: @@ -4000,20 +4185,20 @@ packages: dependencies: '@formatjs/ecma402-abstract': 1.18.0 '@formatjs/icu-skeleton-parser': 1.7.0 - tslib: 2.6.2 + tslib: 2.8.0 dev: false /@formatjs/icu-skeleton-parser@1.7.0: resolution: {integrity: sha512-Cfdo/fgbZzpN/jlN/ptQVe0lRHora+8ezrEeg2RfrNjyp+YStwBy7cqDY8k5/z2LzXg6O0AdzAV91XS0zIWv+A==} dependencies: '@formatjs/ecma402-abstract': 1.18.0 - tslib: 2.6.2 + tslib: 2.8.0 dev: false /@formatjs/intl-localematcher@0.5.2: resolution: {integrity: sha512-txaaE2fiBMagLrR4jYhxzFO6wEdEG4TPMqrzBAcbr4HFUYzH/YC+lg6OIzKCHm8WgDdyQevxbAAV1OgcXctuGw==} dependencies: - tslib: 2.6.2 + tslib: 2.8.0 dev: false /@hirosystems/token-metadata-api-client@1.2.0: @@ -4199,7 +4384,7 @@ packages: cpu: [wasm32] requiresBuild: true dependencies: - '@emnapi/runtime': 1.3.0 + '@emnapi/runtime': 1.3.1 dev: true optional: true @@ -4714,7 +4899,7 @@ packages: next: ^13.0.0 || ^14.0.0 react: ^18.2.0 dependencies: - next: 14.1.4(@babel/core@7.25.7)(@opentelemetry/api@1.9.0)(react-dom@18.2.0)(react@18.2.0) + next: 14.1.4(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 third-party-capital: 1.0.20 dev: false @@ -4780,6 +4965,16 @@ packages: '@opentelemetry/semantic-conventions': 1.25.1 dev: false + /@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-yQPKnK5e+76XuiqUH/gKyS8wv/7qITd5ln56QkBTf3uggr0VkXOXfcaAuG330UfdYu83wsyoBwqwxigpIG+Jkg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.27.0 + dev: false + /@opentelemetry/instrumentation-connect@0.38.0(@opentelemetry/api@1.9.0): resolution: {integrity: sha512-2/nRnx3pjYEmdPIaBwtgtSviTKHWnDZN3R+TkRUnhIVrvBKVcq+I5B2rtd6mr6Fe9cHlZ9Ojcuh7pkNh/xdWWg==} engines: {node: '>=14'} @@ -5055,6 +5250,17 @@ packages: '@opentelemetry/semantic-conventions': 1.25.1 dev: false + /@opentelemetry/resources@1.27.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-jOwt2VJ/lUD5BLc+PMNymDrUCpm5PKi1E9oSVYAvz01U/VdndGmrtV3DU1pG4AwlYhJRHbHfOUIlpBeXCPw6QQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + dev: false + /@opentelemetry/sdk-metrics@1.25.1(@opentelemetry/api@1.9.0): resolution: {integrity: sha512-9Mb7q5ioFL4E4dDrc4wC/A3NTHDat44v4I3p2pLPSxRvqUbDIQyMVr9uK+EU69+HWhlET1VaSrRzwdckWqY15Q==} engines: {node: '>=14'} @@ -5079,6 +5285,18 @@ packages: '@opentelemetry/semantic-conventions': 1.25.1 dev: false + /@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-btz6XTQzwsyJjombpeqCX6LhiMQYpzt2pIYNPnw0IPO/3AhT6yjnf8Mnv3ZC2A4eRYOjqrg+bfaXg9XHDRJDWQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + dev: false + /@opentelemetry/semantic-conventions@1.25.1: resolution: {integrity: sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==} engines: {node: '>=14'} @@ -5089,6 +5307,11 @@ packages: engines: {node: '>=14'} dev: false + /@opentelemetry/semantic-conventions@1.27.0: + resolution: {integrity: sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==} + engines: {node: '>=14'} + dev: false + /@opentelemetry/sql-common@0.40.1(@opentelemetry/api@1.9.0): resolution: {integrity: sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg==} engines: {node: '>=14'} @@ -5137,7 +5360,7 @@ packages: playwright: 1.40.0 dev: true - /@pmmmwh/react-refresh-webpack-plugin@0.5.15(react-refresh@0.14.2)(webpack@5.94.0): + /@pmmmwh/react-refresh-webpack-plugin@0.5.15(react-refresh@0.14.2)(webpack@5.95.0): resolution: {integrity: sha512-LFWllMA55pzB9D34w/wXUCf8+c+IYKuJDgxiZ3qMhl64KRMBHYM1I3VdGaD2BV5FNPV2/S2596bppxHbv2ZydQ==} engines: {node: '>= 10.13'} peerDependencies: @@ -5171,7 +5394,7 @@ packages: react-refresh: 0.14.2 schema-utils: 4.2.0 source-map: 0.7.4 - webpack: 5.94.0(esbuild@0.23.1) + webpack: 5.95.0(esbuild@0.23.1) dev: true /@polka/url@1.0.0-next.25: @@ -6469,7 +6692,7 @@ packages: reselect: 4.1.8 dev: false - /@rollup/plugin-babel@6.0.4(@babel/core@7.25.7): + /@rollup/plugin-babel@6.0.4(@babel/core@7.26.0): resolution: {integrity: sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw==} engines: {node: '>=14.0.0'} peerDependencies: @@ -6482,7 +6705,7 @@ packages: rollup: optional: true dependencies: - '@babel/core': 7.25.7 + '@babel/core': 7.26.0 '@babel/helper-module-imports': 7.22.15 '@rollup/pluginutils': 5.0.5(rollup@3.29.4) dev: false @@ -6702,7 +6925,7 @@ packages: '@sentry/utils': 8.26.0 dev: false - /@sentry/nextjs@8.26.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1)(@opentelemetry/instrumentation@0.52.1)(@opentelemetry/sdk-trace-base@1.25.1)(next@14.1.4)(react@18.2.0)(webpack@5.94.0): + /@sentry/nextjs@8.26.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.27.0)(@opentelemetry/instrumentation@0.52.1)(@opentelemetry/sdk-trace-base@1.27.0)(next@14.1.4)(react@18.2.0)(webpack@5.95.0): resolution: {integrity: sha512-FO4xtYRpmtKpVt9kJsdcL73SoJbFkfZbHONh2kvGalCa06w8DCdHuzYvPgKaf8UcjEixeb0qiM9ncmPpoDsnHA==} engines: {node: '>=14.18'} peerDependencies: @@ -6717,18 +6940,18 @@ packages: '@rollup/plugin-commonjs': 26.0.1(rollup@3.29.4) '@sentry/core': 8.26.0 '@sentry/node': 8.26.0 - '@sentry/opentelemetry': 8.26.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1)(@opentelemetry/instrumentation@0.52.1)(@opentelemetry/sdk-trace-base@1.25.1)(@opentelemetry/semantic-conventions@1.26.0) + '@sentry/opentelemetry': 8.26.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.27.0)(@opentelemetry/instrumentation@0.52.1)(@opentelemetry/sdk-trace-base@1.27.0)(@opentelemetry/semantic-conventions@1.26.0) '@sentry/react': 8.26.0(react@18.2.0) '@sentry/types': 8.26.0 '@sentry/utils': 8.26.0 '@sentry/vercel-edge': 8.26.0 - '@sentry/webpack-plugin': 2.20.1(webpack@5.94.0) + '@sentry/webpack-plugin': 2.20.1(webpack@5.95.0) chalk: 3.0.0 - next: 14.1.4(@babel/core@7.25.7)(@opentelemetry/api@1.9.0)(react-dom@18.2.0)(react@18.2.0) + next: 14.1.4(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@18.2.0)(react@18.2.0) resolve: 1.22.8 rollup: 3.29.4 stacktrace-parser: 0.1.10 - webpack: 5.94.0(esbuild@0.23.1) + webpack: 5.95.0(esbuild@0.23.1) transitivePeerDependencies: - '@opentelemetry/api' - '@opentelemetry/core' @@ -6798,6 +7021,26 @@ packages: '@sentry/utils': 8.26.0 dev: false + /@sentry/opentelemetry@8.26.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.27.0)(@opentelemetry/instrumentation@0.52.1)(@opentelemetry/sdk-trace-base@1.27.0)(@opentelemetry/semantic-conventions@1.26.0): + resolution: {integrity: sha512-HBDheM/+ysfIz8R1OH4bBIxdgD7ZbQkKLJAUXkdAbBcfbpK/CTtwcplbauF5wY7Q+GYvwL/ShuDwvXRfW+gFyQ==} + engines: {node: '>=14.18'} + peerDependencies: + '@opentelemetry/api': ^1.9.0 + '@opentelemetry/core': ^1.25.1 + '@opentelemetry/instrumentation': ^0.52.1 + '@opentelemetry/sdk-trace-base': ^1.25.1 + '@opentelemetry/semantic-conventions': ^1.25.1 + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.26.0 + '@sentry/core': 8.26.0 + '@sentry/types': 8.26.0 + '@sentry/utils': 8.26.0 + dev: false + /@sentry/react@8.26.0(react@18.2.0): resolution: {integrity: sha512-dYoC0xzcqq8zmNMFoTWidhA7mVd3RDz/nAUn6C8yK/hkKA7bUknYCkhpESGLZfHaGwSKzeXRXKd/o/cgUVM9eA==} engines: {node: '>=14.18'} @@ -6833,7 +7076,7 @@ packages: '@sentry/utils': 8.26.0 dev: false - /@sentry/webpack-plugin@2.20.1(webpack@5.94.0): + /@sentry/webpack-plugin@2.20.1(webpack@5.95.0): resolution: {integrity: sha512-U6LzoE09Ndt0OCWROoRaZqqIHGxyMRdKpBhbqoBqyyfVwXN/zGW3I/cWZ1e8rreiKFj+2+c7+X0kOS+NGMTUrg==} engines: {node: '>= 14'} peerDependencies: @@ -6842,7 +7085,7 @@ packages: '@sentry/bundler-plugin-core': 2.20.1 unplugin: 1.0.1 uuid: 9.0.1 - webpack: 5.94.0(esbuild@0.23.1) + webpack: 5.95.0(esbuild@0.23.1) transitivePeerDependencies: - encoding - supports-color @@ -6880,8 +7123,8 @@ packages: '@sinonjs/commons': 1.8.6 dev: true - /@socket.io/component-emitter@3.1.0: - resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==} + /@socket.io/component-emitter@3.1.2: + resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} dev: false /@stacks/auth@6.15.0: @@ -6932,14 +7175,14 @@ packages: resolution: {integrity: sha512-TMpyBvtYU/Irc9u9PDb8mqKSQHVgGQKIZvzZF58Rg60xQ038bJ8JEqmxrGnP5sEPbyUEBH3BX5fcvkRCokww6g==} dependencies: '@types/bn.js': 5.1.5 - '@types/node': 18.18.12 + '@types/node': 18.19.60 dev: false /@stacks/common@6.8.1: resolution: {integrity: sha512-ewL9GLZNQYa5a/3K4xSHlHIgHkD4rwWW/QEaPId8zQIaL+1O9qCaF4LX9orNQeOmEk8kvG0x2xGV54fXKCZeWQ==} dependencies: '@types/bn.js': 5.1.5 - '@types/node': 18.18.12 + '@types/node': 18.19.60 dev: false /@stacks/connect-react@22.4.2(react-dom@18.2.0)(react@18.2.0): @@ -6989,7 +7232,7 @@ packages: varuint-bitcoin: 1.1.2 dev: false - /@stacks/eslint-config@2.0.0(eslint-plugin-import@2.29.0)(eslint-plugin-prettier@5.0.1)(eslint-plugin-unused-imports@3.0.0)(eslint@8.54.0)(typescript@5.3.2): + /@stacks/eslint-config@2.0.0(eslint-plugin-import@2.29.0)(eslint-plugin-prettier@5.0.1)(eslint-plugin-unused-imports@4.1.4)(eslint@8.54.0)(typescript@5.3.2): resolution: {integrity: sha512-GrRiJE7nadre+wCGAkaxCmHGD8tEYOtVW/cjjMdh/H37yl3vGj/lX723MfiXj/YcQDJ1qs/8V9Rx9b4VsFp10Q==} peerDependencies: eslint: 8.54.0 @@ -7005,7 +7248,7 @@ packages: eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.12.0)(eslint-plugin-import@2.29.0)(eslint@8.54.0) eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.12.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.54.0) eslint-plugin-prettier: 5.0.1(eslint@8.54.0)(prettier@3.1.0) - eslint-plugin-unused-imports: 3.0.0(eslint@8.54.0) + eslint-plugin-unused-imports: 4.1.4(eslint@8.54.0) transitivePeerDependencies: - eslint-import-resolver-node - eslint-import-resolver-webpack @@ -7439,7 +7682,7 @@ packages: recast: 0.23.9 semver: 7.6.3 util: 0.12.5 - ws: 8.16.0 + ws: 8.17.1 transitivePeerDependencies: - bufferutil - supports-color @@ -7514,7 +7757,7 @@ packages: storybook: 8.3.5 dev: true - /@storybook/nextjs@8.3.5(esbuild@0.23.1)(next@14.1.4)(react-dom@18.2.0)(react@18.2.0)(storybook@8.3.5)(typescript@5.3.2)(webpack@5.94.0): + /@storybook/nextjs@8.3.5(esbuild@0.23.1)(next@14.1.4)(react-dom@18.2.0)(react@18.2.0)(storybook@8.3.5)(typescript@5.3.2)(webpack@5.95.0): resolution: {integrity: sha512-YMjDSVd7BHIvj6oLMEFMKRvfZ83INxZinxtrx4ZZXGe+5iP8j7rcV7D67lxKQKWNy36d9Foj4pjT85yYj5s+ZQ==} engines: {node: '>=18.0.0'} peerDependencies: @@ -7543,38 +7786,38 @@ packages: '@babel/preset-react': 7.25.7(@babel/core@7.25.7) '@babel/preset-typescript': 7.25.7(@babel/core@7.25.7) '@babel/runtime': 7.25.7 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.15(react-refresh@0.14.2)(webpack@5.94.0) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.15(react-refresh@0.14.2)(webpack@5.95.0) '@storybook/builder-webpack5': 8.3.5(esbuild@0.23.1)(storybook@8.3.5)(typescript@5.3.2) '@storybook/preset-react-webpack': 8.3.5(@storybook/test@8.3.5)(esbuild@0.23.1)(react-dom@18.2.0)(react@18.2.0)(storybook@8.3.5)(typescript@5.3.2) '@storybook/react': 8.3.5(@storybook/test@8.3.5)(react-dom@18.2.0)(react@18.2.0)(storybook@8.3.5)(typescript@5.3.2) '@storybook/test': 8.3.5(storybook@8.3.5) '@types/node': 22.7.4 '@types/semver': 7.5.6 - babel-loader: 9.2.1(@babel/core@7.25.7)(webpack@5.94.0) - css-loader: 6.11.0(webpack@5.94.0) + babel-loader: 9.2.1(@babel/core@7.25.7)(webpack@5.95.0) + css-loader: 6.11.0(webpack@5.95.0) find-up: 5.0.0 fs-extra: 11.2.0 image-size: 1.1.1 loader-utils: 3.3.1 - next: 14.1.4(@babel/core@7.25.7)(@opentelemetry/api@1.9.0)(react-dom@18.2.0)(react@18.2.0) - node-polyfill-webpack-plugin: 2.0.1(webpack@5.94.0) + next: 14.1.4(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@18.2.0)(react@18.2.0) + node-polyfill-webpack-plugin: 2.0.1(webpack@5.95.0) pnp-webpack-plugin: 1.7.0(typescript@5.3.2) postcss: 8.4.47 - postcss-loader: 8.1.1(postcss@8.4.47)(typescript@5.3.2)(webpack@5.94.0) + postcss-loader: 8.1.1(postcss@8.4.47)(typescript@5.3.2)(webpack@5.95.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-refresh: 0.14.2 resolve-url-loader: 5.0.0 - sass-loader: 13.3.3(webpack@5.94.0) + sass-loader: 13.3.3(webpack@5.95.0) semver: 7.5.4 storybook: 8.3.5 - style-loader: 3.3.4(webpack@5.94.0) + style-loader: 3.3.4(webpack@5.95.0) styled-jsx: 5.1.6(@babel/core@7.25.7)(react@18.2.0) ts-dedent: 2.2.0 tsconfig-paths: 4.2.0 tsconfig-paths-webpack-plugin: 4.1.0 typescript: 5.3.2 - webpack: 5.94.0(esbuild@0.23.1) + webpack: 5.95.0(esbuild@0.23.1) optionalDependencies: sharp: 0.33.5 transitivePeerDependencies: @@ -7649,13 +7892,13 @@ packages: typescript: '>= 4.x' webpack: '>= 4' dependencies: - debug: 4.3.6 + debug: 4.3.7 endent: 2.1.0 find-cache-dir: 3.3.2 flat-cache: 3.2.0 micromatch: 4.0.5 react-docgen-typescript: 2.2.2(typescript@5.3.2) - tslib: 2.6.2 + tslib: 2.8.0 typescript: 5.3.2 webpack: 5.94.0(esbuild@0.23.1) transitivePeerDependencies: @@ -7756,14 +7999,14 @@ packages: /@swc/helpers@0.4.14: resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==} dependencies: - tslib: 2.6.2 + tslib: 2.8.0 dev: false /@swc/helpers@0.4.36: resolution: {integrity: sha512-5lxnyLEYFskErRPenYItLRSge5DjrJngYKdVjRSrWfza9G6KkgHEXi0vUZiyUeMU5JfXH1YnvXZzSp8ul88o2Q==} dependencies: legacy-swc-helpers: /@swc/helpers@0.4.14 - tslib: 2.6.2 + tslib: 2.8.0 dev: false /@swc/helpers@0.5.2: @@ -8041,6 +8284,9 @@ packages: /@types/estree@1.0.5: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + /@types/estree@1.0.6: + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + /@types/express-serve-static-core@4.17.41: resolution: {integrity: sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==} dependencies: @@ -8152,9 +8398,19 @@ packages: '@types/lodash': 4.14.202 dev: false + /@types/lodash.mergewith@4.6.9: + resolution: {integrity: sha512-fgkoCAOF47K7sxrQ7Mlud2TH023itugZs2bUg8h/KzT+BnZNrR2jAOmaokbLunHNnobXVWOezAeNn/lZqwxkcw==} + dependencies: + '@types/lodash': 4.17.12 + dev: false + /@types/lodash@4.14.202: resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==} + /@types/lodash@4.17.12: + resolution: {integrity: sha512-sviUmCE8AYdaF/KIHLDJBQgeYzPBI0vf/17NaYehBJfYD1j6/L95Slh07NlyK2iNyBNaEkb3En2jRt+a8y3xZQ==} + dev: false + /@types/mdx@2.0.13: resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} dev: true @@ -8183,6 +8439,12 @@ packages: undici-types: 5.26.5 dev: false + /@types/node@18.19.60: + resolution: {integrity: sha512-cYRj7igVqgxhlHFdBHHpU2SNw3+dN2x0VTZJtLYk6y/ieuGN4XiBgtDjYVktM/yk2y/8pKMileNc6IoEzEJnUw==} + dependencies: + undici-types: 5.26.5 + dev: false + /@types/node@20.9.4: resolution: {integrity: sha512-wmyg8HUhcn6ACjsn8oKYjkN/zUzQeNtMy44weTJSM6p4MMzEOuKbA3OjJ267uPCOW7Xex9dyrNTful8XTQYoDA==} dependencies: @@ -8435,7 +8697,7 @@ packages: dependencies: '@typescript-eslint/typescript-estree': 6.12.0(typescript@5.3.2) '@typescript-eslint/utils': 6.12.0(eslint@8.54.0)(typescript@5.3.2) - debug: 4.3.4 + debug: 4.3.7 eslint: 8.54.0 ts-api-utils: 1.0.3(typescript@5.3.2) typescript: 5.3.2 @@ -8463,7 +8725,7 @@ packages: dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.6 + debug: 4.3.7 globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.3 @@ -8484,7 +8746,7 @@ packages: dependencies: '@typescript-eslint/types': 6.12.0 '@typescript-eslint/visitor-keys': 6.12.0 - debug: 4.3.4 + debug: 4.3.7 globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 @@ -8763,6 +9025,13 @@ packages: dependencies: acorn: 8.12.1 + /acorn-import-attributes@1.9.5(acorn@8.14.0): + resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} + peerDependencies: + acorn: ^8 + dependencies: + acorn: 8.14.0 + /acorn-jsx@5.3.2(acorn@7.4.1): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -8803,6 +9072,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + /acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + /adjust-sourcemap-loader@4.0.0: resolution: {integrity: sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==} engines: {node: '>=8.9'} @@ -8815,7 +9089,7 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.4 + debug: 4.3.7 transitivePeerDependencies: - supports-color @@ -8945,7 +9219,7 @@ packages: resolution: {integrity: sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==} engines: {node: '>=10'} dependencies: - tslib: 2.6.2 + tslib: 2.8.0 dev: false /aria-query@5.1.3: @@ -9073,7 +9347,7 @@ packages: resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} engines: {node: '>=4'} dependencies: - tslib: 2.6.2 + tslib: 2.8.0 dev: true /astral-regex@2.0.0: @@ -9154,7 +9428,7 @@ packages: - supports-color dev: true - /babel-loader@9.2.1(@babel/core@7.25.7)(webpack@5.94.0): + /babel-loader@9.2.1(@babel/core@7.25.7)(webpack@5.95.0): resolution: {integrity: sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==} engines: {node: '>= 14.15.0'} peerDependencies: @@ -9164,7 +9438,7 @@ packages: '@babel/core': 7.25.7 find-cache-dir: 4.0.0 schema-utils: 4.2.0 - webpack: 5.94.0(esbuild@0.23.1) + webpack: 5.95.0(esbuild@0.23.1) dev: true /babel-plugin-istanbul@6.1.1: @@ -9455,6 +9729,17 @@ packages: electron-to-chromium: 1.5.32 node-releases: 2.0.18 update-browserslist-db: 1.1.1(browserslist@4.24.0) + dev: true + + /browserslist@4.24.2: + resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001673 + electron-to-chromium: 1.5.48 + node-releases: 2.0.18 + update-browserslist-db: 1.1.1(browserslist@4.24.2) /bs58@5.0.0: resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} @@ -9540,7 +9825,7 @@ packages: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} dependencies: pascal-case: 3.1.2 - tslib: 2.6.2 + tslib: 2.8.0 dev: true /camelcase-keys@6.2.2: @@ -9571,6 +9856,10 @@ packages: /caniuse-lite@1.0.30001667: resolution: {integrity: sha512-7LTwJjcRkzKFmtqGsibMeuXmvFDfZq/nzIjnmgCGzKKRVzjD72selLDK1oPF/Oxzmt4fNcPvTDvGqSDG4tCALw==} + dev: true + + /caniuse-lite@1.0.30001673: + resolution: {integrity: sha512-WTrjUCSMp3LYX0nE12ECkV0a+e6LC85E0Auz75555/qr78Oc8YWhEPNfDd6SHdtlCMSzqtuXY0uyEMNRcsKpKw==} /case-sensitive-paths-webpack-plugin@2.4.0: resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==} @@ -10079,6 +10368,29 @@ packages: webpack: 5.94.0(esbuild@0.23.1) dev: true + /css-loader@6.11.0(webpack@5.95.0): + resolution: {integrity: sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==} + engines: {node: '>= 12.13.0'} + peerDependencies: + '@rspack/core': 0.x || 1.x + webpack: ^5.0.0 + peerDependenciesMeta: + '@rspack/core': + optional: true + webpack: + optional: true + dependencies: + icss-utils: 5.1.0(postcss@8.4.47) + postcss: 8.4.47 + postcss-modules-extract-imports: 3.1.0(postcss@8.4.47) + postcss-modules-local-by-default: 4.0.5(postcss@8.4.47) + postcss-modules-scope: 3.2.0(postcss@8.4.47) + postcss-modules-values: 4.0.0(postcss@8.4.47) + postcss-value-parser: 4.2.0 + semver: 7.5.4 + webpack: 5.95.0(esbuild@0.23.1) + dev: true + /css-select@4.3.0: resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} dependencies: @@ -10268,6 +10580,18 @@ packages: optional: true dependencies: ms: 2.1.2 + dev: true + + /debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 /decamelize-keys@1.1.1: resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} @@ -10528,7 +10852,7 @@ packages: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} dependencies: no-case: 3.0.4 - tslib: 2.6.2 + tslib: 2.8.0 dev: true /dot-prop@5.3.0: @@ -10569,6 +10893,10 @@ packages: /electron-to-chromium@1.5.32: resolution: {integrity: sha512-M+7ph0VGBQqqpTT2YrabjNKSQ2fEl9PVx6AK3N558gDH9NO8O6XN9SXXFWRo9u9PbEg/bWq+tjXQr+eXmxubCw==} + dev: true + + /electron-to-chromium@1.5.48: + resolution: {integrity: sha512-FXULnNK7ACNI9MTMOVAzUGiz/YrK9Kcb0s/JT4aJgsam7Eh6XYe7Y6q95lPq+VdBe1DpT2eTnfXFtnuPGCks4w==} /elliptic@6.5.7: resolution: {integrity: sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==} @@ -10610,13 +10938,13 @@ packages: objectorarray: 1.0.5 dev: true - /engine.io-client@6.5.3: - resolution: {integrity: sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==} + /engine.io-client@6.5.4: + resolution: {integrity: sha512-GeZeeRjpD2qf49cZQ0Wvh/8NJNfeXkXXcoGh+F77oEAgo9gUHwT1fCRxSNU+YEEaysOJTnsFHmM5oAcPy4ntvQ==} dependencies: - '@socket.io/component-emitter': 3.1.0 - debug: 4.3.4 - engine.io-parser: 5.2.1 - ws: 8.11.0 + '@socket.io/component-emitter': 3.1.2 + debug: 4.3.7 + engine.io-parser: 5.2.3 + ws: 8.17.1 xmlhttprequest-ssl: 2.0.0 transitivePeerDependencies: - bufferutil @@ -10624,8 +10952,8 @@ packages: - utf-8-validate dev: false - /engine.io-parser@5.2.1: - resolution: {integrity: sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==} + /engine.io-parser@5.2.3: + resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==} engines: {node: '>=10.0.0'} dev: false @@ -10792,7 +11120,7 @@ packages: peerDependencies: esbuild: '>=0.12 <1' dependencies: - debug: 4.3.6 + debug: 4.3.7 esbuild: 0.23.1 transitivePeerDependencies: - supports-color @@ -11140,23 +11468,16 @@ packages: - typescript dev: true - /eslint-plugin-unused-imports@3.0.0(eslint@8.54.0): - resolution: {integrity: sha512-sduiswLJfZHeeBJ+MQaG+xYzSWdRXoSw61DpU13mzWumCkR0ufD0HmO4kdNokjrkluMHpj/7PJeN35pgbhW3kw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /eslint-plugin-unused-imports@4.1.4(eslint@8.54.0): + resolution: {integrity: sha512-YptD6IzQjDardkl0POxnnRBhU1OEePMV0nd6siHaRBbd+lyh6NAhFEobiznKU7kTsSsDeSD62Pe7kAM1b7dAZQ==} peerDependencies: - '@typescript-eslint/eslint-plugin': ^6.0.0 + '@typescript-eslint/eslint-plugin': ^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0 eslint: 8.54.0 peerDependenciesMeta: '@typescript-eslint/eslint-plugin': optional: true dependencies: eslint: 8.54.0 - eslint-rule-composer: 0.3.0 - dev: true - - /eslint-rule-composer@0.3.0: - resolution: {integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==} - engines: {node: '>=4.0.0'} dev: true /eslint-scope@5.1.1: @@ -11529,7 +11850,7 @@ packages: resolution: {integrity: sha512-a8Ge6cdKh9za/GZR/qtigTAk7SrGore56EFcoMshClsh7FLk1zwszc/ltuMfKhx56qeuyL/jWQ4J4axou0iJ9w==} engines: {node: '>=10'} dependencies: - tslib: 2.6.2 + tslib: 2.8.0 dev: false /follow-redirects@1.15.6: @@ -12114,7 +12435,7 @@ packages: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.7 transitivePeerDependencies: - supports-color dev: true @@ -12132,7 +12453,7 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.7 transitivePeerDependencies: - supports-color @@ -12271,7 +12592,7 @@ packages: '@formatjs/ecma402-abstract': 1.18.0 '@formatjs/fast-memoize': 2.2.0 '@formatjs/icu-messageformat-parser': 2.7.3 - tslib: 2.6.2 + tslib: 2.8.0 dev: false /invariant@2.2.4: @@ -12618,7 +12939,7 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.4 + debug: 4.3.7 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -13188,7 +13509,7 @@ packages: whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 whatwg-url: 11.0.0 - ws: 8.14.2 + ws: 8.17.1 xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil @@ -13490,7 +13811,7 @@ packages: /lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} dependencies: - tslib: 2.6.2 + tslib: 2.8.0 dev: true /lru-cache@10.4.3: @@ -13750,7 +14071,7 @@ packages: onigasm: 2.2.5 dev: false - /monaco-vscode-textmate-theme-converter@0.1.7(tslib@2.6.2): + /monaco-vscode-textmate-theme-converter@0.1.7(tslib@2.8.0): resolution: {integrity: sha512-ZMsq1RPWwOD3pvXD0n+9ddnhfzZoiUMwNIWPNUqYqEiQeH2HjyZ9KYOdt/pqe0kkN8WnYWLrxT9C/SrtIsAu2Q==} hasBin: true peerDependencies: @@ -13758,7 +14079,7 @@ packages: dependencies: commander: 8.3.0 fs-extra: 7.0.1 - tslib: 2.6.2 + tslib: 2.8.0 dev: false /monacode@0.3.1: @@ -13820,11 +14141,11 @@ packages: next: '>=10.0.0' react: '>=17.0.0' dependencies: - next: 14.1.4(@babel/core@7.25.7)(@opentelemetry/api@1.9.0)(react-dom@18.2.0)(react@18.2.0) + next: 14.1.4(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 dev: true - /next@14.1.4(@babel/core@7.25.7)(@opentelemetry/api@1.9.0)(react-dom@18.2.0)(react@18.2.0): + /next@14.1.4(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-1WTaXeSrUwlz/XcnhGTY7+8eiaFvdet5z9u3V2jb+Ek1vFo0VhHKSAIJvDWfQpttWjnyw14kBeq28TPq7bTeEQ==} engines: {node: '>=18.17.0'} hasBin: true @@ -13848,7 +14169,7 @@ packages: postcss: 8.4.31 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(@babel/core@7.25.7)(react@18.2.0) + styled-jsx: 5.1.1(@babel/core@7.26.0)(react@18.2.0) optionalDependencies: '@next/swc-darwin-arm64': 14.1.4 '@next/swc-darwin-x64': 14.1.4 @@ -13867,7 +14188,7 @@ packages: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} dependencies: lower-case: 2.0.2 - tslib: 2.6.2 + tslib: 2.8.0 dev: true /node-abort-controller@3.1.1: @@ -13902,7 +14223,7 @@ packages: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true - /node-polyfill-webpack-plugin@2.0.1(webpack@5.94.0): + /node-polyfill-webpack-plugin@2.0.1(webpack@5.95.0): resolution: {integrity: sha512-ZUMiCnZkP1LF0Th2caY6J/eKKoA0TefpoVa68m/LQU1I/mE8rGt4fNYGgNuCcK+aG8P8P43nbeJ2RqJMOL/Y1A==} engines: {node: '>=12'} peerDependencies: @@ -13933,7 +14254,7 @@ packages: url: 0.11.4 util: 0.12.5 vm-browserify: 1.1.2 - webpack: 5.94.0(esbuild@0.23.1) + webpack: 5.95.0(esbuild@0.23.1) dev: true /node-releases@2.0.13: @@ -14248,7 +14569,7 @@ packages: resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} dependencies: dot-case: 3.0.4 - tslib: 2.6.2 + tslib: 2.8.0 dev: true /parent-module@1.0.1: @@ -14292,7 +14613,7 @@ packages: resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} dependencies: no-case: 3.0.4 - tslib: 2.6.2 + tslib: 2.8.0 dev: true /path-browserify@1.0.1: @@ -14381,6 +14702,9 @@ packages: /picocolors@1.1.0: resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} + /picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} @@ -14447,7 +14771,7 @@ packages: '@babel/runtime': 7.23.4 dev: true - /postcss-loader@8.1.1(postcss@8.4.47)(typescript@5.3.2)(webpack@5.94.0): + /postcss-loader@8.1.1(postcss@8.4.47)(typescript@5.3.2)(webpack@5.95.0): resolution: {integrity: sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==} engines: {node: '>= 18.12.0'} peerDependencies: @@ -14464,7 +14788,7 @@ packages: jiti: 1.21.6 postcss: 8.4.47 semver: 7.5.4 - webpack: 5.94.0(esbuild@0.23.1) + webpack: 5.95.0(esbuild@0.23.1) transitivePeerDependencies: - typescript dev: true @@ -14561,25 +14885,25 @@ packages: xtend: 4.0.2 dev: false - /preact-render-to-string@5.1.19(preact@10.19.3): + /preact-render-to-string@5.1.19(preact@10.24.3): resolution: {integrity: sha512-bj8sn/oytIKO6RtOGSS/1+5CrQyRSC99eLUnEVbqUa6MzJX5dYh7wu9bmT0d6lm/Vea21k9KhCQwvr2sYN3rrQ==} peerDependencies: preact: '>=10' dependencies: - preact: 10.19.3 + preact: 10.24.3 pretty-format: 3.8.0 dev: false - /preact-ssr-prepass@1.2.1(preact@10.19.3): + /preact-ssr-prepass@1.2.1(preact@10.24.3): resolution: {integrity: sha512-bLgbUfy8nL+PZghAPpyk9MF+cmXjdwEnxYPaJBmwbzFQqzIz8dQVBqjwB60RqZ9So/vIf6BRfHCiwFGuMCyfbQ==} peerDependencies: preact: '>=10 || ^10.0.0-beta.0 || ^10.0.0-alpha.0' dependencies: - preact: 10.19.3 + preact: 10.24.3 dev: false - /preact@10.19.3: - resolution: {integrity: sha512-nHHTeFVBTHRGxJXKkKu5hT8C/YWBkPso4/Gad6xuj5dbptt9iF9NZr9pHbPhBrnT2klheu7mHTxTZ/LjwJiEiQ==} + /preact@10.24.3: + resolution: {integrity: sha512-Z2dPnBnMUfyQfSQ+GBdsGa16hz35YmLmtTLhM169uW944hYL6xzTYkJjC07j+Wosz733pMWx0fgON3JNw1jJQA==} dev: false /prelude-ls@1.2.1: @@ -14874,12 +15198,12 @@ packages: universal-cookie: 6.1.1 dev: false - /react-countup@6.4.2(@babel/core@7.25.7)(react@18.2.0): + /react-countup@6.4.2(@babel/core@7.26.0)(react@18.2.0): resolution: {integrity: sha512-wdDrNb2lPFGbLb+i0FTgswPbWziubS6KZRII8NRpXmUCoZsi15PFbIHgBz60Dyxd4KPuRvwsK5aawIU4OPP3jA==} peerDependencies: react: '>= 16.3.0' dependencies: - '@rollup/plugin-babel': 6.0.4(@babel/core@7.25.7) + '@rollup/plugin-babel': 6.0.4(@babel/core@7.26.0) countup.js: 2.8.0 react: 18.2.0 transitivePeerDependencies: @@ -15102,7 +15426,7 @@ packages: '@types/react': 18.2.0 react: 18.2.0 react-style-singleton: 2.2.1(@types/react@18.2.0)(react@18.2.0) - tslib: 2.6.2 + tslib: 2.8.0 dev: false /react-remove-scroll@2.5.7(@types/react@18.2.0)(react@18.2.0): @@ -15119,7 +15443,7 @@ packages: react: 18.2.0 react-remove-scroll-bar: 2.3.4(@types/react@18.2.0)(react@18.2.0) react-style-singleton: 2.2.1(@types/react@18.2.0)(react@18.2.0) - tslib: 2.6.2 + tslib: 2.8.0 use-callback-ref: 1.3.0(@types/react@18.2.0)(react@18.2.0) use-sidecar: 1.1.2(@types/react@18.2.0)(react@18.2.0) dev: false @@ -15171,7 +15495,7 @@ packages: get-nonce: 1.0.1 invariant: 2.2.4 react: 18.2.0 - tslib: 2.6.2 + tslib: 2.8.0 dev: false /react-test-renderer@18.2.0(react@18.2.0): @@ -15278,7 +15602,7 @@ packages: esprima: 4.0.1 source-map: 0.6.1 tiny-invariant: 1.3.3 - tslib: 2.6.2 + tslib: 2.8.0 dev: true /recharts-scale@0.4.5: @@ -15457,7 +15781,7 @@ packages: resolution: {integrity: sha512-X34iHADNbNDfr6OTStIAHWSAvvKQRYgLO6duASaVf7J2VA3lvmNYboAHOuLC2huav1IwgZJtyEcJCKVzFxOSMQ==} engines: {node: '>=8.6.0'} dependencies: - debug: 4.3.6 + debug: 4.3.7 module-details-from-path: 1.0.3 resolve: 1.22.8 transitivePeerDependencies: @@ -15597,7 +15921,7 @@ packages: /rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} dependencies: - tslib: 2.6.2 + tslib: 2.8.0 dev: true /safe-array-concat@1.0.1: @@ -15625,7 +15949,7 @@ packages: /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - /sass-loader@13.3.3(webpack@5.94.0): + /sass-loader@13.3.3(webpack@5.95.0): resolution: {integrity: sha512-mt5YN2F1MOZr3d/wBRcZxeFgwgkH44wVc2zohO2YF6JiOMkiXe4BYRZpSu2sO1g71mo/j16txzUhsKZlqjVGzA==} engines: {node: '>= 14.15.0'} peerDependencies: @@ -15645,7 +15969,7 @@ packages: optional: true dependencies: neo-async: 2.6.2 - webpack: 5.94.0(esbuild@0.23.1) + webpack: 5.95.0(esbuild@0.23.1) dev: true /saxes@6.0.0: @@ -15922,9 +16246,9 @@ packages: resolution: {integrity: sha512-nU+ywttCyBitXIl9Xe0RSEfek4LneYkJxCeNnKCuhwoH4jGXO1ipIUw/VA/+Vvv2G1MTym11fzFC0SxkrcfXDw==} engines: {node: '>=10.0.0'} dependencies: - '@socket.io/component-emitter': 3.1.0 - debug: 4.3.4 - engine.io-client: 6.5.3 + '@socket.io/component-emitter': 3.1.2 + debug: 4.3.7 + engine.io-client: 6.5.4 socket.io-parser: 4.2.4 transitivePeerDependencies: - bufferutil @@ -15936,8 +16260,8 @@ packages: resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} engines: {node: '>=10.0.0'} dependencies: - '@socket.io/component-emitter': 3.1.0 - debug: 4.3.4 + '@socket.io/component-emitter': 3.1.2 + debug: 4.3.7 transitivePeerDependencies: - supports-color dev: false @@ -16238,7 +16562,16 @@ packages: webpack: 5.94.0(esbuild@0.23.1) dev: true - /styled-jsx@5.1.1(@babel/core@7.25.7)(react@18.2.0): + /style-loader@3.3.4(webpack@5.95.0): + resolution: {integrity: sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + dependencies: + webpack: 5.95.0(esbuild@0.23.1) + dev: true + + /styled-jsx@5.1.1(@babel/core@7.26.0)(react@18.2.0): resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} engines: {node: '>= 12.0.0'} peerDependencies: @@ -16251,7 +16584,7 @@ packages: babel-plugin-macros: optional: true dependencies: - '@babel/core': 7.25.7 + '@babel/core': 7.26.0 client-only: 0.0.1 react: 18.2.0 @@ -16374,6 +16707,31 @@ packages: serialize-javascript: 6.0.2 terser: 5.31.6 webpack: 5.94.0(esbuild@0.23.1) + dev: true + + /terser-webpack-plugin@5.3.10(esbuild@0.23.1)(webpack@5.95.0): + resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + esbuild: 0.23.1 + jest-worker: 27.5.1 + schema-utils: 3.3.0 + serialize-javascript: 6.0.2 + terser: 5.31.6 + webpack: 5.95.0(esbuild@0.23.1) /terser@5.31.6: resolution: {integrity: sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==} @@ -16595,6 +16953,9 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + /tslib@2.8.0: + resolution: {integrity: sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==} + /tsutils@3.21.0(typescript@5.3.2): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} @@ -16855,6 +17216,17 @@ packages: browserslist: 4.24.0 escalade: 3.2.0 picocolors: 1.1.0 + dev: true + + /update-browserslist-db@1.1.1(browserslist@4.24.2): + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.24.2 + escalade: 3.2.0 + picocolors: 1.1.0 /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -16888,7 +17260,7 @@ packages: dependencies: '@types/react': 18.2.0 react: 18.2.0 - tslib: 2.6.2 + tslib: 2.8.0 dev: false /use-events@1.4.2(react@18.2.0): @@ -16913,7 +17285,7 @@ packages: '@types/react': 18.2.0 detect-node-es: 1.1.0 react: 18.2.0 - tslib: 2.6.2 + tslib: 2.8.0 dev: false /use-sync-external-store@1.2.0(react@18.2.0): @@ -17137,6 +17509,45 @@ packages: - '@swc/core' - esbuild - uglify-js + dev: true + + /webpack@5.95.0(esbuild@0.23.1): + resolution: {integrity: sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + dependencies: + '@types/estree': 1.0.6 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/wasm-edit': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + acorn: 8.14.0 + acorn-import-attributes: 1.9.5(acorn@8.14.0) + browserslist: 4.24.2 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.17.1 + es-module-lexer: 1.5.4 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.10(esbuild@0.23.1)(webpack@5.95.0) + watchpack: 2.4.2 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js /whatwg-encoding@2.0.0: resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} @@ -17272,21 +17683,8 @@ packages: optional: true dev: false - /ws@8.11.0: - resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: false - - /ws@8.14.2: - resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==} + /ws@8.16.0: + resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -17296,10 +17694,10 @@ packages: optional: true utf-8-validate: optional: true - dev: true + dev: false - /ws@8.16.0: - resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} + /ws@8.17.1: + resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 diff --git a/src/app/signer/[signerKey]/AssociatedAddressesTable.tsx b/src/app/signer/[signerKey]/AssociatedAddressesTable.tsx new file mode 100644 index 000000000..28297f98a --- /dev/null +++ b/src/app/signer/[signerKey]/AssociatedAddressesTable.tsx @@ -0,0 +1,72 @@ +import { useMemo } from 'react'; + +import { useSuspenseSignerStackersInfinite } from '../../../app/signers/data/UseSignerAddresses'; +import { CopyButton } from '../../../common/components/CopyButton'; +import { ListFooter } from '../../../common/components/ListFooter'; +import { Section } from '../../../common/components/Section'; +import { Box } from '../../../ui/Box'; +import { Flex } from '../../../ui/Flex'; +import { Stack } from '../../../ui/Stack'; +import { Text } from '../../../ui/Text'; +import { useSuspenseCurrentStackingCycle } from '../../_components/Stats/CurrentStackingCycle/useCurrentStackingCycle'; + +const addressItemHeight = 69; + +export function AssociatedAddressesTable({ signerKey }: { signerKey: string }) { + const { currentCycleId } = useSuspenseCurrentStackingCycle(); + const { + data: signerStackers, + isFetchingNextPage, + fetchNextPage, + hasNextPage, + } = useSuspenseSignerStackersInfinite(currentCycleId, signerKey); + + const stackers = useMemo( + () => signerStackers?.pages.flatMap(page => page.results), + [signerStackers] + ); + + return ( +
+ + + {signerStackers?.pages + .flatMap(page => page.results) + .map((stacker, i) => ( + + {stacker.stacker_address} + + + ))} + + + + +
+ ); +} diff --git a/src/app/signer/[signerKey]/CycleSortFilter.tsx b/src/app/signer/[signerKey]/CycleSortFilter.tsx new file mode 100644 index 000000000..d83b2a89b --- /dev/null +++ b/src/app/signer/[signerKey]/CycleSortFilter.tsx @@ -0,0 +1,45 @@ +import { SortDescending } from '@phosphor-icons/react'; +import { useMemo } from 'react'; + +import { FilterMenu } from '../../../common/components/FilterMenu'; + +export enum CycleSortOrder { + Asc = 'asc', + Desc = 'desc', +} + +function getSortOptionLabel(order: CycleSortOrder) { + switch (order) { + case CycleSortOrder.Asc: + return 'Cycle Asc'; + case CycleSortOrder.Desc: + return 'Cycle Desc'; + } +} + +export function CycleSortFilter({ + cycleSortOrder, + setCycleSortOrder, +}: { + cycleSortOrder: CycleSortOrder; + setCycleSortOrder: (order: CycleSortOrder) => void; +}) { + const menuItems = useMemo( + () => + Object.values(CycleSortOrder).map(order => ({ + onClick: () => { + setCycleSortOrder(order); + }, + label: getSortOptionLabel(order), + })), + [setCycleSortOrder] + ); + + return ( + getSortOptionLabel(cycleSortOrder)} + menuItems={menuItems} + leftIcon={SortDescending} + /> + ); +} diff --git a/src/app/signer/[signerKey]/PageClient.tsx b/src/app/signer/[signerKey]/PageClient.tsx new file mode 100644 index 000000000..78e867542 --- /dev/null +++ b/src/app/signer/[signerKey]/PageClient.tsx @@ -0,0 +1,51 @@ +'use client'; + +import { useParams } from 'next/navigation'; + +import { Grid, GridProps } from '../../../ui/Grid'; +import { Stack } from '../../../ui/Stack'; +import { PageTitle } from '../../_components/PageTitle'; +import { AssociatedAddressesTable } from './AssociatedAddressesTable'; +import { SignerKeyStats } from './SignerKeyStats'; +import { SignerKeySummary } from './SignerKeySummary'; +import { StackingHistoryTable } from './StackingHistoryTable'; + +export function SignerKeyPageLayout(props: GridProps) { + return ( + + ); +} + +export default function PageClient() { + const params = useParams<{ signerKey: string }>(); + + if (!params) { + console.error('params is undefined. This component should receive params from its parent.'); + return null; // or some error UI + } + + const { signerKey } = params; + return ( + <> + Signer key + + + + + + + + + + + + + ); +} diff --git a/src/app/signer/[signerKey]/SignerKeyStats.tsx b/src/app/signer/[signerKey]/SignerKeyStats.tsx new file mode 100644 index 000000000..deb29a4fa --- /dev/null +++ b/src/app/signer/[signerKey]/SignerKeyStats.tsx @@ -0,0 +1,48 @@ +import { ExplorerErrorBoundary } from '@/app/_components/ErrorBoundary'; +import { useSuspenseSignerStackers } from '@/app/signers/data/UseSignerAddresses'; +import { Section } from '@/common/components/Section'; +import { Box } from '@/ui/Box'; +import { Stack } from '@/ui/Stack'; +import { Caption } from '@/ui/typography'; + +import { useSuspenseCurrentStackingCycle } from '../../_components/Stats/CurrentStackingCycle/useCurrentStackingCycle'; +import { useSuspensePoxSigner } from '../../signers/data/UseSigner'; + +interface SignerKeyStatsProps { + signerKey: string; +} + +function SignerKeyStatsBase({ signerKey }: SignerKeyStatsProps) { + const { currentCycleId } = useSuspenseCurrentStackingCycle(); + const { data: signerData } = useSuspensePoxSigner(currentCycleId, signerKey); + const { data: signerStackers } = useSuspenseSignerStackers(currentCycleId, signerKey); + + return ( +
+ + Performance + Waiting on the API for the data + + + Total signed transactions + Waiting on the API for the data + + + Slot success rate + Waiting on the API for the data + + + Uptime + Waiting on the API for the data + +
+ ); +} + +export function SignerKeyStats(props: SignerKeyStatsProps) { + return ( + + + + ); +} diff --git a/src/app/signer/[signerKey]/SignerKeySummary.tsx b/src/app/signer/[signerKey]/SignerKeySummary.tsx new file mode 100644 index 000000000..cb7d69e36 --- /dev/null +++ b/src/app/signer/[signerKey]/SignerKeySummary.tsx @@ -0,0 +1,59 @@ +import { useSuspenseSignerStackers } from '@/app/signers/data/UseSignerAddresses'; +import { KeyValueHorizontal } from '@/common/components/KeyValueHorizontal'; +import { Section } from '@/common/components/Section'; +import { Value } from '@/common/components/Value'; +import { microToStacksFormatted } from '@/common/utils/utils'; +import { Box } from '@/ui/Box'; +import { Flex } from '@/ui/Flex'; + +import { getEntityName } from '../../../app/signers/SignersTable'; +import { useSuspenseCurrentStackingCycle } from '../../_components/Stats/CurrentStackingCycle/useCurrentStackingCycle'; +import { useSuspensePoxSigner } from '../../signers/data/UseSigner'; + +interface SignerKeySummaryProps { + signerKey: string; +} +export const SignerKeySummary = ({ signerKey }: SignerKeySummaryProps) => { + const { currentCycleId } = useSuspenseCurrentStackingCycle(); + const { data: signerData } = useSuspensePoxSigner(currentCycleId, signerKey); + const { data: signerStackers } = useSuspenseSignerStackers(currentCycleId, signerKey); + + return ( +
+ + + {signerKey}} + copyValue={signerKey} + /> + {getEntityName(signerKey)}} + copyValue={getEntityName(signerKey)} + /> + {/* {principal}} + copyValue={principal} + /> */} + {signerData?.weight_percent.toFixed(2)}%} + copyValue={signerData?.weight_percent.toFixed(2)} + /> + {microToStacksFormatted(signerData?.stacked_amount)}} + copyValue={microToStacksFormatted(signerData?.stacked_amount)} + /> + {signerStackers?.results.length}} + copyValue={signerStackers?.results.length.toString()} + /> + + +
+ ); +}; diff --git a/src/app/signer/[signerKey]/StackingHistoryTable.tsx b/src/app/signer/[signerKey]/StackingHistoryTable.tsx new file mode 100644 index 000000000..36e28d309 --- /dev/null +++ b/src/app/signer/[signerKey]/StackingHistoryTable.tsx @@ -0,0 +1,281 @@ +import { useColorModeValue } from '@chakra-ui/react'; +import styled from '@emotion/styled'; +import { ReactNode, Suspense, useMemo, useState } from 'react'; + +import { ScrollableBox } from '../../../app/_components/BlockList/ScrollableDiv'; +import { mobileBorderCss } from '../../../app/signers/consts'; +import { StackingHistoryInfo, useSignerStackingHistory } from '../../../app/signers/data/UseSigner'; +import { SignersTableSkeleton } from '../../../app/signers/skeleton'; +import { ListFooter } from '../../../common/components/ListFooter'; +import { Section } from '../../../common/components/Section'; +import { Flex } from '../../../ui/Flex'; +import { Table } from '../../../ui/Table'; +import { Tbody } from '../../../ui/Tbody'; +import { Td } from '../../../ui/Td'; +import { Text } from '../../../ui/Text'; +import { Th } from '../../../ui/Th'; +import { Thead } from '../../../ui/Thead'; +import { Tr } from '../../../ui/Tr'; +import { ExplorerErrorBoundary } from '../../_components/ErrorBoundary'; +import { CycleSortFilter, CycleSortOrder } from './CycleSortFilter'; + +const StyledTable = styled(Table)` + th { + border-bottom: none; + } + + tr:last-child td { + border-bottom: none; + } +`; + +export const SignersTableHeader = ({ + headerTitle, + isFirst, +}: { + headerTitle: string; + isFirst: boolean; +}) => ( + + + + {headerTitle} + + + +); + +export const signersTableHeaders = [ + 'Cycle', + 'Voting power', + 'STX stacked', + 'Latency', + 'Approved', + 'Rejected', + 'Missing', +]; + +export const SignersTableHeaders = () => ( + + {signersTableHeaders.map((header, i) => ( + + ))} + +); + +export const SignerTableRow = ({ + isFirst, + isLast, + cycleid, + votingPower, + stxStacked, + latency, + approved, + rejected, + missing, +}: { + index: number; + isFirst: boolean; + isLast: boolean; +} & SignerRowInfo) => { + return ( + + + + {cycleid} + + + + + {`${votingPower.toFixed(2)}%`} + + + + + {stxStacked.toFixed(0).toLocaleString()} + + + + + {`${latency}ms`} + + + + + {`${(approved * 100).toFixed(2)}%`} + + + + + {`${(rejected * 100).toFixed(2)}%`} + + + + + {`${(missing * 100).toFixed(2)}%`} + + + + ); +}; + +export function SignersTableLayout({ + title, + topRight, + signersTableHeaders, + signersTableRows, + fetchNextPage, + hasNextPage, + isLoading, + isFetching, +}: { + title: ReactNode; + topRight?: ReactNode; + signersTableHeaders: ReactNode; + signersTableRows: ReactNode; + fetchNextPage: () => void; + hasNextPage: boolean; + isLoading: boolean; + isFetching: boolean; +}) { + return ( +
+ + + {signersTableHeaders} + {signersTableRows} + + + +
+ ); +} +interface SignerRowInfo { + signerKey: string; + cycleid: number; + votingPower: number; + stxStacked: number; + latency: number; + approved: number; + rejected: number; + missing: number; +} + +function formatSignerRowData(singerInfo: StackingHistoryInfo): SignerRowInfo { + const totalProposals = + singerInfo.proposals_accepted_count + + singerInfo.proposals_rejected_count + + singerInfo.proposals_missing_count; + return { + signerKey: singerInfo.signing_key, + cycleid: singerInfo.cycleid, + votingPower: singerInfo.weight_percent, + stxStacked: parseFloat(singerInfo.stacked_amount) / 1_000_000, + latency: singerInfo.average_response_time_ms ? singerInfo.average_response_time_ms : 50, + approved: singerInfo.proposals_accepted_count + ? singerInfo.proposals_accepted_count / totalProposals + : 0.85, + rejected: singerInfo.proposals_rejected_count + ? singerInfo.proposals_rejected_count / totalProposals + : 0.1, + missing: singerInfo.proposals_missing_count + ? singerInfo.proposals_missing_count / totalProposals + : 0.05, + }; +} + +const SignersTableBase = ({ signerKey }: { signerKey: string }) => { + const [cycleSortOrder, setCycleSortOrder] = useState(CycleSortOrder.Desc); + + const { signerStackingHistory, fetchNextPage, hasNextPage, isLoading, isFetching } = + useSignerStackingHistory(signerKey); + + const signerData = useMemo( + () => + signerStackingHistory + .map((signer, index) => { + return { + ...formatSignerRowData(signer), + }; + }) + .sort((a, b) => + cycleSortOrder === CycleSortOrder.Desc ? b.cycleid - a.cycleid : a.cycleid - b.cycleid + ), + [signerStackingHistory, cycleSortOrder] + ); + + return ( + + } + title={Stacking history} + signersTableHeaders={} + signersTableRows={signerData.map((cycleData, i) => ( + + ))} + fetchNextPage={fetchNextPage} + hasNextPage={hasNextPage} + isLoading={isLoading} + isFetching={isFetching} + /> + ); +}; + +export const StackingHistoryTable = ({ signerKey }: { signerKey: string }) => { + return ( + + }> + + + + ); +}; diff --git a/src/app/signer/[signerKey]/page.tsx b/src/app/signer/[signerKey]/page.tsx new file mode 100644 index 000000000..6e7f695ee --- /dev/null +++ b/src/app/signer/[signerKey]/page.tsx @@ -0,0 +1,12 @@ +import dynamic from 'next/dynamic'; + +import { Box } from '../../../ui/Box'; + +const Page = dynamic(() => import('./PageClient'), { + loading: () => Loading..., // , // TODO: create a skeleton for the signer page + ssr: false, +}); + +export default async function () { + return ; +} diff --git a/src/app/signers/SignersTable.tsx b/src/app/signers/SignersTable.tsx index a8d46cf05..562816695 100644 --- a/src/app/signers/SignersTable.tsx +++ b/src/app/signers/SignersTable.tsx @@ -3,7 +3,7 @@ import styled from '@emotion/styled'; import { UseQueryResult, useQueries, useQueryClient } from '@tanstack/react-query'; import React, { ReactNode, Suspense, useMemo, useState } from 'react'; -import { AddressLink } from '../../common/components/ExplorerLinks'; +import { AddressLink, ExplorerLink } from '../../common/components/ExplorerLinks'; import { Section } from '../../common/components/Section'; import { ApiResponseWithResultsOffset } from '../../common/types/api'; import { truncateMiddle } from '../../common/utils/utils'; @@ -91,12 +91,12 @@ export const SignersTableHeaders = () => ( ); -function getEntityName(signerKey: string) { +export function getEntityName(signerKey: string) { const entityName = removeStackingDaoFromName(getSignerKeyName(signerKey)); return entityName === 'unknown' ? '-' : entityName; } -const SignerTableRow = ({ +export const SignerTableRow = ({ index, isFirst, isLast, @@ -123,10 +123,17 @@ const SignerTableRow = ({ - + {truncateMiddle(signerKey)} {truncateMiddle(signerKey)} - + @@ -174,28 +181,18 @@ const SignerTableRow = ({ }; export function SignersTableLayout({ - numSigners, + title, + topRight, signersTableHeaders, signersTableRows, - votingPowerSortOrder, - setVotingPowerSortOrder, }: { - numSigners: ReactNode; + title: ReactNode; + topRight?: ReactNode; signersTableHeaders: ReactNode; signersTableRows: ReactNode; - votingPowerSortOrder: VotingPowerSortOrder; - setVotingPowerSortOrder: (order: VotingPowerSortOrder) => void; }) { return ( -
- } - > +
{signersTableHeaders} @@ -212,7 +209,7 @@ interface SignerRowInfo { stackers: SignersStackersData[]; } -function formatSignerRowData( +export function formatSignerRowData( singerInfo: SignerInfo, stackers: SignersStackersData[] ): SignerRowInfo { @@ -267,9 +264,13 @@ const SignersTableBase = () => { return ( {signersData.length} Active Signers} + topRight={ + + } + title={{signersData.length} Active Signers} signersTableHeaders={} signersTableRows={signersData.map((signer, i) => ( ({ + queryKey: [SIGNER_QUERY_KEY, cycleId, signerKey], + queryFn: () => + fetch(`${activeNetworkUrl}/extended/v2/pox/cycles/${cycleId}/signers/${signerKey}`).then( + res => res.json() + ), + staleTime: TWO_MINUTES, + cacheTime: 15 * 60 * 1000, + refetchOnWindowFocus: false, + }); +} + +export function useSuspensePoxSigner(cycleId: number, signerId: string) { + const { url: activeNetworkUrl } = useGlobalContext().activeNetwork; + + return useSuspenseQuery({ + queryKey: [SIGNER_QUERY_KEY, cycleId, signerId], + queryFn: () => + fetch(`${activeNetworkUrl}/extended/v2/pox/cycles/${cycleId}/signers/${signerId}`).then(res => + res.json() + ), + staleTime: TEN_MINUTES, + }); +} + +const DEFAULT_LIST_LIMIT = 5; + +export function useSignerStackingHistory(signerKey: string) { + const { currentCycleId } = useSuspenseCurrentStackingCycle(); + const getQuery = useGetSignerQuery(); + const [offset, setOffset] = useState(0); + const cyclesToQuery = Array.from( + { length: offset + DEFAULT_LIST_LIMIT }, + (_, i) => currentCycleId - i + ); + const queryClient = useQueryClient(); + const queries = useMemo(() => { + return cyclesToQuery.map(cycle => { + return getQuery(cycle, signerKey); + }); + }, [cyclesToQuery, getQuery, signerKey]); + + const signerStackingHistoryQueries = useMemo(() => { + return { + queries, + combine: (response: UseQueryResult[]) => { + return response.map(r => r.data); + }, + }; + }, [queries]); + const signerStackingHistory = useQueries(signerStackingHistoryQueries, queryClient); + + // const isLoading = useMemo(() => + // signerStackingHistory.some(query => query?.isLoading), + // [signerStackingHistory] + // ); + + // const isFetching = useMemo(() => + // signerStackingHistory.some(query => query?.isFetching), + // [signerStackingHistory] + // ); + + const signerStackingHistoryFiltered = useMemo(() => { + return signerStackingHistory + .filter( + (data): data is SignerInfo | SignerError | undefined => data !== null && data !== undefined + ) + .filter((r): r is SignerInfo | SignerError => { + if (r && 'error' in r && 'statusCode' in r) { + return r.statusCode !== 404; + } + return true; + }) + .map((r, index) => ({ + ...(r as SignerInfo), + cycleid: cyclesToQuery[index], + })); + }, [signerStackingHistory, cyclesToQuery]); + + const fetchNextPage = useCallback(() => { + setOffset(prev => prev + DEFAULT_LIST_LIMIT); + }, []); + const found404s = useMemo(() => { + return signerStackingHistory.some(r => { + if (r && 'error' in r && 'statusCode' in r) { + return r.statusCode === 404; + } + return false; + }); + }, [signerStackingHistory]); + + const hasNextPage = useMemo(() => { + return !found404s; + }, [found404s]); + + return { + signerStackingHistory: signerStackingHistoryFiltered, + fetchNextPage, + hasNextPage, + isLoading: false, // TODO: add loading state + isFetching: false, // TODO: add loading state + }; +} diff --git a/src/app/signers/data/UseSignerAddresses.ts b/src/app/signers/data/UseSignerAddresses.ts index 293606b5b..182525928 100644 --- a/src/app/signers/data/UseSignerAddresses.ts +++ b/src/app/signers/data/UseSignerAddresses.ts @@ -1,21 +1,31 @@ // Add missing import statement -import { useSuspenseQuery } from '@tanstack/react-query'; +import { + InfiniteData, + UseInfiniteQueryResult, + useInfiniteQuery, + useSuspenseQuery, +} from '@tanstack/react-query'; import { useGlobalContext } from '../../../common/context/useGlobalContext'; +import { GenericResponseType } from '../../../common/hooks/useInfiniteQueryResult'; import { TEN_MINUTES, TWO_MINUTES } from '../../../common/queries/query-stale-time'; +import { ApiResponseWithResultsOffset } from '../../../common/types/api'; +import { getNextPageParam } from '../../../common/utils/utils'; -const SIGNER_ADDRESSES_QUERY_KEY = 'signer-addresses'; +const SIGNER_STACKERS_QUERY_KEY = 'signer-stackers'; +const SIGNER_STACKERS_INFINITE_QUERY_KEY = 'signer-stackers-infinite'; export interface SignersStackersData { stacker_address: string; stacked_amount: string; pox_address: string; + stacker_type: string; } export function useGetStackersBySignerQuery() { const { url: activeNetworkUrl } = useGlobalContext().activeNetwork; return (cycleId: number, signerKey: string) => ({ - queryKey: [SIGNER_ADDRESSES_QUERY_KEY, cycleId, signerKey], + queryKey: [SIGNER_STACKERS_QUERY_KEY, cycleId, signerKey], queryFn: () => fetch( `${activeNetworkUrl}/extended/v2/pox/cycles/${cycleId}/signers/${signerKey}/stackers` @@ -26,15 +36,59 @@ export function useGetStackersBySignerQuery() { }); } -export function useSuspenseSignerAddresses(cycleId: number, signerKey: string) { +export function useSuspenseSignerStackers(cycleId: number, signerKey: string) { const { url: activeNetworkUrl } = useGlobalContext().activeNetwork; - return useSuspenseQuery({ - queryKey: [SIGNER_ADDRESSES_QUERY_KEY, cycleId, signerKey], + return useSuspenseQuery>({ + queryKey: [SIGNER_STACKERS_QUERY_KEY, cycleId, signerKey], queryFn: () => - fetch(`${activeNetworkUrl}/extended/v2/pox/cycles/${cycleId}/signers/${signerKey}`).then( - res => res.json() - ), + fetch( + `${activeNetworkUrl}/extended/v2/pox/cycles/${cycleId}/signers/${signerKey}/stackers` + ).then(res => res.json()), staleTime: TEN_MINUTES, }); } + +const DEFAULT_LIST_LIMIT = 10; + +const fetchStackers = async ( + apiUrl: string, + cycleId: number, + signerKey: string, + pageParam: number, + options: any +): Promise> => { + const limit = options.limit || DEFAULT_LIST_LIMIT; + const offset = pageParam || 0; + const queryString = new URLSearchParams({ + limit: limit.toString(), + offset: offset.toString(), + }).toString(); + const response = await fetch( + `${apiUrl}/extended/v2/pox/cycles/${cycleId}/signers/${signerKey}/stackers${ + queryString ? `?${queryString}` : '' + }` + ); + return response.json(); +}; + +export function useSuspenseSignerStackersInfinite( + cycleId: number, + signerKey: string, + options: any = {} +): UseInfiniteQueryResult>> { + // const api = useApi(); + // if (!address) throw new Error('Address is required'); + const { url: activeNetworkUrl } = useGlobalContext().activeNetwork; + + return useInfiniteQuery>({ + queryKey: [SIGNER_STACKERS_INFINITE_QUERY_KEY, cycleId, signerKey], + queryFn: ({ pageParam }: { pageParam: number }) => + fetchStackers(activeNetworkUrl, cycleId, signerKey, pageParam, options), + getNextPageParam, + initialPageParam: 0, + staleTime: TWO_MINUTES, + enabled: !!cycleId && !!signerKey, + ...options, + }); +}