diff --git a/.eslintrc.json b/.eslintrc.json index 86d1e280..6905a5f9 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -84,6 +84,11 @@ // false negatives "import/namespace": ["off"], "no-empty-pattern": "off", + "@typescript-eslint/no-empty-object-type": [ + "error", + // `interface SpecificVariantProps extends VariantProps {}` is fine + { "allowInterfaces": "with-single-extends" } + ], // make sure to `await` inside try…catch "@typescript-eslint/return-await": ["error", "in-try-catch"], "@typescript-eslint/no-confusing-void-expression": [ diff --git a/modules/firebase/models.ts b/modules/firebase/models.ts index 1a885409..a02eb75b 100644 --- a/modules/firebase/models.ts +++ b/modules/firebase/models.ts @@ -12,6 +12,7 @@ import { type fhirElementConverter, type fhirMedicationRequestConverter, type fhirObservationConverter, + type fhirQuestionnaireResponseConverter, type fhirResourceConverter, type InferEncoded, type invitationConverter, @@ -67,4 +68,10 @@ export type UserMessage = InferEncoded & { id: string } +export type QuestionnaireResponse = InferEncoded< + typeof fhirQuestionnaireResponseConverter +> & { + id: string +} + export type LocalizedText = string | Record diff --git a/modules/firebase/utils.ts b/modules/firebase/utils.ts index c1b31490..70676fcf 100644 --- a/modules/firebase/utils.ts +++ b/modules/firebase/utils.ts @@ -39,6 +39,7 @@ import { type Invitation, type MedicationClass, type Organization, + type QuestionnaireResponse, type User, type UserMessage, } from '@/modules/firebase/models' @@ -58,6 +59,7 @@ export const collectionNames = { eGfrObservations: 'eGfrObservations', potassiumObservations: 'potassiumObservations', messages: 'messages', + questionnaireResponses: 'questionnaireResponses', } export type ResourceType = 'invitation' | 'user' @@ -71,22 +73,16 @@ export const userPath = (resourceType: ResourceType) => resourceType, ) -export enum ObservationType { - creatinine = 'creatinine', - eGFR = 'eGFR', - potassium = 'potassium', +export enum UserObservationCollection { + bodyWeight = 'bodyWeightObservations', + bloodPressure = 'bloodPressureObservations', + creatinine = 'creatinineObservations', + dryWeight = 'dryWeightObservations', + eGfr = 'eGfrObservations', + heartRate = 'heartRateObservations', + potassium = 'potassiumObservations', } -export const observationPath = (type: ObservationType) => - strategy( - { - [ObservationType.creatinine]: collectionNames.creatinineObservations, - [ObservationType.eGFR]: collectionNames.eGfrObservations, - [ObservationType.potassium]: collectionNames.potassiumObservations, - }, - type, - ) - export const getCollectionRefs = (db: Firestore) => ({ users: () => collection(db, collectionNames.users) as CollectionReference, @@ -155,17 +151,28 @@ export const getCollectionRefs = (db: Firestore) => ({ }: { userId: string resourceType: ResourceType - observationType: ObservationType + observationType: UserObservationCollection }) => collection( db, - `/${userPath(resourceType)}/${userId}/${observationPath(observationType)}`, + `/${userPath(resourceType)}/${userId}/${observationType}`, ) as CollectionReference, userMessages: ({ userId }: { userId: string }) => collection( db, `/${collectionNames.users}/${userId}/${collectionNames.messages}`, ) as CollectionReference, + questionnaireResponses: ({ + userId, + resourceType, + }: { + userId: string + resourceType: ResourceType + }) => + collection( + db, + `/${userPath(resourceType)}/${userId}/${collectionNames.questionnaireResponses}`, + ) as CollectionReference, }) export const getDocumentsRefs = (db: Firestore) => ({ @@ -232,12 +239,12 @@ export const getDocumentsRefs = (db: Firestore) => ({ }: { userId: string resourceType: ResourceType - observationType: ObservationType + observationType: UserObservationCollection observationId: string }) => doc( db, - `/${userPath(resourceType)}/${userId}/${observationPath(observationType)}/${observationId}`, + `/${userPath(resourceType)}/${userId}/${observationType}/${observationId}`, ) as DocumentReference, userMessage: ({ userId, messageId }: { userId: string; messageId: string }) => doc( diff --git a/modules/user/queries.tsx b/modules/user/queries.tsx index bee021d8..853acc01 100644 --- a/modules/user/queries.tsx +++ b/modules/user/queries.tsx @@ -7,6 +7,7 @@ // import { UserType } from '@stanfordbdhg/engagehf-models' import { queryOptions } from '@tanstack/react-query' +import { notFound } from '@tanstack/react-router' import { query, where } from 'firebase/firestore' import { docRefs, getCurrentUser, refs } from '@/modules/firebase/app' import { type Invitation, type Organization } from '@/modules/firebase/models' @@ -32,7 +33,6 @@ export const parseInvitationToUser = ( ) => ({ resourceId: invitation.id, resourceType: 'invitation' as const, - uid: invitation.userId, email: invitation.auth?.email, displayName: invitation.auth?.displayName, organization: organizationMap.get(invitation.user.organization ?? ''), @@ -93,25 +93,23 @@ export const getUserData = async (userId: string) => { }), ) const authUser = allAuthData.at(0) + if (!authUser) throw new Error('Incomplete data') return { user, authUser, resourceType: 'user' as const } } const invitation = await getDocData(docRefs.invitation(userId)) + if (!invitation) throw notFound() + if (!invitation.auth) throw new Error('Incomplete data') return { - user: - invitation?.user ? - { - ...invitation.user, - invitationCode: invitation.id, - } - : undefined, - authUser: - invitation?.auth ? - { - uid: userId, - email: invitation.auth.email ?? null, - displayName: invitation.auth.displayName ?? null, - } - : undefined, + user: { + ...invitation.user, + invitationCode: invitation.id, + lastActiveDate: null, + }, + authUser: { + uid: userId, + email: invitation.auth.email, + displayName: invitation.auth.displayName, + }, resourceType: 'invitation' as const, } } diff --git a/modules/user/table.tsx b/modules/user/table.tsx index e7fbd414..b59084d8 100644 --- a/modules/user/table.tsx +++ b/modules/user/table.tsx @@ -13,7 +13,7 @@ import { type Nil } from '@/packages/design-system/src/utils/misc' interface SharedUser { resourceType: 'invitation' | 'user' - uid: Nil + resourceId: string displayName: Nil email: Nil organization: Nil<{ name: string }> @@ -27,7 +27,8 @@ export const createSharedUserColumns = () => { const columnHelper = createColumnHelper() return { id: columnHelper.accessor( - (user) => (user.resourceType === 'invitation' ? 'invitation' : user.uid), + (user) => + user.resourceType === 'invitation' ? 'invitation' : user.resourceId, { header: 'Id', cell: (props) => { @@ -40,8 +41,8 @@ export const createSharedUserColumns = () => { Invitation - : user.uid ? - {user.uid} + : user.resourceId ? + {user.resourceId} : '-' ) }, diff --git a/package-lock.json b/package-lock.json index 555b84fe..44d9484f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,31 +11,31 @@ "dependencies": { "@hookform/resolvers": "^3.9.0", "@nextui-org/pagination": "^2.0.36", - "@radix-ui/react-checkbox": "^1.1.1", - "@radix-ui/react-dialog": "^1.1.1", - "@radix-ui/react-dropdown-menu": "^2.1.1", + "@radix-ui/react-checkbox": "^1.1.2", + "@radix-ui/react-dialog": "^1.1.2", + "@radix-ui/react-dropdown-menu": "^2.1.2", "@radix-ui/react-label": "^2.1.0", - "@radix-ui/react-popover": "^1.1.1", - "@radix-ui/react-radio-group": "^1.2.0", - "@radix-ui/react-select": "^2.1.1", + "@radix-ui/react-popover": "^1.1.2", + "@radix-ui/react-radio-group": "^1.2.1", + "@radix-ui/react-select": "^2.1.2", "@radix-ui/react-separator": "^1.1.0", "@radix-ui/react-slot": "^1.1.0", - "@radix-ui/react-switch": "^1.1.0", - "@radix-ui/react-tabs": "^1.1.0", - "@radix-ui/react-tooltip": "^1.1.2", - "@stanfordbdhg/engagehf-models": "^0.2.0", + "@radix-ui/react-switch": "^1.1.1", + "@radix-ui/react-tabs": "^1.1.1", + "@radix-ui/react-tooltip": "^1.1.3", + "@stanfordbdhg/engagehf-models": "^0.3.1", "@t3-oss/env-core": "^0.11.1", "@tanstack/match-sorter-utils": "^8.19.4", - "@tanstack/react-query": "^5.56.2", + "@tanstack/react-query": "^5.59.0", "@tanstack/react-table": "^8.20.5", "@vitejs/plugin-react": "^4.3.2", "class-variance-authority": "^0.7.0", "cmdk": "^1.0.0", "date-fns": "^3.6.0", - "es-toolkit": "^1.22.0", + "es-toolkit": "^1.24.0", "firebase": "^10.14.0", "jsdom": "^25.0.1", - "lucide-react": "^0.446.0", + "lucide-react": "^0.447.0", "next-intl": "^3.20.0", "prettier-plugin-tailwindcss": "^0.6.8", "react": "^18", @@ -47,30 +47,30 @@ "sonner": "^1.5.0", "use-debounce": "^10.0.3", "vite-envs": "^4.4.5", - "vitest": "^2.1.1", + "vitest": "^2.1.2", "zod": "^3.23.8" }, "devDependencies": { - "@storybook/addon-essentials": "^8.3.4", - "@storybook/addon-interactions": "^8.3.4", - "@storybook/addon-links": "^8.3.4", - "@storybook/addon-onboarding": "^8.3.4", - "@storybook/blocks": "^8.3.4", - "@storybook/nextjs": "^8.3.4", - "@storybook/react": "^8.3.4", - "@storybook/test": "^8.3.4", - "@tanstack/router-devtools": "^1.58.15", - "@tanstack/router-plugin": "^1.58.12", + "@storybook/addon-essentials": "^8.3.5", + "@storybook/addon-interactions": "^8.3.5", + "@storybook/addon-links": "^8.3.5", + "@storybook/addon-onboarding": "^8.3.5", + "@storybook/blocks": "^8.3.5", + "@storybook/nextjs": "^8.3.5", + "@storybook/react": "^8.3.5", + "@storybook/test": "^8.3.5", + "@tanstack/router-devtools": "^1.62.1", + "@tanstack/router-plugin": "^1.62.0", "@testing-library/jest-dom": "^6", "@testing-library/react": "^16", "@total-typescript/ts-reset": "^0.6.1", - "@types/node": "^20", + "@types/node": "^22", "@types/react": "^18", "@types/react-dom": "^18", "@types/react-helmet": "^6.1.11", - "@typescript-eslint/eslint-plugin": "^7", - "@typescript-eslint/parser": "^7", - "@vitest/coverage-v8": "^2.1.1", + "@typescript-eslint/eslint-plugin": "^8", + "@typescript-eslint/parser": "^8", + "@vitest/coverage-v8": "^2.1.2", "autoprefixer": "^10", "concurrently": "^9", "esbuild": "^0.24.0", @@ -84,13 +84,16 @@ "postcss-import": "^16.1.0", "prettier": "^3", "prop-types": "^15.8.1", - "storybook": "^8.3.4", + "storybook": "^8.3.5", "tailwindcss": "^3", "tailwindcss-animate": "^1.0.7", "typedoc": "^0.26", "typescript": "^5", "vite": "^5.4.8", - "vitest": "^2.1.1" + "vitest": "^2.1.2" + }, + "engines": { + "node": "22" } }, "node_modules/@adobe/css-tools": { @@ -123,11 +126,11 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz", + "integrity": "sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==", "dependencies": { - "@babel/highlight": "^7.24.7", + "@babel/highlight": "^7.25.7", "picocolors": "^1.0.0" }, "engines": { @@ -135,28 +138,28 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", - "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.7.tgz", + "integrity": "sha512-9ickoLz+hcXCeh7jrcin+/SLWm+GkxE2kTvoYyp38p4WkdFXfQJxDFGWp/YHjiKLPx06z2A7W8XKuqbReXDzsw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", - "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.7.tgz", + "integrity": "sha512-yJ474Zv3cwiSOO9nXJuqzvwEeM+chDuQ8GJirw+pZ91sCGCyOZ3dJkVE09fTV0VEVzXyLWhh3G/AolYTPX7Mow==", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-module-transforms": "^7.25.2", - "@babel/helpers": "^7.25.0", - "@babel/parser": "^7.25.0", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.2", - "@babel/types": "^7.25.2", + "@babel/code-frame": "^7.25.7", + "@babel/generator": "^7.25.7", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helpers": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/template": "^7.25.7", + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -172,14 +175,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", - "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.7.tgz", + "integrity": "sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==", "dependencies": { - "@babel/types": "^7.25.6", + "@babel/types": "^7.25.7", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" @@ -211,13 +214,13 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", - "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz", + "integrity": "sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==", "dependencies": { - "@babel/compat-data": "^7.25.2", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", + "@babel/compat-data": "^7.25.7", + "@babel/helper-validator-option": "^7.25.7", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -293,26 +296,26 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.7.tgz", + "integrity": "sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", - "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.7.tgz", + "integrity": "sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==", "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.2" + "@babel/helper-module-imports": "^7.25.7", + "@babel/helper-simple-access": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -334,9 +337,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", - "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz", + "integrity": "sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==", "engines": { "node": ">=6.9.0" } @@ -376,12 +379,12 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", - "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.7.tgz", + "integrity": "sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -401,25 +404,25 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz", + "integrity": "sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz", + "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", - "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.7.tgz", + "integrity": "sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==", "engines": { "node": ">=6.9.0" } @@ -439,23 +442,23 @@ } }, "node_modules/@babel/helpers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", - "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.7.tgz", + "integrity": "sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==", "dependencies": { - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/template": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.7.tgz", + "integrity": "sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==", "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", + "@babel/helper-validator-identifier": "^7.25.7", "chalk": "^2.4.2", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" @@ -465,11 +468,11 @@ } }, "node_modules/@babel/parser": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", - "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.7.tgz", + "integrity": "sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw==", "dependencies": { - "@babel/types": "^7.25.6" + "@babel/types": "^7.25.7" }, "bin": { "parser": "bin/babel-parser.js" @@ -699,12 +702,12 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", - "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.7.tgz", + "integrity": "sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -816,12 +819,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.4.tgz", - "integrity": "sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.7.tgz", + "integrity": "sha512-rR+5FDjpCHqqZN2bzZm18bVYGaejGq5ZkpVCJLXor/+zlSrSoc4KWcHI0URVWjl/68Dyr1uwZUz/1njycEAv9g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1931,28 +1934,28 @@ } }, "node_modules/@babel/template": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", - "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.7.tgz", + "integrity": "sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==", "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/code-frame": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", - "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.6", - "@babel/parser": "^7.25.6", - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.6", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.7.tgz", + "integrity": "sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==", + "dependencies": { + "@babel/code-frame": "^7.25.7", + "@babel/generator": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/template": "^7.25.7", + "@babel/types": "^7.25.7", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1961,12 +1964,12 @@ } }, "node_modules/@babel/types": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", - "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.7.tgz", + "integrity": "sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ==", "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", + "@babel/helper-string-parser": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", "to-fast-properties": "^2.0.0" }, "engines": { @@ -4168,14 +4171,14 @@ } }, "node_modules/@radix-ui/react-checkbox": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.1.1.tgz", - "integrity": "sha512-0i/EKJ222Afa1FE0C6pNJxDq1itzcl3HChE9DwskA4th4KRse8ojx8a1nVcOjwJdbpDLcz7uol77yYnQNMHdKw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.1.2.tgz", + "integrity": "sha512-/i0fl686zaJbDQLNKrkCbMyDm6FQMt4jg323k7HuqitoANm9sE23Ql8yOK3Wusk34HSLKDChhMux05FnP6KUkw==", "dependencies": { "@radix-ui/primitive": "1.1.0", "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.0", - "@radix-ui/react-presence": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-presence": "1.1.1", "@radix-ui/react-primitive": "2.0.0", "@radix-ui/react-use-controllable-state": "1.1.0", "@radix-ui/react-use-previous": "1.1.0", @@ -4196,6 +4199,20 @@ } } }, + "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-context": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-collection": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.0.tgz", @@ -4250,24 +4267,24 @@ } }, "node_modules/@radix-ui/react-dialog": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.1.tgz", - "integrity": "sha512-zysS+iU4YP3STKNS6USvFVqI4qqx8EpiwmT5TuCApVEBca+eRCbONi4EgzfNSuVnOXvC5UPHHMjs8RXO6DH9Bg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.2.tgz", + "integrity": "sha512-Yj4dZtqa2o+kG61fzB0H2qUvmwBA2oyQroGLyNtBj1beo1khoQ3q1a2AO8rrQYjd8256CO9+N8L9tvsS+bnIyA==", "dependencies": { "@radix-ui/primitive": "1.1.0", "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.0", - "@radix-ui/react-dismissable-layer": "1.1.0", - "@radix-ui/react-focus-guards": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.1", + "@radix-ui/react-focus-guards": "1.1.1", "@radix-ui/react-focus-scope": "1.1.0", "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-portal": "1.1.1", - "@radix-ui/react-presence": "1.1.0", + "@radix-ui/react-portal": "1.1.2", + "@radix-ui/react-presence": "1.1.1", "@radix-ui/react-primitive": "2.0.0", "@radix-ui/react-slot": "1.1.0", "@radix-ui/react-use-controllable-state": "1.1.0", "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.5.7" + "react-remove-scroll": "2.6.0" }, "peerDependencies": { "@types/react": "*", @@ -4284,6 +4301,20 @@ } } }, + "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-context": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-direction": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", @@ -4299,9 +4330,9 @@ } }, "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.0.tgz", - "integrity": "sha512-/UovfmmXGptwGcBQawLzvn2jOfM0t4z3/uKffoBlj724+n3FvBbZ7M0aaBOmkp6pqFYpO4yx8tSVJjx3Fl2jig==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz", + "integrity": "sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==", "dependencies": { "@radix-ui/primitive": "1.1.0", "@radix-ui/react-compose-refs": "1.1.0", @@ -4325,15 +4356,15 @@ } }, "node_modules/@radix-ui/react-dropdown-menu": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.1.tgz", - "integrity": "sha512-y8E+x9fBq9qvteD2Zwa4397pUVhYsh9iq44b5RD5qu1GMJWBCBuVg1hMyItbc6+zH00TxGRqd9Iot4wzf3OoBQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.2.tgz", + "integrity": "sha512-GVZMR+eqK8/Kes0a36Qrv+i20bAPXSn8rCBTHx30w+3ECnR5o3xixAlqcVaYvLeyKUsm0aqyhWfmUcqufM8nYA==", "dependencies": { "@radix-ui/primitive": "1.1.0", "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-context": "1.1.1", "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-menu": "2.1.1", + "@radix-ui/react-menu": "2.1.2", "@radix-ui/react-primitive": "2.0.0", "@radix-ui/react-use-controllable-state": "1.1.0" }, @@ -4352,10 +4383,24 @@ } } }, + "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-context": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-focus-guards": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.0.tgz", - "integrity": "sha512-w6XZNUPVv6xCpZUqb/yN9DL6auvpGX3C/ee6Hdi16v2UUy25HV2Q5bcflsiDyT/g5RwbPQ/GIT1vLkeRb+ITBw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.1.tgz", + "integrity": "sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==", "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -4430,28 +4475,28 @@ } }, "node_modules/@radix-ui/react-menu": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.1.tgz", - "integrity": "sha512-oa3mXRRVjHi6DZu/ghuzdylyjaMXLymx83irM7hTxutQbD+7IhPKdMdRHD26Rm+kHRrWcrUkkRPv5pd47a2xFQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.2.tgz", + "integrity": "sha512-lZ0R4qR2Al6fZ4yCCZzu/ReTFrylHFxIqy7OezIpWF4bL0o9biKo0pFIvkaew3TyZ9Fy5gYVrR5zCGZBVbO1zg==", "dependencies": { "@radix-ui/primitive": "1.1.0", "@radix-ui/react-collection": "1.1.0", "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-context": "1.1.1", "@radix-ui/react-direction": "1.1.0", - "@radix-ui/react-dismissable-layer": "1.1.0", - "@radix-ui/react-focus-guards": "1.1.0", + "@radix-ui/react-dismissable-layer": "1.1.1", + "@radix-ui/react-focus-guards": "1.1.1", "@radix-ui/react-focus-scope": "1.1.0", "@radix-ui/react-id": "1.1.0", "@radix-ui/react-popper": "1.2.0", - "@radix-ui/react-portal": "1.1.1", - "@radix-ui/react-presence": "1.1.0", + "@radix-ui/react-portal": "1.1.2", + "@radix-ui/react-presence": "1.1.1", "@radix-ui/react-primitive": "2.0.0", "@radix-ui/react-roving-focus": "1.1.0", "@radix-ui/react-slot": "1.1.0", "@radix-ui/react-use-callback-ref": "1.1.0", "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.5.7" + "react-remove-scroll": "2.6.0" }, "peerDependencies": { "@types/react": "*", @@ -4468,26 +4513,40 @@ } } }, - "node_modules/@radix-ui/react-popover": { + "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-context": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.1.tgz", - "integrity": "sha512-3y1A3isulwnWhvTTwmIreiB8CF4L+qRjZnK1wYLO7pplddzXKby/GnZ2M7OZY3qgnl6p9AodUIHRYGXNah8Y7g==", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.2.tgz", + "integrity": "sha512-u2HRUyWW+lOiA2g0Le0tMmT55FGOEWHwPFt1EPfbLly7uXQExFo5duNKqG2DzmFXIdqOeNd+TpE8baHWJCyP9w==", "dependencies": { "@radix-ui/primitive": "1.1.0", "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.0", - "@radix-ui/react-dismissable-layer": "1.1.0", - "@radix-ui/react-focus-guards": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.1", + "@radix-ui/react-focus-guards": "1.1.1", "@radix-ui/react-focus-scope": "1.1.0", "@radix-ui/react-id": "1.1.0", "@radix-ui/react-popper": "1.2.0", - "@radix-ui/react-portal": "1.1.1", - "@radix-ui/react-presence": "1.1.0", + "@radix-ui/react-portal": "1.1.2", + "@radix-ui/react-presence": "1.1.1", "@radix-ui/react-primitive": "2.0.0", "@radix-ui/react-slot": "1.1.0", "@radix-ui/react-use-controllable-state": "1.1.0", "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.5.7" + "react-remove-scroll": "2.6.0" }, "peerDependencies": { "@types/react": "*", @@ -4504,6 +4563,20 @@ } } }, + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-context": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-popper": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.0.tgz", @@ -4536,9 +4609,9 @@ } }, "node_modules/@radix-ui/react-portal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.1.tgz", - "integrity": "sha512-A3UtLk85UtqhzFqtoC8Q0KvR2GbXF3mtPgACSazajqq6A41mEQgo53iPzY4i6BwDxlIFqWIhiQ2G729n+2aw/g==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.2.tgz", + "integrity": "sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==", "dependencies": { "@radix-ui/react-primitive": "2.0.0", "@radix-ui/react-use-layout-effect": "1.1.0" @@ -4559,9 +4632,9 @@ } }, "node_modules/@radix-ui/react-presence": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.0.tgz", - "integrity": "sha512-Gq6wuRN/asf9H/E/VzdKoUtT8GC9PQc9z40/vEr0VCJ4u5XvvhWIrSsCB6vD2/cH7ugTdSfYq9fLJCcM00acrQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz", + "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==", "dependencies": { "@radix-ui/react-compose-refs": "1.1.0", "@radix-ui/react-use-layout-effect": "1.1.0" @@ -4604,15 +4677,15 @@ } }, "node_modules/@radix-ui/react-radio-group": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.2.0.tgz", - "integrity": "sha512-yv+oiLaicYMBpqgfpSPw6q+RyXlLdIpQWDHZbUKURxe+nEh53hFXPPlfhfQQtYkS5MMK/5IWIa76SksleQZSzw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.2.1.tgz", + "integrity": "sha512-kdbv54g4vfRjja9DNWPMxKvXblzqbpEC8kspEkZ6dVP7kQksGCn+iZHkcCz2nb00+lPdRvxrqy4WrvvV1cNqrQ==", "dependencies": { "@radix-ui/primitive": "1.1.0", "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-context": "1.1.1", "@radix-ui/react-direction": "1.1.0", - "@radix-ui/react-presence": "1.1.0", + "@radix-ui/react-presence": "1.1.1", "@radix-ui/react-primitive": "2.0.0", "@radix-ui/react-roving-focus": "1.1.0", "@radix-ui/react-use-controllable-state": "1.1.0", @@ -4634,6 +4707,20 @@ } } }, + "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-context": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-roving-focus": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.0.tgz", @@ -4665,22 +4752,22 @@ } }, "node_modules/@radix-ui/react-select": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.1.1.tgz", - "integrity": "sha512-8iRDfyLtzxlprOo9IicnzvpsO1wNCkuwzzCM+Z5Rb5tNOpCdMvcc2AkzX0Fz+Tz9v6NJ5B/7EEgyZveo4FBRfQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.1.2.tgz", + "integrity": "sha512-rZJtWmorC7dFRi0owDmoijm6nSJH1tVw64QGiNIZ9PNLyBDtG+iAq+XGsya052At4BfarzY/Dhv9wrrUr6IMZA==", "dependencies": { "@radix-ui/number": "1.1.0", "@radix-ui/primitive": "1.1.0", "@radix-ui/react-collection": "1.1.0", "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-context": "1.1.1", "@radix-ui/react-direction": "1.1.0", - "@radix-ui/react-dismissable-layer": "1.1.0", - "@radix-ui/react-focus-guards": "1.1.0", + "@radix-ui/react-dismissable-layer": "1.1.1", + "@radix-ui/react-focus-guards": "1.1.1", "@radix-ui/react-focus-scope": "1.1.0", "@radix-ui/react-id": "1.1.0", "@radix-ui/react-popper": "1.2.0", - "@radix-ui/react-portal": "1.1.1", + "@radix-ui/react-portal": "1.1.2", "@radix-ui/react-primitive": "2.0.0", "@radix-ui/react-slot": "1.1.0", "@radix-ui/react-use-callback-ref": "1.1.0", @@ -4689,7 +4776,7 @@ "@radix-ui/react-use-previous": "1.1.0", "@radix-ui/react-visually-hidden": "1.1.0", "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.5.7" + "react-remove-scroll": "2.6.0" }, "peerDependencies": { "@types/react": "*", @@ -4706,6 +4793,20 @@ } } }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-context": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.0.tgz", @@ -4746,13 +4847,13 @@ } }, "node_modules/@radix-ui/react-switch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.1.0.tgz", - "integrity": "sha512-OBzy5WAj641k0AOSpKQtreDMe+isX0MQJ1IVyF03ucdF3DunOnROVrjWs8zsXUxC3zfZ6JL9HFVCUlMghz9dJw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.1.1.tgz", + "integrity": "sha512-diPqDDoBcZPSicYoMWdWx+bCPuTRH4QSp9J+65IvtdS0Kuzt67bI6n32vCj8q6NZmYW/ah+2orOtMwcX5eQwIg==", "dependencies": { "@radix-ui/primitive": "1.1.0", "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-context": "1.1.1", "@radix-ui/react-primitive": "2.0.0", "@radix-ui/react-use-controllable-state": "1.1.0", "@radix-ui/react-use-previous": "1.1.0", @@ -4773,16 +4874,30 @@ } } }, + "node_modules/@radix-ui/react-switch/node_modules/@radix-ui/react-context": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-tabs": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.0.tgz", - "integrity": "sha512-bZgOKB/LtZIij75FSuPzyEti/XBhJH52ExgtdVqjCIh+Nx/FW+LhnbXtbCzIi34ccyMsyOja8T0thCzoHFXNKA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.1.tgz", + "integrity": "sha512-3GBUDmP2DvzmtYLMsHmpA1GtR46ZDZ+OreXM/N+kkQJOPIgytFWWTfDQmBQKBvaFS0Vno0FktdbVzN28KGrMdw==", "dependencies": { "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-context": "1.1.1", "@radix-ui/react-direction": "1.1.0", "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-presence": "1.1.0", + "@radix-ui/react-presence": "1.1.1", "@radix-ui/react-primitive": "2.0.0", "@radix-ui/react-roving-focus": "1.1.0", "@radix-ui/react-use-controllable-state": "1.1.0" @@ -4802,19 +4917,33 @@ } } }, + "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-context": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-tooltip": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.1.2.tgz", - "integrity": "sha512-9XRsLwe6Yb9B/tlnYCPVUd/TFS4J7HuOZW345DCeC6vKIxQGMZdx21RK4VoZauPD5frgkXTYVS5y90L+3YBn4w==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.1.3.tgz", + "integrity": "sha512-Z4w1FIS0BqVFI2c1jZvb/uDVJijJjJ2ZMuPV81oVgTZ7g3BZxobplnMVvXtFWgtozdvYJ+MFWtwkM5S2HnAong==", "dependencies": { "@radix-ui/primitive": "1.1.0", "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.0", - "@radix-ui/react-dismissable-layer": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.1", "@radix-ui/react-id": "1.1.0", "@radix-ui/react-popper": "1.2.0", - "@radix-ui/react-portal": "1.1.1", - "@radix-ui/react-presence": "1.1.0", + "@radix-ui/react-portal": "1.1.2", + "@radix-ui/react-presence": "1.1.1", "@radix-ui/react-primitive": "2.0.0", "@radix-ui/react-slot": "1.1.0", "@radix-ui/react-use-controllable-state": "1.1.0", @@ -4835,6 +4964,20 @@ } } }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-context": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-use-callback-ref": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", @@ -5458,9 +5601,9 @@ } }, "node_modules/@stanfordbdhg/engagehf-models": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@stanfordbdhg/engagehf-models/-/engagehf-models-0.2.0.tgz", - "integrity": "sha512-cVZgvPZTWG6Su8x+TAhRCmBU+9f4lJFsYuK19lwyWM/gPRuFolLoY+BrOckD9jvEtVUpuaiTN44SR7iyLIMtrQ==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@stanfordbdhg/engagehf-models/-/engagehf-models-0.3.1.tgz", + "integrity": "sha512-5nisvQfR7tcKq3a5lWqMV9vy+1WwxMkzOG7BwYwI92MyDehLRwkqvV18aMIGTSyU0aukBbEGZ1LslyJ6chPZow==", "dependencies": { "zod": "^3.23.8" }, @@ -5469,9 +5612,9 @@ } }, "node_modules/@storybook/addon-actions": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-8.3.4.tgz", - "integrity": "sha512-1y0yD3upKcyzNwwA6loAGW2cRDqExwl4oAT7GJQA4tmabI+fNwmANSgU/ezLvvSUf4Qo0eJHg2Zcn8y+Apq2eA==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-8.3.5.tgz", + "integrity": "sha512-t8D5oo+4XfD+F8091wLa2y/CDd/W2lExCeol5Vm1tp5saO+u6f2/d7iykLhTowWV84Uohi3D073uFeyTAlGebg==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", @@ -5485,13 +5628,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.4" + "storybook": "^8.3.5" } }, "node_modules/@storybook/addon-backgrounds": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-8.3.4.tgz", - "integrity": "sha512-o3nl7cN3x8erJNxLEv8YptanEQAnbqnaseOAsvSC6/nnSAcRYBSs3BvekKvo4CcpS2mxn7F5NJTBFYnCXzy8EA==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-8.3.5.tgz", + "integrity": "sha512-IQGjDujuw8+iSqKREdkL8I5E/5CAHZbfOWd4A75PQK2D6qZ0fu/xRwTOQOH4jP6xn/abvfACOdL6A0d5bU90ag==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", @@ -5503,13 +5646,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.4" + "storybook": "^8.3.5" } }, "node_modules/@storybook/addon-controls": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-8.3.4.tgz", - "integrity": "sha512-qQcaK6dczsb6wXkzGZKOjUYNA7FfKBewRv6NvoVKYY6LfhllGOkmUAtYpdtQG8adsZWTSoZaAOJS2vP2uM67lw==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-8.3.5.tgz", + "integrity": "sha512-2eCVobUUvY1Rq7sp1U8Mx8t44VXwvi0E+hqyrsqOx5TTSC/FUQ+hNAX6GSYUcFIyQQ1ORpKNlUjAAdjxBv1ZHQ==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", @@ -5522,20 +5665,20 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.4" + "storybook": "^8.3.5" } }, "node_modules/@storybook/addon-docs": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-8.3.4.tgz", - "integrity": "sha512-TWauhqF/gJgfwPuWeM6KM3LwC+ErCOM+K2z16w3vgao9s67sij8lnrdAoQ0hjA+kw2/KAdCakFS6FyciG81qog==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-8.3.5.tgz", + "integrity": "sha512-MOVfo1bY8kXTzbvmWnx3UuSO4WNykFz7Edvb3mxltNyuW7UDRZGuIuSe32ddT/EtLJfurrC9Ja3yBy4KBUGnMA==", "dev": true, "dependencies": { "@mdx-js/react": "^3.0.0", - "@storybook/blocks": "8.3.4", - "@storybook/csf-plugin": "8.3.4", + "@storybook/blocks": "8.3.5", + "@storybook/csf-plugin": "8.3.5", "@storybook/global": "^5.0.0", - "@storybook/react-dom-shim": "8.3.4", + "@storybook/react-dom-shim": "8.3.5", "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", "fs-extra": "^11.1.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0", @@ -5549,24 +5692,24 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.4" + "storybook": "^8.3.5" } }, "node_modules/@storybook/addon-essentials": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-8.3.4.tgz", - "integrity": "sha512-C3+3hpmSn/8zdx5sXEP0eE6zMzxgRosHVZYfe9nBcMiEDp6UKVUyHVetWxEULOEgN46ysjcpllZ0bUkRYxi2IQ==", - "dev": true, - "dependencies": { - "@storybook/addon-actions": "8.3.4", - "@storybook/addon-backgrounds": "8.3.4", - "@storybook/addon-controls": "8.3.4", - "@storybook/addon-docs": "8.3.4", - "@storybook/addon-highlight": "8.3.4", - "@storybook/addon-measure": "8.3.4", - "@storybook/addon-outline": "8.3.4", - "@storybook/addon-toolbars": "8.3.4", - "@storybook/addon-viewport": "8.3.4", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-8.3.5.tgz", + "integrity": "sha512-hXTtPuN4/IsXjUrkMPAuz1qKAl8DovdXpjQgjQs7jSAVx3kc4BZaGqJ3gaVenKtO8uDchmA92BoQygpkc8eWhw==", + "dev": true, + "dependencies": { + "@storybook/addon-actions": "8.3.5", + "@storybook/addon-backgrounds": "8.3.5", + "@storybook/addon-controls": "8.3.5", + "@storybook/addon-docs": "8.3.5", + "@storybook/addon-highlight": "8.3.5", + "@storybook/addon-measure": "8.3.5", + "@storybook/addon-outline": "8.3.5", + "@storybook/addon-toolbars": "8.3.5", + "@storybook/addon-viewport": "8.3.5", "ts-dedent": "^2.0.0" }, "funding": { @@ -5574,13 +5717,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.4" + "storybook": "^8.3.5" } }, "node_modules/@storybook/addon-highlight": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-8.3.4.tgz", - "integrity": "sha512-rxZTeuZyZ7RnU+xmRhS01COFLbGnVEmlUNxBw8ArsrTEZKW5PbKpIxNLTj9F0zdH8H0MfryJGP+Aadcm0oHWlw==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-8.3.5.tgz", + "integrity": "sha512-ku0epul9aReCR3Gv/emwYnsqg3vgux5OmYMjoDcJC7s+LyfweSzLV/f5t9gSHazikJElh5TehtVkWbC4QfbGSw==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -5590,18 +5733,18 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.4" + "storybook": "^8.3.5" } }, "node_modules/@storybook/addon-interactions": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-8.3.4.tgz", - "integrity": "sha512-ORxqe35wUmF7EDHo45mdDHiju3Ryk2pZ1vO9PyvW6ZItNlHt/IxAr7T/TysGejZ/eTBg6tMZR3ExGky3lTg/CQ==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-8.3.5.tgz", + "integrity": "sha512-GtTy/A+mG7vDOahQr2avT4dpWtCRiFDSYcWyuQOZm10y8VDDw157HQM+FuhxjV9Owrrohy9F24oBUwRG8H3b5A==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", - "@storybook/instrumenter": "8.3.4", - "@storybook/test": "8.3.4", + "@storybook/instrumenter": "8.3.5", + "@storybook/test": "8.3.5", "polished": "^4.2.2", "ts-dedent": "^2.2.0" }, @@ -5610,13 +5753,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.4" + "storybook": "^8.3.5" } }, "node_modules/@storybook/addon-links": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-8.3.4.tgz", - "integrity": "sha512-R1DjARmxRIKJDGIG6uxmQ1yFNyoQbb+QIPUFjgWCak8+AdLJbC7W+Esvo9F5hQfh6czyy0piiM3qj5hpQJVh3A==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-8.3.5.tgz", + "integrity": "sha512-giRCpn6cfJMYPnVJkojoQDO5ae6098fgY9YgAhwaJej/9dufNcioFdbiyfK1vyzbG6TGeTmJ9ncWCXgWRtzxPQ==", "dev": true, "dependencies": { "@storybook/csf": "^0.1.11", @@ -5629,7 +5772,7 @@ }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "storybook": "^8.3.4" + "storybook": "^8.3.5" }, "peerDependenciesMeta": { "react": { @@ -5638,9 +5781,9 @@ } }, "node_modules/@storybook/addon-measure": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-8.3.4.tgz", - "integrity": "sha512-IJ6WKEbqmG+r7sukFjo+bVmPB2Zry04sylGx/OGyOh7zIhhqAqpwOwMHP0uQrc3tLNnUM6qB/o83UyYX79ql+A==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-8.3.5.tgz", + "integrity": "sha512-6GVehgbHhFIFS69xSfRV+12VK0cnuIAtZdp1J3eUCc2ATrcigqVjTM6wzZz6kBuX6O3dcusr7Wg46KtNliqLqg==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", @@ -5651,13 +5794,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.4" + "storybook": "^8.3.5" } }, "node_modules/@storybook/addon-onboarding": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-onboarding/-/addon-onboarding-8.3.4.tgz", - "integrity": "sha512-iz7iryVZWaAmbYyzfAGg79R2/SA0gKf16JpoBgFUdr2Y/lHHBmOtrSPVzpQYUazm8bNcW0DWI4dyW/w6mibsGA==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-onboarding/-/addon-onboarding-8.3.5.tgz", + "integrity": "sha512-QE/+6KEYO5tGziMdo+81oor0KNVnbPsfDpnhtClu+t1XC2F2nKQpDISujwLSYm9voEk1D/NxYWMbQ6eTDR/ViA==", "dev": true, "dependencies": { "react-confetti": "^6.1.0" @@ -5667,13 +5810,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.4" + "storybook": "^8.3.5" } }, "node_modules/@storybook/addon-outline": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-8.3.4.tgz", - "integrity": "sha512-kRRJTTLKM8gMfeh/e83djN5XLlc0hFtr9zKWxuZxaXt9Hmr+9tH/PRFtVK/S4SgqnBDoXk49Wgv6raiwj5/e3A==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-8.3.5.tgz", + "integrity": "sha512-dwmK6GzjEnQP9Yo0VnBUQtJkXZlXdfjWyskZ/IlUVc+IFdeeCtIiMyA92oMfHo8eXt0k1g21ZqMaIn7ZltOuHw==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", @@ -5684,26 +5827,26 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.4" + "storybook": "^8.3.5" } }, "node_modules/@storybook/addon-toolbars": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-8.3.4.tgz", - "integrity": "sha512-Km1YciVIxqluDbd1xmHjANNFyMonEOtnA6e4MrnBnC9XkPXSigeFlj0JvxyI/zjBsLBoFRmQiwq55W6l3hQ9sA==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-8.3.5.tgz", + "integrity": "sha512-Ml2gc9q8WbteDvmuAZGgBxt5SqWMXzuTkMjlsA8EB53hlkN1w9esX4s8YtBeNqC3HKoUzcdq8uexSBqU8fDbSA==", "dev": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.4" + "storybook": "^8.3.5" } }, "node_modules/@storybook/addon-viewport": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-8.3.4.tgz", - "integrity": "sha512-fU4LdXSSqIOLbCEh2leq/tZUYlFliXZBWr/+igQHdUoU7HY8RIImXqVUaR9wlCaTb48WezAWT60vJtwNijyIiQ==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-8.3.5.tgz", + "integrity": "sha512-FSWydoPiVWFXEittG7O1YgvuaqoU9Vb+qoq9XfP/hvQHHMDcMZvC40JaV8AnJeTXaM7ngIjcn9XDEfGbFfOzXw==", "dev": true, "dependencies": { "memoizerific": "^1.11.3" @@ -5713,13 +5856,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.4" + "storybook": "^8.3.5" } }, "node_modules/@storybook/blocks": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-8.3.4.tgz", - "integrity": "sha512-1g4aCrd5CcN+pVhF2ATu9ZRVvAIgBMb2yF9KkCuTpdvqKDuDNK3sGb0CxjS7jp3LOvyjJr9laTOQsz8v8MQc5A==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-8.3.5.tgz", + "integrity": "sha512-8cHTdTywolTHlgwN8I7YH7saWAIjGzV617AwjhJ95AKlC0VtpO1gAFcAgCqr4DU9eMc+LZuvbnaU/RSvA5eCCQ==", "dev": true, "dependencies": { "@storybook/csf": "^0.1.11", @@ -5744,7 +5887,7 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "storybook": "^8.3.4" + "storybook": "^8.3.5" }, "peerDependenciesMeta": { "react": { @@ -5756,12 +5899,12 @@ } }, "node_modules/@storybook/builder-webpack5": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-8.3.4.tgz", - "integrity": "sha512-EI6ULxRap5f4YSHf5xKUQqkoNGm4MVxJR/+GImx8K5fuZ+xYw2SdYdTu6dG8V+zTh1WZ4MDwmRb6aEbXvRcrFw==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-8.3.5.tgz", + "integrity": "sha512-rhmfdiSlDn3Arki7IMYk11PO29rYuYM4LZ8GlNqREU7VUl/8Vngo/jFIa4pKaIns3ql1RrwzO1wm9JvuL/4ydA==", "dev": true, "dependencies": { - "@storybook/core-webpack": "8.3.4", + "@storybook/core-webpack": "8.3.5", "@types/node": "^22.0.0", "@types/semver": "^7.3.4", "browser-assert": "^1.2.1", @@ -5794,7 +5937,7 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.4" + "storybook": "^8.3.5" }, "peerDependenciesMeta": { "typescript": { @@ -5802,15 +5945,6 @@ } } }, - "node_modules/@storybook/builder-webpack5/node_modules/@types/node": { - "version": "22.7.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.4.tgz", - "integrity": "sha512-y+NPi1rFzDs1NdQHHToqeiX2TIS79SWEAw9GYhkkx8bD0ChpfqC+n2j5OXOCpzfojBEBt6DnEnnG9MY0zk1XLg==", - "dev": true, - "dependencies": { - "undici-types": "~6.19.2" - } - }, "node_modules/@storybook/builder-webpack5/node_modules/semver": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", @@ -5824,22 +5958,22 @@ } }, "node_modules/@storybook/components": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-8.3.4.tgz", - "integrity": "sha512-iQzLJd87uGbFBbYNqlrN/ABrnx3dUrL0tjPCarzglzshZoPCNOsllJeJx5TJwB9kCxSZ8zB9TTOgr7NXl+oyVA==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-8.3.5.tgz", + "integrity": "sha512-Rq28YogakD3FO4F8KwAtGpo1g3t4V/gfCLqTQ8B6oQUFoxLqegkWk/DlwCzvoJndXuQJfdSyM6+r1JcA4Nql5A==", "dev": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.4" + "storybook": "^8.3.5" } }, "node_modules/@storybook/core": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@storybook/core/-/core-8.3.4.tgz", - "integrity": "sha512-4PZB91JJpuKfcjeOR2LXj3ABaPLLSd2P/SfYOKNCygrDstsQa/yay3/yN5Z9yi1cIG84KRr6/sUW+0x8HsGLPg==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@storybook/core/-/core-8.3.5.tgz", + "integrity": "sha512-GOGfTvdioNa/n+Huwg4u/dsyYyBcM+gEcdxi3B7i5x4yJ3I912KoVshumQAOF2myKSRdI8h8aGWdx7nnjd0+5Q==", "dev": true, "dependencies": { "@storybook/csf": "^0.1.11", @@ -5862,9 +5996,9 @@ } }, "node_modules/@storybook/core-webpack": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-8.3.4.tgz", - "integrity": "sha512-Ftsk/8RANt46roiHT0hTyqfMPUO2/jV7EvlOR5H2XKhSbssA9njK04O2ry+BbfgKItIDIx0LTiz/I575qBCCnQ==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-8.3.5.tgz", + "integrity": "sha512-mN8BHNc6lSGUf/nKgDr6XoTt1cX+Tap9RnKMUiROCDzfVlJPeJBrG4qrTOok7AwObzeDl9DNFyun6+pVgXJe7A==", "dev": true, "dependencies": { "@types/node": "^22.0.0", @@ -5875,16 +6009,7 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.4" - } - }, - "node_modules/@storybook/core-webpack/node_modules/@types/node": { - "version": "22.7.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.4.tgz", - "integrity": "sha512-y+NPi1rFzDs1NdQHHToqeiX2TIS79SWEAw9GYhkkx8bD0ChpfqC+n2j5OXOCpzfojBEBt6DnEnnG9MY0zk1XLg==", - "dev": true, - "dependencies": { - "undici-types": "~6.19.2" + "storybook": "^8.3.5" } }, "node_modules/@storybook/core/node_modules/@esbuild/aix-ppc64": { @@ -6332,9 +6457,9 @@ } }, "node_modules/@storybook/csf-plugin": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-8.3.4.tgz", - "integrity": "sha512-ZMFWYxeTN4GxCn8dyIH4roECyLDy29yv/QKM+pHM3AC5Ny2HWI35SohWao4fGBAFxPQFbR5hPN8xa6ofHPSSTg==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-8.3.5.tgz", + "integrity": "sha512-ODVqNXwJt90hG7QW8I9w/XUyOGlr0l7XltmIJgXwB/2cYDvaGu3JV5Ybg7O0fxPV8uXk7JlRuUD8ZYv5Low6pA==", "dev": true, "dependencies": { "unplugin": "^1.3.1" @@ -6344,7 +6469,7 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.4" + "storybook": "^8.3.5" } }, "node_modules/@storybook/global": { @@ -6367,9 +6492,9 @@ } }, "node_modules/@storybook/instrumenter": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-8.3.4.tgz", - "integrity": "sha512-jVhfNOPekOyJmta0BTkQl9Z6rgRbFHlc0eV4z1oSrzaawSlc9TFzAeDCtCP57vg3FuBX8ydDYAvyZ7s4xPpLyg==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-8.3.5.tgz", + "integrity": "sha512-NLDXai5y2t1ITgHVK9chyL0rMFZbICCOGcnTbyWhkLbiEWZKPJ8FuB8+g+Ba6zwtCve1A1Cnb4O2LOWy7TgWQw==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", @@ -6381,26 +6506,26 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.4" + "storybook": "^8.3.5" } }, "node_modules/@storybook/manager-api": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-8.3.4.tgz", - "integrity": "sha512-tBx7MBfPUrKSlD666zmVjtIvoNArwCciZiW/UJ8IWmomrTJRfFBnVvPVM2gp1lkDIzRHYmz5x9BHbYaEDNcZWQ==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-8.3.5.tgz", + "integrity": "sha512-fEQoKKi7h7pzh2z9RfuzatJxubrsfL/CB99fNXQ0wshMSY/7O4ckd18pK4fzG9ErnCtLAO9qsim4N/4eQC+/8Q==", "dev": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.4" + "storybook": "^8.3.5" } }, "node_modules/@storybook/nextjs": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@storybook/nextjs/-/nextjs-8.3.4.tgz", - "integrity": "sha512-jRgqswB61YJTRNcfAnPQgRwqwmBMC0qL16EVlQKp4IY1QjfVDJKES9FSk0SdUo+3twqaBG1kLWcoyk55u917Dg==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@storybook/nextjs/-/nextjs-8.3.5.tgz", + "integrity": "sha512-YMjDSVd7BHIvj6oLMEFMKRvfZ83INxZinxtrx4ZZXGe+5iP8j7rcV7D67lxKQKWNy36d9Foj4pjT85yYj5s+ZQ==", "dev": true, "dependencies": { "@babel/core": "^7.24.4", @@ -6417,10 +6542,10 @@ "@babel/preset-typescript": "^7.24.1", "@babel/runtime": "^7.24.4", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.11", - "@storybook/builder-webpack5": "8.3.4", - "@storybook/preset-react-webpack": "8.3.4", - "@storybook/react": "8.3.4", - "@storybook/test": "8.3.4", + "@storybook/builder-webpack5": "8.3.5", + "@storybook/preset-react-webpack": "8.3.5", + "@storybook/react": "8.3.5", + "@storybook/test": "8.3.5", "@types/node": "^22.0.0", "@types/semver": "^7.3.4", "babel-loader": "^9.1.3", @@ -6457,7 +6582,7 @@ "next": "^13.5.0 || ^14.0.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "storybook": "^8.3.4", + "storybook": "^8.3.5", "webpack": "^5.0.0" }, "peerDependenciesMeta": { @@ -6469,15 +6594,6 @@ } } }, - "node_modules/@storybook/nextjs/node_modules/@types/node": { - "version": "22.5.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.5.tgz", - "integrity": "sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==", - "dev": true, - "dependencies": { - "undici-types": "~6.19.2" - } - }, "node_modules/@storybook/nextjs/node_modules/semver": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", @@ -6514,13 +6630,13 @@ } }, "node_modules/@storybook/preset-react-webpack": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@storybook/preset-react-webpack/-/preset-react-webpack-8.3.4.tgz", - "integrity": "sha512-aNbozlcBhuX71anW5+2Ujj+vtXHPsYLf5RKOL82lMkCc1q2CzeMuhUB2BoSsU4R4GVnXVpgRPq+3+qLAQMwr6Q==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@storybook/preset-react-webpack/-/preset-react-webpack-8.3.5.tgz", + "integrity": "sha512-laS9CiZrZ4CSnBTBfkBba3hmlDhzcjIfCvx8/rk3SZ+zh93NpqXixzRt6m0UH2po63dpdu21nXrsW5Cfs88Ypw==", "dev": true, "dependencies": { - "@storybook/core-webpack": "8.3.4", - "@storybook/react": "8.3.4", + "@storybook/core-webpack": "8.3.5", + "@storybook/react": "8.3.5", "@storybook/react-docgen-typescript-plugin": "1.0.6--canary.9.0c3f3b7.0", "@types/node": "^22.0.0", "@types/semver": "^7.3.4", @@ -6543,7 +6659,7 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "storybook": "^8.3.4" + "storybook": "^8.3.5" }, "peerDependenciesMeta": { "typescript": { @@ -6551,15 +6667,6 @@ } } }, - "node_modules/@storybook/preset-react-webpack/node_modules/@types/node": { - "version": "22.7.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.4.tgz", - "integrity": "sha512-y+NPi1rFzDs1NdQHHToqeiX2TIS79SWEAw9GYhkkx8bD0ChpfqC+n2j5OXOCpzfojBEBt6DnEnnG9MY0zk1XLg==", - "dev": true, - "dependencies": { - "undici-types": "~6.19.2" - } - }, "node_modules/@storybook/preset-react-webpack/node_modules/semver": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", @@ -6573,30 +6680,30 @@ } }, "node_modules/@storybook/preview-api": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.3.4.tgz", - "integrity": "sha512-/YKQ3QDVSHmtFXXCShf5w0XMlg8wkfTpdYxdGv1CKFV8DU24f3N7KWulAgeWWCWQwBzZClDa9kzxmroKlQqx3A==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.3.5.tgz", + "integrity": "sha512-VPqpudE8pmjTLvdNJoW/2//nqElDgUOmIn3QxbbCmdZTHDg5tFtxuqwdlNfArF0TxvTSBDIulXt/Q6K56TAfTg==", "dev": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.4" + "storybook": "^8.3.5" } }, "node_modules/@storybook/react": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-8.3.4.tgz", - "integrity": "sha512-PA7iQL4/9X2/iLrv+AUPNtlhTHJWhDao9gQIT1Hef39FtFk+TU9lZGbv+g29R1H9V3cHP5162nG2aTu395kmbA==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-8.3.5.tgz", + "integrity": "sha512-kuBPe/wBin10SWr4EWPKxiTRGQ4RD2etGEVWVQLqVpOuJp/J2hVvXQHtCfZXU4TZT5x4PBbPRswbr58+XlF+kQ==", "dev": true, "dependencies": { - "@storybook/components": "^8.3.4", + "@storybook/components": "^8.3.5", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "^8.3.4", - "@storybook/preview-api": "^8.3.4", - "@storybook/react-dom-shim": "8.3.4", - "@storybook/theming": "^8.3.4", + "@storybook/manager-api": "^8.3.5", + "@storybook/preview-api": "^8.3.5", + "@storybook/react-dom-shim": "8.3.5", + "@storybook/theming": "^8.3.5", "@types/escodegen": "^0.0.6", "@types/estree": "^0.0.51", "@types/node": "^22.0.0", @@ -6620,10 +6727,10 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "@storybook/test": "8.3.4", + "@storybook/test": "8.3.5", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "storybook": "^8.3.4", + "storybook": "^8.3.5", "typescript": ">= 4.2.x" }, "peerDependenciesMeta": { @@ -6655,9 +6762,9 @@ } }, "node_modules/@storybook/react-dom-shim": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.3.4.tgz", - "integrity": "sha512-L4llDvjaAzqPx6h4ddZMh36wPr75PrI2S8bXy+flLqAeVRYnRt4WNKGuxqH0t0U6MwId9+vlCZ13JBfFuY7eQQ==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.3.5.tgz", + "integrity": "sha512-Hf0UitJ/K0C7ajooooUK/PxOR4ihUWqsC7iCV1Gqth8U37dTeLMbaEO4PBwu0VQ+Ufg0N8BJLWfg7o6G4hrODw==", "dev": true, "funding": { "type": "opencollective", @@ -6666,16 +6773,7 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "storybook": "^8.3.4" - } - }, - "node_modules/@storybook/react/node_modules/@types/node": { - "version": "22.5.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.5.tgz", - "integrity": "sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==", - "dev": true, - "dependencies": { - "undici-types": "~6.19.2" + "storybook": "^8.3.5" } }, "node_modules/@storybook/react/node_modules/semver": { @@ -6691,14 +6789,14 @@ } }, "node_modules/@storybook/test": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@storybook/test/-/test-8.3.4.tgz", - "integrity": "sha512-HRiUenitln8QPHu6DEWUg9s9cEoiGN79lMykzXzw9shaUvdEIhWCsh82YKtmB3GJPj6qcc6dZL/Aio8srxyGAg==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@storybook/test/-/test-8.3.5.tgz", + "integrity": "sha512-1BXWsUGWk9FiKKelZZ55FDJdeoL8uRBHbjTYBRM2xJLhdNSvGzI4Tb3bkmxPpGn72Ua6AyldhlTxr2BpUFKOHA==", "dev": true, "dependencies": { "@storybook/csf": "^0.1.11", "@storybook/global": "^5.0.0", - "@storybook/instrumenter": "8.3.4", + "@storybook/instrumenter": "8.3.5", "@testing-library/dom": "10.4.0", "@testing-library/jest-dom": "6.5.0", "@testing-library/user-event": "14.5.2", @@ -6711,20 +6809,20 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.4" + "storybook": "^8.3.5" } }, "node_modules/@storybook/theming": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.3.4.tgz", - "integrity": "sha512-D4XVsQgTtpHEHLhwkx59aGy1GBwOedVr/mNns7hFrH8FjEpxrrWCuZQASq1ZpCl8LXlh7uvmT5sM2rOdQbGuGg==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.3.5.tgz", + "integrity": "sha512-9HmDDyC691oqfg4RziIM9ElsS2HITaxmH7n/yeUPtuirkPdAQzqOzhvH/Sa0qOhifzs8VjR+Gd/a/ZQ+S38r7w==", "dev": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.3.4" + "storybook": "^8.3.5" } }, "node_modules/@swc/counter": { @@ -6756,10 +6854,11 @@ } }, "node_modules/@tanstack/history": { - "version": "1.58.15", - "resolved": "https://registry.npmjs.org/@tanstack/history/-/history-1.58.15.tgz", - "integrity": "sha512-M36Ke2Q2v8Iv4Cx0xw04iVkixuOligiFLOifH35DqGnzXe9PAtTHIooieQowqYkAjC09KuLo5j6sgvwKTZ+U5Q==", + "version": "1.61.1", + "resolved": "https://registry.npmjs.org/@tanstack/history/-/history-1.61.1.tgz", + "integrity": "sha512-2CqERleeqO3hkhJmyJm37tiL3LYgeOpmo8szqdjgtnnG0z7ZpvzkZz6HkfOr9Ca/ha7mhAiouSvLYuLkM37AMg==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=12" @@ -6785,20 +6884,20 @@ } }, "node_modules/@tanstack/query-core": { - "version": "5.56.2", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.56.2.tgz", - "integrity": "sha512-gor0RI3/R5rVV3gXfddh1MM+hgl0Z4G7tj6Xxpq6p2I03NGPaJ8dITY9Gz05zYYb/EJq9vPas/T4wn9EaDPd4Q==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.59.0.tgz", + "integrity": "sha512-WGD8uIhX6/deH/tkZqPNcRyAhDUqs729bWKoByYHSogcshXfFbppOdTER5+qY7mFvu8KEFJwT0nxr8RfPTVh0Q==", "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" } }, "node_modules/@tanstack/react-query": { - "version": "5.56.2", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.56.2.tgz", - "integrity": "sha512-SR0GzHVo6yzhN72pnRhkEFRAHMsUo5ZPzAxfTMvUxFIDVS6W9LYUp6nXW3fcHVdg0ZJl8opSH85jqahvm6DSVg==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.59.0.tgz", + "integrity": "sha512-YDXp3OORbYR+8HNQx+lf4F73NoiCmCcSvZvgxE29OifmQFk0sBlO26NWLHpcNERo92tVk3w+JQ53/vkcRUY1hA==", "dependencies": { - "@tanstack/query-core": "5.56.2" + "@tanstack/query-core": "5.59.0" }, "funding": { "type": "github", @@ -6809,13 +6908,14 @@ } }, "node_modules/@tanstack/react-router": { - "version": "1.58.15", - "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.58.15.tgz", - "integrity": "sha512-bo5G6MGrTnrshnbNGvpsfffhJHNP+mP+BevA0Sdq0EQFuzFHuA+9MVihD4AAH0bE8jrtiBd25DLH+6Sa0Zt7nw==", + "version": "1.62.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.62.1.tgz", + "integrity": "sha512-8xMVZForpvRK8EtCKJ/ZBVqC3LXGYETeqRns+aFjdQRqy3rnreYKJ+pUDz1gkMWi3fYfC1jvJdZbJdZAtCEssw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "@tanstack/history": "1.58.15", + "@tanstack/history": "1.61.1", "@tanstack/react-store": "^0.5.5", "tiny-invariant": "^1.3.3", "tiny-warning": "^1.0.3" @@ -6843,6 +6943,7 @@ "resolved": "https://registry.npmjs.org/@tanstack/react-store/-/react-store-0.5.5.tgz", "integrity": "sha512-1orYXGatBqXCYKuroFwV8Ll/6aDa5E3pU6RR4h7RvRk7TmxF1+zLCsWALZaeijXkySNMGmvawSbUXRypivg2XA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@tanstack/store": "0.5.5", @@ -6877,10 +6978,11 @@ } }, "node_modules/@tanstack/router-devtools": { - "version": "1.58.15", - "resolved": "https://registry.npmjs.org/@tanstack/router-devtools/-/router-devtools-1.58.15.tgz", - "integrity": "sha512-8ZeqYgpr3OkbggYpcpWs+VpoC0nk9wMOAHLifFZ0QX0xD75dS6stAKhZpzljHvWdGwz6FpBTeSoZtNdxnhN+NA==", + "version": "1.62.1", + "resolved": "https://registry.npmjs.org/@tanstack/router-devtools/-/router-devtools-1.62.1.tgz", + "integrity": "sha512-MTxGell0S4GcCmLLJkCgiNk91Omr8gvMJ62bq892RVBI/O5oBzuZKW6SDLdiToJWKaB2PaL8HyNO0b2AYkPT8g==", "dev": true, + "license": "MIT", "dependencies": { "clsx": "^2.1.1", "goober": "^2.1.14" @@ -6893,7 +6995,7 @@ "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/react-router": "^1.58.15", + "@tanstack/react-router": "^1.62.1", "react": ">=18", "react-dom": ">=18" } @@ -6927,19 +7029,20 @@ } }, "node_modules/@tanstack/router-plugin": { - "version": "1.58.12", - "resolved": "https://registry.npmjs.org/@tanstack/router-plugin/-/router-plugin-1.58.12.tgz", - "integrity": "sha512-WVR5UupNcvj7lvCrle7CrmHm6aezTG98g3N81oNPaCS0U3cEUaUiNqna0cWk4M4WuzAzUbpbQ81xBapIMc8Thw==", + "version": "1.62.0", + "resolved": "https://registry.npmjs.org/@tanstack/router-plugin/-/router-plugin-1.62.0.tgz", + "integrity": "sha512-I+S1QWjKKvWqEns4pwH4KfM0jkiXv00Q5DnG0lw7DKETfBy77UpMLUDruayKfeqErbMv/ksxt6hSlpm3Hlx2dw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.25.2", - "@babel/generator": "^7.25.6", - "@babel/parser": "^7.25.6", - "@babel/plugin-syntax-jsx": "^7.24.7", - "@babel/plugin-syntax-typescript": "^7.25.4", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.6", - "@babel/types": "^7.25.6", + "@babel/core": "^7.25.7", + "@babel/generator": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/plugin-syntax-jsx": "^7.25.7", + "@babel/plugin-syntax-typescript": "^7.25.7", + "@babel/template": "^7.25.7", + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7", "@tanstack/router-generator": "^1.58.12", "@tanstack/virtual-file-routes": "^1.56.0", "@types/babel__core": "^7.20.5", @@ -6980,6 +7083,7 @@ "resolved": "https://registry.npmjs.org/@tanstack/store/-/store-0.5.5.tgz", "integrity": "sha512-EOSrgdDAJExbvRZEQ/Xhh9iZchXpMN+ga1Bnk8Nmygzs8TfiE6hbzThF+Pr2G19uHL6+DTDTHhJ8VQiOd7l4tA==", "dev": true, + "license": "MIT", "peer": true, "funding": { "type": "github", @@ -7371,9 +7475,10 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.16.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.1.tgz", - "integrity": "sha512-zJDo7wEadFtSyNz5QITDfRcrhqDvQI1xQNQ0VoizPjM/dVAODqqIUWbJPkvsxmTI0MYRGRikcdjMPhOssnPejQ==", + "version": "22.7.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.4.tgz", + "integrity": "sha512-y+NPi1rFzDs1NdQHHToqeiX2TIS79SWEAw9GYhkkx8bD0ChpfqC+n2j5OXOCpzfojBEBt6DnEnnG9MY0zk1XLg==", + "license": "MIT", "dependencies": { "undici-types": "~6.19.2" } @@ -7476,31 +7581,32 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", - "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.8.0.tgz", + "integrity": "sha512-wORFWjU30B2WJ/aXBfOm1LX9v9nyt9D3jsSOxC3cCaTQGCW5k4jNpmjFv3U7p/7s4yvdjHzwtv2Sd2dOyhjS0A==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/type-utils": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", + "@typescript-eslint/scope-manager": "8.8.0", + "@typescript-eslint/type-utils": "8.8.0", + "@typescript-eslint/utils": "8.8.0", + "@typescript-eslint/visitor-keys": "8.8.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -7509,26 +7615,27 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", - "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.8.0.tgz", + "integrity": "sha512-uEFUsgR+tl8GmzmLjRqz+VrDv4eoaMqMXW7ruXfgThaAShO9JTciKpEsB+TvnfFfbg5IpujgMXVV36gOJRLtZg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", + "@typescript-eslint/scope-manager": "8.8.0", + "@typescript-eslint/types": "8.8.0", + "@typescript-eslint/typescript-estree": "8.8.0", + "@typescript-eslint/visitor-keys": "8.8.0", "debug": "^4.3.4" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" + "eslint": "^8.57.0 || ^9.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -7537,16 +7644,17 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", - "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.8.0.tgz", + "integrity": "sha512-EL8eaGC6gx3jDd8GwEFEV091210U97J0jeEHrAYvIYosmEGet4wJ+g0SYmLu+oRiAwbSA5AVrt6DxLHfdd+bUg==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0" + "@typescript-eslint/types": "8.8.0", + "@typescript-eslint/visitor-keys": "8.8.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -7554,26 +7662,24 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", - "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.8.0.tgz", + "integrity": "sha512-IKwJSS7bCqyCeG4NVGxnOP6lLT9Okc3Zj8hLO96bpMkJab+10HIfJbMouLrlpyOr3yrQ1cA413YPFiGd1mW9/Q==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/typescript-estree": "8.8.0", + "@typescript-eslint/utils": "8.8.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependencies": { - "eslint": "^8.56.0" - }, "peerDependenciesMeta": { "typescript": { "optional": true @@ -7581,12 +7687,13 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.8.0.tgz", + "integrity": "sha512-QJwc50hRCgBd/k12sTykOJbESe1RrzmX6COk8Y525C9l7oweZ+1lw9JiU56im7Amm8swlz00DRIlxMYLizr2Vw==", "dev": true, + "license": "MIT", "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -7594,22 +7701,23 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", - "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.8.0.tgz", + "integrity": "sha512-ZaMJwc/0ckLz5DaAZ+pNLmHv8AMVGtfWxZe/x2JVEkD5LnmhWiQMMcYT7IY7gkdJuzJ9P14fRy28lUrlDSWYdw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", + "@typescript-eslint/types": "8.8.0", + "@typescript-eslint/visitor-keys": "8.8.0", "debug": "^4.3.4", - "globby": "^11.1.0", + "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -7626,6 +7734,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -7634,38 +7743,40 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", - "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.8.0.tgz", + "integrity": "sha512-QE2MgfOTem00qrlPgyByaCHay9yb1+9BjnMFnSFkUKQfu7adBXDTnCAivURnuPPAG/qiB+kzKkZKmKfaMT0zVg==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0" + "@typescript-eslint/scope-manager": "8.8.0", + "@typescript-eslint/types": "8.8.0", + "@typescript-eslint/typescript-estree": "8.8.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" + "eslint": "^8.57.0 || ^9.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", - "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.8.0.tgz", + "integrity": "sha512-8mq51Lx6Hpmd7HnA2fcHQo3YgfX1qbccxQOgZcb4tvasu//zXRaA1j5ZRFeCw/VRAdFi4mRM9DnZw0Nu0Q2d1g==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/types": "8.8.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -7697,9 +7808,9 @@ } }, "node_modules/@vitest/coverage-v8": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.1.tgz", - "integrity": "sha512-md/A7A3c42oTT8JUHSqjP5uKTWJejzUW4jalpvs+rZ27gsURsMU8DEb+8Jf8C6Kj2gwfSHJqobDNBuoqlm0cFw==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.2.tgz", + "integrity": "sha512-b7kHrFrs2urS0cOk5N10lttI8UdJ/yP3nB4JYTREvR5o18cR99yPpK4gK8oQgI42BVv0ILWYUSYB7AXkAUDc0g==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.3.0", @@ -7719,8 +7830,8 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/browser": "2.1.1", - "vitest": "2.1.1" + "@vitest/browser": "2.1.2", + "vitest": "2.1.2" }, "peerDependenciesMeta": { "@vitest/browser": { @@ -7834,9 +7945,9 @@ } }, "node_modules/@vitest/mocker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.1.tgz", - "integrity": "sha512-LNN5VwOEdJqCmJ/2XJBywB11DLlkbY0ooDJW3uRX5cZyYCrc4PI/ePX0iQhE3BiEGiQmK4GE7Q/PqCkkaiPnrA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.2.tgz", + "integrity": "sha512-ExElkCGMS13JAJy+812fw1aCv2QO/LBK6CyO4WOPAzLTmve50gydOlWhgdBJPx2ztbADUq3JVI0C5U+bShaeEA==", "dev": true, "dependencies": { "@vitest/spy": "^2.1.0-beta.1", @@ -7847,7 +7958,7 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/spy": "2.1.1", + "@vitest/spy": "2.1.2", "msw": "^2.3.5", "vite": "^5.0.0" }, @@ -7861,9 +7972,9 @@ } }, "node_modules/@vitest/mocker/node_modules/@vitest/spy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.1.tgz", - "integrity": "sha512-ZM39BnZ9t/xZ/nF4UwRH5il0Sw93QnZXd9NAZGRpIgj0yvVwPpLd702s/Cx955rGaMlyBQkZJ2Ir7qyY48VZ+g==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.2.tgz", + "integrity": "sha512-GSUi5zoy+abNRJwmFhBDC0yRuVUn8WMlQscvnbbXdKLXX9dE59YbfwXxuJ/mth6eeqIzofU8BB5XDo/Ns/qK2A==", "dev": true, "dependencies": { "tinyspy": "^3.0.0" @@ -7873,9 +7984,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.1.tgz", - "integrity": "sha512-SjxPFOtuINDUW8/UkElJYQSFtnWX7tMksSGW0vfjxMneFqxVr8YJ979QpMbDW7g+BIiq88RAGDjf7en6rvLPPQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.2.tgz", + "integrity": "sha512-FIoglbHrSUlOJPDGIrh2bjX1sNars5HbxlcsFKCtKzu4+5lpsRhOCVcuzp0fEhAGHkPZRIXVNzPcpSlkoZ3LuA==", "dev": true, "dependencies": { "tinyrainbow": "^1.2.0" @@ -7885,12 +7996,12 @@ } }, "node_modules/@vitest/runner": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.1.tgz", - "integrity": "sha512-uTPuY6PWOYitIkLPidaY5L3t0JJITdGTSwBtwMjKzo5O6RCOEncz9PUN+0pDidX8kTHYjO0EwUIvhlGpnGpxmA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.2.tgz", + "integrity": "sha512-UCsPtvluHO3u7jdoONGjOSil+uON5SSvU9buQh3lP7GgUXHp78guN1wRmZDX4wGK6J10f9NUtP6pO+SFquoMlw==", "dev": true, "dependencies": { - "@vitest/utils": "2.1.1", + "@vitest/utils": "2.1.2", "pathe": "^1.1.2" }, "funding": { @@ -7898,12 +8009,12 @@ } }, "node_modules/@vitest/snapshot": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.1.tgz", - "integrity": "sha512-BnSku1WFy7r4mm96ha2FzN99AZJgpZOWrAhtQfoxjUU5YMRpq1zmHRq7a5K9/NjqonebO7iVDla+VvZS8BOWMw==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.2.tgz", + "integrity": "sha512-xtAeNsZ++aRIYIUsek7VHzry/9AcxeULlegBvsdLncLmNCR6tR8SRjn8BbDP4naxtccvzTqZ+L1ltZlRCfBZFA==", "dev": true, "dependencies": { - "@vitest/pretty-format": "2.1.1", + "@vitest/pretty-format": "2.1.2", "magic-string": "^0.30.11", "pathe": "^1.1.2" }, @@ -7924,12 +8035,12 @@ } }, "node_modules/@vitest/utils": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.1.tgz", - "integrity": "sha512-Y6Q9TsI+qJ2CC0ZKj6VBb+T8UPz593N113nnUykqwANqhgf3QkZeHFlusgKLTqrnVHbj/XDKZcDHol+dxVT+rQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.2.tgz", + "integrity": "sha512-zMO2KdYy6mx56btx9JvAqAZ6EyS3g49krMPPrgOp1yxGZiA93HumGk+bZ5jIZtOg5/VBYl5eBmGRQHqq4FG6uQ==", "dev": true, "dependencies": { - "@vitest/pretty-format": "2.1.1", + "@vitest/pretty-format": "2.1.2", "loupe": "^3.1.1", "tinyrainbow": "^1.2.0" }, @@ -9093,9 +9204,9 @@ } }, "node_modules/browserslist": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", - "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", + "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==", "funding": [ { "type": "opencollective", @@ -9111,8 +9222,8 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001646", - "electron-to-chromium": "^1.5.4", + "caniuse-lite": "^1.0.30001663", + "electron-to-chromium": "^1.5.28", "node-releases": "^2.0.18", "update-browserslist-db": "^1.1.0" }, @@ -9242,9 +9353,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001651", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz", - "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==", + "version": "1.0.30001667", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001667.tgz", + "integrity": "sha512-7LTwJjcRkzKFmtqGsibMeuXmvFDfZq/nzIjnmgCGzKKRVzjD72selLDK1oPF/Oxzmt4fNcPvTDvGqSDG4tCALw==", "funding": [ { "type": "opencollective", @@ -10748,9 +10859,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.5.11", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.11.tgz", - "integrity": "sha512-R1CccCDYqndR25CaXFd6hp/u9RaaMcftMkphmvuepXr5b1vfLkRml6aWVeBhXJ7rbevHkKEMJtz8XqPf7ffmew==" + "version": "1.5.32", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.32.tgz", + "integrity": "sha512-M+7ph0VGBQqqpTT2YrabjNKSQ2fEl9PVx6AK3N558gDH9NO8O6XN9SXXFWRo9u9PbEg/bWq+tjXQr+eXmxubCw==" }, "node_modules/elliptic": { "version": "6.5.7", @@ -11043,9 +11154,14 @@ } }, "node_modules/es-toolkit": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.22.0.tgz", - "integrity": "sha512-0mvZ7as1Irwi+i5BNTM4Lrt5NnZGz4TcMIG8FTUuqI6GswziFGPHrmVlK+kkafSqhofKKVs6gn0GSGZiWVxAHw==" + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.24.0.tgz", + "integrity": "sha512-nZM+MRSGhKjCdjvqWEFr5Jns6vxoXtBcsl4/cEsGMgsMx8Z2ato4vBTGMUSIQBZJgEdKyNcgGh42yu9xiuNYtQ==", + "license": "MIT", + "workspaces": [ + "docs", + "benchmarks" + ] }, "node_modules/esbuild": { "version": "0.24.0", @@ -14030,14 +14146,14 @@ } }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-buffer": { @@ -14293,9 +14409,9 @@ } }, "node_modules/lucide-react": { - "version": "0.446.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.446.0.tgz", - "integrity": "sha512-BU7gy8MfBMqvEdDPH79VhOXSEgyG8TSPOKWaExWGCQVqnGH7wGgDngPbofu+KdtVjPQBWbEmnfMTq90CTiiDRg==", + "version": "0.447.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.447.0.tgz", + "integrity": "sha512-SZ//hQmvi+kDKrNepArVkYK7/jfeZ5uFNEnYmd45RKZcbGD78KLnrcNXmgeg6m+xNHFvTG+CblszXCy4n6DN4w==", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc" } @@ -16197,11 +16313,11 @@ } }, "node_modules/react-remove-scroll": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.7.tgz", - "integrity": "sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", + "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", "dependencies": { - "react-remove-scroll-bar": "^2.3.4", + "react-remove-scroll-bar": "^2.3.6", "react-style-singleton": "^2.2.1", "tslib": "^2.1.0", "use-callback-ref": "^1.3.0", @@ -17333,12 +17449,12 @@ } }, "node_modules/storybook": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-8.3.4.tgz", - "integrity": "sha512-nzvuK5TsEgJwcWGLGgafabBOxKn37lfJVv7ZoUVPgJIjk2mNRyJDFwYRJzUZaD37eiR/c/lQ6MoaeqlGwiXoxw==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-8.3.5.tgz", + "integrity": "sha512-hYQVtP2l+3kO8oKDn4fjXXQYxgTRsj/LaV6lUMJH0zt+OhVmDXKJLxmdUP4ieTm0T8wEbSYosFavgPcQZlxRfw==", "dev": true, "dependencies": { - "@storybook/core": "8.3.4" + "@storybook/core": "8.3.5" }, "bin": { "getstorybook": "bin/index.cjs", @@ -18032,6 +18148,7 @@ "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/tinybench": { @@ -19180,6 +19297,7 @@ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz", "integrity": "sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==", "dev": true, + "license": "MIT", "peer": true, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0" @@ -19307,9 +19425,9 @@ } }, "node_modules/vite-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.1.tgz", - "integrity": "sha512-N/mGckI1suG/5wQI35XeR9rsMsPqKXzq1CdUndzVstBj/HvyxxGctwnK6WX43NGt5L3Z5tcRf83g4TITKJhPrA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.2.tgz", + "integrity": "sha512-HPcGNN5g/7I2OtPjLqgOtCRu/qhVvBxTUD3qzitmL0SrG1cWFzxzhMDWussxSbrRYWqnKf8P2jiNhPMSN+ymsQ==", "dev": true, "dependencies": { "cac": "^6.7.14", @@ -19710,18 +19828,18 @@ } }, "node_modules/vitest": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.1.tgz", - "integrity": "sha512-97We7/VC0e9X5zBVkvt7SGQMGrRtn3KtySFQG5fpaMlS+l62eeXRQO633AYhSTC3z7IMebnPPNjGXVGNRFlxBA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.2.tgz", + "integrity": "sha512-veNjLizOMkRrJ6xxb+pvxN6/QAWg95mzcRjtmkepXdN87FNfxAss9RKe2far/G9cQpipfgP2taqg0KiWsquj8A==", "dev": true, "dependencies": { - "@vitest/expect": "2.1.1", - "@vitest/mocker": "2.1.1", - "@vitest/pretty-format": "^2.1.1", - "@vitest/runner": "2.1.1", - "@vitest/snapshot": "2.1.1", - "@vitest/spy": "2.1.1", - "@vitest/utils": "2.1.1", + "@vitest/expect": "2.1.2", + "@vitest/mocker": "2.1.2", + "@vitest/pretty-format": "^2.1.2", + "@vitest/runner": "2.1.2", + "@vitest/snapshot": "2.1.2", + "@vitest/spy": "2.1.2", + "@vitest/utils": "2.1.2", "chai": "^5.1.1", "debug": "^4.3.6", "magic-string": "^0.30.11", @@ -19732,7 +19850,7 @@ "tinypool": "^1.0.0", "tinyrainbow": "^1.2.0", "vite": "^5.0.0", - "vite-node": "2.1.1", + "vite-node": "2.1.2", "why-is-node-running": "^2.3.0" }, "bin": { @@ -19747,8 +19865,8 @@ "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "2.1.1", - "@vitest/ui": "2.1.1", + "@vitest/browser": "2.1.2", + "@vitest/ui": "2.1.2", "happy-dom": "*", "jsdom": "*" }, @@ -19774,13 +19892,13 @@ } }, "node_modules/vitest/node_modules/@vitest/expect": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.1.tgz", - "integrity": "sha512-YeueunS0HiHiQxk+KEOnq/QMzlUuOzbU1Go+PgAsHvvv3tUkJPm9xWt+6ITNTlzsMXUjmgm5T+U7KBPK2qQV6w==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.2.tgz", + "integrity": "sha512-FEgtlN8mIUSEAAnlvn7mP8vzaWhEaAEvhSXCqrsijM7K6QqjB11qoRZYEd4AKSCDz8p0/+yH5LzhZ47qt+EyPg==", "dev": true, "dependencies": { - "@vitest/spy": "2.1.1", - "@vitest/utils": "2.1.1", + "@vitest/spy": "2.1.2", + "@vitest/utils": "2.1.2", "chai": "^5.1.1", "tinyrainbow": "^1.2.0" }, @@ -19789,9 +19907,9 @@ } }, "node_modules/vitest/node_modules/@vitest/spy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.1.tgz", - "integrity": "sha512-ZM39BnZ9t/xZ/nF4UwRH5il0Sw93QnZXd9NAZGRpIgj0yvVwPpLd702s/Cx955rGaMlyBQkZJ2Ir7qyY48VZ+g==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.2.tgz", + "integrity": "sha512-GSUi5zoy+abNRJwmFhBDC0yRuVUn8WMlQscvnbbXdKLXX9dE59YbfwXxuJ/mth6eeqIzofU8BB5XDo/Ns/qK2A==", "dev": true, "dependencies": { "tinyspy": "^3.0.0" diff --git a/package.json b/package.json index eb93b207..e93e0a7e 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,9 @@ "Stanford", "Biodesign" ], + "engines": { + "node": "22" + }, "repository": { "type": "git", "url": "https://github.com/StanfordBDHG/ENGAGE-HF-Web-Frontend" @@ -25,31 +28,31 @@ "dependencies": { "@hookform/resolvers": "^3.9.0", "@nextui-org/pagination": "^2.0.36", - "@radix-ui/react-checkbox": "^1.1.1", - "@radix-ui/react-dialog": "^1.1.1", - "@radix-ui/react-dropdown-menu": "^2.1.1", + "@radix-ui/react-checkbox": "^1.1.2", + "@radix-ui/react-dialog": "^1.1.2", + "@radix-ui/react-dropdown-menu": "^2.1.2", "@radix-ui/react-label": "^2.1.0", - "@radix-ui/react-popover": "^1.1.1", - "@radix-ui/react-radio-group": "^1.2.0", - "@radix-ui/react-select": "^2.1.1", + "@radix-ui/react-popover": "^1.1.2", + "@radix-ui/react-radio-group": "^1.2.1", + "@radix-ui/react-select": "^2.1.2", "@radix-ui/react-separator": "^1.1.0", "@radix-ui/react-slot": "^1.1.0", - "@radix-ui/react-switch": "^1.1.0", - "@radix-ui/react-tabs": "^1.1.0", - "@radix-ui/react-tooltip": "^1.1.2", - "@stanfordbdhg/engagehf-models": "^0.2.0", + "@radix-ui/react-switch": "^1.1.1", + "@radix-ui/react-tabs": "^1.1.1", + "@radix-ui/react-tooltip": "^1.1.3", + "@stanfordbdhg/engagehf-models": "^0.3.1", "@t3-oss/env-core": "^0.11.1", "@tanstack/match-sorter-utils": "^8.19.4", - "@tanstack/react-query": "^5.56.2", + "@tanstack/react-query": "^5.59.0", "@tanstack/react-table": "^8.20.5", "@vitejs/plugin-react": "^4.3.2", "class-variance-authority": "^0.7.0", "cmdk": "^1.0.0", "date-fns": "^3.6.0", - "es-toolkit": "^1.22.0", + "es-toolkit": "^1.24.0", "firebase": "^10.14.0", "jsdom": "^25.0.1", - "lucide-react": "^0.446.0", + "lucide-react": "^0.447.0", "next-intl": "^3.20.0", "prettier-plugin-tailwindcss": "^0.6.8", "react": "^18", @@ -61,30 +64,30 @@ "sonner": "^1.5.0", "use-debounce": "^10.0.3", "vite-envs": "^4.4.5", - "vitest": "^2.1.1", + "vitest": "^2.1.2", "zod": "^3.23.8" }, "devDependencies": { - "@storybook/addon-essentials": "^8.3.4", - "@storybook/addon-interactions": "^8.3.4", - "@storybook/addon-links": "^8.3.4", - "@storybook/addon-onboarding": "^8.3.4", - "@storybook/blocks": "^8.3.4", - "@storybook/nextjs": "^8.3.4", - "@storybook/react": "^8.3.4", - "@storybook/test": "^8.3.4", - "@tanstack/router-devtools": "^1.58.15", - "@tanstack/router-plugin": "^1.58.12", + "@storybook/addon-essentials": "^8.3.5", + "@storybook/addon-interactions": "^8.3.5", + "@storybook/addon-links": "^8.3.5", + "@storybook/addon-onboarding": "^8.3.5", + "@storybook/blocks": "^8.3.5", + "@storybook/nextjs": "^8.3.5", + "@storybook/react": "^8.3.5", + "@storybook/test": "^8.3.5", + "@tanstack/router-devtools": "^1.62.1", + "@tanstack/router-plugin": "^1.62.0", "@testing-library/jest-dom": "^6", "@testing-library/react": "^16", "@total-typescript/ts-reset": "^0.6.1", - "@types/node": "^20", + "@types/node": "^22", "@types/react": "^18", "@types/react-dom": "^18", "@types/react-helmet": "^6.1.11", - "@typescript-eslint/eslint-plugin": "^7", - "@typescript-eslint/parser": "^7", - "@vitest/coverage-v8": "^2.1.1", + "@typescript-eslint/eslint-plugin": "^8", + "@typescript-eslint/parser": "^8", + "@vitest/coverage-v8": "^2.1.2", "autoprefixer": "^10", "concurrently": "^9", "esbuild": "^0.24.0", @@ -98,12 +101,12 @@ "postcss-import": "^16.1.0", "prettier": "^3", "prop-types": "^15.8.1", - "storybook": "^8.3.4", + "storybook": "^8.3.5", "tailwindcss": "^3", "tailwindcss-animate": "^1.0.7", "typedoc": "^0.26", "typescript": "^5", "vite": "^5.4.8", - "vitest": "^2.1.1" + "vitest": "^2.1.2" } } diff --git a/packages/design-system/src/components/DataTable/DataTable.columns.ts b/packages/design-system/src/components/DataTable/DataTable.columns.ts index 2e02c6a3..005db7a2 100644 --- a/packages/design-system/src/components/DataTable/DataTable.columns.ts +++ b/packages/design-system/src/components/DataTable/DataTable.columns.ts @@ -6,18 +6,11 @@ // SPDX-License-Identifier: MIT // import { type CellContext } from '@tanstack/react-table' -import { formatISODateTime } from '../../utils/date' +import { formatNilDate, formatNilDateTime } from '../../utils/date' import { type Nil } from '../../utils/misc' -export const dateColumn = (props: CellContext>) => { - const value = props.getValue() - const date = value ? new Date(value) : undefined - return date?.toLocaleDateString() ?? '' -} +export const dateColumn = (props: CellContext>) => + formatNilDate(props.getValue()) ?? '' -export const dateTimeColumn = ( - props: CellContext>, -) => { - const value = props.getValue() - return value ? formatISODateTime(value) : '' -} +export const dateTimeColumn = (props: CellContext>) => + formatNilDateTime(props.getValue()) ?? '' diff --git a/packages/design-system/src/utils/date.ts b/packages/design-system/src/utils/date.ts index b13331b4..04ba15be 100644 --- a/packages/design-system/src/utils/date.ts +++ b/packages/design-system/src/utils/date.ts @@ -6,10 +6,23 @@ // SPDX-License-Identifier: MIT // -export const formatDateTime = (date: Date) => - `${date.toLocaleDateString()} ${date.toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit' })}` +import { isNil } from 'es-toolkit' +import { type Nil } from '@/packages/design-system/src/utils/misc' -export const formatISODateTime = (value: string | Date) => { +type DateInput = Date | string | number + +export const formatDate = (value: DateInput) => { + const date = new Date(value) + return date.toLocaleDateString() +} + +export const formatNilDate = (value: Nil) => + value === '' || isNil(value) ? null : formatDate(value) + +export const formatDateTime = (value: DateInput) => { const date = new Date(value) - return formatDateTime(date) + return `${date.toLocaleDateString()} ${date.toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit' })}` } + +export const formatNilDateTime = (value: Nil) => + value === '' || isNil(value) ? null : formatDateTime(value) diff --git a/packages/design-system/src/utils/misc/misc.ts b/packages/design-system/src/utils/misc/misc.ts index bf911030..6086974d 100644 --- a/packages/design-system/src/utils/misc/misc.ts +++ b/packages/design-system/src/utils/misc/misc.ts @@ -14,7 +14,7 @@ import { toast } from '../../components/Toaster' * Negates value * Useful for functional patterns and state callbacks * */ -export const not = (value: T) => !value +export const not = (value: unknown) => !value export type InitialState = T | (() => T) @@ -37,7 +37,7 @@ export const copyToClipboard = async (value: string) => { try { await navigator.clipboard.writeText(value) toast('Copied to clipboard') - } catch (error) { + } catch { console.info('Copying failed') } } diff --git a/packages/design-system/src/utils/useOpenState/useOpenState.ts b/packages/design-system/src/utils/useOpenState/useOpenState.ts index 1687569b..29e38066 100644 --- a/packages/design-system/src/utils/useOpenState/useOpenState.ts +++ b/packages/design-system/src/utils/useOpenState/useOpenState.ts @@ -35,7 +35,7 @@ export const useOpenState = (initialValue: InitialState = false) => { * State is kept after closing to prevent flickering of exit animations * */ export const useStatefulOpenState = ( - initialStateValue?: T | undefined, + initialStateValue?: T, initialValue?: InitialState, ) => { const [state, setState] = useState(initialStateValue) diff --git a/routes/~_dashboard/~patients/clientUtils.ts b/routes/~_dashboard/~patients/clientUtils.ts index db1e7221..6994b08b 100644 --- a/routes/~_dashboard/~patients/clientUtils.ts +++ b/routes/~_dashboard/~patients/clientUtils.ts @@ -7,68 +7,76 @@ // import { useMemo } from 'react' import { basicFhirCoding } from '@/modules/firebase/models' -import { ObservationType } from '@/modules/firebase/utils' -import { strategy } from '@/packages/design-system/src/utils/misc' +import { UserObservationCollection } from '@/modules/firebase/utils' import { type MedicationsData } from '@/routes/~_dashboard/~patients/utils' -export const getObservationTypeUnits = (observationType: ObservationType) => - strategy( - { - [ObservationType.eGFR]: [ - { - unit: 'mL/min/1.73m2', - code: 'mL/min/{1.73_m2}', - coding: [ - { - ...basicFhirCoding, - system: 'http://loinc.org', - code: '98979-8', - display: - 'Glomerular filtration rate/1.73 sq M.predicted [Volume Rate/Area] in Serum, Plasma or Blood by Creatinine-based formula (CKD-EPI 2021)', - }, - ], - }, - ], - [ObservationType.potassium]: [ - { - unit: 'mEq/L', - code: 'meq/L', - coding: [ - { - ...basicFhirCoding, - system: 'http://loinc.org', - code: '6298-4', - display: 'Potassium [Moles/volume] in Blood', - }, - ], - }, - ], - [ObservationType.creatinine]: [ - { - unit: 'mg/dL', - code: 'mg/dL', - coding: [ - { - ...basicFhirCoding, - system: 'http://loinc.org', - code: '2160-0', - display: 'Creatinine [Mass/volume] in Serum or Plasma', - }, - ], - }, - ], - }, - observationType, - ) +export const labsObservationCollections = [ + UserObservationCollection.creatinine, + UserObservationCollection.eGfr, + UserObservationCollection.potassium, +] + +export const getObservationTypeUnits = ( + observationType: UserObservationCollection, +) => { + if (observationType === UserObservationCollection.eGfr) + return [ + { + unit: 'mL/min/1.73m2', + code: 'mL/min/{1.73_m2}', + coding: [ + { + ...basicFhirCoding, + system: 'http://loinc.org', + code: '98979-8', + display: + 'Glomerular filtration rate/1.73 sq M.predicted [Volume Rate/Area] in Serum, Plasma or Blood by Creatinine-based formula (CKD-EPI 2021)', + }, + ], + }, + ] + if (observationType === UserObservationCollection.potassium) + return [ + { + unit: 'mEq/L', + code: 'meq/L', + coding: [ + { + ...basicFhirCoding, + system: 'http://loinc.org', + code: '6298-4', + display: 'Potassium [Moles/volume] in Blood', + }, + ], + }, + ] + if (observationType === UserObservationCollection.creatinine) + return [ + { + unit: 'mg/dL', + code: 'mg/dL', + coding: [ + { + ...basicFhirCoding, + system: 'http://loinc.org', + code: '2160-0', + display: 'Creatinine [Mass/volume] in Serum or Plasma', + }, + ], + }, + ] +} export const getUnitOfObservationType = ( - type: ObservationType, + type: UserObservationCollection, currentUnit?: string, ) => { const newUnits = getObservationTypeUnits(type) const existingUnit = - currentUnit ? newUnits.find((unit) => unit.unit === currentUnit) : undefined - const newUnit = existingUnit ?? newUnits.at(0) + currentUnit ? + newUnits?.find((unit) => unit.unit === currentUnit) + : undefined + const newUnit = existingUnit ?? newUnits?.at(0) if (!newUnit) throw new Error('Observation units cannot be empty') return newUnit } diff --git a/routes/~_dashboard/~patients/utils.ts b/routes/~_dashboard/~patients/utils.ts index 4e099857..d1a7054f 100644 --- a/routes/~_dashboard/~patients/utils.ts +++ b/routes/~_dashboard/~patients/utils.ts @@ -11,7 +11,7 @@ import { UserType, } from '@stanfordbdhg/engagehf-models' import { groupBy } from 'es-toolkit' -import { query, where } from 'firebase/firestore' +import { limit, orderBy, query, where } from 'firebase/firestore' import { AllergyType } from '@/modules/firebase/allergy' import { getCurrentUser, refs } from '@/modules/firebase/app' import { @@ -20,13 +20,13 @@ import { } from '@/modules/firebase/appointment' import { type FHIRAllergyIntolerance } from '@/modules/firebase/models' import { mapAuthData } from '@/modules/firebase/user' -import { - getDocsData, - ObservationType, - type ResourceType, -} from '@/modules/firebase/utils' +import { getDocsData, type ResourceType } from '@/modules/firebase/utils' import { queryClient } from '@/modules/query/queryClient' -import { userOrganizationQueryOptions } from '@/modules/user/queries' +import { + type getUserData, + userOrganizationQueryOptions, +} from '@/modules/user/queries' +import { labsObservationCollections } from '@/routes/~_dashboard/~patients/clientUtils' const getUserClinicians = async () => { const { user } = await getCurrentUser() @@ -145,14 +145,12 @@ export const getLabsData = async ({ resourceType: ResourceType }) => { const rawObservations = await Promise.all( - Object.values(ObservationType).map(async (type) => { - return { - type, - data: await getDocsData( - refs.userObservation({ userId, resourceType, observationType: type }), - ), - } - }), + labsObservationCollections.map(async (type) => ({ + type, + data: await getDocsData( + refs.userObservation({ userId, resourceType, observationType: type }), + ), + })), ) const observations = rawObservations.flatMap((observations) => @@ -218,6 +216,24 @@ export const getAppointmentsData = async ({ } } +export const getUserActivity = async ({ + user, + resourceType, + authUser, +}: Awaited>) => { + const latestQuestionnaires = await getDocsData( + query( + refs.questionnaireResponses({ resourceType, userId: authUser.uid }), + orderBy('authored'), + limit(1), + ), + ) + return { + lastActiveDate: user.lastActiveDate, + latestQuestionnaireDate: latestQuestionnaires.at(0)?.authored, + } +} + export type AllergiesData = Awaited> export type Allergy = AllergiesData['allergyIntolerances'][number] export type AppointmentsData = Awaited> @@ -225,3 +241,4 @@ export type Appointment = AppointmentsData['appointments'][number] export type LabsData = Awaited> export type Observation = LabsData['observations'][number] export type MedicationsData = Awaited> +export type UserActivity = Awaited> diff --git a/routes/~_dashboard/~patients/~$id/LabForm.tsx b/routes/~_dashboard/~patients/~$id/LabForm.tsx index 4be3e8ae..ff87fc15 100644 --- a/routes/~_dashboard/~patients/~$id/LabForm.tsx +++ b/routes/~_dashboard/~patients/~$id/LabForm.tsx @@ -7,7 +7,7 @@ // import { type ComponentProps } from 'react' import { z } from 'zod' -import { ObservationType } from '@/modules/firebase/utils' +import { UserObservationCollection } from '@/modules/firebase/utils' import { Button } from '@/packages/design-system/src/components/Button' import { DatePicker } from '@/packages/design-system/src/components/DatePicker' import { @@ -29,11 +29,12 @@ import { useForm } from '@/packages/design-system/src/forms/useForm' import { getObservationTypeUnits, getUnitOfObservationType, + labsObservationCollections, } from '@/routes/~_dashboard/~patients/clientUtils' import { type Observation } from '@/routes/~_dashboard/~patients/utils' export const labFormSchema = z.object({ - type: z.nativeEnum(ObservationType), + type: z.nativeEnum(UserObservationCollection), effectiveDateTime: z.date(), unit: z.string(), value: z.number(), @@ -48,7 +49,7 @@ interface LabFormProps { export const LabForm = ({ observation, onSubmit }: LabFormProps) => { const isEdit = !!observation - const defaultType = observation?.type ?? ObservationType.potassium + const defaultType = observation?.type ?? UserObservationCollection.potassium const form = useForm({ formSchema: labFormSchema, defaultValues: { @@ -81,8 +82,10 @@ export const LabForm = ({ observation, onSubmit }: LabFormProps) => { field.onChange(type) form.setValue( 'unit', - getUnitOfObservationType(type as ObservationType, formUnit) - .unit, + getUnitOfObservationType( + type as UserObservationCollection, + formUnit, + ).unit, ) }} {...field} @@ -91,7 +94,7 @@ export const LabForm = ({ observation, onSubmit }: LabFormProps) => { - {Object.values(ObservationType).map((type) => ( + {labsObservationCollections.map((type) => ( {type} @@ -110,7 +113,7 @@ export const LabForm = ({ observation, onSubmit }: LabFormProps) => { - {units.map((unit) => ( + {units?.map((unit) => ( {unit.unit} diff --git a/routes/~_dashboard/~patients/~$id/UserActivity.tsx b/routes/~_dashboard/~patients/~$id/UserActivity.tsx new file mode 100644 index 00000000..5c54487d --- /dev/null +++ b/routes/~_dashboard/~patients/~$id/UserActivity.tsx @@ -0,0 +1,61 @@ +// +// This source file is part of the Stanford Biodesign Digital Health ENGAGE-HF open-source project +// +// SPDX-FileCopyrightText: 2023 Stanford University and the project authors (see CONTRIBUTORS.md) +// +// SPDX-License-Identifier: MIT +// +import { Clock, FileQuestion } from 'lucide-react' +import { type ReactNode } from 'react' +import { + Card, + CardHeader, + CardTitle, +} from '@/packages/design-system/src/components/Card' +import { formatNilDateTime } from '@/packages/design-system/src/utils/date' +import { type UserActivity as UserActivityType } from '@/routes/~_dashboard/~patients/utils' + +interface ActivityRowProps { + icon?: ReactNode + label?: ReactNode + value?: ReactNode +} + +export const ActivityRow = ({ icon, label, value }: ActivityRowProps) => ( +
  • +
    {icon}
    +
    +

    {label}

    +

    {value}

    +
    +
  • +) + +interface UserActivityProps { + activity: UserActivityType +} + +export const UserActivity = ({ activity }: UserActivityProps) => ( + + + User activity + +
    +
      + } + label="Latest activity" + value={formatNilDateTime(activity.lastActiveDate) ?? 'no activity'} + /> + } + label="Latest questionnaire answer" + value={ + formatNilDateTime(activity.latestQuestionnaireDate) ?? + 'no questionnaire answered' + } + /> +
    +
    +
    +) diff --git a/routes/~_dashboard/~patients/~$id/~index.tsx b/routes/~_dashboard/~patients/~$id/~index.tsx index ac6ed8c5..d066f95a 100644 --- a/routes/~_dashboard/~patients/~$id/~index.tsx +++ b/routes/~_dashboard/~patients/~$id/~index.tsx @@ -44,12 +44,14 @@ import { getFormProps, getLabsData, getMedicationsData, + getUserActivity, } from '@/routes/~_dashboard/~patients/utils' import { Allergies } from '@/routes/~_dashboard/~patients/~$id/Allergies' import { Appointments } from '@/routes/~_dashboard/~patients/~$id/Appointments' import { GenerateHealthSummary } from '@/routes/~_dashboard/~patients/~$id/GenerateHealthSummary' import { Labs } from '@/routes/~_dashboard/~patients/~$id/Labs' import { Notifications } from '@/routes/~_dashboard/~patients/~$id/Notifications' +import { UserActivity } from '@/routes/~_dashboard/~patients/~$id/UserActivity' import { DashboardLayout } from '../../DashboardLayout' const getUserMedications = async (payload: { @@ -94,6 +96,7 @@ const PatientPage = () => { user, authUser, resourceType, + activity, } = Route.useLoaderData() const updatePatient = async (form: PatientFormSchema) => { @@ -205,12 +208,15 @@ const PatientPage = () => { - +
    + + +
    @@ -245,10 +251,9 @@ export const Route = createFileRoute('/_dashboard/patients/$id/')({ }), loader: async ({ params }) => { const userId = params.id - const { resourceType, user, authUser } = await getUserData(userId) - if (!user || !authUser || user.type !== UserType.patient) { - throw notFound() - } + const userData = await getUserData(userId) + const { resourceType, user, authUser } = userData + if (user.type !== UserType.patient) throw notFound() return { user, @@ -260,6 +265,7 @@ export const Route = createFileRoute('/_dashboard/patients/$id/')({ allergiesData: await getAllergiesData({ userId, resourceType }), labsData: await getLabsData({ userId, resourceType }), appointmentsData: await getAppointmentsData({ userId, resourceType }), + activity: await getUserActivity(userData), } }, }) diff --git a/routes/~_dashboard/~users/UserMenu.tsx b/routes/~_dashboard/~users/UserMenu.tsx index 76ece743..9e912532 100644 --- a/routes/~_dashboard/~users/UserMenu.tsx +++ b/routes/~_dashboard/~users/UserMenu.tsx @@ -55,7 +55,7 @@ export const UserMenu = ({ user }: UserMenuProps) => { Delete diff --git a/routes/~_dashboard/~users/~$id.tsx b/routes/~_dashboard/~users/~$id.tsx index 8f980a12..699f2e8c 100644 --- a/routes/~_dashboard/~users/~$id.tsx +++ b/routes/~_dashboard/~users/~$id.tsx @@ -92,9 +92,7 @@ export const Route = createFileRoute('/_dashboard/users/$id')({ loader: async ({ params }) => { const userId = params.id const { resourceType, user, authUser } = await getUserData(userId) - if (!user || !authUser || user.type === UserType.patient) { - throw notFound() - } + if (user.type === UserType.patient) throw notFound() return { user,