From c7489cb33fc425fd9a73781c9fba741aebd556a2 Mon Sep 17 00:00:00 2001 From: Innei Date: Sat, 21 Oct 2023 15:38:42 +0800 Subject: [PATCH] feat: ack read count --- package.json | 14 +- pnpm-lock.yaml | 516 +++++++++--------- src/app/notes/[id]/pageImpl.tsx | 2 + .../[category]/[slug]/pageImpl.tsx | 2 + src/components/common/AckRead.tsx | 14 + src/hooks/biz/use-ack-read-count.ts | 15 + src/lib/request.ts | 11 +- 7 files changed, 318 insertions(+), 256 deletions(-) create mode 100644 src/components/common/AckRead.tsx create mode 100644 src/hooks/biz/use-ack-read-count.ts diff --git a/package.json b/package.json index 765fd1a157..821cfc70ff 100644 --- a/package.json +++ b/package.json @@ -38,12 +38,12 @@ "dependencies": { "@clerk/nextjs": "4.25.6", "@floating-ui/react-dom": "2.0.2", - "@mx-space/api-client": "1.5.1", + "@mx-space/api-client": "1.6.2", "@radix-ui/react-dialog": "1.0.5", "@radix-ui/react-select": "2.0.0", "@tanstack/query-async-storage-persister": "5.0.0", "@tanstack/react-query": "5.0.0", - "@tanstack/react-query-devtools": "5.0.1", + "@tanstack/react-query-devtools": "5.0.3", "@tanstack/react-query-persist-client": "5.0.0", "@vercel/analytics": "1.1.1", "@vercel/postgres": "0.5.0", @@ -62,7 +62,7 @@ "js-cookie": "3.0.5", "markdown-to-jsx": "npm:@innei/markdown-to-jsx@7.2.1-beta.0", "medium-zoom": "1.0.8", - "mermaid": "10.5.0", + "mermaid": "10.5.1", "next": "13.5.6", "next-themes": "0.2.1", "openai": "4.12.4", @@ -82,7 +82,7 @@ }, "devDependencies": { "@iconify-json/material-symbols": "1.1.60", - "@iconify-json/mingcute": "1.1.10", + "@iconify-json/mingcute": "1.1.11", "@iconify/tailwind": "0.1.3", "@innei/eslint-config-react-ts": "0.11.1", "@innei/prettier": "0.11.1", @@ -91,15 +91,15 @@ "@types/js-cookie": "3.0.5", "@types/markdown-escape": "1.1.2", "@types/node": "20.8.7", - "@types/react": "18.2.29", + "@types/react": "18.2.31", "@types/react-dom": "18.2.14", "@types/remove-markdown": "0.3.3", "autoprefixer": "10.4.16", "cross-env": "7.0.3", "dotenv": "16.3.1", - "eslint": "8.51.0", + "eslint": "8.52.0", "husky": "8.0.3", - "lint-staged": "15.0.1", + "lint-staged": "15.0.2", "postcss": "8.4.31", "postcss-import": "15.1.0", "postcss-nested": "6.0.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ae21998eb6..9630398d84 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,14 +27,14 @@ dependencies: specifier: 2.0.2 version: 2.0.2(react-dom@18.2.0)(react@18.2.0) '@mx-space/api-client': - specifier: 1.5.1 - version: 1.5.1 + specifier: 1.6.2 + version: 1.6.2 '@radix-ui/react-dialog': specifier: 1.0.5 - version: 1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-select': specifier: 2.0.0 - version: 2.0.0(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0) + version: 2.0.0(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) '@tanstack/query-async-storage-persister': specifier: 5.0.0 version: 5.0.0 @@ -42,8 +42,8 @@ dependencies: specifier: 5.0.0 version: 5.0.0(react-dom@18.2.0)(react@18.2.0) '@tanstack/react-query-devtools': - specifier: 5.0.1 - version: 5.0.1(@tanstack/react-query@5.0.0)(react-dom@18.2.0)(react@18.2.0) + specifier: 5.0.3 + version: 5.0.3(@tanstack/react-query@5.0.0)(react-dom@18.2.0)(react@18.2.0) '@tanstack/react-query-persist-client': specifier: 5.0.0 version: 5.0.0(@tanstack/react-query@5.0.0)(react-dom@18.2.0)(react@18.2.0) @@ -88,7 +88,7 @@ dependencies: version: 0.1.1(immer@10.0.3)(jotai@2.4.3)(react@18.2.0) jotai: specifier: 2.4.3 - version: 2.4.3(@types/react@18.2.29)(react@18.2.0) + version: 2.4.3(@types/react@18.2.31)(react@18.2.0) js-cookie: specifier: 3.0.5 version: 3.0.5 @@ -99,8 +99,8 @@ dependencies: specifier: 1.0.8 version: 1.0.8 mermaid: - specifier: 10.5.0 - version: 10.5.0 + specifier: 10.5.1 + version: 10.5.1 next: specifier: 13.5.6 version: 13.5.6(@babel/core@7.23.0)(react-dom@18.2.0)(react@18.2.0) @@ -155,8 +155,8 @@ devDependencies: specifier: 1.1.60 version: 1.1.60 '@iconify-json/mingcute': - specifier: 1.1.10 - version: 1.1.10 + specifier: 1.1.11 + version: 1.1.11 '@iconify/tailwind': specifier: 0.1.3 version: 0.1.3 @@ -182,8 +182,8 @@ devDependencies: specifier: 20.8.7 version: 20.8.7 '@types/react': - specifier: 18.2.29 - version: 18.2.29 + specifier: 18.2.31 + version: 18.2.31 '@types/react-dom': specifier: 18.2.14 version: 18.2.14 @@ -200,14 +200,14 @@ devDependencies: specifier: 16.3.1 version: 16.3.1 eslint: - specifier: 8.51.0 - version: 8.51.0 + specifier: 8.52.0 + version: 8.52.0 husky: specifier: 8.0.3 version: 8.0.3 lint-staged: - specifier: 15.0.1 - version: 15.0.1 + specifier: 15.0.2 + version: 15.0.2 postcss: specifier: 8.4.31 version: 8.4.31 @@ -1410,13 +1410,13 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.51.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.52.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.51.0 + eslint: 8.52.0 eslint-visitor-keys: 3.4.3 dev: true @@ -1442,8 +1442,8 @@ packages: - supports-color dev: true - /@eslint/js@8.51.0: - resolution: {integrity: sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==} + /@eslint/js@8.52.0: + resolution: {integrity: sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -1475,11 +1475,11 @@ packages: resolution: {integrity: sha512-m0G6wlnhm/AX0H12IOWtK8gASEMffnX08RtKkCgTdHb9JpHKGloI7icFfLg9ZmQeavcvR0PKmzxClyuFPSjKWw==} dev: false - /@humanwhocodes/config-array@0.11.11: - resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==} + /@humanwhocodes/config-array@0.11.13: + resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} engines: {node: '>=10.10.0'} dependencies: - '@humanwhocodes/object-schema': 1.2.1 + '@humanwhocodes/object-schema': 2.0.1 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: @@ -1491,8 +1491,8 @@ packages: engines: {node: '>=12.22'} dev: true - /@humanwhocodes/object-schema@1.2.1: - resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + /@humanwhocodes/object-schema@2.0.1: + resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} dev: true /@ianvs/prettier-plugin-sort-imports@4.0.2(prettier@3.0.3): @@ -1521,8 +1521,8 @@ packages: '@iconify/types': 2.0.0 dev: true - /@iconify-json/mingcute@1.1.10: - resolution: {integrity: sha512-0PMgTc9RqLN8IZn5Icsu3mPmtruLS4TfecyNd6FuZ8q5e1EnsXIaV6K4J7ybiVxqCzXig5N/KxSceUonvhlhHA==} + /@iconify-json/mingcute@1.1.11: + resolution: {integrity: sha512-LHPhOVVWgC3QzTfkifWAzn/fdw6VM3V8R9XtQ+pl2+znKto5PUKDeTsO8V8rtxXaaSUcuEd5LePIC6J5eqMarA==} dependencies: '@iconify/types': 2.0.0 dev: true @@ -1543,9 +1543,9 @@ packages: typescript: '>=4' dependencies: '@innei/eslint-config-ts': 0.11.1(typescript@5.2.2) - eslint: 8.51.0 - eslint-plugin-react: 7.32.2(eslint@8.51.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.51.0) + eslint: 8.52.0 + eslint-plugin-react: 7.32.2(eslint@8.52.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.52.0) typescript: 5.2.2 transitivePeerDependencies: - eslint-import-resolver-typescript @@ -1558,12 +1558,12 @@ packages: peerDependencies: typescript: '>=4' dependencies: - '@typescript-eslint/eslint-plugin': 6.0.0(@typescript-eslint/parser@6.8.0)(eslint@8.51.0)(typescript@5.2.2) - '@typescript-eslint/parser': 6.8.0(eslint@8.51.0)(typescript@5.2.2) - eslint: 8.51.0 - eslint-config-prettier: 8.10.0(eslint@8.51.0) - eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.8.0)(eslint@8.51.0) - eslint-plugin-unused-imports: 3.0.0(@typescript-eslint/eslint-plugin@6.0.0)(eslint@8.51.0) + '@typescript-eslint/eslint-plugin': 6.0.0(@typescript-eslint/parser@6.8.0)(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.8.0(eslint@8.52.0)(typescript@5.2.2) + eslint: 8.52.0 + eslint-config-prettier: 8.10.0(eslint@8.52.0) + eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.8.0)(eslint@8.52.0) + eslint-plugin-unused-imports: 3.0.0(@typescript-eslint/eslint-plugin@6.0.0)(eslint@8.52.0) typescript: 5.2.2 transitivePeerDependencies: - eslint-import-resolver-typescript @@ -1656,8 +1656,8 @@ packages: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 - /@mx-space/api-client@1.5.1: - resolution: {integrity: sha512-bNMDcFu/G2xzgk2ZV3ZUp3Rkq9+wKR/REFjGdTZEgkLCa9KzqvQ3/bhtvl9wciuVR83M+dZjDqlWTeGfQNpHUQ==} + /@mx-space/api-client@1.6.2: + resolution: {integrity: sha512-NjLj3SQMYoNtcTsl7fyJurkawHBqK8hg7IKdpjl1pEtDL1zpgrReH9YqMfU9so7ywllh/LUncX2xpHKI+OsCOg==} dev: false /@neondatabase/serverless@0.6.0: @@ -1925,7 +1925,7 @@ packages: '@babel/runtime': 7.22.10 dev: false - /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} peerDependencies: '@types/react': '*' @@ -1939,14 +1939,14 @@ packages: optional: true dependencies: '@babel/runtime': 7.23.1 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.29 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.31 '@types/react-dom': 18.2.14 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-collection@1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-collection@1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} peerDependencies: '@types/react': '*' @@ -1960,17 +1960,17 @@ packages: optional: true dependencies: '@babel/runtime': 7.23.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.29)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.29)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.29)(react@18.2.0) - '@types/react': 18.2.29 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.31)(react@18.2.0) + '@types/react': 18.2.31 '@types/react-dom': 18.2.14 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.29)(react@18.2.0): + /@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.31)(react@18.2.0): resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} peerDependencies: '@types/react': '*' @@ -1980,11 +1980,11 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.10 - '@types/react': 18.2.29 + '@types/react': 18.2.31 react: 18.2.0 dev: false - /@radix-ui/react-context@1.0.1(@types/react@18.2.29)(react@18.2.0): + /@radix-ui/react-context@1.0.1(@types/react@18.2.31)(react@18.2.0): resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} peerDependencies: '@types/react': '*' @@ -1994,11 +1994,11 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.10 - '@types/react': 18.2.29 + '@types/react': 18.2.31 react: 18.2.0 dev: false - /@radix-ui/react-dialog@1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-dialog@1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==} peerDependencies: '@types/react': '*' @@ -2013,26 +2013,26 @@ packages: dependencies: '@babel/runtime': 7.22.10 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.29)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.29)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.29)(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.29)(react@18.2.0) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.29)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.29)(react@18.2.0) - '@types/react': 18.2.29 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@types/react': 18.2.31 '@types/react-dom': 18.2.14 aria-hidden: 1.2.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-remove-scroll: 2.5.5(@types/react@18.2.29)(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.2.31)(react@18.2.0) dev: false - /@radix-ui/react-direction@1.0.1(@types/react@18.2.29)(react@18.2.0): + /@radix-ui/react-direction@1.0.1(@types/react@18.2.31)(react@18.2.0): resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} peerDependencies: '@types/react': '*' @@ -2042,11 +2042,11 @@ packages: optional: true dependencies: '@babel/runtime': 7.23.1 - '@types/react': 18.2.29 + '@types/react': 18.2.31 react: 18.2.0 dev: false - /@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==} peerDependencies: '@types/react': '*' @@ -2061,17 +2061,17 @@ packages: dependencies: '@babel/runtime': 7.22.10 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.29)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.29)(react@18.2.0) - '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.2.29)(react@18.2.0) - '@types/react': 18.2.29 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.2.31)(react@18.2.0) + '@types/react': 18.2.31 '@types/react-dom': 18.2.14 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-focus-guards@1.0.1(@types/react@18.2.29)(react@18.2.0): + /@radix-ui/react-focus-guards@1.0.1(@types/react@18.2.31)(react@18.2.0): resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} peerDependencies: '@types/react': '*' @@ -2081,11 +2081,11 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.10 - '@types/react': 18.2.29 + '@types/react': 18.2.31 react: 18.2.0 dev: false - /@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==} peerDependencies: '@types/react': '*' @@ -2099,16 +2099,16 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.10 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.29)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.29)(react@18.2.0) - '@types/react': 18.2.29 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@types/react': 18.2.31 '@types/react-dom': 18.2.14 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-id@1.0.1(@types/react@18.2.29)(react@18.2.0): + /@radix-ui/react-id@1.0.1(@types/react@18.2.31)(react@18.2.0): resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} peerDependencies: '@types/react': '*' @@ -2118,12 +2118,12 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.10 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.29)(react@18.2.0) - '@types/react': 18.2.29 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@types/react': 18.2.31 react: 18.2.0 dev: false - /@radix-ui/react-popper@1.1.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-popper@1.1.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==} peerDependencies: '@types/react': '*' @@ -2138,22 +2138,22 @@ packages: dependencies: '@babel/runtime': 7.23.1 '@floating-ui/react-dom': 2.0.2(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.29)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.29)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.29)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.29)(react@18.2.0) - '@radix-ui/react-use-rect': 1.0.1(@types/react@18.2.29)(react@18.2.0) - '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.29)(react@18.2.0) + '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-use-rect': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.31)(react@18.2.0) '@radix-ui/rect': 1.0.1 - '@types/react': 18.2.29 + '@types/react': 18.2.31 '@types/react-dom': 18.2.14 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-portal@1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-portal@1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==} peerDependencies: '@types/react': '*' @@ -2167,14 +2167,14 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.10 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.29 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.31 '@types/react-dom': 18.2.14 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-presence@1.0.1(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-presence@1.0.1(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} peerDependencies: '@types/react': '*' @@ -2188,15 +2188,15 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.10 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.29)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.29)(react@18.2.0) - '@types/react': 18.2.29 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@types/react': 18.2.31 '@types/react-dom': 18.2.14 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} peerDependencies: '@types/react': '*' @@ -2210,14 +2210,14 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.10 - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.29)(react@18.2.0) - '@types/react': 18.2.29 + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.31)(react@18.2.0) + '@types/react': 18.2.31 '@types/react-dom': 18.2.14 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-select@2.0.0(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-select@2.0.0(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-RH5b7af4oHtkcHS7pG6Sgv5rk5Wxa7XI8W5gvB1N/yiuDGZxko1ynvOiVhFM7Cis2A8zxF9bTOUVbRDzPepe6w==} peerDependencies: '@types/react': '*' @@ -2233,32 +2233,32 @@ packages: '@babel/runtime': 7.23.1 '@radix-ui/number': 1.0.1 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.29)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.29)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.29)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.29)(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.29)(react@18.2.0) - '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.29)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.29)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.29)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.29)(react@18.2.0) - '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.29)(react@18.2.0) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.29 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.31 '@types/react-dom': 18.2.14 aria-hidden: 1.2.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-remove-scroll: 2.5.5(@types/react@18.2.29)(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.2.31)(react@18.2.0) dev: false - /@radix-ui/react-slot@1.0.2(@types/react@18.2.29)(react@18.2.0): + /@radix-ui/react-slot@1.0.2(@types/react@18.2.31)(react@18.2.0): resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} peerDependencies: '@types/react': '*' @@ -2268,12 +2268,12 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.10 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.29)(react@18.2.0) - '@types/react': 18.2.29 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@types/react': 18.2.31 react: 18.2.0 dev: false - /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.29)(react@18.2.0): + /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.31)(react@18.2.0): resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} peerDependencies: '@types/react': '*' @@ -2283,11 +2283,11 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.10 - '@types/react': 18.2.29 + '@types/react': 18.2.31 react: 18.2.0 dev: false - /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.29)(react@18.2.0): + /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.31)(react@18.2.0): resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} peerDependencies: '@types/react': '*' @@ -2297,12 +2297,12 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.10 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.29)(react@18.2.0) - '@types/react': 18.2.29 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@types/react': 18.2.31 react: 18.2.0 dev: false - /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.29)(react@18.2.0): + /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.31)(react@18.2.0): resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} peerDependencies: '@types/react': '*' @@ -2312,12 +2312,12 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.10 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.29)(react@18.2.0) - '@types/react': 18.2.29 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@types/react': 18.2.31 react: 18.2.0 dev: false - /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.29)(react@18.2.0): + /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.31)(react@18.2.0): resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} peerDependencies: '@types/react': '*' @@ -2327,11 +2327,11 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.10 - '@types/react': 18.2.29 + '@types/react': 18.2.31 react: 18.2.0 dev: false - /@radix-ui/react-use-previous@1.0.1(@types/react@18.2.29)(react@18.2.0): + /@radix-ui/react-use-previous@1.0.1(@types/react@18.2.31)(react@18.2.0): resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} peerDependencies: '@types/react': '*' @@ -2341,11 +2341,11 @@ packages: optional: true dependencies: '@babel/runtime': 7.23.1 - '@types/react': 18.2.29 + '@types/react': 18.2.31 react: 18.2.0 dev: false - /@radix-ui/react-use-rect@1.0.1(@types/react@18.2.29)(react@18.2.0): + /@radix-ui/react-use-rect@1.0.1(@types/react@18.2.31)(react@18.2.0): resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} peerDependencies: '@types/react': '*' @@ -2356,11 +2356,11 @@ packages: dependencies: '@babel/runtime': 7.23.1 '@radix-ui/rect': 1.0.1 - '@types/react': 18.2.29 + '@types/react': 18.2.31 react: 18.2.0 dev: false - /@radix-ui/react-use-size@1.0.1(@types/react@18.2.29)(react@18.2.0): + /@radix-ui/react-use-size@1.0.1(@types/react@18.2.31)(react@18.2.0): resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} peerDependencies: '@types/react': '*' @@ -2370,12 +2370,12 @@ packages: optional: true dependencies: '@babel/runtime': 7.23.1 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.29)(react@18.2.0) - '@types/react': 18.2.29 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.31)(react@18.2.0) + '@types/react': 18.2.31 react: 18.2.0 dev: false - /@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} peerDependencies: '@types/react': '*' @@ -2389,8 +2389,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.23.1 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.29 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.31)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.31 '@types/react-dom': 18.2.14 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -2440,8 +2440,8 @@ packages: resolution: {integrity: sha512-Y1BpiA6BblJd/UlVqxEVeAG7IACn568YJuTTItAiecBI7En+33g780kg+/8lhgl+BzcUPN7o+NjBrSRGJoemyQ==} dev: false - /@tanstack/query-devtools@5.0.0: - resolution: {integrity: sha512-WATg9+nreAmtTRHzxvCFN6j4ucUVbkJNd8ErcYmf7Y6GsJw/BGscd4rWS7cdAP7zfTcPjHjGaRB041pcv8dNvA==} + /@tanstack/query-devtools@5.0.3: + resolution: {integrity: sha512-SSMdlbkqBsQXL4fE62LNgJGUj5x88DS2k/lBbrA7xn8l1j050hqiAzSO+SzG75T+oKGwwINapTJ8IjWAIdPqmw==} dev: false /@tanstack/query-persist-client-core@5.0.0: @@ -2450,14 +2450,14 @@ packages: '@tanstack/query-core': 5.0.0 dev: false - /@tanstack/react-query-devtools@5.0.1(@tanstack/react-query@5.0.0)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-AM1Cx29jnryisTDLetjQB5eg46ax8th1/qADqfV/leWmKEQGCVohkT+JmpXEGQJ4X6MzJYiyoC6YQBdS82jR+w==} + /@tanstack/react-query-devtools@5.0.3(@tanstack/react-query@5.0.0)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Q/SmDwV596+BFG+qZWABXG1jOjCtZrnZW+4AXm9xQMCsyM6EiPg97+xD05o5KYcKdvqlAu8o3fi7HKjefTi76Q==} peerDependencies: '@tanstack/react-query': ^5.0.0 react: ^18.0.0 react-dom: ^18.0.0 dependencies: - '@tanstack/query-devtools': 5.0.0 + '@tanstack/query-devtools': 5.0.3 '@tanstack/react-query': 5.0.0(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -2515,24 +2515,24 @@ packages: '@types/node': 20.8.7 dev: false - /@types/d3-scale-chromatic@3.0.0: - resolution: {integrity: sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw==} + /@types/d3-scale-chromatic@3.0.1: + resolution: {integrity: sha512-Ob7OrwiTeQXY/WBBbRHGZBOn6rH1h7y3jjpTSKYqDEeqFjktql6k2XSgNwLrLDmAsXhEn8P9NHDY4VTuo0ZY1w==} dev: false - /@types/d3-scale@4.0.5: - resolution: {integrity: sha512-w/C++3W394MHzcLKO2kdsIn5KKNTOqeQVzyPSGPLzQbkPw/jpeaGtSRlakcKevGgGsjJxGsbqS0fPrVFDbHrDA==} + /@types/d3-scale@4.0.6: + resolution: {integrity: sha512-lo3oMLSiqsQUovv8j15X4BNEDOsnHuGjeVg7GRbAuB2PUa1prK5BNSOu6xixgNf3nqxPl4I1BqJWrPvFGlQoGQ==} dependencies: - '@types/d3-time': 3.0.1 + '@types/d3-time': 3.0.2 dev: false - /@types/d3-time@3.0.1: - resolution: {integrity: sha512-5j/AnefKAhCw4HpITmLDTPlf4vhi8o/dES+zbegfPb7LaGfNyqkLxBR6E+4yvTAgnJLmhe80EXFMzUs38fw4oA==} + /@types/d3-time@3.0.2: + resolution: {integrity: sha512-kbdRXTmUgNfw5OTE3KZnFQn6XdIc4QGroN5UixgdrXATmYsdlPQS6pEut9tVlIojtzuFD4txs/L+Rq41AHtLpg==} dev: false - /@types/debug@4.1.9: - resolution: {integrity: sha512-8Hz50m2eoS56ldRlepxSBa6PWEVCtzUo/92HgLc2qTMnotJNIm7xP+UZhyWoYsyOdd5dxZ+NZLb24rsKyFs2ow==} + /@types/debug@4.1.10: + resolution: {integrity: sha512-tOSCru6s732pofZ+sMv9o4o3Zc+Sa8l3bxd/tweTQudFn06vAzb13ZX46Zi6m6EJ+RUbRTHvgQJ1gBtSgkaUYA==} dependencies: - '@types/ms': 0.7.32 + '@types/ms': 0.7.33 dev: false /@types/express-serve-static-core@4.17.38: @@ -2590,10 +2590,10 @@ packages: resolution: {integrity: sha512-esBZgSpr3SAFutILdjvZxmwsiK8sdY9sZhDkJBrXKjWgibo5/z6hx9d4eHE4uaFuAvNyD7mshvkiNvUnyT+Vhg==} dev: true - /@types/mdast@3.0.13: - resolution: {integrity: sha512-HjiGiWedR0DVFkeNljpa6Lv4/IZU1+30VY5d747K7lBudFc3R0Ibr6yJ9lN3BE28VnZyDfLF/VB1Ql1ZIbKrmg==} + /@types/mdast@3.0.14: + resolution: {integrity: sha512-gVZ04PGgw1qLZKsnWnyFv4ORnaJ+DXLdHTVSFbU8yX6xZ34Bjg4Q32yPkmveUP1yItXReKfB0Aknlh/3zxTKAw==} dependencies: - '@types/unist': 2.0.8 + '@types/unist': 2.0.9 dev: false /@types/mime@1.3.4: @@ -2608,8 +2608,8 @@ packages: resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} dev: true - /@types/ms@0.7.32: - resolution: {integrity: sha512-xPSg0jm4mqgEkNhowKgZFBNtwoEwF6gJ4Dhww+GFpm3IgtNseHQZ5IqdNwnquZEoANxyDAKDRAdVo4Z72VvD/g==} + /@types/ms@0.7.33: + resolution: {integrity: sha512-AuHIyzR5Hea7ij0P9q7vx7xu4z0C28ucwjAZC0ja7JhINyCnOw8/DnvAPQQ9TfOlCtZAmCERKQX9+o1mgQhuOQ==} dev: false /@types/node-fetch@2.6.2: @@ -2672,10 +2672,10 @@ packages: /@types/react-dom@18.2.14: resolution: {integrity: sha512-V835xgdSVmyQmI1KLV2BEIUgqEuinxp9O4G6g3FqO/SqLac049E53aysv0oEFD2kHfejeKU+ZqL2bcFWj9gLAQ==} dependencies: - '@types/react': 18.2.29 + '@types/react': 18.2.31 - /@types/react@18.2.29: - resolution: {integrity: sha512-Z+ZrIRocWtdD70j45izShRwDuiB4JZqDegqMFW/I8aG5DxxLKOzVNoq62UIO82v9bdgi+DO1jvsb9sTEZUSm+Q==} + /@types/react@18.2.31: + resolution: {integrity: sha512-c2UnPv548q+5DFh03y8lEDeMfDwBn9G3dRwfkrxQMo/dOtRHUUO57k6pHvBIfH/VF4Nh+98mZ5aaSe+2echD5g==} dependencies: '@types/prop-types': 15.7.9 '@types/scheduler': 0.16.5 @@ -2707,15 +2707,15 @@ packages: '@types/node': 20.8.7 dev: false - /@types/unist@2.0.8: - resolution: {integrity: sha512-d0XxK3YTObnWVp6rZuev3c49+j4Lo8g4L1ZRm9z5L0xpoZycUPshHgczK5gsUMaZOstjVYYi09p5gYvUtfChYw==} + /@types/unist@2.0.9: + resolution: {integrity: sha512-zC0iXxAv1C1ERURduJueYzkzZ2zaGyc+P2c95hgkikHPr3z8EdUZOlgEQ5X0DRmwDZn+hekycQnoeiiRVrmilQ==} dev: false /@types/which@3.0.0: resolution: {integrity: sha512-ASCxdbsrwNfSMXALlC3Decif9rwDMu+80KGp5zI2RLRotfMsTv7fHL8W8VDp24wymzDyIFudhUeSCugrgRFfHQ==} dev: true - /@typescript-eslint/eslint-plugin@6.0.0(@typescript-eslint/parser@6.8.0)(eslint@8.51.0)(typescript@5.2.2): + /@typescript-eslint/eslint-plugin@6.0.0(@typescript-eslint/parser@6.8.0)(eslint@8.52.0)(typescript@5.2.2): resolution: {integrity: sha512-xuv6ghKGoiq856Bww/yVYnXGsKa588kY3M0XK7uUW/3fJNNULKRfZfSBkMTSpqGG/8ZCXCadfh8G/z/B4aqS/A==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2727,13 +2727,13 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.9.1 - '@typescript-eslint/parser': 6.8.0(eslint@8.51.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.8.0(eslint@8.52.0)(typescript@5.2.2) '@typescript-eslint/scope-manager': 6.0.0 - '@typescript-eslint/type-utils': 6.0.0(eslint@8.51.0)(typescript@5.2.2) - '@typescript-eslint/utils': 6.0.0(eslint@8.51.0)(typescript@5.2.2) + '@typescript-eslint/type-utils': 6.0.0(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/utils': 6.0.0(eslint@8.52.0)(typescript@5.2.2) '@typescript-eslint/visitor-keys': 6.0.0 debug: 4.3.4 - eslint: 8.51.0 + eslint: 8.52.0 grapheme-splitter: 1.0.4 graphemer: 1.4.0 ignore: 5.2.4 @@ -2746,7 +2746,7 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@6.8.0(eslint@8.51.0)(typescript@5.2.2): + /@typescript-eslint/parser@6.8.0(eslint@8.52.0)(typescript@5.2.2): resolution: {integrity: sha512-5tNs6Bw0j6BdWuP8Fx+VH4G9fEPDxnVI7yH1IAPkQH5RUtvKwRoqdecAPdQXv4rSOADAaz1LFBZvZG7VbXivSg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2761,7 +2761,7 @@ packages: '@typescript-eslint/typescript-estree': 6.8.0(typescript@5.2.2) '@typescript-eslint/visitor-keys': 6.8.0 debug: 4.3.4 - eslint: 8.51.0 + eslint: 8.52.0 typescript: 5.2.2 transitivePeerDependencies: - supports-color @@ -2783,7 +2783,7 @@ packages: '@typescript-eslint/visitor-keys': 6.8.0 dev: true - /@typescript-eslint/type-utils@6.0.0(eslint@8.51.0)(typescript@5.2.2): + /@typescript-eslint/type-utils@6.0.0(eslint@8.52.0)(typescript@5.2.2): resolution: {integrity: sha512-ah6LJvLgkoZ/pyJ9GAdFkzeuMZ8goV6BH7eC9FPmojrnX9yNCIsfjB+zYcnex28YO3RFvBkV6rMV6WpIqkPvoQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2794,9 +2794,9 @@ packages: optional: true dependencies: '@typescript-eslint/typescript-estree': 6.0.0(typescript@5.2.2) - '@typescript-eslint/utils': 6.0.0(eslint@8.51.0)(typescript@5.2.2) + '@typescript-eslint/utils': 6.0.0(eslint@8.52.0)(typescript@5.2.2) debug: 4.3.4 - eslint: 8.51.0 + eslint: 8.52.0 ts-api-utils: 1.0.3(typescript@5.2.2) typescript: 5.2.2 transitivePeerDependencies: @@ -2855,19 +2855,19 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@6.0.0(eslint@8.51.0)(typescript@5.2.2): + /@typescript-eslint/utils@6.0.0(eslint@8.52.0)(typescript@5.2.2): resolution: {integrity: sha512-SOr6l4NB6HE4H/ktz0JVVWNXqCJTOo/mHnvIte1ZhBQ0Cvd04x5uKZa3zT6tiodL06zf5xxdK8COiDvPnQ27JQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) '@types/json-schema': 7.0.14 '@types/semver': 7.5.4 '@typescript-eslint/scope-manager': 6.0.0 '@typescript-eslint/types': 6.0.0 '@typescript-eslint/typescript-estree': 6.0.0(typescript@5.2.2) - eslint: 8.51.0 + eslint: 8.52.0 eslint-scope: 5.1.1 semver: 7.5.4 transitivePeerDependencies: @@ -2891,6 +2891,10 @@ packages: eslint-visitor-keys: 3.4.3 dev: true + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: true + /@vercel/analytics@1.1.1: resolution: {integrity: sha512-+NqgNmSabg3IFfxYhrWCfB/H+RCUOCR5ExRudNG2+pcRehq628DJB5e1u1xqwpLtn4pAYii4D98w7kofORAGQA==} dependencies: @@ -3976,26 +3980,26 @@ packages: engines: {node: '>=10'} dev: true - /eslint-config-prettier@8.10.0(eslint@8.51.0): + /eslint-config-prettier@8.10.0(eslint@8.52.0): resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.51.0 + eslint: 8.52.0 dev: true /eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} dependencies: debug: 3.2.7 - is-core-module: 2.13.0 + is-core-module: 2.13.1 resolve: 1.22.8 transitivePeerDependencies: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.8.0)(eslint-import-resolver-node@0.3.9)(eslint@8.51.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.8.0)(eslint-import-resolver-node@0.3.9)(eslint@8.52.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -4016,15 +4020,15 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.8.0(eslint@8.51.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.8.0(eslint@8.52.0)(typescript@5.2.2) debug: 3.2.7 - eslint: 8.51.0 + eslint: 8.52.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.8.0)(eslint@8.51.0): + /eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.8.0)(eslint@8.52.0): resolution: {integrity: sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==} engines: {node: '>=4'} peerDependencies: @@ -4034,18 +4038,18 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.8.0(eslint@8.51.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.8.0(eslint@8.52.0)(typescript@5.2.2) array-includes: /@nolyfill/array-includes@1.0.21 array.prototype.findlastindex: /@nolyfill/array.prototype.findlastindex@1.0.21 array.prototype.flat: /@nolyfill/array.prototype.flat@1.0.21 array.prototype.flatmap: /@nolyfill/array.prototype.flatmap@1.0.21 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.51.0 + eslint: 8.52.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.8.0)(eslint-import-resolver-node@0.3.9)(eslint@8.51.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.8.0)(eslint-import-resolver-node@0.3.9)(eslint@8.52.0) has: /@nolyfill/has@1.0.21 - is-core-module: 2.13.0 + is-core-module: 2.13.1 is-glob: 4.0.3 minimatch: 3.1.2 object.fromentries: /@nolyfill/object.fromentries@1.0.21 @@ -4059,16 +4063,16 @@ packages: - supports-color dev: true - /eslint-plugin-react-hooks@4.6.0(eslint@8.51.0): + /eslint-plugin-react-hooks@4.6.0(eslint@8.52.0): resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 dependencies: - eslint: 8.51.0 + eslint: 8.52.0 dev: true - /eslint-plugin-react@7.32.2(eslint@8.51.0): + /eslint-plugin-react@7.32.2(eslint@8.52.0): resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==} engines: {node: '>=4'} peerDependencies: @@ -4078,7 +4082,7 @@ packages: array.prototype.flatmap: /@nolyfill/array.prototype.flatmap@1.0.21 array.prototype.tosorted: /@nolyfill/array.prototype.tosorted@1.0.21 doctrine: 2.1.0 - eslint: 8.51.0 + eslint: 8.52.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.4 minimatch: 3.1.2 @@ -4092,7 +4096,7 @@ packages: string.prototype.matchall: /@nolyfill/string.prototype.matchall@1.0.21 dev: true - /eslint-plugin-unused-imports@3.0.0(@typescript-eslint/eslint-plugin@6.0.0)(eslint@8.51.0): + /eslint-plugin-unused-imports@3.0.0(@typescript-eslint/eslint-plugin@6.0.0)(eslint@8.52.0): resolution: {integrity: sha512-sduiswLJfZHeeBJ+MQaG+xYzSWdRXoSw61DpU13mzWumCkR0ufD0HmO4kdNokjrkluMHpj/7PJeN35pgbhW3kw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -4102,8 +4106,8 @@ packages: '@typescript-eslint/eslint-plugin': optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.0.0(@typescript-eslint/parser@6.8.0)(eslint@8.51.0)(typescript@5.2.2) - eslint: 8.51.0 + '@typescript-eslint/eslint-plugin': 6.0.0(@typescript-eslint/parser@6.8.0)(eslint@8.52.0)(typescript@5.2.2) + eslint: 8.52.0 eslint-rule-composer: 0.3.0 dev: true @@ -4133,18 +4137,19 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.51.0: - resolution: {integrity: sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==} + /eslint@8.52.0: + resolution: {integrity: sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) '@eslint-community/regexpp': 4.9.1 '@eslint/eslintrc': 2.1.2 - '@eslint/js': 8.51.0 - '@humanwhocodes/config-array': 0.11.11 + '@eslint/js': 8.52.0 + '@humanwhocodes/config-array': 0.11.13 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 @@ -4482,6 +4487,10 @@ packages: requiresBuild: true optional: true + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: true + /fx@28.0.0: resolution: {integrity: sha512-vKQDA9g868cZiW8ulgs2uN1yx1i7/nsS33jTMOxekk0Z03BJLffVcdW6AVD32fWb3E6RtmWWuBXBZOk8cLXFNQ==} hasBin: true @@ -4616,6 +4625,13 @@ packages: engines: {node: '>=8'} dev: true + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: true + /heap@0.2.7: resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==} dev: false @@ -4718,6 +4734,12 @@ packages: dependencies: has: /@nolyfill/has@1.0.21 + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + dependencies: + hasown: 2.0.0 + dev: true + /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -4782,11 +4804,11 @@ packages: react: ^18.0.0 dependencies: immer: 10.0.3 - jotai: 2.4.3(@types/react@18.2.29)(react@18.2.0) + jotai: 2.4.3(@types/react@18.2.31)(react@18.2.0) react: 18.2.0 dev: false - /jotai@2.4.3(@types/react@18.2.29)(react@18.2.0): + /jotai@2.4.3(@types/react@18.2.31)(react@18.2.0): resolution: {integrity: sha512-CSAHX9LqWG5WCrU8OgBoZbBJ+Bo9rQU0mPusEF4e0CZ/SNFgurG26vb3UpgvCSJZgYVcUQNiUBM5q86PA8rstQ==} engines: {node: '>=12.20.0'} peerDependencies: @@ -4798,7 +4820,7 @@ packages: react: optional: true dependencies: - '@types/react': 18.2.29 + '@types/react': 18.2.31 react: 18.2.0 dev: false @@ -4884,8 +4906,8 @@ packages: json-buffer: 3.0.1 dev: true - /khroma@2.0.0: - resolution: {integrity: sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==} + /khroma@2.1.0: + resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==} dev: false /kleur@4.1.5: @@ -5014,8 +5036,8 @@ packages: /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - /lint-staged@15.0.1: - resolution: {integrity: sha512-2IU5OWmCaxch0X0+IBF4/v7sutpB+F3qoXbro43pYjQTOo5wumckjxoxn47pQBqqBsCWrD5HnI2uG/zJA7isew==} + /lint-staged@15.0.2: + resolution: {integrity: sha512-vnEy7pFTHyVuDmCAIFKR5QDO8XLVlPFQQyujQ/STOxe40ICWqJ6knS2wSJ/ffX/Lw0rz83luRDh+ET7toN+rOw==} engines: {node: '>=18.12.0'} hasBin: true dependencies: @@ -5024,17 +5046,17 @@ packages: debug: 4.3.4 execa: 8.0.1 lilconfig: 2.1.0 - listr2: 7.0.1 + listr2: 7.0.2 micromatch: 4.0.5 pidtree: 0.6.0 string-argv: 0.3.2 - yaml: 2.3.2 + yaml: 2.3.3 transitivePeerDependencies: - supports-color dev: true - /listr2@7.0.1: - resolution: {integrity: sha512-nz+7hwgbDp8eWNoDgzdl4hA/xDSLrNRzPu1TLgOYs6l5Y+Ma6zVWWy9Oyt9TQFONwKoSPoka3H50D3vD5EuNwg==} + /listr2@7.0.2: + resolution: {integrity: sha512-rJysbR9GKIalhTbVL2tYbF2hVyDnrf7pFUZBwjPaMIdadYHmeT+EVi/Bu3qd7ETQPahTotg2WRCatXwRBW554g==} engines: {node: '>=16.0.0'} dependencies: cli-truncate: 3.1.0 @@ -5140,8 +5162,8 @@ packages: /mdast-util-from-markdown@1.3.1: resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} dependencies: - '@types/mdast': 3.0.13 - '@types/unist': 2.0.8 + '@types/mdast': 3.0.14 + '@types/unist': 2.0.9 decode-named-character-reference: 1.0.2 mdast-util-to-string: 3.2.0 micromark: 3.2.0 @@ -5159,7 +5181,7 @@ packages: /mdast-util-to-string@3.2.0: resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} dependencies: - '@types/mdast': 3.0.13 + '@types/mdast': 3.0.14 dev: false /medium-zoom@1.0.8: @@ -5174,12 +5196,12 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - /mermaid@10.5.0: - resolution: {integrity: sha512-9l0o1uUod78D3/FVYPGSsgV+Z0tSnzLBDiC9rVzvelPxuO80HbN1oDr9ofpPETQy9XpypPQa26fr09VzEPfvWA==} + /mermaid@10.5.1: + resolution: {integrity: sha512-+4mkGW5PptHDSae4YZ/Jw1pEOf0irrB/aCL6BwZcJPhr5+84UJBrQnHTvyPqCUz67tXkrDvSzWv4B+J2hLO78g==} dependencies: '@braintree/sanitize-url': 6.0.4 - '@types/d3-scale': 4.0.5 - '@types/d3-scale-chromatic': 3.0.0 + '@types/d3-scale': 4.0.6 + '@types/d3-scale-chromatic': 3.0.1 cytoscape: 3.26.0 cytoscape-cose-bilkent: 4.1.0(cytoscape@3.26.0) cytoscape-fcose: 2.2.0(cytoscape@3.26.0) @@ -5189,7 +5211,7 @@ packages: dayjs: 1.11.10 dompurify: 3.0.6 elkjs: 0.8.2 - khroma: 2.0.0 + khroma: 2.1.0 lodash-es: 4.17.21 mdast-util-from-markdown: 1.3.1 non-layered-tidy-tree-layout: 2.0.2 @@ -5355,7 +5377,7 @@ packages: /micromark@3.2.0: resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} dependencies: - '@types/debug': 4.1.9 + '@types/debug': 4.1.10 debug: 4.3.4 decode-named-character-reference: 1.0.2 micromark-core-commonmark: 1.1.0 @@ -6381,7 +6403,7 @@ packages: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} dev: true - /react-remove-scroll-bar@2.3.4(@types/react@18.2.29)(react@18.2.0): + /react-remove-scroll-bar@2.3.4(@types/react@18.2.31)(react@18.2.0): resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} engines: {node: '>=10'} peerDependencies: @@ -6391,13 +6413,13 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.29 + '@types/react': 18.2.31 react: 18.2.0 - react-style-singleton: 2.2.1(@types/react@18.2.29)(react@18.2.0) + react-style-singleton: 2.2.1(@types/react@18.2.31)(react@18.2.0) tslib: 2.6.2 dev: false - /react-remove-scroll@2.5.5(@types/react@18.2.29)(react@18.2.0): + /react-remove-scroll@2.5.5(@types/react@18.2.31)(react@18.2.0): resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} engines: {node: '>=10'} peerDependencies: @@ -6407,16 +6429,16 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.29 + '@types/react': 18.2.31 react: 18.2.0 - react-remove-scroll-bar: 2.3.4(@types/react@18.2.29)(react@18.2.0) - react-style-singleton: 2.2.1(@types/react@18.2.29)(react@18.2.0) + react-remove-scroll-bar: 2.3.4(@types/react@18.2.31)(react@18.2.0) + react-style-singleton: 2.2.1(@types/react@18.2.31)(react@18.2.0) tslib: 2.6.2 - use-callback-ref: 1.3.0(@types/react@18.2.29)(react@18.2.0) - use-sidecar: 1.1.2(@types/react@18.2.29)(react@18.2.0) + use-callback-ref: 1.3.0(@types/react@18.2.31)(react@18.2.0) + use-sidecar: 1.1.2(@types/react@18.2.31)(react@18.2.0) dev: false - /react-style-singleton@2.2.1(@types/react@18.2.29)(react@18.2.0): + /react-style-singleton@2.2.1(@types/react@18.2.31)(react@18.2.0): resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} engines: {node: '>=10'} peerDependencies: @@ -6426,7 +6448,7 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.29 + '@types/react': 18.2.31 get-nonce: 1.0.1 invariant: 2.2.4 react: 18.2.0 @@ -6526,7 +6548,7 @@ packages: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true dependencies: - is-core-module: 2.13.0 + is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 dev: true @@ -7145,7 +7167,7 @@ packages: /unist-util-stringify-position@3.0.3: resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} dependencies: - '@types/unist': 2.0.8 + '@types/unist': 2.0.9 dev: false /universalify@2.0.0: @@ -7180,7 +7202,7 @@ packages: punycode: 2.3.0 dev: true - /use-callback-ref@1.3.0(@types/react@18.2.29)(react@18.2.0): + /use-callback-ref@1.3.0(@types/react@18.2.31)(react@18.2.0): resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==} engines: {node: '>=10'} peerDependencies: @@ -7190,12 +7212,12 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.29 + '@types/react': 18.2.31 react: 18.2.0 tslib: 2.6.2 dev: false - /use-sidecar@1.1.2(@types/react@18.2.29)(react@18.2.0): + /use-sidecar@1.1.2(@types/react@18.2.31)(react@18.2.0): resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} engines: {node: '>=10'} peerDependencies: @@ -7205,7 +7227,7 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.29 + '@types/react': 18.2.31 detect-node-es: 1.1.0 react: 18.2.0 tslib: 2.6.2 @@ -7438,8 +7460,8 @@ packages: resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} engines: {node: '>= 14'} - /yaml@2.3.2: - resolution: {integrity: sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==} + /yaml@2.3.3: + resolution: {integrity: sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==} engines: {node: '>= 14'} dev: true diff --git a/src/app/notes/[id]/pageImpl.tsx b/src/app/notes/[id]/pageImpl.tsx index 7fba050b4d..07624235a9 100644 --- a/src/app/notes/[id]/pageImpl.tsx +++ b/src/app/notes/[id]/pageImpl.tsx @@ -3,6 +3,7 @@ import type { NoteModel } from '@mx-space/api-client' +import { AckRead } from '~/components/common/AckRead' import { ClientOnly } from '~/components/common/ClientOnly' import { NoteActionAside, @@ -34,6 +35,7 @@ import { const NotePage = function (props: NoteModel) { return ( <> +
diff --git a/src/app/posts/(post-detail)/[category]/[slug]/pageImpl.tsx b/src/app/posts/(post-detail)/[category]/[slug]/pageImpl.tsx index 87b80c1346..1ab1e9a3ca 100644 --- a/src/app/posts/(post-detail)/[category]/[slug]/pageImpl.tsx +++ b/src/app/posts/(post-detail)/[category]/[slug]/pageImpl.tsx @@ -1,5 +1,6 @@ import type { PostModel } from '@mx-space/api-client' +import { AckRead } from '~/components/common/AckRead' import { ClientOnly } from '~/components/common/ClientOnly' import { PostActionAside, @@ -30,6 +31,7 @@ const PostPage = (props: PostModel) => { return (
+
diff --git a/src/components/common/AckRead.tsx b/src/components/common/AckRead.tsx new file mode 100644 index 0000000000..9dcbe51194 --- /dev/null +++ b/src/components/common/AckRead.tsx @@ -0,0 +1,14 @@ +'use client' + +import type { FC } from 'react' + +import { useAckReadCount } from '~/hooks/biz/use-ack-read-count' + +export const AckRead: FC<{ + id: string + type: 'post' | 'note' +}> = (props) => { + useAckReadCount(props.type, props.id) + + return null +} diff --git a/src/hooks/biz/use-ack-read-count.ts b/src/hooks/biz/use-ack-read-count.ts new file mode 100644 index 0000000000..16134fb86f --- /dev/null +++ b/src/hooks/biz/use-ack-read-count.ts @@ -0,0 +1,15 @@ +import { queryClient } from '~/providers/root/react-query-provider' +import { useEffect } from 'react' + +import { apiClient } from '~/lib/request' + +export const useAckReadCount = (type: 'post' | 'note', id: string) => { + useEffect(() => { + queryClient.fetchQuery({ + queryKey: ['ack-read-count', type, id], + queryFn: async () => { + return apiClient.ack.read(type, id) + }, + }) + }, []) +} diff --git a/src/lib/request.ts b/src/lib/request.ts index 99eadeed9a..5ca0266874 100644 --- a/src/lib/request.ts +++ b/src/lib/request.ts @@ -11,8 +11,9 @@ import { API_URL } from '~/constants/env' import PKG from '../../package.json' import { getToken } from './cookie' -import { isDev, isServerSide } from './env' +import { isClientSide, isDev, isServerSide } from './env' +const uuidStorageKey = 'x-uuid' const genUUID = () => { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => { const r = (Math.random() * 16) | 0 @@ -22,6 +23,11 @@ const genUUID = () => { } const uuid = genUUID() +if (isClientSide) { + if (!sessionStorage.getItem(uuidStorageKey)) + sessionStorage.setItem(uuidStorageKey, uuid) +} + export const apiClient = createClient(axiosAdaptor)(API_URL, { controllers: allControllers, }) @@ -41,7 +47,8 @@ $axios.interceptors.request.use((config) => { if (token) { config.headers['Authorization'] = token } - config.headers['x-uuid'] = uuid + config.headers['x-session-uuid'] = + globalThis?.sessionStorage?.getItem(uuidStorageKey) ?? uuid } if (isDev && isServerSide) {