From 471fabbeff59aac93c7170f1c178fce63ef98814 Mon Sep 17 00:00:00 2001 From: Nathan Gerhart Date: Wed, 19 Feb 2025 11:37:29 -0700 Subject: [PATCH 01/19] Upgrade to react-router 7 Following https://reactrouter.com/upgrading/remix, I did `npx codemod remix/2/react-router/upgrade`, `pnpm install`, and `pnpm lint --fix` (to get rid of semi colons) --- app/ErrorBoundary.tsx | 2 +- app/context/Auth/AuthContextProvider.tsx | 2 +- app/hooks/useNavigationHotkey.tsx | 2 +- app/hooks/useRedirect.tsx | 2 +- app/hooks/useSelectedWeek.tsx | 2 +- app/hooks/useSelectedYear.tsx | 2 +- app/routes/_private+/_private.tsx | 2 +- app/routes/_private+/devtools+/_devtools.tsx | 2 +- app/routes/_private+/dones+/_dones.tsx | 2 +- app/routes/_private+/hours+/_hours.tsx | 2 +- app/routes/_private+/myweek+/_myweek.tsx | 2 +- app/routes/_private+/settings+/_settings.tsx | 2 +- .../_private+/settings+/devices+/_devices.tsx | 2 +- .../_private+/settings+/devices+/invite.tsx | 2 +- app/routes/_private+/team+/_team.tsx | 2 +- .../_private+/team+/members+/_members.tsx | 2 +- .../_private+/team+/members+/invite.tsx | 2 +- .../_private+/team+/members+/remove.tsx | 2 +- .../_private+/team+/members+/revoke.tsx | 2 +- app/routes/auth+/_auth.tsx | 2 +- app/routes/auth+/begin.tsx | 2 +- app/routes/auth+/setup+/_.create.tsx | 2 +- app/routes/auth+/setup+/_.join.($code).tsx | 2 +- app/routes/auth+/setup+/_.link.($code).tsx | 2 +- app/routes/auth+/setup+/_setup.tsx | 2 +- app/ui/Devices.tsx | 2 +- app/ui/ErrorScreen.tsx | 2 +- app/ui/Members.tsx | 2 +- app/ui/SecondaryNav.tsx | 2 +- app/ui/SetupOptions.tsx | 2 +- app/ui/Sidebar.tsx | 2 +- app/ui/Signout.tsx | 2 +- app/ui/WeekNav.tsx | 2 +- app/ui/YearNav.tsx | 2 +- package.json | 13 +- pnpm-lock.yaml | 497 +++++++++++------- 36 files changed, 348 insertions(+), 230 deletions(-) diff --git a/app/ErrorBoundary.tsx b/app/ErrorBoundary.tsx index 7a8fdb5f..e8d51e7e 100644 --- a/app/ErrorBoundary.tsx +++ b/app/ErrorBoundary.tsx @@ -1,4 +1,4 @@ -import { useRouteError } from "@remix-run/react" +import { useRouteError } from "react-router" import { ErrorScreen } from "ui/ErrorScreen" export function ErrorBoundary() { diff --git a/app/context/Auth/AuthContextProvider.tsx b/app/context/Auth/AuthContextProvider.tsx index b56e019b..7a186094 100644 --- a/app/context/Auth/AuthContextProvider.tsx +++ b/app/context/Auth/AuthContextProvider.tsx @@ -2,7 +2,7 @@ import type { Repo } from "@automerge/automerge-repo" import { RepoContext } from "@automerge/automerge-repo-react-hooks" import type * as Auth from "@localfirst/auth" import { type AuthProvider } from "@localfirst/auth-provider-automerge-repo" -import { useNavigate } from "@remix-run/react" +import { useNavigate } from "react-router" import { initializeAuthRepo } from "context/Auth/initializeAuthRepo" import { useLocalState } from "hooks/useLocalState" import { useSignOut } from "hooks/useSignOut" diff --git a/app/hooks/useNavigationHotkey.tsx b/app/hooks/useNavigationHotkey.tsx index fde93f4a..59763609 100644 --- a/app/hooks/useNavigationHotkey.tsx +++ b/app/hooks/useNavigationHotkey.tsx @@ -1,4 +1,4 @@ -import { useNavigate } from "@remix-run/react" +import { useNavigate } from "react-router" import { useHotkeys } from "react-hotkeys-hook" export function useNavigationHotkey(keys: string, path: string) { diff --git a/app/hooks/useRedirect.tsx b/app/hooks/useRedirect.tsx index e65c8ae4..ab645c21 100644 --- a/app/hooks/useRedirect.tsx +++ b/app/hooks/useRedirect.tsx @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ // state is any -import { useLocation, useNavigate } from "@remix-run/react" +import { useLocation, useNavigate } from "react-router" import { useEffect } from "react" export function useRedirect({ from, to, condition = true }: Params) { diff --git a/app/hooks/useSelectedWeek.tsx b/app/hooks/useSelectedWeek.tsx index 1c0aabc2..e92cc917 100644 --- a/app/hooks/useSelectedWeek.tsx +++ b/app/hooks/useSelectedWeek.tsx @@ -1,5 +1,5 @@ import { LocalDate } from "@js-joda/core" -import { useParams } from "@remix-run/react" +import { useParams } from "react-router" import { getWeek } from "lib/getWeek" export function useSelectedWeek() { diff --git a/app/hooks/useSelectedYear.tsx b/app/hooks/useSelectedYear.tsx index 0074a1ed..3677a4ae 100644 --- a/app/hooks/useSelectedYear.tsx +++ b/app/hooks/useSelectedYear.tsx @@ -1,4 +1,4 @@ -import { useParams } from "react-router-dom" +import { useParams } from "react-router" import { getCurrentYear } from "lib/getCurrentYear" import { yearFromString } from "lib/yearFromString" diff --git a/app/routes/_private+/_private.tsx b/app/routes/_private+/_private.tsx index fc6c4706..b2cd8a9b 100644 --- a/app/routes/_private+/_private.tsx +++ b/app/routes/_private+/_private.tsx @@ -1,4 +1,4 @@ -import { Outlet } from "@remix-run/react" +import { Outlet } from "react-router" import { AuthContextProvider } from "context/Auth/AuthContextProvider" import { DatabaseContextProvider } from "context/Database/DatabaseContextProvider" import { useTeam } from "hooks/useTeam" diff --git a/app/routes/_private+/devtools+/_devtools.tsx b/app/routes/_private+/devtools+/_devtools.tsx index 4ab17600..34603f70 100644 --- a/app/routes/_private+/devtools+/_devtools.tsx +++ b/app/routes/_private+/devtools+/_devtools.tsx @@ -1,4 +1,4 @@ -import { Outlet } from "react-router-dom" +import { Outlet } from "react-router" import { PageLayout } from "ui/layouts/PageLayout" import { SecondaryNav } from "ui/SecondaryNav" diff --git a/app/routes/_private+/dones+/_dones.tsx b/app/routes/_private+/dones+/_dones.tsx index 6b79c96c..bbd173be 100644 --- a/app/routes/_private+/dones+/_dones.tsx +++ b/app/routes/_private+/dones+/_dones.tsx @@ -1,4 +1,4 @@ -import { Outlet } from "@remix-run/react" +import { Outlet } from "react-router" import { useRedirect } from "hooks/useRedirect" import { getSunday } from "lib/getSunday" diff --git a/app/routes/_private+/hours+/_hours.tsx b/app/routes/_private+/hours+/_hours.tsx index 458160cd..a4b9843d 100644 --- a/app/routes/_private+/hours+/_hours.tsx +++ b/app/routes/_private+/hours+/_hours.tsx @@ -1,4 +1,4 @@ -import { Outlet } from "@remix-run/react" +import { Outlet } from "react-router" import { useRedirect } from "hooks/useRedirect" import { getCurrentYear } from "lib/getCurrentYear" diff --git a/app/routes/_private+/myweek+/_myweek.tsx b/app/routes/_private+/myweek+/_myweek.tsx index 84b04848..7a36aa00 100644 --- a/app/routes/_private+/myweek+/_myweek.tsx +++ b/app/routes/_private+/myweek+/_myweek.tsx @@ -1,4 +1,4 @@ -import { Outlet } from "@remix-run/react" +import { Outlet } from "react-router" import { useRedirect } from "hooks/useRedirect" import { getSunday } from "lib/getSunday" diff --git a/app/routes/_private+/settings+/_settings.tsx b/app/routes/_private+/settings+/_settings.tsx index 12f3e0a9..5d480cbd 100644 --- a/app/routes/_private+/settings+/_settings.tsx +++ b/app/routes/_private+/settings+/_settings.tsx @@ -1,4 +1,4 @@ -import { Outlet } from "react-router-dom" +import { Outlet } from "react-router" import { SecondaryNav } from "ui/SecondaryNav" import { PageLayout } from "ui/layouts/PageLayout" diff --git a/app/routes/_private+/settings+/devices+/_devices.tsx b/app/routes/_private+/settings+/devices+/_devices.tsx index 52f2e1f4..6fd87d0a 100644 --- a/app/routes/_private+/settings+/devices+/_devices.tsx +++ b/app/routes/_private+/settings+/devices+/_devices.tsx @@ -1,5 +1,5 @@ import { useTeam } from "hooks/useTeam" -import { Outlet } from "react-router-dom" +import { Outlet } from "react-router" import { Devices } from "ui/Devices" export default function DevicesPage() { diff --git a/app/routes/_private+/settings+/devices+/invite.tsx b/app/routes/_private+/settings+/devices+/invite.tsx index a293bfdb..951b4897 100644 --- a/app/routes/_private+/settings+/devices+/invite.tsx +++ b/app/routes/_private+/settings+/devices+/invite.tsx @@ -1,4 +1,4 @@ -import { useNavigate } from "@remix-run/react" +import { useNavigate } from "react-router" import { useDeviceInvitationGenerator } from "hooks/useDeviceInvitationGenerator" import { useTeam } from "hooks/useTeam" import { InviteDeviceDialog } from "ui/InviteDeviceDialog" diff --git a/app/routes/_private+/team+/_team.tsx b/app/routes/_private+/team+/_team.tsx index e9224c38..f51366ce 100644 --- a/app/routes/_private+/team+/_team.tsx +++ b/app/routes/_private+/team+/_team.tsx @@ -1,4 +1,4 @@ -import { Outlet } from "react-router-dom" +import { Outlet } from "react-router" import { SecondaryNav } from "ui/SecondaryNav" import { PageLayout } from "ui/layouts/PageLayout" diff --git a/app/routes/_private+/team+/members+/_members.tsx b/app/routes/_private+/team+/members+/_members.tsx index ff207f7f..5ae13e27 100644 --- a/app/routes/_private+/team+/members+/_members.tsx +++ b/app/routes/_private+/team+/members+/_members.tsx @@ -1,5 +1,5 @@ import { useTeam } from "hooks/useTeam" -import { Outlet } from "react-router-dom" +import { Outlet } from "react-router" import { Members } from "ui/Members" export default function MembersPage() { diff --git a/app/routes/_private+/team+/members+/invite.tsx b/app/routes/_private+/team+/members+/invite.tsx index 252144ae..f7c22f22 100644 --- a/app/routes/_private+/team+/members+/invite.tsx +++ b/app/routes/_private+/team+/members+/invite.tsx @@ -1,7 +1,7 @@ import { useDatabase } from "hooks/useDatabase" import { useMemberInvitationGenerator } from "hooks/useMemberInvitationGenerator" import { useTeam } from "hooks/useTeam" -import { useLocation, useNavigate } from "react-router-dom" +import { useLocation, useNavigate } from "react-router" import { type ContactId } from "schema/Contact" import { InviteMemberDialog } from "ui/InviteMemberDialog" diff --git a/app/routes/_private+/team+/members+/remove.tsx b/app/routes/_private+/team+/members+/remove.tsx index 86761628..3f1cce0e 100644 --- a/app/routes/_private+/team+/members+/remove.tsx +++ b/app/routes/_private+/team+/members+/remove.tsx @@ -1,6 +1,6 @@ import { useDatabase } from "hooks/useDatabase" import { useTeam } from "hooks/useTeam" -import { useLocation, useNavigate } from "react-router-dom" +import { useLocation, useNavigate } from "react-router" import type { ContactId } from "schema/Contact" import { RemoveMemberDialog } from "ui/RemoveMemberDialog" diff --git a/app/routes/_private+/team+/members+/revoke.tsx b/app/routes/_private+/team+/members+/revoke.tsx index cf8aa13a..18534f0c 100644 --- a/app/routes/_private+/team+/members+/revoke.tsx +++ b/app/routes/_private+/team+/members+/revoke.tsx @@ -1,6 +1,6 @@ import { useInvitation } from "hooks/useInvitation" import { useTeam } from "hooks/useTeam" -import { useLocation, useNavigate } from "react-router-dom" +import { useLocation, useNavigate } from "react-router" import type { ContactId } from "schema/Contact" import { RevokeInvitationDialog } from "ui/RevokeInvitationDialog" diff --git a/app/routes/auth+/_auth.tsx b/app/routes/auth+/_auth.tsx index 401b25e5..5ac20f5d 100644 --- a/app/routes/auth+/_auth.tsx +++ b/app/routes/auth+/_auth.tsx @@ -1,4 +1,4 @@ -import { Outlet } from "react-router-dom" +import { Outlet } from "react-router" import { CenteredLayout } from "ui/layouts/CenteredLayout" export default function AuthLayout() { diff --git a/app/routes/auth+/begin.tsx b/app/routes/auth+/begin.tsx index b50caedc..d3aa70fa 100644 --- a/app/routes/auth+/begin.tsx +++ b/app/routes/auth+/begin.tsx @@ -1,4 +1,4 @@ -import { useNavigate } from "@remix-run/react" +import { useNavigate } from "react-router" import { useLocalState } from "hooks/useLocalState" import { UserNameForm } from "ui/UserNameForm" diff --git a/app/routes/auth+/setup+/_.create.tsx b/app/routes/auth+/setup+/_.create.tsx index daf83b21..678254e5 100644 --- a/app/routes/auth+/setup+/_.create.tsx +++ b/app/routes/auth+/setup+/_.create.tsx @@ -4,7 +4,7 @@ import { createUser } from "@localfirst/auth" import { getShareId } from "@localfirst/auth-provider-automerge-repo" -import { useNavigate } from "@remix-run/react" +import { useNavigate } from "react-router" import { createDevice, type UserInfo } from "context/Auth/createDevice" import { getInitialContacts } from "context/Auth/getInitialContacts" import { initializeAuthRepo } from "context/Auth/initializeAuthRepo" diff --git a/app/routes/auth+/setup+/_.join.($code).tsx b/app/routes/auth+/setup+/_.join.($code).tsx index 5c8f7d6a..b8ae0b27 100644 --- a/app/routes/auth+/setup+/_.join.($code).tsx +++ b/app/routes/auth+/setup+/_.join.($code).tsx @@ -5,7 +5,7 @@ import { eventPromise } from "@herbcaudill/eventemitter42" import * as Auth from "@localfirst/auth" import { createUser } from "@localfirst/auth" import { type AuthErrorType } from "@localfirst/auth-provider-automerge-repo" -import { useNavigate, useParams } from "@remix-run/react" +import { useNavigate, useParams } from "react-router" import { createDevice, type UserInfo } from "context/Auth/createDevice" import { getRootDocumentIdFromTeam } from "context/Auth/getRootDocumentIdFromTeam" import { initializeAuthRepo } from "context/Auth/initializeAuthRepo" diff --git a/app/routes/auth+/setup+/_.link.($code).tsx b/app/routes/auth+/setup+/_.link.($code).tsx index 42905774..384e6f4d 100644 --- a/app/routes/auth+/setup+/_.link.($code).tsx +++ b/app/routes/auth+/setup+/_.link.($code).tsx @@ -1,5 +1,5 @@ import { eventPromise } from "@herbcaudill/eventemitter42" -import { useNavigate } from "@remix-run/react" +import { useNavigate } from "react-router" import { createDevice } from "context/Auth/createDevice" import { getRootDocumentIdFromTeam } from "context/Auth/getRootDocumentIdFromTeam" import { initializeAuthRepo } from "context/Auth/initializeAuthRepo" diff --git a/app/routes/auth+/setup+/_setup.tsx b/app/routes/auth+/setup+/_setup.tsx index 0378aee6..39269e36 100644 --- a/app/routes/auth+/setup+/_setup.tsx +++ b/app/routes/auth+/setup+/_setup.tsx @@ -1,4 +1,4 @@ -import { useNavigate } from "@remix-run/react" +import { useNavigate } from "react-router" import { useLocalState } from "hooks/useLocalState" import { SetupOptions } from "ui/SetupOptions" diff --git a/app/ui/Devices.tsx b/app/ui/Devices.tsx index 4d459776..edafce36 100644 --- a/app/ui/Devices.tsx +++ b/app/ui/Devices.tsx @@ -1,5 +1,5 @@ import type { Device, DeviceWithSecrets, UnixTimestamp } from "@localfirst/auth" -import { Link } from "@remix-run/react" +import { Link } from "react-router" import { Button } from "@ui/button" import { cx } from "lib/cx" import { getBrowserIcon, getDeviceIcon, getOsIcon } from "lib/getDeviceIcon" diff --git a/app/ui/ErrorScreen.tsx b/app/ui/ErrorScreen.tsx index bc3d33ad..b7b02f2b 100644 --- a/app/ui/ErrorScreen.tsx +++ b/app/ui/ErrorScreen.tsx @@ -1,5 +1,5 @@ import { Card, CardContent, CardHeader, CardTitle } from "@ui/card" -import { type ErrorResponse } from "react-router-dom" +import { type ErrorResponse } from "react-router" import { CenteredLayout } from "./layouts/CenteredLayout" const isRouteErrorResponse = (e: Error | ErrorResponse): e is ErrorResponse => { diff --git a/app/ui/Members.tsx b/app/ui/Members.tsx index 67754679..b75862bb 100644 --- a/app/ui/Members.tsx +++ b/app/ui/Members.tsx @@ -1,4 +1,4 @@ -import { Link } from "@remix-run/react" +import { Link } from "react-router" import { Button } from "@ui/button" import { by } from "lib/by" import { cx } from "lib/cx" diff --git a/app/ui/SecondaryNav.tsx b/app/ui/SecondaryNav.tsx index 20c331dc..a2a3b8ac 100644 --- a/app/ui/SecondaryNav.tsx +++ b/app/ui/SecondaryNav.tsx @@ -1,6 +1,6 @@ import { useRedirect } from "hooks/useRedirect" import { cx } from "lib/cx" -import { NavLink } from "react-router-dom" +import { NavLink } from "react-router" export function SecondaryNav({ heading, items = [], parent: parentPath }: Props) { const [firstItem] = items diff --git a/app/ui/SetupOptions.tsx b/app/ui/SetupOptions.tsx index 96c13483..2175ca42 100644 --- a/app/ui/SetupOptions.tsx +++ b/app/ui/SetupOptions.tsx @@ -2,7 +2,7 @@ import { Card, CardContent, CardHeader } from "@ui/card" import { Button } from "ui/shadcn/button" import { cx } from "lib/cx" import { Fragment } from "react/jsx-runtime" -import { Link } from "react-router-dom" +import { Link } from "react-router" export const SetupOptions = () => { const options = [ diff --git a/app/ui/Sidebar.tsx b/app/ui/Sidebar.tsx index 2bc7cdb2..1f1f2803 100644 --- a/app/ui/Sidebar.tsx +++ b/app/ui/Sidebar.tsx @@ -1,4 +1,4 @@ -import { NavLink } from "@remix-run/react" +import { NavLink } from "react-router" import { cx } from "lib/cx" import { type ExtendedContact } from "schema/Contact" import { type NavItem } from "types/types" diff --git a/app/ui/Signout.tsx b/app/ui/Signout.tsx index b2fe3846..a4cb8d60 100644 --- a/app/ui/Signout.tsx +++ b/app/ui/Signout.tsx @@ -1,6 +1,6 @@ import { Button } from "@ui/button" import { Card, CardContent, CardFooter, CardHeader, CardTitle } from "@ui/card" -import { Link } from "@remix-run/react" +import { Link } from "react-router" export const Signout = ({ confirmed = false, onConfirm = () => {} }: Props) => { const warning = ( diff --git a/app/ui/WeekNav.tsx b/app/ui/WeekNav.tsx index 3d69d04a..3cfe34ba 100644 --- a/app/ui/WeekNav.tsx +++ b/app/ui/WeekNav.tsx @@ -1,4 +1,4 @@ -import { Link, useLocation, useParams } from "@remix-run/react" +import { Link, useLocation, useParams } from "react-router" import { useNavigationHotkey } from "hooks/useNavigationHotkey" import { useSelectedWeek } from "hooks/useSelectedWeek" import { formatDateRange } from "lib/formatDateRange" diff --git a/app/ui/YearNav.tsx b/app/ui/YearNav.tsx index bac4d67c..0901cb2d 100644 --- a/app/ui/YearNav.tsx +++ b/app/ui/YearNav.tsx @@ -1,4 +1,4 @@ -import { Link, useLocation } from "@remix-run/react" +import { Link, useLocation } from "react-router" import { useNavigationHotkey } from "hooks/useNavigationHotkey" import { useRedirect } from "hooks/useRedirect" import { useSelectedYear } from "hooks/useSelectedYear" diff --git a/package.json b/package.json index 38c4c8e3..bb694aa0 100644 --- a/package.json +++ b/package.json @@ -5,12 +5,12 @@ "type": "module", "scripts": { "benchmark": "vitest bench", - "build": "remix vite:build", + "build": "react-router build", "build:storybook": "storybook build", "build:icons": "node ./scripts/generate-icon-types.js", "dev": "run-p dev:open dev:syncserver", "dev:open": "pnpm dev:start --open", - "dev:start": "remix vite:dev --port 3000 --host", + "dev:start": "react-router dev --port 3000 --host", "dev:syncserver": "cross-env DEBUG=localfirst* NODE_ENV=development node ./scripts/syncserver.js", "icon-types": "node ./scripts/generate-icon-types.js", "context": "node ./scripts/populate-context.js", @@ -62,8 +62,8 @@ "@radix-ui/react-slot": "^1.0.2", "@radix-ui/react-tabs": "^1.1.1", "@radix-ui/react-tooltip": "^1.1.6", - "@remix-run/node": "^2.8.1", - "@remix-run/react": "^2.8.1", + "@react-router/node": "^7.0.0", + "@react-router/remix-routes-option-adapter": "^7.2.0", "@storybook/manager-api": "^8.4.6", "@svgr/core": "^8.1.0", "@svgr/plugin-jsx": "^8.1.0", @@ -74,13 +74,14 @@ "csv-parse": "^5.5.5", "debug": "^4.3.4", "effect": "^3.5.7", + "isbot": "^5", "react": "^18.2.0", "react-dom": "^18.2.0", "react-hook-form": "^7.51.3", "react-hotkeys-hook": "^4.5.0", "react-json-view-lite": "^2.0.1", "react-qr-code": "^2.0.12", - "react-router-dom": "^6.22.3", + "react-router": "^7.0.0", "react-textarea-autosize": "^8.5.3", "remix-flat-routes": "^0.6.4", "tailwind-merge": "^2.2.1", @@ -99,7 +100,7 @@ }, "devDependencies": { "@esbuild-plugins/node-globals-polyfill": "^0.2.3", - "@remix-run/dev": "^2.8.1", + "@react-router/dev": "^7.0.0", "@storybook/addon-essentials": "^8.4.6", "@storybook/addon-interactions": "^8.4.6", "@storybook/addon-links": "^8.4.6", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 019512db..ddf8fcdb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -106,12 +106,12 @@ importers: '@radix-ui/react-tooltip': specifier: ^1.1.6 version: 1.1.6(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@remix-run/node': - specifier: ^2.8.1 - version: 2.8.1(typescript@5.6.3) - '@remix-run/react': - specifier: ^2.8.1 - version: 2.8.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@react-router/node': + specifier: ^7.0.0 + version: 7.2.0(react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.6.3) + '@react-router/remix-routes-option-adapter': + specifier: ^7.2.0 + version: 7.2.0(@react-router/dev@7.2.0(@types/node@20.11.27)(react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(terser@5.36.0)(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(terser@5.36.0)))(typescript@5.6.3) '@storybook/manager-api': specifier: ^8.4.6 version: 8.4.6(storybook@8.4.6(prettier@3.2.5)) @@ -142,9 +142,9 @@ importers: effect: specifier: ^3.5.7 version: 3.5.7 - mockdate: - specifier: ^3.0.5 - version: 3.0.5 + isbot: + specifier: ^5 + version: 5.1.23 react: specifier: ^18.2.0 version: 18.2.0 @@ -163,9 +163,9 @@ importers: react-qr-code: specifier: ^2.0.12 version: 2.0.12(react@18.2.0) - react-router-dom: - specifier: ^6.22.3 - version: 6.22.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react-router: + specifier: ^7.0.0 + version: 7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-textarea-autosize: specifier: ^8.5.3 version: 8.5.3(@types/react@18.2.66)(react@18.2.0) @@ -215,9 +215,9 @@ importers: '@esbuild-plugins/node-globals-polyfill': specifier: ^0.2.3 version: 0.2.3(esbuild@0.20.1) - '@remix-run/dev': - specifier: ^2.8.1 - version: 2.8.1(@types/node@20.11.27)(terser@5.36.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(terser@5.36.0)) + '@react-router/dev': + specifier: ^7.0.0 + version: 7.2.0(@types/node@20.11.27)(react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(terser@5.36.0)(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(terser@5.36.0)) '@storybook/addon-essentials': specifier: ^8.4.6 version: 8.4.6(@types/react@18.2.66)(storybook@8.4.6(prettier@3.2.5)) @@ -290,6 +290,9 @@ importers: eslint-plugin-unused-imports: specifier: ^3.2.0 version: 3.2.0(@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0) + mockdate: + specifier: ^3.0.5 + version: 3.0.5 npm-run-all: specifier: ^4.1.5 version: 4.1.5 @@ -427,10 +430,6 @@ packages: resolution: {integrity: sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==} engines: {node: '>=6.9.0'} - '@babel/helper-annotate-as-pure@7.22.5': - resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} - engines: {node: '>=6.9.0'} - '@babel/helper-annotate-as-pure@7.25.9': resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} engines: {node: '>=6.9.0'} @@ -447,12 +446,6 @@ packages: resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.24.0': - resolution: {integrity: sha512-QAH+vfvts51BCsNZ2PhY6HAggnlS6omLLFTsIpeqZk/MmJ6cW7tgz5yRv0fMJThcr6FmbMrENh1RgrWPTYA76g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@babel/helper-create-class-features-plugin@7.25.9': resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==} engines: {node: '>=6.9.0'} @@ -482,10 +475,6 @@ packages: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} - '@babel/helper-member-expression-to-functions@7.23.0': - resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} - engines: {node: '>=6.9.0'} - '@babel/helper-member-expression-to-functions@7.25.9': resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} engines: {node: '>=6.9.0'} @@ -510,10 +499,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-optimise-call-expression@7.22.5': - resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} - engines: {node: '>=6.9.0'} - '@babel/helper-optimise-call-expression@7.25.9': resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} engines: {node: '>=6.9.0'} @@ -532,12 +517,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-replace-supers@7.22.20': - resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@babel/helper-replace-supers@7.25.9': resolution: {integrity: sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==} engines: {node: '>=6.9.0'} @@ -552,10 +531,6 @@ packages: resolution: {integrity: sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==} engines: {node: '>=6.9.0'} - '@babel/helper-skip-transparent-expression-wrappers@7.22.5': - resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} - engines: {node: '>=6.9.0'} - '@babel/helper-skip-transparent-expression-wrappers@7.25.9': resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} engines: {node: '>=6.9.0'} @@ -824,12 +799,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-commonjs@7.23.3': - resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-commonjs@7.25.9': resolution: {integrity: sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==} engines: {node: '>=6.9.0'} @@ -1422,6 +1391,9 @@ packages: '@types/react': '>=16' react: '>=16' + '@mjackson/node-fetch-server@0.2.0': + resolution: {integrity: sha512-EMlH1e30yzmTpGLQjlFmaDAjyOeZhng1/XCd7DExR8PNAnG/G1tyruZxEoUe11ClnwGhGrtsdnyyUx1frSzjng==} + '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.2': resolution: {integrity: sha512-9bfjwDxIDWmmOKusUcqdS4Rw+SETlp9Dy39Xui9BEGEk19dDwH0jhipwFzEff/pFg95NKymc6TOTbRKcWeRqyQ==} cpu: [arm64] @@ -2070,6 +2042,44 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + '@react-router/dev@7.2.0': + resolution: {integrity: sha512-GzSNGeWuhx6sMsnidCQAlCAephibUMC61xIAdsc6hBXWCJe/T9wUrvtnh2Xbcpr7BRZJtJN4UhI472ZURA6m9w==} + engines: {node: '>=20.0.0'} + hasBin: true + peerDependencies: + '@react-router/serve': ^7.2.0 + react-router: ^7.2.0 + typescript: ^5.1.0 + vite: ^5.1.0 || ^6.0.0 + wrangler: ^3.28.2 + peerDependenciesMeta: + '@react-router/serve': + optional: true + typescript: + optional: true + wrangler: + optional: true + + '@react-router/node@7.2.0': + resolution: {integrity: sha512-CqBHLwvvV4BB8htmaSwT+SOwX9B4RVOIiEdTlaIp12sNVCGSYDIEGbv3T4Wxeq8p5ynNfhNcdBeXtZ6ZPWVozA==} + engines: {node: '>=20.0.0'} + peerDependencies: + react-router: 7.2.0 + typescript: ^5.1.0 + peerDependenciesMeta: + typescript: + optional: true + + '@react-router/remix-routes-option-adapter@7.2.0': + resolution: {integrity: sha512-y5LH81y4JMP392FUVdjH+JbT/Q/vzKVA5t/HBb/JIUFjh/KN5bKt4zIoWY7sbr95A61RSIBr4ZDLH/VZrxL35A==} + engines: {node: '>=20.0.0'} + peerDependencies: + '@react-router/dev': ^7.2.0 + typescript: ^5.1.0 + peerDependenciesMeta: + typescript: + optional: true + '@react-stately/utils@3.9.1': resolution: {integrity: sha512-yzw75GE0iUWiyps02BOAPTrybcsMIxEJlzXqtvllAb01O9uX5n0i3X+u2eCpj2UoDF4zS08Ps0jPgWxg8xEYtA==} peerDependencies: @@ -2108,17 +2118,6 @@ packages: typescript: optional: true - '@remix-run/react@2.8.1': - resolution: {integrity: sha512-HTPm1U8+xz2jPaVjZnssrckfmFMA8sUZUdaWnoF5lmLWdReqcQv+XlBhIrQQ3jO9L8iYYdnzaSZZcRFYSdpTYg==} - engines: {node: '>=18.0.0'} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - typescript: ^5.1.0 - peerDependenciesMeta: - typescript: - optional: true - '@remix-run/router@1.15.3': resolution: {integrity: sha512-Oy8rmScVrVxWZVOpEF57ovlnhpZ8CCPlnIIumVcV9nFdiSIrus99+Lw78ekXyGvVDlIsFJbSfmSovJUhCWYV3w==} engines: {node: '>=14.0.0'} @@ -3152,6 +3151,9 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} + babel-dead-code-elimination@1.0.9: + resolution: {integrity: sha512-JLIhax/xullfInZjtu13UJjaLHDeTzt3vOeomaSUdO/nAMEL/pWC/laKrSvWylXMnVWyL5bpmG9njqBZlUQOdg==} + babel-plugin-polyfill-corejs2@0.4.11: resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==} peerDependencies: @@ -3333,6 +3335,10 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + chownr@1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} @@ -3448,6 +3454,10 @@ packages: resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} + cookie@1.0.2: + resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} + engines: {node: '>=18'} + core-js-compat@3.36.1: resolution: {integrity: sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA==} @@ -3558,9 +3568,26 @@ packages: supports-color: optional: true + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + decode-named-character-reference@1.0.2: resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + dedent@1.5.3: + resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + deep-eql@4.1.3: resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} engines: {node: '>=6'} @@ -3748,9 +3775,6 @@ packages: resolution: {integrity: sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ==} engines: {node: '>= 0.4'} - es-module-lexer@1.4.1: - resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==} - es-module-lexer@1.5.4: resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} @@ -4743,6 +4767,10 @@ packages: isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + isbot@5.1.23: + resolution: {integrity: sha512-ie3ehy2iXdkuzaZx32SoKb9b8l9Cm8cqQ1lJjQXnq8GRTrk/Jx7IUDcB4mhlw6H3gWaMqGYoWeV0lPv1P/20Ig==} + engines: {node: '>=18'} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -5995,6 +6023,16 @@ packages: peerDependencies: react: '>=16.8' + react-router@7.2.0: + resolution: {integrity: sha512-fXyqzPgCPZbqhrk7k3hPcCpYIlQ2ugIXDboHUzhJISFVy2DEPsmHgN588MyGmkIOv3jDgNfUE3kJi83L28s/LQ==} + engines: {node: '>=20.0.0'} + peerDependencies: + react: '>=18' + react-dom: '>=18' + peerDependenciesMeta: + react-dom: + optional: true + react-style-singleton@2.2.1: resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} engines: {node: '>=10'} @@ -6056,6 +6094,10 @@ packages: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + recast@0.23.6: resolution: {integrity: sha512-9FHoNjX1yjuesMwuthAmPKabxYQdOgihFYmT5ebXfYGBcnqXZf3WOVz+5foEZ8Y83P4ZY6yQD5GMmtV+pgCCAQ==} engines: {node: '>= 4'} @@ -6731,6 +6773,9 @@ packages: tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + turbo-stream@2.4.0: + resolution: {integrity: sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==} + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -6811,6 +6856,10 @@ packages: undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici@6.21.1: + resolution: {integrity: sha512-q/1rj5D0/zayJB2FraXdaWxbhWiNKDvu8naDT2dl1yTlvJp4BLtOcp2a5BvgGNQpYYJzau7tf1WgKv3b+7mqpQ==} + engines: {node: '>=18.17'} + unicode-canonical-property-names-ecmascript@2.0.1: resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} engines: {node: '>=4'} @@ -7020,6 +7069,14 @@ packages: v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + valibot@0.41.0: + resolution: {integrity: sha512-igDBb8CTYr8YTQlOKgaN9nSS0Be7z+WRuaeYqGf3Cjz3aKmSnqEmYnkfVjzIuumGqfHpa3fLIvMEAfhrpqN8ng==} + peerDependencies: + typescript: '>=5' + peerDependenciesMeta: + typescript: + optional: true + validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} @@ -7043,16 +7100,16 @@ packages: vfile@5.3.7: resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} - vite-node@1.3.1: - resolution: {integrity: sha512-azbRrqRxlWTJEVbzInZCTchx0X69M/XPTCz4H+TLvlTcR/xH/3hkRqhOakT41fMJCMzXTu4UvegkZiEoJAWvng==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - vite-node@1.5.0: resolution: {integrity: sha512-tV8h6gMj6vPzVCa7l+VGq9lwoJjW8Y79vst8QZZGiuRAfijU+EEWuc0kFpmndQrWhMMhet1jdSF+40KSZUqIIw==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true + vite-node@3.0.0-beta.2: + resolution: {integrity: sha512-ofTf6cfRdL30Wbl9n/BX81EyIR5s4PReLmSurrxQ+koLaWUNOEo8E0lCM53OJkb8vpa2URM2nSrxZsIFyvY1rg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + vite-plugin-pwa@0.19.3: resolution: {integrity: sha512-ajY7Vn39hFbkWyqkyoJT40hPJcfU9AAfCugARJ3AdqK258z3mi3dmG88PB0+1WqJwUsedRRPkScH5HnQBzmRMQ==} engines: {node: '>=16.0.0'} @@ -7520,10 +7577,6 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.0.2 - '@babel/helper-annotate-as-pure@7.22.5': - dependencies: - '@babel/types': 7.24.0 - '@babel/helper-annotate-as-pure@7.25.9': dependencies: '@babel/types': 7.26.0 @@ -7551,19 +7604,6 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.24.0(@babel/core@7.24.0)': - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-member-expression-to-functions': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.24.0) - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 @@ -7589,7 +7629,7 @@ snapshots: '@babel/core': 7.24.5 '@babel/helper-compilation-targets': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 - debug: 4.3.7 + debug: 4.4.0 lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: @@ -7606,10 +7646,6 @@ snapshots: dependencies: '@babel/types': 7.24.0 - '@babel/helper-member-expression-to-functions@7.23.0': - dependencies: - '@babel/types': 7.24.0 - '@babel/helper-member-expression-to-functions@7.25.9': dependencies: '@babel/traverse': 7.25.9 @@ -7646,10 +7682,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-optimise-call-expression@7.22.5': - dependencies: - '@babel/types': 7.24.0 - '@babel/helper-optimise-call-expression@7.25.9': dependencies: '@babel/types': 7.26.0 @@ -7667,13 +7699,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.22.20(@babel/core@7.24.0)': - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-member-expression-to-functions': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 @@ -7694,10 +7719,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-skip-transparent-expression-wrappers@7.22.5': - dependencies: - '@babel/types': 7.24.0 - '@babel/helper-skip-transparent-expression-wrappers@7.25.9': dependencies: '@babel/traverse': 7.25.9 @@ -7795,10 +7816,10 @@ snapshots: dependencies: '@babel/core': 7.24.5 - '@babel/plugin-syntax-decorators@7.24.0(@babel/core@7.24.0)': + '@babel/plugin-syntax-decorators@7.24.0(@babel/core@7.24.5)': dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.24.5)': dependencies: @@ -7810,15 +7831,15 @@ snapshots: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.24.0)': + '@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.24.5)': dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.24.0)': + '@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.24.5)': dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.5)': dependencies: @@ -7978,13 +7999,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.24.0)': - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.0) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-simple-access': 7.22.5 - '@babel/plugin-transform-modules-commonjs@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 @@ -8143,13 +8157,15 @@ snapshots: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-typescript@7.23.6(@babel/core@7.24.0)': + '@babel/plugin-transform-typescript@7.23.6(@babel/core@7.24.5)': dependencies: - '@babel/core': 7.24.0 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.24.0(@babel/core@7.24.0) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.24.0) + '@babel/core': 7.24.5 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.24.5) + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.24.5)': dependencies: @@ -8256,14 +8272,16 @@ snapshots: '@babel/types': 7.26.0 esutils: 2.0.3 - '@babel/preset-typescript@7.23.3(@babel/core@7.24.0)': + '@babel/preset-typescript@7.23.3(@babel/core@7.24.5)': dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.24.0) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.24.0) - '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.24.0) + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.24.5) + '@babel/plugin-transform-modules-commonjs': 7.25.9(@babel/core@7.24.5) + '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.24.5) + transitivePeerDependencies: + - supports-color '@babel/runtime@7.24.0': dependencies: @@ -8714,6 +8732,8 @@ snapshots: '@types/react': 18.2.66 react: 18.2.0 + '@mjackson/node-fetch-server@0.2.0': {} + '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.2': optional: true @@ -8748,7 +8768,7 @@ snapshots: '@npmcli/fs@3.1.0': dependencies: - semver: 7.6.0 + semver: 7.6.3 '@npmcli/git@4.1.0': dependencies: @@ -8758,7 +8778,7 @@ snapshots: proc-log: 3.0.0 promise-inflight: 1.0.1 promise-retry: 2.0.1 - semver: 7.6.0 + semver: 7.6.3 which: 3.0.1 transitivePeerDependencies: - bluebird @@ -8771,7 +8791,7 @@ snapshots: json-parse-even-better-errors: 3.0.1 normalize-package-data: 5.0.0 proc-log: 3.0.0 - semver: 7.6.0 + semver: 7.6.3 transitivePeerDependencies: - bluebird @@ -9318,6 +9338,69 @@ snapshots: clsx: 2.1.0 react: 18.2.0 + '@react-router/dev@7.2.0(@types/node@20.11.27)(react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(terser@5.36.0)(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(terser@5.36.0))': + dependencies: + '@babel/core': 7.24.5 + '@babel/generator': 7.26.2 + '@babel/parser': 7.26.2 + '@babel/plugin-syntax-decorators': 7.24.0(@babel/core@7.24.5) + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.24.5) + '@babel/preset-typescript': 7.23.3(@babel/core@7.24.5) + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + '@npmcli/package-json': 4.0.1 + '@react-router/node': 7.2.0(react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.6.3) + arg: 5.0.2 + babel-dead-code-elimination: 1.0.9 + chokidar: 4.0.3 + dedent: 1.5.3 + es-module-lexer: 1.5.4 + exit-hook: 2.2.1 + fs-extra: 10.1.0 + gunzip-maybe: 1.4.2 + jsesc: 3.0.2 + lodash: 4.17.21 + pathe: 1.1.2 + picocolors: 1.1.1 + picomatch: 2.3.1 + prettier: 2.8.8 + react-refresh: 0.14.0 + react-router: 7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + semver: 7.6.3 + set-cookie-parser: 2.6.0 + valibot: 0.41.0(typescript@5.6.3) + vite: 5.1.4(@types/node@20.11.27)(terser@5.36.0) + vite-node: 3.0.0-beta.2(@types/node@20.11.27)(terser@5.36.0) + optionalDependencies: + typescript: 5.6.3 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - bluebird + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + + '@react-router/node@7.2.0(react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.6.3)': + dependencies: + '@mjackson/node-fetch-server': 0.2.0 + react-router: 7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + source-map-support: 0.5.21 + stream-slice: 0.1.2 + undici: 6.21.1 + optionalDependencies: + typescript: 5.6.3 + + '@react-router/remix-routes-option-adapter@7.2.0(@react-router/dev@7.2.0(@types/node@20.11.27)(react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(terser@5.36.0)(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(terser@5.36.0)))(typescript@5.6.3)': + dependencies: + '@react-router/dev': 7.2.0(@types/node@20.11.27)(react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(terser@5.36.0)(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(terser@5.36.0)) + optionalDependencies: + typescript: 5.6.3 + '@react-stately/utils@3.9.1(react@18.2.0)': dependencies: '@swc/helpers': 0.5.9 @@ -9329,14 +9412,14 @@ snapshots: '@remix-run/dev@2.8.1(@types/node@20.11.27)(terser@5.36.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(terser@5.36.0))': dependencies: - '@babel/core': 7.24.0 - '@babel/generator': 7.23.6 - '@babel/parser': 7.24.0 - '@babel/plugin-syntax-decorators': 7.24.0(@babel/core@7.24.0) - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.24.0) - '@babel/preset-typescript': 7.23.3(@babel/core@7.24.0) - '@babel/traverse': 7.24.0 - '@babel/types': 7.24.0 + '@babel/core': 7.24.5 + '@babel/generator': 7.26.2 + '@babel/parser': 7.26.2 + '@babel/plugin-syntax-decorators': 7.24.0(@babel/core@7.24.5) + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.24.5) + '@babel/preset-typescript': 7.23.3(@babel/core@7.24.5) + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 '@mdx-js/mdx': 2.3.0 '@npmcli/package-json': 4.0.1 '@remix-run/node': 2.8.1(typescript@5.6.3) @@ -9350,7 +9433,7 @@ snapshots: chokidar: 3.6.0 cross-spawn: 7.0.3 dotenv: 16.4.5 - es-module-lexer: 1.4.1 + es-module-lexer: 1.5.4 esbuild: 0.20.1 esbuild-plugins-node-modules-polyfill: 1.6.3(esbuild@0.20.1) execa: 5.1.1 @@ -9363,9 +9446,9 @@ snapshots: json5: 2.2.3 lodash: 4.17.21 lodash.debounce: 4.0.8 - minimatch: 9.0.3 + minimatch: 9.0.4 ora: 5.4.1 - picocolors: 1.0.0 + picocolors: 1.1.1 picomatch: 2.3.1 pidtree: 0.6.0 postcss: 8.4.35 @@ -9377,7 +9460,7 @@ snapshots: react-refresh: 0.14.0 remark-frontmatter: 4.0.1 remark-mdx-frontmatter: 1.1.1 - semver: 7.6.0 + semver: 7.6.3 set-cookie-parser: 2.6.0 tar-fs: 2.1.1 tsconfig-paths: 4.2.0 @@ -9412,17 +9495,6 @@ snapshots: optionalDependencies: typescript: 5.6.3 - '@remix-run/react@2.8.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)': - dependencies: - '@remix-run/router': 1.15.3 - '@remix-run/server-runtime': 2.8.1(typescript@5.6.3) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-router: 6.22.3(react@18.2.0) - react-router-dom: 6.22.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - optionalDependencies: - typescript: 5.6.3 - '@remix-run/router@1.15.3': {} '@remix-run/router@1.15.3-pre.0': {} @@ -9981,7 +10053,7 @@ snapshots: '@types/acorn@4.0.6': dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 '@types/aria-query@5.0.4': {} @@ -10031,7 +10103,7 @@ snapshots: '@types/estree-jsx@1.0.5': dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 '@types/estree@0.0.39': {} @@ -10234,7 +10306,7 @@ snapshots: '@vanilla-extract/babel-plugin-debug-ids@1.0.5': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.5 transitivePeerDependencies: - supports-color @@ -10254,8 +10326,8 @@ snapshots: '@vanilla-extract/integration@6.5.0(@types/node@20.11.27)(terser@5.36.0)': dependencies: - '@babel/core': 7.24.0 - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.24.0) + '@babel/core': 7.24.5 + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.24.5) '@vanilla-extract/babel-plugin-debug-ids': 1.0.5 '@vanilla-extract/css': 1.14.1 esbuild: 0.20.1 @@ -10266,7 +10338,7 @@ snapshots: mlly: 1.6.1 outdent: 0.8.0 vite: 5.1.4(@types/node@20.11.27)(terser@5.36.0) - vite-node: 1.3.1(@types/node@20.11.27)(terser@5.36.0) + vite-node: 1.5.0(@types/node@20.11.27)(terser@5.36.0) transitivePeerDependencies: - '@types/node' - less @@ -10453,6 +10525,10 @@ snapshots: dependencies: acorn: 8.11.3 + acorn-jsx@5.3.2(acorn@8.14.0): + dependencies: + acorn: 8.14.0 + acorn-walk@8.3.2: {} acorn@8.11.3: {} @@ -10645,6 +10721,15 @@ snapshots: dependencies: possible-typed-array-names: 1.0.0 + babel-dead-code-elimination@1.0.9: + dependencies: + '@babel/core': 7.24.5 + '@babel/parser': 7.26.2 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color + babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.24.5): dependencies: '@babel/compat-data': 7.26.2 @@ -10880,6 +10965,10 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + chownr@1.1.4: {} chownr@2.0.0: {} @@ -10960,6 +11049,8 @@ snapshots: cookie@0.6.0: {} + cookie@1.0.2: {} + core-js-compat@3.36.1: dependencies: browserslist: 4.23.0 @@ -11052,10 +11143,16 @@ snapshots: dependencies: ms: 2.1.3 + debug@4.4.0: + dependencies: + ms: 2.1.3 + decode-named-character-reference@1.0.2: dependencies: character-entities: 2.0.2 + dedent@1.5.3: {} + deep-eql@4.1.3: dependencies: type-detect: 4.0.8 @@ -11309,8 +11406,6 @@ snapshots: iterator.prototype: 1.1.2 safe-array-concat: 1.1.2 - es-module-lexer@1.4.1: {} - es-module-lexer@1.5.4: {} es-object-atoms@1.0.0: @@ -11716,7 +11811,7 @@ snapshots: estree-util-attach-comments@2.1.1: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 estree-util-build-jsx@2.2.2: dependencies: @@ -11757,7 +11852,7 @@ snapshots: eval@0.1.8: dependencies: - '@types/node': 20.11.27 + '@types/node': 20.17.6 require-like: 0.1.2 event-target-shim@5.0.1: {} @@ -12125,7 +12220,7 @@ snapshots: hast-util-to-estree@2.3.3: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 '@types/estree-jsx': 1.0.5 '@types/hast': 2.3.10 '@types/unist': 2.0.10 @@ -12353,7 +12448,7 @@ snapshots: is-reference@3.0.2: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 is-regex@1.1.4: dependencies: @@ -12425,6 +12520,8 @@ snapshots: isarray@2.0.5: {} + isbot@5.1.23: {} + isexe@2.0.0: {} isomorphic-ws@5.0.0(ws@8.16.0): @@ -12765,7 +12862,7 @@ snapshots: media-query-parser@2.0.2: dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.26.0 media-typer@0.3.0: {} @@ -12817,7 +12914,7 @@ snapshots: micromark-extension-mdx-expression@1.0.8: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 micromark-factory-mdx-expression: 1.0.9 micromark-factory-space: 1.1.0 micromark-util-character: 1.2.0 @@ -12829,7 +12926,7 @@ snapshots: micromark-extension-mdx-jsx@1.0.5: dependencies: '@types/acorn': 4.0.6 - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 estree-util-is-identifier-name: 2.1.0 micromark-factory-mdx-expression: 1.0.9 micromark-factory-space: 1.1.0 @@ -12845,7 +12942,7 @@ snapshots: micromark-extension-mdxjs-esm@1.0.5: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 micromark-core-commonmark: 1.1.0 micromark-util-character: 1.2.0 micromark-util-events-to-acorn: 1.2.3 @@ -12857,8 +12954,8 @@ snapshots: micromark-extension-mdxjs@1.0.1: dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) micromark-extension-mdx-expression: 1.0.8 micromark-extension-mdx-jsx: 1.0.5 micromark-extension-mdx-md: 1.0.1 @@ -12881,7 +12978,7 @@ snapshots: micromark-factory-mdx-expression@1.0.9: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 micromark-util-character: 1.2.0 micromark-util-events-to-acorn: 1.2.3 micromark-util-symbol: 1.1.0 @@ -12945,7 +13042,7 @@ snapshots: micromark-util-events-to-acorn@1.2.3: dependencies: '@types/acorn': 4.0.6 - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 '@types/unist': 2.0.10 estree-util-visit: 1.2.1 micromark-util-symbol: 1.1.0 @@ -12983,7 +13080,7 @@ snapshots: micromark@3.2.0: dependencies: '@types/debug': 4.1.12 - debug: 4.3.7 + debug: 4.4.0 decode-named-character-reference: 1.0.2 micromark-core-commonmark: 1.1.0 micromark-factory-space: 1.1.0 @@ -13155,7 +13252,7 @@ snapshots: dependencies: hosted-git-info: 6.1.1 is-core-module: 2.13.1 - semver: 7.6.0 + semver: 7.6.3 validate-npm-package-license: 3.0.4 normalize-path@3.0.0: {} @@ -13164,7 +13261,7 @@ snapshots: npm-install-checks@6.3.0: dependencies: - semver: 7.6.0 + semver: 7.6.3 npm-normalize-package-bin@3.0.1: {} @@ -13172,7 +13269,7 @@ snapshots: dependencies: hosted-git-info: 6.1.1 proc-log: 3.0.0 - semver: 7.6.0 + semver: 7.6.3 validate-npm-package-name: 5.0.0 npm-pick-manifest@8.0.2: @@ -13180,7 +13277,7 @@ snapshots: npm-install-checks: 6.3.0 npm-normalize-package-bin: 3.0.1 npm-package-arg: 10.1.0 - semver: 7.6.0 + semver: 7.6.3 npm-run-all@4.1.5: dependencies: @@ -13412,7 +13509,7 @@ snapshots: periscopic@3.1.0: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 estree-walker: 3.0.3 is-reference: 3.0.2 @@ -13750,6 +13847,16 @@ snapshots: '@remix-run/router': 1.15.3 react: 18.2.0 + react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + dependencies: + '@types/cookie': 0.6.0 + cookie: 1.0.2 + react: 18.2.0 + set-cookie-parser: 2.6.0 + turbo-stream: 2.4.0 + optionalDependencies: + react-dom: 18.2.0(react@18.2.0) + react-style-singleton@2.2.1(@types/react@18.2.66)(react@18.2.0): dependencies: get-nonce: 1.0.1 @@ -13827,6 +13934,8 @@ snapshots: dependencies: picomatch: 2.3.1 + readdirp@4.1.2: {} + recast@0.23.6: dependencies: ast-types: 0.16.1 @@ -14610,6 +14719,8 @@ snapshots: tslib@2.6.2: {} + turbo-stream@2.4.0: {} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -14693,6 +14804,8 @@ snapshots: undici-types@6.19.8: {} + undici@6.21.1: {} + unicode-canonical-property-names-ecmascript@2.0.1: {} unicode-match-property-ecmascript@2.0.0: @@ -14905,6 +15018,10 @@ snapshots: v8-compile-cache-lib@3.0.1: {} + valibot@0.41.0(typescript@5.6.3): + optionalDependencies: + typescript: 5.6.3 + validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 @@ -14937,7 +15054,7 @@ snapshots: unist-util-stringify-position: 3.0.3 vfile-message: 3.1.4 - vite-node@1.3.1(@types/node@20.11.27)(terser@5.36.0): + vite-node@1.5.0(@types/node@20.11.27)(terser@5.36.0): dependencies: cac: 6.7.14 debug: 4.3.4 @@ -14954,12 +15071,12 @@ snapshots: - supports-color - terser - vite-node@1.5.0(@types/node@20.11.27)(terser@5.36.0): + vite-node@3.0.0-beta.2(@types/node@20.11.27)(terser@5.36.0): dependencies: cac: 6.7.14 - debug: 4.3.4 + debug: 4.4.0 + es-module-lexer: 1.5.4 pathe: 1.1.2 - picocolors: 1.0.0 vite: 5.1.4(@types/node@20.11.27)(terser@5.36.0) transitivePeerDependencies: - '@types/node' From a914654a4e0d89a262ba557f27d51040caab61df Mon Sep 17 00:00:00 2001 From: Nathan Gerhart Date: Wed, 19 Feb 2025 11:40:48 -0700 Subject: [PATCH 02/19] Migrate routes config Per https://reactrouter.com/upgrading/remix#4-add-a-routests-file and https://www.npmjs.com/package/remix-flat-routes?activeTab=readme --- app/routes.ts | 16 ++++++++++++++++ react-router.config.ts | 7 +++++++ vite.config.ts | 18 ++---------------- 3 files changed, 25 insertions(+), 16 deletions(-) create mode 100644 app/routes.ts create mode 100644 react-router.config.ts diff --git a/app/routes.ts b/app/routes.ts new file mode 100644 index 00000000..cfbfaec3 --- /dev/null +++ b/app/routes.ts @@ -0,0 +1,16 @@ +import { remixRoutesOptionAdapter } from "@react-router/remix-routes-option-adapter" +import { flatRoutes } from "remix-flat-routes" + +const routes = remixRoutesOptionAdapter(defineRoutes => { + return flatRoutes("routes", defineRoutes, { + ignoredRouteFiles: ["**/.*"], // Ignore dot files (like .DS_Store) + // appDir: 'app', + // routeDir: 'routes', + // basePath: '/', + // paramPrefixChar: '$', + // nestedDirectoryChar: '+', + // routeRegex: /((\${nestedDirectoryChar}[\/\\][^\/\\:?*]+)|[\/\\]((index|route|layout|page)|(_[^\/\\:?*]+)|([^\/\\:?*]+\.route)))\.(ts|tsx|js|jsx|md|mdx)$$/, + }) +}) + +export default routes diff --git a/react-router.config.ts b/react-router.config.ts new file mode 100644 index 00000000..c945f66b --- /dev/null +++ b/react-router.config.ts @@ -0,0 +1,7 @@ +import type { Config } from "@react-router/dev/config" + +export default { + // Config options... + // SPA mode to get our redirects working (also because we eventually want a SPA) + ssr: false, +} satisfies Config diff --git a/vite.config.ts b/vite.config.ts index fa4cf336..ff11c81f 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,6 +1,5 @@ import { NodeGlobalsPolyfillPlugin as nodeGlobalsPolyfillPlugin } from "@esbuild-plugins/node-globals-polyfill" -import { vitePlugin as remix, type VitePluginConfig } from "@remix-run/dev" -import { flatRoutes } from "remix-flat-routes" +import { reactRouter } from "@react-router/dev/vite" import { type Options as AutoImportOptions } from "unplugin-auto-import/types" import autoImport from "unplugin-auto-import/vite" import iconsResolver from "unplugin-icons/resolver" @@ -11,19 +10,6 @@ import wasm from "vite-plugin-wasm" import tsconfigPaths from "vite-tsconfig-paths" import { defineConfig } from "vitest/config" -const remixOptions: VitePluginConfig = { - // SPA mode https://remix.run/docs/en/main/future/spa-mode - ssr: false, - - // see https://github.com/kiliman/remix-flat-routes - ignoredRouteFiles: ["**/*"], - routes: async defineRoutes => - flatRoutes("routes", defineRoutes, { - // allow colocating route modules with their components - ignoredRouteFiles: ["**/lib/*", "**/hooks/*", "**/context/*", "**/ui/*"], - }), -} - const pwaOptions: Partial = { includeAssets: ["favicon.ico"], srcDir: "app", @@ -66,7 +52,7 @@ const isStorybook = process.argv[1].includes("storybook") export default defineConfig({ plugins: [ - !isStorybook && remix(remixOptions), + !isStorybook && reactRouter(), tsconfigPaths(), wasm() as Plugin, vitePWA(pwaOptions), From 5311d20e2c2ed34b695301b32976cb5be2164e3f Mon Sep 17 00:00:00 2001 From: Nathan Gerhart Date: Wed, 19 Feb 2025 11:41:37 -0700 Subject: [PATCH 03/19] React Router types https://reactrouter.com/upgrading/remix#7-enable-type-safety --- .gitignore | 3 ++- tsconfig.json | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 437e23de..1901d45e 100644 --- a/.gitignore +++ b/.gitignore @@ -51,4 +51,5 @@ test-results typings yarn-debug.log* yarn-error.log* -.copilotcontext \ No newline at end of file +.copilotcontext +.react-router/ \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 1e304b25..5aa610d4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -11,7 +11,8 @@ "skipLibCheck": true, "strict": true, "target": "ESNext", - "types": ["vite/client"] + "types": ["@react-router/node", "vite/client"], + "rootDirs": [".", "./.react-router/types"] }, "include": ["*.ts", "test/**/*.ts"] } From 5fc826a53df535acb472110d72ad4bb5b8becbf1 Mon Sep 17 00:00:00 2001 From: Nathan Gerhart Date: Wed, 19 Feb 2025 11:43:35 -0700 Subject: [PATCH 04/19] remove custom entry files It's possible we'll want to customize the entry points in the future, but this change is what it took to get the app to function at all --- app/entry.client.tsx | 7 ------- app/entry.server.tsx | 21 --------------------- app/index.html | 16 ---------------- app/root.tsx | 25 +++++++++++++++++++------ 4 files changed, 19 insertions(+), 50 deletions(-) delete mode 100644 app/entry.client.tsx delete mode 100644 app/entry.server.tsx delete mode 100644 app/index.html diff --git a/app/entry.client.tsx b/app/entry.client.tsx deleted file mode 100644 index 405f591a..00000000 --- a/app/entry.client.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { RemixBrowser } from "@remix-run/react" -import { startTransition } from "react" -import { hydrateRoot } from "react-dom/client" - -startTransition(() => { - hydrateRoot(document.querySelector("#app")!, ) -}) diff --git a/app/entry.server.tsx b/app/entry.server.tsx deleted file mode 100644 index 9c45a851..00000000 --- a/app/entry.server.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import fs from "node:fs" -import path from "node:path" -import type { EntryContext } from "@remix-run/node" -import { RemixServer } from "@remix-run/react" -import { renderToString } from "react-dom/server" - -export default function handleRequest( - request: Request, - responseStatusCode: number, - _responseHeaders: Headers, - remixContext: EntryContext, -) { - const shellHtml = fs.readFileSync(path.join(process.cwd(), "app/index.html")).toString() - const appHtml = renderToString() - const html = shellHtml.replace("", appHtml) - - return new Response(html, { - headers: { "Content-Type": "text/html" }, - status: responseStatusCode, - }) -} diff --git a/app/index.html b/app/index.html deleted file mode 100644 index 3f32f93b..00000000 --- a/app/index.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - XDev - - - - - - - - - -
- - diff --git a/app/root.tsx b/app/root.tsx index fae68182..f8fe07b7 100644 --- a/app/root.tsx +++ b/app/root.tsx @@ -1,5 +1,5 @@ import "@ibm/plex/css/ibm-plex.css" -import { Links, Outlet, Scripts, ScrollRestoration } from "@remix-run/react" +import { Links, Meta, Outlet, Scripts, ScrollRestoration } from "react-router" import { Loading } from "ui/Loading" import "./index.css" @@ -14,11 +14,24 @@ export default function App() { export function Layout({ children }: { children: React.ReactNode }) { return ( - <> - {children} - - - + + + + + + + + + + + + + + {children} + + + + ) } From 7b9de7dc1e48410ca15440a630430800cb322ea5 Mon Sep 17 00:00:00 2001 From: Nathan Gerhart Date: Sun, 23 Feb 2025 13:00:40 -0700 Subject: [PATCH 05/19] navigate: fix lint issues navigate is now async so needs to be handled as such --- app/context/Auth/AuthContextProvider.tsx | 4 ++-- app/hooks/useNavigationHotkey.tsx | 2 +- app/hooks/useRedirect.tsx | 4 ++-- app/routes/_private+/settings+/devices+/invite.tsx | 2 +- app/routes/_private+/team+/members+/invite.tsx | 2 +- app/routes/_private+/team+/members+/remove.tsx | 2 +- app/routes/_private+/team+/members+/revoke.tsx | 2 +- app/routes/auth+/begin.tsx | 2 +- app/routes/auth+/setup+/_.create.tsx | 4 ++-- app/routes/auth+/setup+/_.join.($code).tsx | 2 +- app/routes/auth+/setup+/_.link.($code).tsx | 2 +- app/routes/auth+/setup+/_setup.tsx | 2 +- 12 files changed, 15 insertions(+), 15 deletions(-) diff --git a/app/context/Auth/AuthContextProvider.tsx b/app/context/Auth/AuthContextProvider.tsx index 7a186094..6c112571 100644 --- a/app/context/Auth/AuthContextProvider.tsx +++ b/app/context/Auth/AuthContextProvider.tsx @@ -42,7 +42,7 @@ export function AuthContextProvider({ children }: { children: React.ReactNode }) switch (scenario) { case "FIRST_LOAD": { // start the auth flow - navigate("/auth/begin") + void navigate("/auth/begin") break } @@ -66,7 +66,7 @@ export function AuthContextProvider({ children }: { children: React.ReactNode }) const signOutIfNotAMember = (team: Auth.Team) => { if (user && team.memberWasRemoved(user.userId)) { signOut() - navigate("/") + void navigate("/") } } diff --git a/app/hooks/useNavigationHotkey.tsx b/app/hooks/useNavigationHotkey.tsx index 59763609..f9c80742 100644 --- a/app/hooks/useNavigationHotkey.tsx +++ b/app/hooks/useNavigationHotkey.tsx @@ -5,6 +5,6 @@ export function useNavigationHotkey(keys: string, path: string) { const navigate = useNavigate() useHotkeys(keys, e => { e.preventDefault() - navigate(path, { relative: "path" }) + void navigate(path, { relative: "path" }) }) } diff --git a/app/hooks/useRedirect.tsx b/app/hooks/useRedirect.tsx index ab645c21..3ee5f2ac 100644 --- a/app/hooks/useRedirect.tsx +++ b/app/hooks/useRedirect.tsx @@ -10,11 +10,11 @@ export function useRedirect({ from, to, condition = true }: Params) { if (!condition) return if (typeof from === "string" && pathname === from) { console.log(`redirecting from ${from} to ${to}`) - navigate(to, { state }) + void navigate(to, { state }) } else if (from instanceof RegExp && from.test(pathname)) { const newTo = pathname.replace(from, to) console.log(`redirecting from ${from} to ${newTo}`) - navigate(newTo, { state }) + void navigate(newTo, { state }) } }, [pathname]) } diff --git a/app/routes/_private+/settings+/devices+/invite.tsx b/app/routes/_private+/settings+/devices+/invite.tsx index 951b4897..b1ba4dfe 100644 --- a/app/routes/_private+/settings+/devices+/invite.tsx +++ b/app/routes/_private+/settings+/devices+/invite.tsx @@ -15,7 +15,7 @@ export default function DevicesInvitePage() { return ( navigate("..")} + onClose={async () => navigate("..")} invitationCode={invitationCode} /> ) diff --git a/app/routes/_private+/team+/members+/invite.tsx b/app/routes/_private+/team+/members+/invite.tsx index f7c22f22..f7721c70 100644 --- a/app/routes/_private+/team+/members+/invite.tsx +++ b/app/routes/_private+/team+/members+/invite.tsx @@ -26,7 +26,7 @@ export default function MembersInvitePage() { return ( navigate("..")} + onClose={async () => navigate("..")} contact={contact} invitationCode={invitationCode} /> diff --git a/app/routes/_private+/team+/members+/remove.tsx b/app/routes/_private+/team+/members+/remove.tsx index 3f1cce0e..52fb5bde 100644 --- a/app/routes/_private+/team+/members+/remove.tsx +++ b/app/routes/_private+/team+/members+/remove.tsx @@ -21,7 +21,7 @@ export default function RemovePage() { return ( navigate("..")} + onClose={async () => navigate("..")} contact={contact} remove={() => { team.remove(contact.id) diff --git a/app/routes/_private+/team+/members+/revoke.tsx b/app/routes/_private+/team+/members+/revoke.tsx index 18534f0c..50179f92 100644 --- a/app/routes/_private+/team+/members+/revoke.tsx +++ b/app/routes/_private+/team+/members+/revoke.tsx @@ -23,7 +23,7 @@ export default function RevokeInvitationPage() { return ( navigate("..")} + onClose={async () => navigate("..")} contact={contact} invitation={invitation} revoke={revoke} diff --git a/app/routes/auth+/begin.tsx b/app/routes/auth+/begin.tsx index d3aa70fa..bebc4f62 100644 --- a/app/routes/auth+/begin.tsx +++ b/app/routes/auth+/begin.tsx @@ -11,7 +11,7 @@ export default function AuthBeginPage() { userName={userName} onSubmit={({ n: userName }) => { update({ userName }) - navigate("/auth/setup") + void navigate("/auth/setup") }} /> ) diff --git a/app/routes/auth+/setup+/_.create.tsx b/app/routes/auth+/setup+/_.create.tsx index 678254e5..d2c39e94 100644 --- a/app/routes/auth+/setup+/_.create.tsx +++ b/app/routes/auth+/setup+/_.create.tsx @@ -26,7 +26,7 @@ export default function AuthCreatePage() { // hooks ↑ if (!userName) { - navigate("/auth/begin") + void navigate("/auth/begin") return null } @@ -68,7 +68,7 @@ export default function AuthCreatePage() { update({ user, device, rootDocumentId, shareId }) // Navigate to the app - navigate("/") + void navigate("/") }} /> ) diff --git a/app/routes/auth+/setup+/_.join.($code).tsx b/app/routes/auth+/setup+/_.join.($code).tsx index b8ae0b27..4975abc2 100644 --- a/app/routes/auth+/setup+/_.join.($code).tsx +++ b/app/routes/auth+/setup+/_.join.($code).tsx @@ -95,7 +95,7 @@ export default function AuthJoinPage() { // Save our user info etc. to local storage update({ user, device, rootDocumentId, shareId }) - navigate("/") + void navigate("/") } return invitationCodeFromUrl ? diff --git a/app/routes/auth+/setup+/_.link.($code).tsx b/app/routes/auth+/setup+/_.link.($code).tsx index 384e6f4d..da8db54d 100644 --- a/app/routes/auth+/setup+/_.link.($code).tsx +++ b/app/routes/auth+/setup+/_.link.($code).tsx @@ -30,7 +30,7 @@ export default function AuthLinkPage() { const rootDocumentId = getRootDocumentIdFromTeam(team) update({ user, device, rootDocumentId, shareId }) - navigate("/") + void navigate("/") }} /> ) diff --git a/app/routes/auth+/setup+/_setup.tsx b/app/routes/auth+/setup+/_setup.tsx index 39269e36..6aeb69f9 100644 --- a/app/routes/auth+/setup+/_setup.tsx +++ b/app/routes/auth+/setup+/_setup.tsx @@ -5,7 +5,7 @@ import { SetupOptions } from "ui/SetupOptions" export default function AuthSetupPage() { const { userName } = useLocalState() const navigate = useNavigate() - if (!userName) navigate("/auth/begin") + if (!userName) void navigate("/auth/begin") return } From 88b158f663b33376c5d2161c5f6c0ec42a76e3c5 Mon Sep 17 00:00:00 2001 From: Nathan Gerhart Date: Sun, 23 Feb 2025 13:00:55 -0700 Subject: [PATCH 06/19] DailyDones: remove unused import --- app/ui/DailyDones.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/app/ui/DailyDones.tsx b/app/ui/DailyDones.tsx index 1ce0c1fa..c8000182 100644 --- a/app/ui/DailyDones.tsx +++ b/app/ui/DailyDones.tsx @@ -1,6 +1,5 @@ import { type LocalDate } from "@js-joda/core" import { cx } from "lib/cx" -import { E } from "lib/Effect" import { useState } from "react" import { type Contact } from "schema/Contact" import { DoneEntry } from "schema/DoneEntry" From cf51a9889df69f3c59ba47039117bdd071071ebf Mon Sep 17 00:00:00 2001 From: Nathan Gerhart Date: Sun, 23 Feb 2025 15:52:02 -0700 Subject: [PATCH 07/19] fix playwright tests replaced this extra bit of remix still lurking with the proper react-router syntax --- playwright.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/playwright.config.ts b/playwright.config.ts index cdfee765..3d743c92 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -71,7 +71,7 @@ export default defineConfig({ [] : [ { - command: "pnpm remix vite:dev --port 3001", + command: "pnpm react-router dev --port 3001", env: { VITE_SYNC_SERVER_PORT: "3031" }, url: "http://localhost:3001", reuseExistingServer: false, From 4983e99145bcc7bb8b4cd002ece0d268716796b9 Mon Sep 17 00:00:00 2001 From: Nathan Gerhart Date: Sun, 9 Mar 2025 09:52:53 -0600 Subject: [PATCH 08/19] Use node 20 react-router says it needs this --- .github/workflows/build-and-deploy_devresults-xdev.yml | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-and-deploy_devresults-xdev.yml b/.github/workflows/build-and-deploy_devresults-xdev.yml index 55688c05..129042a6 100644 --- a/.github/workflows/build-and-deploy_devresults-xdev.yml +++ b/.github/workflows/build-and-deploy_devresults-xdev.yml @@ -21,7 +21,7 @@ jobs: - name: Set up Node.js version uses: actions/setup-node@v4 with: - node-version: "18.x" + node-version: "20.x" - uses: pnpm/action-setup@v3 with: diff --git a/package.json b/package.json index bb694aa0..65d858a5 100644 --- a/package.json +++ b/package.json @@ -144,7 +144,7 @@ "xo": "^0.58.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=20" }, "pnpm": { "overrides": { From 46bda5d3bbc397572982eeddcc849f0f3bf0e45d Mon Sep 17 00:00:00 2001 From: Nathan Gerhart Date: Wed, 12 Mar 2025 15:03:58 -0600 Subject: [PATCH 09/19] Packages: add dxos Replace localfirst and automerge packages with dxos. Update effect to match what dxos needs -- note this exposed a buggy test which I also fixed --- app/lib/test/csvToTimeEntries.test.ts | 4 + package.json | 21 +- pnpm-lock.yaml | 4857 +++++++++++++++++++++---- 3 files changed, 4235 insertions(+), 647 deletions(-) diff --git a/app/lib/test/csvToTimeEntries.test.ts b/app/lib/test/csvToTimeEntries.test.ts index d60fe6f5..df0eec15 100644 --- a/app/lib/test/csvToTimeEntries.test.ts +++ b/app/lib/test/csvToTimeEntries.test.ts @@ -24,6 +24,10 @@ const testCases = [ }, { input: "herb,2024-05-30", + error: "The field `duration` is required", + }, + { + input: "herb,2024-05-30,1", error: "The field `project` is required", }, { diff --git a/package.json b/package.json index 65d858a5..74316a6c 100644 --- a/package.json +++ b/package.json @@ -31,16 +31,13 @@ "unlinklocal": "node ./scripts/link-local.js --unlink" }, "dependencies": { - "@automerge/automerge": "^2.2.8", - "@automerge/automerge-repo": "^1.2.1", - "@automerge/automerge-repo-network-broadcastchannel": "^1.2.1", - "@automerge/automerge-repo-network-websocket": "^1.2.1", - "@automerge/automerge-repo-react-hooks": "^1.2.1", - "@automerge/automerge-repo-storage-indexeddb": "^1.2.1", - "@automerge/automerge-repo-storage-nodefs": "^1.2.1", - "@effect/schema": "^0.69.1", + "@dxos/config": "0.7.4", + "@dxos/echo-schema": "0.7.4", + "@dxos/react-client": "0.7.4", + "@dxos/shell": "0.7.4", + "@dxos/util": "0.7.4", + "@effect/schema": "^0.75.5", "@headlessui/react": "^2.0.3", - "@herbcaudill/eventemitter42": "^0.3.1", "@herbcaudill/random": "^1.0.5", "@hookform/resolvers": "^3.3.4", "@ibm/plex": "^6.4.0", @@ -48,10 +45,6 @@ "@js-joda/core": "^5.6.2", "@js-joda/locale_en-us": "^4.8.11", "@js-joda/timezone": "^2.18.3", - "@localfirst/auth": "^6.0.0", - "@localfirst/auth-provider-automerge-repo": "^6.0.0", - "@localfirst/auth-syncserver": "^6.0.0", - "@localfirst/crypto": "^6.0.0", "@paralleldrive/cuid2": "^2.2.2", "@playwright/test": "^1.49.1", "@radix-ui/react-avatar": "^1.0.4", @@ -73,7 +66,7 @@ "clsx": "^2.1.0", "csv-parse": "^5.5.5", "debug": "^4.3.4", - "effect": "^3.5.7", + "effect": "^3.12.11", "isbot": "^5", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ddf8fcdb..ee63ee0a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,36 +13,27 @@ importers: .: dependencies: - '@automerge/automerge': - specifier: ^2.2.8 - version: 2.2.8 - '@automerge/automerge-repo': - specifier: ^1.2.1 - version: 1.2.1(@types/node@20.11.27)(typescript@5.6.3) - '@automerge/automerge-repo-network-broadcastchannel': - specifier: ^1.2.1 - version: 1.2.1(@types/node@20.11.27)(typescript@5.6.3) - '@automerge/automerge-repo-network-websocket': - specifier: ^1.2.1 - version: 1.2.1(@types/node@20.11.27)(typescript@5.6.3) - '@automerge/automerge-repo-react-hooks': - specifier: ^1.2.1 - version: 1.2.1(@types/node@20.11.27)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) - '@automerge/automerge-repo-storage-indexeddb': - specifier: ^1.2.1 - version: 1.2.1(@types/node@20.11.27)(typescript@5.6.3) - '@automerge/automerge-repo-storage-nodefs': - specifier: ^1.2.1 - version: 1.2.1(@types/node@20.11.27)(typescript@5.6.3) + '@dxos/config': + specifier: 0.7.4 + version: 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/echo-schema': + specifier: 0.7.4 + version: 0.7.4 + '@dxos/react-client': + specifier: 0.7.4 + version: 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(@phosphor-icons/react@2.1.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react-dom@18.2.22)(@types/react@18.2.66)(effect@3.13.10)(postcss@8.4.35)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)) + '@dxos/shell': + specifier: 0.7.4 + version: 0.7.4(@dxos/react-client@0.7.4(@effect/schema@0.75.5(effect@3.13.10))(@phosphor-icons/react@2.1.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react-dom@18.2.22)(@types/react@18.2.66)(effect@3.13.10)(postcss@8.4.35)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)))(@effect/schema@0.75.5(effect@3.13.10))(@types/react-dom@18.2.22)(@types/react@18.2.66)(effect@3.13.10)(postcss@8.4.35)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)) + '@dxos/util': + specifier: 0.7.4 + version: 0.7.4 '@effect/schema': - specifier: ^0.69.1 - version: 0.69.1(effect@3.5.7) + specifier: ^0.75.5 + version: 0.75.5(effect@3.13.10) '@headlessui/react': specifier: ^2.0.3 version: 2.0.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@herbcaudill/eventemitter42': - specifier: ^0.3.1 - version: 0.3.1 '@herbcaudill/random': specifier: ^1.0.5 version: 1.0.5 @@ -64,18 +55,6 @@ importers: '@js-joda/timezone': specifier: ^2.18.3 version: 2.18.3(@js-joda/core@5.6.2) - '@localfirst/auth': - specifier: ^6.0.0 - version: 6.0.0 - '@localfirst/auth-provider-automerge-repo': - specifier: ^6.0.0 - version: 6.0.0(@types/node@20.11.27)(typescript@5.6.3) - '@localfirst/auth-syncserver': - specifier: ^6.0.0 - version: 6.0.0(@types/node@20.11.27)(typescript@5.6.3) - '@localfirst/crypto': - specifier: ^6.0.0 - version: 6.0.0 '@paralleldrive/cuid2': specifier: ^2.2.2 version: 2.2.2 @@ -111,7 +90,7 @@ importers: version: 7.2.0(react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.6.3) '@react-router/remix-routes-option-adapter': specifier: ^7.2.0 - version: 7.2.0(@react-router/dev@7.2.0(@types/node@20.11.27)(react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(terser@5.36.0)(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(terser@5.36.0)))(typescript@5.6.3) + version: 7.2.0(@react-router/dev@7.2.0(@types/node@20.11.27)(react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(sass@1.85.1)(terser@5.36.0)(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)))(typescript@5.6.3) '@storybook/manager-api': specifier: ^8.4.6 version: 8.4.6(storybook@8.4.6(prettier@3.2.5)) @@ -140,8 +119,8 @@ importers: specifier: ^4.3.4 version: 4.3.4 effect: - specifier: ^3.5.7 - version: 3.5.7 + specifier: ^3.12.11 + version: 3.13.10 isbot: specifier: ^5 version: 5.1.23 @@ -171,7 +150,7 @@ importers: version: 8.5.3(@types/react@18.2.66)(react@18.2.0) remix-flat-routes: specifier: ^0.6.4 - version: 0.6.4(@remix-run/dev@2.8.1(@types/node@20.11.27)(terser@5.36.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(terser@5.36.0))) + version: 0.6.4(@remix-run/dev@2.8.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))) tailwind-merge: specifier: ^2.2.1 version: 2.2.1 @@ -217,7 +196,7 @@ importers: version: 0.2.3(esbuild@0.20.1) '@react-router/dev': specifier: ^7.0.0 - version: 7.2.0(@types/node@20.11.27)(react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(terser@5.36.0)(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(terser@5.36.0)) + version: 7.2.0(@types/node@20.11.27)(react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(sass@1.85.1)(terser@5.36.0)(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)) '@storybook/addon-essentials': specifier: ^8.4.6 version: 8.4.6(@types/react@18.2.66)(storybook@8.4.6(prettier@3.2.5)) @@ -235,7 +214,7 @@ importers: version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@3.2.5)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.4.6(prettier@3.2.5))(typescript@5.6.3) '@storybook/react-vite': specifier: ^8.4.6 - version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@3.2.5)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.25.0)(storybook@8.4.6(prettier@3.2.5))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(terser@5.36.0)) + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@3.2.5)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.25.0)(storybook@8.4.6(prettier@3.2.5))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)) '@storybook/test': specifier: ^8.4.6 version: 8.4.6(storybook@8.4.6(prettier@3.2.5)) @@ -259,7 +238,7 @@ importers: version: 0.7.39 '@vitejs/plugin-react': specifier: ^4.2.1 - version: 4.2.1(vite@5.1.4(@types/node@20.11.27)(terser@5.36.0)) + version: 4.2.1(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)) autoprefixer: specifier: ^10.4.18 version: 10.4.18(postcss@8.4.35) @@ -325,19 +304,19 @@ importers: version: 0.17.5(rollup@4.25.0) vite: specifier: 5.1.4 - version: 5.1.4(@types/node@20.11.27)(terser@5.36.0) + version: 5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) vite-plugin-pwa: specifier: ^0.19.3 - version: 0.19.3(vite@5.1.4(@types/node@20.11.27)(terser@5.36.0))(workbox-build@7.0.0(@types/babel__core@7.20.5))(workbox-window@7.0.0) + version: 0.19.3(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))(workbox-build@7.0.0(@types/babel__core@7.20.5))(workbox-window@7.0.0) vite-plugin-wasm: specifier: ^3.3.0 - version: 3.3.0(vite@5.1.4(@types/node@20.11.27)(terser@5.36.0)) + version: 3.3.0(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)) vite-tsconfig-paths: specifier: ^4.3.2 - version: 4.3.2(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(terser@5.36.0)) + version: 4.3.2(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)) vitest: specifier: ^1.5.0 - version: 1.5.0(@types/node@20.11.27)(terser@5.36.0) + version: 1.5.0(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) xo: specifier: ^0.58.0 version: 0.58.0(@types/eslint@9.6.1)(webpack@5.91.0(esbuild@0.20.1)) @@ -374,30 +353,6 @@ packages: peerDependencies: ajv: '>=8' - '@automerge/automerge-repo-network-broadcastchannel@1.2.1': - resolution: {integrity: sha512-Jm3NiuFe/+3aHpHhRYEYOchkMkavMw7+ysNKqYgC7zyGM8jtBowJhxmD4awvz+I5dWNA64KNJIt4k7h295HPAQ==} - - '@automerge/automerge-repo-network-websocket@1.2.1': - resolution: {integrity: sha512-n4sI6l51iBf0edWtX+vhk+sc8wJL72IVZl682SvzRHakA5CzyNZiC8sVzc142zRT3RDN12jCWGpwA2Voq6EXsQ==} - - '@automerge/automerge-repo-react-hooks@1.2.1': - resolution: {integrity: sha512-xRRPFRp7dMLZZoIPuczI6ll8U6Qo4NkLAstIHZloGcVefSEOLXRRObMwkITbVaRCEM2zyRLG0MfA9T4dA1JYFQ==} - peerDependencies: - react: '>16.8.0' - react-dom: '>16.8.0' - - '@automerge/automerge-repo-storage-indexeddb@1.2.1': - resolution: {integrity: sha512-u+9eZZJK7DAr541buF4ut1ipkuiKRoaAtoFYo/ilq7zOLO7JX+GQOFx/8eKKRDlGt/AHTcDaFktkcaX0vKahQQ==} - - '@automerge/automerge-repo-storage-nodefs@1.2.1': - resolution: {integrity: sha512-MEbz4vul3frdl+zWDQE3ELBNjiC78QSOEb4reeEgCiGcoimLKxUmHvlQLxpiR209tw72Tf6RRFtvwoqV1I8TKw==} - - '@automerge/automerge-repo@1.2.1': - resolution: {integrity: sha512-uEBr4bM01aSWkEt2tDKQxfW0Pahz2zbTTn4sRJfeKJlAg2SLr4QepFJ+3Tp4CNEkkU485olfnKYf6gt7uilMZQ==} - - '@automerge/automerge@2.2.8': - resolution: {integrity: sha512-kP6Z9lIkNeIGe/jhF8SUQAgUMwVjtXCBL0eZEgQGCoWvPNTPcg8fnQco28XkYBrfkkuqiEUAbdHhJmSp0y79ug==} - '@babel/code-frame@7.23.5': resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} engines: {node: '>=6.9.0'} @@ -1032,6 +987,9 @@ packages: resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} engines: {node: '>=6.9.0'} + '@bufbuild/protobuf@2.2.3': + resolution: {integrity: sha512-tFQoXHJdkEOSwj5tRIZSPNUuXK3RaR7T1nUrPgbYX1pUbvqqaaZAsfo+NXBPsz5rZMSKVFrgK1WL8Q/MSLvprg==} + '@cbor-extract/cbor-extract-darwin-arm64@2.2.0': resolution: {integrity: sha512-P7swiOAdF7aSi0H+tHtHtr6zrpF3aAq/W9FXx5HektRvLTM2O89xCyXF3pk7pLc7QpaY7AoaE8UowVf9QBdh3w==} cpu: [arm64] @@ -1062,14 +1020,231 @@ packages: cpu: [x64] os: [win32] + '@ch-ui/colors@0.5.1': + resolution: {integrity: sha512-/WceiMV3BaLYOaRuZ74BriXphSN8UtFTsrPMeydsmoiYnpUMwJezjKk3VM8YuLfyWhuH3PQGeau/VP+oHgKyEA==} + engines: {node: '>=20.0.0'} + + '@ch-ui/tailwind-tokens@0.5.5': + resolution: {integrity: sha512-Fbr/PzdhAjB2UAm/07QMJaWKZZ8ItccZL7uh3qVCKMmXibQ41LI8GIaI/1sqgpWYvj2FleA2Kj9m7HNvhWIBnQ==} + engines: {node: '>=20.0.0'} + peerDependencies: + tailwindcss: 3.x.x + + '@ch-ui/tokens@0.5.6': + resolution: {integrity: sha512-L+DIoRYLAv1bhIC5e/S991VpQTeoarlaERJmvw46ZHQPWR+DGE4ZSTTsvgBjJ9WdyG0NmEjowZi3jMkYvA1TKg==} + engines: {node: '>=20.0.0'} + '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} - '@effect/schema@0.69.1': - resolution: {integrity: sha512-+Gq3KrQh02B8nxUnha9Df8lCwKwWnK2XgEk7JDY+67/BrJSbGxVf0TjBRRJdlsH8xsqJ+HkCApSngGKPXbWDVQ==} + '@dxos/async@0.7.4': + resolution: {integrity: sha512-OVOD6AyZhAW7Q8hTsP/ZP5Gy17H1ABUYhvy2BHu+kwX7H6qF6rCmCp58Na2Ih0aLtqD/zwa4UUorbiFXGNe/bA==} + + '@dxos/automerge-wasm@0.17.2': + resolution: {integrity: sha512-n41bQuWHUxLr6ChYpyhiqtbbUbas1mZu8j5HmjbTy/AMKeopiluULzfjnSD+eu5ye6Bl//Tj5fmKT/qb/7lNNQ==} + + '@dxos/automerge@0.7.4': + resolution: {integrity: sha512-KvUESlKeUtzgGUv1LogxvYI8yKb5qKsLhliEuf5XCHejCzvGbD/gNYI0MPH5bhD7JHIb+9mDjhymD1YuhN/O1w==} + + '@dxos/client-protocol@0.7.4': + resolution: {integrity: sha512-uFqC2xXzbcyHAnFnROjD5+SqN9RitCm/67P6G19UXA0icEvgr67kKbXSRQnAZh4aBJ1D/7TBh+jncgdH79r9eA==} + + '@dxos/client-services@0.7.4': + resolution: {integrity: sha512-gTIdguPMzYsV/yRLZ548u5GyTsX7OGcg/EEyEctiwNF2aiisrWvrsUfgmI5sWzWIp5VeuGamQZx3x9n0ePcdBw==} + + '@dxos/client@0.7.4': + resolution: {integrity: sha512-mSk2F8wm9tTexRwNws7pJQ4yL7rU4jU9kX8M7g+q5UqrsR3/kFSzuQWluRf7S3aLWiu7DQg1C/zCyA0AHVgeEw==} + engines: {node: '>=12.0.0'} + + '@dxos/codec-protobuf@0.7.4': + resolution: {integrity: sha512-yDQzCza66w19GngOLwiVEJz0d9W/eot2RE4Oye/oUU5rL8xsYQVS83cCDdcTWcixJsiWBExHVgc9nJND5Bcdjw==} + + '@dxos/config@0.7.4': + resolution: {integrity: sha512-2+aVeBPHEeqBwfh+SEKzDz1W2tB/onpSNLHQQG5xelMjeZON1moLoGm6+Th1IXpjGLj9LyV56JLv8YxL1CMLPQ==} + + '@dxos/context@0.7.4': + resolution: {integrity: sha512-bjUrcQ6D9gD6hbQklkwo7qEhG9rA1tyh6cyJGsycnHBFk7tAHtPPUgDZUnn4IhFBe4t+Rbnu3Xw2OsxvATnjqQ==} + + '@dxos/credentials@0.7.4': + resolution: {integrity: sha512-WoOMaEc6bm41LpA0Ra8zJ5zrGn4iLPJTUQwsD99bC9jEJqyM0nIsl/hOUpSuWpZWD+g4K+xvcnuIOgEfmrErHQ==} + + '@dxos/crypto@0.7.4': + resolution: {integrity: sha512-5m9+IsK4qgAIgO7y4SBU3vsD4mD8V63NqgdDpfBubRZf6olUiGOWAcnNKQKxXYJhNT7Nk0cyoMj3VMNAvfhmDQ==} + + '@dxos/debug@0.7.4': + resolution: {integrity: sha512-crP5ejVxK/zTdkcHMmX/JCQXRFFBeo+CNDoeklya5iqGwn1X9Uux4/Jz2HU/OZp6X8G79C+eE4xhT4w5sln1DQ==} + + '@dxos/display-name@0.7.4': + resolution: {integrity: sha512-TDqNcJmCywIsfH4tqySxygwJxwckXfTFse6/s4vTkmV0VoE3hMiUWItRZR1DgMP9I3FXz00MoBlIdNMXHIbHaQ==} + + '@dxos/echo-db@0.7.4': + resolution: {integrity: sha512-CDWbxpXZeZ/89tZAnSBeYfyfZ2IVZIF1OiBJzUagTm9nKBFQkmz31tFdSovlO+scRjzsbdfUHiCSu9a5PTEpXw==} + + '@dxos/echo-pipeline@0.7.4': + resolution: {integrity: sha512-IUYZZ41dah/GgvaEvzldumT0QXet246l135I7bvNPjJXgeNMZcif+jQeSlB+OZFIyDH5BL4xAkZ46fHFLK15GQ==} + + '@dxos/echo-protocol@0.7.4': + resolution: {integrity: sha512-nQrGhSBzPWn2tnM/d69AEewwnDKZU8AsP/c5jv6iesBs6EVRasCxE1a8viUW7aHwSSqNX07NXiwpV/dsfSXxVA==} + + '@dxos/echo-schema@0.7.4': + resolution: {integrity: sha512-w3ma0cMx2Ug9RD7VxuX3/bbbSPMLmFypVy7249VSZYcQ2FsXCa/jwrOcx1+F6uK6xaoRJHWna4X/6XRQ3AvAbQ==} + + '@dxos/echo-signals@0.7.4': + resolution: {integrity: sha512-5zmPxRxnGoy7NrAiBmAQaKUWHR1PWysNADW6CnDNQUeis83s+6+T2gx1q8Sy2FJZK8y5eZtbbhJOsZnAv7YDHA==} + + '@dxos/edge-client@0.7.4': + resolution: {integrity: sha512-P9T7UAiyDWm5qwk2leO82wPid3czEB1H8b2MiQkBlDn8/jkQYcx41/fMrhbN43yzMCnlOjBPSXfroVNTI3o6NA==} + + '@dxos/effect@0.7.4': + resolution: {integrity: sha512-NnfjBRC8/diAIOWqoye1oSh0ieeGCID3cDBSbwVQokWEj2+d4w3VAhwH5iLDI28xerwlrvBvzfBhYLsCqUahMQ==} + peerDependencies: + '@effect/schema': ^0.75.5 + effect: ^3.9.2 + + '@dxos/feed-store@0.7.4': + resolution: {integrity: sha512-XnqFZD02m97hJSFXA9u8LDiSyMWVmm10g7M7kQvLTHYfTMdvp5WVoP2Yg37yiuBC3wUdybON8GLKQ5/4WTqBEA==} + + '@dxos/hypercore@0.7.4': + resolution: {integrity: sha512-4Ayrvtf8c5hDWzetSTt3mQoB6bBtNW/UYwC1bJEul5xkIZyIjQqsaBWP1Pted1V2OajvT+afEa/QjobVK2oOxw==} + + '@dxos/indexing@0.7.4': + resolution: {integrity: sha512-/tZ9uFzjFrUEwbvSUf1CvFxsdB2aW00AasKo2jCdGyQVW8QYqGQG/MzUJAKdA0onxe9ImG8LDC0Wqy8+VUybGw==} + + '@dxos/invariant@0.7.4': + resolution: {integrity: sha512-js6HNocsd6qAqlCmvKuiAL+Otjw84SKT3XvNwERCKHedvUGniKa/W9RmJTB35Hv87wAzn0Nwpn72qZaEuVCWCg==} + + '@dxos/keyring@0.7.4': + resolution: {integrity: sha512-vXEF6uSGtW4htMNM3ay411nfCz1W2F7SdM0OLWM8ahqeFSMkdWr84tSvzUSJXqPQEqnUqQuXrJv0GN9l1HtmQw==} + + '@dxos/keys@0.7.4': + resolution: {integrity: sha512-dIPBQVKa/U71jng5M3LIk10kBPlgIxYueG68li0IpwN3bY25bRx666YlhA50XBpvfgqw8dSEl7a62T4nDnt2vA==} + + '@dxos/kv-store@0.7.4': + resolution: {integrity: sha512-0tu6LOQv67mU9nt6C8Vl/SvX1UXXabKGq6SPJFgHku/vHiIGrbgccJIWfdN7So+iuAQE5nUjfWF7csshIp6AcA==} + + '@dxos/live-object@0.7.4': + resolution: {integrity: sha512-iT1xhtoRmGaxWFdNUPIMKZ+RdUfZL4dWxT8YTTFeiOoJCR47BUonj80rKi/NUMr3lFYY8hNFt+xjlgFe142NcQ==} + + '@dxos/lock-file@0.7.4': + resolution: {integrity: sha512-dS99PHvlLbuhjb/vOfjzfQaSVF7fN2flKDn8XJ/aPAPGxlw6SvMLcuc3inRImTPLaNcEkqpM65RQe9cMrNRkEg==} + + '@dxos/log@0.7.4': + resolution: {integrity: sha512-hClfXYOezeWjOOQ5IilJ2ezziN83kzjrYiwuZ/SQPwD5JycYjo6E0lNhoknQJjzn9rw1L47ItcIF49/3nU6lCg==} + + '@dxos/messaging@0.7.4': + resolution: {integrity: sha512-Fuq+lx3u6GqPJ5US++bqK9dHKIA9ExajPGK5GuH+gHwiO98lP2lehJ5piS9xgTP5DdV0swQBoqMgO60CfuTiDA==} + + '@dxos/network-manager@0.7.4': + resolution: {integrity: sha512-16FbghW7sfzAQ0Bdh9T8EjpNU6zSqVJ33MS8mq3Ury4DYeU3HXtP7ZqzmQuGazgAxv1QG/nyIal+BKJK9HRCMQ==} + + '@dxos/node-std@0.7.4': + resolution: {integrity: sha512-UtJg47jM+unTxQMn7ut5MAr46pUEc8CmrV2tk4W6NKiqZ2hDjr3thgA/Gz/uq2d6+6wy6njdVOYgDaowUk0xsg==} + + '@dxos/protocols@0.7.4': + resolution: {integrity: sha512-XZSZbI/3Ez9d6SzKpKYtLfmVxkvpJzBW6YJlF1SnOHhtHfg5SvafekwR8xF8LgY8bvt+WpxQyeWiMwTE9DD/aA==} + + '@dxos/random-access-storage@0.7.4': + resolution: {integrity: sha512-ksXAYlg9BkdhCkmdk0dcCFIQb576701lTA49OVeKgskJgspNTIacmK8PEA+rEju9TbdclJiQJZ1C0njruz6QKQ==} + + '@dxos/random@0.7.4': + resolution: {integrity: sha512-NK4TjNbBIs3U58Qt1zVA0b2u80iRjfNBWIEz4gfGyzwLkAoK3GeJz/weHkE0PcbYTLJxWhK6f6V3VsMXr33g2A==} + + '@dxos/react-client@0.7.4': + resolution: {integrity: sha512-WubPN5mGDBuYc0OMLEJZTZKWlqOrIZmZbSYtywXoNobWsq1V8vv4pTXPjhR8so95fwT2vk00G5tS4wC8b7tsJw==} + peerDependencies: + react: ~18.2.0 + react-dom: ~18.2.0 + + '@dxos/react-hooks@0.7.4': + resolution: {integrity: sha512-vUCILl4p00bouIbYGPe8759OPL16g6JpKNb+ClcWtsHg9qw9iTcTF9xqAy6J9BeKAE5GrwEnkB8wY71T1OqT3Q==} + peerDependencies: + react: ~18.2.0 + react-dom: ~18.2.0 + + '@dxos/react-input@0.7.4': + resolution: {integrity: sha512-69cJ0bPBmctxqxpYTSs4IXPDOTNLRPkkbRSvB+qsxtIqeLfwA1UXzZdWVmKrlHNpUc5KIieJ8nuWFyIQN3zgCg==} + peerDependencies: + react: ~18.2.0 + react-dom: ~18.2.0 + + '@dxos/react-list@0.7.4': + resolution: {integrity: sha512-2cP7STgtno6QqnKcEu2a5SobkqgCgeDJrrndy9nQXMAfOQCFrQYC0CAHELyQhRclOXacMLVHCLSZtko9bGwrYg==} + peerDependencies: + react: ~18.2.0 + react-dom: ~18.2.0 + + '@dxos/react-ui-theme@0.7.4': + resolution: {integrity: sha512-Cc02IiSNFnekxNiJ0rdmBbBjqZcJaJwUNtp2LjTIqMQr3f0Spg2yJPfLmFcdqtkiMxgP5NzELOKtBb3lemnlMQ==} + + '@dxos/react-ui-types@0.7.4': + resolution: {integrity: sha512-SpcLb3wPXk873J8JqWSWFPHLejbblMx+D320jlO2xyIhqeQZNvzj1hTC2KI4748dAS4mTG14JdiIOCxHt7AeqQ==} + + '@dxos/react-ui@0.7.4': + resolution: {integrity: sha512-ZUm/4vbe9LBDS3jOUH5EStvlVRh2DDaWzb9RjM2rfkhYbgvQMVO+lq39QvOYxTIMAuncSstz8TWRhsixXBI0Ag==} peerDependencies: - effect: ^3.5.7 + '@dxos/react-ui-theme': 0.7.4 + '@phosphor-icons/react': ^2.1.5 + react: ~18.2.0 + react-dom: ~18.2.0 + + '@dxos/rpc-tunnel@0.7.4': + resolution: {integrity: sha512-P54F7g9R0FO3mII2bYWG6Pt5J3OuY1BoGViPdqlLs6aGKedtx91ok7kTt0Lzxa/wrA54KZrMUtZYjW8LWx+zZg==} + + '@dxos/rpc@0.7.4': + resolution: {integrity: sha512-SXZLZrPJpRn+8wfTFpRf2obFcnOLvHTW0QtSPdl8cnoCVRw9atGZhthFMZ/7etwdDKJEObGf+lm8QdmppKAu/w==} + + '@dxos/shell@0.7.4': + resolution: {integrity: sha512-z1namV7E55Cs2ia4t31i+Yf9GP8YJsfh5KMEeUkbgEjcvKT6cudh4W/amRji4jhQeF3b7yNbPlgSAvEebbSgng==} + peerDependencies: + '@dxos/react-client': 0.7.4 + react: ~18.2.0 + react-dom: ~18.2.0 + + '@dxos/teleport-extension-automerge-replicator@0.7.4': + resolution: {integrity: sha512-CwePPt0leSwLXPDSBJQ5Egprn89pupHYlhYepIoG6S44/UHW+0djyobjq/66UMOpbEehML92LOwBzQYIhaz95A==} + + '@dxos/teleport-extension-gossip@0.7.4': + resolution: {integrity: sha512-rkqEOpZJrxak1b6l6ayc1QGa8QZsw7MVYNOh6MMBHO7xzg5O9ueKX/2X/ajX7QQRFHMTBFNocA4HyKT6C0zIJQ==} + + '@dxos/teleport-extension-object-sync@0.7.4': + resolution: {integrity: sha512-+ynwpPdmh8PWVoO6N+NDIgIhYskMMCTz9ZiUYxXOw0PdxlVAkn1uYWP5MbuJ/w9o74zml4vjJqZtZ5vGiIYxDw==} + + '@dxos/teleport-extension-replicator@0.7.4': + resolution: {integrity: sha512-PpXmViMaRuSarlbBVY89OeoIKsol3vHBkErB1Vo1TuqRnDTKaej/qBDo3oHlTcgL0lpno4BLwXbAWoJYn7tycQ==} + + '@dxos/teleport@0.7.4': + resolution: {integrity: sha512-zicQvO12G57izl9UexlhCNYm0MJiKhIsZXLFNkw2SpYzAkg0pSCG74iNP1mVjXBvAyTVTQWSJcEwgm9NUrrrEw==} + + '@dxos/timeframe@0.7.4': + resolution: {integrity: sha512-RU1wgTUXepduUw3i7vT58aiYc9/HFILoengikjXXvEz300Usnx9ES8QOog4MMSHdukhX5dUEnULya447t9Ffmw==} + + '@dxos/tracing@0.7.4': + resolution: {integrity: sha512-oLgy5WqzS8QyvFg02zUlPi5HcnEmswCyX5P7jCXmblTOU0kU+KxpuMhu5SX9kxRU97m8D+/N9e7ZojKbuEzb4g==} + + '@dxos/typings@0.7.4': + resolution: {integrity: sha512-8+5xkY6wHrViy+p7BPVLGzsLX9H0fUNi8M9UylW2lYIzB6ZfXdAXV0rKQr7m3/vCIQm+iAZFeKnQk0aiFMPTdw==} + + '@dxos/util@0.7.4': + resolution: {integrity: sha512-6eAi7bhk+tvo2YMwg7PhogIjzJXU5ms40/x/+Sv5oxdIaN3U9LahGUdfowXZp7m1ND6svu6Hnl4WJEzRwTQl1g==} + + '@dxos/websocket-rpc@0.7.4': + resolution: {integrity: sha512-GXNchccBALeTY1sCtSwuJ+r4ZX3MFA6QGCQbVUHmQuRvAayO6Lu7mfxHBzVjHCFBicsMPpUl6QIUHOcAeqhxxA==} + + '@effect/schema@0.75.5': + resolution: {integrity: sha512-TQInulTVCuF+9EIbJpyLP6dvxbQJMphrnRqgexm/Ze39rSjfhJuufF7XvU3SxTgg3HnL7B/kpORTJbHhlE6thw==} + deprecated: this package has been merged into the main effect package + peerDependencies: + effect: ^3.9.2 + + '@emoji-mart/data@1.2.1': + resolution: {integrity: sha512-no2pQMWiBy6gpBEiqGeU77/bFejDqUTRY7KX+0+iur13op3bqUsXdnwoZs6Xb1zbv0gAj5VvS1PWoUUckSr5Dw==} + + '@emoji-mart/react@1.1.1': + resolution: {integrity: sha512-NMlFNeWgv1//uPsvLxvGQoIerPuVdXwK/EUek8OOkJ6wVOWPUizRBJU0hDqWZCOROVpfBgCemaC3m6jDOXi03g==} + peerDependencies: + emoji-mart: ^5.2 + react: ^16.8 || ^17 || ^18 '@emotion/hash@0.9.1': resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==} @@ -1260,6 +1435,52 @@ packages: '@floating-ui/utils@0.2.1': resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} + '@fluentui/keyboard-keys@9.0.8': + resolution: {integrity: sha512-iUSJUUHAyTosnXK8O2Ilbfxma+ZyZPMua5vB028Ys96z80v+LFwntoehlFsdH3rMuPsA8GaC1RE7LMezwPBPdw==} + + '@fluentui/react-shared-contexts@9.22.0': + resolution: {integrity: sha512-bElZ5019bIENCsa2oaiqOj1nAbcXnRDCk1p/TrotghGpnfLlxMiE0wgcmDoyVxxdmx3cCQYWBX7DJw8dK54c/g==} + peerDependencies: + '@types/react': '>=16.14.0 <19.0.0' + react: '>=16.14.0 <19.0.0' + + '@fluentui/react-tabster@9.24.1': + resolution: {integrity: sha512-sDh6PCGcsZQsDgK8tstXnWmcQo4rhkAv3PC0GPBg0HkvFPZ+TwXGkuJ+9itVpRq+QljBMSgj/30swwg11aiJGA==} + peerDependencies: + '@types/react': '>=16.14.0 <19.0.0' + '@types/react-dom': '>=16.9.0 <19.0.0' + react: '>=16.14.0 <19.0.0' + react-dom: '>=16.14.0 <19.0.0' + + '@fluentui/react-theme@9.1.24': + resolution: {integrity: sha512-OhVKYD7CMYHxzJEn4PtIszledj8hbQJNWBMfIZsp4Sytdp9vCi0txIQUx4BhS1WqtQPhNGCF16eW9Q3NRrnIrQ==} + + '@fluentui/react-utilities@9.18.21': + resolution: {integrity: sha512-R7WDPhqfRyi0z9rhI5q9YGdS+kB2QGJwPHR5u0pkvO6uPVgd8TLFL9m3O97hm9ENy9jt007DJwUOyYIdlwhsEg==} + peerDependencies: + '@types/react': '>=16.14.0 <19.0.0' + react: '>=16.14.0 <19.0.0' + + '@fluentui/tokens@1.0.0-alpha.21': + resolution: {integrity: sha512-xQ1T56sNgDFGl+kJdIwhz67mHng8vcwO7Dvx5Uja4t+NRULQBgMcJ4reUo4FGF3TjufHj08pP0/OnKQgnOaSVg==} + + '@fontsource-variable/inter@5.0.16': + resolution: {integrity: sha512-k+BUNqksTL+AN+o+OV7ILeiE9B5M5X+/jA7LWvCwjbV9ovXTqZyKRhA/x7uYv/ml8WQ0XNLBM7cRFIx4jW0/hg==} + + '@fontsource-variable/jetbrains-mono@5.0.21': + resolution: {integrity: sha512-LL/57KBbM3r0UMuN6tSeYExiBObt0QuGq49m1FyoDFIv1GAcuKU0EQ/GAKJ/yt3R8onOCD3f5X9Dln//G6uzRQ==} + + '@griffel/core@1.19.1': + resolution: {integrity: sha512-ZItAAOm8YH1FW0ebzOxS3jwENqd+Dz4CGiPEdgkL4kr7D6mBpjjBbQC6VRXxnA+VqHeEQGy69Ll4M1peY8MX/g==} + + '@griffel/react@1.5.29': + resolution: {integrity: sha512-xKenEIfV2PnLKVsM8yp2ZCUTknh2790937XlI88zDaO9TC8ylG10mZ3MrcgCdSecrVjKq9JKmm24tsODpkh4pw==} + peerDependencies: + react: '>=16.8.0 <19.0.0' + + '@griffel/style-types@1.3.0': + resolution: {integrity: sha512-bHwD3sUE84Xwv4dH011gOKe1jul77M1S6ZFN9Tnq8pvZ48UMdY//vtES6fv7GRS5wXYT4iqxQPBluAiYAfkpmw==} + '@headlessui/react@2.0.3': resolution: {integrity: sha512-Xd1h0YZgfhxZ7W1w4TvK0/TZ1c4qaX4liYVUkAXqW1HCLcXSqnMeYAUGJS/BBroBAUL9HErjyFcRpCWRQZ/0lA==} engines: {node: '>=10'} @@ -1267,9 +1488,6 @@ packages: react: ^18 react-dom: ^18 - '@herbcaudill/eventemitter42@0.3.1': - resolution: {integrity: sha512-GTe0EupM4v+0Iet2UmFz5ZsPz8MZm/FbYx1yTJ9OyeVbCe5etkEKA2pntuFAjamp08c8Sh2p+QcM5AGMWi3sdA==} - '@herbcaudill/random@1.0.5': resolution: {integrity: sha512-APF0+++VXT2VXNL8WGpmmqUV8vpZOGgntDj5Sg+mgcWK1u85awDdbtNtaJ4QX7yx8XPvBYby8cQskPl9PvQgqg==} @@ -1359,29 +1577,6 @@ packages: '@jspm/core@2.0.1': resolution: {integrity: sha512-Lg3PnLp0QXpxwLIAuuJboLeRaIhrgJjeuh797QADg3xz8wGLugQOS5DpsE8A6i6Adgzf+bacllkKZG3J0tGfDw==} - '@localfirst/auth-provider-automerge-repo@6.0.0': - resolution: {integrity: sha512-5VrYgoTGQEL6e36EZZMUnQZAgZjxAphzvfKyzpX1vGiSFEaUzC9X5yQ7TrsZqvycf6aI6yJKGhinw7J5pMt7tQ==} - engines: {node: '>=18'} - - '@localfirst/auth-syncserver@6.0.0': - resolution: {integrity: sha512-KNl8rh3fsdPUUECHO80IsVji+tFHYZIgorxOKEsUjttmhifPp0nm3Oo5SqPMnTZiCxeoe1pkS8i41fdKII46dw==} - engines: {node: '>=18'} - - '@localfirst/auth@6.0.0': - resolution: {integrity: sha512-qEs0bhVKV9c1VnzWErRYk6j3DcM3CqAuNAj4DR3dZzBc6tGEYkPvzB6CpoOAxlz/i7U77SGFkvT9BWfk22zreQ==} - engines: {node: '>=18'} - - '@localfirst/crdx@6.0.0': - resolution: {integrity: sha512-uuQ6G1WlubO6fMTwMai0Iysf2Qye8ojB4b6DEbxZESeSErdrjkBFQd7YRj9WihLFagTF6jvg/58OSLjE3I7KdQ==} - engines: {node: '>=18'} - - '@localfirst/crypto@6.0.0': - resolution: {integrity: sha512-hlZfry2BilI2F2KTp0m700gub9Y39Zh7Ba4guxA5BAIiIYaDIfACkEl912xSajN07CXc2SKhmTKNmfZvHlM8vg==} - engines: {node: '>=18'} - - '@localfirst/shared@6.0.0': - resolution: {integrity: sha512-qYl4SNbXBN4NIrWnskeTwGMkWI90vq+uhIO7AfUY4yoYtLoG+nyo352npX8xB8/aeEGVyR8rXXJu6bCsmnnxUw==} - '@mdx-js/mdx@2.3.0': resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==} @@ -1394,35 +1589,8 @@ packages: '@mjackson/node-fetch-server@0.2.0': resolution: {integrity: sha512-EMlH1e30yzmTpGLQjlFmaDAjyOeZhng1/XCd7DExR8PNAnG/G1tyruZxEoUe11ClnwGhGrtsdnyyUx1frSzjng==} - '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.2': - resolution: {integrity: sha512-9bfjwDxIDWmmOKusUcqdS4Rw+SETlp9Dy39Xui9BEGEk19dDwH0jhipwFzEff/pFg95NKymc6TOTbRKcWeRqyQ==} - cpu: [arm64] - os: [darwin] - - '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.2': - resolution: {integrity: sha512-lwriRAHm1Yg4iDf23Oxm9n/t5Zpw1lVnxYU3HnJPTi2lJRkKTrps1KVgvL6m7WvmhYVt/FIsssWay+k45QHeuw==} - cpu: [x64] - os: [darwin] - - '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.2': - resolution: {integrity: sha512-FU20Bo66/f7He9Fp9sP2zaJ1Q8L9uLPZQDub/WlUip78JlPeMbVL8546HbZfcW9LNciEXc8d+tThSJjSC+tmsg==} - cpu: [arm64] - os: [linux] - - '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.2': - resolution: {integrity: sha512-MOI9Dlfrpi2Cuc7i5dXdxPbFIgbDBGgKR5F2yWEa6FVEtSWncfVNKW5AKjImAQ6CZlBK9tympdsZJ2xThBiWWA==} - cpu: [arm] - os: [linux] - - '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.2': - resolution: {integrity: sha512-gsWNDCklNy7Ajk0vBBf9jEx04RUxuDQfBse918Ww+Qb9HCPoGzS+XJTLe96iN3BVK7grnLiYghP/M4L8VsaHeA==} - cpu: [x64] - os: [linux] - - '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.2': - resolution: {integrity: sha512-O+6Gs8UeDbyFpbSh2CPEz/UOrrdWPTBYNblZK5CxxLisYt4kGX3Sc+czffFonyjiGSq3jWLwJS/CCJc7tBr4sQ==} - cpu: [x64] - os: [win32] + '@ngneat/falso@7.3.0': + resolution: {integrity: sha512-JDjy2D+fLMAIl0x9i9B9DCsmrr9UcqjLoAbjf+xKdXOkSyoU8t2DKi84Jvn9Uwj9lX02dsHAQuq3JZDUiqn22w==} '@noble/hashes@1.4.0': resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} @@ -1456,9 +1624,102 @@ packages: resolution: {integrity: sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + '@orama/orama@2.1.1': + resolution: {integrity: sha512-euTV/2kya290SNkl5m8e/H1na8iDygk74nNtl4E0YZNyYIrEMwE1JwamoroMKGZw2Uz+in/8gH3m1+2YfP0j1w==} + engines: {node: '>= 16.0.0'} + '@paralleldrive/cuid2@2.2.2': resolution: {integrity: sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==} + '@parcel/watcher-android-arm64@2.5.1': + resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + + '@parcel/watcher-darwin-arm64@2.5.1': + resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + + '@parcel/watcher-darwin-x64@2.5.1': + resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + + '@parcel/watcher-freebsd-x64@2.5.1': + resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + + '@parcel/watcher-linux-arm-glibc@2.5.1': + resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm-musl@2.5.1': + resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm64-glibc@2.5.1': + resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-arm64-musl@2.5.1': + resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-x64-glibc@2.5.1': + resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-linux-x64-musl@2.5.1': + resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-win32-arm64@2.5.1': + resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + + '@parcel/watcher-win32-ia32@2.5.1': + resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + + '@parcel/watcher-win32-x64@2.5.1': + resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + + '@parcel/watcher@2.5.1': + resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} + engines: {node: '>= 10.0.0'} + + '@phosphor-icons/react@2.1.7': + resolution: {integrity: sha512-g2e2eVAn1XG2a+LI09QU3IORLhnFNAFkNbo2iwbX6NOKSLOwvEMmTa7CgOzEbgNWR47z8i8kwjdvYZ5fkGx1mQ==} + engines: {node: '>=10'} + peerDependencies: + react: '>= 16.8' + react-dom: '>= 16.8' + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -1472,6 +1733,55 @@ packages: engines: {node: '>=18'} hasBin: true + '@preact/signals-core@1.8.0': + resolution: {integrity: sha512-OBvUsRZqNmjzCZXWLxkZfhcgT+Fk8DDcT/8vD6a1xhDemodyy87UJRJfASMuSD8FaAIeGgGm85ydXhm7lr4fyA==} + + '@preact/signals-react@1.3.8': + resolution: {integrity: sha512-i7mVZ/ZiD9WqNH79r+klpQsp8X+/dOd/5AtvDI0HNpgWuHyzyF9WXDViKl+1vXgB767n9VnH1W2azg+w1oyFMQ==} + peerDependencies: + react: ^16.14.0 || 17.x || 18.x + + '@preact/signals@1.3.2': + resolution: {integrity: sha512-naxcJgUJ6BTOROJ7C3QML7KvwKwCXQJYTc5L/b0eEsdYgPB6SxwoQ1vDGcS0Q7GVjAenVq/tXrybVdFShHYZWg==} + peerDependencies: + preact: 10.x + + '@protobufjs/aspromise@1.1.2': + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + + '@protobufjs/base64@1.1.2': + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + + '@protobufjs/codegen@2.0.4': + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + + '@protobufjs/eventemitter@1.1.0': + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + + '@protobufjs/fetch@1.1.0': + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + + '@protobufjs/float@1.0.2': + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + + '@protobufjs/inquire@1.1.0': + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + + '@protobufjs/path@1.1.2': + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + + '@protobufjs/pool@1.1.0': + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + + '@protobufjs/utf8@1.1.0': + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + + '@radix-ui/number@1.0.1': + resolution: {integrity: sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==} + + '@radix-ui/number@1.1.0': + resolution: {integrity: sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ==} + '@radix-ui/primitive@1.0.1': resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} @@ -1481,8 +1791,8 @@ packages: '@radix-ui/primitive@1.1.1': resolution: {integrity: sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==} - '@radix-ui/react-arrow@1.1.1': - resolution: {integrity: sha512-NaVpZfmv8SKeZbn4ijN2V3jlHA9ngBG16VnIIm22nUR0Yk8KUALyBxT3KYEUnNuch9sTE8UTsS3whzBgKOL30w==} + '@radix-ui/react-accordion@1.2.3': + resolution: {integrity: sha512-RIQ15mrcvqIkDARJeERSuXSry2N8uYnxkdDetpfmalT/+0ntOXLkFOsh9iwlAsCv+qcmhZjbdJogIm6WBa6c4A==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1494,8 +1804,21 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-avatar@1.0.4': - resolution: {integrity: sha512-kVK2K7ZD3wwj3qhle0ElXhOjbezIgyl2hVvgwfIdexL3rN6zJmy5AqqIf+D31lxVppdzV8CjAfZ6PklkmInZLw==} + '@radix-ui/react-alert-dialog@1.1.6': + resolution: {integrity: sha512-p4XnPqgej8sZAAReCAKgz1REYZEBLR8hU9Pg27wFnCWIMc8g1ccCs0FjBcy05V15VTu8pAePw/VDYeOm/uZ6yQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-arrow@1.0.3': + resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1507,8 +1830,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-checkbox@1.1.2': - resolution: {integrity: sha512-/i0fl686zaJbDQLNKrkCbMyDm6FQMt4jg323k7HuqitoANm9sE23Ql8yOK3Wusk34HSLKDChhMux05FnP6KUkw==} + '@radix-ui/react-arrow@1.1.1': + resolution: {integrity: sha512-NaVpZfmv8SKeZbn4ijN2V3jlHA9ngBG16VnIIm22nUR0Yk8KUALyBxT3KYEUnNuch9sTE8UTsS3whzBgKOL30w==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1520,8 +1843,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-collection@1.1.0': - resolution: {integrity: sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==} + '@radix-ui/react-arrow@1.1.2': + resolution: {integrity: sha512-G+KcpzXHq24iH0uGG/pF8LyzpFJYGD4RfLjCIBfGdSLXvjLHST31RUiRVrupIBMvIppMgSzQ6l66iAxl03tdlg==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1533,44 +1856,135 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-compose-refs@1.0.1': - resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} + '@radix-ui/react-avatar@1.0.4': + resolution: {integrity: sha512-kVK2K7ZD3wwj3qhle0ElXhOjbezIgyl2hVvgwfIdexL3rN6zJmy5AqqIf+D31lxVppdzV8CjAfZ6PklkmInZLw==} peerDependencies: '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: '@types/react': optional: true + '@types/react-dom': + optional: true - '@radix-ui/react-compose-refs@1.1.0': - resolution: {integrity: sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==} + '@radix-ui/react-checkbox@1.1.2': + resolution: {integrity: sha512-/i0fl686zaJbDQLNKrkCbMyDm6FQMt4jg323k7HuqitoANm9sE23Ql8yOK3Wusk34HSLKDChhMux05FnP6KUkw==} peerDependencies: '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true + '@types/react-dom': + optional: true - '@radix-ui/react-compose-refs@1.1.1': - resolution: {integrity: sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==} + '@radix-ui/react-collapsible@1.1.3': + resolution: {integrity: sha512-jFSerheto1X03MUC0g6R7LedNW9EEGWdg9W1+MlpkMLwGkgkbUXLPBH/KIuWKXUoeYRVY11llqbTBDzuLg7qrw==} peerDependencies: '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true + '@types/react-dom': + optional: true - '@radix-ui/react-context@1.0.1': - resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} + '@radix-ui/react-collection@1.0.3': + resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} peerDependencies: '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: '@types/react': optional: true + '@types/react-dom': + optional: true - '@radix-ui/react-context@1.1.0': - resolution: {integrity: sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==} + '@radix-ui/react-collection@1.1.0': + resolution: {integrity: sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-collection@1.1.2': + resolution: {integrity: sha512-9z54IEKRxIa9VityapoEYMuByaG42iSy1ZXlY2KcuLSEtq8x4987/N6m15ppoMffgZX72gER2uHe1D9Y6Unlcw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-compose-refs@1.0.1': + resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-compose-refs@1.1.0': + resolution: {integrity: sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-compose-refs@1.1.1': + resolution: {integrity: sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-context-menu@2.2.6': + resolution: {integrity: sha512-aUP99QZ3VU84NPsHeaFt4cQUNgJqFsLLOt/RbbWXszZ6MP0DpDyjkFZORr4RpAEx3sUBk+Kc8h13yGtC5Qw8dg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-context@1.0.1': + resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-context@1.1.0': + resolution: {integrity: sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc @@ -1600,6 +2014,28 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-dialog@1.1.6': + resolution: {integrity: sha512-/IVhJV5AceX620DUJ4uYVMymzsipdKBzo3edo+omeskCKGm9FRHM0ebIdbPnlQVJqyuHbuBltQUOG2mOTq2IYw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-direction@1.0.1': + resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-direction@1.1.0': resolution: {integrity: sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==} peerDependencies: @@ -1609,6 +2045,19 @@ packages: '@types/react': optional: true + '@radix-ui/react-dismissable-layer@1.0.4': + resolution: {integrity: sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-dismissable-layer@1.0.5': resolution: {integrity: sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==} peerDependencies: @@ -1635,6 +2084,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-dismissable-layer@1.1.5': + resolution: {integrity: sha512-E4TywXY6UsXNRhFrECa5HAvE5/4BFcGyfTyK36gP+pAW1ed7UTK4vKwdr53gAJYwqbfCWC6ATvJa3J3R/9+Qrg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-focus-guards@1.0.1': resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} peerDependencies: @@ -1653,6 +2115,19 @@ packages: '@types/react': optional: true + '@radix-ui/react-focus-scope@1.0.3': + resolution: {integrity: sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-focus-scope@1.0.4': resolution: {integrity: sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==} peerDependencies: @@ -1679,6 +2154,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-focus-scope@1.1.2': + resolution: {integrity: sha512-zxwE80FCU7lcXUGWkdt6XpTTCKPitG1XKOwViTxHVKIJhZl9MvIl2dVHeZENCWD9+EdWv05wlaEkRXUykU27RA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-id@1.0.1': resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} peerDependencies: @@ -1710,6 +2198,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-menu@2.1.6': + resolution: {integrity: sha512-tBBb5CXDJW3t2mo9WlO7r6GTmWV0F0uzHZVFmlRmYpiSK1CDU5IKojP1pm7oknpBOrFZx/YgBRW9oorPO2S/Lg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-popover@1.1.4': resolution: {integrity: sha512-aUACAkXx8LaFymDma+HQVji7WhvEhpFJ7+qPz17Nf4lLZqtreGOFRiNQWQmhzp7kEWg9cOyyQJpdIMUMPc/CPw==} peerDependencies: @@ -1723,6 +2224,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-popper@1.1.2': + resolution: {integrity: sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-popper@1.2.1': resolution: {integrity: sha512-3kn5Me69L+jv82EKRuQCXdYyf1DqHwD2U/sxoNgBGCB7K9TRc3bQamQ+5EPM9EvyPdli0W41sROd+ZU1dTCztw==} peerDependencies: @@ -1736,6 +2250,32 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-popper@1.2.2': + resolution: {integrity: sha512-Rvqc3nOpwseCyj/rgjlJDYAgyfw7OC1tTkKn2ivhaMGcYt8FSBlahHOZak2i3QwkRXUXgGgzeEe2RuqeEHuHgA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-portal@1.0.3': + resolution: {integrity: sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-portal@1.0.4': resolution: {integrity: sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==} peerDependencies: @@ -1762,6 +2302,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-portal@1.1.4': + resolution: {integrity: sha512-sn2O9k1rPFYVyKd5LAJfo96JlSGVFpa1fS6UuBJfrZadudiw5tAmru+n1x7aMRQ84qDM71Zh1+SzK5QwU0tJfA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-presence@1.0.1': resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} peerDependencies: @@ -1840,8 +2393,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-roving-focus@1.1.0': - resolution: {integrity: sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==} + '@radix-ui/react-primitive@2.0.2': + resolution: {integrity: sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+w==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1853,35 +2406,34 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-slot@1.0.2': - resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-slot@1.1.0': - resolution: {integrity: sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==} + '@radix-ui/react-radio-group@1.2.3': + resolution: {integrity: sha512-xtCsqt8Rp09FK50ItqEqTJ7Sxanz8EM8dnkVIhJrc/wkMMomSmXHvYbhv3E7Zx4oXh98aaLt9W679SUYXg4IDA==} peerDependencies: '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true + '@types/react-dom': + optional: true - '@radix-ui/react-slot@1.1.1': - resolution: {integrity: sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g==} + '@radix-ui/react-roving-focus@1.1.0': + resolution: {integrity: sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==} peerDependencies: '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true + '@types/react-dom': + optional: true - '@radix-ui/react-tabs@1.1.1': - resolution: {integrity: sha512-3GBUDmP2DvzmtYLMsHmpA1GtR46ZDZ+OreXM/N+kkQJOPIgytFWWTfDQmBQKBvaFS0Vno0FktdbVzN28KGrMdw==} + '@radix-ui/react-roving-focus@1.1.2': + resolution: {integrity: sha512-zgMQWkNO169GtGqRvYrzb0Zf8NhMHS2DuEB/TiEmVnpr5OqPU3i8lfbxaAmC2J/KYuIQxyoQQ6DxepyXp61/xw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1893,8 +2445,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-tooltip@1.1.6': - resolution: {integrity: sha512-TLB5D8QLExS1uDn7+wH/bjEmRurNMTzNrtq7IjaS4kjion9NtzsTGkvR5+i7yc9q01Pi2KMM2cN3f8UG4IvvXA==} + '@radix-ui/react-scroll-area@1.2.3': + resolution: {integrity: sha512-l7+NNBfBYYJa9tNqVcP2AGvxdE3lmE6kFTBXdvHgUaZuy+4wGCL1Cl2AfaR7RKyimj7lZURGLwFO59k4eBnDJQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1906,26 +2458,34 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-use-callback-ref@1.0.1': - resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} + '@radix-ui/react-select@1.2.2': + resolution: {integrity: sha512-zI7McXr8fNaSrUY9mZe4x/HC0jTLY9fWNhO1oLWYMQGDXuV4UCivIGTxwioSzO0ZCYX9iSLyWmAh/1TOmX3Cnw==} peerDependencies: '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: '@types/react': optional: true + '@types/react-dom': + optional: true - '@radix-ui/react-use-callback-ref@1.1.0': - resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==} + '@radix-ui/react-separator@1.1.2': + resolution: {integrity: sha512-oZfHcaAp2Y6KFBX6I5P1u7CQoy4lheCGiYj+pGFrHy8E/VNRb5E39TkTr3JrV520csPBTZjkuKFdEsjS5EUNKQ==} peerDependencies: '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true + '@types/react-dom': + optional: true - '@radix-ui/react-use-controllable-state@1.0.1': - resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} + '@radix-ui/react-slot@1.0.2': + resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 @@ -1933,8 +2493,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-use-controllable-state@1.1.0': - resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==} + '@radix-ui/react-slot@1.1.0': + resolution: {integrity: sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc @@ -1942,17 +2502,17 @@ packages: '@types/react': optional: true - '@radix-ui/react-use-escape-keydown@1.0.3': - resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} + '@radix-ui/react-slot@1.1.1': + resolution: {integrity: sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g==} peerDependencies: '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true - '@radix-ui/react-use-escape-keydown@1.1.0': - resolution: {integrity: sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==} + '@radix-ui/react-slot@1.1.2': + resolution: {integrity: sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc @@ -1960,17 +2520,162 @@ packages: '@types/react': optional: true - '@radix-ui/react-use-layout-effect@1.0.1': - resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} + '@radix-ui/react-switch@1.1.3': + resolution: {integrity: sha512-1nc+vjEOQkJVsJtWPSiISGT6OKm4SiOdjMo+/icLxo2G4vxz1GntC5MzfL4v8ey9OEfw787QCD1y3mUv0NiFEQ==} peerDependencies: '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true + '@types/react-dom': + optional: true - '@radix-ui/react-use-layout-effect@1.1.0': - resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==} + '@radix-ui/react-tabs@1.1.1': + resolution: {integrity: sha512-3GBUDmP2DvzmtYLMsHmpA1GtR46ZDZ+OreXM/N+kkQJOPIgytFWWTfDQmBQKBvaFS0Vno0FktdbVzN28KGrMdw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-toast@1.2.6': + resolution: {integrity: sha512-gN4dpuIVKEgpLn1z5FhzT9mYRUitbfZq9XqN/7kkBMUgFTzTG8x/KszWJugJXHcwxckY8xcKDZPz7kG3o6DsUA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-toggle-group@1.1.2': + resolution: {integrity: sha512-JBm6s6aVG/nwuY5eadhU2zDi/IwYS0sDM5ZWb4nymv/hn3hZdkw+gENn0LP4iY1yCd7+bgJaCwueMYJIU3vk4A==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-toggle@1.1.2': + resolution: {integrity: sha512-lntKchNWx3aCHuWKiDY+8WudiegQvBpDRAYL8dKLRvKEH8VOpl0XX6SSU/bUBqIRJbcTy4+MW06Wv8vgp10rzQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-toolbar@1.1.2': + resolution: {integrity: sha512-wT20eQ7ScFk+kBMDmHp+lMk18cgxhu35b2Bn5deUcPxiVwfn5vuZgi7NGcHu8ocdkinahmp4FaSZysKDyRVPWQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-tooltip@1.1.6': + resolution: {integrity: sha512-TLB5D8QLExS1uDn7+wH/bjEmRurNMTzNrtq7IjaS4kjion9NtzsTGkvR5+i7yc9q01Pi2KMM2cN3f8UG4IvvXA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-use-callback-ref@1.0.1': + resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-callback-ref@1.1.0': + resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-controllable-state@1.0.1': + resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-controllable-state@1.1.0': + resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-escape-keydown@1.0.3': + resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-escape-keydown@1.1.0': + resolution: {integrity: sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-layout-effect@1.0.1': + resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-layout-effect@1.1.0': + resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc @@ -1978,6 +2683,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-previous@1.0.1': + resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-previous@1.1.0': resolution: {integrity: sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==} peerDependencies: @@ -1987,6 +2701,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-rect@1.0.1': + resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-rect@1.1.0': resolution: {integrity: sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==} peerDependencies: @@ -1996,6 +2719,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-size@1.0.1': + resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-size@1.1.0': resolution: {integrity: sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==} peerDependencies: @@ -2005,6 +2737,19 @@ packages: '@types/react': optional: true + '@radix-ui/react-visually-hidden@1.0.3': + resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-visually-hidden@1.1.1': resolution: {integrity: sha512-vVfA2IZ9q/J+gEamvj761Oq1FpWgCDaNOOIfbPVp2MVPLEomUr5+Vf7kJGwQ24YxZSlQVar7Bes8kyTo5Dshpg==} peerDependencies: @@ -2018,6 +2763,22 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-visually-hidden@1.1.2': + resolution: {integrity: sha512-1SzA4ns2M1aRlvxErqhLHsBHoS5eI5UUcI2awAMgGUp4LoaoWOKYmvqDY2s/tltuPkh3Yk77YF/r3IRj+Amx4Q==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/rect@1.0.1': + resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} + '@radix-ui/rect@1.1.0': resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==} @@ -2355,6 +3116,9 @@ packages: resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} engines: {node: '>=18'} + '@standard-schema/spec@1.0.0': + resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + '@storybook/addon-actions@8.4.6': resolution: {integrity: sha512-vbplwjMj7UXbdzoFhQkqFHLQAPJX8OVGTM9Q+yjuWDHViaKKUlgRWp0jclT7aIDNJQU2a6wJbTimHgJeF16Vhg==} peerDependencies: @@ -2607,6 +3371,11 @@ packages: '@swc/helpers@0.5.9': resolution: {integrity: sha512-XI76sLwMJoLjJTOK5RblBZkouOJG3X3hjxLCzLnyN1ifAiKQc6Hck3uvnU4Z/dV/Dyk36Ffj8FLvDLV2oWvKTw==} + '@tailwindcss/container-queries@0.1.1': + resolution: {integrity: sha512-p18dswChx6WnTSaJCSGx6lTmrGzNNvm2FtXmiO6AuA1V4U5REyoqwmT6kgAsIMdjo07QdAfYXHJ4hnMtfHzWgA==} + peerDependencies: + tailwindcss: '>=3.2.0' + '@tailwindcss/forms@0.5.7': resolution: {integrity: sha512-QE7X69iQI+ZXwldE+rzasvbJiyV/ju1FGHH0Qn2W3FKbuYtqp8LKcy6iSw79fVUT5/Vvf+0XgLCeYVG+UV6hOw==} peerDependencies: @@ -2695,6 +3464,9 @@ packages: '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/glob@7.2.0': + resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + '@types/hast@2.3.10': resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} @@ -2704,11 +3476,8 @@ packages: '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - '@types/lodash-es@4.17.12': - resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} - - '@types/lodash@4.17.0': - resolution: {integrity: sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==} + '@types/less@3.0.8': + resolution: {integrity: sha512-Gjm4+H9noDJgu5EdT3rUw5MhPBag46fiOy27BefvWkNL8mlZnKnCaVVVTLKj6RYXed9b62CPKnPav9govyQDzA==} '@types/mdast@3.0.15': resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} @@ -2716,6 +3485,9 @@ packages: '@types/mdx@2.0.11': resolution: {integrity: sha512-HM5bwOaIQJIQbAYfax35HCKxx7a3KrK3nBtIqJgSOitivTD1y3oW9P3rxY9RkXYPUk7y/AjAohfHKmFpGE79zw==} + '@types/minimatch@5.1.2': + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} + '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} @@ -2743,12 +3515,19 @@ packages: '@types/resolve@1.20.6': resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==} + '@types/sass@1.45.0': + resolution: {integrity: sha512-jn7qwGFmJHwUSphV8zZneO3GmtlgLsmhs/LQyVvQbIIa+fzGMUiHI4HXJZL3FT8MJmgXWbLGiVVY7ElvHq6vDA==} + deprecated: This is a stub types definition. sass provides its own type definitions, so you do not need this installed. + '@types/scheduler@0.16.8': resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} '@types/semver@7.5.8': resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + '@types/stylus@0.48.43': + resolution: {integrity: sha512-72dv/zdhuyXWVHUXG2VTPEQdOG+oen95/DNFx2aMFFaY6LoITI6PwEqf5x31JF49kp2w9hvUzkNfTGBIeg61LQ==} + '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} @@ -2955,6 +3734,18 @@ packages: '@webassemblyjs/wast-printer@1.14.1': resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} + '@xstate/react@3.2.2': + resolution: {integrity: sha512-feghXWLedyq8JeL13yda3XnHPZKwYDN5HPBLykpLeuNpr9178tQd2/3d0NrH6gSd0sG5mLuLeuD+ck830fgzLQ==} + peerDependencies: + '@xstate/fsm': ^2.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + xstate: ^4.37.2 + peerDependenciesMeta: + '@xstate/fsm': + optional: true + xstate: + optional: true + '@xtuc/ieee754@1.2.0': resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} @@ -2968,6 +3759,10 @@ packages: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} + abstract-level@1.0.4: + resolution: {integrity: sha512-eUP/6pbXBkMbXFdx4IH2fVgvB7M0JvR7/lIL33zcs0IBcwjdzSSl31TOJsaCzmKSSDF9h8QYSOJux4Nd4YJqFg==} + engines: {node: '>=12'} + accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} @@ -3012,6 +3807,9 @@ packages: ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + alea@1.0.1: + resolution: {integrity: sha512-QU+wv+ziDXaMxRdsQg/aH7sVfWdhKps5YP97IIwFkHCsbDZA3k87JXoZ5/iuemf4ntytzIWeScrRpae8+lDrXA==} + ansi-escapes@6.2.0: resolution: {integrity: sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==} engines: {node: '>=14.16'} @@ -3115,6 +3913,9 @@ packages: resolution: {integrity: sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==} engines: {node: '>=12'} + assert@2.1.0: + resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} + assertion-error@1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} @@ -3151,6 +3952,9 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} + b4a@1.6.7: + resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} + babel-dead-code-elimination@1.0.9: resolution: {integrity: sha512-JLIhax/xullfInZjtu13UJjaLHDeTzt3vOeomaSUdO/nAMEL/pWC/laKrSvWylXMnVWyL5bpmG9njqBZlUQOdg==} @@ -3175,6 +3979,12 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + bare-events@2.5.4: + resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==} + + base-x@3.0.11: + resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==} + base-x@4.0.0: resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==} @@ -3189,13 +3999,26 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} + bip39@3.1.0: + resolution: {integrity: sha512-c9kiwdk45Do5GL0vJMe7tS95VjCii65mYAH7DfWl3uW8AVzXKQVUm64i3hzVybBDMp9r7j9iNxR85+ul8MdN/A==} + bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + blake2b-wasm@2.4.0: + resolution: {integrity: sha512-S1kwmW2ZhZFFFOghcx73+ZajEfKBqhP82JMssxtLVMxlaPea1p9uoLiUZ5WYyHn0KddwbLc+0vh4wR0KBNoT5w==} + + blake2b@2.1.4: + resolution: {integrity: sha512-AyBuuJNI64gIvwx13qiICz6H6hpmjvYS5DGkG6jbXMOT8Z3WUJ3V1X0FlhIoT1b/5JtHE3ki+xjtMvu1nn+t9A==} + body-parser@1.20.2: resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + boolean@3.2.0: + resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -3209,6 +4032,9 @@ packages: browser-assert@1.2.1: resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==} + browser-level@1.0.1: + resolution: {integrity: sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==} + browserify-zlib@0.1.4: resolution: {integrity: sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==} @@ -3228,12 +4054,27 @@ packages: bs58check@3.0.1: resolution: {integrity: sha512-hjuuJvoWEybo7Hn/0xOrczQKKEKD63WguEjlhLExYs2wUBcebDC1jDNK17eEAD2lYfw82d5ASC1d7K3SWszjaQ==} + buffer-alloc-unsafe@1.1.0: + resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==} + + buffer-alloc@1.2.0: + resolution: {integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==} + + buffer-fill@1.0.0: + resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==} + + buffer-from@0.1.2: + resolution: {integrity: sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==} + buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + builtin-modules@3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} @@ -3253,10 +4094,22 @@ packages: resolution: {integrity: sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + call-bind@1.0.7: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -3275,6 +4128,10 @@ packages: caniuse-lite@1.0.30001680: resolution: {integrity: sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==} + catering@2.1.1: + resolution: {integrity: sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==} + engines: {node: '>=6'} + cbor-extract@2.2.0: resolution: {integrity: sha512-Ig1zM66BjLfTXpNgKpvBePq271BPOvu8MR0Jl080yG7Jsl+wAZunfrwiwA+9ruzm/WEdIV5QF/bjDZTqyAIVHA==} hasBin: true @@ -3285,8 +4142,8 @@ packages: ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - cd@0.3.3: - resolution: {integrity: sha512-X2y0Ssu48ucdkrNgCdg6k3EZWjWVy/dsEywUUTeZEIW31f3bQfq65Svm+TzU1Hz+qqhdmyCdjGhUvRsSKHl/mw==} + chacha20-universal@1.0.4: + resolution: {integrity: sha512-/IOxdWWNa7nRabfe7+oF+jVkGjlr2xUL4J8l/OvzZhj+c9RpMqoo3Dq+5nU1j/BflRV4BKnaQ4+4oH1yBpQG1Q==} chai@4.4.1: resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} @@ -3357,6 +4214,10 @@ packages: class-variance-authority@0.7.0: resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==} + classic-level@1.4.1: + resolution: {integrity: sha512-qGx/KJl3bvtOHrGau2WklEZuXhS3zme+jf+fsu6Ej7W7IP/C49v7KNlWIsT1jZu0YnfzSIYDGcEWpCa1wKGWXQ==} + engines: {node: '>=12'} + clean-regexp@1.0.0: resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} engines: {node: '>=4'} @@ -3402,6 +4263,9 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + colorjs.io@0.5.2: + resolution: {integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==} + comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} @@ -3422,6 +4286,13 @@ packages: compare-versions@6.1.0: resolution: {integrity: sha512-LNZQXhqUvqUTotpZ00qLSaify3b4VFD588aRr8MKFw4CMUr98ytzCW5wDH5qx/DEY5kCDXcbcRuCqL0szEf2tg==} + component-emitter@2.0.0: + resolution: {integrity: sha512-4m5s3Me2xxlVKG9PkZpQqHQR7bgpnN7joDMJ4yvVkVXngjoITG76IaZmzmywSeRTeTpc6N6r3H3+KyUurV8OYw==} + engines: {node: '>=18'} + + compress-json@2.1.3: + resolution: {integrity: sha512-/1tz8lN/SZmSIwqhPhSnv6CuQ2GA0ENOGnJ/3NWuOPmA0ltI4VS3NwGW72SiY0sKJIOfcyUINuZlhymE47RhuA==} + concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -3467,10 +4338,6 @@ packages: core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - cors@2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} - engines: {node: '>= 0.10'} - cosmiconfig@8.3.6: resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} @@ -3480,6 +4347,11 @@ packages: typescript: optional: true + crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} @@ -3534,6 +4406,9 @@ packages: resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} engines: {node: '>= 0.4'} + date-fns@3.6.0: + resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==} + debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -3580,6 +4455,10 @@ packages: decode-named-character-reference@1.0.2: resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + dedent@1.5.3: resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} peerDependencies: @@ -3596,6 +4475,10 @@ packages: resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} engines: {node: '>=6'} + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -3625,6 +4508,10 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} + del@5.1.0: + resolution: {integrity: sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==} + engines: {node: '>=8'} + depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} @@ -3637,6 +4524,11 @@ packages: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + detect-libc@2.0.2: resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} engines: {node: '>=8'} @@ -3687,6 +4579,10 @@ packages: resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} engines: {node: '>=12'} + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + duplexify@3.7.1: resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==} @@ -3696,8 +4592,8 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - effect@3.5.7: - resolution: {integrity: sha512-PzEncc0R3ZZhqNTR+fXrSX+anF/4Ai6ftKie1ZrUUWY7WPE7d4KjB6wjpeWoGMOC7xWFPGSkBBUudyJN1mx3+g==} + effect@3.13.10: + resolution: {integrity: sha512-f2n51BJJ25G9rb/C1ClkgsVFXH6YTkCHmd6ebpu6cAkwQxfhnfbkVWKgkn3nyW9YnC9z4K8bGohRYaZ+HyWtLg==} ejs@3.1.10: resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} @@ -3710,6 +4606,13 @@ packages: electron-to-chromium@1.5.55: resolution: {integrity: sha512-6maZ2ASDOTBtjt9FhqYPRnbvKU5tjG0IN9SztUOWYw2AzNDNpKJYLJmlK0/En4Hs/aiWnB+JZ+gW19PIGszgKg==} + emittery@0.6.0: + resolution: {integrity: sha512-6EMRGr9KzYWp8DzHFZsKVZBsMO6QhAeHMeHND8rhyBNCHKMLpgW9tZv40bwN3rAIKRS5CxcK8oLRKUJSB9h7yQ==} + engines: {node: '>=10'} + + emoji-mart@5.6.0: + resolution: {integrity: sha512-eJp3QRe79pjwa+duv+n7+5YsNhRcMl812EcFVwrnRvYKoNPoQb5qxU8DG6Bgwji0akHdp6D4Ln6tYLG58MFSow==} + emoji-regex@10.3.0: resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} @@ -3767,6 +4670,10 @@ packages: resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} engines: {node: '>= 0.4'} + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + es-errors@1.3.0: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} @@ -3782,6 +4689,10 @@ packages: resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} engines: {node: '>= 0.4'} + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + es-set-tostringtag@2.0.3: resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} engines: {node: '>= 0.4'} @@ -3804,6 +4715,9 @@ packages: peerDependencies: esbuild: ^0.20.1 + esbuild-style-plugin@1.6.3: + resolution: {integrity: sha512-XPEKf4FjLjEVLv/dJH4UxDzXCrFHYpD93DBO8B+izdZARW5b7nNKQbnKv3J+7VDWJbgCU+hzfgIh2AuIZzlmXQ==} + esbuild@0.20.1: resolution: {integrity: sha512-OJwEgrpWm/PCMsLVWXKqvcjme3bHNpOgN7Tb6cQnR5n0TPbQx1/Xrn7rqM+wn17bYeT6MGB5sn1Bh5YiGi70nA==} engines: {node: '>=12'} @@ -4133,6 +5047,10 @@ packages: resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==} engines: {node: '>=6'} + expand-template@2.0.3: + resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} + engines: {node: '>=6'} + express@4.18.3: resolution: {integrity: sha512-6VyCijWQ+9O7WuVMTRBTl+cjNNIzD5cY5mQ1WM8r/LEkI2u8EYpOotESNwzNlyCn3g+dmjKYI6BmNneSr/FSRw==} engines: {node: '>= 0.10.0'} @@ -4140,8 +5058,8 @@ packages: extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - fast-check@3.20.0: - resolution: {integrity: sha512-pZIjqLpOZgdSLecec4GKC3Zq5702MZ34upMKxojnNVSWA0K64V3pXOBT1Wdsrc3AphLtzRBbsi8bRWF4TUGmUg==} + fast-check@3.23.2: + resolution: {integrity: sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==} engines: {node: '>=8.0.0'} fast-deep-equal@3.1.3: @@ -4150,6 +5068,9 @@ packages: fast-diff@1.3.0: resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + fast-glob@3.3.2: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} @@ -4198,6 +5119,10 @@ packages: resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==} engines: {node: '>=18'} + find-up@3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} + find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -4242,6 +5167,10 @@ packages: fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + fs-ext@2.1.1: + resolution: {integrity: sha512-/TrISPOFhCkbgIRWK9lzscRzwPCu0PqtCcvMc9jsHKBgZGoqA0VzhspVht5Zu8lxaXjIYIBWILHpRotYkCCcQA==} + engines: {node: '>= 8.0.0'} + fs-extra@10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} @@ -4303,6 +5232,10 @@ packages: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + get-nonce@1.0.1: resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} engines: {node: '>=6'} @@ -4314,6 +5247,10 @@ packages: resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} engines: {node: '>=8'} + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + get-set-props@0.1.0: resolution: {integrity: sha512-7oKuKzAGKj0ag+eWZwcGw2fjiZ78tXnXQoBgY0aU7ZOxTu4bB7hSuQSDgtKy978EDH062P5FmD2EWiDpQS9K9Q==} engines: {node: '>=0.10.0'} @@ -4337,6 +5274,9 @@ packages: get-tsconfig@4.7.3: resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==} + github-from-package@0.0.0: + resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -4372,6 +5312,10 @@ packages: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} + globby@10.0.2: + resolution: {integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==} + engines: {node: '>=8'} + globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -4386,6 +5330,10 @@ packages: gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -4418,6 +5366,10 @@ packages: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + has-tostringtag@1.0.2: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} @@ -4439,6 +5391,9 @@ packages: resolution: {integrity: sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + html-parse-stringify@3.0.1: + resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==} + http-errors@2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} @@ -4451,6 +5406,12 @@ packages: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} + hypercore-crypto@2.3.2: + resolution: {integrity: sha512-GzHgVOfr5utdiJG5QNcQZ0oo+/YQNbekpg429x00YpUobBraX2qEL3E+iH/EFEIdCQSiGHfToWyYw+OpznSjww==} + + i18next@21.10.0: + resolution: {integrity: sha512-YeuIBmFsGjUfO3qBmMOc0rQaun4mIpGKET5WDwvu8lU7gvwpcariZLNtL0Fzj+zazcHUrlXHiptcFhBMFaxzfg==} + iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -4471,6 +5432,12 @@ packages: resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} + immediate@3.0.6: + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + + immutable@5.0.3: + resolution: {integrity: sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==} + import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} @@ -4496,6 +5463,9 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + inline-style-parser@0.1.1: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} @@ -4641,6 +5611,10 @@ packages: is-module@1.0.0: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + is-nan@1.3.2: + resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} + engines: {node: '>= 0.4'} + is-negated-glob@1.0.0: resolution: {integrity: sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==} engines: {node: '>=0.10.0'} @@ -4664,6 +5638,13 @@ packages: resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} engines: {node: '>=0.10.0'} + is-options@1.0.2: + resolution: {integrity: sha512-u+Ai74c8Q74aS8BuHwPdI1jptGOT1FQXgCq8/zv0xRuE+wRgSMEJLj8lVO8Zp9BeGb29BXY6AsNPinfqjkr7Fg==} + + is-path-cwd@2.2.0: + resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} + engines: {node: '>=6'} + is-path-inside@3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} @@ -4863,6 +5844,10 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + json-stable-stringify@1.2.1: + resolution: {integrity: sha512-Lp6HbbBgosLmJbjx0pBLbgvx68FaFU1sdkmBuckmhhJ88kL13OA51CDtR2yJB50eCNMH9wRqtQNNiAqQH4YXnA==} + engines: {node: '>= 0.4'} + json5@1.0.2: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} hasBin: true @@ -4878,6 +5863,9 @@ packages: jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonify@0.0.1: + resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} + jsonpointer@5.0.1: resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} engines: {node: '>=0.10.0'} @@ -4886,6 +5874,13 @@ packages: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} + jwt-decode@4.0.0: + resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==} + engines: {node: '>=18'} + + keyborg@2.6.0: + resolution: {integrity: sha512-o5kvLbuTF+o326CMVYpjlaykxqYP9DphFQZ2ZpgrvBouyvOxyEB7oqe8nOLFpiV5VCtz0D3pt8gXQYWpLpBnmA==} + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -4896,6 +5891,21 @@ packages: kolorist@1.8.0: resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + layerr@3.0.0: + resolution: {integrity: sha512-tv754Ki2dXpPVApOrjTyRo4/QegVb9eVFq4mjqp4+NM5NaX7syQvN5BBNfV/ZpAHCEHV24XdUVrBAoka4jt3pA==} + + level-supports@4.0.1: + resolution: {integrity: sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==} + engines: {node: '>=12'} + + level-transcoder@1.0.1: + resolution: {integrity: sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==} + engines: {node: '>=12'} + + level@8.0.1: + resolution: {integrity: sha512-oPBGkheysuw7DmzFQYyFe8NAia5jFLAgEnkgWnK3OXAuJr8qFT+xBQIwokAZPME2bhPFzS8hlYcL16m8UZrtwQ==} + engines: {node: '>=12'} + leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} @@ -4904,11 +5914,8 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - libsodium-sumo@0.7.13: - resolution: {integrity: sha512-zTGdLu4b9zSNLfovImpBCbdAA4xkpkZbMnSQjP8HShyOutnGjRHmSOKlsylh1okao6QhLiz7nG98EGn+04cZjQ==} - - libsodium-wrappers-sumo@0.7.13: - resolution: {integrity: sha512-lz4YdplzDRh6AhnLGF2Dj2IUj94xRN6Bh8T0HLNwzYGwPehQJX6c7iYVrFUPZ3QqxE0bqC+K0IIqqZJYWumwSQ==} + lie@3.1.1: + resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==} lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} @@ -4941,6 +5948,13 @@ packages: resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} engines: {node: '>=14'} + localforage@1.10.0: + resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==} + + locate-path@3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} + locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -4962,9 +5976,30 @@ packages: lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + lodash.defaultsdeep@4.6.1: + resolution: {integrity: sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==} + + lodash.get@4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + deprecated: This package is deprecated. Use the optional chaining (?.) operator instead. + + lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead. + + lodash.isequalwith@4.4.0: + resolution: {integrity: sha512-dcZON0IalGBpRmJBmMkaoV7d3I80R2O+FrzsZyHdNSFrANq/cgDqKQNmAHE8UEj4+QYWwwhkQOVdLHiAopzlsQ==} + + lodash.ismatch@4.4.0: + resolution: {integrity: sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==} + lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + lodash.omit@4.5.0: + resolution: {integrity: sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg==} + deprecated: This package is deprecated. Use destructuring assignment syntax instead. + lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} @@ -4979,6 +6014,9 @@ packages: resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} engines: {node: '>=18'} + long@5.3.1: + resolution: {integrity: sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng==} + longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} @@ -5039,6 +6077,10 @@ packages: resolution: {integrity: sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==} engines: {node: '>=0.10.0'} + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + mdast-util-definitions@5.1.2: resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} @@ -5222,6 +6264,10 @@ packages: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} @@ -5297,6 +6343,10 @@ packages: modern-ahocorasick@1.0.1: resolution: {integrity: sha512-yoe+JbhTClckZ67b2itRtistFKf8yPYelHLc7e5xAwtNAXxM6wJTUx2C7QeVSJFDzKT7bCIFyBVybPMKvmB9AA==} + module-error@1.0.2: + resolution: {integrity: sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==} + engines: {node: '>=10'} + mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -5314,21 +6364,46 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - msgpackr-extract@3.0.2: - resolution: {integrity: sha512-SdzXp4kD/Qf8agZ9+iTu6eql0m3kWm1A2y1hkpTeVNENutaB0BwHlSvAIaMxwntmRUAUjon2V4L8Z/njd0Ct8A==} - hasBin: true - - msgpackr@1.10.1: - resolution: {integrity: sha512-r5VRLv9qouXuLiIBrLpl2d5ZvPt8svdQTl5/vMvE4nzDMyEX4sgW5yWhuBBj5UmgwOTWj8CIdSXn5sAfsHAWIQ==} - mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + nan@2.22.2: + resolution: {integrity: sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==} + + nanoassert@2.0.0: + resolution: {integrity: sha512-7vO7n28+aYO4J+8w96AzhmU8G+Y/xpPDJz/se19ICsqj/momRbb9mh9ZUtkoJ5X3nTnPdhEJyc0qnM6yAsHBaA==} + + nanocustomassert@1.0.0: + resolution: {integrity: sha512-oIezVMlrrzPkCtK32NM5y4gU7JPi12NPWrIsXLyH7KL2D3IFYCtNEHSNgabBzoXCMkXI8AO6SMBUSPvJVf6NCA==} + + nanoerror@1.3.4: + resolution: {integrity: sha512-X6APJZ1MCZP+NRjfTv4VWaXZOpVU3qa/PPNGesa7vh2Ovx/bXNQbUzkDaN7d9RaHcrEdX0zxUFBQPuhvIpNxVQ==} + nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + nanoid@3.3.9: + resolution: {integrity: sha512-SppoicMGpZvbF1l3z4x7No3OlIjP7QJvC9XR7AhZr1kL133KHnKPztkKDc+Ir4aJ/1VhTySrtKhrsycmrMQfvg==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + nanomessage-rpc@3.2.0: + resolution: {integrity: sha512-CRY3GzkiXa5th7gSTM45v4EZKIVg8XTbhE30PFFbzloTgiPCYBbywkpHGZ+48H/nb2H9gXhbBGDRXbn2hxjH4w==} + + nanomessage@8.4.0: + resolution: {integrity: sha512-jLRsKfedD0AwDDPpwoRvxSfx/G9i51peX09/SvrybSD801Y3YmwuXWkxHSS9bNFucqmjo+7/b/Rx5Lngozq3nw==} + + nanoresource-promise@2.0.0: + resolution: {integrity: sha512-C4nHaVqhpRYaSiKfXPC3bOiz5mnS3N1gkDhGaWmYLxr4KTAQdWqOr2pEVw4xVmAHJgA9n9anbfuVOacS/skbIA==} + + napi-build-utils@2.0.0: + resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} + + napi-macros@2.2.2: + resolution: {integrity: sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==} + natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -5339,20 +6414,38 @@ packages: neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + next-tick@1.1.0: + resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} + nice-try@1.0.5: resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - node-gyp-build-optional-packages@5.0.7: - resolution: {integrity: sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w==} - hasBin: true + node-abi@3.74.0: + resolution: {integrity: sha512-c5XK0MjkGBrQPGYG24GBADZud0NCbznxNx0ZkS+ebUTrmV1qTDxPxSL8zEAPURXSbLRWVexxmP4986BziahL5w==} + engines: {node: '>=10'} + + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + + node-datachannel@0.9.2: + resolution: {integrity: sha512-sknq4EAJcSNHUMiK6Gru3vtwo8QICiFs5xJyaitJy/ZLSUbikaGrDORpIpdGp8++4AYQOYC5vr9VyA6i01KeJQ==} + engines: {node: '>=16.0.0'} + + node-domexception@2.0.1: + resolution: {integrity: sha512-M85rnSC7WQ7wnfQTARPT4LrK7nwCHLdDFOCcItZMhTQjyCebJH8GciKqYJNgaOFZs9nFmTmd/VMyi3OW5jA47w==} + engines: {node: '>=16'} node-gyp-build-optional-packages@5.1.1: resolution: {integrity: sha512-+P72GAjVAbTxjjwUmwjVrqrdZROD4nf8KgpBoDxqXXTiYZZt/ud60dE5yvCSr9lRO8e8yv6kgJIC0K0PfZFVQw==} hasBin: true + node-gyp-build@4.8.4: + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} + hasBin: true + node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} @@ -5418,6 +6511,10 @@ packages: object-inspect@1.13.1: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + object-is@1.1.6: + resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} + engines: {node: '>= 0.4'} + object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} @@ -5478,6 +6575,10 @@ packages: outdent@0.8.0: resolution: {integrity: sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==} + p-defer@3.0.0: + resolution: {integrity: sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==} + engines: {node: '>=8'} + p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -5494,6 +6595,10 @@ packages: resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} engines: {node: '>=18'} + p-locate@3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} + p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -5506,6 +6611,10 @@ packages: resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-map@3.0.0: + resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} + engines: {node: '>=8'} + p-map@4.0.0: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} @@ -5540,6 +6649,13 @@ packages: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + + path-exists@3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -5630,6 +6746,10 @@ packages: resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} engines: {node: '>=4'} + pify@5.0.0: + resolution: {integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==} + engines: {node: '>=10'} + pirates@4.0.6: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} @@ -5645,6 +6765,13 @@ packages: pkg-types@1.0.3: resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} + pkg-up@3.1.0: + resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} + engines: {node: '>=8'} + + platform@1.3.6: + resolution: {integrity: sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==} + playwright-core@1.49.1: resolution: {integrity: sha512-BzmpVcs4kE2CH15rWfzpjzVGhWERJfmnXmniSyKeRZUs9Ws65m+RGIi7mjJK/euCegfn3i7jvqWeWyHe9y3Vgg==} engines: {node: '>=18'} @@ -5677,6 +6804,12 @@ packages: peerDependencies: postcss: ^8.2.15 + postcss-import@14.1.0: + resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==} + engines: {node: '>=10.0.0'} + peerDependencies: + postcss: ^8.0.0 + postcss-import@15.1.0: resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} engines: {node: '>=14.0.0'} @@ -5689,6 +6822,18 @@ packages: peerDependencies: postcss: ^8.4.21 + postcss-load-config@3.1.4: + resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} + engines: {node: '>= 10'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + postcss-load-config@4.0.2: resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} engines: {node: '>= 14'} @@ -5730,6 +6875,12 @@ packages: peerDependencies: postcss: ^8.0.0 + postcss-nested@6.0.0: + resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + postcss-nested@6.0.1: resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} engines: {node: '>=12.0'} @@ -5747,6 +6898,18 @@ packages: resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.3: + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} + engines: {node: ^10 || ^12 || >=14} + + preact@10.26.4: + resolution: {integrity: sha512-KJhO7LBFTjP71d83trW+Ilnjbo+ySsaAgCfXOXUlmGzJ4ygYPWmysm77yg4emwfmoz3b22yvH5IsVFHbhUaH5w==} + + prebuild-install@7.1.3: + resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} + engines: {node: '>=10'} + hasBin: true + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -5870,6 +7033,10 @@ packages: resolution: {integrity: sha512-2yma2tog9VaRZY2mn3Wq51uiSW4NcPYT1cQdBagwyrznrilKSZwIZ0UG3ZPL/mx+axEns0hE35T5ufOYZXEnBQ==} engines: {node: '>=4'} + protobufjs@7.4.0: + resolution: {integrity: sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==} + engines: {node: '>=12.0.0'} + proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -5893,6 +7060,9 @@ packages: qr.js@0.0.0: resolution: {integrity: sha512-c4iYnWb+k2E+vYpRimHqSu575b1/wKl4XFeJGpFmrJQz5I88v9aY2czh7s0w36srfCM1sXgC/xpoJz5dJfq+OQ==} + qrcode-generator@1.4.4: + resolution: {integrity: sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw==} + qs@6.11.0: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} engines: {node: '>=0.6'} @@ -5900,6 +7070,28 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + queue-tick@1.0.1: + resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} + + quick-format-unescaped@3.0.3: + resolution: {integrity: sha512-dy1yjycmn9blucmJLXOfZDx1ikZJUi6E8bBZLnhPG5gBrVhHXx2xVyqqgKBubVNEXmx51dBACMHpoMQK/N/AXQ==} + + quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + + race-as-promised@0.0.2: + resolution: {integrity: sha512-7BLWiZMSVJDxMTT/QUuEEdd/f/pYDkusGvU0p3NUCDAc6HSlhPpvRS42/GmK79p3Kw4aDA+l+sD8wNpxQdOYTQ==} + + random-access-file@2.2.1: + resolution: {integrity: sha512-RGU0xmDqdOyEiynob1KYSeh8+9c9Td1MJ74GT1viMEYAn8SJ9oBtWCXLsYZukCF46yududHOdM449uRYbzBrZQ==} + + random-access-memory@4.1.0: + resolution: {integrity: sha512-vVt75UQpWcaZWlysSmk7isqdhiV10WCovxuKZmBKg5zSsiEXIclJmAlIsMr8usYqfFmXzOGIonWOAyR5u3jhXQ==} + + random-access-storage@1.4.3: + resolution: {integrity: sha512-D5e2iIC5dNENWyBxsjhEnNOMCwZZ64TARK6dyMN+3g4OTC4MJxyjh9hKLjTGoNhDOPrgjI+YlFEHFnrp/cSnzQ==} + randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} @@ -5911,6 +7103,16 @@ packages: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + + rci@0.1.0: + resolution: {integrity: sha512-o/elFrXXRLdYDAq/qQUFE175TqzJ5nU3MYwIwa6WOZfljNJ4akQSy1n7zA79swB696MNIFDWJs+Do0q2FBTy+Q==} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' + react-docgen-typescript@2.2.2: resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==} peerDependencies: @@ -5925,6 +7127,11 @@ packages: peerDependencies: react: ^18.2.0 + react-error-boundary@4.1.2: + resolution: {integrity: sha512-GQDxZ5Jd+Aq/qUxbCm1UtzmL/s++V7zKgE8yMktJiCQXCCFZnMZh9ng+6/Ne6PjNSXH0L9CjeOEREfRnq6Duag==} + peerDependencies: + react: '>=16.13.1' + react-hook-form@7.51.3: resolution: {integrity: sha512-cvJ/wbHdhYx8aviSWh28w9ImjmVsb5Y05n1+FW786vEZQJV5STNM0pW6ujS+oiBecb0ARBxJFyAnXj9+GHXACQ==} engines: {node: '>=12.22.0'} @@ -5937,6 +7144,19 @@ packages: react: '>=16.8.1' react-dom: '>=16.8.1' + react-i18next@11.18.6: + resolution: {integrity: sha512-yHb2F9BiT0lqoQDt8loZ5gWP331GwctHz9tYQ8A2EIEUu+CcEdjBLQWli1USG3RdWQt3W+jqQLg/d4rrQR96LA==} + peerDependencies: + i18next: '>= 19.0.0' + react: '>= 16.8.0' + react-dom: '*' + react-native: '*' + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + react-inspector@6.0.2: resolution: {integrity: sha512-x+b7LxhmHXjHoU/VrFAzw5iutsILRoYyDq97EDYdFpPLcvqtEzk4ZSZSQjnFPbr5T57tLXnHcqFYoN1pI6u8uQ==} peerDependencies: @@ -5966,6 +7186,11 @@ packages: react-native-svg: optional: true + react-qr-rounded@1.0.0: + resolution: {integrity: sha512-6ZW/yUwXXqdFzFu1zVyR2fZy2vyfX2ymFDEQEd2fjZqgC01voQlDfZzC5UmGur95kOfW7wh0gNUPKANeicM9hw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-refresh@0.14.0: resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} engines: {node: '>=0.10.0'} @@ -6010,6 +7235,16 @@ packages: '@types/react': optional: true + react-remove-scroll@2.6.3: + resolution: {integrity: sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + react-router-dom@6.22.3: resolution: {integrity: sha512-7ZILI7HjcE+p31oQvwbokjk6OA/bnFxrhJ19n82Ex9Ph8fNAq+Hm/7KchpMGlTgWhUxRHMMCut+vEtNpWpowKw==} engines: {node: '>=14.0.0'} @@ -6059,11 +7294,6 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-usestateref@1.0.8: - resolution: {integrity: sha512-whaE6H0XGarFKwZ3EYbpHBsRRCLZqdochzg/C7e+b6VFMTA3LS3K4ZfpI4NT40iy83jG89rGXrw70P9iDfOdsA==} - peerDependencies: - react: '>16.0.0' - react@18.2.0: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} @@ -6214,11 +7444,6 @@ packages: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true - rimraf@5.0.5: - resolution: {integrity: sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==} - engines: {node: '>=14'} - hasBin: true - rollup-plugin-terser@7.0.2: resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser @@ -6235,6 +7460,12 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rtl-css-js@1.16.1: + resolution: {integrity: sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==} + + run-parallel-limit@1.1.0: + resolution: {integrity: sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -6259,6 +7490,11 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + sass@1.85.1: + resolution: {integrity: sha512-Uk8WpxM5v+0cMR0XjX9KfRIacmSG86RH4DCCZjLU2rFh5tyutt9siAXJ7G+YfxQ99Q6wrRMbMlVl6KqUms71ag==} + engines: {node: '>=14.0.0'} + hasBin: true + scheduler@0.23.0: resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} @@ -6272,6 +7508,9 @@ packages: seed-random@2.2.0: resolution: {integrity: sha512-34EQV6AAHQGhoc0tn/96a9Fsi6v2xdqe/dMUwljGRaFOzR3EgRmECvD0O8vi8X+/uQ50LGHfkNu/Eue5TPKZkQ==} + seedrandom@3.0.5: + resolution: {integrity: sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==} + semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true @@ -6318,6 +7557,18 @@ packages: setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + sha256-universal@1.2.1: + resolution: {integrity: sha512-ghn3muhdn1ailCQqqceNxRgkOeZSVfSE13RQWEg6njB+itsFzGVSJv+O//2hvNXZuxVIRyNzrgsZ37SPDdGJJw==} + + sha256-wasm@2.2.2: + resolution: {integrity: sha512-qKSGARvao+JQlFiA+sjJZhJ/61gmW/3aNLblB2rsgIxDlDxsJPHo8a1seXj12oKtuHVgJSJJ7QEGBUYQN741lQ==} + + sha512-universal@1.2.1: + resolution: {integrity: sha512-kehYuigMoRkIngCv7rhgruLJNNHDnitGTBdkcYbCbooL8Cidj/bS78MDxByIjcc69M915WxcQTgZetZ1JbeQTQ==} + + sha512-wasm@2.3.4: + resolution: {integrity: sha512-akWoxJPGCB3aZCrZ+fm6VIFhJ/p8idBv7AWGFng/CZIrQo51oQNsvDbTSRXWAzIiZJvpy16oIDiCCPqTe21sKg==} + shebang-command@1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} engines: {node: '>=0.10.0'} @@ -6351,6 +7602,15 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + simple-concat@1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + + simple-get@4.0.1: + resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} + + siphash24@1.3.1: + resolution: {integrity: sha512-moemC3ZKiTzH29nbFo3Iw8fbemWWod4vNs/WgKbQ54oEs6mE6XVlguxvinYjB+UmaE0PThgyED9fUkWvirT8hA==} + slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -6362,10 +7622,23 @@ packages: snake-case@3.0.4: resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + sodium-javascript@0.8.0: + resolution: {integrity: sha512-rEBzR5mPxPES+UjyMDvKPIXy9ImF17KOJ32nJNi9uIquWpS/nfj+h6m05J5yLJaGXjgM72LmQoUbWZVxh/rmGg==} + + sodium-native@3.4.1: + resolution: {integrity: sha512-PaNN/roiFWzVVTL6OqjzYct38NSXewdl2wz8SRB51Br/MLIJPrbM3XexhVWkq7D3UWMysfrhKVf1v1phZq6MeQ==} + + sodium-universal@3.1.0: + resolution: {integrity: sha512-N2gxk68Kg2qZLSJ4h0NffEhp4BjgWHCHXVlDi1aG1hA3y+ZeWEmHqnpml8Hy47QzfL1xLy5nwr9LcsWAg2Ep0A==} + source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} @@ -6448,6 +7721,12 @@ packages: stream-slice@0.1.2: resolution: {integrity: sha512-QzQxpoacatkreL6jsxnVb7X5R/pGw9OUv2qWTYWnmLpg4NdN31snPy/f3TdQE1ZUXaThRvj1Zw4/OGg0ZkaLMA==} + stream@0.0.3: + resolution: {integrity: sha512-aMsbn7VKrl4A2T7QAQQbzgN7NVc70vgF5INQrBXqn4dCXN1zy3L9HGgLO5s7PExmdrzTJ8uR/27aviW8or8/+A==} + + streamx@2.22.0: + resolution: {integrity: sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==} + string-hash@1.1.3: resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==} @@ -6537,6 +7816,10 @@ packages: resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} engines: {node: '>=12'} + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -6550,6 +7833,9 @@ packages: style-to-object@0.4.4: resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} + stylis@4.3.6: + resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==} + sucrase@3.35.0: resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} engines: {node: '>=16 || 14 >=14.17'} @@ -6589,14 +7875,36 @@ packages: tabbable@6.2.0: resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} + tabster@8.5.1: + resolution: {integrity: sha512-lhiSbjQH1C3JIyWJdp1opMlkPp9xgvzsEU10ImzFHx3ghA1ELPPUXbU0v6Vuh/9EhHeGdq+w1cweqdM7dBB/OA==} + tailwind-merge@2.2.1: resolution: {integrity: sha512-o+2GTLkthfa5YUt4JxPfzMIpQzZ3adD1vLVkvKE1Twl9UAhGsEbIZhHHZVRttyW177S8PDJI3bTQNaebyofK3Q==} + tailwind-scrollbar@3.1.0: + resolution: {integrity: sha512-pmrtDIZeHyu2idTejfV59SbaJyvp1VRjYxAjZBH0jnyrPRo6HL1kD5Glz8VPagasqr6oAx6M05+Tuw429Z8jxg==} + engines: {node: '>=12.13.0'} + peerDependencies: + tailwindcss: 3.x + tailwindcss-animate@1.0.7: resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} peerDependencies: tailwindcss: '>=3.0.0 || insiders' + tailwindcss-logical@3.0.1: + resolution: {integrity: sha512-mv585RJfzS/Cu9Rpl2M5H+JSOdU3qjLHzKMtg63oD5lXfehRJpldbEqll20Obvlexq0Cmyg86l7cmb/I5hEutg==} + + tailwindcss-radix@2.9.0: + resolution: {integrity: sha512-N49SnciSeRgLC+VK+Fu5VULNJIvJUvN7tUKF1kEHPXrS76WAlwrSVthCbJ9NUw0Cj/ptxs73pdVEdosomAN5Lg==} + + tailwindcss@3.3.1: + resolution: {integrity: sha512-Vkiouc41d4CEq0ujXl6oiGFQ7bA3WEhUZdTgXAhtKxSy49OmKs8rEfQmupsfF0IGW8fv2iQkp1EVUuapCFrZ9g==} + engines: {node: '>=12.13.0'} + hasBin: true + peerDependencies: + postcss: ^8.0.9 + tailwindcss@3.4.3: resolution: {integrity: sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==} engines: {node: '>=14.0.0'} @@ -6653,6 +7961,9 @@ packages: engines: {node: '>=10'} hasBin: true + text-decoder@1.2.3: + resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} + text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} @@ -6672,9 +7983,6 @@ packages: tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - tiny-typed-emitter@2.1.0: - resolution: {integrity: sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==} - tinybench@2.6.0: resolution: {integrity: sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==} @@ -6773,6 +8081,9 @@ packages: tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + tunnel-agent@0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + turbo-stream@2.4.0: resolution: {integrity: sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==} @@ -6840,9 +8151,20 @@ packages: ua-parser-js@1.0.37: resolution: {integrity: sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==} + ua-parser-js@1.0.40: + resolution: {integrity: sha512-z6PJ8Lml+v3ichVojCiB8toQJBuwR42ySM4ezjXIqXK3M0HczmKQ3LF4rhU55PfD99KEEXQG6yb7iOMyvYuHew==} + hasBin: true + ufo@1.4.0: resolution: {integrity: sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==} + uint64be@3.0.0: + resolution: {integrity: sha512-mliiCSrsE29aNBI7O9W5gGv6WmA9kBR8PtTt6Apaxns076IRdYrrtFhXHEWMj5CSum3U7cv7/pi4xmi4XsIOqg==} + + ulidx@2.4.1: + resolution: {integrity: sha512-xY7c8LPyzvhvew0Fn+Ek3wBC9STZAuDI/Y5andCKi9AX6/jvfaX45PhsDX8oxgPL0YFp0Jhr8qWMbS/p9375Xg==} + engines: {node: '>=16'} + unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} @@ -6985,6 +8307,10 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + url-join@5.0.0: + resolution: {integrity: sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + url-or-path@2.3.0: resolution: {integrity: sha512-5g9xpEJKjbAY8ikLU3XFpEg3hRLGt6SbCQmDElb1AL7JTW6vMi5Na5e3dMvONHisIu9VHgMAADLHJ8EznYR2ow==} @@ -7008,6 +8334,12 @@ packages: '@types/react': optional: true + use-code-input@0.0.2: + resolution: {integrity: sha512-lDIUiRca0K8sF+c/KZ9cz5g6oPqlFiTmaDgwGzg0wlNSnFAvROtweKy0XpihEWJwo2tjETtgAxIh82RVGaBFHQ==} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' + use-composed-ref@1.3.0: resolution: {integrity: sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==} peerDependencies: @@ -7041,6 +8373,21 @@ packages: '@types/react': optional: true + use-sidecar@1.1.3: + resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + use-sync-external-store@1.4.0: + resolution: {integrity: sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + usehooks-ts@3.1.0: resolution: {integrity: sha512-bBIa7yUyPhE1BCc0GmR96VU/15l/9gP1Ch5mYdLcFBaFGQsdmXkvjV0TtOqW1yUd6VjIwDunm+flSciCQXujiw==} engines: {node: '>=16.15.0'} @@ -7057,6 +8404,10 @@ packages: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true @@ -7084,6 +8435,9 @@ packages: resolution: {integrity: sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + varint@5.0.2: + resolution: {integrity: sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==} + vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -7188,6 +8542,10 @@ packages: jsdom: optional: true + void-elements@3.1.0: + resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} + engines: {node: '>=0.10.0'} + watchpack@2.4.2: resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} engines: {node: '>=10.13.0'} @@ -7354,6 +8712,15 @@ packages: webpack: optional: true + xor-distance@2.0.0: + resolution: {integrity: sha512-AsAqZfPAuWx7qB/0kyRDUEvoU3QKsHWzHU9smFlkaiprEpGfJ/NBbLze2Uq0rdkxCxkNM9uOLvz/KoNBCbZiLQ==} + + xsalsa20@1.2.0: + resolution: {integrity: sha512-FIr/DEeoHfj7ftfylnoFt3rAIRoWXpx2AoDfrT2qD2wtp7Dp+COajvs/Icb7uHqRW9m60f5iXZwdsJJO3kvb7w==} + + xstate@4.38.3: + resolution: {integrity: sha512-SH7nAaaPQx57dx6qvfcIgqKRXIh4L0A1iYEqim4s1u7c9VoCgzZc+63FY90AKU4ZzOC2cfJzTnpO4zK7fCUzzw==} + xstate@5.13.0: resolution: {integrity: sha512-Z0om784N5u8sAzUvQJBa32jiTCIGGF/2ZsmKkerQEqeeUktAeOMK20FIHFUMywC4GcAkNksSvaeX7lwoRNXPEQ==} @@ -7367,6 +8734,10 @@ packages: yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + yaml@2.4.1: resolution: {integrity: sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==} engines: {node: '>= 14'} @@ -7384,6 +8755,15 @@ packages: resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} engines: {node: '>=12.20'} + zen-observable@0.10.0: + resolution: {integrity: sha512-iI3lT0iojZhKwT5DaFy2Ce42n3yFcLdFyOh01G7H0flMY60P8MJuVFEoJoNwXlmAyQ45GrjL6AcZmmlv8A5rbw==} + + zen-observable@0.9.0: + resolution: {integrity: sha512-xBrvSw1htnb2VEYpgjG7etqztHSZ4KyKzJgFh/rucI7QzkbxD0rVNmIni6lia6KhWs7RBbBBLZksGKrCSaDAMQ==} + + zen-push@0.3.1: + resolution: {integrity: sha512-6XNTSVz8Z/5+8BzOQFQr+HOr/j7K+ZJfc4tdCCmuiq8y2Ph+aODqagZnXKbKIFZrQ3nSIcdek9gAuEe+p3zJUg==} + zod@3.22.4: resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} @@ -7421,108 +8801,22 @@ snapshots: jsonpointer: 5.0.1 leven: 3.1.0 - '@automerge/automerge-repo-network-broadcastchannel@1.2.1(@types/node@20.11.27)(typescript@5.6.3)': + '@babel/code-frame@7.23.5': dependencies: - '@automerge/automerge-repo': 1.2.1(@types/node@20.11.27)(typescript@5.6.3) - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - - '@types/node' - - supports-color - - typescript + '@babel/highlight': 7.23.4 + chalk: 2.4.2 - '@automerge/automerge-repo-network-websocket@1.2.1(@types/node@20.11.27)(typescript@5.6.3)': + '@babel/code-frame@7.26.2': dependencies: - '@automerge/automerge-repo': 1.2.1(@types/node@20.11.27)(typescript@5.6.3) - cbor-x: 1.5.8 - debug: 4.3.7 - eventemitter3: 5.0.1 - isomorphic-ws: 5.0.0(ws@8.16.0) - ws: 8.16.0 - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - - '@types/node' - - bufferutil - - supports-color - - typescript - - utf-8-validate + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 - '@automerge/automerge-repo-react-hooks@1.2.1(@types/node@20.11.27)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)': - dependencies: - '@automerge/automerge': 2.2.8 - '@automerge/automerge-repo': 1.2.1(@types/node@20.11.27)(typescript@5.6.3) - eventemitter3: 5.0.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-usestateref: 1.0.8(react@18.2.0) - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - - '@types/node' - - supports-color - - typescript - - '@automerge/automerge-repo-storage-indexeddb@1.2.1(@types/node@20.11.27)(typescript@5.6.3)': - dependencies: - '@automerge/automerge-repo': 1.2.1(@types/node@20.11.27)(typescript@5.6.3) - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - - '@types/node' - - supports-color - - typescript - - '@automerge/automerge-repo-storage-nodefs@1.2.1(@types/node@20.11.27)(typescript@5.6.3)': - dependencies: - '@automerge/automerge-repo': 1.2.1(@types/node@20.11.27)(typescript@5.6.3) - rimraf: 5.0.5 - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - - '@types/node' - - supports-color - - typescript - - '@automerge/automerge-repo@1.2.1(@types/node@20.11.27)(typescript@5.6.3)': - dependencies: - '@automerge/automerge': 2.2.8 - bs58check: 3.0.1 - cbor-x: 1.5.8 - debug: 4.3.7 - eventemitter3: 5.0.1 - fast-sha256: 1.3.0 - tiny-typed-emitter: 2.1.0 - ts-node: 10.9.2(@types/node@20.11.27)(typescript@5.6.3) - uuid: 9.0.1 - xstate: 5.13.0 - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - - '@types/node' - - supports-color - - typescript - - '@automerge/automerge@2.2.8': - dependencies: - uuid: 9.0.1 - - '@babel/code-frame@7.23.5': - dependencies: - '@babel/highlight': 7.23.4 - chalk: 2.4.2 - - '@babel/code-frame@7.26.2': - dependencies: - '@babel/helper-validator-identifier': 7.25.9 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/compat-data@7.23.5': {} - - '@babel/compat-data@7.26.2': {} - - '@babel/core@7.24.0': + '@babel/compat-data@7.23.5': {} + + '@babel/compat-data@7.26.2': {} + + '@babel/core@7.24.0': dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.23.5 @@ -8345,6 +9639,8 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 + '@bufbuild/protobuf@2.2.3': {} + '@cbor-extract/cbor-extract-darwin-arm64@2.2.0': optional: true @@ -8363,163 +9659,1195 @@ snapshots: '@cbor-extract/cbor-extract-win32-x64@2.2.0': optional: true - '@cspotcode/source-map-support@0.8.1': - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - - '@effect/schema@0.69.1(effect@3.5.7)': - dependencies: - effect: 3.5.7 - fast-check: 3.20.0 - - '@emotion/hash@0.9.1': {} - - '@esbuild-plugins/node-globals-polyfill@0.2.3(esbuild@0.20.1)': + '@ch-ui/colors@0.5.1': dependencies: - esbuild: 0.20.1 - - '@esbuild/aix-ppc64@0.20.1': - optional: true - - '@esbuild/android-arm64@0.20.1': - optional: true - - '@esbuild/android-arm@0.20.1': - optional: true - - '@esbuild/android-x64@0.20.1': - optional: true - - '@esbuild/darwin-arm64@0.20.1': + colorjs: colorjs.io@0.5.2 optional: true - '@esbuild/darwin-x64@0.20.1': + '@ch-ui/tailwind-tokens@0.5.5(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)))': + dependencies: + '@ch-ui/tokens': 0.5.6 + tailwindcss: 3.4.3(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)) optional: true - '@esbuild/freebsd-arm64@0.20.1': + '@ch-ui/tokens@0.5.6': + dependencies: + '@ch-ui/colors': 0.5.1 + postcss: 8.5.3 optional: true - '@esbuild/freebsd-x64@0.20.1': - optional: true + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 - '@esbuild/linux-arm64@0.20.1': - optional: true + '@dxos/async@0.7.4': + dependencies: + '@dxos/context': 0.7.4 + '@dxos/debug': 0.7.4 + '@dxos/invariant': 0.7.4 + '@dxos/log': 0.7.4 + '@dxos/node-std': 0.7.4 + '@dxos/util': 0.7.4 + zen-observable: 0.10.0 + zen-push: 0.3.1 - '@esbuild/linux-arm@0.20.1': - optional: true + '@dxos/automerge-wasm@0.17.2': {} - '@esbuild/linux-ia32@0.20.1': - optional: true + '@dxos/automerge@0.7.4': + dependencies: + '@automerge/automerge-wasm': '@dxos/automerge-wasm@0.17.2' + bs58check: 3.0.1 + cbor-x: 1.5.8 + debug: 4.4.0 + eventemitter3: 5.0.1 + fast-sha256: 1.3.0 + isomorphic-ws: 5.0.0(ws@8.16.0) + uuid: 9.0.1 + ws: 8.16.0 + xstate: 5.13.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate - '@esbuild/linux-loong64@0.20.1': - optional: true + '@dxos/client-protocol@0.7.4(effect@3.13.10)': + dependencies: + '@dxos/async': 0.7.4 + '@dxos/config': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/context': 0.7.4 + '@dxos/credentials': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/echo-db': 0.7.4(@effect/schema@0.75.5(effect@3.13.10)) + '@dxos/echo-schema': 0.7.4 + '@dxos/invariant': 0.7.4 + '@dxos/keys': 0.7.4 + '@dxos/node-std': 0.7.4 + '@dxos/protocols': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/rpc': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@effect/schema': 0.75.5(effect@3.13.10) + base-x: 3.0.11 + transitivePeerDependencies: + - bufferutil + - effect + - supports-color + - utf-8-validate - '@esbuild/linux-mips64el@0.20.1': - optional: true + '@dxos/client-services@0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10)': + dependencies: + '@dxos/async': 0.7.4 + '@dxos/automerge': 0.7.4 + '@dxos/client-protocol': 0.7.4(effect@3.13.10) + '@dxos/codec-protobuf': 0.7.4 + '@dxos/config': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/context': 0.7.4 + '@dxos/credentials': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/crypto': 0.7.4 + '@dxos/debug': 0.7.4 + '@dxos/echo-db': 0.7.4(@effect/schema@0.75.5(effect@3.13.10)) + '@dxos/echo-pipeline': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/echo-protocol': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/echo-schema': 0.7.4 + '@dxos/edge-client': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/feed-store': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/indexing': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/invariant': 0.7.4 + '@dxos/keyring': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/keys': 0.7.4 + '@dxos/kv-store': 0.7.4 + '@dxos/lock-file': 0.7.4 + '@dxos/log': 0.7.4 + '@dxos/messaging': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/network-manager': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/node-std': 0.7.4 + '@dxos/protocols': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/random-access-storage': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/rpc': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/teleport': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/teleport-extension-gossip': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/teleport-extension-object-sync': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/timeframe': 0.7.4 + '@dxos/tracing': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/util': 0.7.4 + '@dxos/websocket-rpc': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + cbor-x: 1.5.8 + platform: 1.3.6 + transitivePeerDependencies: + - '@effect/schema' + - bufferutil + - effect + - supports-color + - utf-8-validate - '@esbuild/linux-ppc64@0.20.1': - optional: true + '@dxos/client@0.7.4(effect@3.13.10)': + dependencies: + '@dxos/async': 0.7.4 + '@dxos/automerge': 0.7.4 + '@dxos/client-protocol': 0.7.4(effect@3.13.10) + '@dxos/client-services': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/codec-protobuf': 0.7.4 + '@dxos/config': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/context': 0.7.4 + '@dxos/credentials': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/crypto': 0.7.4 + '@dxos/debug': 0.7.4 + '@dxos/echo-db': 0.7.4(@effect/schema@0.75.5(effect@3.13.10)) + '@dxos/echo-pipeline': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/echo-protocol': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/echo-schema': 0.7.4 + '@dxos/indexing': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/invariant': 0.7.4 + '@dxos/keys': 0.7.4 + '@dxos/kv-store': 0.7.4 + '@dxos/live-object': 0.7.4 + '@dxos/log': 0.7.4 + '@dxos/messaging': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/network-manager': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/node-std': 0.7.4 + '@dxos/protocols': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/random-access-storage': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/rpc': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/rpc-tunnel': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/timeframe': 0.7.4 + '@dxos/tracing': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/util': 0.7.4 + '@dxos/websocket-rpc': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@effect/schema': 0.75.5(effect@3.13.10) + base-x: 3.0.11 + jwt-decode: 4.0.0 + lodash.get: 4.4.2 + lodash.isequal: 4.5.0 + lodash.isequalwith: 4.4.0 + ua-parser-js: 1.0.40 + transitivePeerDependencies: + - bufferutil + - effect + - supports-color + - utf-8-validate - '@esbuild/linux-riscv64@0.20.1': - optional: true + '@dxos/codec-protobuf@0.7.4': + dependencies: + '@dxos/async': 0.7.4 + '@dxos/context': 0.7.4 + '@dxos/invariant': 0.7.4 + '@dxos/log': 0.7.4 + '@dxos/node-std': 0.7.4 + '@dxos/util': 0.7.4 + compress-json: 2.1.3 + lodash.merge: 4.6.2 + protobufjs: 7.4.0 - '@esbuild/linux-s390x@0.20.1': - optional: true + '@dxos/config@0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10)': + dependencies: + '@dxos/log': 0.7.4 + '@dxos/node-std': 0.7.4 + '@dxos/protocols': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/tracing': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/util': 0.7.4 + boolean: 3.2.0 + js-yaml: 4.1.0 + localforage: 1.10.0 + lodash.defaultsdeep: 4.6.1 + lodash.ismatch: 4.4.0 + pkg-up: 3.1.0 + transitivePeerDependencies: + - '@effect/schema' + - effect + + '@dxos/context@0.7.4': + dependencies: + '@dxos/debug': 0.7.4 + '@dxos/log': 0.7.4 + '@dxos/node-std': 0.7.4 + '@dxos/util': 0.7.4 + + '@dxos/credentials@0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10)': + dependencies: + '@dxos/async': 0.7.4 + '@dxos/context': 0.7.4 + '@dxos/crypto': 0.7.4 + '@dxos/invariant': 0.7.4 + '@dxos/keyring': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/keys': 0.7.4 + '@dxos/log': 0.7.4 + '@dxos/node-std': 0.7.4 + '@dxos/protocols': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/timeframe': 0.7.4 + '@dxos/util': 0.7.4 + bip39: 3.1.0 + json-stable-stringify: 1.2.1 + transitivePeerDependencies: + - '@effect/schema' + - effect + + '@dxos/crypto@0.7.4': + dependencies: + '@dxos/invariant': 0.7.4 + '@dxos/keys': 0.7.4 + '@dxos/node-std': 0.7.4 + hypercore-crypto: 2.3.2 + + '@dxos/debug@0.7.4': + dependencies: + '@dxos/node-std': 0.7.4 + + '@dxos/display-name@0.7.4': {} + + '@dxos/echo-db@0.7.4(@effect/schema@0.75.5(effect@3.13.10))': + dependencies: + '@dxos/async': 0.7.4 + '@dxos/automerge': 0.7.4 + '@dxos/codec-protobuf': 0.7.4 + '@dxos/context': 0.7.4 + '@dxos/crypto': 0.7.4 + '@dxos/debug': 0.7.4 + '@dxos/echo-pipeline': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/echo-protocol': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/echo-schema': 0.7.4 + '@dxos/echo-signals': 0.7.4 + '@dxos/edge-client': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/invariant': 0.7.4 + '@dxos/keys': 0.7.4 + '@dxos/kv-store': 0.7.4 + '@dxos/live-object': 0.7.4 + '@dxos/log': 0.7.4 + '@dxos/node-std': 0.7.4 + '@dxos/protocols': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/teleport': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/tracing': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/util': 0.7.4 + effect: 3.13.10 + eventemitter3: 5.0.1 + lodash.get: 4.4.2 + lodash.isequal: 4.5.0 + transitivePeerDependencies: + - '@effect/schema' + - bufferutil + - supports-color + - utf-8-validate - '@esbuild/linux-x64@0.20.1': - optional: true + '@dxos/echo-pipeline@0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10)': + dependencies: + '@dxos/async': 0.7.4 + '@dxos/automerge': 0.7.4 + '@dxos/codec-protobuf': 0.7.4 + '@dxos/context': 0.7.4 + '@dxos/credentials': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/crypto': 0.7.4 + '@dxos/debug': 0.7.4 + '@dxos/echo-protocol': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/echo-schema': 0.7.4 + '@dxos/edge-client': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/feed-store': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/hypercore': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/indexing': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/invariant': 0.7.4 + '@dxos/keyring': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/keys': 0.7.4 + '@dxos/kv-store': 0.7.4 + '@dxos/log': 0.7.4 + '@dxos/messaging': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/network-manager': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/node-std': 0.7.4 + '@dxos/protocols': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/random-access-storage': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/teleport': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/teleport-extension-automerge-replicator': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/teleport-extension-gossip': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/teleport-extension-object-sync': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/teleport-extension-replicator': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/timeframe': 0.7.4 + '@dxos/tracing': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/typings': 0.7.4 + '@dxos/util': 0.7.4 + crc-32: 1.2.2 + level-transcoder: 1.0.1 + lodash.isequal: 4.5.0 + transitivePeerDependencies: + - '@effect/schema' + - bufferutil + - effect + - supports-color + - utf-8-validate - '@esbuild/netbsd-x64@0.20.1': - optional: true + '@dxos/echo-protocol@0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10)': + dependencies: + '@dxos/crypto': 0.7.4 + '@dxos/keys': 0.7.4 + '@dxos/protocols': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/util': 0.7.4 + transitivePeerDependencies: + - '@effect/schema' + - effect + + '@dxos/echo-schema@0.7.4': + dependencies: + '@dxos/echo-protocol': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/echo-signals': 0.7.4 + '@dxos/effect': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/invariant': 0.7.4 + '@dxos/keys': 0.7.4 + '@dxos/log': 0.7.4 + '@dxos/node-std': 0.7.4 + '@dxos/util': 0.7.4 + '@effect/schema': 0.75.5(effect@3.13.10) + '@preact/signals-core': 1.8.0 + effect: 3.13.10 + ulidx: 2.4.1 + + '@dxos/echo-signals@0.7.4': + dependencies: + '@preact/signals': 1.3.2(preact@10.26.4) + '@preact/signals-core': 1.8.0 + '@preact/signals-react': 1.3.8(react@18.2.0) + optionalDependencies: + preact: 10.26.4 + react: 18.2.0 - '@esbuild/openbsd-x64@0.20.1': - optional: true + '@dxos/edge-client@0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10)': + dependencies: + '@dxos/async': 0.7.4 + '@dxos/context': 0.7.4 + '@dxos/credentials': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/crypto': 0.7.4 + '@dxos/debug': 0.7.4 + '@dxos/invariant': 0.7.4 + '@dxos/keyring': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/keys': 0.7.4 + '@dxos/log': 0.7.4 + '@dxos/node-std': 0.7.4 + '@dxos/protocols': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/util': 0.7.4 + isomorphic-ws: 5.0.0(ws@8.16.0) + ws: 8.16.0 + transitivePeerDependencies: + - '@effect/schema' + - bufferutil + - effect + - utf-8-validate - '@esbuild/sunos-x64@0.20.1': - optional: true + '@dxos/effect@0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10)': + dependencies: + '@dxos/invariant': 0.7.4 + '@dxos/node-std': 0.7.4 + '@dxos/util': 0.7.4 + '@effect/schema': 0.75.5(effect@3.13.10) + effect: 3.13.10 + + '@dxos/feed-store@0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10)': + dependencies: + '@dxos/async': 0.7.4 + '@dxos/codec-protobuf': 0.7.4 + '@dxos/context': 0.7.4 + '@dxos/crypto': 0.7.4 + '@dxos/debug': 0.7.4 + '@dxos/hypercore': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/invariant': 0.7.4 + '@dxos/keyring': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/keys': 0.7.4 + '@dxos/log': 0.7.4 + '@dxos/node-std': 0.7.4 + '@dxos/random-access-storage': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/util': 0.7.4 + lodash.defaultsdeep: 4.6.1 + race-as-promised: 0.0.2 + streamx: 2.22.0 + optionalDependencies: + '@dxos/random': 0.7.4 + transitivePeerDependencies: + - '@effect/schema' + - effect + + '@dxos/hypercore@0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10)': + dependencies: + '@dxos/async': 0.7.4 + '@dxos/codec-protobuf': 0.7.4 + '@dxos/crypto': 0.7.4 + '@dxos/debug': 0.7.4 + '@dxos/invariant': 0.7.4 + '@dxos/keys': 0.7.4 + '@dxos/node-std': 0.7.4 + '@dxos/random-access-storage': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/typings': 0.7.4 + '@dxos/util': 0.7.4 + readable-stream: 3.6.2 + sodium-native: 3.4.1 + sodium-universal: 3.1.0 + streamx: 2.22.0 + transitivePeerDependencies: + - '@effect/schema' + - effect + + '@dxos/indexing@0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10)': + dependencies: + '@dxos/async': 0.7.4 + '@dxos/automerge': 0.7.4 + '@dxos/codec-protobuf': 0.7.4 + '@dxos/context': 0.7.4 + '@dxos/echo-protocol': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/echo-schema': 0.7.4 + '@dxos/invariant': 0.7.4 + '@dxos/keys': 0.7.4 + '@dxos/kv-store': 0.7.4 + '@dxos/log': 0.7.4 + '@dxos/node-std': 0.7.4 + '@dxos/protocols': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/random-access-storage': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/tracing': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/util': 0.7.4 + '@orama/orama': 2.1.1 + level-transcoder: 1.0.1 + lodash.isequal: 4.5.0 + transitivePeerDependencies: + - '@effect/schema' + - bufferutil + - effect + - supports-color + - utf-8-validate - '@esbuild/win32-arm64@0.20.1': - optional: true + '@dxos/invariant@0.7.4': {} - '@esbuild/win32-ia32@0.20.1': - optional: true + '@dxos/keyring@0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10)': + dependencies: + '@dxos/async': 0.7.4 + '@dxos/codec-protobuf': 0.7.4 + '@dxos/crypto': 0.7.4 + '@dxos/debug': 0.7.4 + '@dxos/invariant': 0.7.4 + '@dxos/keys': 0.7.4 + '@dxos/node-std': 0.7.4 + '@dxos/protocols': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/random-access-storage': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/util': 0.7.4 + transitivePeerDependencies: + - '@effect/schema' + - effect - '@esbuild/win32-x64@0.20.1': - optional: true + '@dxos/keys@0.7.4': + dependencies: + '@dxos/debug': 0.7.4 + '@dxos/invariant': 0.7.4 + '@dxos/node-std': 0.7.4 - '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': + '@dxos/kv-store@0.7.4': dependencies: - eslint: 8.57.0 - eslint-visitor-keys: 3.4.3 + '@dxos/keys': 0.7.4 + '@dxos/node-std': 0.7.4 + abstract-level: 1.0.4 + level: 8.0.1 - '@eslint-community/regexpp@4.10.0': {} + '@dxos/live-object@0.7.4': + dependencies: + '@dxos/echo-protocol': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/echo-schema': 0.7.4 + '@dxos/echo-signals': 0.7.4 + '@dxos/effect': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/invariant': 0.7.4 + '@dxos/keys': 0.7.4 + '@dxos/log': 0.7.4 + '@dxos/node-std': 0.7.4 + '@dxos/util': 0.7.4 + '@effect/schema': 0.75.5(effect@3.13.10) + '@preact/signals-core': 1.8.0 + effect: 3.13.10 + ulidx: 2.4.1 - '@eslint/eslintrc@2.1.4': + '@dxos/lock-file@0.7.4': dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.1 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color + '@dxos/async': 0.7.4 + '@dxos/node-std': 0.7.4 + fs-ext: 2.1.1 - '@eslint/eslintrc@3.0.2': + '@dxos/log@0.7.4': dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 10.0.1 - globals: 14.0.0 - ignore: 5.3.1 - import-fresh: 3.3.0 + '@dxos/node-std': 0.7.4 + '@dxos/util': 0.7.4 + chalk: 4.1.2 js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 + lodash.defaultsdeep: 4.6.1 + lodash.omit: 4.5.0 + + '@dxos/messaging@0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10)': + dependencies: + '@dxos/async': 0.7.4 + '@dxos/codec-protobuf': 0.7.4 + '@dxos/context': 0.7.4 + '@dxos/edge-client': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/invariant': 0.7.4 + '@dxos/keys': 0.7.4 + '@dxos/log': 0.7.4 + '@dxos/node-std': 0.7.4 + '@dxos/protocols': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/rpc': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/tracing': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/util': 0.7.4 + isomorphic-ws: 5.0.0(ws@8.16.0) + ws: 8.16.0 transitivePeerDependencies: - - supports-color + - '@effect/schema' + - bufferutil + - effect + - utf-8-validate - '@eslint/js@8.57.0': {} + '@dxos/network-manager@0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10)': + dependencies: + '@dxos/async': 0.7.4 + '@dxos/codec-protobuf': 0.7.4 + '@dxos/context': 0.7.4 + '@dxos/debug': 0.7.4 + '@dxos/invariant': 0.7.4 + '@dxos/keys': 0.7.4 + '@dxos/log': 0.7.4 + '@dxos/messaging': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/node-std': 0.7.4 + '@dxos/protocols': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/rpc': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/teleport': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/tracing': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/util': 0.7.4 + isomorphic-ws: 5.0.0(ws@8.16.0) + nanomessage-rpc: 3.2.0 + node-datachannel: 0.9.2 + p-defer: 3.0.0 + stream: 0.0.3 + tiny-invariant: 1.3.3 + ws: 8.16.0 + xor-distance: 2.0.0 + transitivePeerDependencies: + - '@effect/schema' + - bufferutil + - effect + - utf-8-validate - '@floating-ui/core@1.6.0': + '@dxos/node-std@0.7.4': dependencies: - '@floating-ui/utils': 0.2.1 + assert: 2.1.0 + events: 3.3.0 + path-browserify: 1.0.1 + readable-stream: 3.6.2 + util: 0.12.5 - '@floating-ui/dom@1.6.3': + '@dxos/protocols@0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10)': dependencies: - '@floating-ui/core': 1.6.0 - '@floating-ui/utils': 0.2.1 + '@bufbuild/protobuf': 2.2.3 + '@dxos/codec-protobuf': 0.7.4 + '@dxos/effect': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/invariant': 0.7.4 + '@dxos/keys': 0.7.4 + '@dxos/timeframe': 0.7.4 + '@dxos/util': 0.7.4 + transitivePeerDependencies: + - '@effect/schema' + - effect + + '@dxos/random-access-storage@0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10)': + dependencies: + '@dxos/async': 0.7.4 + '@dxos/debug': 0.7.4 + '@dxos/invariant': 0.7.4 + '@dxos/log': 0.7.4 + '@dxos/node-std': 0.7.4 + '@dxos/tracing': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/util': 0.7.4 + buffer-alloc: 1.2.0 + buffer-from: 0.1.2 + del: 5.1.0 + inherits: 2.0.4 + next-tick: 1.1.0 + once: 1.4.0 + pify: 5.0.0 + random-access-file: 2.2.1 + random-access-memory: 4.1.0 + random-access-storage: 1.4.3 + transitivePeerDependencies: + - '@effect/schema' + - effect - '@floating-ui/react-dom@2.0.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@dxos/random@0.7.4': dependencies: - '@floating-ui/dom': 1.6.3 + '@dxos/node-std': 0.7.4 + '@ngneat/falso': 7.3.0 + optional: true + + '@dxos/react-client@0.7.4(@effect/schema@0.75.5(effect@3.13.10))(@phosphor-icons/react@2.1.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react-dom@18.2.22)(@types/react@18.2.66)(effect@3.13.10)(postcss@8.4.35)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))': + dependencies: + '@dxos/async': 0.7.4 + '@dxos/client': 0.7.4(effect@3.13.10) + '@dxos/codec-protobuf': 0.7.4 + '@dxos/config': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/debug': 0.7.4 + '@dxos/echo-schema': 0.7.4 + '@dxos/echo-signals': 0.7.4 + '@dxos/invariant': 0.7.4 + '@dxos/log': 0.7.4 + '@dxos/node-std': 0.7.4 + '@dxos/protocols': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/react-hooks': 0.7.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@dxos/util': 0.7.4 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + react-error-boundary: 4.1.2(react@18.2.0) + optionalDependencies: + '@dxos/random': 0.7.4 + '@dxos/react-ui': 0.7.4(@dxos/react-ui-theme@0.7.4(postcss@8.4.35)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)))(@phosphor-icons/react@2.1.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@dxos/react-ui-theme': 0.7.4(postcss@8.4.35)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)) + transitivePeerDependencies: + - '@effect/schema' + - '@phosphor-icons/react' + - '@types/react' + - '@types/react-dom' + - bufferutil + - effect + - postcss + - react-native + - supports-color + - ts-node + - utf-8-validate - '@floating-ui/react@0.26.13(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@dxos/react-hooks@0.7.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@floating-ui/react-dom': 2.0.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@floating-ui/utils': 0.2.1 + '@dxos/async': 0.7.4 + '@dxos/log': 0.7.4 + alea: 1.0.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - tabbable: 6.2.0 - - '@floating-ui/utils@0.2.1': {} - '@headlessui/react@2.0.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@dxos/react-input@0.7.4(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@floating-ui/react': 0.26.13(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/focus': 3.16.2(react@18.2.0) - '@react-aria/interactions': 3.21.1(react@18.2.0) + '@dxos/react-hooks': 0.7.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-context': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-slot': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.2.66)(react@18.2.0) + lodash.omit: 4.5.0 + rci: 0.1.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + optional: true + + '@dxos/react-list@0.7.4(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@dxos/react-hooks': 0.7.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-collapsible': 1.1.3(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-context': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-slot': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.2.66)(react@18.2.0) + lodash.omit: 4.5.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + optional: true + + '@dxos/react-ui-theme@0.7.4(postcss@8.4.35)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))': + dependencies: + '@ch-ui/tailwind-tokens': 0.5.5(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))) + '@ch-ui/tokens': 0.5.6 + '@dxos/node-std': 0.7.4 + '@fontsource-variable/inter': 5.0.16 + '@fontsource-variable/jetbrains-mono': 5.0.21 + '@tailwindcss/container-queries': 0.1.1(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))) + '@tailwindcss/forms': 0.5.7(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))) + autoprefixer: 10.4.18(postcss@8.4.35) + esbuild-style-plugin: 1.6.3 + glob: 7.2.3 + lodash.get: 4.4.2 + lodash.merge: 4.6.2 + tailwind-merge: 2.2.1 + tailwind-scrollbar: 3.1.0(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))) + tailwindcss: 3.4.3(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)) + tailwindcss-logical: 3.0.1(postcss@8.4.35)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)) + tailwindcss-radix: 2.9.0 + transitivePeerDependencies: + - postcss + - ts-node + optional: true + + '@dxos/react-ui-types@0.7.4': {} + + '@dxos/react-ui@0.7.4(@dxos/react-ui-theme@0.7.4(postcss@8.4.35)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)))(@phosphor-icons/react@2.1.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@dxos/debug': 0.7.4 + '@dxos/log': 0.7.4 + '@dxos/react-hooks': 0.7.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@dxos/react-input': 0.7.4(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@dxos/react-list': 0.7.4(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@dxos/react-ui-theme': 0.7.4(postcss@8.4.35)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)) + '@dxos/react-ui-types': 0.7.4 + '@dxos/util': 0.7.4 + '@fluentui/react-tabster': 9.24.1(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@phosphor-icons/react': 2.1.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-alert-dialog': 1.1.6(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-avatar': 1.0.4(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-checkbox': 1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-collapsible': 1.1.3(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-context': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-context-menu': 2.2.6(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.1.1(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-id': 1.1.0(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-menu': 2.1.6(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-popper': 1.2.1(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-portal': 1.1.3(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-scroll-area': 1.2.3(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-select': 1.2.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-separator': 1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-slot': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-switch': 1.1.3(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-toast': 1.2.6(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-toggle': 1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-toggle-group': 1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-toolbar': 1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-tooltip': 1.1.6(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.2.66)(react@18.2.0) + aria-hidden: 1.2.4 + date-fns: 3.6.0 + i18next: 21.10.0 + keyborg: 2.6.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-i18next: 11.18.6(i18next@21.10.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react-remove-scroll: 2.6.2(@types/react@18.2.66)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + - react-native + optional: true + + '@dxos/rpc-tunnel@0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10)': + dependencies: + '@dxos/log': 0.7.4 + '@dxos/rpc': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + ua-parser-js: 1.0.40 + transitivePeerDependencies: + - '@effect/schema' + - effect + + '@dxos/rpc@0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10)': + dependencies: + '@dxos/async': 0.7.4 + '@dxos/codec-protobuf': 0.7.4 + '@dxos/debug': 0.7.4 + '@dxos/invariant': 0.7.4 + '@dxos/log': 0.7.4 + '@dxos/node-std': 0.7.4 + '@dxos/protocols': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/util': 0.7.4 + transitivePeerDependencies: + - '@effect/schema' + - effect + + '@dxos/shell@0.7.4(@dxos/react-client@0.7.4(@effect/schema@0.75.5(effect@3.13.10))(@phosphor-icons/react@2.1.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react-dom@18.2.22)(@types/react@18.2.66)(effect@3.13.10)(postcss@8.4.35)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)))(@effect/schema@0.75.5(effect@3.13.10))(@types/react-dom@18.2.22)(@types/react@18.2.66)(effect@3.13.10)(postcss@8.4.35)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))': + dependencies: + '@dxos/async': 0.7.4 + '@dxos/client-protocol': 0.7.4(effect@3.13.10) + '@dxos/client-services': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/debug': 0.7.4 + '@dxos/display-name': 0.7.4 + '@dxos/invariant': 0.7.4 + '@dxos/log': 0.7.4 + '@dxos/protocols': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/react-client': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(@phosphor-icons/react@2.1.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react-dom@18.2.22)(@types/react@18.2.66)(effect@3.13.10)(postcss@8.4.35)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)) + '@dxos/react-ui-types': 0.7.4 + '@dxos/rpc': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/rpc-tunnel': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/util': 0.7.4 + '@emoji-mart/data': 1.2.1 + '@emoji-mart/react': 1.1.1(emoji-mart@5.6.0)(react@18.2.0) + '@fluentui/react-tabster': 9.24.1(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-accordion': 1.2.3(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-context': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-radio-group': 1.2.3(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.2.66)(react@18.2.0) + '@xstate/react': 3.2.2(@types/react@18.2.66)(react@18.2.0)(xstate@4.38.3) + date-fns: 3.6.0 + emoji-mart: 5.6.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-qr-rounded: 1.0.0(react@18.2.0) + url-join: 5.0.0 + xstate: 4.38.3 + optionalDependencies: + '@dxos/react-ui': 0.7.4(@dxos/react-ui-theme@0.7.4(postcss@8.4.35)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)))(@phosphor-icons/react@2.1.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@dxos/react-ui-theme': 0.7.4(postcss@8.4.35)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)) + '@phosphor-icons/react': 2.1.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + transitivePeerDependencies: + - '@effect/schema' + - '@types/react' + - '@types/react-dom' + - '@xstate/fsm' + - bufferutil + - effect + - postcss + - react-native + - supports-color + - ts-node + - utf-8-validate + + '@dxos/teleport-extension-automerge-replicator@0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10)': + dependencies: + '@dxos/async': 0.7.4 + '@dxos/invariant': 0.7.4 + '@dxos/keys': 0.7.4 + '@dxos/log': 0.7.4 + '@dxos/node-std': 0.7.4 + '@dxos/protocols': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/rpc': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/teleport': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + transitivePeerDependencies: + - '@effect/schema' + - effect + + '@dxos/teleport-extension-gossip@0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10)': + dependencies: + '@dxos/async': 0.7.4 + '@dxos/codec-protobuf': 0.7.4 + '@dxos/context': 0.7.4 + '@dxos/invariant': 0.7.4 + '@dxos/keys': 0.7.4 + '@dxos/log': 0.7.4 + '@dxos/node-std': 0.7.4 + '@dxos/protocols': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/rpc': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/teleport': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/util': 0.7.4 + transitivePeerDependencies: + - '@effect/schema' + - effect + + '@dxos/teleport-extension-object-sync@0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10)': + dependencies: + '@dxos/async': 0.7.4 + '@dxos/context': 0.7.4 + '@dxos/crypto': 0.7.4 + '@dxos/invariant': 0.7.4 + '@dxos/keys': 0.7.4 + '@dxos/log': 0.7.4 + '@dxos/node-std': 0.7.4 + '@dxos/protocols': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/random-access-storage': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/teleport': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/util': 0.7.4 + transitivePeerDependencies: + - '@effect/schema' + - effect + + '@dxos/teleport-extension-replicator@0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10)': + dependencies: + '@dxos/async': 0.7.4 + '@dxos/context': 0.7.4 + '@dxos/debug': 0.7.4 + '@dxos/feed-store': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/invariant': 0.7.4 + '@dxos/keys': 0.7.4 + '@dxos/log': 0.7.4 + '@dxos/node-std': 0.7.4 + '@dxos/protocols': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/rpc': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/teleport': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/util': 0.7.4 + transitivePeerDependencies: + - '@effect/schema' + - effect + + '@dxos/teleport@0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10)': + dependencies: + '@dxos/async': 0.7.4 + '@dxos/context': 0.7.4 + '@dxos/debug': 0.7.4 + '@dxos/invariant': 0.7.4 + '@dxos/keys': 0.7.4 + '@dxos/log': 0.7.4 + '@dxos/node-std': 0.7.4 + '@dxos/protocols': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/rpc': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/util': 0.7.4 + randombytes: 2.1.0 + transitivePeerDependencies: + - '@effect/schema' + - effect + + '@dxos/timeframe@0.7.4': + dependencies: + '@dxos/debug': 0.7.4 + '@dxos/keys': 0.7.4 + '@dxos/log': 0.7.4 + '@dxos/node-std': 0.7.4 + '@dxos/util': 0.7.4 + + '@dxos/tracing@0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10)': + dependencies: + '@dxos/async': 0.7.4 + '@dxos/codec-protobuf': 0.7.4 + '@dxos/context': 0.7.4 + '@dxos/invariant': 0.7.4 + '@dxos/log': 0.7.4 + '@dxos/node-std': 0.7.4 + '@dxos/protocols': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/util': 0.7.4 + transitivePeerDependencies: + - '@effect/schema' + - effect + + '@dxos/typings@0.7.4': {} + + '@dxos/util@0.7.4': + dependencies: + '@dxos/debug': 0.7.4 + '@dxos/invariant': 0.7.4 + '@dxos/keys': 0.7.4 + '@dxos/node-std': 0.7.4 + + '@dxos/websocket-rpc@0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10)': + dependencies: + '@dxos/async': 0.7.4 + '@dxos/log': 0.7.4 + '@dxos/node-std': 0.7.4 + '@dxos/protocols': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + '@dxos/rpc': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) + isomorphic-ws: 5.0.0(ws@8.16.0) + ws: 8.16.0 + transitivePeerDependencies: + - '@effect/schema' + - bufferutil + - effect + - utf-8-validate + + '@effect/schema@0.75.5(effect@3.13.10)': + dependencies: + effect: 3.13.10 + fast-check: 3.23.2 + + '@emoji-mart/data@1.2.1': {} + + '@emoji-mart/react@1.1.1(emoji-mart@5.6.0)(react@18.2.0)': + dependencies: + emoji-mart: 5.6.0 + react: 18.2.0 + + '@emotion/hash@0.9.1': {} + + '@esbuild-plugins/node-globals-polyfill@0.2.3(esbuild@0.20.1)': + dependencies: + esbuild: 0.20.1 + + '@esbuild/aix-ppc64@0.20.1': + optional: true + + '@esbuild/android-arm64@0.20.1': + optional: true + + '@esbuild/android-arm@0.20.1': + optional: true + + '@esbuild/android-x64@0.20.1': + optional: true + + '@esbuild/darwin-arm64@0.20.1': + optional: true + + '@esbuild/darwin-x64@0.20.1': + optional: true + + '@esbuild/freebsd-arm64@0.20.1': + optional: true + + '@esbuild/freebsd-x64@0.20.1': + optional: true + + '@esbuild/linux-arm64@0.20.1': + optional: true + + '@esbuild/linux-arm@0.20.1': + optional: true + + '@esbuild/linux-ia32@0.20.1': + optional: true + + '@esbuild/linux-loong64@0.20.1': + optional: true + + '@esbuild/linux-mips64el@0.20.1': + optional: true + + '@esbuild/linux-ppc64@0.20.1': + optional: true + + '@esbuild/linux-riscv64@0.20.1': + optional: true + + '@esbuild/linux-s390x@0.20.1': + optional: true + + '@esbuild/linux-x64@0.20.1': + optional: true + + '@esbuild/netbsd-x64@0.20.1': + optional: true + + '@esbuild/openbsd-x64@0.20.1': + optional: true + + '@esbuild/sunos-x64@0.20.1': + optional: true + + '@esbuild/win32-arm64@0.20.1': + optional: true + + '@esbuild/win32-ia32@0.20.1': + optional: true + + '@esbuild/win32-x64@0.20.1': + optional: true + + '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': + dependencies: + eslint: 8.57.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.10.0': {} + + '@eslint/eslintrc@2.1.4': + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/eslintrc@3.0.2': + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 10.0.1 + globals: 14.0.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@8.57.0': {} + + '@floating-ui/core@1.6.0': + dependencies: + '@floating-ui/utils': 0.2.1 + + '@floating-ui/dom@1.6.3': + dependencies: + '@floating-ui/core': 1.6.0 + '@floating-ui/utils': 0.2.1 + + '@floating-ui/react-dom@2.0.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@floating-ui/dom': 1.6.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + '@floating-ui/react@0.26.13(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@floating-ui/react-dom': 2.0.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@floating-ui/utils': 0.2.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + tabbable: 6.2.0 + + '@floating-ui/utils@0.2.1': {} + + '@fluentui/keyboard-keys@9.0.8': + dependencies: + '@swc/helpers': 0.5.9 + + '@fluentui/react-shared-contexts@9.22.0(@types/react@18.2.66)(react@18.2.0)': + dependencies: + '@fluentui/react-theme': 9.1.24 + '@swc/helpers': 0.5.9 + '@types/react': 18.2.66 + react: 18.2.0 + + '@fluentui/react-tabster@9.24.1(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@fluentui/react-shared-contexts': 9.22.0(@types/react@18.2.66)(react@18.2.0) + '@fluentui/react-theme': 9.1.24 + '@fluentui/react-utilities': 9.18.21(@types/react@18.2.66)(react@18.2.0) + '@griffel/react': 1.5.29(react@18.2.0) + '@swc/helpers': 0.5.9 + '@types/react': 18.2.66 + '@types/react-dom': 18.2.22 + keyborg: 2.6.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + tabster: 8.5.1 + + '@fluentui/react-theme@9.1.24': + dependencies: + '@fluentui/tokens': 1.0.0-alpha.21 + '@swc/helpers': 0.5.9 + + '@fluentui/react-utilities@9.18.21(@types/react@18.2.66)(react@18.2.0)': + dependencies: + '@fluentui/keyboard-keys': 9.0.8 + '@fluentui/react-shared-contexts': 9.22.0(@types/react@18.2.66)(react@18.2.0) + '@swc/helpers': 0.5.9 + '@types/react': 18.2.66 + react: 18.2.0 + + '@fluentui/tokens@1.0.0-alpha.21': + dependencies: + '@swc/helpers': 0.5.9 + + '@fontsource-variable/inter@5.0.16': + optional: true + + '@fontsource-variable/jetbrains-mono@5.0.21': + optional: true + + '@griffel/core@1.19.1': + dependencies: + '@emotion/hash': 0.9.1 + '@griffel/style-types': 1.3.0 + csstype: 3.1.3 + rtl-css-js: 1.16.1 + stylis: 4.3.6 + tslib: 2.6.2 + + '@griffel/react@1.5.29(react@18.2.0)': + dependencies: + '@griffel/core': 1.19.1 + react: 18.2.0 + tslib: 2.6.2 + + '@griffel/style-types@1.3.0': + dependencies: + csstype: 3.1.3 + + '@headlessui/react@2.0.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@floating-ui/react': 0.26.13(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/focus': 3.16.2(react@18.2.0) + '@react-aria/interactions': 3.21.1(react@18.2.0) '@tanstack/react-virtual': 3.5.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@herbcaudill/eventemitter42@0.3.1': {} - '@herbcaudill/random@1.0.5': dependencies: seed-random: 2.2.0 @@ -8573,11 +10901,11 @@ snapshots: dependencies: '@sinclair/typebox': 0.27.8 - '@joshwooding/vite-plugin-react-docgen-typescript@0.4.2(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(terser@5.36.0))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.4.2(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))': dependencies: magic-string: 0.27.0 react-docgen-typescript: 2.2.2(typescript@5.6.3) - vite: 5.1.4(@types/node@20.11.27)(terser@5.36.0) + vite: 5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) optionalDependencies: typescript: 5.6.3 @@ -8621,89 +10949,6 @@ snapshots: '@jspm/core@2.0.1': {} - '@localfirst/auth-provider-automerge-repo@6.0.0(@types/node@20.11.27)(typescript@5.6.3)': - dependencies: - '@automerge/automerge-repo': 1.2.1(@types/node@20.11.27)(typescript@5.6.3) - '@herbcaudill/eventemitter42': 0.3.1 - '@localfirst/auth': 6.0.0 - '@localfirst/crypto': 6.0.0 - '@localfirst/shared': 6.0.0 - msgpackr: 1.10.1 - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - - '@types/node' - - supports-color - - typescript - - '@localfirst/auth-syncserver@6.0.0(@types/node@20.11.27)(typescript@5.6.3)': - dependencies: - '@automerge/automerge-repo': 1.2.1(@types/node@20.11.27)(typescript@5.6.3) - '@automerge/automerge-repo-network-websocket': 1.2.1(@types/node@20.11.27)(typescript@5.6.3) - '@automerge/automerge-repo-storage-nodefs': 1.2.1(@types/node@20.11.27)(typescript@5.6.3) - '@localfirst/auth': 6.0.0 - '@localfirst/auth-provider-automerge-repo': 6.0.0(@types/node@20.11.27)(typescript@5.6.3) - '@localfirst/shared': 6.0.0 - body-parser: 1.20.2 - chalk: 5.3.0 - cors: 2.8.5 - express: 4.18.3 - ws: 8.16.0 - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - - '@types/node' - - bufferutil - - supports-color - - typescript - - utf-8-validate - - '@localfirst/auth@6.0.0': - dependencies: - '@herbcaudill/eventemitter42': 0.3.1 - '@localfirst/crdx': 6.0.0 - '@localfirst/crypto': 6.0.0 - '@localfirst/shared': 6.0.0 - '@paralleldrive/cuid2': 2.2.2 - lodash-es: 4.17.21 - msgpackr: 1.10.1 - xstate: 5.13.0 - transitivePeerDependencies: - - supports-color - - '@localfirst/crdx@6.0.0': - dependencies: - '@herbcaudill/eventemitter42': 0.3.1 - '@localfirst/crypto': 6.0.0 - '@localfirst/shared': 6.0.0 - '@paralleldrive/cuid2': 2.2.2 - '@types/lodash-es': 4.17.12 - lodash-es: 4.17.21 - msgpackr: 1.10.1 - transitivePeerDependencies: - - supports-color - - '@localfirst/crypto@6.0.0': - dependencies: - '@localfirst/shared': 6.0.0 - '@types/lodash-es': 4.17.12 - bs58: 5.0.0 - libsodium-wrappers-sumo: 0.7.13 - lodash-es: 4.17.21 - msgpackr: 1.10.1 - transitivePeerDependencies: - - supports-color - - '@localfirst/shared@6.0.0': - dependencies: - '@herbcaudill/eventemitter42': 0.3.1 - cd: 0.3.3 - debug: 4.3.7 - eventemitter3: 5.0.1 - lodash-es: 4.17.21 - transitivePeerDependencies: - - supports-color - '@mdx-js/mdx@2.3.0': dependencies: '@types/estree-jsx': 1.0.5 @@ -8734,22 +10979,10 @@ snapshots: '@mjackson/node-fetch-server@0.2.0': {} - '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.2': - optional: true - - '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.2': - optional: true - - '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.2': - optional: true - - '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.2': - optional: true - - '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.2': - optional: true - - '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.2': + '@ngneat/falso@7.3.0': + dependencies: + seedrandom: 3.0.5 + uuid: 8.3.2 optional: true '@noble/hashes@1.4.0': {} @@ -8799,10 +11032,79 @@ snapshots: dependencies: which: 3.0.1 + '@orama/orama@2.1.1': {} + '@paralleldrive/cuid2@2.2.2': dependencies: '@noble/hashes': 1.4.0 + '@parcel/watcher-android-arm64@2.5.1': + optional: true + + '@parcel/watcher-darwin-arm64@2.5.1': + optional: true + + '@parcel/watcher-darwin-x64@2.5.1': + optional: true + + '@parcel/watcher-freebsd-x64@2.5.1': + optional: true + + '@parcel/watcher-linux-arm-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-arm-musl@2.5.1': + optional: true + + '@parcel/watcher-linux-arm64-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-arm64-musl@2.5.1': + optional: true + + '@parcel/watcher-linux-x64-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-x64-musl@2.5.1': + optional: true + + '@parcel/watcher-win32-arm64@2.5.1': + optional: true + + '@parcel/watcher-win32-ia32@2.5.1': + optional: true + + '@parcel/watcher-win32-x64@2.5.1': + optional: true + + '@parcel/watcher@2.5.1': + dependencies: + detect-libc: 1.0.3 + is-glob: 4.0.3 + micromatch: 4.0.5 + node-addon-api: 7.1.1 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.5.1 + '@parcel/watcher-darwin-arm64': 2.5.1 + '@parcel/watcher-darwin-x64': 2.5.1 + '@parcel/watcher-freebsd-x64': 2.5.1 + '@parcel/watcher-linux-arm-glibc': 2.5.1 + '@parcel/watcher-linux-arm-musl': 2.5.1 + '@parcel/watcher-linux-arm64-glibc': 2.5.1 + '@parcel/watcher-linux-arm64-musl': 2.5.1 + '@parcel/watcher-linux-x64-glibc': 2.5.1 + '@parcel/watcher-linux-x64-musl': 2.5.1 + '@parcel/watcher-win32-arm64': 2.5.1 + '@parcel/watcher-win32-ia32': 2.5.1 + '@parcel/watcher-win32-x64': 2.5.1 + optional: true + + '@phosphor-icons/react@2.1.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optional: true + '@pkgjs/parseargs@0.11.0': optional: true @@ -8812,6 +11114,50 @@ snapshots: dependencies: playwright: 1.49.1 + '@preact/signals-core@1.8.0': {} + + '@preact/signals-react@1.3.8(react@18.2.0)': + dependencies: + '@preact/signals-core': 1.8.0 + react: 18.2.0 + use-sync-external-store: 1.4.0(react@18.2.0) + + '@preact/signals@1.3.2(preact@10.26.4)': + dependencies: + '@preact/signals-core': 1.8.0 + preact: 10.26.4 + + '@protobufjs/aspromise@1.1.2': {} + + '@protobufjs/base64@1.1.2': {} + + '@protobufjs/codegen@2.0.4': {} + + '@protobufjs/eventemitter@1.1.0': {} + + '@protobufjs/fetch@1.1.0': + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 1.1.0 + + '@protobufjs/float@1.0.2': {} + + '@protobufjs/inquire@1.1.0': {} + + '@protobufjs/path@1.1.2': {} + + '@protobufjs/pool@1.1.0': {} + + '@protobufjs/utf8@1.1.0': {} + + '@radix-ui/number@1.0.1': + dependencies: + '@babel/runtime': 7.26.0 + optional: true + + '@radix-ui/number@1.1.0': + optional: true + '@radix-ui/primitive@1.0.1': dependencies: '@babel/runtime': 7.24.0 @@ -8820,6 +11166,49 @@ snapshots: '@radix-ui/primitive@1.1.1': {} + '@radix-ui/react-accordion@1.2.3(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-collapsible': 1.1.3(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-context': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-direction': 1.1.0(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-id': 1.1.0(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.2.66)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.66 + '@types/react-dom': 18.2.22 + + '@radix-ui/react-alert-dialog@1.1.6(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-context': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-dialog': 1.1.6(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-slot': 1.1.2(@types/react@18.2.66)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.66 + '@types/react-dom': 18.2.22 + optional: true + + '@radix-ui/react-arrow@1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.26.0 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.66 + '@types/react-dom': 18.2.22 + optional: true + '@radix-ui/react-arrow@1.1.1(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@radix-ui/react-primitive': 2.0.1(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -8829,6 +11218,16 @@ snapshots: '@types/react': 18.2.66 '@types/react-dom': 18.2.22 + '@radix-ui/react-arrow@1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.66 + '@types/react-dom': 18.2.22 + optional: true + '@radix-ui/react-avatar@1.0.4(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.24.4 @@ -8858,6 +11257,36 @@ snapshots: '@types/react': 18.2.66 '@types/react-dom': 18.2.22 + '@radix-ui/react-collapsible@1.1.3(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-context': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-id': 1.1.0(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.2.66)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.66 + '@types/react-dom': 18.2.22 + + '@radix-ui/react-collection@1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.26.0 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.66)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.66 + '@types/react-dom': 18.2.22 + optional: true + '@radix-ui/react-collection@1.1.0(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.2.66)(react@18.2.0) @@ -8870,6 +11299,18 @@ snapshots: '@types/react': 18.2.66 '@types/react-dom': 18.2.22 + '@radix-ui/react-collection@1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-context': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-slot': 1.1.2(@types/react@18.2.66)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.66 + '@types/react-dom': 18.2.22 + '@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.66)(react@18.2.0)': dependencies: '@babel/runtime': 7.24.0 @@ -8889,6 +11330,21 @@ snapshots: optionalDependencies: '@types/react': 18.2.66 + '@radix-ui/react-context-menu@2.2.6(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-context': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-menu': 2.1.6(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.2.66)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.66 + '@types/react-dom': 18.2.22 + optional: true + '@radix-ui/react-context@1.0.1(@types/react@18.2.66)(react@18.2.0)': dependencies: '@babel/runtime': 7.24.4 @@ -8931,12 +11387,58 @@ snapshots: '@types/react': 18.2.66 '@types/react-dom': 18.2.22 + '@radix-ui/react-dialog@1.1.6(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-context': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-id': 1.1.0(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-slot': 1.1.2(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.2.66)(react@18.2.0) + aria-hidden: 1.2.4 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.6.3(@types/react@18.2.66)(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.66 + '@types/react-dom': 18.2.22 + optional: true + + '@radix-ui/react-direction@1.0.1(@types/react@18.2.66)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.26.0 + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.66 + optional: true + '@radix-ui/react-direction@1.1.0(@types/react@18.2.66)(react@18.2.0)': dependencies: react: 18.2.0 optionalDependencies: '@types/react': 18.2.66 + '@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.26.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.2.66)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.66 + '@types/react-dom': 18.2.22 + optional: true + '@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.24.0 @@ -8964,6 +11466,20 @@ snapshots: '@types/react': 18.2.66 '@types/react-dom': 18.2.22 + '@radix-ui/react-dismissable-layer@1.1.5(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.2.66)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.66 + '@types/react-dom': 18.2.22 + optional: true + '@radix-ui/react-focus-guards@1.0.1(@types/react@18.2.66)(react@18.2.0)': dependencies: '@babel/runtime': 7.24.0 @@ -8977,6 +11493,19 @@ snapshots: optionalDependencies: '@types/react': 18.2.66 + '@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.26.0 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.66)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.66 + '@types/react-dom': 18.2.22 + optional: true + '@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.24.0 @@ -9000,6 +11529,18 @@ snapshots: '@types/react': 18.2.66 '@types/react-dom': 18.2.22 + '@radix-ui/react-focus-scope@1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.2.66)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.66 + '@types/react-dom': 18.2.22 + optional: true + '@radix-ui/react-id@1.0.1(@types/react@18.2.66)(react@18.2.0)': dependencies: '@babel/runtime': 7.24.0 @@ -9025,6 +11566,33 @@ snapshots: '@types/react': 18.2.66 '@types/react-dom': 18.2.22 + '@radix-ui/react-menu@2.1.6(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-context': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-direction': 1.1.0(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-id': 1.1.0(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-roving-focus': 1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-slot': 1.1.2(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.2.66)(react@18.2.0) + aria-hidden: 1.2.4 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.6.3(@types/react@18.2.66)(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.66 + '@types/react-dom': 18.2.22 + optional: true + '@radix-ui/react-popover@1.1.4(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@radix-ui/primitive': 1.1.1 @@ -9048,6 +11616,26 @@ snapshots: '@types/react': 18.2.66 '@types/react-dom': 18.2.22 + '@radix-ui/react-popper@1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.26.0 + '@floating-ui/react-dom': 2.0.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-use-rect': 1.0.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/rect': 1.0.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.66 + '@types/react-dom': 18.2.22 + optional: true + '@radix-ui/react-popper@1.2.1(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@floating-ui/react-dom': 2.0.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -9066,6 +11654,36 @@ snapshots: '@types/react': 18.2.66 '@types/react-dom': 18.2.22 + '@radix-ui/react-popper@1.2.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@floating-ui/react-dom': 2.0.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-arrow': 1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-context': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-use-rect': 1.1.0(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-use-size': 1.1.0(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/rect': 1.1.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.66 + '@types/react-dom': 18.2.22 + optional: true + + '@radix-ui/react-portal@1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.26.0 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.66 + '@types/react-dom': 18.2.22 + optional: true + '@radix-ui/react-portal@1.0.4(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.24.0 @@ -9086,6 +11704,17 @@ snapshots: '@types/react': 18.2.66 '@types/react-dom': 18.2.22 + '@radix-ui/react-portal@1.1.4(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.2.66)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.66 + '@types/react-dom': 18.2.22 + optional: true + '@radix-ui/react-presence@1.0.1(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.24.0 @@ -9145,6 +11774,33 @@ snapshots: '@types/react': 18.2.66 '@types/react-dom': 18.2.22 + '@radix-ui/react-primitive@2.0.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/react-slot': 1.1.2(@types/react@18.2.66)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.66 + '@types/react-dom': 18.2.22 + + '@radix-ui/react-radio-group@1.2.3(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-context': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-direction': 1.1.0(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-roving-focus': 1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-use-previous': 1.1.0(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-use-size': 1.1.0(@types/react@18.2.66)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.66 + '@types/react-dom': 18.2.22 + '@radix-ui/react-roving-focus@1.1.0(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@radix-ui/primitive': 1.1.0 @@ -9162,6 +11818,82 @@ snapshots: '@types/react': 18.2.66 '@types/react-dom': 18.2.22 + '@radix-ui/react-roving-focus@1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-context': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-direction': 1.1.0(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-id': 1.1.0(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.2.66)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.66 + '@types/react-dom': 18.2.22 + + '@radix-ui/react-scroll-area@1.2.3(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/number': 1.1.0 + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-context': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-direction': 1.1.0(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.2.66)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.66 + '@types/react-dom': 18.2.22 + optional: true + + '@radix-ui/react-select@1.2.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.26.0 + '@radix-ui/number': 1.0.1 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + aria-hidden: 1.2.4 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.2.66)(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.66 + '@types/react-dom': 18.2.22 + optional: true + + '@radix-ui/react-separator@1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.66 + '@types/react-dom': 18.2.22 + optional: true + '@radix-ui/react-slot@1.0.2(@types/react@18.2.66)(react@18.2.0)': dependencies: '@babel/runtime': 7.24.0 @@ -9184,21 +11916,109 @@ snapshots: optionalDependencies: '@types/react': 18.2.66 - '@radix-ui/react-tabs@1.1.1(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@radix-ui/react-slot@1.1.2(@types/react@18.2.66)(react@18.2.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.2.66)(react@18.2.0) + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.66 + + '@radix-ui/react-switch@1.1.3(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-context': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-use-previous': 1.1.0(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-use-size': 1.1.0(@types/react@18.2.66)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.66 + '@types/react-dom': 18.2.22 + optional: true + + '@radix-ui/react-tabs@1.1.1(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-context': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-direction': 1.1.0(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-id': 1.1.0(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.2.66)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.66 + '@types/react-dom': 18.2.22 + + '@radix-ui/react-toast@1.2.6(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-context': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-visually-hidden': 1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.66 + '@types/react-dom': 18.2.22 + optional: true + + '@radix-ui/react-toggle-group@1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-context': 1.1.1(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-direction': 1.1.0(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-roving-focus': 1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-toggle': 1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.2.66)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.66 + '@types/react-dom': 18.2.22 + optional: true + + '@radix-ui/react-toggle@1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.2.66)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.66 + '@types/react-dom': 18.2.22 + optional: true + + '@radix-ui/react-toolbar@1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@radix-ui/primitive': 1.1.0 + '@radix-ui/primitive': 1.1.1 '@radix-ui/react-context': 1.1.1(@types/react@18.2.66)(react@18.2.0) '@radix-ui/react-direction': 1.1.0(@types/react@18.2.66)(react@18.2.0) - '@radix-ui/react-id': 1.1.0(@types/react@18.2.66)(react@18.2.0) - '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.2.66)(react@18.2.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-roving-focus': 1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-separator': 1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-toggle-group': 1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) optionalDependencies: '@types/react': 18.2.66 '@types/react-dom': 18.2.22 + optional: true '@radix-ui/react-tooltip@1.1.6(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: @@ -9276,12 +12096,29 @@ snapshots: optionalDependencies: '@types/react': 18.2.66 + '@radix-ui/react-use-previous@1.0.1(@types/react@18.2.66)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.26.0 + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.66 + optional: true + '@radix-ui/react-use-previous@1.1.0(@types/react@18.2.66)(react@18.2.0)': dependencies: react: 18.2.0 optionalDependencies: '@types/react': 18.2.66 + '@radix-ui/react-use-rect@1.0.1(@types/react@18.2.66)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.26.0 + '@radix-ui/rect': 1.0.1 + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.66 + optional: true + '@radix-ui/react-use-rect@1.1.0(@types/react@18.2.66)(react@18.2.0)': dependencies: '@radix-ui/rect': 1.1.0 @@ -9289,6 +12126,15 @@ snapshots: optionalDependencies: '@types/react': 18.2.66 + '@radix-ui/react-use-size@1.0.1(@types/react@18.2.66)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.26.0 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.66)(react@18.2.0) + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.66 + optional: true + '@radix-ui/react-use-size@1.1.0(@types/react@18.2.66)(react@18.2.0)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.2.66)(react@18.2.0) @@ -9296,6 +12142,17 @@ snapshots: optionalDependencies: '@types/react': 18.2.66 + '@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.26.0 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.66 + '@types/react-dom': 18.2.22 + optional: true + '@radix-ui/react-visually-hidden@1.1.1(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@radix-ui/react-primitive': 2.0.1(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -9305,6 +12162,21 @@ snapshots: '@types/react': 18.2.66 '@types/react-dom': 18.2.22 + '@radix-ui/react-visually-hidden@1.1.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.66 + '@types/react-dom': 18.2.22 + optional: true + + '@radix-ui/rect@1.0.1': + dependencies: + '@babel/runtime': 7.26.0 + optional: true + '@radix-ui/rect@1.1.0': {} '@react-aria/focus@3.16.2(react@18.2.0)': @@ -9338,7 +12210,7 @@ snapshots: clsx: 2.1.0 react: 18.2.0 - '@react-router/dev@7.2.0(@types/node@20.11.27)(react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(terser@5.36.0)(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(terser@5.36.0))': + '@react-router/dev@7.2.0(@types/node@20.11.27)(react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(sass@1.85.1)(terser@5.36.0)(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))': dependencies: '@babel/core': 7.24.5 '@babel/generator': 7.26.2 @@ -9369,8 +12241,8 @@ snapshots: semver: 7.6.3 set-cookie-parser: 2.6.0 valibot: 0.41.0(typescript@5.6.3) - vite: 5.1.4(@types/node@20.11.27)(terser@5.36.0) - vite-node: 3.0.0-beta.2(@types/node@20.11.27)(terser@5.36.0) + vite: 5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) + vite-node: 3.0.0-beta.2(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: @@ -9395,9 +12267,9 @@ snapshots: optionalDependencies: typescript: 5.6.3 - '@react-router/remix-routes-option-adapter@7.2.0(@react-router/dev@7.2.0(@types/node@20.11.27)(react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(terser@5.36.0)(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(terser@5.36.0)))(typescript@5.6.3)': + '@react-router/remix-routes-option-adapter@7.2.0(@react-router/dev@7.2.0(@types/node@20.11.27)(react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(sass@1.85.1)(terser@5.36.0)(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)))(typescript@5.6.3)': dependencies: - '@react-router/dev': 7.2.0(@types/node@20.11.27)(react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(terser@5.36.0)(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(terser@5.36.0)) + '@react-router/dev': 7.2.0(@types/node@20.11.27)(react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(sass@1.85.1)(terser@5.36.0)(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)) optionalDependencies: typescript: 5.6.3 @@ -9410,7 +12282,7 @@ snapshots: dependencies: react: 18.2.0 - '@remix-run/dev@2.8.1(@types/node@20.11.27)(terser@5.36.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(terser@5.36.0))': + '@remix-run/dev@2.8.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))': dependencies: '@babel/core': 7.24.5 '@babel/generator': 7.26.2 @@ -9426,7 +12298,7 @@ snapshots: '@remix-run/router': 1.15.3-pre.0 '@remix-run/server-runtime': 2.8.1(typescript@5.6.3) '@types/mdx': 2.0.11 - '@vanilla-extract/integration': 6.5.0(@types/node@20.11.27)(terser@5.36.0) + '@vanilla-extract/integration': 6.5.0(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) arg: 5.0.2 cacache: 17.1.4 chalk: 4.1.2 @@ -9467,7 +12339,7 @@ snapshots: ws: 7.5.9 optionalDependencies: typescript: 5.6.3 - vite: 5.1.4(@types/node@20.11.27)(terser@5.36.0) + vite: 5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) transitivePeerDependencies: - '@types/node' - bluebird @@ -9510,9 +12382,9 @@ snapshots: optionalDependencies: typescript: 5.6.3 - '@remix-run/v1-route-convention@0.1.4(@remix-run/dev@2.8.1(@types/node@20.11.27)(terser@5.36.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(terser@5.36.0)))': + '@remix-run/v1-route-convention@0.1.4(@remix-run/dev@2.8.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)))': dependencies: - '@remix-run/dev': 2.8.1(@types/node@20.11.27)(terser@5.36.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(terser@5.36.0)) + '@remix-run/dev': 2.8.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)) minimatch: 7.4.6 '@remix-run/web-blob@3.1.0': @@ -9682,6 +12554,8 @@ snapshots: '@sindresorhus/merge-streams@2.3.0': {} + '@standard-schema/spec@1.0.0': {} + '@storybook/addon-actions@8.4.6(storybook@8.4.6(prettier@3.2.5))': dependencies: '@storybook/global': 5.0.0 @@ -9788,13 +12662,13 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@storybook/builder-vite@8.4.6(storybook@8.4.6(prettier@3.2.5))(vite@5.1.4(@types/node@20.11.27)(terser@5.36.0))': + '@storybook/builder-vite@8.4.6(storybook@8.4.6(prettier@3.2.5))(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))': dependencies: '@storybook/csf-plugin': 8.4.6(storybook@8.4.6(prettier@3.2.5)) browser-assert: 1.2.1 storybook: 8.4.6(prettier@3.2.5) ts-dedent: 2.2.0 - vite: 5.1.4(@types/node@20.11.27)(terser@5.36.0) + vite: 5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) '@storybook/channels@8.0.8': dependencies: @@ -9872,11 +12746,11 @@ snapshots: react-dom: 18.2.0(react@18.2.0) storybook: 8.4.6(prettier@3.2.5) - '@storybook/react-vite@8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@3.2.5)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.25.0)(storybook@8.4.6(prettier@3.2.5))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(terser@5.36.0))': + '@storybook/react-vite@8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@3.2.5)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.25.0)(storybook@8.4.6(prettier@3.2.5))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.4.2(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(terser@5.36.0)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.4.2(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)) '@rollup/pluginutils': 5.1.0(rollup@4.25.0) - '@storybook/builder-vite': 8.4.6(storybook@8.4.6(prettier@3.2.5))(vite@5.1.4(@types/node@20.11.27)(terser@5.36.0)) + '@storybook/builder-vite': 8.4.6(storybook@8.4.6(prettier@3.2.5))(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)) '@storybook/react': 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@3.2.5)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.4.6(prettier@3.2.5))(typescript@5.6.3) find-up: 5.0.0 magic-string: 0.30.8 @@ -9886,7 +12760,7 @@ snapshots: resolve: 1.22.8 storybook: 8.4.6(prettier@3.2.5) tsconfig-paths: 4.2.0 - vite: 5.1.4(@types/node@20.11.27)(terser@5.36.0) + vite: 5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) transitivePeerDependencies: - '@storybook/test' - rollup @@ -10005,6 +12879,11 @@ snapshots: dependencies: tslib: 2.6.2 + '@tailwindcss/container-queries@0.1.1(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)))': + dependencies: + tailwindcss: 3.4.3(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)) + optional: true + '@tailwindcss/forms@0.5.7(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)))': dependencies: mini-svg-data-uri: 1.4.4 @@ -10111,6 +12990,11 @@ snapshots: '@types/estree@1.0.6': {} + '@types/glob@7.2.0': + dependencies: + '@types/minimatch': 5.1.2 + '@types/node': 20.17.6 + '@types/hast@2.3.10': dependencies: '@types/unist': 2.0.10 @@ -10119,11 +13003,8 @@ snapshots: '@types/json5@0.0.29': {} - '@types/lodash-es@4.17.12': - dependencies: - '@types/lodash': 4.17.0 - - '@types/lodash@4.17.0': {} + '@types/less@3.0.8': + optional: true '@types/mdast@3.0.15': dependencies: @@ -10131,6 +13012,8 @@ snapshots: '@types/mdx@2.0.11': {} + '@types/minimatch@5.1.2': {} + '@types/ms@0.7.34': {} '@types/node@20.11.27': @@ -10161,10 +13044,20 @@ snapshots: '@types/resolve@1.20.6': {} + '@types/sass@1.45.0': + dependencies: + sass: 1.85.1 + optional: true + '@types/scheduler@0.16.8': {} '@types/semver@7.5.8': {} + '@types/stylus@0.48.43': + dependencies: + '@types/node': 20.17.6 + optional: true + '@types/trusted-types@2.0.7': {} '@types/ua-parser-js@0.7.39': {} @@ -10324,7 +13217,7 @@ snapshots: modern-ahocorasick: 1.0.1 outdent: 0.8.0 - '@vanilla-extract/integration@6.5.0(@types/node@20.11.27)(terser@5.36.0)': + '@vanilla-extract/integration@6.5.0(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)': dependencies: '@babel/core': 7.24.5 '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.24.5) @@ -10337,8 +13230,8 @@ snapshots: lodash: 4.17.21 mlly: 1.6.1 outdent: 0.8.0 - vite: 5.1.4(@types/node@20.11.27)(terser@5.36.0) - vite-node: 1.5.0(@types/node@20.11.27)(terser@5.36.0) + vite: 5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) + vite-node: 1.5.0(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) transitivePeerDependencies: - '@types/node' - less @@ -10351,14 +13244,14 @@ snapshots: '@vanilla-extract/private@1.0.3': {} - '@vitejs/plugin-react@4.2.1(vite@5.1.4(@types/node@20.11.27)(terser@5.36.0))': + '@vitejs/plugin-react@4.2.1(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))': dependencies: '@babel/core': 7.24.0 '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.24.0) '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.24.0) '@types/babel__core': 7.20.5 react-refresh: 0.14.0 - vite: 5.1.4(@types/node@20.11.27)(terser@5.36.0) + vite: 5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) transitivePeerDependencies: - supports-color @@ -10501,6 +13394,16 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@xtuc/long': 4.2.2 + '@xstate/react@3.2.2(@types/react@18.2.66)(react@18.2.0)(xstate@4.38.3)': + dependencies: + react: 18.2.0 + use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.66)(react@18.2.0) + use-sync-external-store: 1.4.0(react@18.2.0) + optionalDependencies: + xstate: 4.38.3 + transitivePeerDependencies: + - '@types/react' + '@xtuc/ieee754@1.2.0': {} '@xtuc/long@4.2.2': {} @@ -10512,6 +13415,16 @@ snapshots: dependencies: event-target-shim: 5.0.1 + abstract-level@1.0.4: + dependencies: + buffer: 6.0.3 + catering: 2.1.1 + is-buffer: 2.0.5 + level-supports: 4.0.1 + level-transcoder: 1.0.1 + module-error: 1.0.2 + queue-microtask: 1.2.3 + accepts@1.3.8: dependencies: mime-types: 2.1.35 @@ -10558,6 +13471,8 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + alea@1.0.1: {} + ansi-escapes@6.2.0: dependencies: type-fest: 3.13.1 @@ -10689,6 +13604,14 @@ snapshots: arrify@3.0.0: {} + assert@2.1.0: + dependencies: + call-bind: 1.0.7 + is-nan: 1.3.2 + object-is: 1.1.6 + object.assign: 4.1.5 + util: 0.12.5 + assertion-error@1.1.0: {} assertion-error@2.0.1: {} @@ -10721,6 +13644,8 @@ snapshots: dependencies: possible-typed-array-names: 1.0.0 + b4a@1.6.7: {} + babel-dead-code-elimination@1.0.9: dependencies: '@babel/core': 7.24.5 @@ -10758,6 +13683,13 @@ snapshots: balanced-match@1.0.2: {} + bare-events@2.5.4: + optional: true + + base-x@3.0.11: + dependencies: + safe-buffer: 5.2.1 + base-x@4.0.0: {} base64-js@1.5.1: {} @@ -10768,12 +13700,26 @@ snapshots: binary-extensions@2.3.0: {} + bip39@3.1.0: + dependencies: + '@noble/hashes': 1.4.0 + bl@4.1.0: dependencies: buffer: 5.7.1 inherits: 2.0.4 readable-stream: 3.6.2 + blake2b-wasm@2.4.0: + dependencies: + b4a: 1.6.7 + nanoassert: 2.0.0 + + blake2b@2.1.4: + dependencies: + blake2b-wasm: 2.4.0 + nanoassert: 2.0.0 + body-parser@1.20.2: dependencies: bytes: 3.1.2 @@ -10791,6 +13737,8 @@ snapshots: transitivePeerDependencies: - supports-color + boolean@3.2.0: {} + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 @@ -10806,6 +13754,13 @@ snapshots: browser-assert@1.2.1: {} + browser-level@1.0.1: + dependencies: + abstract-level: 1.0.4 + catering: 2.1.1 + module-error: 1.0.2 + run-parallel-limit: 1.1.0 + browserify-zlib@0.1.4: dependencies: pako: 0.2.9 @@ -10833,6 +13788,17 @@ snapshots: '@noble/hashes': 1.4.0 bs58: 5.0.0 + buffer-alloc-unsafe@1.1.0: {} + + buffer-alloc@1.2.0: + dependencies: + buffer-alloc-unsafe: 1.1.0 + buffer-fill: 1.0.0 + + buffer-fill@1.0.0: {} + + buffer-from@0.1.2: {} + buffer-from@1.1.2: {} buffer@5.7.1: @@ -10840,6 +13806,11 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + builtin-modules@3.3.0: {} builtins@5.0.1: @@ -10865,6 +13836,11 @@ snapshots: tar: 6.2.0 unique-filename: 3.0.0 + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + call-bind@1.0.7: dependencies: es-define-property: 1.0.0 @@ -10873,6 +13849,18 @@ snapshots: get-intrinsic: 1.2.4 set-function-length: 1.2.2 + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.0 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + callsites@3.1.0: {} camelcase-css@2.0.1: {} @@ -10883,6 +13871,8 @@ snapshots: caniuse-lite@1.0.30001680: {} + catering@2.1.1: {} + cbor-extract@2.2.0: dependencies: node-gyp-build-optional-packages: 5.1.1 @@ -10901,7 +13891,9 @@ snapshots: ccount@2.0.1: {} - cd@0.3.3: {} + chacha20-universal@1.0.4: + dependencies: + nanoassert: 2.0.0 chai@4.4.1: dependencies: @@ -10981,6 +13973,14 @@ snapshots: dependencies: clsx: 2.0.0 + classic-level@1.4.1: + dependencies: + abstract-level: 1.0.4 + catering: 2.1.1 + module-error: 1.0.2 + napi-macros: 2.2.2 + node-gyp-build: 4.8.4 + clean-regexp@1.0.0: dependencies: escape-string-regexp: 1.0.5 @@ -11017,6 +14017,9 @@ snapshots: color-name@1.1.4: {} + colorjs.io@0.5.2: + optional: true + comma-separated-tokens@2.0.3: {} commander@2.20.3: {} @@ -11029,6 +14032,10 @@ snapshots: compare-versions@6.1.0: {} + component-emitter@2.0.0: {} + + compress-json@2.1.3: {} + concat-map@0.0.1: {} confusing-browser-globals@1.0.11: {} @@ -11061,11 +14068,6 @@ snapshots: core-util-is@1.0.3: {} - cors@2.8.5: - dependencies: - object-assign: 4.1.1 - vary: 1.1.2 - cosmiconfig@8.3.6(typescript@5.6.3): dependencies: import-fresh: 3.3.0 @@ -11075,6 +14077,8 @@ snapshots: optionalDependencies: typescript: 5.6.3 + crc-32@1.2.2: {} + create-require@1.1.1: {} cross-env@7.0.3: @@ -11127,6 +14131,8 @@ snapshots: es-errors: 1.3.0 is-data-view: 1.0.1 + date-fns@3.6.0: {} + debug@2.6.9: dependencies: ms: 2.0.0 @@ -11151,6 +14157,10 @@ snapshots: dependencies: character-entities: 2.0.2 + decompress-response@6.0.0: + dependencies: + mimic-response: 3.1.0 + dedent@1.5.3: {} deep-eql@4.1.3: @@ -11159,6 +14169,8 @@ snapshots: deep-eql@5.0.2: {} + deep-extend@0.6.0: {} + deep-is@0.1.4: {} deep-object-diff@1.1.9: {} @@ -11185,15 +14197,28 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 + del@5.1.0: + dependencies: + globby: 10.0.2 + graceful-fs: 4.2.11 + is-glob: 4.0.3 + is-path-cwd: 2.2.0 + is-path-inside: 3.0.3 + p-map: 3.0.0 + rimraf: 3.0.2 + slash: 3.0.0 + depd@2.0.0: {} dequal@2.0.3: {} destroy@1.2.0: {} - detect-libc@2.0.2: + detect-libc@1.0.3: optional: true + detect-libc@2.0.2: {} + detect-node-es@1.1.0: {} didyoumean@1.2.2: {} @@ -11229,6 +14254,12 @@ snapshots: dotenv@16.4.5: {} + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + duplexify@3.7.1: dependencies: end-of-stream: 1.4.4 @@ -11240,7 +14271,10 @@ snapshots: ee-first@1.1.1: {} - effect@3.5.7: {} + effect@3.13.10: + dependencies: + '@standard-schema/spec': 1.0.0 + fast-check: 3.23.2 ejs@3.1.10: dependencies: @@ -11250,6 +14284,10 @@ snapshots: electron-to-chromium@1.5.55: {} + emittery@0.6.0: {} + + emoji-mart@5.6.0: {} + emoji-regex@10.3.0: {} emoji-regex@8.0.0: {} @@ -11386,6 +14424,8 @@ snapshots: dependencies: get-intrinsic: 1.2.4 + es-define-property@1.0.1: {} + es-errors@1.3.0: {} es-iterator-helpers@1.0.17: @@ -11412,6 +14452,10 @@ snapshots: dependencies: es-errors: 1.3.0 + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + es-set-tostringtag@2.0.3: dependencies: get-intrinsic: 1.2.4 @@ -11442,6 +14486,16 @@ snapshots: transitivePeerDependencies: - supports-color + esbuild-style-plugin@1.6.3: + dependencies: + '@types/less': 3.0.8 + '@types/sass': 1.45.0 + '@types/stylus': 0.48.43 + glob: 10.3.10 + postcss: 8.4.35 + postcss-modules: 6.0.0(postcss@8.4.35) + optional: true + esbuild@0.20.1: optionalDependencies: '@esbuild/aix-ppc64': 0.20.1 @@ -11887,6 +14941,8 @@ snapshots: exit-hook@2.2.1: {} + expand-template@2.0.3: {} + express@4.18.3: dependencies: accepts: 1.3.8 @@ -11925,7 +14981,7 @@ snapshots: extend@3.0.2: {} - fast-check@3.20.0: + fast-check@3.23.2: dependencies: pure-rand: 6.1.0 @@ -11933,6 +14989,8 @@ snapshots: fast-diff@1.3.0: {} + fast-fifo@1.3.2: {} + fast-glob@3.3.2: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -11990,6 +15048,10 @@ snapshots: find-up-simple@1.0.0: {} + find-up@3.0.0: + dependencies: + locate-path: 3.0.0 + find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -12032,6 +15094,10 @@ snapshots: fs-constants@1.0.0: {} + fs-ext@2.1.1: + dependencies: + nan: 2.22.2 + fs-extra@10.1.0: dependencies: graceful-fs: 4.2.11 @@ -12096,12 +15162,30 @@ snapshots: has-symbols: 1.0.3 hasown: 2.0.2 + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + get-nonce@1.0.1: {} get-own-enumerable-property-symbols@3.0.2: {} get-port@5.1.1: {} + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + get-set-props@0.1.0: {} get-stdin@9.0.0: {} @@ -12120,6 +15204,8 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 + github-from-package@0.0.0: {} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -12159,6 +15245,17 @@ snapshots: dependencies: define-properties: 1.2.1 + globby@10.0.2: + dependencies: + '@types/glob': 7.2.0 + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + glob: 7.2.3 + ignore: 5.3.1 + merge2: 1.4.1 + slash: 3.0.0 + globby@11.1.0: dependencies: array-union: 2.1.0 @@ -12183,6 +15280,8 @@ snapshots: dependencies: get-intrinsic: 1.2.4 + gopd@1.2.0: {} + graceful-fs@4.2.11: {} graphemer@1.4.0: {} @@ -12210,6 +15309,8 @@ snapshots: has-symbols@1.0.3: {} + has-symbols@1.1.0: {} + has-tostringtag@1.0.2: dependencies: has-symbols: 1.0.3 @@ -12246,6 +15347,11 @@ snapshots: dependencies: lru-cache: 7.18.3 + html-parse-stringify@3.0.1: + dependencies: + void-elements: 3.1.0 + optional: true + http-errors@2.0.0: dependencies: depd: 2.0.0 @@ -12258,6 +15364,16 @@ snapshots: human-signals@5.0.0: {} + hypercore-crypto@2.3.2: + dependencies: + sodium-universal: 3.1.0 + uint64be: 3.0.0 + + i18next@21.10.0: + dependencies: + '@babel/runtime': 7.26.0 + optional: true + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 @@ -12272,6 +15388,11 @@ snapshots: ignore@5.3.1: {} + immediate@3.0.6: {} + + immutable@5.0.3: + optional: true + import-fresh@3.3.0: dependencies: parent-module: 1.0.1 @@ -12292,6 +15413,8 @@ snapshots: inherits@2.0.4: {} + ini@1.3.8: {} + inline-style-parser@0.1.1: {} internal-slot@1.0.7: @@ -12418,6 +15541,11 @@ snapshots: is-module@1.0.0: {} + is-nan@1.3.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + is-negated-glob@1.0.0: {} is-negative-zero@2.0.3: {} @@ -12435,6 +15563,12 @@ snapshots: is-obj@1.0.1: {} + is-options@1.0.2: + dependencies: + b4a: 1.6.7 + + is-path-cwd@2.2.0: {} + is-path-inside@3.0.3: {} is-plain-obj@3.0.0: {} @@ -12599,6 +15733,14 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} + json-stable-stringify@1.2.1: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + isarray: 2.0.5 + jsonify: 0.0.1 + object-keys: 1.1.1 + json5@1.0.2: dependencies: minimist: 1.2.8 @@ -12613,6 +15755,8 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 + jsonify@0.0.1: {} + jsonpointer@5.0.1: {} jsx-ast-utils@3.3.5: @@ -12622,6 +15766,10 @@ snapshots: object.assign: 4.1.5 object.values: 1.1.7 + jwt-decode@4.0.0: {} + + keyborg@2.6.0: {} + keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -12630,6 +15778,21 @@ snapshots: kolorist@1.8.0: {} + layerr@3.0.0: {} + + level-supports@4.0.1: {} + + level-transcoder@1.0.1: + dependencies: + buffer: 6.0.3 + module-error: 1.0.2 + + level@8.0.1: + dependencies: + abstract-level: 1.0.4 + browser-level: 1.0.1 + classic-level: 1.4.1 + leven@3.1.0: {} levn@0.4.1: @@ -12637,11 +15800,9 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - libsodium-sumo@0.7.13: {} - - libsodium-wrappers-sumo@0.7.13: + lie@3.1.1: dependencies: - libsodium-sumo: 0.7.13 + immediate: 3.0.6 lilconfig@2.1.0: {} @@ -12669,6 +15830,15 @@ snapshots: mlly: 1.6.1 pkg-types: 1.0.3 + localforage@1.10.0: + dependencies: + lie: 3.1.1 + + locate-path@3.0.0: + dependencies: + p-locate: 3.0.0 + path-exists: 3.0.0 + locate-path@5.0.0: dependencies: p-locate: 4.1.0 @@ -12687,8 +15857,20 @@ snapshots: lodash.debounce@4.0.8: {} + lodash.defaultsdeep@4.6.1: {} + + lodash.get@4.4.2: {} + + lodash.isequal@4.5.0: {} + + lodash.isequalwith@4.4.0: {} + + lodash.ismatch@4.4.0: {} + lodash.merge@4.6.2: {} + lodash.omit@4.5.0: {} + lodash.sortby@4.7.0: {} lodash@4.17.21: {} @@ -12703,6 +15885,8 @@ snapshots: chalk: 5.3.0 is-unicode-supported: 1.3.0 + long@5.3.1: {} + longest-streak@3.1.0: {} loose-envify@1.4.0: @@ -12753,6 +15937,8 @@ snapshots: markdown-extensions@1.1.1: {} + math-intrinsics@1.1.0: {} + mdast-util-definitions@5.1.2: dependencies: '@types/mdast': 3.0.15 @@ -13116,6 +16302,8 @@ snapshots: mimic-fn@4.0.0: {} + mimic-response@3.1.0: {} + min-indent@1.0.1: {} mini-svg-data-uri@1.4.4: {} @@ -13182,39 +16370,62 @@ snapshots: modern-ahocorasick@1.0.1: {} - mri@1.2.0: {} + module-error@1.0.2: {} + + mri@1.2.0: {} + + mrmime@1.0.1: {} + + ms@2.0.0: {} + + ms@2.1.2: {} + + ms@2.1.3: {} + + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + nan@2.22.2: {} - mrmime@1.0.1: {} + nanoassert@2.0.0: {} - ms@2.0.0: {} + nanocustomassert@1.0.0: {} - ms@2.1.2: {} + nanoerror@1.3.4: + dependencies: + quick-format-unescaped: 3.0.3 - ms@2.1.3: {} + nanoid@3.3.7: {} - msgpackr-extract@3.0.2: - dependencies: - node-gyp-build-optional-packages: 5.0.7 - optionalDependencies: - '@msgpackr-extract/msgpackr-extract-darwin-arm64': 3.0.2 - '@msgpackr-extract/msgpackr-extract-darwin-x64': 3.0.2 - '@msgpackr-extract/msgpackr-extract-linux-arm': 3.0.2 - '@msgpackr-extract/msgpackr-extract-linux-arm64': 3.0.2 - '@msgpackr-extract/msgpackr-extract-linux-x64': 3.0.2 - '@msgpackr-extract/msgpackr-extract-win32-x64': 3.0.2 + nanoid@3.3.9: optional: true - msgpackr@1.10.1: - optionalDependencies: - msgpackr-extract: 3.0.2 + nanomessage-rpc@3.2.0: + dependencies: + emittery: 0.6.0 + end-of-stream: 1.4.4 + nanocustomassert: 1.0.0 + nanoerror: 1.3.4 + nanomessage: 8.4.0 + nanoresource-promise: 2.0.0 + varint: 5.0.2 - mz@2.7.0: + nanomessage@8.4.0: dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 + fastq: 1.17.1 + nanocustomassert: 1.0.0 + nanoerror: 1.3.4 + nanoresource-promise: 2.0.0 + varint: 5.0.2 - nanoid@3.3.7: {} + nanoresource-promise@2.0.0: {} + + napi-build-utils@2.0.0: {} + + napi-macros@2.2.2: {} natural-compare@1.4.0: {} @@ -13222,6 +16433,8 @@ snapshots: neo-async@2.6.2: {} + next-tick@1.1.0: {} + nice-try@1.0.5: {} no-case@3.0.4: @@ -13229,14 +16442,27 @@ snapshots: lower-case: 2.0.2 tslib: 2.6.2 - node-gyp-build-optional-packages@5.0.7: + node-abi@3.74.0: + dependencies: + semver: 7.6.3 + + node-addon-api@7.1.1: optional: true + node-datachannel@0.9.2: + dependencies: + node-domexception: 2.0.1 + prebuild-install: 7.1.3 + + node-domexception@2.0.1: {} + node-gyp-build-optional-packages@5.1.1: dependencies: detect-libc: 2.0.2 optional: true + node-gyp-build@4.8.4: {} + node-releases@2.0.14: {} node-releases@2.0.18: {} @@ -13307,6 +16533,11 @@ snapshots: object-inspect@1.13.1: {} + object-is@1.1.6: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + object-keys@1.1.1: {} object.assign@4.1.5: @@ -13399,6 +16630,8 @@ snapshots: outdent@0.8.0: {} + p-defer@3.0.0: {} + p-limit@2.3.0: dependencies: p-try: 2.2.0 @@ -13415,6 +16648,10 @@ snapshots: dependencies: yocto-queue: 1.0.0 + p-locate@3.0.0: + dependencies: + p-limit: 2.3.0 + p-locate@4.1.0: dependencies: p-limit: 2.3.0 @@ -13427,6 +16664,10 @@ snapshots: dependencies: p-limit: 4.0.0 + p-map@3.0.0: + dependencies: + aggregate-error: 3.1.0 + p-map@4.0.0: dependencies: aggregate-error: 3.1.0 @@ -13466,6 +16707,10 @@ snapshots: parseurl@1.3.3: {} + path-browserify@1.0.1: {} + + path-exists@3.0.0: {} + path-exists@4.0.0: {} path-exists@5.0.0: {} @@ -13527,6 +16772,8 @@ snapshots: pify@3.0.0: {} + pify@5.0.0: {} + pirates@4.0.6: {} pkg-dir@5.0.0: @@ -13543,6 +16790,12 @@ snapshots: mlly: 1.6.1 pathe: 1.1.2 + pkg-up@3.1.0: + dependencies: + find-up: 3.0.0 + + platform@1.3.6: {} + playwright-core@1.49.1: {} playwright@1.49.1: @@ -13567,6 +16820,14 @@ snapshots: dependencies: postcss: 8.4.35 + postcss-import@14.1.0(postcss@8.4.35): + dependencies: + postcss: 8.4.35 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.8 + optional: true + postcss-import@15.1.0(postcss@8.4.35): dependencies: postcss: 8.4.35 @@ -13579,6 +16840,15 @@ snapshots: camelcase-css: 2.0.1 postcss: 8.4.35 + postcss-load-config@3.1.4(postcss@8.4.35)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)): + dependencies: + lilconfig: 2.1.0 + yaml: 1.10.2 + optionalDependencies: + postcss: 8.4.35 + ts-node: 10.9.2(@types/node@20.11.27)(typescript@5.6.3) + optional: true + postcss-load-config@4.0.2(postcss@8.4.35)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)): dependencies: lilconfig: 3.1.1 @@ -13620,6 +16890,12 @@ snapshots: postcss-modules-values: 4.0.0(postcss@8.4.35) string-hash: 1.1.3 + postcss-nested@6.0.0(postcss@8.4.35): + dependencies: + postcss: 8.4.35 + postcss-selector-parser: 6.0.16 + optional: true + postcss-nested@6.0.1(postcss@8.4.35): dependencies: postcss: 8.4.35 @@ -13638,6 +16914,30 @@ snapshots: picocolors: 1.0.0 source-map-js: 1.0.2 + postcss@8.5.3: + dependencies: + nanoid: 3.3.9 + picocolors: 1.1.1 + source-map-js: 1.2.1 + optional: true + + preact@10.26.4: {} + + prebuild-install@7.1.3: + dependencies: + detect-libc: 2.0.2 + expand-template: 2.0.3 + github-from-package: 0.0.0 + minimist: 1.2.8 + mkdirp-classic: 0.5.3 + napi-build-utils: 2.0.0 + node-abi: 3.74.0 + pump: 3.0.0 + rc: 1.2.8 + simple-get: 4.0.1 + tar-fs: 2.1.1 + tunnel-agent: 0.6.0 + prelude-ls@1.2.1: {} prettier-linter-helpers@1.0.0: @@ -13695,6 +16995,21 @@ snapshots: proto-props@2.0.0: {} + protobufjs@7.4.0: + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/node': 20.17.6 + long: 5.3.1 + proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 @@ -13722,12 +17037,41 @@ snapshots: qr.js@0.0.0: {} + qrcode-generator@1.4.4: {} + qs@6.11.0: dependencies: side-channel: 1.0.6 queue-microtask@1.2.3: {} + queue-tick@1.0.1: {} + + quick-format-unescaped@3.0.3: {} + + quick-lru@5.1.1: + optional: true + + race-as-promised@0.0.2: {} + + random-access-file@2.2.1: + dependencies: + mkdirp-classic: 0.5.3 + random-access-storage: 1.4.3 + + random-access-memory@4.1.0: + dependencies: + b4a: 1.6.7 + inherits: 2.0.4 + is-options: 1.0.2 + random-access-storage: 1.4.3 + + random-access-storage@1.4.3: + dependencies: + events: 3.3.0 + inherits: 2.0.4 + queue-tick: 1.0.1 + randombytes@2.1.0: dependencies: safe-buffer: 5.2.1 @@ -13741,6 +17085,20 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 + rc@1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + + rci@0.1.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + dependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + use-code-input: 0.0.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + optional: true + react-docgen-typescript@2.2.2(typescript@5.6.3): dependencies: typescript: 5.6.3 @@ -13766,6 +17124,11 @@ snapshots: react: 18.2.0 scheduler: 0.23.0 + react-error-boundary@4.1.2(react@18.2.0): + dependencies: + '@babel/runtime': 7.26.0 + react: 18.2.0 + react-hook-form@7.51.3(react@18.2.0): dependencies: react: 18.2.0 @@ -13775,6 +17138,16 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + react-i18next@11.18.6(i18next@21.10.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + dependencies: + '@babel/runtime': 7.26.0 + html-parse-stringify: 3.0.1 + i18next: 21.10.0 + react: 18.2.0 + optionalDependencies: + react-dom: 18.2.0(react@18.2.0) + optional: true + react-inspector@6.0.2(react@18.2.0): dependencies: react: 18.2.0 @@ -13795,6 +17168,11 @@ snapshots: qr.js: 0.0.0 react: 18.2.0 + react-qr-rounded@1.0.0(react@18.2.0): + dependencies: + qrcode-generator: 1.4.4 + react: 18.2.0 + react-refresh@0.14.0: {} react-remove-scroll-bar@2.3.6(@types/react@18.2.66)(react@18.2.0): @@ -13835,6 +17213,18 @@ snapshots: optionalDependencies: '@types/react': 18.2.66 + react-remove-scroll@2.6.3(@types/react@18.2.66)(react@18.2.0): + dependencies: + react: 18.2.0 + react-remove-scroll-bar: 2.3.8(@types/react@18.2.66)(react@18.2.0) + react-style-singleton: 2.2.3(@types/react@18.2.66)(react@18.2.0) + tslib: 2.6.2 + use-callback-ref: 1.3.3(@types/react@18.2.66)(react@18.2.0) + use-sidecar: 1.1.3(@types/react@18.2.66)(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.66 + optional: true + react-router-dom@6.22.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@remix-run/router': 1.15.3 @@ -13883,10 +17273,6 @@ snapshots: transitivePeerDependencies: - '@types/react' - react-usestateref@1.0.8(react@18.2.0): - dependencies: - react: 18.2.0 - react@18.2.0: dependencies: loose-envify: 1.4.0 @@ -14035,10 +17421,10 @@ snapshots: mdast-util-to-hast: 12.3.0 unified: 10.1.2 - remix-flat-routes@0.6.4(@remix-run/dev@2.8.1(@types/node@20.11.27)(terser@5.36.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(terser@5.36.0))): + remix-flat-routes@0.6.4(@remix-run/dev@2.8.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))): dependencies: - '@remix-run/dev': 2.8.1(@types/node@20.11.27)(terser@5.36.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(terser@5.36.0)) - '@remix-run/v1-route-convention': 0.1.4(@remix-run/dev@2.8.1(@types/node@20.11.27)(terser@5.36.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(terser@5.36.0))) + '@remix-run/dev': 2.8.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)) + '@remix-run/v1-route-convention': 0.1.4(@remix-run/dev@2.8.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))) fs-extra: 11.2.0 minimatch: 5.1.6 @@ -14079,10 +17465,6 @@ snapshots: dependencies: glob: 7.2.3 - rimraf@5.0.5: - dependencies: - glob: 10.3.10 - rollup-plugin-terser@7.0.2(rollup@4.25.0): dependencies: '@babel/code-frame': 7.26.2 @@ -14134,6 +17516,14 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.25.0 fsevents: 2.3.3 + rtl-css-js@1.16.1: + dependencies: + '@babel/runtime': 7.26.0 + + run-parallel-limit@1.1.0: + dependencies: + queue-microtask: 1.2.3 + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -14161,6 +17551,15 @@ snapshots: safer-buffer@2.1.2: {} + sass@1.85.1: + dependencies: + chokidar: 4.0.3 + immutable: 5.0.3 + source-map-js: 1.0.2 + optionalDependencies: + '@parcel/watcher': 2.5.1 + optional: true + scheduler@0.23.0: dependencies: loose-envify: 1.4.0 @@ -14175,6 +17574,9 @@ snapshots: seed-random@2.2.0: {} + seedrandom@3.0.5: + optional: true + semver@5.7.2: {} semver@6.3.1: {} @@ -14240,6 +17642,26 @@ snapshots: setprototypeof@1.2.0: {} + sha256-universal@1.2.1: + dependencies: + b4a: 1.6.7 + sha256-wasm: 2.2.2 + + sha256-wasm@2.2.2: + dependencies: + b4a: 1.6.7 + nanoassert: 2.0.0 + + sha512-universal@1.2.1: + dependencies: + b4a: 1.6.7 + sha512-wasm: 2.3.4 + + sha512-wasm@2.3.4: + dependencies: + b4a: 1.6.7 + nanoassert: 2.0.0 + shebang-command@1.2.0: dependencies: shebang-regex: 1.0.0 @@ -14267,6 +17689,18 @@ snapshots: signal-exit@4.1.0: {} + simple-concat@1.0.1: {} + + simple-get@4.0.1: + dependencies: + decompress-response: 6.0.0 + once: 1.4.0 + simple-concat: 1.0.1 + + siphash24@1.3.1: + dependencies: + nanoassert: 2.0.0 + slash@3.0.0: {} slash@5.1.0: {} @@ -14276,8 +17710,38 @@ snapshots: dot-case: 3.0.4 tslib: 2.6.2 + sodium-javascript@0.8.0: + dependencies: + blake2b: 2.1.4 + chacha20-universal: 1.0.4 + nanoassert: 2.0.0 + sha256-universal: 1.2.1 + sha512-universal: 1.2.1 + siphash24: 1.3.1 + xsalsa20: 1.2.0 + + sodium-native@3.4.1: + dependencies: + node-gyp-build: 4.8.4 + + sodium-universal@3.1.0: + dependencies: + blake2b: 2.1.4 + chacha20-universal: 1.0.4 + nanoassert: 2.0.0 + resolve: 1.22.8 + sha256-universal: 1.2.1 + sha512-universal: 1.2.1 + siphash24: 1.3.1 + sodium-javascript: 0.8.0 + sodium-native: 3.4.1 + xsalsa20: 1.2.0 + source-map-js@1.0.2: {} + source-map-js@1.2.1: + optional: true + source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 @@ -14349,6 +17813,17 @@ snapshots: stream-slice@0.1.2: {} + stream@0.0.3: + dependencies: + component-emitter: 2.0.0 + + streamx@2.22.0: + dependencies: + fast-fifo: 1.3.2 + text-decoder: 1.2.3 + optionalDependencies: + bare-events: 2.5.4 + string-hash@1.1.3: {} string-width@4.2.3: @@ -14470,6 +17945,8 @@ snapshots: dependencies: min-indent: 1.0.1 + strip-json-comments@2.0.1: {} + strip-json-comments@3.1.1: {} strip-literal@1.3.0: @@ -14484,6 +17961,8 @@ snapshots: dependencies: inline-style-parser: 0.1.1 + stylis@4.3.6: {} + sucrase@3.35.0: dependencies: '@jridgewell/gen-mapping': 0.3.5 @@ -14524,14 +18003,65 @@ snapshots: tabbable@6.2.0: {} + tabster@8.5.1: + dependencies: + keyborg: 2.6.0 + tslib: 2.6.2 + tailwind-merge@2.2.1: dependencies: '@babel/runtime': 7.24.0 + tailwind-scrollbar@3.1.0(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))): + dependencies: + tailwindcss: 3.4.3(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)) + optional: true + tailwindcss-animate@1.0.7(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))): dependencies: tailwindcss: 3.4.3(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)) + tailwindcss-logical@3.0.1(postcss@8.4.35)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)): + dependencies: + tailwindcss: 3.3.1(postcss@8.4.35)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)) + transitivePeerDependencies: + - postcss + - ts-node + optional: true + + tailwindcss-radix@2.9.0: + optional: true + + tailwindcss@3.3.1(postcss@8.4.35)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)): + dependencies: + arg: 5.0.2 + chokidar: 3.6.0 + color-name: 1.1.4 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.2 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.0 + lilconfig: 2.1.0 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.1.1 + postcss: 8.4.35 + postcss-import: 14.1.0(postcss@8.4.35) + postcss-js: 4.0.1(postcss@8.4.35) + postcss-load-config: 3.1.4(postcss@8.4.35)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)) + postcss-nested: 6.0.0(postcss@8.4.35) + postcss-selector-parser: 6.0.16 + postcss-value-parser: 4.2.0 + quick-lru: 5.1.1 + resolve: 1.22.8 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + optional: true + tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)): dependencies: '@alloc/quick-lru': 5.2.0 @@ -14618,6 +18148,10 @@ snapshots: commander: 2.20.3 source-map-support: 0.5.21 + text-decoder@1.2.3: + dependencies: + b4a: 1.6.7 + text-table@0.2.0: {} textarea-caret-ts@4.1.1: {} @@ -14637,8 +18171,6 @@ snapshots: tiny-invariant@1.3.3: {} - tiny-typed-emitter@2.1.0: {} - tinybench@2.6.0: {} tinypool@0.8.3: {} @@ -14719,6 +18251,10 @@ snapshots: tslib@2.6.2: {} + tunnel-agent@0.6.0: + dependencies: + safe-buffer: 5.2.1 + turbo-stream@2.4.0: {} type-check@0.4.0: @@ -14789,8 +18325,16 @@ snapshots: ua-parser-js@1.0.37: {} + ua-parser-js@1.0.40: {} + ufo@1.4.0: {} + uint64be@3.0.0: {} + + ulidx@2.4.1: + dependencies: + layerr: 3.0.0 + unbox-primitive@1.0.2: dependencies: call-bind: 1.0.7 @@ -14949,6 +18493,8 @@ snapshots: dependencies: punycode: 2.3.1 + url-join@5.0.0: {} + url-or-path@2.3.0: {} use-callback-ref@1.3.2(@types/react@18.2.66)(react@18.2.0): @@ -14965,6 +18511,12 @@ snapshots: optionalDependencies: '@types/react': 18.2.66 + use-code-input@0.0.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + dependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optional: true + use-composed-ref@1.3.0(react@18.2.0): dependencies: react: 18.2.0 @@ -14990,6 +18542,19 @@ snapshots: optionalDependencies: '@types/react': 18.2.66 + use-sidecar@1.1.3(@types/react@18.2.66)(react@18.2.0): + dependencies: + detect-node-es: 1.1.0 + react: 18.2.0 + tslib: 2.6.2 + optionalDependencies: + '@types/react': 18.2.66 + optional: true + + use-sync-external-store@1.4.0(react@18.2.0): + dependencies: + react: 18.2.0 + usehooks-ts@3.1.0(react@18.2.0): dependencies: lodash.debounce: 4.0.8 @@ -15007,6 +18572,9 @@ snapshots: utils-merge@1.0.1: {} + uuid@8.3.2: + optional: true + uuid@9.0.1: {} uvu@0.5.6: @@ -15031,6 +18599,8 @@ snapshots: dependencies: builtins: 5.0.1 + varint@5.0.2: {} + vary@1.1.2: {} vaul@0.9.0(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): @@ -15054,13 +18624,13 @@ snapshots: unist-util-stringify-position: 3.0.3 vfile-message: 3.1.4 - vite-node@1.5.0(@types/node@20.11.27)(terser@5.36.0): + vite-node@1.5.0(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0): dependencies: cac: 6.7.14 debug: 4.3.4 pathe: 1.1.2 picocolors: 1.0.0 - vite: 5.1.4(@types/node@20.11.27)(terser@5.36.0) + vite: 5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) transitivePeerDependencies: - '@types/node' - less @@ -15071,13 +18641,13 @@ snapshots: - supports-color - terser - vite-node@3.0.0-beta.2(@types/node@20.11.27)(terser@5.36.0): + vite-node@3.0.0-beta.2(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.5.4 pathe: 1.1.2 - vite: 5.1.4(@types/node@20.11.27)(terser@5.36.0) + vite: 5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) transitivePeerDependencies: - '@types/node' - less @@ -15088,33 +18658,33 @@ snapshots: - supports-color - terser - vite-plugin-pwa@0.19.3(vite@5.1.4(@types/node@20.11.27)(terser@5.36.0))(workbox-build@7.0.0(@types/babel__core@7.20.5))(workbox-window@7.0.0): + vite-plugin-pwa@0.19.3(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))(workbox-build@7.0.0(@types/babel__core@7.20.5))(workbox-window@7.0.0): dependencies: debug: 4.3.4 fast-glob: 3.3.2 pretty-bytes: 6.1.1 - vite: 5.1.4(@types/node@20.11.27)(terser@5.36.0) + vite: 5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) workbox-build: 7.0.0(@types/babel__core@7.20.5) workbox-window: 7.0.0 transitivePeerDependencies: - supports-color - vite-plugin-wasm@3.3.0(vite@5.1.4(@types/node@20.11.27)(terser@5.36.0)): + vite-plugin-wasm@3.3.0(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)): dependencies: - vite: 5.1.4(@types/node@20.11.27)(terser@5.36.0) + vite: 5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) - vite-tsconfig-paths@4.3.2(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(terser@5.36.0)): + vite-tsconfig-paths@4.3.2(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)): dependencies: debug: 4.3.4 globrex: 0.1.2 tsconfck: 3.0.3(typescript@5.6.3) optionalDependencies: - vite: 5.1.4(@types/node@20.11.27)(terser@5.36.0) + vite: 5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) transitivePeerDependencies: - supports-color - typescript - vite@5.1.4(@types/node@20.11.27)(terser@5.36.0): + vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0): dependencies: esbuild: 0.20.1 postcss: 8.4.35 @@ -15122,9 +18692,10 @@ snapshots: optionalDependencies: '@types/node': 20.11.27 fsevents: 2.3.3 + sass: 1.85.1 terser: 5.36.0 - vitest@1.5.0(@types/node@20.11.27)(terser@5.36.0): + vitest@1.5.0(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0): dependencies: '@vitest/expect': 1.5.0 '@vitest/runner': 1.5.0 @@ -15143,8 +18714,8 @@ snapshots: strip-literal: 2.0.0 tinybench: 2.6.0 tinypool: 0.8.3 - vite: 5.1.4(@types/node@20.11.27)(terser@5.36.0) - vite-node: 1.5.0(@types/node@20.11.27)(terser@5.36.0) + vite: 5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) + vite-node: 1.5.0(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) why-is-node-running: 2.2.2 optionalDependencies: '@types/node': 20.11.27 @@ -15157,6 +18728,9 @@ snapshots: - supports-color - terser + void-elements@3.1.0: + optional: true + watchpack@2.4.2: dependencies: glob-to-regexp: 0.4.1 @@ -15448,6 +19022,12 @@ snapshots: - eslint-import-resolver-typescript - supports-color + xor-distance@2.0.0: {} + + xsalsa20@1.2.0: {} + + xstate@4.38.3: {} + xstate@5.13.0: {} xtend@4.0.2: {} @@ -15456,6 +19036,9 @@ snapshots: yallist@4.0.0: {} + yaml@1.10.2: + optional: true + yaml@2.4.1: {} yn@3.1.1: {} @@ -15464,6 +19047,14 @@ snapshots: yocto-queue@1.0.0: {} + zen-observable@0.10.0: {} + + zen-observable@0.9.0: {} + + zen-push@0.3.1: + dependencies: + zen-observable: 0.9.0 + zod@3.22.4: {} zwitch@2.0.4: {} From a1a4d92487bc4ba3f291117e6d683340e83ddbcf Mon Sep 17 00:00:00 2001 From: Nathan Gerhart Date: Wed, 19 Feb 2025 13:24:00 -0700 Subject: [PATCH 10/19] root.tsx: hook up dxos ClientProvider Note we've made build a bit more complicated because the dxos shell is a separate react app. So we build the shell separately and then include both apps in the build directory --- app/config.ts | 3 + app/root.tsx | 13 +- app/shell.ts | 10 ++ dx.yml | 14 ++ package.json | 5 +- pnpm-lock.yaml | 370 +++++++++++++++++++++++++++++++--------- public/shared-worker.js | 4 + public/shell.html | 11 ++ vite.config.shell.ts | 56 ++++++ vite.config.ts | 5 +- 10 files changed, 409 insertions(+), 82 deletions(-) create mode 100644 app/config.ts create mode 100644 app/shell.ts create mode 100644 dx.yml create mode 100644 public/shared-worker.js create mode 100644 public/shell.html create mode 100644 vite.config.shell.ts diff --git a/app/config.ts b/app/config.ts new file mode 100644 index 00000000..6ff2bc3c --- /dev/null +++ b/app/config.ts @@ -0,0 +1,3 @@ +import { Config, Defaults, Envs, Local } from "@dxos/config" + +export const configProvider = async () => new Config(Envs(), Local(), Defaults()) diff --git a/app/root.tsx b/app/root.tsx index f8fe07b7..4352a9ad 100644 --- a/app/root.tsx +++ b/app/root.tsx @@ -1,14 +1,21 @@ import "@ibm/plex/css/ibm-plex.css" import { Links, Meta, Outlet, Scripts, ScrollRestoration } from "react-router" import { Loading } from "ui/Loading" +import { ClientProvider } from "@dxos/react-client" +import { configProvider } from "./config" import "./index.css" +const createWorker = () => + new SharedWorker(new URL("../public/shared-worker", import.meta.url), { + type: "module", + name: "dxos-client-worker", + }) + export default function App() { return ( - <> + - - + ) } diff --git a/app/shell.ts b/app/shell.ts new file mode 100644 index 00000000..dd55e006 --- /dev/null +++ b/app/shell.ts @@ -0,0 +1,10 @@ +import { runShell } from "@dxos/shell/react" +import "@dxos/shell/style.css" +import { configProvider } from "./config" + +const main = async () => { + const config = await configProvider() + await runShell(config) +} + +void main() diff --git a/dx.yml b/dx.yml new file mode 100644 index 00000000..0d2ca5f6 --- /dev/null +++ b/dx.yml @@ -0,0 +1,14 @@ +version: 1 + +runtime: + client: + storage: + persistent: true + edgeFeatures: + signaling: true + + services: + edge: + url: wss://edge-production.dxos.workers.dev/ + iceProviders: + - urls: https://edge-production.dxos.workers.dev/ice diff --git a/package.json b/package.json index 74316a6c..9d3dc509 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,9 @@ "type": "module", "scripts": { "benchmark": "vitest bench", - "build": "react-router build", + "build": "run-s build:reactrouter build:shell", + "build:reactrouter": "react-router build", + "build:shell": "vite build -c vite.config.shell.ts", "build:storybook": "storybook build", "build:icons": "node ./scripts/generate-icon-types.js", "dev": "run-p dev:open dev:syncserver", @@ -131,6 +133,7 @@ "unplugin-auto-import": "^0.17.5", "vite": "5.1.4", "vite-plugin-pwa": "^0.19.3", + "vite-plugin-top-level-await": "^1.5.0", "vite-plugin-wasm": "^3.3.0", "vite-tsconfig-paths": "^4.3.2", "vitest": "^1.5.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ee63ee0a..29115636 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21,10 +21,10 @@ importers: version: 0.7.4 '@dxos/react-client': specifier: 0.7.4 - version: 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(@phosphor-icons/react@2.1.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react-dom@18.2.22)(@types/react@18.2.66)(effect@3.13.10)(postcss@8.4.35)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)) + version: 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(@phosphor-icons/react@2.1.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react-dom@18.2.22)(@types/react@18.2.66)(effect@3.13.10)(postcss@8.4.35)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3)) '@dxos/shell': specifier: 0.7.4 - version: 0.7.4(@dxos/react-client@0.7.4(@effect/schema@0.75.5(effect@3.13.10))(@phosphor-icons/react@2.1.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react-dom@18.2.22)(@types/react@18.2.66)(effect@3.13.10)(postcss@8.4.35)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)))(@effect/schema@0.75.5(effect@3.13.10))(@types/react-dom@18.2.22)(@types/react@18.2.66)(effect@3.13.10)(postcss@8.4.35)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)) + version: 0.7.4(@dxos/react-client@0.7.4(@effect/schema@0.75.5(effect@3.13.10))(@phosphor-icons/react@2.1.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react-dom@18.2.22)(@types/react@18.2.66)(effect@3.13.10)(postcss@8.4.35)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3)))(@effect/schema@0.75.5(effect@3.13.10))(@types/react-dom@18.2.22)(@types/react@18.2.66)(effect@3.13.10)(postcss@8.4.35)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3)) '@dxos/util': specifier: 0.7.4 version: 0.7.4 @@ -150,13 +150,13 @@ importers: version: 8.5.3(@types/react@18.2.66)(react@18.2.0) remix-flat-routes: specifier: ^0.6.4 - version: 0.6.4(@remix-run/dev@2.8.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))) + version: 0.6.4(@remix-run/dev@2.8.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))) tailwind-merge: specifier: ^2.2.1 version: 2.2.1 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))) + version: 1.0.7(tailwindcss@3.4.3(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3))) textarea-caret-ts: specifier: ^4.1.1 version: 4.1.1 @@ -220,7 +220,7 @@ importers: version: 8.4.6(storybook@8.4.6(prettier@3.2.5)) '@tailwindcss/forms': specifier: ^0.5.7 - version: 0.5.7(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))) + version: 0.5.7(tailwindcss@3.4.3(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3))) '@types/debug': specifier: ^4.1.12 version: 4.1.12 @@ -292,10 +292,10 @@ importers: version: 3.0.2(@storybook/blocks@8.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.4.6(prettier@3.2.5)))(@storybook/channels@8.0.8)(@storybook/components@8.4.6(storybook@8.4.6(prettier@3.2.5)))(@storybook/core-events@8.0.8)(@storybook/manager-api@8.4.6(storybook@8.4.6(prettier@3.2.5)))(@storybook/preview-api@8.4.6(storybook@8.4.6(prettier@3.2.5)))(@storybook/theming@8.4.6(storybook@8.4.6(prettier@3.2.5)))(react-dom@18.2.0(react@18.2.0))(react-router-dom@6.22.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react@18.2.0) tailwindcss: specifier: ^3.4.3 - version: 3.4.3(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)) + version: 3.4.3(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3)) ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@20.11.27)(typescript@5.6.3) + version: 10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3) typescript: specifier: ^5.6.3 version: 5.6.3 @@ -308,6 +308,9 @@ importers: vite-plugin-pwa: specifier: ^0.19.3 version: 0.19.3(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))(workbox-build@7.0.0(@types/babel__core@7.20.5))(workbox-window@7.0.0) + vite-plugin-top-level-await: + specifier: ^1.5.0 + version: 1.5.0(@swc/helpers@0.5.9)(rollup@4.25.0)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)) vite-plugin-wasm: specifier: ^3.3.0 version: 3.3.0(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)) @@ -319,7 +322,7 @@ importers: version: 1.5.0(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) xo: specifier: ^0.58.0 - version: 0.58.0(@types/eslint@9.6.1)(webpack@5.91.0(esbuild@0.20.1)) + version: 0.58.0(@types/eslint@9.6.1)(webpack@5.91.0(@swc/core@1.11.9(@swc/helpers@0.5.9))(esbuild@0.20.1)) packages: @@ -2939,6 +2942,15 @@ packages: peerDependencies: rollup: ^4.12.0 + '@rollup/plugin-virtual@3.0.2': + resolution: {integrity: sha512-10monEYsBp3scM4/ND4LNH5Rxvh3e/cVeL3jWTgZ2SrQ+BmUoQcopVQvnaMcOnykb1VkxUFuDAN+0FnpTFRy2A==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^4.12.0 + peerDependenciesMeta: + rollup: + optional: true + '@rollup/pluginutils@3.1.0': resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} engines: {node: '>= 8.0.0'} @@ -3368,9 +3380,84 @@ packages: peerDependencies: '@svgr/core': '*' + '@swc/core-darwin-arm64@1.11.9': + resolution: {integrity: sha512-moqbPCWG6SHiDMENTDYsEQJ0bFustbLtrdbDbdjnijSyhCyIcm9zKowmovE6MF8JBdOwmLxbuN1Yarq6CrPNlw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + + '@swc/core-darwin-x64@1.11.9': + resolution: {integrity: sha512-/lgMo5l9q6y3jjLM3v30y6SBvuuyLsM/K94hv3hPvDf91N+YlZLw4D7KY0Qknfhj6WytoAcjOIDU6xwBRPyUWg==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + + '@swc/core-linux-arm-gnueabihf@1.11.9': + resolution: {integrity: sha512-7bL6z/63If11IpBElQRozIGRadiy6rt3DoUyfGuFIFQKxtnZxzHuLxm1/wrCAGN9iAZxrpHxHP0VbPQvr6Mcjg==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + + '@swc/core-linux-arm64-gnu@1.11.9': + resolution: {integrity: sha512-9ArpxjrNbyFTr7gG+toiGbbK2mfS+X97GIruBKPsD8CJH/yJlMknBsX3lfy9h/L119zYVnFBmZDnwsv5yW8/cw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-arm64-musl@1.11.9': + resolution: {integrity: sha512-UOnunJWu7T7oNkBr4DLMwXXbldjiwi+JxmqBKrD2+BNiHGu6P5VpqDHiTGuWuLrda0TcTmeNE6gzlIVOVBo/vw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-x64-gnu@1.11.9': + resolution: {integrity: sha512-HAqmCkNoNhRusBqSokyylXKsLJ/dr3dnMgBERdUrCIh47L8CKR2qEFUP6FI05sHVB85403ctWnfzBYblcarpqg==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-linux-x64-musl@1.11.9': + resolution: {integrity: sha512-THwUT2g2qSWUxhi3NGRCEdmh/q7WKl3d5jcN9mz/4jum76Tb46LB9p3oOVPBIcfnFQ9OaddExjCwLoUl0ju2pA==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-win32-arm64-msvc@1.11.9': + resolution: {integrity: sha512-r4SGD9lR0MM9HSIsQ72BEL3Za3XsuVj+govuXQTlK0mty5gih4L+Qgfnb9PmhjFakK3F63gZyyEr2y8Fj0mN6Q==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + + '@swc/core-win32-ia32-msvc@1.11.9': + resolution: {integrity: sha512-jrEh6MDSnhwfpjRlSWd2Bk8pS5EjreQD1YbkNcnXviQf3+H0wSPmeVSktZyoIdkxAuc2suFx8mj7Yja2UXAgUg==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + + '@swc/core-win32-x64-msvc@1.11.9': + resolution: {integrity: sha512-oAwuhzr+1Bmb4As2wa3k57/WPJeyVEYRQelwEMYjPgi/h6TH+Y69jQAgKOd+ec1Yl8L5nkWTZMVA/dKDac1bAQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@swc/core@1.11.9': + resolution: {integrity: sha512-4UQ66FwTkFDr+UzYzRNKQyHMScOrc4zJbTJHyK6dP1yVMrxi5sl0FTzNKiqoYvRZ7j8TAYgtYvvuPSW/XXvp5g==} + engines: {node: '>=10'} + peerDependencies: + '@swc/helpers': '*' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + '@swc/helpers@0.5.9': resolution: {integrity: sha512-XI76sLwMJoLjJTOK5RblBZkouOJG3X3hjxLCzLnyN1ifAiKQc6Hck3uvnU4Z/dV/Dyk36Ffj8FLvDLV2oWvKTw==} + '@swc/types@0.1.19': + resolution: {integrity: sha512-WkAZaAfj44kh/UFdAQcrMP1I0nwRqpt27u+08LMBYMqmQfwwMofYoMh/48NGkMMRfC4ynpfwRbJuu8ErfNloeA==} + '@tailwindcss/container-queries@0.1.1': resolution: {integrity: sha512-p18dswChx6WnTSaJCSGx6lTmrGzNNvm2FtXmiO6AuA1V4U5REyoqwmT6kgAsIMdjo07QdAfYXHJ4hnMtfHzWgA==} peerDependencies: @@ -8404,6 +8491,10 @@ packages: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} + uuid@10.0.0: + resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} + hasBin: true + uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true @@ -8476,6 +8567,11 @@ packages: '@vite-pwa/assets-generator': optional: true + vite-plugin-top-level-await@1.5.0: + resolution: {integrity: sha512-r/DtuvHrSqUVk23XpG2cl8gjt1aATMG5cjExXL1BUTcSNab6CzkcPua9BPEc9fuTP5UpwClCxUe3+dNGL0yrgQ==} + peerDependencies: + vite: '>=2.8' + vite-plugin-wasm@3.3.0: resolution: {integrity: sha512-tVhz6w+W9MVsOCHzxo6SSMSswCeIw4HTrXEi6qL3IRzATl83jl09JVO1djBqPSwfjgnpVHNLYcaMbaDX5WB/pg==} peerDependencies: @@ -9664,10 +9760,10 @@ snapshots: colorjs: colorjs.io@0.5.2 optional: true - '@ch-ui/tailwind-tokens@0.5.5(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)))': + '@ch-ui/tailwind-tokens@0.5.5(tailwindcss@3.4.3(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3)))': dependencies: '@ch-ui/tokens': 0.5.6 - tailwindcss: 3.4.3(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)) + tailwindcss: 3.4.3(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3)) optional: true '@ch-ui/tokens@0.5.6': @@ -10267,7 +10363,7 @@ snapshots: '@ngneat/falso': 7.3.0 optional: true - '@dxos/react-client@0.7.4(@effect/schema@0.75.5(effect@3.13.10))(@phosphor-icons/react@2.1.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react-dom@18.2.22)(@types/react@18.2.66)(effect@3.13.10)(postcss@8.4.35)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))': + '@dxos/react-client@0.7.4(@effect/schema@0.75.5(effect@3.13.10))(@phosphor-icons/react@2.1.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react-dom@18.2.22)(@types/react@18.2.66)(effect@3.13.10)(postcss@8.4.35)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3))': dependencies: '@dxos/async': 0.7.4 '@dxos/client': 0.7.4(effect@3.13.10) @@ -10287,8 +10383,8 @@ snapshots: react-error-boundary: 4.1.2(react@18.2.0) optionalDependencies: '@dxos/random': 0.7.4 - '@dxos/react-ui': 0.7.4(@dxos/react-ui-theme@0.7.4(postcss@8.4.35)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)))(@phosphor-icons/react@2.1.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@dxos/react-ui-theme': 0.7.4(postcss@8.4.35)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)) + '@dxos/react-ui': 0.7.4(@dxos/react-ui-theme@0.7.4(postcss@8.4.35)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3)))(@phosphor-icons/react@2.1.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@dxos/react-ui-theme': 0.7.4(postcss@8.4.35)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3)) transitivePeerDependencies: - '@effect/schema' - '@phosphor-icons/react' @@ -10343,24 +10439,24 @@ snapshots: - '@types/react-dom' optional: true - '@dxos/react-ui-theme@0.7.4(postcss@8.4.35)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))': + '@dxos/react-ui-theme@0.7.4(postcss@8.4.35)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3))': dependencies: - '@ch-ui/tailwind-tokens': 0.5.5(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))) + '@ch-ui/tailwind-tokens': 0.5.5(tailwindcss@3.4.3(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3))) '@ch-ui/tokens': 0.5.6 '@dxos/node-std': 0.7.4 '@fontsource-variable/inter': 5.0.16 '@fontsource-variable/jetbrains-mono': 5.0.21 - '@tailwindcss/container-queries': 0.1.1(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))) - '@tailwindcss/forms': 0.5.7(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))) + '@tailwindcss/container-queries': 0.1.1(tailwindcss@3.4.3(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3))) + '@tailwindcss/forms': 0.5.7(tailwindcss@3.4.3(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3))) autoprefixer: 10.4.18(postcss@8.4.35) esbuild-style-plugin: 1.6.3 glob: 7.2.3 lodash.get: 4.4.2 lodash.merge: 4.6.2 tailwind-merge: 2.2.1 - tailwind-scrollbar: 3.1.0(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))) - tailwindcss: 3.4.3(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)) - tailwindcss-logical: 3.0.1(postcss@8.4.35)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)) + tailwind-scrollbar: 3.1.0(tailwindcss@3.4.3(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3))) + tailwindcss: 3.4.3(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3)) + tailwindcss-logical: 3.0.1(postcss@8.4.35)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3)) tailwindcss-radix: 2.9.0 transitivePeerDependencies: - postcss @@ -10369,14 +10465,14 @@ snapshots: '@dxos/react-ui-types@0.7.4': {} - '@dxos/react-ui@0.7.4(@dxos/react-ui-theme@0.7.4(postcss@8.4.35)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)))(@phosphor-icons/react@2.1.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@dxos/react-ui@0.7.4(@dxos/react-ui-theme@0.7.4(postcss@8.4.35)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3)))(@phosphor-icons/react@2.1.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@dxos/debug': 0.7.4 '@dxos/log': 0.7.4 '@dxos/react-hooks': 0.7.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@dxos/react-input': 0.7.4(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@dxos/react-list': 0.7.4(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@dxos/react-ui-theme': 0.7.4(postcss@8.4.35)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)) + '@dxos/react-ui-theme': 0.7.4(postcss@8.4.35)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3)) '@dxos/react-ui-types': 0.7.4 '@dxos/util': 0.7.4 '@fluentui/react-tabster': 9.24.1(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -10447,7 +10543,7 @@ snapshots: - '@effect/schema' - effect - '@dxos/shell@0.7.4(@dxos/react-client@0.7.4(@effect/schema@0.75.5(effect@3.13.10))(@phosphor-icons/react@2.1.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react-dom@18.2.22)(@types/react@18.2.66)(effect@3.13.10)(postcss@8.4.35)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)))(@effect/schema@0.75.5(effect@3.13.10))(@types/react-dom@18.2.22)(@types/react@18.2.66)(effect@3.13.10)(postcss@8.4.35)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))': + '@dxos/shell@0.7.4(@dxos/react-client@0.7.4(@effect/schema@0.75.5(effect@3.13.10))(@phosphor-icons/react@2.1.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react-dom@18.2.22)(@types/react@18.2.66)(effect@3.13.10)(postcss@8.4.35)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3)))(@effect/schema@0.75.5(effect@3.13.10))(@types/react-dom@18.2.22)(@types/react@18.2.66)(effect@3.13.10)(postcss@8.4.35)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3))': dependencies: '@dxos/async': 0.7.4 '@dxos/client-protocol': 0.7.4(effect@3.13.10) @@ -10457,7 +10553,7 @@ snapshots: '@dxos/invariant': 0.7.4 '@dxos/log': 0.7.4 '@dxos/protocols': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) - '@dxos/react-client': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(@phosphor-icons/react@2.1.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react-dom@18.2.22)(@types/react@18.2.66)(effect@3.13.10)(postcss@8.4.35)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)) + '@dxos/react-client': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(@phosphor-icons/react@2.1.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react-dom@18.2.22)(@types/react@18.2.66)(effect@3.13.10)(postcss@8.4.35)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3)) '@dxos/react-ui-types': 0.7.4 '@dxos/rpc': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) '@dxos/rpc-tunnel': 0.7.4(@effect/schema@0.75.5(effect@3.13.10))(effect@3.13.10) @@ -10478,8 +10574,8 @@ snapshots: url-join: 5.0.0 xstate: 4.38.3 optionalDependencies: - '@dxos/react-ui': 0.7.4(@dxos/react-ui-theme@0.7.4(postcss@8.4.35)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)))(@phosphor-icons/react@2.1.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@dxos/react-ui-theme': 0.7.4(postcss@8.4.35)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)) + '@dxos/react-ui': 0.7.4(@dxos/react-ui-theme@0.7.4(postcss@8.4.35)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3)))(@phosphor-icons/react@2.1.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@dxos/react-ui-theme': 0.7.4(postcss@8.4.35)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3)) '@phosphor-icons/react': 2.1.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) transitivePeerDependencies: - '@effect/schema' @@ -12282,7 +12378,7 @@ snapshots: dependencies: react: 18.2.0 - '@remix-run/dev@2.8.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))': + '@remix-run/dev@2.8.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))': dependencies: '@babel/core': 7.24.5 '@babel/generator': 7.26.2 @@ -12323,10 +12419,10 @@ snapshots: picocolors: 1.1.1 picomatch: 2.3.1 pidtree: 0.6.0 - postcss: 8.4.35 - postcss-discard-duplicates: 5.1.0(postcss@8.4.35) - postcss-load-config: 4.0.2(postcss@8.4.35)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)) - postcss-modules: 6.0.0(postcss@8.4.35) + postcss: 8.5.3 + postcss-discard-duplicates: 5.1.0(postcss@8.5.3) + postcss-load-config: 4.0.2(postcss@8.5.3)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3)) + postcss-modules: 6.0.0(postcss@8.5.3) prettier: 2.8.8 pretty-ms: 7.0.1 react-refresh: 0.14.0 @@ -12382,9 +12478,9 @@ snapshots: optionalDependencies: typescript: 5.6.3 - '@remix-run/v1-route-convention@0.1.4(@remix-run/dev@2.8.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)))': + '@remix-run/v1-route-convention@0.1.4(@remix-run/dev@2.8.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)))': dependencies: - '@remix-run/dev': 2.8.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)) + '@remix-run/dev': 2.8.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)) minimatch: 7.4.6 '@remix-run/web-blob@3.1.0': @@ -12442,6 +12538,10 @@ snapshots: magic-string: 0.25.9 rollup: 4.25.0 + '@rollup/plugin-virtual@3.0.2(rollup@4.25.0)': + optionalDependencies: + rollup: 4.25.0 + '@rollup/pluginutils@3.1.0(rollup@4.25.0)': dependencies: '@types/estree': 0.0.39 @@ -12875,19 +12975,72 @@ snapshots: transitivePeerDependencies: - supports-color + '@swc/core-darwin-arm64@1.11.9': + optional: true + + '@swc/core-darwin-x64@1.11.9': + optional: true + + '@swc/core-linux-arm-gnueabihf@1.11.9': + optional: true + + '@swc/core-linux-arm64-gnu@1.11.9': + optional: true + + '@swc/core-linux-arm64-musl@1.11.9': + optional: true + + '@swc/core-linux-x64-gnu@1.11.9': + optional: true + + '@swc/core-linux-x64-musl@1.11.9': + optional: true + + '@swc/core-win32-arm64-msvc@1.11.9': + optional: true + + '@swc/core-win32-ia32-msvc@1.11.9': + optional: true + + '@swc/core-win32-x64-msvc@1.11.9': + optional: true + + '@swc/core@1.11.9(@swc/helpers@0.5.9)': + dependencies: + '@swc/counter': 0.1.3 + '@swc/types': 0.1.19 + optionalDependencies: + '@swc/core-darwin-arm64': 1.11.9 + '@swc/core-darwin-x64': 1.11.9 + '@swc/core-linux-arm-gnueabihf': 1.11.9 + '@swc/core-linux-arm64-gnu': 1.11.9 + '@swc/core-linux-arm64-musl': 1.11.9 + '@swc/core-linux-x64-gnu': 1.11.9 + '@swc/core-linux-x64-musl': 1.11.9 + '@swc/core-win32-arm64-msvc': 1.11.9 + '@swc/core-win32-ia32-msvc': 1.11.9 + '@swc/core-win32-x64-msvc': 1.11.9 + '@swc/helpers': 0.5.9 + + '@swc/counter@0.1.3': {} + '@swc/helpers@0.5.9': dependencies: tslib: 2.6.2 - '@tailwindcss/container-queries@0.1.1(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)))': + '@swc/types@0.1.19': + dependencies: + '@swc/counter': 0.1.3 + + '@tailwindcss/container-queries@0.1.1(tailwindcss@3.4.3(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3)))': dependencies: - tailwindcss: 3.4.3(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)) + tailwindcss: 3.4.3(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3)) optional: true - '@tailwindcss/forms@0.5.7(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)))': + '@tailwindcss/forms@0.5.7(tailwindcss@3.4.3(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3)))': dependencies: mini-svg-data-uri: 1.4.4 - tailwindcss: 3.4.3(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)) + tailwindcss: 3.4.3(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3)) '@tanstack/react-virtual@3.5.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: @@ -14584,12 +14737,12 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0))(webpack@5.91.0(esbuild@0.20.1)): + eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0))(webpack@5.91.0(@swc/core@1.11.9(@swc/helpers@0.5.9))(esbuild@0.20.1)): dependencies: array.prototype.find: 2.2.2 debug: 3.2.7 enhanced-resolve: 0.9.1 - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0))(webpack@5.91.0(esbuild@0.20.1)))(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-webpack@0.13.8)(eslint@8.57.0) find-root: 1.1.0 hasown: 2.0.2 interpret: 1.4.0 @@ -14598,18 +14751,18 @@ snapshots: lodash: 4.17.21 resolve: 2.0.0-next.5 semver: 5.7.2 - webpack: 5.91.0(esbuild@0.20.1) + webpack: 5.91.0(@swc/core@1.11.9(@swc/helpers@0.5.9))(esbuild@0.20.1) transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0))(webpack@5.91.0(esbuild@0.20.1)))(eslint@8.57.0): + eslint-module-utils@2.8.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0))(webpack@5.91.0(@swc/core@1.11.9(@swc/helpers@0.5.9))(esbuild@0.20.1)))(eslint@8.57.0): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 7.8.0(eslint@8.57.0)(typescript@5.6.3) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-webpack: 0.13.8(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0))(webpack@5.91.0(esbuild@0.20.1)) + eslint-import-resolver-webpack: 0.13.8(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0))(webpack@5.91.0(@swc/core@1.11.9(@swc/helpers@0.5.9))(esbuild@0.20.1)) transitivePeerDependencies: - supports-color @@ -14638,7 +14791,7 @@ snapshots: eslint: 8.57.0 ignore: 5.3.1 - eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0))(webpack@5.91.0(esbuild@0.20.1)))(eslint@8.57.0): + eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-webpack@0.13.8)(eslint@8.57.0): dependencies: array-includes: 3.1.7 array.prototype.findlastindex: 1.2.4 @@ -14648,7 +14801,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0))(webpack@5.91.0(esbuild@0.20.1)))(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0))(webpack@5.91.0(@swc/core@1.11.9(@swc/helpers@0.5.9))(esbuild@0.20.1)))(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -15381,6 +15534,11 @@ snapshots: icss-utils@5.1.0(postcss@8.4.35): dependencies: postcss: 8.4.35 + optional: true + + icss-utils@5.1.0(postcss@8.5.3): + dependencies: + postcss: 8.5.3 idb@7.1.1: {} @@ -16400,8 +16558,7 @@ snapshots: nanoid@3.3.7: {} - nanoid@3.3.9: - optional: true + nanoid@3.3.9: {} nanomessage-rpc@3.2.0: dependencies: @@ -16816,9 +16973,9 @@ snapshots: possible-typed-array-names@1.0.0: {} - postcss-discard-duplicates@5.1.0(postcss@8.4.35): + postcss-discard-duplicates@5.1.0(postcss@8.5.3): dependencies: - postcss: 8.4.35 + postcss: 8.5.3 postcss-import@14.1.0(postcss@8.4.35): dependencies: @@ -16840,26 +16997,39 @@ snapshots: camelcase-css: 2.0.1 postcss: 8.4.35 - postcss-load-config@3.1.4(postcss@8.4.35)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)): + postcss-load-config@3.1.4(postcss@8.4.35)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3)): dependencies: lilconfig: 2.1.0 yaml: 1.10.2 optionalDependencies: postcss: 8.4.35 - ts-node: 10.9.2(@types/node@20.11.27)(typescript@5.6.3) + ts-node: 10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3) optional: true - postcss-load-config@4.0.2(postcss@8.4.35)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)): + postcss-load-config@4.0.2(postcss@8.4.35)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3)): dependencies: lilconfig: 3.1.1 yaml: 2.4.1 optionalDependencies: postcss: 8.4.35 - ts-node: 10.9.2(@types/node@20.11.27)(typescript@5.6.3) + ts-node: 10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3) + + postcss-load-config@4.0.2(postcss@8.5.3)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3)): + dependencies: + lilconfig: 3.1.1 + yaml: 2.4.1 + optionalDependencies: + postcss: 8.5.3 + ts-node: 10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3) postcss-modules-extract-imports@3.0.0(postcss@8.4.35): dependencies: postcss: 8.4.35 + optional: true + + postcss-modules-extract-imports@3.0.0(postcss@8.5.3): + dependencies: + postcss: 8.5.3 postcss-modules-local-by-default@4.0.4(postcss@8.4.35): dependencies: @@ -16867,16 +17037,36 @@ snapshots: postcss: 8.4.35 postcss-selector-parser: 6.0.16 postcss-value-parser: 4.2.0 + optional: true + + postcss-modules-local-by-default@4.0.4(postcss@8.5.3): + dependencies: + icss-utils: 5.1.0(postcss@8.5.3) + postcss: 8.5.3 + postcss-selector-parser: 6.0.16 + postcss-value-parser: 4.2.0 postcss-modules-scope@3.1.1(postcss@8.4.35): dependencies: postcss: 8.4.35 postcss-selector-parser: 6.0.16 + optional: true + + postcss-modules-scope@3.1.1(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-selector-parser: 6.0.16 postcss-modules-values@4.0.0(postcss@8.4.35): dependencies: icss-utils: 5.1.0(postcss@8.4.35) postcss: 8.4.35 + optional: true + + postcss-modules-values@4.0.0(postcss@8.5.3): + dependencies: + icss-utils: 5.1.0(postcss@8.5.3) + postcss: 8.5.3 postcss-modules@6.0.0(postcss@8.4.35): dependencies: @@ -16889,6 +17079,19 @@ snapshots: postcss-modules-scope: 3.1.1(postcss@8.4.35) postcss-modules-values: 4.0.0(postcss@8.4.35) string-hash: 1.1.3 + optional: true + + postcss-modules@6.0.0(postcss@8.5.3): + dependencies: + generic-names: 4.0.0 + icss-utils: 5.1.0(postcss@8.5.3) + lodash.camelcase: 4.3.0 + postcss: 8.5.3 + postcss-modules-extract-imports: 3.0.0(postcss@8.5.3) + postcss-modules-local-by-default: 4.0.4(postcss@8.5.3) + postcss-modules-scope: 3.1.1(postcss@8.5.3) + postcss-modules-values: 4.0.0(postcss@8.5.3) + string-hash: 1.1.3 postcss-nested@6.0.0(postcss@8.4.35): dependencies: @@ -16919,7 +17122,6 @@ snapshots: nanoid: 3.3.9 picocolors: 1.1.1 source-map-js: 1.2.1 - optional: true preact@10.26.4: {} @@ -17421,10 +17623,10 @@ snapshots: mdast-util-to-hast: 12.3.0 unified: 10.1.2 - remix-flat-routes@0.6.4(@remix-run/dev@2.8.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))): + remix-flat-routes@0.6.4(@remix-run/dev@2.8.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))): dependencies: - '@remix-run/dev': 2.8.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)) - '@remix-run/v1-route-convention': 0.1.4(@remix-run/dev@2.8.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))) + '@remix-run/dev': 2.8.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)) + '@remix-run/v1-route-convention': 0.1.4(@remix-run/dev@2.8.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))) fs-extra: 11.2.0 minimatch: 5.1.6 @@ -17739,8 +17941,7 @@ snapshots: source-map-js@1.0.2: {} - source-map-js@1.2.1: - optional: true + source-map-js@1.2.1: {} source-map-support@0.5.21: dependencies: @@ -18012,18 +18213,18 @@ snapshots: dependencies: '@babel/runtime': 7.24.0 - tailwind-scrollbar@3.1.0(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))): + tailwind-scrollbar@3.1.0(tailwindcss@3.4.3(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3))): dependencies: - tailwindcss: 3.4.3(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)) + tailwindcss: 3.4.3(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3)) optional: true - tailwindcss-animate@1.0.7(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3))): + tailwindcss-animate@1.0.7(tailwindcss@3.4.3(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3))): dependencies: - tailwindcss: 3.4.3(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)) + tailwindcss: 3.4.3(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3)) - tailwindcss-logical@3.0.1(postcss@8.4.35)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)): + tailwindcss-logical@3.0.1(postcss@8.4.35)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3)): dependencies: - tailwindcss: 3.3.1(postcss@8.4.35)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)) + tailwindcss: 3.3.1(postcss@8.4.35)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3)) transitivePeerDependencies: - postcss - ts-node @@ -18032,7 +18233,7 @@ snapshots: tailwindcss-radix@2.9.0: optional: true - tailwindcss@3.3.1(postcss@8.4.35)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)): + tailwindcss@3.3.1(postcss@8.4.35)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3)): dependencies: arg: 5.0.2 chokidar: 3.6.0 @@ -18051,7 +18252,7 @@ snapshots: postcss: 8.4.35 postcss-import: 14.1.0(postcss@8.4.35) postcss-js: 4.0.1(postcss@8.4.35) - postcss-load-config: 3.1.4(postcss@8.4.35)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)) + postcss-load-config: 3.1.4(postcss@8.4.35)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3)) postcss-nested: 6.0.0(postcss@8.4.35) postcss-selector-parser: 6.0.16 postcss-value-parser: 4.2.0 @@ -18062,7 +18263,7 @@ snapshots: - ts-node optional: true - tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)): + tailwindcss@3.4.3(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -18081,7 +18282,7 @@ snapshots: postcss: 8.4.35 postcss-import: 15.1.0(postcss@8.4.35) postcss-js: 4.0.1(postcss@8.4.35) - postcss-load-config: 4.0.2(postcss@8.4.35)(ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3)) + postcss-load-config: 4.0.2(postcss@8.4.35)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3)) postcss-nested: 6.0.1(postcss@8.4.35) postcss-selector-parser: 6.0.16 resolve: 1.22.8 @@ -18130,15 +18331,16 @@ snapshots: type-fest: 0.16.0 unique-string: 2.0.0 - terser-webpack-plugin@5.3.10(esbuild@0.20.1)(webpack@5.91.0(esbuild@0.20.1)): + terser-webpack-plugin@5.3.10(@swc/core@1.11.9(@swc/helpers@0.5.9))(esbuild@0.20.1)(webpack@5.91.0(@swc/core@1.11.9(@swc/helpers@0.5.9))(esbuild@0.20.1)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.36.0 - webpack: 5.91.0(esbuild@0.20.1) + webpack: 5.91.0(@swc/core@1.11.9(@swc/helpers@0.5.9))(esbuild@0.20.1) optionalDependencies: + '@swc/core': 1.11.9(@swc/helpers@0.5.9) esbuild: 0.20.1 terser@5.36.0: @@ -18212,7 +18414,7 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-node@10.9.2(@types/node@20.11.27)(typescript@5.6.3): + ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.9 @@ -18229,6 +18431,8 @@ snapshots: typescript: 5.6.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 + optionalDependencies: + '@swc/core': 1.11.9(@swc/helpers@0.5.9) ts-regex-builder@1.8.2: {} @@ -18572,6 +18776,8 @@ snapshots: utils-merge@1.0.1: {} + uuid@10.0.0: {} + uuid@8.3.2: optional: true @@ -18669,6 +18875,16 @@ snapshots: transitivePeerDependencies: - supports-color + vite-plugin-top-level-await@1.5.0(@swc/helpers@0.5.9)(rollup@4.25.0)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)): + dependencies: + '@rollup/plugin-virtual': 3.0.2(rollup@4.25.0) + '@swc/core': 1.11.9(@swc/helpers@0.5.9) + uuid: 10.0.0 + vite: 5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) + transitivePeerDependencies: + - '@swc/helpers' + - rollup + vite-plugin-wasm@3.3.0(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)): dependencies: vite: 5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) @@ -18754,7 +18970,7 @@ snapshots: webpack-virtual-modules@0.6.1: {} - webpack@5.91.0(esbuild@0.20.1): + webpack@5.91.0(@swc/core@1.11.9(@swc/helpers@0.5.9))(esbuild@0.20.1): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.6 @@ -18777,7 +18993,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(esbuild@0.20.1)(webpack@5.91.0(esbuild@0.20.1)) + terser-webpack-plugin: 5.3.10(@swc/core@1.11.9(@swc/helpers@0.5.9))(esbuild@0.20.1)(webpack@5.91.0(@swc/core@1.11.9(@swc/helpers@0.5.9))(esbuild@0.20.1)) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -18977,7 +19193,7 @@ snapshots: ws@8.16.0: {} - xo@0.58.0(@types/eslint@9.6.1)(webpack@5.91.0(esbuild@0.20.1)): + xo@0.58.0(@types/eslint@9.6.1)(webpack@5.91.0(@swc/core@1.11.9(@swc/helpers@0.5.9))(esbuild@0.20.1)): dependencies: '@eslint/eslintrc': 3.0.2 '@typescript-eslint/eslint-plugin': 7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0)(typescript@5.6.3) @@ -18990,10 +19206,10 @@ snapshots: eslint-config-xo: 0.44.0(eslint@8.57.0) eslint-config-xo-typescript: 4.0.0(@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0)(typescript@5.6.3))(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0)(typescript@5.6.3) eslint-formatter-pretty: 6.0.1 - eslint-import-resolver-webpack: 0.13.8(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0))(webpack@5.91.0(esbuild@0.20.1)) + eslint-import-resolver-webpack: 0.13.8(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0))(webpack@5.91.0(@swc/core@1.11.9(@swc/helpers@0.5.9))(esbuild@0.20.1)) eslint-plugin-ava: 14.0.0(eslint@8.57.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0))(webpack@5.91.0(esbuild@0.20.1)))(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-webpack@0.13.8)(eslint@8.57.0) eslint-plugin-n: 16.6.2(eslint@8.57.0) eslint-plugin-no-use-extend-native: 0.5.0 eslint-plugin-prettier: 5.1.3(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.2.5) @@ -19016,7 +19232,7 @@ snapshots: to-absolute-glob: 3.0.0 typescript: 5.6.3 optionalDependencies: - webpack: 5.91.0(esbuild@0.20.1) + webpack: 5.91.0(@swc/core@1.11.9(@swc/helpers@0.5.9))(esbuild@0.20.1) transitivePeerDependencies: - '@types/eslint' - eslint-import-resolver-typescript diff --git a/public/shared-worker.js b/public/shared-worker.js new file mode 100644 index 00000000..48680e1b --- /dev/null +++ b/public/shared-worker.js @@ -0,0 +1,4 @@ +onconnect = async event => { + const { onconnect } = await import("@dxos/react-client/worker") + await onconnect(event) +} diff --git a/public/shell.html b/public/shell.html new file mode 100644 index 00000000..9a1ef367 --- /dev/null +++ b/public/shell.html @@ -0,0 +1,11 @@ + + + + + + + +
+ + + diff --git a/vite.config.shell.ts b/vite.config.shell.ts new file mode 100644 index 00000000..a15f4cc2 --- /dev/null +++ b/vite.config.shell.ts @@ -0,0 +1,56 @@ +import fs from "node:fs" +import path from "node:path" +import { type Plugin } from "vite" +import { defineConfig } from "vitest/config" +import topLevelAwait from "vite-plugin-top-level-await" +import { ConfigPlugin } from "@dxos/config/vite-plugin" +import ReactPlugin from "@vitejs/plugin-react" +import wasm from "vite-plugin-wasm" + +const combineShellWithApp = () => ({ + name: "combineShellWithApp", + closeBundle() { + const dist = "./dist" + const build = "./build/client" + + if (!fs.existsSync(dist) || !fs.existsSync(build)) { + return + } + + // copy the shell file + fs.renameSync(path.join(dist, "public", "shell.html"), path.join(build, "shell.html")) + + // copy all the assets + for (const asset of fs.readdirSync(path.join(dist, "assets"))) { + fs.renameSync(path.join(dist, "assets", asset), path.join(build, "assets", asset)) + } + + // remove the remaining + fs.rmSync(dist, { recursive: true, force: true }) + }, +}) + +export default defineConfig({ + build: { + copyPublicDir: false, // those files are for xdev, not the shell + rollupOptions: { + input: "./public/shell.html", + }, + }, + plugins: [ + ConfigPlugin(), + topLevelAwait(), + wasm() as Plugin, + ReactPlugin({ jsxRuntime: "classic" }), + combineShellWithApp(), + ], + worker: { + format: "es", + plugins: () => [topLevelAwait(), wasm() as Plugin], + }, + optimizeDeps: { + // use route files as entry points when crawling for dependencies + entries: ["**/routes/**/*.tsx"], + }, + test: { include: ["app/**/*.test.ts"] }, +}) diff --git a/vite.config.ts b/vite.config.ts index ff11c81f..74778085 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -9,6 +9,8 @@ import { VitePWA as vitePWA, type VitePWAOptions } from "vite-plugin-pwa" import wasm from "vite-plugin-wasm" import tsconfigPaths from "vite-tsconfig-paths" import { defineConfig } from "vitest/config" +import { ConfigPlugin } from "@dxos/config/vite-plugin" +import topLevelAwait from "vite-plugin-top-level-await" const pwaOptions: Partial = { includeAssets: ["favicon.ico"], @@ -58,8 +60,9 @@ export default defineConfig({ vitePWA(pwaOptions), autoImport(autoImportOptions) as Plugin, icons({ compiler: "jsx", jsx: "react" }), + ConfigPlugin(), ], - worker: { format: "es", plugins: () => [wasm() as Plugin] }, + worker: { format: "es", plugins: () => [wasm() as Plugin, topLevelAwait()] }, optimizeDeps: { // use route files as entry points when crawling for dependencies entries: ["**/routes/**/*.tsx"], From cf361164bed52ae31667ffd7e9ac88762d76152d Mon Sep 17 00:00:00 2001 From: Nathan Gerhart Date: Wed, 12 Mar 2025 16:57:21 -0600 Subject: [PATCH 11/19] Schema: convert to dxos There are some big differences in how a dxos TypedObject behaves compared to an EffectSchema.Class: 1. there is no support (yet) for transforms, so we're treating dates and timestamps as strings and only referencing the foreign key instead of a fully hydrated object 2. there is no support (and perhaps no need) for the entire Collections and Root concepts 3. TypedObjects are `create`d instead of `new`ed 4. there is no support for getters (so we're storing computed values and have changed a lot about how ExtendedContact works) This commit is still non-functional (the app doesn't run) but `pnpm test` passes --- app/context/Database/Collection.ts | 315 ------------------ app/context/Database/Database.ts | 36 -- .../Database/DatabaseContextProvider.tsx | 37 -- app/context/Database/Errors.ts | 20 -- app/context/Database/Indexes.ts | 139 -------- app/context/Database/normalizeKey.ts | 1 - .../Database/test/Collection.benchmark.ts | 29 -- app/context/Database/test/Collection.test.ts | 179 ---------- app/context/Database/test/Indexes.test.ts | 261 --------------- app/context/Database/types.ts | 26 -- app/data/clients.ts | 5 +- app/data/contacts.ts | 12 +- app/data/projects.ts | 22 +- app/lib/csvToDoneEntries.ts | 34 +- app/lib/csvToTimeEntries.ts | 47 ++- app/lib/generateDones.ts | 9 +- app/lib/generateTimeEntries.ts | 46 +-- app/lib/stripUndefined.ts | 5 +- app/lib/test/csvToDoneEntries.test.ts | 4 +- app/lib/test/csvToTimeEntries.test.ts | 14 +- app/root.tsx | 12 +- app/schema/Client.ts | 10 +- app/schema/ClientCollection.ts | 21 +- app/schema/ClientFromId.ts | 18 - app/schema/Contact.ts | 127 ++++--- app/schema/ContactCollection.ts | 23 +- app/schema/ContactFromId.ts | 18 - app/schema/DoneEntry.ts | 22 +- app/schema/DoneEntryCollection.ts | 17 +- app/schema/Project.ts | 17 +- app/schema/ProjectCollection.ts | 75 ++--- app/schema/ProjectFromId.ts | 14 - app/schema/Root.ts | 60 ---- app/schema/TimeEntry.ts | 54 +-- app/schema/TimeEntryCollection.ts | 20 +- app/schema/lib/parseClient.ts | 7 +- app/schema/lib/parseProject.ts | 4 +- app/schema/lib/parseTimeEntry.ts | 30 +- app/schema/lib/test/parseClient.test.ts | 6 +- app/schema/lib/test/parseProject.test.ts | 4 +- app/schema/lib/test/parseTimeEntry.test.ts | 17 +- app/schema/test/DoneEntry.test.ts | 60 ++-- app/schema/test/TimeEntry.test.ts | 88 +++-- app/types/types.ts | 11 + 44 files changed, 412 insertions(+), 1564 deletions(-) delete mode 100644 app/context/Database/Collection.ts delete mode 100644 app/context/Database/Database.ts delete mode 100644 app/context/Database/DatabaseContextProvider.tsx delete mode 100644 app/context/Database/Errors.ts delete mode 100644 app/context/Database/Indexes.ts delete mode 100644 app/context/Database/normalizeKey.ts delete mode 100644 app/context/Database/test/Collection.benchmark.ts delete mode 100644 app/context/Database/test/Collection.test.ts delete mode 100644 app/context/Database/test/Indexes.test.ts delete mode 100644 app/context/Database/types.ts delete mode 100644 app/schema/ClientFromId.ts delete mode 100644 app/schema/ContactFromId.ts delete mode 100644 app/schema/ProjectFromId.ts delete mode 100644 app/schema/Root.ts diff --git a/app/context/Database/Collection.ts b/app/context/Database/Collection.ts deleted file mode 100644 index 07e56fea..00000000 --- a/app/context/Database/Collection.ts +++ /dev/null @@ -1,315 +0,0 @@ -/* eslint-disable @typescript-eslint/member-ordering */ -import type { ChangeFn } from "@automerge/automerge" -import { NO_OP } from "lib/constants" -import { E, type Types } from "lib/Effect" -import type { Root, RootEncoded } from "schema/Root" -import type { KeyNotFoundError } from "./Errors" -import { NonUniqueIndex, UniqueIndex } from "./Indexes" -import type { Accessor, CollectionItem, EncodedItemOf, IdOf, ItemOf, StringKeyOf } from "./types" - -/** - * A collection of items, indexed by id and optionally by other fields. - * - * Implementations of this class must specify - * - a name that corresponds to a property on the root document, for example "contacts" or - * "doneEntries" - * - how the collection should be indexed (in addition to the unique index automatically created on - * the `id` field) - * - an encoding function for persistence - * - * @example - * ```ts - * export class ContactCollection // - * extends Collection<"contacts", T> - * { - * override readonly name = "contacts" as const - * - * override readonly indexes = { - * userName: { unique: true }, - * } as const // <- important! - * - * override readonly encode = Contact.encode - * } - *``` - * - * NOTE: The `as const` assertion for the index spec is required; without it you'll get type errors - * when calling `findBy` with an index name. - * - */ -export abstract class Collection< - Name extends keyof Root & keyof RootEncoded = keyof Root & keyof RootEncoded, - Item extends ItemOf = ItemOf, -> { - // The primary index, on `id` - index: UniqueIndex - - // Additional indexes as specified by the subclass in this.indexes - uniqueIndexes: Record> = {} - nonUniqueIndexes: Record> = {} - - // MUST OVERRIDE - - /** - * Name of the collection. Must match a property on the root document, for example "contacts" or - * "doneEntries". Must be provided by the subclass. - */ - abstract readonly name: Name - - /** - * Indexes to create on the collection. Must be provided by the subclass. - */ - abstract readonly indexes: IndexSpecs - - /** - * A function for encoding this collection's items for persistence. Must be provided by the - * subclass. - */ - abstract readonly encode: (item: Item) => EncodedItemOf - - constructor( - /** The initial items to populate the collection with */ - items: Item[] | Record = [], - - /** - * The automerge-repo change function returned by useDoc. - * (this can be omitted for purely in-memory usage, for example in testing.) - */ - private readonly change: (fn: ChangeFn) => void = NO_OP, - ) { - // Build the primary index - this.index = new UniqueIndex(items, "id" as StringKeyOf) - } - - // NON-EFFECTFUL (SYNC) API FOR USE BY APPLICATION - - /** Returns all items in the collection. */ - all() { - return E.runSync(this.effect_all()) - } - - /** Finds an item by its ID. */ - find(id: string) { - return E.runSync(this.effect_find(id)) - } - - /** - * Finds an item or items using an index. - * - If the index is unique (first overload), returns a single item, and throws if none is found. - * - If the index is non-unique (second overload), returns an array zero or more of items. - * - * @example `contactCollection.findBy("userName", "alice")` // returns one contact - * @example `contactCollection.findBy("company", "DevResults")` // returns an array of contacts - */ - findBy(...args: Parameters) { - return E.runSync(this.effect_findBy(...args)) - } - - /** Adds an item to the collection */ - add(arg: Item | Item[]) { - return E.runSync(this.effect_add(arg)) - } - - /** Updates an item given an object containing its ID and one or more updated properties. */ - update(item: { id: IdOf } & Partial) { - E.runSync(this.effect_update(item)) - } - - /** Removes an item from a collection, given its ID. */ - destroy(id: IdOf) { - E.runSync(this.effect_destroy(id)) - } - - /** Removes all items from the collection. */ - destroyAll() { - E.runSync(this.effect_destroyAll()) - } - - // EFFECTFUL API FOR USE WITHIN DATA LAYER - - public effect = { - all: this.effect_all.bind(this), - find: this.effect_find.bind(this), - findBy: this.effect_findBy.bind(this), - add: this.effect_add.bind(this), - update: this.effect_update.bind(this), - destroy: this.effect_destroy.bind(this), - destroyAll: this.effect_destroyAll.bind(this), - } - - // PRIVATE - - /** Returns all items in the collection. Returns an effect. */ - private effect_all() { - return this.index.all() - } - - /** Finds an item by its ID. Returns an effect. */ - private effect_find(id: string) { - return this.index.find(id) - } - - /** - * Finds an item or items using an index. - * - If the index is unique (first overload), returns a single item, and throws if none is found. - * - If the index is non-unique (second overload), returns an array zero or more of items. - * - * @example `contactCollection.findBy("userName", "alice")` // returns one contact - * @example `contactCollection.findBy("company", "DevResults")` // returns an array of contacts - * - * Returns an effect. - */ - private effect_findBy>( - indexName: IndexName, - value: any, - ): E.Effect | E.Effect - - private effect_findBy>( - indexName: IndexName, - value: any, - ): E.Effect - - private effect_findBy>(indexName: IndexName, value: any) { - const index = this.getIndex(indexName) - return index.find(String(value)) - } - - /** Adds an item to the collection. Returns an effect. */ - private effect_add(arg: Item | Item[]) { - const items = Array.isArray(arg) ? arg : [arg] - - return E.gen(this, function* () { - // add each item to all indexes - for (const index of this.allIndexes) { - yield* index.add(items) - } - - // update automerge-repo - for (const item of items) { - this.change((root: Types.Mutable) => { - const rootElement = root[this.name] - rootElement[item.id] = this.encode(item) - }) - } - - return arg - }) - } - - /** Updates an item given an object containing its ID and one or more updated properties. Returns an effect. */ - private effect_update(item: { id: IdOf } & Partial) { - return E.gen(this, function* () { - const prevValue = yield* this.effect_find(item.id) - const newValue: Item = { ...prevValue, ...item } - - // update the item in all indexes - for (const index of this.allIndexes) { - yield* index.update(newValue) - } - - // update automerge-repo - this.change(root => { - const rootElement = root[this.name] - rootElement[newValue.id] = this.encode(newValue) - }) - - return newValue - }) - } - - /** Removes an item from a collection, given its ID. Returns an effect. */ - private effect_destroy(id: IdOf) { - return E.gen(this, function* () { - const item = yield* this.effect_find(id) - - // remove the item from all indexes - for (const index of this.allIndexes) { - yield* index.destroy(item) - } - - // update automerge-repo - this.change(root => { - const rootElement = root[this.name] - delete rootElement[id] - }) - }) - } - - /** Removes all items from the collection. Returns an effect. */ - private effect_destroyAll() { - return E.gen(this, function* () { - // remove all items from all indexes - for (const index of this.allIndexes) { - yield* index.destroyAll() - } - - // update automerge-repo - this.change(root => { - root[this.name] = {} - }) - }) - } - - /** Returns an array containing all indexes in the collection */ - private get allIndexes() { - return [ - this.index, - ...Object.values(this.uniqueIndexes), - ...Object.values(this.nonUniqueIndexes), - ] - } - - /** Returns an index by name, creating it if it doesn't exist. */ - protected getIndex>(name: IndexName) { - const { unique, accessor } = this.indexes[name] - const key = accessor ?? (name as string as StringKeyOf) - const indexes = unique ? this.uniqueIndexes : this.nonUniqueIndexes - - // create the index on demand - if (!(name in indexes)) { - const items = E.runSync(this.effect_all()) - const index = - unique ? - new UniqueIndex(items, key, name) // - : new NonUniqueIndex(items, key, name) - indexes[name] = index - } - - return indexes[name] - } -} - -/** - * Indexes are specified as a map of index names to specs. If no accessor is provided, the index - * name is the field to index. - * - * @example - * ```ts - * override readonly indexes = { - * email: { unique: true }, // email addresses must be unique - * department: { unique: false }, // multiple contacts can work for the same department - * yearHired: { unique: false, accessor: contact => contact.dateHired.getFullYear() }, - * } as const // <- important! - * ``` - */ -export type IndexSpecs = { - /** K must match a field in Item unless an accessor is provided */ - [K in string]: { - /** A unique index matches a key to a single value. A non-unique index matches a key to multiple values. */ - unique: boolean - accessor?: Accessor - } -} - -/** - * These helpers give us type safety when using indexes: for example * `contactCollection.findBy("pizza", "asdf")` - * will throw a type error since "pizza" is not a valide index name. - */ -export type IndexName, IsUnique extends boolean> = { - [K in keyof C["indexes"]]: C["indexes"][K] extends { unique: IsUnique } ? - K & string // - : never -}[keyof C["indexes"]] - -export type AnyIndexName> = IndexName -export type UniqueIndexName> = IndexName -export type NonUniqueIndexName> = IndexName diff --git a/app/context/Database/Database.ts b/app/context/Database/Database.ts deleted file mode 100644 index fa2c1a9d..00000000 --- a/app/context/Database/Database.ts +++ /dev/null @@ -1,36 +0,0 @@ -import type { ChangeFn } from "@automerge/automerge" -import type { Team, User } from "@localfirst/auth" -import { NO_OP } from "lib/constants" -import { ClientCollection } from "schema/ClientCollection" -import { ContactCollection } from "schema/ContactCollection" -import { type ExtendedContact } from "schema/Contact" -import { DoneEntryCollection } from "schema/DoneEntryCollection" -import { ProjectCollection } from "schema/ProjectCollection" -import type { Root, RootEncoded } from "schema/Root" -import { TimeEntryCollection } from "schema/TimeEntryCollection" - -export class Database { - contacts: ContactCollection - projects: ProjectCollection - clients: ClientCollection - doneEntries: DoneEntryCollection - timeEntries: TimeEntryCollection - - constructor({ user, team, rootDoc, change = NO_OP }: Props) { - const { projects, clients, doneEntries, timeEntries } = rootDoc - const contacts = rootDoc.extendedContacts({ user, team }) - - this.contacts = new ContactCollection(contacts, change) - this.projects = new ProjectCollection(projects, change) - this.clients = new ClientCollection(clients, change) - this.doneEntries = new DoneEntryCollection(doneEntries, change) - this.timeEntries = new TimeEntryCollection(timeEntries, change) - } -} - -type Props = { - user: User - team: Team - rootDoc: Root - change?: (fn: ChangeFn) => void -} diff --git a/app/context/Database/DatabaseContextProvider.tsx b/app/context/Database/DatabaseContextProvider.tsx deleted file mode 100644 index d21ca0e4..00000000 --- a/app/context/Database/DatabaseContextProvider.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import { useAuth } from "hooks/useAuth" -import { useRootDocument } from "hooks/useRootDocument" -import { NO_OP } from "lib/constants" -import { createContext, useEffect, useState } from "react" -import { Root } from "schema/Root" -import { Database } from "./Database" - -const EMPTY_ROOT_DOC = new Root({ - contacts: {}, - projects: {}, - clients: {}, - doneEntries: {}, - timeEntries: {}, -}) - -export function DatabaseContextProvider({ children }: { children: React.ReactNode }) { - const { user, team } = useAuth() - - const [rootDoc, change] = useRootDocument() - const [database, setDatabase] = useState(undefined) - - useEffect(() => { - setDatabase( - new Database({ - user, - team, - rootDoc: rootDoc ?? EMPTY_ROOT_DOC, - change: change ?? NO_OP, - }), - ) - }, [rootDoc]) - - if (!database) return undefined - return {children} -} - -export const DatabaseContext = createContext(undefined) diff --git a/app/context/Database/Errors.ts b/app/context/Database/Errors.ts deleted file mode 100644 index d07a1080..00000000 --- a/app/context/Database/Errors.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Data } from "lib/Effect" -import type { CollectionItem } from "./types" - -export class KeyNotFoundError // - extends Data.TaggedError("KeyNotFound")<{ field: string; value: string }> -{ - message = `An item with ${this.field} "${this.value}" wasn't found` -} - -export class ItemNotFoundError // - extends Data.TaggedError("ItemNotFound")<{ id: Item["id"] }> -{ - message = `The item with ID "${this.id}" wasn't found` -} - -export class KeyExistsError // - extends Data.TaggedError("KeyExists")<{ field: string; value: string }> -{ - message = `An item with ${this.field} "${this.value}" already exists` -} diff --git a/app/context/Database/Indexes.ts b/app/context/Database/Indexes.ts deleted file mode 100644 index b422e5f3..00000000 --- a/app/context/Database/Indexes.ts +++ /dev/null @@ -1,139 +0,0 @@ -import { E } from "lib/Effect" -import { KeyExistsError, KeyNotFoundError } from "./Errors" -import { normalizeKey } from "./normalizeKey" -import type { Accessor, CollectionItem, StringKeyOf } from "./types" - -/** Indexes an array of objects. */ -export abstract class BaseIndex { - abstract readonly unique: boolean - - private readonly accessor: Accessor - private readonly items: Item[] - private _index: Record | undefined = undefined - - constructor( - items: Record | Item[], - keyOrAccessor: StringKeyOf | Accessor, - public readonly name: string = typeof keyOrAccessor === "string" ? - keyOrAccessor // - : keyOrAccessor.name, - ) { - this.items = Array.isArray(items) ? items : Object.values(items) - this.accessor = (item: Item) => { - const key = - typeof keyOrAccessor === "string" ? (item[keyOrAccessor] as string) : keyOrAccessor(item) - return normalizeKey(key) - } - } - - protected get index() { - if (this._index === undefined) { - // build index on demand - this._index = this.items.reduce>((acc, item) => { - const key = this.accessor(item) - const existingItems = acc[key] || [] - - if (this.unique && existingItems.length > 0) - throw new Error(`Duplicate key '${key}' found while building index`) - - acc[key] = [...existingItems, item] - return acc - }, {}) - } - - return this._index - } - - protected set index(value: Record) { - this._index = value - } - - /** Returns all items in the index */ - all() { - return E.succeed(Object.values(this.index).flat()) - } - - /** Returns all keys in the index */ - keys() { - return E.succeed(Object.keys(this.index)) - } - - /** Adds a new item. For unique indexes, throws an error if an item with the same key already exists. */ - add(arg: Item | Item[]) { - const items = Array.isArray(arg) ? arg : [arg] - - for (const item of items) { - const key = this.accessor(item) - - this.index[key] ??= [] - - const existingItems = this.index[key] ?? [] - - if (this.unique && existingItems.length > 0) - return E.fail(new KeyExistsError({ field: this.name, value: key })) - - this.index[key] = [...existingItems, item] - } - - return E.succeed(arg) - } - - /** Updates an existing item. Throws an error if there is not an existing item. */ - update(item: Item) { - return E.gen(this, function* () { - const key = this.accessor(item) - - const items = [yield* this.find(key)].flat() as Item[] - const matchingItem = items.find(i => i.id === item.id) - if (!matchingItem) yield* E.fail(new KeyNotFoundError({ field: this.name, value: key })) - - this.index[key] = items.map(i => (i.id === item.id ? item : i)) - }) - } - - /** Removes an item from the index */ - destroy(item: Item) { - return E.gen(this, function* () { - const key = this.accessor(item) - const items = [yield* this.find(key)].flat() as Item[] - const matchingItem = items.find(i => i.id === item.id) - if (!matchingItem) yield* E.fail(new KeyNotFoundError({ field: this.name, value: key })) - - this.index[key] = items.filter(i => i.id !== item.id) - }) - } - - /** Removes all items from the index */ - destroyAll() { - return E.gen(this, function* () { - this.index = {} - }) - } - - /** Finds an item by key. Must be overriden by subclass. */ - abstract find(key: string): E.Effect | E.Effect -} - -// These are implemented as separate classes because it's the only way I can get TypeScript to -// identify the correct return type for `find` (`Item` vs `Item[]`) - -export class UniqueIndex extends BaseIndex { - readonly unique = true as const - - find(key: string) { - const normalizedKey = normalizeKey(key) - const result = this.index[normalizedKey] - if (!result?.length) return E.fail(new KeyNotFoundError({ field: this.name, value: key })) - - return E.succeed(result[0]) - } -} - -export class NonUniqueIndex extends BaseIndex { - readonly unique = false as const - - find(key: string) { - const normalizedKey = normalizeKey(key) - return E.succeed(this.index[normalizedKey] ?? []) - } -} diff --git a/app/context/Database/normalizeKey.ts b/app/context/Database/normalizeKey.ts deleted file mode 100644 index 584699e8..00000000 --- a/app/context/Database/normalizeKey.ts +++ /dev/null @@ -1 +0,0 @@ -export const normalizeKey = (key: string | undefined) => key?.toLowerCase() ?? "" diff --git a/app/context/Database/test/Collection.benchmark.ts b/app/context/Database/test/Collection.benchmark.ts deleted file mode 100644 index 0450756d..00000000 --- a/app/context/Database/test/Collection.benchmark.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { LocalDate } from "@js-joda/core" -import { clients } from "data/clients" -import { contacts } from "data/contacts" -import { projects } from "data/projects" -import { generateTimeEntries } from "lib/generateTimeEntries" -import { TimeEntryCollection } from "schema/TimeEntryCollection" -import { bench, describe } from "vitest" - -const addEntries = (weekCount: number) => { - const entries = generateTimeEntries({ - clients, - contacts, - projects, - startDate: LocalDate.now(), - weekCount, - }) - - const collection = new TimeEntryCollection([]) - collection.add(entries) -} - -describe("collection.add()", () => { - bench("1 week", async () => addEntries(1)) - bench("5 weeks", async () => addEntries(5)) - bench("10 weeks", async () => addEntries(10)) - // bench("50 weeks", async () => addEntries(50)) -}) - -// describe("collection.all()", () => {}) diff --git a/app/context/Database/test/Collection.test.ts b/app/context/Database/test/Collection.test.ts deleted file mode 100644 index 4bac5b4e..00000000 --- a/app/context/Database/test/Collection.test.ts +++ /dev/null @@ -1,179 +0,0 @@ -import { LocalDate } from "@js-joda/core" -import { contacts } from "data/contacts" -import { E, Either } from "lib/Effect" -import { generateDones } from "lib/generateDones" -import { Contact } from "schema/Contact" -import { DoneEntry } from "schema/DoneEntry" -import { DoneEntryCollection } from "schema/DoneEntryCollection" -import { describe, expect, it } from "vitest" - -describe("Collection", () => { - const alice = new Contact({ - userName: "alice", - firstName: "Alice", - lastName: "McAllister", - avatarUrl: "", - }) - const bob = new Contact({ - userName: "bob", - firstName: "Bob", - lastName: "Bobola", - avatarUrl: "", - }) - - const setup = () => { - const makeDone = ({ id }: Contact, content: string, date: string) => - new DoneEntry({ - contactId: id, - content, - date: LocalDate.parse(date), - }) - - const dones: DoneEntry[] = [ - // week of 2024-11-03 - makeDone(alice, "abc", "2024-11-04"), - makeDone(alice, "def", "2024-11-04"), - makeDone(alice, "qrs", "2024-11-05"), - makeDone(alice, "xyz", "2024-11-06"), - makeDone(bob, "ddd", "2024-11-04"), - makeDone(bob, "eee", "2024-11-04"), - makeDone(bob, "cba", "2024-11-05"), - makeDone(bob, "fed", "2024-11-06"), - - // week of 2024-11-10 - makeDone(alice, "aaa", "2024-11-12"), - makeDone(alice, "bbb", "2024-11-13"), - makeDone(alice, "ccc", "2024-11-13"), - makeDone(bob, "srq", "2024-11-12"), - makeDone(bob, "zyx", "2024-11-13"), - makeDone(bob, "fff", "2024-11-13"), - ] - - const collection = new DoneEntryCollection(dones, () => {}) - return { dones, collection } - } - - describe("constructor", () => { - it("instantiates the collection", () => { - const { collection } = setup() - expect(collection.all()).toHaveLength(14) - }) - }) - - describe("find", () => { - it("finds an item by ID", () => { - const { dones, collection } = setup() - const { id } = dones[0] - const item = collection.find(id) - expect(item).toEqual(dones[0]) - }) - - it("fails if an ID is not found", () => { - const { collection } = setup() - - const result = collection.effect.find("pizza").pipe(E.either, E.runSync) - expect(Either.isLeft(result)).toBe(true) - }) - - it("finds an item by a non-unique indexed property", () => { - const { collection } = setup() - const items = collection.findBy("contactId", alice.id) - expect(items).toHaveLength(7) - }) - - it("finds an item using an accessor function", () => { - const { collection } = setup() - const items = collection.findBy("week", "2024-11-03") - expect(items).toHaveLength(8) - }) - - it("finds an item by year", () => { - const { collection } = setup() - const items = collection.findBy("year", 2024) - expect(items).toHaveLength(14) - }) - }) - - describe("add", () => { - it("adds an item to the collection", () => { - const { collection } = setup() - const newDone = new DoneEntry({ - contactId: alice.id, - content: "new", - date: LocalDate.parse("2024-11-04"), - }) - const result = collection.add(newDone) - expect(result).toBe(newDone) - expect(collection.all()).toHaveLength(15) - expect(collection.findBy("contactId", alice.id)).toHaveLength(8) - expect(collection.findBy("week", "2024-11-03")).toHaveLength(9) - }) - - it("adds multiple items to the collection", () => { - const { collection } = setup() - expect(collection.all()).toHaveLength(14) - - // generate a bunch of dones - const dones = generateDones({ - today: LocalDate.parse("2024-11-09"), - weeks: 1, - productivity: 3, - enthusiasm: 0.1, - contacts, - }) - const result = collection.add(dones) - expect(result).toBe(dones) - expect(collection.all()).toHaveLength(224) - }) - }) - - describe("update", () => { - it("updates a string value", () => { - const { collection } = setup() - const dones = collection.all() - const item = dones[0] - collection.update({ ...item, content: "updated" }) - const updated = collection.find(item.id) - expect(updated.content).toBe("updated") - }) - - it("updates a date value", () => { - const { collection } = setup() - const dones = collection.all() - const item = dones[0] - collection.update({ ...item, date: LocalDate.parse("2024-11-05") }) - - const updated = collection.find(item.id) - expect(updated.date.toString()).toBe("2024-11-05") - }) - - it("updates an array value", () => { - const { collection } = setup() - const dones = collection.all() - const item = dones[0] - collection.update({ ...item, likes: [bob] }) - - const updated = collection.find(item.id) - expect(updated.likes).toEqual([bob]) - }) - }) - - describe("destroy", () => { - it("removes an item from the collection", () => { - const { collection } = setup() - const dones = collection.all() - const item = dones[0] - collection.destroy(item.id) - - expect(collection.all()).toHaveLength(13) - }) - }) - - describe("destroyAll", () => { - it("removes all items from the collection", () => { - const { collection } = setup() - collection.destroyAll() - expect(collection.all()).toHaveLength(0) - }) - }) -}) diff --git a/app/context/Database/test/Indexes.test.ts b/app/context/Database/test/Indexes.test.ts deleted file mode 100644 index f34dff08..00000000 --- a/app/context/Database/test/Indexes.test.ts +++ /dev/null @@ -1,261 +0,0 @@ -import { LocalDate } from "@js-joda/core" -import { E, Either } from "lib/Effect" -import { getSunday } from "lib/getSunday" -import { createId } from "schema/Cuid" -import { assert, describe, expect, it } from "vitest" -import { NonUniqueIndex, UniqueIndex } from "../Indexes" - -describe("UniqueIndex", () => { - type Item = { id: string; name: string } - - const setup = () => { - const items: Item[] = [ - { id: "1", name: "Alice" }, - { id: "2", name: "Bob" }, - ] - const index = new UniqueIndex(items, "id") - return { items, index } - } - - describe("constructor", () => { - it("builds an index", () => { - const { index } = setup() - expect(E.runSync(index.keys())).toEqual(["1", "2"]) - }) - - it("fails if there are duplicate keys", () => { - const items: Item[] = [ - { id: "1", name: "Alice" }, - { id: "2", name: "Bob" }, - { id: "3", name: "Alice" }, - ] - - expect(() => { - const index = new UniqueIndex(items, "name") - const _ = E.runSync(index.all()) // index is built on demand, so this won't fail until we access it - }).toThrowError(`Duplicate key 'alice' found while building index`) - }) - }) - - describe("keys", () => { - it("returns all keys in the index", () => { - const { index } = setup() - expect(E.runSync(index.keys())).toEqual(["1", "2"]) - }) - }) - - describe("find", () => { - it("finds an item by key", () => { - const { index } = setup() - const result = E.runSync(index.find("1")) - expect(result).toEqual({ id: "1", name: "Alice" }) - }) - - it("is case insensitive", () => { - const { items } = setup() - const index = new UniqueIndex(items, "name") - const result = E.runSync(index.find("alice")) - expect(result).toEqual({ id: "1", name: "Alice" }) - }) - - it("fails if the key is not found", () => { - const { index } = setup() - const result = index.find("3").pipe(E.either, E.runSync) - expect(Either.isLeft(result)).toBe(true) - }) - - it("supports a simple key accessor", () => { - const { items } = setup() - const index = new UniqueIndex(items, item => item.id) - expect(E.runSync(index.find("1"))).toEqual({ id: "1", name: "Alice" }) - }) - }) - - describe("add", () => { - it("adds an item", () => { - const { index } = setup() - const newItem = { id: "3", name: "Charlie" } - index.add(newItem) - expect(E.runSync(index.find("3"))).toEqual(newItem) - }) - - it("fails if the key already exists", () => { - const { index } = setup() - const result = index.add({ id: "1", name: "Bob" }).pipe(E.either, E.runSync) - expect(Either.isLeft(result)).toBe(true) - }) - }) - - describe("update", () => { - it("updates an item", () => { - const { index } = setup() - E.runSync(index.update({ id: "1", name: "Agnes" })) - expect(E.runSync(index.find("1"))).toEqual({ id: "1", name: "Agnes" }) - }) - - it("fails if the key does not exist", () => { - const { index } = setup() - const result = index.update({ id: "3", name: "Charlie" }).pipe(E.either, E.runSync) - expect(Either.isLeft(result)).toBe(true) - }) - }) - - describe("destroy", () => { - it("removes an item", () => { - const { index } = setup() - E.runSync(index.destroy({ id: "1", name: "Alice" })) - expect(E.runSync(index.all())).toHaveLength(1) - }) - - it("fails if the key does not exist", () => { - const { index } = setup() - const result = index.destroy({ id: "3", name: "Charlie" }).pipe(E.either, E.runSync) - expect(Either.isLeft(result)).toBe(true) - }) - }) - - describe("destroyAll", () => { - it("removes all items", () => { - const { index } = setup() - E.runSync(index.destroyAll()) - expect(E.runSync(index.all())).toEqual([]) - }) - }) -}) - -describe("NonUniqueIndex", () => { - class Done { - id: string - date: LocalDate - constructor( - public userName: string, - public content: string, - date: string, - ) { - this.id = createId() - this.date = LocalDate.parse(date) - } - } - - const setup = () => { - const dones: Done[] = [ - // week of 2024-11-03 - new Done("Alice", "abc", "2024-11-04"), - new Done("Alice", "def", "2024-11-04"), - new Done("Alice", "qrs", "2024-11-05"), - new Done("Alice", "xyz", "2024-11-06"), - new Done("Bob", "ddd", "2024-11-04"), - new Done("Bob", "eee", "2024-11-04"), - new Done("Bob", "cba", "2024-11-05"), - new Done("Bob", "fed", "2024-11-06"), - - // week of 2024-11-10 - new Done("Alice", "aaa", "2024-11-12"), - new Done("Alice", "bbb", "2024-11-13"), - new Done("Alice", "ccc", "2024-11-13"), - new Done("Bob", "srq", "2024-11-12"), - new Done("Bob", "zyx", "2024-11-13"), - new Done("Bob", "fff", "2024-11-13"), - ] - const index = new NonUniqueIndex(dones, "userName") - return { dones, index } - } - - describe("constructor", () => { - it("builds an index", () => { - const { index } = setup() - expect(E.runSync(index.all())).toHaveLength(14) - }) - }) - - describe("keys", () => { - it("returns all keys in the index", () => { - const { index } = setup() - expect(E.runSync(index.keys())).toEqual(["alice", "bob"]) - }) - }) - - describe("find", () => { - it("groups with the same key", () => { - const { index } = setup() - expect(E.runSync(index.find("Alice"))).toHaveLength(7) - }) - - it("returns an empty array if the key is not found", () => { - const { index } = setup() - expect(E.runSync(index.find("Charlie"))).toEqual([]) - }) - - it("accepts a function to return a key", () => { - const { dones } = setup() - const index = new NonUniqueIndex(dones, item => item.userName) - expect(E.runSync(index.find("Alice"))).toHaveLength(7) - }) - - it("indexes dones by week", () => { - const { dones } = setup() - const byWeek = (done: Done) => getSunday(done.date).toString() - const index = new NonUniqueIndex(dones, byWeek) - expect(E.runSync(index.keys())).toEqual(["2024-11-03", "2024-11-10"]) - }) - }) - - describe("add", () => { - it("adds an item to the index", () => { - const { index } = setup() - E.runSync(index.add(new Done("Charlie", "asdf", "2024-11-12"))) - expect(E.runSync(index.find("Charlie"))).toHaveLength(1) - }) - - it("adds an item with an existing key to the index", () => { - const { index } = setup() - E.runSync(index.add(new Done("Alice", "zzz", "2024-11-13"))) - expect(E.runSync(index.find("Alice"))).toHaveLength(8) - }) - }) - - describe("update", () => { - it("updates an item in the index", () => { - const { index } = setup() - const firstDone = () => E.runSync(index.all())[0] - E.runSync(index.update({ ...firstDone(), content: "zzz" })) - expect(firstDone().content).toBe("zzz") - }) - - it("fails if the item is not found", () => { - const { index } = setup() - const done = new Done("Charlie", "asdf", "2024-11-12") - - const result = index.update(done).pipe(E.either, E.runSync) - assert(Either.isLeft(result)) - expect(result.left.message).toBe(`An item with userName "charlie" wasn't found`) - }) - }) - - describe("destroy", () => { - it("removes an item from the index", () => { - const { index } = setup() - - const done = E.runSync(index.all())[0] - E.runSync(index.destroy(done)) - expect(E.runSync(index.all())).toHaveLength(13) - }) - - it("fails if the item is not found", () => { - const { index } = setup() - const done = new Done("Charlie", "asdf", "2024-11-12") - - const result = index.destroy(done).pipe(E.either, E.runSync) - assert(Either.isLeft(result)) - expect(result.left.message).toBe(`An item with userName "charlie" wasn't found`) - }) - }) - - describe("destroyAll", () => { - it("removes all items from the index", () => { - const { index } = setup() - E.runSync(index.destroyAll()) - expect(E.runSync(index.all())).toHaveLength(0) - }) - }) -}) diff --git a/app/context/Database/types.ts b/app/context/Database/types.ts deleted file mode 100644 index 8aad9cf8..00000000 --- a/app/context/Database/types.ts +++ /dev/null @@ -1,26 +0,0 @@ -import type { Root, RootEncoded } from "schema/Root" - -/** A CollectionItem is an object with an id */ -export type CollectionItem = { - [key: string]: any - id: string -} - -export type ItemOf = CollectionItem & Root[K][keyof Root[K]] - -export type EncodedItemOf = CollectionItem & - RootEncoded[K][keyof RootEncoded[K]] - -/** Matches the name of any string-valued property of T */ -export type StringKeyOf = { - [K in keyof Item]: Item[K] extends string ? K & string : never -}[keyof Item] - -/** Extracts the type of the id field from an item type */ -export type IdOf = Item["id"] - -/** - * An accessor is a function that takes an item and returns a string value. Used to create indexes - * on collections. - */ -export type Accessor = (item: Item) => string diff --git a/app/data/clients.ts b/app/data/clients.ts index bd507857..e50f326d 100644 --- a/app/data/clients.ts +++ b/app/data/clients.ts @@ -1,5 +1,8 @@ +import { create } from "@dxos/react-client/echo" import { Client } from "schema/Client" +const sNow = new Date().toISOString() + export const clients = ` 2scale aba @@ -125,4 +128,4 @@ zam` .trim() .split("\n") .filter(s => s.length) - .map(line => new Client({ code: line.trim() })) + .map(line => create(Client, { code: line.trim(), timestamp: sNow })) diff --git a/app/data/contacts.ts b/app/data/contacts.ts index a015deaa..b6a91527 100644 --- a/app/data/contacts.ts +++ b/app/data/contacts.ts @@ -1,4 +1,4 @@ -import { type ContactId, Contact, ExtendedContact } from "schema/Contact" +import { type Contact, ExtendedContact } from "schema/Contact" // These will be replaced with contact information that people can edit @@ -64,15 +64,9 @@ export const contacts = [ avatarUrl: "https://github-production-user-asset-6210df.s3.amazonaws.com/2136620/319523394-c7499fc3-89ce-4577-953c-2ff23ea353c4.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAVCODYLSA53PQK4ZA%2F20241107%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20241107T172214Z&X-Amz-Expires=300&X-Amz-Signature=3c8566391ec13159c78f8f82851e32887ceb850aa48efb06abd5a36ab01e1b71&X-Amz-SignedHeaders=host", }, -].map( - contact => - new Contact({ - ...contact, - id: contact.userName as ContactId, - }), -) +].map(contact => ({ ...contact, id: contact.userName }) as Contact) /** for testing purposes */ export const fakeExtendedContacts = contacts.map( - contact => new ExtendedContact({ ...contact, isSelf: false, isMember: true, isAdmin: true }), + contact => new ExtendedContact({ contact, isSelf: false, isAdmin: true, identity: undefined }), ) diff --git a/app/data/projects.ts b/app/data/projects.ts index 54fd7061..e3f2f643 100644 --- a/app/data/projects.ts +++ b/app/data/projects.ts @@ -1,7 +1,10 @@ +import { create } from "@dxos/react-client/echo" import { unique } from "lib/unique" -import { Project } from "schema/Project" +import { makeFullCode, Project } from "schema/Project" import tailwindColors from "tailwindcss/colors" +const sNow = new Date().toISOString() + const projectList = ` Business:Contracts yes Contract negotiation & other back-and-forth Business:Marketing Work on DevResults.com, writing blogs, creating materials, etc. @@ -72,7 +75,6 @@ Thought Leadership ` return { code, subCode, - fullCode, requiresClient: requiresClient === "yes", description, } @@ -112,10 +114,14 @@ const codeColor = (code: string) => { return colors[index % colors.length] } -export const projects = projectList.map( - p => - new Project({ - ...p, - color: codeColor(p.code), - }), +export const projects = projectList.map(({ code, subCode, requiresClient, description }) => + create(Project, { + code, + subCode, + fullCode: makeFullCode(code, subCode), + description, + requiresClient, + color: codeColor(code), + timestamp: sNow, + }), ) diff --git a/app/lib/csvToDoneEntries.ts b/app/lib/csvToDoneEntries.ts index 1e19e82d..06658850 100644 --- a/app/lib/csvToDoneEntries.ts +++ b/app/lib/csvToDoneEntries.ts @@ -1,8 +1,7 @@ -import { createId } from "@paralleldrive/cuid2" +import { LocalDate } from "@js-joda/core" import { Data, E, S } from "lib/Effect" import { type ContactId } from "schema/Contact" -import { ProvidedContacts } from "schema/ContactCollection" -import { DoneEntry, DoneEntryId } from "schema/DoneEntry" +import { ContactNotFoundError, ProvidedContacts } from "schema/ContactCollection" import { csvToSchema } from "./parseCsv" class DoneEntryCsvRow extends S.Class("DoneEntryCsvRow")({ @@ -10,6 +9,7 @@ class DoneEntryCsvRow extends S.Class("DoneEntryCsvRow")({ date: S.String, content: S.String, likes: S.String, + timestamp: S.String, }) {} export const csvToDoneEntries = (csvData: string) => @@ -22,23 +22,33 @@ export const csvToDoneEntries = (csvData: string) => const { input, index } = row return E.gen(function* () { const contacts = yield* ProvidedContacts - const contact = yield* contacts.effect.findBy("userName", row.userName.toLowerCase()) + const contact = contacts.find(({ userName }) => userName.toLowerCase() === row.userName) + if (contact === undefined) + return yield* E.fail(new ContactNotFoundError({ userName: row.userName })) // `likes` comes in as as serialized array of user names; need to convert that to contactIDs - const likesUserNames = (row.likes ? JSON.parse(row.likes) : []) as string[] + const likesUserNames = JSON.parse(row.likes) as string[] const likes = [] as ContactId[] for (const userName of likesUserNames) { - const contact = yield* contacts.effect.findBy("userName", userName.toLowerCase()) + const contact = contacts.find(d => d.userName.toLowerCase() === userName) + if (contact === undefined) return yield* E.fail(new ContactNotFoundError({ userName })) likes.push(contact.id) } - return yield* S.decode(DoneEntry)({ - id: DoneEntryId.make(createId()), + let date + try { + date = LocalDate.parse(row.date).toString() + } catch { + return yield* E.fail(new Error("Invalid date.")) + } + + return { contactId: contact.id, - date: row.date, + date, content: row.content, likes, - }) + timestamp: new Date(Number(row.timestamp)).toISOString(), + } }).pipe(E.mapError(cause => new DoneEntryCsvParseError({ input, index, cause }))) }) const allErrors = [ @@ -64,10 +74,6 @@ export class DoneEntryCsvParseError // const adaptError = (error: Error) => { const { message } = error - if (message.includes("could not be parsed as LocalDate")) { - return "Invalid date." - } - if (message.includes("is missing")) { const field = /"([^"]+)"/.exec(message)?.[1] return `The field \`${field}\` is required.` diff --git a/app/lib/csvToTimeEntries.ts b/app/lib/csvToTimeEntries.ts index c8ddc18a..8e754474 100644 --- a/app/lib/csvToTimeEntries.ts +++ b/app/lib/csvToTimeEntries.ts @@ -1,10 +1,9 @@ -import { createId } from "@paralleldrive/cuid2" +import { LocalDate } from "@js-joda/core" import { Data, E, S } from "lib/Effect" -import { ProvidedClients } from "schema/ClientCollection" -import { ProvidedContacts } from "schema/ContactCollection" +import { ClientNotFoundError, ProvidedClients } from "schema/ClientCollection" +import { ContactNotFoundError, ProvidedContacts } from "schema/ContactCollection" import { reconstructTimeEntryInput } from "schema/lib/reconstructTimeEntryInput" -import { ProvidedProjects } from "schema/ProjectCollection" -import { TimeEntry } from "schema/TimeEntry" +import { findByCode, ProvidedProjects } from "schema/ProjectCollection" import { csvToSchema } from "./parseCsv" export class TimeEntryCsvRow extends S.Class("TimeEntryCsvRow")({ @@ -29,25 +28,43 @@ export const csvToTimeEntries = (csvData: string) => const projects = yield* ProvidedProjects const clients = yield* ProvidedClients - const contact = yield* contacts.effect.findBy("userName", row.userName.toLowerCase()) - const project = yield* projects.findByCode(row.project) - const client = - row.client.length > 0 ? yield* clients.effect.findBy("code", row.client) : undefined + const contact = contacts.find( + ({ userName }) => userName.toLowerCase() === row.userName.toLowerCase(), + ) + if (contact === undefined) { + return yield* E.fail(new ContactNotFoundError({ userName: row.userName })) + } - return yield* S.decode(TimeEntry)({ + const project = yield* findByCode(row.project, projects) + let client + if (row.client.length > 0) { + client = clients.find(({ code }) => code.toLowerCase() === row.client.toLowerCase()) + if (client === undefined) { + return yield* E.fail(new ClientNotFoundError({ code: row.client })) + } + } + + let date + try { + date = LocalDate.parse(row.date).toString() + } catch { + return yield* E.fail(new Error("Invalid date.")) + } + + return { ...row, - id: createId(), + date, duration: Math.floor(row.duration * 60), // duration comes in as hours project: project.id, client: client?.id, contactId: contact.id, - timestamp: Date.now(), + timestamp: new Date().toISOString(), input: reconstructTimeEntryInput({ ...row, durationInHours: row.duration, project: project.fullCode, }), - }) + } }).pipe(E.mapError(cause => new TimeEntryCsvParseError({ input, index, cause }))) }) @@ -75,10 +92,6 @@ export class TimeEntryCsvParseError // const adaptError = (error: Error) => { const { message } = error - if (message.includes("could not be parsed as LocalDate")) { - return "Invalid date." - } - if (message.includes("is missing")) { const field = /"([^"]+)"/.exec(message)?.[1] return `The field \`${field}\` is required.` diff --git a/app/lib/generateDones.ts b/app/lib/generateDones.ts index 41a56159..d3d0f404 100644 --- a/app/lib/generateDones.ts +++ b/app/lib/generateDones.ts @@ -3,11 +3,12 @@ import { dummyDones } from "data/dummyDones" import { isWeekend } from "lib/isWeekend" import { randomElement } from "lib/randomElement" import type { Contact } from "schema/Contact" -import { DoneEntry } from "schema/DoneEntry" +import { type DoneEntry } from "schema/DoneEntry" export const generateDones = ({ today, weeks, productivity, enthusiasm, contacts }: params) => { const N = weeks * 7 * productivity * contacts.length - const result: DoneEntry[] = [] + const result: Array> = [] + const now = new Date().toISOString() let percentComplete = 0 for (let i = 0; i < N; i++) { const currentPercentComplete = Math.floor((i / N) * 10) * 10 @@ -18,8 +19,8 @@ export const generateDones = ({ today, weeks, productivity, enthusiasm, contacts const { id } = randomElement(contacts) const date = getRandomWorkday(today, weeks) const content = randomElement(dummyDones) - const likes: Contact[] = contacts.filter(() => Math.random() < enthusiasm) - result.push(new DoneEntry({ content, date, contactId: id, likes })) + const likes = contacts.filter(() => Math.random() < enthusiasm).map(({ id }) => id) + result.push({ content, date: date.toString(), contactId: id, likes, timestamp: now }) } return result diff --git a/app/lib/generateTimeEntries.ts b/app/lib/generateTimeEntries.ts index fb09b081..46b84182 100644 --- a/app/lib/generateTimeEntries.ts +++ b/app/lib/generateTimeEntries.ts @@ -5,7 +5,7 @@ import type { Client } from "schema/Client" import type { Contact, ContactId } from "schema/Contact" import { type Project } from "schema/Project" import { reconstructTimeEntryInput } from "schema/lib/reconstructTimeEntryInput" -import { TimeEntry } from "schema/TimeEntry" +import { type TimeEntry } from "schema/TimeEntry" import { getWorkDays } from "./getWorkDays" export function generateTimeEntries({ @@ -19,8 +19,8 @@ export function generateTimeEntries({ seed = "1234", }: Inputs) { const random = makeRandom(seed) - const OUT = projects.find(d => d.code.toLowerCase() === "out")! - const timeEntries: TimeEntry[] = [] + const OUT = projects.find(d => d.code.toLowerCase() === "out")!.id + const timeEntries: Array> = [] // Assign a timekeeping style to each contact const contactStyles = Object.fromEntries( @@ -41,47 +41,48 @@ export function generateTimeEntries({ return acc }, []) - const dayOff = (contactId: ContactId, date: LocalDate) => { + const dayOff = (contactId: ContactId, date: string) => { const duration = 60 * 8 return [ - new TimeEntry({ + { contactId, date, project: OUT, duration, input: `Out ${duration}mins`, - }), + timestamp: new Date().toISOString(), + }, ] } - const normalDay = (contactId: ContactId, date: LocalDate) => { + const normalDay = (contactId: ContactId, date: string) => { const todaysTotal = random.integer(5.5, 8.5) * 60 // 5.5 - 8.5 hrs + const timestamp = new Date().toISOString() let totalDuration = 0 - const newEntries: TimeEntry[] = [] + const newEntries: Array> = [] while (totalDuration < todaysTotal) { const duration = Math.min(random.integer(1, 32) * 15, todaysTotal - totalDuration) const project = random.pick(projects) - const maybeClient = project.requiresClient ? { client: random.pick(clients) } : {} + const maybeClient = project.requiresClient ? random.pick(clients) : null const description = random.probability(0.05) ? random.pick(dummyDones) : "" const input = reconstructTimeEntryInput({ durationInHours: duration / 60, project: project.fullCode, - client: maybeClient.client?.code, + client: maybeClient?.code, description, }) - newEntries.push( - new TimeEntry({ - contactId, - date, - project, - ...maybeClient, - duration, - input, - description, - }), - ) + newEntries.push({ + contactId, + date, + project: project.id, + client: maybeClient?.id, + duration, + input, + description, + timestamp, + }) totalDuration += duration } @@ -101,8 +102,9 @@ export function generateTimeEntries({ if (skipWeek || procrastinating) continue for (const date of week) { + const sDate = date.toString() const isDayOff = random.probability(0.15) - const newEntries = isDayOff ? dayOff(contact.id, date) : normalDay(contact.id, date) + const newEntries = isDayOff ? dayOff(contact.id, sDate) : normalDay(contact.id, sDate) timeEntries.push(...newEntries) } } diff --git a/app/lib/stripUndefined.ts b/app/lib/stripUndefined.ts index d736091a..69288cf0 100644 --- a/app/lib/stripUndefined.ts +++ b/app/lib/stripUndefined.ts @@ -1,4 +1,7 @@ -import type { CollectionItem } from "context/Database/types" +type CollectionItem = { + [key: string]: any + id: string +} /** Remove undefined values from an object */ export const stripUndefined = (item: T): T => diff --git a/app/lib/test/csvToDoneEntries.test.ts b/app/lib/test/csvToDoneEntries.test.ts index 8ef96a1c..2b07db0f 100644 --- a/app/lib/test/csvToDoneEntries.test.ts +++ b/app/lib/test/csvToDoneEntries.test.ts @@ -1,7 +1,7 @@ import { contacts } from "data/contacts" import { E, pipe } from "lib/Effect" import { type BaseTestCase } from "lib/runTestCases" -import { ContactCollection, ProvidedContacts } from "schema/ContactCollection" +import { ProvidedContacts } from "schema/ContactCollection" import { assert, expect, test } from "vitest" import { csvToDoneEntries } from "../csvToDoneEntries" @@ -58,7 +58,7 @@ const label = ({ label, input }: TestCase) => const errorPadding = Math.max(...testCases.filter(tc => tc.error).map(tc => label(tc).length)) -const TestContacts = new ContactCollection(contacts) +const TestContacts = contacts const decode = (csv: string) => pipe(csv, csvToDoneEntries, E.provideService(ProvidedContacts, TestContacts), E.runSync) diff --git a/app/lib/test/csvToTimeEntries.test.ts b/app/lib/test/csvToTimeEntries.test.ts index df0eec15..96fd8f91 100644 --- a/app/lib/test/csvToTimeEntries.test.ts +++ b/app/lib/test/csvToTimeEntries.test.ts @@ -4,9 +4,9 @@ import actualHoursCsv from "data/csv/actual-hours.csv?raw" import { projects } from "data/projects" import { E, pipe } from "lib/Effect" import { type BaseTestCase } from "lib/runTestCases" -import { ClientCollection, ProvidedClients } from "schema/ClientCollection" -import { ContactCollection, ProvidedContacts } from "schema/ContactCollection" -import { ProjectCollection, ProvidedProjects } from "schema/ProjectCollection" +import { ProvidedClients } from "schema/ClientCollection" +import { ProvidedContacts } from "schema/ContactCollection" +import { ProvidedProjects } from "schema/ProjectCollection" import { assert, expect, test } from "vitest" import { csvToTimeEntries } from "../csvToTimeEntries" @@ -48,7 +48,7 @@ const testCases = [ }, { input: "leslie,2024-05-30,1,Support: Ongoing,qrs,tickets", - error: `An item with code "qrs" wasn't found`, + error: `There is no client with code "qrs"`, }, // VALID @@ -78,9 +78,9 @@ const label = ({ label, input }: TestCase) => const errorPadding = Math.max(...testCases.filter(tc => tc.error).map(tc => label(tc).length)) -const TestProjects = new ProjectCollection(projects) -const TestClients = new ClientCollection(clients) -const TestContacts = new ContactCollection(contacts) +const TestProjects = projects +const TestClients = clients +const TestContacts = contacts for (const testCase of testCases) testCsvToTimeEntries(testCase) diff --git a/app/root.tsx b/app/root.tsx index 4352a9ad..17528cb4 100644 --- a/app/root.tsx +++ b/app/root.tsx @@ -4,6 +4,11 @@ import { Loading } from "ui/Loading" import { ClientProvider } from "@dxos/react-client" import { configProvider } from "./config" import "./index.css" +import { DoneEntry } from "./schema/DoneEntry" +import { TimeEntry } from "./schema/TimeEntry" +import { Contact } from "./schema/Contact" +import { Client } from "./schema/Client" +import { Project } from "./schema/Project" const createWorker = () => new SharedWorker(new URL("../public/shared-worker", import.meta.url), { @@ -13,7 +18,12 @@ const createWorker = () => export default function App() { return ( - + ) diff --git a/app/schema/Client.ts b/app/schema/Client.ts index 9f49a5ff..2b0cbd00 100644 --- a/app/schema/Client.ts +++ b/app/schema/Client.ts @@ -1,16 +1,20 @@ +import { TypedObject } from "@dxos/echo-schema" import { pipe, S } from "lib/Effect" import { stripUndefined } from "lib/stripUndefined" import { Cuid } from "./Cuid" -import { withDefault, withDefaultId } from "./lib/withDefault" +import { withDefaultId } from "./lib/withDefault" export const ClientId = pipe(Cuid, S.brand("ClientId")) export type ClientId = typeof ClientId.Type -export class Client extends S.Class("Client")({ +export class Client extends TypedObject({ + typename: "devresults.com/type/Client", + version: "0.1.0", +})({ id: withDefaultId(ClientId), code: S.String, description: S.optional(S.String), - timestamp: S.DateFromNumber.pipe(withDefault(() => new Date())), + timestamp: S.String, }) { static decode = S.decodeSync(Client) static encode = (client: Client) => diff --git a/app/schema/ClientCollection.ts b/app/schema/ClientCollection.ts index 2a4bdc63..b66e04c6 100644 --- a/app/schema/ClientCollection.ts +++ b/app/schema/ClientCollection.ts @@ -1,16 +1,13 @@ -import { Collection } from "context/Database/Collection" -import { Context } from "lib/Effect" -import { Client } from "./Client" +import { Context, Data } from "lib/Effect" +import type { Client } from "./Client" -export class ClientCollection extends Collection<"clients", Client> { - override readonly name = "clients" as const - - override readonly indexes = { - code: { unique: true }, - } as const - - override readonly encode = Client.encode -} +export type ClientCollection = Client[] // prettier-ignore export class ProvidedClients extends Context.Tag("ProvidedClients")() { } + +export class ClientNotFoundError // + extends Data.TaggedError("ClientCollection/ClientNotFound")<{ code: string }> +{ + message = `There is no client with code "${this.code}"` +} diff --git a/app/schema/ClientFromId.ts b/app/schema/ClientFromId.ts deleted file mode 100644 index 488f408f..00000000 --- a/app/schema/ClientFromId.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { E, ParseResult, S } from "lib/Effect" -import { Client, ClientId } from "./Client" -import { ProvidedClients } from "./ClientCollection" - -export const ClientFromId = S.transformOrFail(ClientId, S.typeSchema(Client), { - strict: true, - decode: (id, _, ast) => - E.gen(function* () { - const clients = yield* ProvidedClients - return yield* clients.effect.find(id) - }).pipe( - E.mapError(error => { - return new ParseResult.Type(ast, id, error.message) - }), - ), - - encode: p => ParseResult.succeed(ClientId.make(p.id)), -}) diff --git a/app/schema/Contact.ts b/app/schema/Contact.ts index 71e0997a..a3a8511e 100644 --- a/app/schema/Contact.ts +++ b/app/schema/Contact.ts @@ -1,8 +1,7 @@ -import type { Team, User } from "@localfirst/auth" -import type { Base58 } from "@localfirst/crypto" -import { Context, E, pipe, S } from "lib/Effect" -import { getInvitationStatus } from "lib/getInvitationStatus" -import { BrandedSchema } from "./BrandedSchema" +import { TypedObject } from "@dxos/echo-schema" +import { type PublicKey } from "@dxos/react-client" +import { type Identity } from "@dxos/react-client/halo" +import { pipe, S } from "lib/Effect" import { Cuid } from "./Cuid" import { withDefaultId } from "./lib/withDefault" @@ -10,82 +9,78 @@ export const ContactId = pipe(Cuid, S.brand("ContactId")) export type ContactId = typeof ContactId.Type /** A contact's record, including staff directory type information */ -export class Contact extends S.Class("Contact")({ - /** For members, this is the lf/auth userId. Otherwise contains their username as a placeholder. */ +export class Contact extends TypedObject({ + typename: "devresults.com/type/Contact", + version: "0.1.0", +})({ id: withDefaultId(ContactId), - + /** dxos identityKey */ + identityId: S.String, userName: S.String, firstName: S.String, lastName: S.String, avatarUrl: S.String, - - /** If invited, we store the id so that when they're admitted we can associate their lf/auth contact with their contact document */ - invitationId: S.optional(BrandedSchema()), }) { - get fullName() { - return `${this.firstName} ${this.lastName}` - } + static encode = S.encodeSync(Contact) + static decode = S.decodeSync(Contact) +} - get lastFirst() { - return `${this.lastName}, ${this.firstName}` - } +type EncodedContact = typeof Contact.Encoded - get initials() { - return `${this.firstName[0]}${this.lastName[0]}`.toUpperCase() - } +// unable to extend dxos objects the same way as effect objects, so we'll do it naively - static encode = S.encodeSync(Contact) - static decode = S.decodeSync(Contact) +export class ExtendedContact implements EncodedContact { + readonly contact: Contact + readonly isSelf: boolean + readonly isAdmin: boolean + readonly identityKey: PublicKey | undefined + readonly invitationStatus?: string + get isMember() { + return true + } - static extendContact = (c: Contact, { team, user }: { team: Team; user: User }) => - pipe( - c, - extendContact, - E.provideService(ProvidedTeam, team), - E.provideService(ProvidedUser, user), - E.runSync, - ) -} + constructor({ + contact, + isSelf, + isAdmin, + identity, + }: { + contact: Contact + isSelf: boolean + isAdmin: boolean + identity: Identity | undefined + }) { + this.contact = contact + this.isSelf = isSelf + this.isAdmin = isAdmin + this.identityKey = identity?.identityKey + } -export type EncodedContact = typeof Contact.Encoded + get id() { + return this.contact.id + } -export class ProvidedTeam extends Context.Tag("ProvidedTeam")() {} -export class ProvidedUser extends Context.Tag("ProvidedUser")() {} + get identityId() { + return this.contact.identityId + } -export const extendContact = (contact: Contact) => - E.gen(function* (_) { - const team = yield* ProvidedTeam - const user = yield* ProvidedUser - const isMember = team.has(contact.id) - const isAdmin = isMember ? team.memberIsAdmin(contact.id) : false - const isSelf = contact.id === user.userId - const invitationStatus = isMember ? undefined : getInvitationStatus(team, contact.invitationId) - return new ExtendedContact({ ...contact, isSelf, isMember, isAdmin, invitationStatus }) - }) + get userName() { + return this.contact.userName + } -/** A contact along with information regarding their team membership */ -export class ExtendedContact extends Contact.extend("ExtendedContact")({ - /** True if this is the currently logged in contact's record */ - isSelf: S.Boolean, + get firstName() { + return this.contact.firstName + } - /** True if this contact is a member of the team */ - isMember: S.Boolean, + get lastName() { + return this.contact.lastName + } - /** True if this contact is an admin of the team */ - isAdmin: S.Boolean, + get avatarUrl() { + return this.contact.avatarUrl + } - /** The status of this contact's invitation, if applicable */ - invitationStatus: S.optional(S.Literal("NOT_INVITED", "PENDING", "REVOKED", "EXPIRED")), -}) { - static encode = Contact.encode - /** takes an encoded contact and returns a decoded + extended contact */ - static decode = (c: EncodedContact, { team, user }: { team: Team; user: User }) => - pipe( - c, - Contact.decode, - extendContact, - E.provideService(ProvidedTeam, team), - E.provideService(ProvidedUser, user), - E.runSync, - ) + get fullName() { + return `${this.firstName} ${this.lastName}` + } } diff --git a/app/schema/ContactCollection.ts b/app/schema/ContactCollection.ts index f634c7cc..40ace7d2 100644 --- a/app/schema/ContactCollection.ts +++ b/app/schema/ContactCollection.ts @@ -1,20 +1,15 @@ -import { Collection } from "context/Database/Collection" -import { Context } from "lib/Effect" -import { Contact, type ExtendedContact } from "./Contact" +import { Context, Data } from "lib/Effect" +import type { Contact, ExtendedContact } from "./Contact" -export class ContactCollection< - T extends Contact | ExtendedContact = Contact | ExtendedContact, -> extends Collection<"contacts", T> { - override readonly name = "contacts" as const - - override readonly indexes = { - userName: { unique: true }, - } as const - - override readonly encode = Contact.encode -} +export type ContactCollection = T[] export class ProvidedContacts extends Context.Tag("ProvidedContacts")< ProvidedContacts, ContactCollection >() {} + +export class ContactNotFoundError // + extends Data.TaggedError("ContactCollection/ContactNotFound")<{ userName: string }> +{ + message = `There is no contact with username "${this.userName}"` +} diff --git a/app/schema/ContactFromId.ts b/app/schema/ContactFromId.ts deleted file mode 100644 index 52be53be..00000000 --- a/app/schema/ContactFromId.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { E, ParseResult, S } from "lib/Effect" -import { Contact, ContactId } from "./Contact" -import { ProvidedContacts } from "./ContactCollection" - -export const ContactFromId = S.transformOrFail(ContactId, S.typeSchema(Contact), { - strict: true, - decode: (id, _, ast) => - E.gen(function* () { - const contacts = yield* ProvidedContacts - return yield* contacts.effect.find(id) - }).pipe( - E.mapError(error => { - return new ParseResult.Type(ast, id, error.message) - }), - ), - - encode: p => ParseResult.succeed(ContactId.make(p.id)), -}) diff --git a/app/schema/DoneEntry.ts b/app/schema/DoneEntry.ts index 734a2b4f..2417000a 100644 --- a/app/schema/DoneEntry.ts +++ b/app/schema/DoneEntry.ts @@ -1,29 +1,28 @@ +import { TypedObject } from "@dxos/echo-schema" import { E, pipe, S } from "lib/Effect" import { stripUndefined } from "lib/stripUndefined" -import { ContactId } from "schema/Contact" import { Cuid } from "schema/Cuid" -import { LocalDateFromString } from "schema/LocalDate" import type { Optional } from "types/types" -import { ContactCollection, ProvidedContacts } from "./ContactCollection" -import { ContactFromId } from "./ContactFromId" import { withDefaultId } from "./lib/withDefault" export const DoneEntryId = pipe(Cuid, S.brand("DoneEntryId")) export type DoneEntryId = typeof DoneEntryId.Type -export class DoneEntry extends S.Class("DoneEntry")({ +export class DoneEntry extends TypedObject({ + typename: "devresults.com/type/DoneEntry", + version: "0.1.0", +})({ id: withDefaultId(DoneEntryId), - contactId: ContactId, - date: LocalDateFromString, + date: S.String, + contactId: S.String, content: S.String, - likes: S.optionalWith(S.Array(ContactFromId), { default: () => [], exact: true }), - timestamp: S.optionalWith(S.DateFromNumber, { default: () => new Date(), exact: true }), + likes: S.Array(S.String), + timestamp: S.String, }) { - static decode = (encoded: DoneEntryEncoded, { contacts }: { contacts: ContactCollection }) => + static decode = (encoded: DoneEntryEncoded) => pipe( encoded, // S.decode(DoneEntry), - E.provideService(ProvidedContacts, contacts), E.runSync, ) @@ -31,7 +30,6 @@ export class DoneEntry extends S.Class("DoneEntry")({ pipe( decoded, // S.encode(DoneEntry), - E.provideService(ProvidedContacts, new ContactCollection()), E.runSync, stripUndefined, ) diff --git a/app/schema/DoneEntryCollection.ts b/app/schema/DoneEntryCollection.ts index 1c311cb5..d5e346e1 100644 --- a/app/schema/DoneEntryCollection.ts +++ b/app/schema/DoneEntryCollection.ts @@ -1,16 +1,3 @@ -import { Collection } from "context/Database/Collection" -import { getSunday } from "lib/getSunday" -import { DoneEntry } from "./DoneEntry" +import { type DoneEntry } from "./DoneEntry" -export class DoneEntryCollection extends Collection<"doneEntries", DoneEntry> { - override readonly name = "doneEntries" as const - - override readonly indexes = { - date: { unique: false, accessor: (d: DoneEntry) => d.date.toString() }, - week: { unique: false, accessor: (d: DoneEntry) => getSunday(d.date).toString() }, - year: { unique: false, accessor: (e: DoneEntry) => getSunday(e.date).year().toString() }, - contactId: { unique: false }, - } as const - - override readonly encode = (d: DoneEntry) => DoneEntry.encode(d) -} +export type DoneEntryCollection = DoneEntry[] diff --git a/app/schema/Project.ts b/app/schema/Project.ts index 230862f1..f44e911b 100644 --- a/app/schema/Project.ts +++ b/app/schema/Project.ts @@ -1,19 +1,24 @@ +import { TypedObject } from "@dxos/echo-schema" import { pipe, S } from "lib/Effect" import { stripUndefined } from "lib/stripUndefined" import { Cuid } from "./Cuid" -import { withDefault, withDefaultId } from "./lib/withDefault" +import { withDefaultId } from "./lib/withDefault" export const ProjectId = pipe(Cuid, S.brand("ProjectId")) export type ProjectId = typeof ProjectId.Type -export class Project extends S.Class("Project")({ +export class Project extends TypedObject({ + typename: "devresults.com/type/Project", + version: "0.1.0", +})({ id: withDefaultId(ProjectId), code: S.String, subCode: S.optional(S.String), + fullCode: S.String, // ideally calculated fields would not need to be on the defined schema description: S.optional(S.String), - requiresClient: S.Boolean.pipe(withDefault(() => false)), + requiresClient: S.Boolean, color: S.optional(S.String), - timestamp: S.DateFromNumber.pipe(withDefault(() => new Date())), + timestamp: S.String, }) { static decode = S.decodeSync(Project) static encode = (project: Project) => @@ -22,10 +27,6 @@ export class Project extends S.Class("Project")({ S.encodeSync(Project), stripUndefined, ) - - get fullCode() { - return makeFullCode(this.code, this.subCode) - } } export const makeFullCode = (code: string, subCode?: string) => diff --git a/app/schema/ProjectCollection.ts b/app/schema/ProjectCollection.ts index 7ac419ac..a3c3dfa4 100644 --- a/app/schema/ProjectCollection.ts +++ b/app/schema/ProjectCollection.ts @@ -1,55 +1,44 @@ -import { Collection } from "context/Database/Collection" -import { Context, E, Either, Data } from "lib/Effect" -import { makeFullCode, Project } from "./Project" +import { Context, Data, E } from "lib/Effect" +import { makeFullCode, type Project } from "./Project" -export class ProjectCollection extends Collection<"projects", Project> { - override readonly name = "projects" as const +export type ProjectCollection = Project[] - override readonly indexes = { - fullCode: { unique: true }, - code: { unique: false }, - subCode: { unique: false }, - } as const +/** + * We have particular requirements for looking up projects by code, so we can't just use an index. + * - You can look up a project by its full code, e.g. `Feature: API` or `Out` + * - You can look up a project by its subcode, e.g. `Training` or `Project X` as long as there is only one project with that subcode + */ +export const findByCode = (input: string, projects: ProjectCollection) => { + if (input.length === 0) return E.fail(new ProjectCodeNotFoundError({ input })) - override readonly encode = Project.encode + const _this: ProjectCollection = projects + return E.gen(function* () { + const [code, subCode] = input.split(/:\s*/gi).map(s => s.trim().replaceAll(/\s+/g, "-")) - /** - * We have particular requirements for looking up projects by code, so we can't just use an index. - * - You can look up a project by its full code, e.g. `Feature: API` or `Out` - * - You can look up a project by its subcode, e.g. `Training` or `Project X` as long as there is only one project with that subcode - */ - findByCode = (input: string) => { - if (input.length === 0) return E.fail(new ProjectCodeNotFoundError({ input })) + // see if the code matches a unique fullCode, e.g. `Feature: API` or `Out` + const fullCode = makeFullCode(code, subCode) + const fullCodeMatches = _this.find(d => d.fullCode.toLowerCase() === fullCode.toLowerCase()) + if (fullCodeMatches) return fullCodeMatches - const _this: ProjectCollection = this - return E.gen(function* () { - const [code, subCode] = input.split(/:\s*/gi).map(s => s.trim().replaceAll(/\s+/g, "-")) + if (!subCode) { + // see if the code matches a unique subcode, e.g. `Training` or `Project X` + const subCodeMatches = _this.filter(d => d.subCode?.toLowerCase() === code.toLowerCase()) - // see if the code matches a unique fullCode, e.g. `Feature: API` or `Out` - const fullCode = makeFullCode(code, subCode) - const fullCodeMatches = yield* E.either(_this.effect.findBy("fullCode", fullCode)) - if (Either.isRight(fullCodeMatches)) return fullCodeMatches.right - - if (!subCode) { - // see if the code matches a unique subcode, e.g. `Training` or `Project X` - const subCodeMatches = yield* _this.effect.findBy("subCode", code) - - if (subCodeMatches.length === 0) { - return yield* E.fail(new ProjectCodeNotFoundError({ input })) - } - - // If there are multiple subCode matches, we can't determine which one the user meant - if (subCodeMatches.length > 1) { - const matches = subCodeMatches.map(p => p.fullCode) - return yield* E.fail(new AmbiguousProjectCodeError({ input, matches })) - } + if (subCodeMatches.length === 0) { + return yield* E.fail(new ProjectCodeNotFoundError({ input })) + } - return subCodeMatches[0] + // If there are multiple subCode matches, we can't determine which one the user meant + if (subCodeMatches.length > 1) { + const matches = subCodeMatches.map(p => p.fullCode) + return yield* E.fail(new AmbiguousProjectCodeError({ input, matches })) } - return yield* E.fail(new ProjectCodeNotFoundError({ input })) - }) - } + return subCodeMatches[0] + } + + return yield* E.fail(new ProjectCodeNotFoundError({ input })) + }) } export class ProvidedProjects extends Context.Tag("ProvidedProjects")< diff --git a/app/schema/ProjectFromId.ts b/app/schema/ProjectFromId.ts deleted file mode 100644 index 90e0c54d..00000000 --- a/app/schema/ProjectFromId.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { E, ParseResult, S } from "lib/Effect" -import { Project, ProjectId } from "./Project" -import { ProvidedProjects } from "./ProjectCollection" - -export const ProjectFromId = S.transformOrFail(ProjectId, S.typeSchema(Project), { - strict: true, - decode: (id, _, ast) => - E.gen(function* () { - const projects = yield* ProvidedProjects - return yield* projects.effect.find(id) - }).pipe(E.mapError(error => new ParseResult.Type(ast, id, error.message))), - - encode: p => ParseResult.succeed(ProjectId.make(p.id)), -}) diff --git a/app/schema/Root.ts b/app/schema/Root.ts deleted file mode 100644 index c44ea248..00000000 --- a/app/schema/Root.ts +++ /dev/null @@ -1,60 +0,0 @@ -import type * as Auth from "@localfirst/auth" -import { E, pipe, S } from "lib/Effect" -import { Client, ClientId } from "./Client" -import { ClientCollection, ProvidedClients } from "./ClientCollection" -import { - Contact, - ContactId, - extendContact, - ProvidedTeam, - ProvidedUser, - type ExtendedContact, -} from "./Contact" -import { ContactCollection, ProvidedContacts } from "./ContactCollection" -import { DoneEntry, DoneEntryId } from "./DoneEntry" -import { Project, ProjectId } from "./Project" -import { ProjectCollection, ProvidedProjects } from "./ProjectCollection" -import { TimeEntry, TimeEntryId } from "./TimeEntry" - -const Record = (key: K, value: T) => - S.mutable(S.Record({ key, value })) - -// This is the schema for the app's root document -export class Root extends S.Class("Root")({ - contacts: Record(ContactId, Contact), - projects: Record(ProjectId, Project), - clients: Record(ClientId, Client), - doneEntries: Record(DoneEntryId, DoneEntry), - timeEntries: Record(TimeEntryId, TimeEntry), -}) { - static decode = (encoded: RootEncoded) => { - // we need to hydrate projects and clients first in order to hydrate timeEntries - const projects = Object.values(encoded.projects).map(p => S.decodeSync(Project)(p)) - const clients = Object.values(encoded.clients).map(c => S.decodeSync(Client)(c)) - const contacts = Object.values(encoded.contacts).map(c => S.decodeSync(Contact)(c)) - - return pipe( - encoded, - S.decode(Root), - E.provideService(ProvidedProjects, new ProjectCollection(projects)), - E.provideService(ProvidedClients, new ClientCollection(clients)), - E.provideService(ProvidedContacts, new ContactCollection(contacts)), - E.runSync, - ) - } - - extendedContacts({ user, team }: { user: Auth.User; team: Auth.Team }) { - const contacts = Object.values(this.contacts) - return E.gen(function* () { - const result: Record = {} - for (const contact of contacts) result[contact.id] = yield* extendContact(contact) - return result - }).pipe( - E.provideService(ProvidedUser, user), // - E.provideService(ProvidedTeam, team), - E.runSync, - ) - } -} - -export type RootEncoded = typeof Root.Encoded diff --git a/app/schema/TimeEntry.ts b/app/schema/TimeEntry.ts index 6400f87d..53424be5 100644 --- a/app/schema/TimeEntry.ts +++ b/app/schema/TimeEntry.ts @@ -1,61 +1,41 @@ +import { TypedObject } from "@dxos/echo-schema" import { E, pipe, S } from "lib/Effect" import { stripUndefined } from "lib/stripUndefined" -import { ClientCollection, ProvidedClients } from "./ClientCollection" -import { ClientFromId } from "./ClientFromId" -import { ContactId } from "./Contact" +import { type ClientCollection, ProvidedClients } from "./ClientCollection" import { Cuid } from "./Cuid" -import { LocalDateFromString, LocalDateSchema } from "./LocalDate" -import { ProjectCollection, ProvidedProjects } from "./ProjectCollection" -import { ProjectFromId } from "./ProjectFromId" +import { type ProjectCollection, ProvidedProjects } from "./ProjectCollection" import { parseTimeEntry } from "./lib/parseTimeEntry" -import { withDefault, withDefaultId } from "./lib/withDefault" +import { withDefaultId } from "./lib/withDefault" export const TimeEntryId = pipe(Cuid, S.brand("TimeEntryId")) export type TimeEntryId = typeof TimeEntryId.Type export class TimeEntryInput extends S.Class("TimeEntryInput")({ id: S.optional(TimeEntryId), - contactId: ContactId, - date: LocalDateSchema, + contactId: S.String, + date: S.String, input: S.String, }) {} /** A time entry that decodes from serialized form (e.g. from storage) */ -export class TimeEntry extends S.Class("TimeEntry")({ +export class TimeEntry extends TypedObject({ + typename: "devresults.com/type/TimeEntry", + version: "0.1.0", +})({ id: withDefaultId(TimeEntryId), - contactId: ContactId, - date: LocalDateFromString, + contactId: S.String, + date: S.String, duration: S.Number, - project: ProjectFromId, - client: S.optional(ClientFromId), + project: S.String, + client: S.optional(S.String), description: S.optional(S.String), input: S.String, - timestamp: S.DateFromNumber.pipe(withDefault(() => new Date())), + timestamp: S.String, }) { - static decode = ( - encoded: TimeEntryEncoded, - { projects, clients }: { projects: ProjectCollection; clients: ClientCollection }, - ) => - pipe( - encoded, - S.decode(TimeEntry), - E.provideService(ProvidedProjects, projects), - E.provideService(ProvidedClients, clients), - E.runSync, - ) + static decode = (encoded: TimeEntryEncoded) => pipe(encoded, S.decode(TimeEntry), E.runSync) static encode = (decoded: TimeEntry) => - pipe( - decoded, - S.encode(TimeEntry), - - // these are necessary - not sure why, since we only need these to decode - E.provideService(ProvidedProjects, new ProjectCollection([])), - E.provideService(ProvidedClients, new ClientCollection([])), - - E.runSync, - stripUndefined, - ) + pipe(decoded, S.encode(TimeEntry), E.runSync, stripUndefined) /** * Takes an input string consisting of one or more lines, and attempts to parse it into one or diff --git a/app/schema/TimeEntryCollection.ts b/app/schema/TimeEntryCollection.ts index 815d61ac..ac48279c 100644 --- a/app/schema/TimeEntryCollection.ts +++ b/app/schema/TimeEntryCollection.ts @@ -1,19 +1,3 @@ -import { Collection } from "context/Database/Collection" -import { getSunday } from "lib/getSunday" -import { TimeEntry } from "./TimeEntry" +import { type TimeEntry } from "./TimeEntry" -export class TimeEntryCollection extends Collection<"timeEntries", TimeEntry> { - override readonly name = "timeEntries" as const - - override readonly indexes = { - date: { unique: false, accessor: (e: TimeEntry) => e.date.toString() }, - week: { unique: false, accessor: (e: TimeEntry) => getSunday(e.date).toString() }, - year: { unique: false, accessor: (e: TimeEntry) => getSunday(e.date).year().toString() }, - userName: { unique: false }, - contact: { unique: false, accessor: (e: TimeEntry) => e.contactId as string }, - project: { unique: false, accessor: (e: TimeEntry) => e.project.id as string }, - client: { unique: false, accessor: (e: TimeEntry) => e.client?.id as string }, - } as const - - override readonly encode = TimeEntry.encode -} +export type TimeEntryCollection = TimeEntry[] diff --git a/app/schema/lib/parseClient.ts b/app/schema/lib/parseClient.ts index 4e163270..ae7c8da2 100644 --- a/app/schema/lib/parseClient.ts +++ b/app/schema/lib/parseClient.ts @@ -1,6 +1,6 @@ import { Data, E } from "lib/Effect" import { alphanumeric, endWord, startWord } from "lib/regex" -import { ProvidedClients } from "schema/ClientCollection" +import { ClientNotFoundError, ProvidedClients } from "schema/ClientCollection" import { buildRegExp, capture, oneOrMore } from "ts-regex-builder" /** @@ -45,7 +45,10 @@ export const parseClient = (input: string) => if (results.length === 0) return { client: undefined, text: "" } const { code, text } = results[0] - const client = yield* clients.effect.findBy("code", code) + const client = clients.find(d => d.code.toLowerCase() === code.toLowerCase()) + + if (!client) return yield* E.fail(new ClientNotFoundError({ code })) + return { text, client } }) diff --git a/app/schema/lib/parseProject.ts b/app/schema/lib/parseProject.ts index 08848e16..d3fa9543 100644 --- a/app/schema/lib/parseProject.ts +++ b/app/schema/lib/parseProject.ts @@ -1,6 +1,6 @@ import { Data, E } from "lib/Effect" import { alphanumeric, endWord, startWord } from "lib/regex" -import { ProvidedProjects } from "schema/ProjectCollection" +import { findByCode, ProvidedProjects } from "schema/ProjectCollection" import { buildRegExp, capture, @@ -44,7 +44,7 @@ export const parseProject = (input: string) => if (results.length === 0) return yield* E.fail(new NoProjectError({ input })) const { code, text } = results[0] - const project = yield* projects.findByCode(code) + const project = yield* findByCode(code, projects) return { project, text } }) diff --git a/app/schema/lib/parseTimeEntry.ts b/app/schema/lib/parseTimeEntry.ts index 67df14f3..ec28ff2b 100644 --- a/app/schema/lib/parseTimeEntry.ts +++ b/app/schema/lib/parseTimeEntry.ts @@ -1,7 +1,7 @@ -import { createId } from "@paralleldrive/cuid2" +import { create } from "@dxos/react-client/echo" import { Data, E } from "lib/Effect" import type { Project } from "schema/Project" -import { TimeEntry, TimeEntryId, type TimeEntryInput } from "../TimeEntry" +import { TimeEntry, type TimeEntryInput } from "../TimeEntry" import { parseClient } from "./parseClient" import { parseDuration } from "./parseDuration" import { parseProject } from "./parseProject" @@ -9,12 +9,7 @@ import { parseProject } from "./parseProject" /** * Takes a string input like "1h #out doctor" and parses it into a TimeEntry object. */ -export const parseTimeEntry = ({ - input, - contactId, - date, - id = TimeEntryId.make(createId()), -}: TimeEntryInput) => +export const parseTimeEntry = ({ input, contactId, date }: TimeEntryInput) => E.gen(function* (_) { const { duration, text: durationText } = yield* parseDuration(input) const { project, text: projectText } = yield* parseProject(input) @@ -32,14 +27,17 @@ export const parseTimeEntry = ({ .replace(clientText, ""), ) - return new TimeEntry({ id, contactId, date, duration, project, client, description, input }) - }).pipe( - E.mapError(error => - error._tag === "KeyNotFound" ? - { ...error, message: `The client @${error.value} wasn't found.` } - : error, - ), - ) + return create(TimeEntry, { + contactId, + date, + duration, + project: project.id, + client: client?.id, + description, + input, + timestamp: new Date().toISOString(), + }) + }) const collapseWhitespace = (s: string) => s.replaceAll(/\s+/g, " ").trim() diff --git a/app/schema/lib/test/parseClient.test.ts b/app/schema/lib/test/parseClient.test.ts index 8a15fe32..bbc0825c 100644 --- a/app/schema/lib/test/parseClient.test.ts +++ b/app/schema/lib/test/parseClient.test.ts @@ -1,16 +1,16 @@ import { clients } from "data/clients" import { E, pipe } from "lib/Effect" import { runTestCases, type BaseTestCase } from "lib/runTestCases" -import { ClientCollection, ProvidedClients } from "schema/ClientCollection" +import { ProvidedClients } from "schema/ClientCollection" import { describe, expect } from "vitest" import { parseClient } from "../parseClient" describe("parseClient", () => { - const TestClients = new ClientCollection(clients) + const TestClients = clients runTestCases({ testCases: [ { input: "@aba @chemonics", error: "MultipleClients" }, - { input: "#out @aaba 1h", error: "KeyNotFound" }, + { input: "#out @aaba 1h", error: "ClientNotFound" }, { input: "#out 1h", noClient: true }, { input: "1h #Support: ongoing @aba", code: "aba", text: "@aba" }, { input: "1h #Ongoing @chemonics", code: "chemonics", text: "@chemonics" }, diff --git a/app/schema/lib/test/parseProject.test.ts b/app/schema/lib/test/parseProject.test.ts index f8b1aa4a..a44e2a22 100644 --- a/app/schema/lib/test/parseProject.test.ts +++ b/app/schema/lib/test/parseProject.test.ts @@ -1,12 +1,12 @@ import { projects } from "data/projects" import { E, pipe } from "lib/Effect" import { runTestCases, type BaseTestCase } from "lib/runTestCases" -import { ProjectCollection, ProvidedProjects } from "schema/ProjectCollection" +import { ProvidedProjects } from "schema/ProjectCollection" import { describe, expect } from "vitest" import { parseProject } from "../parseProject" describe("parseProject", () => { - const testProjects = new ProjectCollection(projects) + const testProjects = projects runTestCases({ testCases: [ diff --git a/app/schema/lib/test/parseTimeEntry.test.ts b/app/schema/lib/test/parseTimeEntry.test.ts index 0aef2666..afde46fd 100644 --- a/app/schema/lib/test/parseTimeEntry.test.ts +++ b/app/schema/lib/test/parseTimeEntry.test.ts @@ -1,19 +1,18 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ // expect.any is `any` -import { LocalDate } from "@js-joda/core" import { clients } from "data/clients" import { projects } from "data/projects" import { E } from "lib/Effect" import { runTestCases, type BaseTestCase } from "lib/runTestCases" -import { ClientCollection, ProvidedClients } from "schema/ClientCollection" -import { ProjectCollection, ProvidedProjects } from "schema/ProjectCollection" +import { ProvidedClients } from "schema/ClientCollection" +import { ProvidedProjects } from "schema/ProjectCollection" import { describe, expect } from "vitest" import type { ContactId } from "../../Contact" import { parseTimeEntry } from "../parseTimeEntry" describe("parseTimeEntry", () => { - const TestProjects = new ProjectCollection(projects) - const TestClients = new ClientCollection(clients) + const TestProjects = projects + const TestClients = clients const testCases = [ // failure @@ -52,7 +51,7 @@ describe("parseTimeEntry", () => { decoder: (input: string) => parseTimeEntry({ contactId: "1234" as ContactId, - date: LocalDate.parse(`2021-01-01`), + date: `2021-01-01`, input, }).pipe( E.provideService(ProvidedProjects, TestProjects), @@ -62,9 +61,9 @@ describe("parseTimeEntry", () => { expect(actual.id).toBeTypeOf("string") expect(actual.input).toEqual(expected.input) expect(actual.duration).toEqual(expected.duration) - expect(actual.project.id).toEqual(expected.projectId) - expect(actual.timestamp).toBeInstanceOf(Date) - if (expected.clientId) expect(actual.client!.id).toEqual(expected.clientId) + expect(actual.project).toEqual(expected.projectId) + expect(actual.timestamp).toEqual(expect.any(String)) + if (expected.clientId) expect(actual.client).toEqual(expected.clientId) else expect(actual.client).toBeUndefined() }, }) diff --git a/app/schema/test/DoneEntry.test.ts b/app/schema/test/DoneEntry.test.ts index 026a461a..593cf136 100644 --- a/app/schema/test/DoneEntry.test.ts +++ b/app/schema/test/DoneEntry.test.ts @@ -1,48 +1,48 @@ -import { LocalDate } from "@js-joda/core" -import { contacts } from "data/contacts" -import { ContactCollection } from "schema/ContactCollection" +import { create } from "@dxos/react-client/echo" import { describe, expect, expectTypeOf, it } from "vitest" import type { ContactId } from "../Contact" import { DoneEntry, type DoneEntryEncoded } from "../DoneEntry" describe("DoneEntry", () => { - it("constructs a DoneEntry", () => { - const decoded = new DoneEntry({ - contactId: "0001" as ContactId, - date: LocalDate.parse("2024-06-10"), - content: "Coded and compiled terabytes of data", - }) + // it("constructs a DoneEntry", () => { + // const decoded = new DoneEntry({ + // contactId: "0001" as ContactId, + // date: LocalDate.parse("2024-06-10"), + // content: "Coded and compiled terabytes of data", + // }) - // contactId was cast as a ContactId - expectTypeOf(decoded.contactId).toMatchTypeOf() + // // contactId was cast as a ContactId + // expectTypeOf(decoded.contactId).toMatchTypeOf() - // id was populated - expect(decoded.id).toBeTypeOf("string") - expect(decoded.id).toHaveLength(24) + // // id was populated + // expect(decoded.id).toBeTypeOf("string") + // expect(decoded.id).toHaveLength(24) - // date was parsed - expect(decoded.date).toBeInstanceOf(LocalDate) - expect(decoded.date.year()).toBe(2024) - expect(decoded.date.monthValue()).toBe(6) - expect(decoded.date.dayOfMonth()).toBe(10) + // // date was parsed + // expect(decoded.date).toBeInstanceOf(LocalDate) + // expect(decoded.date.year()).toBe(2024) + // expect(decoded.date.monthValue()).toBe(6) + // expect(decoded.date.dayOfMonth()).toBe(10) - // content was left untouched - expect(decoded.content).toBe("Coded and compiled terabytes of data") + // // content was left untouched + // expect(decoded.content).toBe("Coded and compiled terabytes of data") - // likes was initialized as an empty array - expect(decoded.likes).toEqual([]) + // // likes was initialized as an empty array + // expect(decoded.likes).toEqual([]) - // timestamp was populated - expect(decoded.timestamp).toBeInstanceOf(Date) + // // timestamp was populated + // expect(decoded.timestamp).toBeInstanceOf(Date) - expectTypeOf(decoded).toMatchTypeOf() - }) + // expectTypeOf(decoded).toMatchTypeOf() + // }) it("encodes and decodes DoneEntry", () => { - const decoded = new DoneEntry({ + const decoded = create(DoneEntry, { contactId: "0001" as ContactId, - date: LocalDate.parse("2024-06-10"), + date: "2024-06-10", content: "Coded and compiled terabytes of data", + likes: [], + timestamp: new Date().toISOString(), }) const encoded = DoneEntry.encode(decoded) @@ -50,7 +50,7 @@ describe("DoneEntry", () => { expectTypeOf(encoded).toMatchTypeOf() // round trip - const decodedAgain = DoneEntry.decode(encoded, { contacts: new ContactCollection(contacts) }) + const decodedAgain = DoneEntry.decode(encoded) expect(decodedAgain).toEqual(decoded) }) }) diff --git a/app/schema/test/TimeEntry.test.ts b/app/schema/test/TimeEntry.test.ts index 9e11ba26..32ae0008 100644 --- a/app/schema/test/TimeEntry.test.ts +++ b/app/schema/test/TimeEntry.test.ts @@ -1,23 +1,22 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ -import { LocalDate } from "@js-joda/core" import { clients } from "data/clients" import { projects } from "data/projects" import { E, pipe, S } from "lib/Effect" -import { ClientCollection, ProvidedClients } from "schema/ClientCollection" +import { ProvidedClients } from "schema/ClientCollection" import { parseTimeEntry } from "schema/lib/parseTimeEntry" -import { ProjectCollection, ProvidedProjects } from "schema/ProjectCollection" +import { ProvidedProjects } from "schema/ProjectCollection" import { describe, expect, it } from "vitest" import type { ContactId } from "../Contact" import { TimeEntry, type TimeEntryEncoded } from "../TimeEntry" describe("TimeEntry", () => { - const TestProjects = new ProjectCollection(projects) - const TestClients = new ClientCollection(clients) + const TestProjects = projects + const TestClients = clients const parse = (input: string) => pipe( input, - input => ({ contactId: "1234" as ContactId, date: LocalDate.parse(`2024-06-10`), input }), // this stuff is provided by the app when an entry is made + input => ({ contactId: "1234" as ContactId, date: `2024-06-10`, input }), // this stuff is provided by the app when an entry is made parseTimeEntry, E.provideService(ProvidedProjects, TestProjects), E.provideService(ProvidedClients, TestClients), @@ -45,31 +44,51 @@ describe("TimeEntry", () => { it("parses a TimeEntry", () => { const timeEntry = parse("1h #Support: Ongoing @ABA update geography") + const projectId = projects.find(p => p.fullCode === "Support:Ongoing")?.id + const clientId = clients.find(c => c.code === "aba")?.id + expect(timeEntry).toEqual({ id: expect.any(String), - contactId: expect.any(String), - date: LocalDate.parse("2024-06-10"), // hydrated LocalDate - input: "1h #Support: Ongoing @ABA update geography", - project: { - // hydrated project - id: expect.any(String), - code: "Support", - color: expect.any(String), - subCode: "Ongoing", - description: "Includes engineering support to individual clients (but not bug fixing)", - requiresClient: false, - timestamp: expect.any(Date), - }, - client: { - // hydrated client - id: expect.any(String), - code: "aba", - timestamp: expect.any(Date), - }, - description: "update geography", + contactId: "1234", + date: "2024-06-10", // string + project: projectId, + client: clientId, duration: 60, - timestamp: expect.any(Date), + description: "update geography", + input: "1h #Support: Ongoing @ABA update geography", + timestamp: expect.any(String), }) + + // with current DXOS limitations, the parsed value is no different from the encoded value + // see https://discord.com/channels/837138313172353095/1340003933757902908/1342464555791552598 + + // expect(timeEntry).toEqual({ + // id: "", // expect.any(String), + // contactId: "", // expect.any(String), + // date: "2024-06-10", // hydrated LocalDate + // input: "1h #Support: Ongoing @ABA update geography", + // project: "", + // client: "", + // // project: { + // // // hydrated project + // // id: expect.any(String), + // // code: "Support", + // // color: expect.any(String), + // // subCode: "Ongoing", + // // description: "Includes engineering support to individual clients (but not bug fixing)", + // // requiresClient: false, + // // timestamp: expect.any(Date), + // // }, + // // client: { + // // // hydrated client + // // id: expect.any(String), + // // code: "aba", + // // timestamp: expect.any(Date), + // // }, + // description: "update geography", + // duration: 60, + // timestamp: "", // expect.any(String), + // }) }) it("encodes a TimeEntry", () => { @@ -77,16 +96,19 @@ describe("TimeEntry", () => { const encoded = encode(timeEntry) + const projectId = projects.find(p => p.fullCode === "Support:Ongoing")?.id + const clientId = clients.find(c => c.code === "aba")?.id + expect(encoded).toEqual({ - id: timeEntry.id, - contactId: expect.any(String), - date: "2024-06-10", // string - project: expect.any(String), // projectId - client: expect.any(String), // clientId + id: expect.any(String), + contactId: "1234", + date: "2024-06-10", + project: projectId, + client: clientId, duration: 60, description: "update geography", input: "1h #Support: Ongoing @ABA update geography", - timestamp: timeEntry.timestamp.getTime(), // number (unix timestamp) + timestamp: expect.any(String), }) }) diff --git a/app/types/types.ts b/app/types/types.ts index aa4fd116..d9d89639 100644 --- a/app/types/types.ts +++ b/app/types/types.ts @@ -45,6 +45,17 @@ export type NavItem = { icon: Icon } +/** A CollectionItem is an object with an id */ +export type CollectionItem = { + [key: string]: any + id: string +} + +/** Matches the name of any string-valued property of T */ +export type StringKeyOf = { + [K in keyof Item]: Item[K] extends string ? K & string : never +}[keyof Item] + // TYPE UTILITIES export type Optional = Omit & Partial From 15ef03fe2d193bfae89bd12028236b317246ce1f Mon Sep 17 00:00:00 2001 From: Nathan Gerhart Date: Thu, 13 Mar 2025 13:06:18 -0600 Subject: [PATCH 12/19] Auth: remove localfirst-specific stuff This is nearly all covered in dxos --- app/context/Auth/AuthContextProvider.tsx | 90 ------------------- app/context/Auth/createDevice.ts | 18 ---- app/context/Auth/createRepoWithAuth.ts | 30 ------- app/context/Auth/getDeviceName.ts | 7 -- app/context/Auth/getInitialContacts.ts | 37 -------- app/context/Auth/getRootDocumentIdFromTeam.ts | 17 ---- app/context/Auth/getSyncServer.ts | 10 --- app/context/Auth/initializeAuthRepo.ts | 53 ----------- app/context/Auth/parseInvitationCode.ts | 8 -- app/context/Auth/storeRootDocumentIdOnTeam.ts | 6 -- 10 files changed, 276 deletions(-) delete mode 100644 app/context/Auth/AuthContextProvider.tsx delete mode 100644 app/context/Auth/createDevice.ts delete mode 100644 app/context/Auth/createRepoWithAuth.ts delete mode 100644 app/context/Auth/getDeviceName.ts delete mode 100644 app/context/Auth/getInitialContacts.ts delete mode 100644 app/context/Auth/getRootDocumentIdFromTeam.ts delete mode 100644 app/context/Auth/getSyncServer.ts delete mode 100644 app/context/Auth/initializeAuthRepo.ts delete mode 100644 app/context/Auth/parseInvitationCode.ts delete mode 100644 app/context/Auth/storeRootDocumentIdOnTeam.ts diff --git a/app/context/Auth/AuthContextProvider.tsx b/app/context/Auth/AuthContextProvider.tsx deleted file mode 100644 index 6c112571..00000000 --- a/app/context/Auth/AuthContextProvider.tsx +++ /dev/null @@ -1,90 +0,0 @@ -import type { Repo } from "@automerge/automerge-repo" -import { RepoContext } from "@automerge/automerge-repo-react-hooks" -import type * as Auth from "@localfirst/auth" -import { type AuthProvider } from "@localfirst/auth-provider-automerge-repo" -import { useNavigate } from "react-router" -import { initializeAuthRepo } from "context/Auth/initializeAuthRepo" -import { useLocalState } from "hooks/useLocalState" -import { useSignOut } from "hooks/useSignOut" -import { assert } from "lib/assert" -import { createContext, useEffect, useState } from "react" -import { type AuthState } from "types/types" -import { Loading } from "ui/Loading" - -/** - * This provider wraps all private routes of the app. We can be in two possible scenarios when we load: - * - * (A) FIRST LOAD - * This is the very first load on first use. In this case, we need to start the auth flow by - * redirecting to another route. - * - * (B) ALREADY AUTHENTICATED - * We've used the app before. We'll know this is the case because we'll have a user & device in - * local storage. We can use these to instantiate the auth provider and the repo, each of which - * will have their own stuff in indexedDb. - */ -export function AuthContextProvider({ children }: { children: React.ReactNode }) { - const navigate = useNavigate() - const signOut = useSignOut() - - // Persisted state - const { user, device, shareId } = useLocalState() - - // Internal component state - const [state, setState] = useState<{ team: Auth.Team; auth: AuthProvider; repo: Repo }>() - - // On first render, check local storage for persisted state - useEffect(() => { - const scenario = device ? "ALREADY_AUTHENTICATED" : "FIRST_LOAD" - - console.log("AuthContextProvider", scenario) - - switch (scenario) { - case "FIRST_LOAD": { - // start the auth flow - void navigate("/auth/begin") - break - } - - case "ALREADY_AUTHENTICATED": { - assert(device) - assert(shareId) - // Initialize automerge repo with the auth provider - void initializeAuthRepo({ user, device }).then(({ auth, repo }) => { - // Get the team from the auth provider (which will have loaded it from storage). - const team = auth.getTeam(shareId) - // Now we have everything we need - setState({ team, auth, repo }) - }) - break - } - } - }, []) - - // hooks ↑ - - const signOutIfNotAMember = (team: Auth.Team) => { - if (user && team.memberWasRemoved(user.userId)) { - signOut() - void navigate("/") - } - } - - if (device && user && state) { - const { team, auth, repo } = state - - signOutIfNotAMember(team) - team.on("updated", () => { - signOutIfNotAMember(team) - }) - return ( - - {children} - - ) - } - - return -} - -export const AuthContext = createContext(undefined) diff --git a/app/context/Auth/createDevice.ts b/app/context/Auth/createDevice.ts deleted file mode 100644 index 6b29a566..00000000 --- a/app/context/Auth/createDevice.ts +++ /dev/null @@ -1,18 +0,0 @@ -import * as Auth from "@localfirst/auth" -import uaParser from "ua-parser-js" -import { getDeviceName } from "./getDeviceName" - -export const createDevice = ( - { userName, userId = userName }: UserInfo, - userAgent: string = uaParser().ua, -) => { - const deviceInfo = uaParser(userAgent) - const deviceName = getDeviceName(userName, deviceInfo) - const device = Auth.createDevice({ userId, deviceName, deviceInfo }) - return device -} - -export type UserInfo = { - userName: string - userId?: string -} diff --git a/app/context/Auth/createRepoWithAuth.ts b/app/context/Auth/createRepoWithAuth.ts deleted file mode 100644 index e79f1a1f..00000000 --- a/app/context/Auth/createRepoWithAuth.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Repo, type PeerId } from "@automerge/automerge-repo" -import { BrowserWebSocketClientAdapter } from "@automerge/automerge-repo-network-websocket" -import { IndexedDBStorageAdapter } from "@automerge/automerge-repo-storage-indexeddb" -import { eventPromise } from "@herbcaudill/eventemitter42" -import type { DeviceWithSecrets, UserWithSecrets } from "@localfirst/auth" -import { AuthProvider } from "@localfirst/auth-provider-automerge-repo" -import { url } from "./getSyncServer" - -export async function createRepoWithAuth(user: UserWithSecrets, device: DeviceWithSecrets) { - const storage = new IndexedDBStorageAdapter() - const auth = new AuthProvider({ user, device, storage }) - - const adapter = new BrowserWebSocketClientAdapter(url) - const authAdapter = auth.wrap(adapter) - - // Create new automerge-repo with websocket adapter - const repo = new Repo({ - peerId: device.deviceId as PeerId, - network: [authAdapter], - storage, - }) - - await Promise.all([ - eventPromise(authAdapter, "ready"), - eventPromise(repo.networkSubsystem, "ready"), - eventPromise(auth, "ready"), - ]) - - return { auth, repo } -} diff --git a/app/context/Auth/getDeviceName.ts b/app/context/Auth/getDeviceName.ts deleted file mode 100644 index 9cf9e1a6..00000000 --- a/app/context/Auth/getDeviceName.ts +++ /dev/null @@ -1,7 +0,0 @@ -export const getDeviceName = (userName: string, deviceInfo: UAParser.IResult) => { - const { os, device, browser } = deviceInfo - let model = device.model ?? `${os.name} (${browser.name})` - if (model?.startsWith("iPhone")) model = "iPhone" // remove weird model numbers - if (model?.startsWith("Macintosh")) model = "Mac" - return model -} diff --git a/app/context/Auth/getInitialContacts.ts b/app/context/Auth/getInitialContacts.ts deleted file mode 100644 index a7119484..00000000 --- a/app/context/Auth/getInitialContacts.ts +++ /dev/null @@ -1,37 +0,0 @@ -import type { UserWithSecrets } from "@localfirst/auth" -import { contacts } from "data/contacts" -import { ContactId, Contact } from "schema/Contact" - -export const getInitialContacts = (user: UserWithSecrets, teamName: string): Contact[] => { - // HACK: For now, we're going to load the list of DevResults users from a hard-coded list. We'll - // only do this when (a) the username given is in that list (e.g. "herb" or "fred"), and (2) the - // team name is "DevResults". - const currentContact = contacts.find(c => c.id === user.userName)! // should never be undefined - const isDevResults = currentContact && teamName === "DevResults" - - if (isDevResults) { - return contacts.map(c => { - return new Contact({ - ...c, - id: ContactId.make( - c.id === user.userName ? - // The current user has a real userId, so we'll use that - user.userId - // otherwise, we'll use the username as a placeholder - : c.userName, - ), - }) - }) - } - - // For non-DevResults people trying out the app, they'll be the only person on their team - return [ - new Contact({ - id: ContactId.make(user.userId), - avatarUrl: "", - firstName: user.userName, - lastName: "", - userName: user.userName, - }), - ] -} diff --git a/app/context/Auth/getRootDocumentIdFromTeam.ts b/app/context/Auth/getRootDocumentIdFromTeam.ts deleted file mode 100644 index fd925cc5..00000000 --- a/app/context/Auth/getRootDocumentIdFromTeam.ts +++ /dev/null @@ -1,17 +0,0 @@ -import type { DocumentId } from "@automerge/automerge-repo" -import type { Team } from "@localfirst/auth" - -export const getRootDocumentIdFromTeam = (team: Team) => { - // find the last message of type ROOT_DOCUMENT_ID - const rootDocumentId = team - .messages() - .filter(message => message.type === "ROOT_DOCUMENT_ID") - .pop()?.payload - if (!rootDocumentId) throw new Error("No root document ID found on team") - return rootDocumentId -} - -export type TeamMessage = { - type: "ROOT_DOCUMENT_ID" - payload: DocumentId -} diff --git a/app/context/Auth/getSyncServer.ts b/app/context/Auth/getSyncServer.ts deleted file mode 100644 index e366f646..00000000 --- a/app/context/Auth/getSyncServer.ts +++ /dev/null @@ -1,10 +0,0 @@ -const isDev = !import.meta.env.PROD -const devPort = (import.meta.env.VITE_SYNC_SERVER_PORT as string) ?? "3030" - -const httpProtocol = isDev ? "http:" : "https:" -const wsProtocol = isDev ? "ws:" : "wss:" - -export const host = isDev ? "localhost" : "sync.xdev.devresults.com" -export const port = isDev ? `:${devPort}` : "" -export const url = `${httpProtocol}//${host}${port}` -export const wsUrl = `${wsProtocol}//${host}${port}` diff --git a/app/context/Auth/initializeAuthRepo.ts b/app/context/Auth/initializeAuthRepo.ts deleted file mode 100644 index 4452b1fa..00000000 --- a/app/context/Auth/initializeAuthRepo.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { Repo } from "@automerge/automerge-repo" -import { BrowserWebSocketClientAdapter } from "@automerge/automerge-repo-network-websocket" -import { IndexedDBStorageAdapter } from "@automerge/automerge-repo-storage-indexeddb" -import { eventPromise } from "@herbcaudill/eventemitter42" -import type { DeviceWithSecrets, UserWithSecrets } from "@localfirst/auth" -import { AuthProvider } from "@localfirst/auth-provider-automerge-repo" -import { url, wsUrl } from "./getSyncServer" - -/** - * Creates an auth provider, uses it to create an authenticated websocket adapter, and uses that to - * instantiate a repo. The auth provider and the repo share a storage adapter. - * - * Returns when the auth provider has loaded persisted state, and the repo has a working network - * connection. - */ -export const initializeAuthRepo = async ({ user, device }: Params) => { - // We'll use the same storage adapter for the auth provider and the repo - const storage = new IndexedDBStorageAdapter() - - const config: AuthProviderConfig = { device, storage, server: url } - if (user) config.user = user - - const auth = new AuthProvider(config) - auth.on("remoteError", error => { - throw new Error(error.message) - }) - auth.on("localError", error => { - throw new Error(error.message) - }) - - const adapter = new BrowserWebSocketClientAdapter(wsUrl) - const authAdapter = auth.wrap(adapter) - - // Create new repo with websocket adapter - const repo = new Repo({ - network: [authAdapter], - storage, - }) - - await Promise.all([ - eventPromise(auth, "ready"), // auth provider has loaded any persisted state - eventPromise(repo.networkSubsystem, "ready"), // repo has a working network connection - ]) - - return { auth, repo } -} - -type Params = { - user?: UserWithSecrets | undefined - device: DeviceWithSecrets -} - -type AuthProviderConfig = ConstructorParameters[0] diff --git a/app/context/Auth/parseInvitationCode.ts b/app/context/Auth/parseInvitationCode.ts deleted file mode 100644 index b644cdc3..00000000 --- a/app/context/Auth/parseInvitationCode.ts +++ /dev/null @@ -1,8 +0,0 @@ -import type { Base58 } from "@localfirst/auth" -import type { ShareId } from "@localfirst/auth-provider-automerge-repo" - -export const parseInvitationCode = (invitationCode: string) => { - const shareId = invitationCode.slice(0, 12) as ShareId // because a ShareId is 12 characters long - see getShareId - const invitationSeed = invitationCode.slice(12) as Base58 // the rest of the code is the invitation seed - return { shareId, invitationSeed } -} diff --git a/app/context/Auth/storeRootDocumentIdOnTeam.ts b/app/context/Auth/storeRootDocumentIdOnTeam.ts deleted file mode 100644 index b562e652..00000000 --- a/app/context/Auth/storeRootDocumentIdOnTeam.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { DocumentId } from "@automerge/automerge-repo" -import type { Team } from "@localfirst/auth" - -export const storeRootDocumentIdOnTeam = (team: Team, id: DocumentId) => { - team.addMessage({ type: "ROOT_DOCUMENT_ID", payload: id }) -} From 55d64d12c3c6f89a5c23799bde481e95db4a791c Mon Sep 17 00:00:00 2001 From: Nathan Gerhart Date: Thu, 13 Mar 2025 13:50:30 -0600 Subject: [PATCH 13/19] UI: Update for DXOS Main categories of changes here: - collections no longer exist, so we need to use callbacks - objects have different creation syntax and required fields - objects are no longer hydrated, so we need to prop drill the lookup collections and deal with dates as strings - devices come from dxos and have a different shape (I use platform to build these for tests) - extended members have no invitation status (invites are anonymous) I think all of the stories are working correctly with `pnpm storybook` --- app/lib/getDeviceIcon.tsx | 14 +- .../danger+/ui/DoneEntryGenerator.tsx | 4 +- .../danger+/ui/DoneEntryImporter.tsx | 8 +- .../danger+/ui/TimeEntryGenerator.tsx | 4 +- .../danger+/ui/TimeEntryImporter.tsx | 18 +- .../ui/stories/DoneEntryImporter.stories.tsx | 6 +- app/ui/AutocompleteMenu.tsx | 17 +- app/ui/DailyDones.tsx | 33 +- app/ui/DailyTimeEntries.tsx | 26 +- app/ui/Devices.tsx | 53 ++- app/ui/DoneDisplay.tsx | 9 +- app/ui/DoneEditable.tsx | 15 +- app/ui/HoursReport.tsx | 13 +- app/ui/Members.tsx | 37 +- app/ui/MyWeek.tsx | 34 +- app/ui/RevokeInvitationDialog.tsx | 3 +- app/ui/TeamDones.tsx | 7 +- app/ui/TimeEntryDisplay.tsx | 16 +- app/ui/TimeEntryInput.tsx | 2 +- app/ui/stories/Avatar.stories.tsx | 3 +- app/ui/stories/Devices.stories.tsx | 17 +- app/ui/stories/HoursReport.stories.tsx | 24 +- app/ui/stories/Members.stories.tsx | 24 +- app/ui/stories/MyWeek.stories.tsx | 79 ++-- .../RevokeInvitationDialog.stories.tsx | 3 +- app/ui/stories/TeamDones.stories.tsx | 3 +- app/ui/stories/util/createDevice.ts | 29 ++ app/ui/stories/util/storyContact.ts | 10 +- package.json | 22 +- pnpm-lock.yaml | 446 +++++++++--------- vite.config.ts | 3 - 31 files changed, 547 insertions(+), 435 deletions(-) create mode 100644 app/ui/stories/util/createDevice.ts diff --git a/app/lib/getDeviceIcon.tsx b/app/lib/getDeviceIcon.tsx index b05f7ac8..99dfcffa 100644 --- a/app/lib/getDeviceIcon.tsx +++ b/app/lib/getDeviceIcon.tsx @@ -1,23 +1,23 @@ import type { ReactNode } from "react" -import type UAParser from "ua-parser-js" +import { DeviceType, type Device } from "@dxos/react-client/halo" -export const getDeviceIcon = (deviceInfo: UAParser.IResult) => - deviceInfo.device.type === "mobile" ? : +export const getDeviceIcon = (deviceInfo: Device) => + deviceInfo.profile?.type === DeviceType.MOBILE ? : const getMatchingIcon = ( - accessor: (deviceInfo: UAParser.IResult) => string | undefined, + accessor: (deviceInfo: Device) => string | undefined, lookup: Record, fallback: ReactNode, ) => - (deviceInfo: UAParser.IResult) => { + (deviceInfo: Device) => { const text = accessor(deviceInfo) ?? "" const key = Object.keys(lookup).find(val => text.toLocaleLowerCase().includes(val)) return key ? lookup[key] : fallback } export const getBrowserIcon = getMatchingIcon( - i => i.browser.name, + i => i.profile?.platform, { chrome: , edge: , @@ -30,7 +30,7 @@ export const getBrowserIcon = getMatchingIcon( ) export const getOsIcon = getMatchingIcon( - i => i.os.name, + i => i.profile?.os, { windows: , mac: , diff --git a/app/routes/_private+/devtools+/danger+/ui/DoneEntryGenerator.tsx b/app/routes/_private+/devtools+/danger+/ui/DoneEntryGenerator.tsx index cf437fd8..dfae16e0 100644 --- a/app/routes/_private+/devtools+/danger+/ui/DoneEntryGenerator.tsx +++ b/app/routes/_private+/devtools+/danger+/ui/DoneEntryGenerator.tsx @@ -4,7 +4,7 @@ import { NO_OP } from "lib/constants" import { generateDones } from "lib/generateDones" import { useState } from "react" import { type Contact } from "schema/Contact" -import { type DoneEntry } from "schema/DoneEntry" +import { type DoneEntryInput } from "schema/DoneEntry" import { RadioGroup } from "ui/RadioGroup" export const DoneEntryGenerator = ({ destroyAll = NO_OP, add = () => {}, contacts }: Props) => { @@ -80,5 +80,5 @@ export const DoneEntryGenerator = ({ destroyAll = NO_OP, add = () => {}, contact type Props = { contacts: Contact[] destroyAll(): void - add(done: DoneEntry): void + add(done: DoneEntryInput): void } diff --git a/app/routes/_private+/devtools+/danger+/ui/DoneEntryImporter.tsx b/app/routes/_private+/devtools+/danger+/ui/DoneEntryImporter.tsx index 8308efe1..5560f475 100644 --- a/app/routes/_private+/devtools+/danger+/ui/DoneEntryImporter.tsx +++ b/app/routes/_private+/devtools+/danger+/ui/DoneEntryImporter.tsx @@ -4,20 +4,20 @@ import { csvToDoneEntries } from "lib/csvToDoneEntries" import { E, pipe } from "lib/Effect" import { useState } from "react" import { type Contact } from "schema/Contact" -import { ContactCollection, ProvidedContacts } from "schema/ContactCollection" -import { type DoneEntry, type DoneEntryInput } from "schema/DoneEntry" +import { ProvidedContacts } from "schema/ContactCollection" +import { type DoneEntryInput } from "schema/DoneEntry" export const DoneEntryImporter = ({ add = NO_OP, destroyAll = NO_OP, contacts = [] }: Props) => { const [importData, setImportData] = useState("") const [errors, setErrors] = useState([]) - const [doneEntries, setDones] = useState([]) + const [doneEntries, setDones] = useState([]) const [successMessage, setSuccessMessage] = useState(undefined) const decode = (csv: string) => { return pipe( csv, csvToDoneEntries, - E.provideService(ProvidedContacts, new ContactCollection(contacts)), + E.provideService(ProvidedContacts, contacts), // E.runSync, ) } diff --git a/app/routes/_private+/devtools+/danger+/ui/TimeEntryGenerator.tsx b/app/routes/_private+/devtools+/danger+/ui/TimeEntryGenerator.tsx index 61c5cdc3..3efbc199 100644 --- a/app/routes/_private+/devtools+/danger+/ui/TimeEntryGenerator.tsx +++ b/app/routes/_private+/devtools+/danger+/ui/TimeEntryGenerator.tsx @@ -6,7 +6,7 @@ import { useState } from "react" import type { Client } from "schema/Client" import { type Contact } from "schema/Contact" import type { Project } from "schema/Project" -import type { TimeEntry } from "schema/TimeEntry" +import type { TimeEntryInput } from "schema/TimeEntry" import { RadioGroup } from "ui/RadioGroup" export const TimeEntryGenerator = ({ @@ -66,5 +66,5 @@ type Props = { projects: Project[] clients: Client[] destroyAll(): void - add(entries: TimeEntry[]): void + add(entries: TimeEntryInput[]): void } diff --git a/app/routes/_private+/devtools+/danger+/ui/TimeEntryImporter.tsx b/app/routes/_private+/devtools+/danger+/ui/TimeEntryImporter.tsx index dc772d54..94e1dfb9 100644 --- a/app/routes/_private+/devtools+/danger+/ui/TimeEntryImporter.tsx +++ b/app/routes/_private+/devtools+/danger+/ui/TimeEntryImporter.tsx @@ -4,12 +4,12 @@ import { csvToTimeEntries } from "lib/csvToTimeEntries" import { E, pipe } from "lib/Effect" import { useState } from "react" import { type Client } from "schema/Client" -import { ClientCollection, ProvidedClients } from "schema/ClientCollection" +import { ProvidedClients } from "schema/ClientCollection" import { type Contact } from "schema/Contact" -import { ContactCollection, ProvidedContacts } from "schema/ContactCollection" +import { ProvidedContacts } from "schema/ContactCollection" import { type Project } from "schema/Project" -import { ProjectCollection, ProvidedProjects } from "schema/ProjectCollection" -import { type TimeEntry } from "schema/TimeEntry" +import { ProvidedProjects } from "schema/ProjectCollection" +import { type TimeEntryInput } from "schema/TimeEntry" export const TimeEntryImporter = ({ add = NO_OP, @@ -20,7 +20,7 @@ export const TimeEntryImporter = ({ }: Props) => { const [importData, setImportData] = useState("") const [errors, setErrors] = useState([]) - const [timeEntries, setTimes] = useState([]) + const [timeEntries, setTimes] = useState([]) const [successMessage, setSuccessMessage] = useState(undefined) @@ -28,9 +28,9 @@ export const TimeEntryImporter = ({ pipe( csv, csvToTimeEntries, - E.provideService(ProvidedContacts, new ContactCollection(contacts)), - E.provideService(ProvidedProjects, new ProjectCollection(projects)), - E.provideService(ProvidedClients, new ClientCollection(clients)), + E.provideService(ProvidedContacts, contacts), + E.provideService(ProvidedProjects, projects), + E.provideService(ProvidedClients, clients), E.runSync, ) @@ -112,5 +112,5 @@ type Props = { projects: Project[] clients: Client[] destroyAll(): void - add(t: TimeEntry): void + add(t: TimeEntryInput): void } diff --git a/app/routes/_private+/devtools+/danger+/ui/stories/DoneEntryImporter.stories.tsx b/app/routes/_private+/devtools+/danger+/ui/stories/DoneEntryImporter.stories.tsx index c4158e9d..9ee82218 100644 --- a/app/routes/_private+/devtools+/danger+/ui/stories/DoneEntryImporter.stories.tsx +++ b/app/routes/_private+/devtools+/danger+/ui/stories/DoneEntryImporter.stories.tsx @@ -23,18 +23,18 @@ const paste = async (canvasElement: HTMLElement, ...text: string[]) => { export const NoErrors: Story = { async play({ canvasElement }) { - await paste(canvasElement, "herb, 2024-11-30, adsf", "herb, 2024-11-30, qrs") + await paste(canvasElement, "herb, 2024-11-30, adsf, [],", "herb, 2024-11-30, qrs, [],") }, } export const OneError: Story = { async play({ canvasElement }) { - await paste(canvasElement, "alice, 2024-11-30, adsf", "herb, 2024-11-30, qrs") + await paste(canvasElement, "herb, 2024-11-30, adsf, [],", "herb, 2024-11-30, qrs") }, } export const TwoErrors: Story = { async play({ canvasElement }) { - await paste(canvasElement, "alice, 2024-11-30, adsf", "herb, 2024-11-42, qrs") + await paste(canvasElement, "alice, 2024-11-30, adsf, [],", "herb, 2024-11-42, qrs") }, } diff --git a/app/ui/AutocompleteMenu.tsx b/app/ui/AutocompleteMenu.tsx index b81c2606..7eaee793 100644 --- a/app/ui/AutocompleteMenu.tsx +++ b/app/ui/AutocompleteMenu.tsx @@ -1,10 +1,8 @@ -import type { Collection } from "context/Database/Collection" -import type { CollectionItem, ItemOf, StringKeyOf } from "context/Database/types" +import type { CollectionItem, StringKeyOf } from "types/types" import { cx } from "lib/cx" import { Keys } from "lib/keys" import { useState } from "react" import { useHotkeys } from "react-hotkeys-hook" -import type { RootEncoded } from "schema/Root" const { enter, up, down } = Keys @@ -91,12 +89,9 @@ export const findAutocompleteQuery = ( * Given a query and a set of autocomplete definitions, returns an array of strings to show in an * autocomplete menu. */ -export const getAutocompleteItems = < - Name extends keyof RootEncoded, - Item extends CollectionItem = ItemOf, ->( +export const getAutocompleteItems = ( { query, trigger }: AutocompleteState, - autocompleteModes: Array>, + autocompleteModes: Array>, ) => { const mode = autocompleteModes.find(m => m.trigger === trigger) if (!mode) return [] @@ -104,7 +99,6 @@ export const getAutocompleteItems = < const { collection, property } = mode return collection - .all() .map(item => String(item[property])) .filter(value => value.toLowerCase().includes(query.toLowerCase())) .sort((a, b) => { @@ -123,9 +117,8 @@ export type AutocompleteTrigger = { } export type AutocompleteMode< - Name extends keyof RootEncoded = any, - Item extends CollectionItem = ItemOf, - C = Collection, + Item extends CollectionItem = any, + C = Item[], > = AutocompleteTrigger & { property: StringKeyOf collection: C diff --git a/app/ui/DailyDones.tsx b/app/ui/DailyDones.tsx index c8000182..818bf6f8 100644 --- a/app/ui/DailyDones.tsx +++ b/app/ui/DailyDones.tsx @@ -1,3 +1,4 @@ +import { create } from "@dxos/react-client/echo" import { type LocalDate } from "@js-joda/core" import { cx } from "lib/cx" import { useState } from "react" @@ -8,11 +9,19 @@ import { DoneEditable } from "ui/DoneEditable" import { DoneInput } from "ui/DoneInput" /** Displays a single day of the current user's dones */ -export const DailyDones = ({ date, doneEntries, self }: Props) => { +export const DailyDones = ({ + date, + doneEntries, + self, + contacts, + onAdd = () => {}, + onRemove = () => {}, +}: Props) => { const [focus, setFocus] = useState(-1) // nothing focused by default + const sDate = date.toString() const dones = doneEntries - .findBy("date", date) // for this day + .filter(d => d.date === sDate) // for this day .filter(({ contactId }) => contactId === self.id) // for this contact const focusNext = () => setFocus((f: number) => Math.min(f + 1, dones.length + 1)) @@ -27,13 +36,16 @@ export const DailyDones = ({ date, doneEntries, self }: Props) => { doneEntries.update({ id: done.id, content })} - onDestroy={() => doneEntries.destroy(done.id)} + onUpdate={content => { + done.content = content + }} + onDestroy={() => onRemove(done)} isFocused={focus === index} onFocus={setFocus} onFocusNext={focusNext} onFocusPrev={focusPrev} self={self} + contacts={contacts} /> ))} @@ -54,7 +66,15 @@ export const DailyDones = ({ date, doneEntries, self }: Props) => { onFocusPrev={focusPrev} onDestroy={() => {}} onChange={content => { - doneEntries.add(new DoneEntry({ date, contactId: self.id, content })) + onAdd( + create(DoneEntry, { + date: sDate, + contactId: self.id, + content, + likes: [], + timestamp: new Date().toISOString(), + }), + ) setFocus(dones.length + 1) }} /> @@ -67,5 +87,8 @@ export const DailyDones = ({ date, doneEntries, self }: Props) => { type Props = { date: LocalDate doneEntries: DoneEntryCollection + onAdd: (done: DoneEntry) => void + onRemove: (done: DoneEntry) => void self: Contact + contacts: Contact[] } diff --git a/app/ui/DailyTimeEntries.tsx b/app/ui/DailyTimeEntries.tsx index 2663bc8c..8e942b4b 100644 --- a/app/ui/DailyTimeEntries.tsx +++ b/app/ui/DailyTimeEntries.tsx @@ -5,6 +5,7 @@ import { type ClientCollection } from "schema/ClientCollection" import type { Contact } from "schema/Contact" import { type ProjectCollection } from "schema/ProjectCollection" import type { TimeEntryCollection } from "schema/TimeEntryCollection" +import { type TimeEntry } from "schema/TimeEntry" import { DeleteButton } from "./DeleteButton" import { TimeEntryDisplay } from "./TimeEntryDisplay" import { TimeEntryInput } from "./TimeEntryInput" @@ -17,12 +18,13 @@ export const DailyTimeEntries = ({ clients, longestDay, self, + onAdd = () => {}, + onRemove = () => {}, }: Props) => { const [focus, setFocus] = useState(-1) // nothing focused by default - const entries = timeEntries - .findBy("date", date) // for this day - .filter(({ contactId }) => contactId === self.id) // for this contact + const sDate = date.toString() + const entries = timeEntries.filter(({ date }) => date === sDate) const onFocusNext = () => setFocus((f: number) => f + 1) const onFocusPrev = () => setFocus((f: number) => Math.max(f - 1, 0)) @@ -59,13 +61,19 @@ export const DailyTimeEntries = ({ {...{ index, date, projects, clients, self, onFocusNext, onFocusPrev, onDiscard }} isFocused={focus === index} onFocus={setFocus} - onDestroy={() => timeEntries.destroy(timeEntry.id)} - onCommit={e => timeEntries.update({ ...e, id: timeEntry.id })} + onDestroy={() => onRemove(timeEntry)} + onCommit={e => Object.assign(timeEntry, e)} /> :
- + - timeEntries.destroy(timeEntry.id)} /> + onRemove(timeEntry)} />
} @@ -81,7 +89,7 @@ export const DailyTimeEntries = ({ {...{ date, projects, clients, self, onFocusNext, onFocusPrev, onDiscard }} isFocused={focus === entries.length} onFocus={setFocus} - onCommit={e => timeEntries.add(e)} + onCommit={e => onAdd(e)} /> @@ -96,4 +104,6 @@ type Props = { clients: ClientCollection longestDay: number self: Contact + onAdd: (time: TimeEntry) => void + onRemove: (time: TimeEntry) => void } diff --git a/app/ui/Devices.tsx b/app/ui/Devices.tsx index edafce36..e488a783 100644 --- a/app/ui/Devices.tsx +++ b/app/ui/Devices.tsx @@ -1,18 +1,22 @@ -import type { Device, DeviceWithSecrets, UnixTimestamp } from "@localfirst/auth" +import type { Device } from "@dxos/react-client/halo" import { Link } from "react-router" import { Button } from "@ui/button" import { cx } from "lib/cx" import { getBrowserIcon, getDeviceIcon, getOsIcon } from "lib/getDeviceIcon" -import type UAParser from "ua-parser-js" import { MetadataList } from "./MetadataList" -export const Devices = ({ ownDevice, devices = [] }: Props) => { +export const Devices = ({ ownDevice, devices = [], onInvite = () => {} }: Props) => { return (

Devices

-
{ }} > {devices?.sort(selfFirst(ownDevice)).map(device => { - const { deviceName, deviceId, created } = device - const deviceInfo = device.deviceInfo as UAParser.IResult // should Device be generic over deviceInfo? return (
- {getDeviceIcon(deviceInfo)} + {getDeviceIcon(device)}
-
{deviceName}
+ {/* devices have no name yet */} +
{ deviceName }
{" "} -
{toDate(created)}
+ {/* devices have no join date yet */} +
{ date }
- {getOsIcon(deviceInfo)} - {deviceInfo.device.vendor} {deviceInfo.device.model ?? deviceInfo.os.name} + {getOsIcon(device)} + {device.profile?.os} {device.profile?.osVersion}
- {getBrowserIcon(deviceInfo)} - {deviceInfo.browser.name} {deviceInfo.browser.version?.split(".")[0] ?? ""} + {getBrowserIcon(device)} + {device.profile?.platform} {device.profile?.platformVersion}
- {ownDevice.deviceId === deviceId ? null : ( + {ownDevice.deviceKey === device.deviceKey ? null : ( } @@ -73,11 +77,13 @@ export const Devices = ({ ownDevice, devices = [] }: Props) => { } type Props = { - ownDevice: DeviceWithSecrets - devices?: Array + ownDevice: Device + devices?: Device[] + onInvite: () => void } -const toDate = (timestamp?: UnixTimestamp) => +// eslint-disable-next-line unused-imports/no-unused-vars +const toDate = (timestamp?: number) => timestamp ? new Date(timestamp).toLocaleDateString("en-US", { year: "numeric", @@ -86,6 +92,5 @@ const toDate = (timestamp?: UnixTimestamp) => }) : null -const selfFirst = - (self: DeviceWithSecrets) => (a: Device | DeviceWithSecrets, b: Device | DeviceWithSecrets) => - a === self ? -1 : a.deviceName.localeCompare(b.deviceName) +const selfFirst = (self: Device) => (a: Device, b: Device) => + a === self ? -1 : a.deviceKey.toString().localeCompare(b.deviceKey.toString()) diff --git a/app/ui/DoneDisplay.tsx b/app/ui/DoneDisplay.tsx index 3996d144..b294c6f0 100644 --- a/app/ui/DoneDisplay.tsx +++ b/app/ui/DoneDisplay.tsx @@ -6,17 +6,17 @@ import { Likes } from "./Likes" /** * Displays a read-only DoneEntry along with the Like button. */ -export function DoneDisplay({ className = "", done, updateLikes, self }: Props) { +export function DoneDisplay({ className = "", done, updateLikes, self, contacts }: Props) { const { content, likes } = done return (
  • {content} contacts.find(d => d.id === id)).filter(d => d !== undefined)} self={self} onToggle={() => { const newLikes = new Set(likes ?? []) - if (!newLikes.delete(self)) newLikes.add(self) + if (!newLikes.delete(self.id)) newLikes.add(self.id) updateLikes([...newLikes]) }} /> @@ -27,6 +27,7 @@ export function DoneDisplay({ className = "", done, updateLikes, self }: Props) type Props = { className?: string done: DoneEntry - updateLikes: (likes: Contact[]) => void + updateLikes: (likes: string[]) => void self: Contact + contacts: Contact[] } diff --git a/app/ui/DoneEditable.tsx b/app/ui/DoneEditable.tsx index f4a0d7d7..a19f9c50 100644 --- a/app/ui/DoneEditable.tsx +++ b/app/ui/DoneEditable.tsx @@ -9,7 +9,14 @@ import { Likes } from "./Likes" * Used for displaying the current user's own dones to them so they can edit them. Wraps a * DoneInput and adds the like button and delete button. */ -export const DoneEditable = ({ done, onDestroy, onUpdate, self, ...passthruProps }: Props) => { +export const DoneEditable = ({ + done, + onDestroy, + onUpdate, + self, + contacts, + ...passthruProps +}: Props) => { if (done === undefined) return null const { content, likes = [] } = done @@ -21,7 +28,10 @@ export const DoneEditable = ({ done, onDestroy, onUpdate, self, ...passthruProps )} > - + contacts.find(d => d.id === id)).filter(d => d !== undefined)} + self={self} + /> @@ -37,4 +47,5 @@ export type Props = { onDestroy: () => void onUpdate: (content: string) => void self: Contact + contacts: Contact[] } & PassthruProps diff --git a/app/ui/HoursReport.tsx b/app/ui/HoursReport.tsx index b1ca2d19..72f5cd58 100644 --- a/app/ui/HoursReport.tsx +++ b/app/ui/HoursReport.tsx @@ -10,14 +10,15 @@ import { plural } from "lib/plural" import { rankByScore } from "lib/rankByScore" import { sum } from "lib/sum" import { Fragment } from "react/jsx-runtime" -import type { ContactId, ExtendedContact } from "schema/Contact" +import type { ContactId } from "schema/Contact" import type { ContactCollection } from "schema/ContactCollection" import type { TimeEntryCollection } from "schema/TimeEntryCollection" import { Avatar } from "./Avatar" import { CenteredLayout } from "./layouts/CenteredLayout" export const HoursReport = ({ year, contacts, timeEntries }: Props) => { - const entries = timeEntries.findBy("year", year) + const sYear = year.toString() + const entries = timeEntries.filter(d => d.date.startsWith(sYear)) if (entries.length === 0) { return ( @@ -32,10 +33,8 @@ export const HoursReport = ({ year, contacts, timeEntries }: Props) => { ) } - const allContacts = contacts.all() - /** Which contacts have any hours data at all? */ - const reportingContacts = allContacts.filter(c => entries.some(e => e.contactId === c.id)) + const reportingContacts = contacts.filter(c => entries.some(e => e.contactId === c.id)) /** All weeks in the given year */ const weeks = getSundaysForYear(year) @@ -53,7 +52,7 @@ export const HoursReport = ({ year, contacts, timeEntries }: Props) => { weeks.map(week => { const totalMinutes = sum( entries - .filter(({ date }) => getSunday(date).equals(week)) // for this week + .filter(({ date }) => getSunday(LocalDate.parse(date)).equals(week)) // for this week .filter(({ contactId }) => contactId === id) // for this contact .map(entry => entry.duration), ) @@ -256,5 +255,5 @@ const futureBackground = cx("bg-neutral-50") type Props = { year: number timeEntries: TimeEntryCollection - contacts: ContactCollection + contacts: ContactCollection } diff --git a/app/ui/Members.tsx b/app/ui/Members.tsx index b75862bb..905b53c1 100644 --- a/app/ui/Members.tsx +++ b/app/ui/Members.tsx @@ -5,7 +5,13 @@ import { cx } from "lib/cx" import { type ExtendedContact } from "schema/Contact" import { Avatar } from "ui/Avatar" -export const Members = ({ self, contacts, onPromote = () => {}, onDemote = () => {} }: Props) => { +export const Members = ({ + self, + contacts, + onPromote = () => {}, + onDemote = () => {}, + onInvite = () => {}, +}: Props) => { const adminIcon = if (!self || !contacts) return null @@ -97,10 +103,14 @@ export const Members = ({ self, contacts, onPromote = () => {}, onDemote = () => {/* Invite or revoke button */}
    {!contact.isMember && !contact.isSelf && contact.invitationStatus !== "PENDING" ? - : null} @@ -133,6 +143,21 @@ export const Members = ({ self, contacts, onPromote = () => {}, onDemote = () =>
    ) })} + +
    +
    +
    + +
    +
  • ) @@ -144,6 +169,6 @@ type Props = { onPromote?: (userId: string) => void onDemote?: (userId: string) => void onRemove?: (userId: string) => void - onInvite?: (userId: string) => void + onInvite?: () => void onRevokeInvitation?: (userId: string) => void } diff --git a/app/ui/MyWeek.tsx b/app/ui/MyWeek.tsx index a86460fd..d6b00bf5 100644 --- a/app/ui/MyWeek.tsx +++ b/app/ui/MyWeek.tsx @@ -10,6 +10,8 @@ import type { Contact } from "schema/Contact" import type { DoneEntryCollection } from "schema/DoneEntryCollection" import type { ProjectCollection } from "schema/ProjectCollection" import type { TimeEntryCollection } from "schema/TimeEntryCollection" +import { type TimeEntry } from "schema/TimeEntry" +import { type DoneEntry } from "schema/DoneEntry" import { DailyDones } from "./DailyDones" import { DailyTimeEntries } from "./DailyTimeEntries" @@ -24,13 +26,15 @@ export const MyWeek = ({ projects, clients, self, + contacts, + onAddDone = () => {}, + onRemoveDone = () => {}, + onAddTime = () => {}, + onRemoveTime = () => {}, }: Props) => { const days = getDaysOfWeek(start).filter(date => showWeekends || !isWeekend(date)) - const myTimeEntries = timeEntries - .findBy("week", start) // for the week being shown - // only my entries - .filter(({ contactId }) => contactId === self.id) + const myTimeEntries = timeEntries.filter(({ contactId }) => contactId === self.id) const dailyTotals = myTimeEntries.reduce>((acc, { date, duration }) => { const day = date.toString() @@ -110,7 +114,18 @@ export const MyWeek = ({
    {days.map(date => (
    - +
    ))} {/* daily totals */} @@ -139,7 +154,9 @@ export const MyWeek = ({ {days.map(date => { return (
    - +
    ) })} @@ -155,4 +172,9 @@ type Props = { projects: ProjectCollection clients: ClientCollection self: Contact + contacts: Contact[] + onAddDone: (done: DoneEntry) => void + onRemoveDone: (done: DoneEntry) => void + onAddTime: (time: TimeEntry) => void + onRemoveTime: (time: TimeEntry) => void } diff --git a/app/ui/RevokeInvitationDialog.tsx b/app/ui/RevokeInvitationDialog.tsx index e084fb39..ffa6b4ab 100644 --- a/app/ui/RevokeInvitationDialog.tsx +++ b/app/ui/RevokeInvitationDialog.tsx @@ -1,5 +1,4 @@ import { type Contact } from "schema/Contact" -import { type Invitation } from "@localfirst/auth" import { ConfirmDialog } from "ui/ConfirmDialog" export function RevokeInvitationDialog({ @@ -30,7 +29,7 @@ export function RevokeInvitationDialog({ export type Props = { onClose: () => void contact: Contact - invitation: Invitation + invitation: any revoke: () => void defaultOpen?: boolean } diff --git a/app/ui/TeamDones.tsx b/app/ui/TeamDones.tsx index 03dcb586..5350cccb 100644 --- a/app/ui/TeamDones.tsx +++ b/app/ui/TeamDones.tsx @@ -1,5 +1,5 @@ import type { Contact } from "schema/Contact" -import { type DoneEntry, type DoneEntryId } from "schema/DoneEntry" +import { type DoneEntry } from "schema/DoneEntry" import { Avatar } from "ui/Avatar" import { DoneDisplay } from "ui/DoneDisplay" import { CenteredLayout } from "./layouts/CenteredLayout" @@ -42,8 +42,9 @@ export const TeamDones = ({ dones, contacts, updateLikes, self }: Props) => { updateLikes(done.id, likes)} + updateLikes={likes => updateLikes(done, likes)} self={self} + contacts={contacts} /> ) })} @@ -58,6 +59,6 @@ export const TeamDones = ({ dones, contacts, updateLikes, self }: Props) => { type Props = { dones: DoneEntry[] contacts: Contact[] - updateLikes: (id: DoneEntryId, likes: Contact[]) => void + updateLikes: (done: DoneEntry, likes: string[]) => void self: Contact } diff --git a/app/ui/TimeEntryDisplay.tsx b/app/ui/TimeEntryDisplay.tsx index 8b4e7ac5..54a067fb 100644 --- a/app/ui/TimeEntryDisplay.tsx +++ b/app/ui/TimeEntryDisplay.tsx @@ -1,16 +1,20 @@ import { cx } from "lib/cx" import { formatDuration } from "lib/formatDuration" import type { ReactNode } from "react" +import { type Client } from "schema/Client" import { type Contact } from "schema/Contact" +import { type Project } from "schema/Project" import { type TimeEntry } from "schema/TimeEntry" /** * Displays a read-only TimeEntry */ -export function TimeEntryDisplay({ className = "", timeEntry }: Props) { +export function TimeEntryDisplay({ className = "", timeEntry, projects, clients }: Props) { if (timeEntry === undefined) return null - const { input, client, project, duration, description } = timeEntry + const { input, client: clientId, project: projectId, duration, description } = timeEntry + const project = projects.find(d => d.id === projectId) ?? unknownProject + const client = clients.find(d => d.id === clientId) return (
    const herb = storyContact("herb") -const herbWithoutAvatar = { ...herb, avatarUrl: "" } +const herbWithoutAvatar = storyContact("herb") +herbWithoutAvatar.contact.avatarUrl = "" export const ExtraSmall: Story = { args: { size: "xs", contact: herb } } export const ExtraSmallNoImage: Story = { diff --git a/app/ui/stories/Devices.stories.tsx b/app/ui/stories/Devices.stories.tsx index 25424857..e2d9df53 100644 --- a/app/ui/stories/Devices.stories.tsx +++ b/app/ui/stories/Devices.stories.tsx @@ -1,16 +1,15 @@ import type { Meta, StoryObj } from "@storybook/react" -import { createDevice } from "context/Auth/createDevice" import { Devices } from "../Devices" +import { createDevice } from "./util/createDevice" import { userAgentStrings } from "./util/userAgentStrings" -const macBook = - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36" -const iPhone = - "Mozilla/5.0 (iPhone; CPU iPhone OS 17_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4.1 Mobile/15E148 Safari/604.1" -const herb = { userName: "herb" } -const herbLaptop = createDevice(herb, macBook) -const herbPhone = createDevice(herb, iPhone) -const allTheDevices = Object.values(userAgentStrings).map(ua => createDevice(herb, ua)) +const herbLaptop = createDevice( + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36", +) +const herbPhone = createDevice( + "Mozilla/5.0 (iPhone; CPU iPhone OS 17_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4.1 Mobile/15E148 Safari/604.1", +) +const allTheDevices = Object.values(userAgentStrings).map(ua => createDevice(ua)) const meta: Meta = { title: "Settings/Devices", diff --git a/app/ui/stories/HoursReport.stories.tsx b/app/ui/stories/HoursReport.stories.tsx index d3fbaad7..a6c381c0 100644 --- a/app/ui/stories/HoursReport.stories.tsx +++ b/app/ui/stories/HoursReport.stories.tsx @@ -5,10 +5,8 @@ import { fakeExtendedContacts as contacts } from "data/contacts" import { projects } from "data/projects" import { generateTimeEntries } from "lib/generateTimeEntries" import MockDate from "mockdate" -import { ContactCollection } from "schema/ContactCollection" -import { ProjectCollection } from "schema/ProjectCollection" -import { TimeEntry } from "schema/TimeEntry" -import { TimeEntryCollection } from "schema/TimeEntryCollection" +import { type TimeEntry } from "schema/TimeEntry" +import { type TimeEntryCollection } from "schema/TimeEntryCollection" import { HoursReport } from "../HoursReport" const resetDate: Decorator = Story => { @@ -29,7 +27,7 @@ const meta = { component: HoursReport, args: { year: 2024, - contacts: new ContactCollection(contacts), + contacts, }, decorators: [ resetDate, @@ -44,14 +42,12 @@ const meta = { export default meta type Story = StoryObj -const projectCollection = new ProjectCollection(projects) - const makeStory = ({ today, weekCount, procrastinators = [], entries = weekCount ? - generateTimeEntries({ + (generateTimeEntries({ clients, contacts, projects, @@ -59,7 +55,7 @@ const makeStory = ({ weekCount, procrastinators, omit: ["Colleen"], - }) + }) as TimeEntryCollection) : [], }: { today: string @@ -69,7 +65,7 @@ const makeStory = ({ }): Story => { return { args: { - timeEntries: new TimeEntryCollection(entries), + timeEntries: entries, }, decorators: [setDate(today)], } @@ -80,13 +76,13 @@ export const Empty = makeStory({ today: LocalDate.now().toString(), entries: [] export const OneEntry = makeStory({ today: "2024-01-07", entries: [ - new TimeEntry({ + { contactId: contacts[0].id, - date: LocalDate.parse("2024-01-07"), + date: "2024-01-07", duration: 60, - project: projectCollection.findBy("code", "Out")[0], + project: "Out", input: "1h #out", - }), + } as unknown as TimeEntry, ], }) diff --git a/app/ui/stories/Members.stories.tsx b/app/ui/stories/Members.stories.tsx index 226db85f..9b434de4 100644 --- a/app/ui/stories/Members.stories.tsx +++ b/app/ui/stories/Members.stories.tsx @@ -25,8 +25,8 @@ export const FirstUse = makeStory([ export const AllMembers = makeStory([ storyContact("ritika", { admin: true, self: true }), - storyContact("fred", { member: true }), - storyContact("herb", { member: true }), + storyContact("fred", { admin: false }), + storyContact("herb", { admin: false }), ]) export const AllAdmins = makeStory([ @@ -36,29 +36,11 @@ export const AllAdmins = makeStory([ ]) export const SelfIsNotAdmin = makeStory([ - storyContact("ritika", { member: true, self: true }), + storyContact("ritika", { admin: false, self: true }), storyContact("fred", { admin: true }), storyContact("herb"), ]) -export const PendingInvitation = makeStory([ - storyContact("ritika", { admin: true, self: true }), - storyContact("fred"), - storyContact("herb", { invitationStatus: "PENDING" }), -]) - -export const RevokedInvitation = makeStory([ - storyContact("ritika", { admin: true, self: true }), - storyContact("fred"), - storyContact("herb", { invitationStatus: "REVOKED" }), -]) - -export const ExpiredInvitation = makeStory([ - storyContact("ritika", { admin: true, self: true }), - storyContact("fred"), - storyContact("herb", { invitationStatus: "EXPIRED" }), -]) - // HELPERS function makeStory(contacts: ExtendedContact[]): Story { diff --git a/app/ui/stories/MyWeek.stories.tsx b/app/ui/stories/MyWeek.stories.tsx index 5434a8a5..8792176a 100644 --- a/app/ui/stories/MyWeek.stories.tsx +++ b/app/ui/stories/MyWeek.stories.tsx @@ -6,13 +6,12 @@ import { projects } from "data/projects" import { generateDones } from "lib/generateDones" import { generateTimeEntries } from "lib/generateTimeEntries" import { getSunday } from "lib/getSunday" -import { ClientCollection } from "schema/ClientCollection" -import { DoneEntry } from "schema/DoneEntry" -import { DoneEntryCollection } from "schema/DoneEntryCollection" -import { ProjectCollection } from "schema/ProjectCollection" -import { TimeEntry } from "schema/TimeEntry" -import { TimeEntryCollection } from "schema/TimeEntryCollection" +import { type DoneEntry } from "schema/DoneEntry" +import { type DoneEntryCollection } from "schema/DoneEntryCollection" +import { type TimeEntry } from "schema/TimeEntry" +import { type TimeEntryCollection } from "schema/TimeEntryCollection" import { storyContact } from "ui/stories/util/storyContact" +import { NO_OP } from "lib/constants" import { MyWeek } from "../MyWeek" const herb = storyContact("herb") @@ -24,8 +23,13 @@ const meta = { args: { self: herb, start: getSunday(LocalDate.parse("2024-11-07")), - projects: new ProjectCollection(projects), - clients: new ClientCollection(clients), + contacts, + clients, + projects, + onAddDone: NO_OP, + onRemoveDone: NO_OP, + onAddTime: NO_OP, + onRemoveTime: NO_OP, }, decorators: [ Story => ( @@ -41,51 +45,48 @@ type Story = StoryObj export const Empty: Story = { args: { - doneEntries: new DoneEntryCollection([]), - timeEntries: new TimeEntryCollection([]), + doneEntries: [] as DoneEntryCollection, + timeEntries: [] as TimeEntryCollection, }, } export const Partial: Story = { args: { - doneEntries: new DoneEntryCollection([ - new DoneEntry({ + doneEntries: [ + { contactId: herb.id, - date: LocalDate.parse("2024-11-07"), + date: "2024-11-07", content: "Completed terabytes of coding and compiling", - }), - ]), - timeEntries: new TimeEntryCollection([ - new TimeEntry({ + likes: [], + } as unknown as DoneEntry, + ], + timeEntries: [ + { contactId: herb.id, - date: LocalDate.parse("2024-11-07"), + date: "2024-11-07", duration: 8 * 60, - project: projects.find(p => p.code === "Out")!, + project: "Out", input: "8h #out", - }), - ]), + } as unknown as TimeEntry, + ], }, } export const Full: Story = { args: { - doneEntries: new DoneEntryCollection( - generateDones({ - today: LocalDate.parse("2024-11-09"), - weeks: 1, - productivity: 2, - enthusiasm: 0.1, - contacts, - }).filter(d => d.contactId === herb.id), - ), - timeEntries: new TimeEntryCollection( - generateTimeEntries({ - clients, - contacts, - projects, - startDate: LocalDate.parse("2024-11-09"), - weekCount: 3, - }).filter(t => t.contactId === herb.id), - ), + doneEntries: generateDones({ + today: LocalDate.parse("2024-11-09"), + weeks: 1, + productivity: 2, + enthusiasm: 0.1, + contacts, + }).filter(d => d.contactId === herb.id) as DoneEntryCollection, + timeEntries: generateTimeEntries({ + clients, + contacts, + projects, + startDate: LocalDate.parse("2024-11-09"), + weekCount: 1, + }).filter(t => t.contactId === herb.id) as TimeEntryCollection, }, } diff --git a/app/ui/stories/RevokeInvitationDialog.stories.tsx b/app/ui/stories/RevokeInvitationDialog.stories.tsx index 5984d1a5..13c147e5 100644 --- a/app/ui/stories/RevokeInvitationDialog.stories.tsx +++ b/app/ui/stories/RevokeInvitationDialog.stories.tsx @@ -1,4 +1,3 @@ -import { type Invitation } from "@localfirst/auth" import type { Meta, StoryObj } from "@storybook/react" import { storyContact } from "ui/stories/util/storyContact" import { RevokeInvitationDialog } from "../RevokeInvitationDialog" @@ -16,7 +15,7 @@ const invitation = {} export const _RevokeInvitationDialog: Story = { args: { contact: storyContact("herb"), - invitation: invitation as Invitation, + invitation, defaultOpen: true, }, } diff --git a/app/ui/stories/TeamDones.stories.tsx b/app/ui/stories/TeamDones.stories.tsx index 955d8fbd..536a2d6b 100644 --- a/app/ui/stories/TeamDones.stories.tsx +++ b/app/ui/stories/TeamDones.stories.tsx @@ -5,6 +5,7 @@ import { contacts } from "data/contacts" import { generateDones } from "lib/generateDones" import type { Contact } from "schema/Contact" import { storyContact } from "ui/stories/util/storyContact" +import { type DoneEntryCollection } from "schema/DoneEntryCollection" import { TeamDones } from "../TeamDones" const random = makeRandom("dones") @@ -28,7 +29,7 @@ const generateDonesForContacts = (contacts: Contact[]) => { productivity: 0.75, enthusiasm: 0.05, contacts, - }) + }) as DoneEntryCollection } export const Empty: Story = { diff --git a/app/ui/stories/util/createDevice.ts b/app/ui/stories/util/createDevice.ts new file mode 100644 index 00000000..4752432a --- /dev/null +++ b/app/ui/stories/util/createDevice.ts @@ -0,0 +1,29 @@ +import { parse } from "platform" +import { createId } from "@paralleldrive/cuid2" +import type { PublicKey } from "@dxos/react-client" +import { Device, DeviceKind, DeviceType } from "@dxos/react-client/halo" + +export const createDevice = (ua: string) => { + // based on dxos identity-manager https://github.com/DevResults/dxos/blob/5d1ad0f/packages/sdk/client-services/src/packlets/identity/identity-manager.ts + const platform = parse(ua) + const type = + platform.name && (platform.name.startsWith("iOS") || platform.name.startsWith("Android")) ? + DeviceType.MOBILE + : DeviceType.BROWSER + + return { + // not a functional deviceKey, but works to uniquely identify the device (only used for storybook) + deviceKey: createId() as unknown as PublicKey, + kind: DeviceKind.CURRENT, + presence: Device.PresenceState.ONLINE, + profile: { + type, + platform: platform.name ?? "", + platformVersion: platform.version ?? "", + architecture: + typeof platform.os?.architecture === "number" ? String(platform.os.architecture) : "", + os: platform.os?.family ?? "", + osVersion: platform.os?.version ?? "", + }, + } +} diff --git a/app/ui/stories/util/storyContact.ts b/app/ui/stories/util/storyContact.ts index 416c4656..91d69d39 100644 --- a/app/ui/stories/util/storyContact.ts +++ b/app/ui/stories/util/storyContact.ts @@ -1,29 +1,23 @@ import { contacts } from "data/contacts" import { ExtendedContact } from "schema/Contact" -import { type InvitationStatus } from "types/types" export function storyContact( firstName: string, { admin = false, // - member = false, self = false, - invitationStatus, }: Params = {}, ): ExtendedContact { const c = contacts.find(c => c.id === firstName.toLowerCase())! return new ExtendedContact({ - ...c, + contact: c, isSelf: self, isAdmin: admin, - isMember: member || admin, - invitationStatus, + identity: undefined, // todo }) } type Params = { admin?: boolean - member?: boolean self?: boolean - invitationStatus?: InvitationStatus } diff --git a/package.json b/package.json index 9d3dc509..b1d09ad6 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "@radix-ui/react-tooltip": "^1.1.6", "@react-router/node": "^7.0.0", "@react-router/remix-routes-option-adapter": "^7.2.0", - "@storybook/manager-api": "^8.4.6", + "@storybook/manager-api": "^8.5.8", "@svgr/core": "^8.1.0", "@svgr/plugin-jsx": "^8.1.0", "@uidotdev/usehooks": "^2.4.1", @@ -96,16 +96,17 @@ "devDependencies": { "@esbuild-plugins/node-globals-polyfill": "^0.2.3", "@react-router/dev": "^7.0.0", - "@storybook/addon-essentials": "^8.4.6", - "@storybook/addon-interactions": "^8.4.6", - "@storybook/addon-links": "^8.4.6", - "@storybook/blocks": "^8.4.6", - "@storybook/react": "^8.4.6", - "@storybook/react-vite": "^8.4.6", - "@storybook/test": "^8.4.6", + "@storybook/addon-essentials": "^8.5.8", + "@storybook/addon-interactions": "^8.5.8", + "@storybook/addon-links": "^8.5.8", + "@storybook/blocks": "^8.5.8", + "@storybook/react": "^8.5.8", + "@storybook/react-vite": "^8.5.8", + "@storybook/test": "^8.5.8", "@tailwindcss/forms": "^0.5.7", "@types/debug": "^4.1.12", "@types/node": "^20.11.27", + "@types/platform": "^1.3.6", "@types/react": "^18.2.66", "@types/react-dom": "^18.2.22", "@types/ua-parser-js": "^0.7.39", @@ -122,11 +123,12 @@ "eslint-plugin-unused-imports": "^3.2.0", "mockdate": "^3.0.5", "npm-run-all": "^4.1.5", + "platform": "^1.3.6", "postcss": "^8.4.35", "prettier": "^3.2.5", "prettier-plugin-tailwindcss": "^0.5.12", - "storybook": "^8.4.6", - "storybook-addon-remix-react-router": "^3.0.2", + "storybook": "^8.5.8", + "storybook-addon-remix-react-router": "^4.0.1", "tailwindcss": "^3.4.3", "ts-node": "^10.9.2", "typescript": "^5.6.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 29115636..8b71d5e9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -92,8 +92,8 @@ importers: specifier: ^7.2.0 version: 7.2.0(@react-router/dev@7.2.0(@types/node@20.11.27)(react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(sass@1.85.1)(terser@5.36.0)(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)))(typescript@5.6.3) '@storybook/manager-api': - specifier: ^8.4.6 - version: 8.4.6(storybook@8.4.6(prettier@3.2.5)) + specifier: ^8.5.8 + version: 8.6.4(storybook@8.6.4(prettier@3.2.5)) '@svgr/core': specifier: ^8.1.0 version: 8.1.0(typescript@5.6.3) @@ -198,26 +198,26 @@ importers: specifier: ^7.0.0 version: 7.2.0(@types/node@20.11.27)(react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(sass@1.85.1)(terser@5.36.0)(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)) '@storybook/addon-essentials': - specifier: ^8.4.6 - version: 8.4.6(@types/react@18.2.66)(storybook@8.4.6(prettier@3.2.5)) + specifier: ^8.5.8 + version: 8.6.4(@types/react@18.2.66)(storybook@8.6.4(prettier@3.2.5)) '@storybook/addon-interactions': - specifier: ^8.4.6 - version: 8.4.6(storybook@8.4.6(prettier@3.2.5)) + specifier: ^8.5.8 + version: 8.6.4(storybook@8.6.4(prettier@3.2.5)) '@storybook/addon-links': - specifier: ^8.4.6 - version: 8.4.6(react@18.2.0)(storybook@8.4.6(prettier@3.2.5)) + specifier: ^8.5.8 + version: 8.6.4(react@18.2.0)(storybook@8.6.4(prettier@3.2.5)) '@storybook/blocks': - specifier: ^8.4.6 - version: 8.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.4.6(prettier@3.2.5)) + specifier: ^8.5.8 + version: 8.6.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.4(prettier@3.2.5)) '@storybook/react': - specifier: ^8.4.6 - version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@3.2.5)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.4.6(prettier@3.2.5))(typescript@5.6.3) + specifier: ^8.5.8 + version: 8.6.4(@storybook/test@8.6.4(storybook@8.6.4(prettier@3.2.5)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.4(prettier@3.2.5))(typescript@5.6.3) '@storybook/react-vite': - specifier: ^8.4.6 - version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@3.2.5)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.25.0)(storybook@8.4.6(prettier@3.2.5))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)) + specifier: ^8.5.8 + version: 8.6.4(@storybook/test@8.6.4(storybook@8.6.4(prettier@3.2.5)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.25.0)(storybook@8.6.4(prettier@3.2.5))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)) '@storybook/test': - specifier: ^8.4.6 - version: 8.4.6(storybook@8.4.6(prettier@3.2.5)) + specifier: ^8.5.8 + version: 8.6.4(storybook@8.6.4(prettier@3.2.5)) '@tailwindcss/forms': specifier: ^0.5.7 version: 0.5.7(tailwindcss@3.4.3(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3))) @@ -227,6 +227,9 @@ importers: '@types/node': specifier: ^20.11.27 version: 20.11.27 + '@types/platform': + specifier: ^1.3.6 + version: 1.3.6 '@types/react': specifier: ^18.2.66 version: 18.2.66 @@ -275,6 +278,9 @@ importers: npm-run-all: specifier: ^4.1.5 version: 4.1.5 + platform: + specifier: ^1.3.6 + version: 1.3.6 postcss: specifier: ^8.4.35 version: 8.4.35 @@ -285,11 +291,11 @@ importers: specifier: ^0.5.12 version: 0.5.12(prettier@3.2.5) storybook: - specifier: ^8.4.6 - version: 8.4.6(prettier@3.2.5) + specifier: ^8.5.8 + version: 8.6.4(prettier@3.2.5) storybook-addon-remix-react-router: - specifier: ^3.0.2 - version: 3.0.2(@storybook/blocks@8.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.4.6(prettier@3.2.5)))(@storybook/channels@8.0.8)(@storybook/components@8.4.6(storybook@8.4.6(prettier@3.2.5)))(@storybook/core-events@8.0.8)(@storybook/manager-api@8.4.6(storybook@8.4.6(prettier@3.2.5)))(@storybook/preview-api@8.4.6(storybook@8.4.6(prettier@3.2.5)))(@storybook/theming@8.4.6(storybook@8.4.6(prettier@3.2.5)))(react-dom@18.2.0(react@18.2.0))(react-router-dom@6.22.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react@18.2.0) + specifier: ^4.0.1 + version: 4.0.1(@storybook/blocks@8.6.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.4(prettier@3.2.5)))(@storybook/channels@8.0.8)(@storybook/components@8.6.4(storybook@8.6.4(prettier@3.2.5)))(@storybook/core-events@8.0.8)(@storybook/manager-api@8.6.4(storybook@8.6.4(prettier@3.2.5)))(@storybook/preview-api@8.6.4(storybook@8.6.4(prettier@3.2.5)))(@storybook/theming@8.6.4(storybook@8.6.4(prettier@3.2.5)))(react-dom@18.2.0(react@18.2.0))(react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react@18.2.0) tailwindcss: specifier: ^3.4.3 version: 3.4.3(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3)) @@ -1530,8 +1536,8 @@ packages: resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@joshwooding/vite-plugin-react-docgen-typescript@0.4.2': - resolution: {integrity: sha512-feQ+ntr+8hbVudnsTUapiMN9q8T90XA1d5jn9QzY09sNoj4iD9wi0PY1vsBFTda4ZjEaxRK9S81oarR2nj7TFQ==} + '@joshwooding/vite-plugin-react-docgen-typescript@0.5.0': + resolution: {integrity: sha512-qYDdL7fPwLRI+bJNurVcis+tNgJmvWjH4YTBGXTA8xMuxFrnAz6E5o35iyzyKbq5J5Lr8mJGfrR5GXl+WGwhgQ==} peerDependencies: typescript: '>= 4.3.x' vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 @@ -1589,6 +1595,15 @@ packages: '@types/react': '>=16' react: '>=16' + '@mjackson/form-data-parser@0.4.0': + resolution: {integrity: sha512-zDQ0sFfXqn2bJaZ/ypXfGUe0lUjCzXybBHYEoyWaO2w1dZ0nOM9nRER8tVVv3a8ZIgO/zF6p2I5ieWJAUOzt3w==} + + '@mjackson/headers@0.5.1': + resolution: {integrity: sha512-sJpFgecPT/zJvwk3GRNVWNs8EkwaJoUNU2D0VMlp+gDJs6cuSTm1q/aCZi3ZtuV6CgDEQ4l2ZjUG3A9JrQlbNA==} + + '@mjackson/multipart-parser@0.6.3': + resolution: {integrity: sha512-aQhySnM6OpAYMMG+m7LEygYye99hB1md/Cy1AFE0yD5hfNW+X4JDu7oNVY9Gc6IW8PZ45D1rjFLDIUdnkXmwrA==} + '@mjackson/node-fetch-server@0.2.0': resolution: {integrity: sha512-EMlH1e30yzmTpGLQjlFmaDAjyOeZhng1/XCd7DExR8PNAnG/G1tyruZxEoUe11ClnwGhGrtsdnyyUx1frSzjng==} @@ -3131,86 +3146,86 @@ packages: '@standard-schema/spec@1.0.0': resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} - '@storybook/addon-actions@8.4.6': - resolution: {integrity: sha512-vbplwjMj7UXbdzoFhQkqFHLQAPJX8OVGTM9Q+yjuWDHViaKKUlgRWp0jclT7aIDNJQU2a6wJbTimHgJeF16Vhg==} + '@storybook/addon-actions@8.6.4': + resolution: {integrity: sha512-mCcyfkeb19fJX0dpQqqZCnWBwjVn0/27xcpR0mbm/KW2wTByU6bKFFujgrHsX3ONl97IcIaUnmwwUwBr1ebZXw==} peerDependencies: - storybook: ^8.4.6 + storybook: ^8.6.4 - '@storybook/addon-backgrounds@8.4.6': - resolution: {integrity: sha512-RSjJ3iElxlQXebZrz1s5LeoLpAXr9LAGifX7w0abMzN5sg6QSwNeUHko2eT3V57M3k1Fa/5Eelso/QBQifFEog==} + '@storybook/addon-backgrounds@8.6.4': + resolution: {integrity: sha512-lRYGumlYdd1RptQJvOTRMx/q2pDmg2MO5GX4la7VfI8KrUyeuC1ZOSRDEcXeTuAZWJztqmtymg6bB7cAAoxCFA==} peerDependencies: - storybook: ^8.4.6 + storybook: ^8.6.4 - '@storybook/addon-controls@8.4.6': - resolution: {integrity: sha512-70pEGWh0C2g8s0DYsISElOzsMbQS6p/K9iU5EqfotDF+hvEqstjsV/bTbR5f3OK4vR/7Gxamk7j8RVd14Nql6A==} + '@storybook/addon-controls@8.6.4': + resolution: {integrity: sha512-oMMP9Bj0RMfYmaitjFt6oBSjKH4titUqP+wE6PrZ3v+Om56f4buqfNKXRf80As2OrsZn0pjj95muWzVVHqIhyQ==} peerDependencies: - storybook: ^8.4.6 + storybook: ^8.6.4 - '@storybook/addon-docs@8.4.6': - resolution: {integrity: sha512-olxz61W7PW/EsXrKhLrYbI3rn9GMBhY3KIOF/6tumbRkh0Siu/qe4EAImaV9NNwiC1R7+De/1OIVMY6o0EIZVw==} + '@storybook/addon-docs@8.6.4': + resolution: {integrity: sha512-+kbcjvEAH0Xs+k+raAwfC0WmJilWhxBYnLLeazP3m5AkVI3sIjbzuuZ78NR0DCdRkw9BpuuXMHv5o4tIvLIUlw==} peerDependencies: - storybook: ^8.4.6 + storybook: ^8.6.4 - '@storybook/addon-essentials@8.4.6': - resolution: {integrity: sha512-TbFqyvWFUKw8LBpVcZuGQydzVB/3kSuHxDHi+Wj3Qas3cxBl7+w4/HjwomT2D2Tni1dZ1uPDOsAtNLmwp1POsg==} + '@storybook/addon-essentials@8.6.4': + resolution: {integrity: sha512-3pF0ZDl5EICqe0eOupPQq6PxeupwkLsfTWANuuJUYTJur82kvJd3Chb7P9vqw0A0QBx6106mL6PIyjrFJJMhLg==} peerDependencies: - storybook: ^8.4.6 + storybook: ^8.6.4 - '@storybook/addon-highlight@8.4.6': - resolution: {integrity: sha512-m8wedbqDMbwkP99dNHkHAiAUkx5E7FEEEyLPX1zfkhZWOGtTkavXHH235SGp50zD75LQ6eC/BvgegrzxSQa9Wg==} + '@storybook/addon-highlight@8.6.4': + resolution: {integrity: sha512-jFREXnSE/7VuBR8kbluN+DBVkMXEV7MGuCe8Ytb1/D2Q0ohgJe395dfVgEgSMXErOwsn//NV/NgJp6JNXH2DrA==} peerDependencies: - storybook: ^8.4.6 + storybook: ^8.6.4 - '@storybook/addon-interactions@8.4.6': - resolution: {integrity: sha512-sR2oUSYIGUoAdrHT+fM1zgykhad98bsJ11c79r7HfBMXEPWc1yRcjIMmz8Xz06FMROMfebqduYDf60V++/I0Jw==} + '@storybook/addon-interactions@8.6.4': + resolution: {integrity: sha512-MZAAZjyvmJXCvM35zEiPpXz7vK+fimovt+WZKAMayAbXy5fT+7El0c9dDyTQ2norNKNj9QU/8hiU/1zARSUELQ==} peerDependencies: - storybook: ^8.4.6 + storybook: ^8.6.4 - '@storybook/addon-links@8.4.6': - resolution: {integrity: sha512-1KoG9ytEWWwdF/dheu1O0dayQTMsHw++Qk8afqw7bwW1Cxz5LuAJH5ZscFWMiE5f4Xq1NgaJdeAUaIavyoOcdg==} + '@storybook/addon-links@8.6.4': + resolution: {integrity: sha512-TaSIteYLJ12+dVBk7fW96ZvNIFizKs+Vo/YuNAe4xTzFJRrjLkFj9htLVi/dusMfn7lYo5DHIns08LuM+po1Dg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.4.6 + storybook: ^8.6.4 peerDependenciesMeta: react: optional: true - '@storybook/addon-measure@8.4.6': - resolution: {integrity: sha512-N2IRpr39g5KpexCAS1vIHJT+phc9Yilwm3PULds2rQ66VMTbkxobXJDdt0NS05g5n9/eDniroNQwdCeLg4tkpw==} + '@storybook/addon-measure@8.6.4': + resolution: {integrity: sha512-IpVL1rTy1tO8sy140eU3GdVB1QJ6J62+V6GSstcmqTLxDJQk5jFfg7hVbPEAZZ2sPFmeyceP9AMoBBo0EB355A==} peerDependencies: - storybook: ^8.4.6 + storybook: ^8.6.4 - '@storybook/addon-outline@8.4.6': - resolution: {integrity: sha512-EhcWx8OpK85HxQulLWzpWUHEwQpDYuAiKzsFj9ivAbfeljkIWNTG04mierfaH1xX016uL9RtLJL/zwBS5ChnFg==} + '@storybook/addon-outline@8.6.4': + resolution: {integrity: sha512-28nAslKTy0zWMdxAZcipMDYrEp1TkXVooAsqMGY5AMXMiORi1ObjhmjTLhVt1dXp+aDg0X+M3B6PqoingmHhqQ==} peerDependencies: - storybook: ^8.4.6 + storybook: ^8.6.4 - '@storybook/addon-toolbars@8.4.6': - resolution: {integrity: sha512-+Xao/uGa8FnYsyUiREUkYXWNysm3Aba8tL/Bwd+HufHtdiKJGa9lrXaC7VLCqBUaEjwqM3aaPwqEWIROsthmPQ==} + '@storybook/addon-toolbars@8.6.4': + resolution: {integrity: sha512-PU2lvgwCKDn93zpp5MEog103UUmSSugcxDf18xaoa9D15Qtr+YuQHd2hXbxA7+dnYL9lA7MLYsstfxE91ieM4Q==} peerDependencies: - storybook: ^8.4.6 + storybook: ^8.6.4 - '@storybook/addon-viewport@8.4.6': - resolution: {integrity: sha512-BuQll5YzOCpMS7p5Rsw9wcmi8hTnEKyg6+qAbkZNfiZ2JhXCa1GFUqX725fF1whpYVQULtkQxU8r+vahoRn7Yg==} + '@storybook/addon-viewport@8.6.4': + resolution: {integrity: sha512-O5Ij+SRVg6grY6JOL5lOpsFyopZxuZEl2GHfh2SUf9hfowNS0QAgFpJupqXkwZzRSrlf9uKrLkjB6ulLgN2gOQ==} peerDependencies: - storybook: ^8.4.6 + storybook: ^8.6.4 - '@storybook/blocks@8.4.6': - resolution: {integrity: sha512-Gzbx8hM7ZQIHlQELcFIMbY1v+r1Po4mlinq0QVPtKS4lBcW4eZIsesbxOaL+uFNrxb583TLFzXo0DbRPzS46sg==} + '@storybook/blocks@8.6.4': + resolution: {integrity: sha512-+oPXwT3KzJzsdkQuGEzBqOKTIFlb6qmlCWWbDwAnP0SEqYHoTVRTAIa44icFP0EZeIe+ypFVAm1E7kWTLmw1hQ==} 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.4.6 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + storybook: ^8.6.4 peerDependenciesMeta: react: optional: true react-dom: optional: true - '@storybook/builder-vite@8.4.6': - resolution: {integrity: sha512-PyJsaEPyuRFFEplpNUi+nbuJd7d1DC2dAZjpsaHTXyqg5iPIbkIgsbCJLUDeIXnUDqM/utjmMpN0sQKJuhIc6w==} + '@storybook/builder-vite@8.6.4': + resolution: {integrity: sha512-FuSP2GhWVVTt6NdX0UJHhPOqhu09X4apSk+KWUf3aITRIJg9gbPYtJDBmxv1vXQEgvfCDdYBYbeG1khiO/Ghfw==} peerDependencies: - storybook: ^8.4.6 + storybook: ^8.6.4 vite: ^4.0.0 || ^5.0.0 || ^6.0.0 '@storybook/channels@8.0.8': @@ -3219,26 +3234,26 @@ packages: '@storybook/client-logger@8.0.8': resolution: {integrity: sha512-a4BKwl9NLFcuRgMyI7S4SsJeLFK0LCQxIy76V6YyrE1DigoXz4nA4eQxdjLf7JVvU0EZFmNSfbVL/bXzzWKNXA==} - '@storybook/components@8.4.6': - resolution: {integrity: sha512-9tKSJJCyFT5RZMRGyozTBJkr9C9Yfk1nuOE9XbDEE1Z+3/IypKR9+iwc5mfNBStDNY+rxtYWNLKBb5GPR2yhzA==} + '@storybook/components@8.6.4': + resolution: {integrity: sha512-91VEVFWOgHkEFoNFMk6gs1AuOE9Yp7N283BXQOW+AgP+atpzED6t/fIBPGqJ2ewAuzLJ+cFOrasSzoNwVfg3Jg==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 '@storybook/core-events@8.0.8': resolution: {integrity: sha512-PtuvR7vS4glDEdCfKB4f1k3Vs1C3rTWP2DNbF+IjjPhNLMBznCdzTAPcz+NUIBvpjjGnhKwWikJ0yj931YjSVg==} - '@storybook/core@8.4.6': - resolution: {integrity: sha512-WeojVtHy0/t50tzw/15S+DLzKsj8BN9yWdo3vJMvm+nflLFvfq1XvD9WGOWeaFp8E/o3AP+4HprXG0r42KEJtA==} + '@storybook/core@8.6.4': + resolution: {integrity: sha512-glDbjEBi3wokw1T+KQtl93irHO9N0LCwgylWfWVXYDdQjUJ7pGRQGnw73gPX7Ds9tg3myXFC83GjmY94UYSMbA==} peerDependencies: prettier: ^2 || ^3 peerDependenciesMeta: prettier: optional: true - '@storybook/csf-plugin@8.4.6': - resolution: {integrity: sha512-JDIT0czC4yMgKGNf39KTZr3zm5MusAZdn6LBrTfvWb7CrTCR4iVHa4lp2yb7EJk41vHsBec0QUYDDuiFH/vV0g==} + '@storybook/csf-plugin@8.6.4': + resolution: {integrity: sha512-7UpEp4PFTy1iKjZiRaYMG7zvnpLIRPyD0+lUJUlLYG4UIemV3onvnIi1Je1tSZ4hfTup+ulom7JLztVSHZGRMg==} peerDependencies: - storybook: ^8.4.6 + storybook: ^8.6.4 '@storybook/csf@0.1.11': resolution: {integrity: sha512-dHYFQH3mA+EtnCkHXzicbLgsvzYjcDJ1JWsogbItZogkPHgSJM/Wr71uMkcvw8v9mmCyP4NpXJuu6bPoVsOnzg==} @@ -3253,45 +3268,49 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - '@storybook/instrumenter@8.4.6': - resolution: {integrity: sha512-snXjlgbp065A6KoK9zkjBYEIMCSlN5JefPKzt1FC0rbcbtahhD+iPpqISKhDSczwgOku/JVhVUDp/vU7AIf4mg==} + '@storybook/instrumenter@8.6.4': + resolution: {integrity: sha512-8OtIWLhayTUdqJEeXiPm6l3LTdSkWgQzzV2l2HIe4Adedeot+Rkwu6XHmyRDpnb0+Ish6zmMDqtJBxC2PQsy6Q==} peerDependencies: - storybook: ^8.4.6 + storybook: ^8.6.4 - '@storybook/manager-api@8.4.6': - resolution: {integrity: sha512-TsXlQ5m5rTl2KNT9icPFyy822AqXrx1QplZBt/L7cFn7SpqQKDeSta21FH7MG0piAvzOweXebVSqKngJ6cCWWQ==} + '@storybook/manager-api@8.6.4': + resolution: {integrity: sha512-w/Nn/VznfbIg2oezDfzZNwSTDY5kBZbzxVBHLCnIcyu2AKt2Yto3pfGi60SikFcTrsClaAKT7D92kMQ9qdQNQQ==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@storybook/preview-api@8.4.6': - resolution: {integrity: sha512-LbD+lR1FGvWaJBXteVx5xdgs1x1D7tyidBg2CsW2ex+cP0iJ176JgjPfutZxlWOfQnhfRYNnJ3WKoCIfxFOTKA==} + '@storybook/preview-api@8.6.4': + resolution: {integrity: sha512-5HBfxggzxGz0dg2c61NpPiQJav7UAmzsQlzmI5SzWOS6lkaylcDG8giwKzASVCXVWBxNji9qIDFM++UH090aDg==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@storybook/react-dom-shim@8.4.6': - resolution: {integrity: sha512-f7RM8GO++fqMxbjNdEzeGS1P821jXuwRnAraejk5hyjB5SqetauFxMwoFYEYfJXPaLX2qIubnIJ78hdJ/IBaEA==} + '@storybook/react-dom-shim@8.6.4': + resolution: {integrity: sha512-kTGJ3aFdmfCFzYaDFGmZWfTXr9xhbUaf0tJ6+nEjc4tME6mFwMI+tTUT6U/J6mJhZuc2DjvIRA7bM0x77dIDqw==} 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.4.6 + storybook: ^8.6.4 - '@storybook/react-vite@8.4.6': - resolution: {integrity: sha512-bVoYj3uJRz0SknK2qN3vBVSoEXsvyARQLuHjP9eX0lWBd9XSxZinmVbexPdD0OeJYcJIdmbli2/Gw7/hu5CjFA==} + '@storybook/react-vite@8.6.4': + resolution: {integrity: sha512-MEmD6sP2tUI/SYCXCeWGTs8umZj+N0e3DHXCQUz0nCsJH7kuCTTipOTBQvr/GuEstNd7BNG5k8aLIRrXLjAvdA==} engines: {node: '>=18.0.0'} peerDependencies: + '@storybook/test': 8.6.4 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.4.6 + storybook: ^8.6.4 vite: ^4.0.0 || ^5.0.0 || ^6.0.0 + peerDependenciesMeta: + '@storybook/test': + optional: true - '@storybook/react@8.4.6': - resolution: {integrity: sha512-QAT23beoYNLhFGAXPimtuMErvpcI7eZbZ4AlLqW1fhiTZrRYw06cjC1bs9H3tODMcHH9LS5p3Wz9b29jtV2XGw==} + '@storybook/react@8.6.4': + resolution: {integrity: sha512-pfv4hMhu3AScOh0l86uIzmXLSQ0XA/e0reIVwQcxKht6miaKArhx9GkS4mMp6SO23ZoV5G/nfLgUaMVPVE0ZPg==} engines: {node: '>=18.0.0'} peerDependencies: - '@storybook/test': 8.4.6 + '@storybook/test': 8.6.4 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.4.6 + storybook: ^8.6.4 typescript: '>= 4.2.x' peerDependenciesMeta: '@storybook/test': @@ -3299,13 +3318,13 @@ packages: typescript: optional: true - '@storybook/test@8.4.6': - resolution: {integrity: sha512-MeU1g65YgU66M2NtmEIL9gVeHk+en0k9Hp0wfxEO7NT/WLfaOD5RXLRDJVhbAlrH/6tLeWKIPNh/D26y27vO/g==} + '@storybook/test@8.6.4': + resolution: {integrity: sha512-JPjfbaMMuCBT47pg3/MDD9vYFF5OGPAOWEB9nJWJ9IjYAb2Nd8OYJQIDoYJQNT+aLkTVLtvzGnVNwdxpouAJcQ==} peerDependencies: - storybook: ^8.4.6 + storybook: ^8.6.4 - '@storybook/theming@8.4.6': - resolution: {integrity: sha512-q7vDPN/mgj7cXIVQ9R1/V75hrzNgKkm2G0LjMo57//9/djQ+7LxvBsR1iScbFIRSEqppvMiBFzkts+2uXidySA==} + '@storybook/theming@8.6.4': + resolution: {integrity: sha512-g9Ns4uenC9oAWETaJ/tEKEIPMdS+CqjNWZz5Wbw1bLNhXwADZgKrVqawzZi64+bYYtQ+i8VCTjPoFa6s2eHiDQ==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 @@ -3587,6 +3606,9 @@ packages: '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + '@types/platform@1.3.6': + resolution: {integrity: sha512-ZmSaqHuvzv+jC232cFoz2QqPUkaj6EvMmCrWcx3WRr7xTPVFCMUOTcOq8m2d+Zw1iKRc1kDiaA+jtNrV0hkVew==} + '@types/prop-types@15.7.11': resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} @@ -7332,19 +7354,6 @@ packages: '@types/react': optional: true - react-router-dom@6.22.3: - resolution: {integrity: sha512-7ZILI7HjcE+p31oQvwbokjk6OA/bnFxrhJ19n82Ex9Ph8fNAq+Hm/7KchpMGlTgWhUxRHMMCut+vEtNpWpowKw==} - engines: {node: '>=14.0.0'} - peerDependencies: - react: '>=16.8' - react-dom: '>=16.8' - - react-router@6.22.3: - resolution: {integrity: sha512-dr2eb3Mj5zK2YISHK++foM9w4eBnO23eKnZEDs7c880P6oKbrjz/Svg9+nxqtHQK+oMW4OtjZca0RqPglXxguQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - react: '>=16.8' - react-router@7.2.0: resolution: {integrity: sha512-fXyqzPgCPZbqhrk7k3hPcCpYIlQ2ugIXDboHUzhJISFVy2DEPsmHgN588MyGmkIOv3jDgNfUE3kJi83L28s/LQ==} engines: {node: '>=20.0.0'} @@ -7774,8 +7783,8 @@ packages: std-env@3.7.0: resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} - storybook-addon-remix-react-router@3.0.2: - resolution: {integrity: sha512-vSr7o+TYs2JY4m/elZm28UnLKeK/GQwmNnXWEnR5FyZ8Kcz1S1fPhsdWUjMEU9wRiAMjJwmEHiTtpjbZ4/b0mg==} + storybook-addon-remix-react-router@4.0.1: + resolution: {integrity: sha512-Plhul9kInTKdOhoHumiJ0KRmuIVYhT5WBCnAlNt9MlsmDGEuuiimh8msyj5LPWnGD51/t38i14xI8gmmTyu1ow==} peerDependencies: '@storybook/blocks': ^8.0.0 '@storybook/channels': ^8.0.0 @@ -7784,17 +7793,17 @@ packages: '@storybook/manager-api': ^8.0.0 '@storybook/preview-api': ^8.0.0 '@storybook/theming': ^8.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-router-dom: ^6.4.0 || ^7.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-router: ^7.0.2 peerDependenciesMeta: react: optional: true react-dom: optional: true - storybook@8.4.6: - resolution: {integrity: sha512-J6juZSZT2u3PUW0QZYZZYxBq6zU5O0OrkSgkMXGMg/QrS9to9IHmt4FjEMEyACRbXo8POcB/fSXa3VpGe7bv3g==} + storybook@8.6.4: + resolution: {integrity: sha512-XXh1Acvf1r3BQX0BDLQw6yhZ7yUGvYxIcKOBuMdetnX7iXtczipJTfw0uyFwk0ltkKEE9PpJvivYmARF3u64VQ==} hasBin: true peerDependencies: prettier: ^2 || ^3 @@ -10997,8 +11006,9 @@ snapshots: dependencies: '@sinclair/typebox': 0.27.8 - '@joshwooding/vite-plugin-react-docgen-typescript@0.4.2(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.5.0(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))': dependencies: + glob: 10.3.10 magic-string: 0.27.0 react-docgen-typescript: 2.2.2(typescript@5.6.3) vite: 5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) @@ -11073,6 +11083,16 @@ snapshots: '@types/react': 18.2.66 react: 18.2.0 + '@mjackson/form-data-parser@0.4.0': + dependencies: + '@mjackson/multipart-parser': 0.6.3 + + '@mjackson/headers@0.5.1': {} + + '@mjackson/multipart-parser@0.6.3': + dependencies: + '@mjackson/headers': 0.5.1 + '@mjackson/node-fetch-server@0.2.0': {} '@ngneat/falso@7.3.0': @@ -12656,117 +12676,115 @@ snapshots: '@standard-schema/spec@1.0.0': {} - '@storybook/addon-actions@8.4.6(storybook@8.4.6(prettier@3.2.5))': + '@storybook/addon-actions@8.6.4(storybook@8.6.4(prettier@3.2.5))': dependencies: '@storybook/global': 5.0.0 '@types/uuid': 9.0.8 dequal: 2.0.3 polished: 4.3.1 - storybook: 8.4.6(prettier@3.2.5) + storybook: 8.6.4(prettier@3.2.5) uuid: 9.0.1 - '@storybook/addon-backgrounds@8.4.6(storybook@8.4.6(prettier@3.2.5))': + '@storybook/addon-backgrounds@8.6.4(storybook@8.6.4(prettier@3.2.5))': dependencies: '@storybook/global': 5.0.0 memoizerific: 1.11.3 - storybook: 8.4.6(prettier@3.2.5) + storybook: 8.6.4(prettier@3.2.5) ts-dedent: 2.2.0 - '@storybook/addon-controls@8.4.6(storybook@8.4.6(prettier@3.2.5))': + '@storybook/addon-controls@8.6.4(storybook@8.6.4(prettier@3.2.5))': dependencies: '@storybook/global': 5.0.0 dequal: 2.0.3 - storybook: 8.4.6(prettier@3.2.5) + storybook: 8.6.4(prettier@3.2.5) ts-dedent: 2.2.0 - '@storybook/addon-docs@8.4.6(@types/react@18.2.66)(storybook@8.4.6(prettier@3.2.5))': + '@storybook/addon-docs@8.6.4(@types/react@18.2.66)(storybook@8.6.4(prettier@3.2.5))': dependencies: '@mdx-js/react': 3.0.1(@types/react@18.2.66)(react@18.2.0) - '@storybook/blocks': 8.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.4.6(prettier@3.2.5)) - '@storybook/csf-plugin': 8.4.6(storybook@8.4.6(prettier@3.2.5)) - '@storybook/react-dom-shim': 8.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.4.6(prettier@3.2.5)) + '@storybook/blocks': 8.6.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.4(prettier@3.2.5)) + '@storybook/csf-plugin': 8.6.4(storybook@8.6.4(prettier@3.2.5)) + '@storybook/react-dom-shim': 8.6.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.4(prettier@3.2.5)) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - storybook: 8.4.6(prettier@3.2.5) + storybook: 8.6.4(prettier@3.2.5) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - '@storybook/addon-essentials@8.4.6(@types/react@18.2.66)(storybook@8.4.6(prettier@3.2.5))': - dependencies: - '@storybook/addon-actions': 8.4.6(storybook@8.4.6(prettier@3.2.5)) - '@storybook/addon-backgrounds': 8.4.6(storybook@8.4.6(prettier@3.2.5)) - '@storybook/addon-controls': 8.4.6(storybook@8.4.6(prettier@3.2.5)) - '@storybook/addon-docs': 8.4.6(@types/react@18.2.66)(storybook@8.4.6(prettier@3.2.5)) - '@storybook/addon-highlight': 8.4.6(storybook@8.4.6(prettier@3.2.5)) - '@storybook/addon-measure': 8.4.6(storybook@8.4.6(prettier@3.2.5)) - '@storybook/addon-outline': 8.4.6(storybook@8.4.6(prettier@3.2.5)) - '@storybook/addon-toolbars': 8.4.6(storybook@8.4.6(prettier@3.2.5)) - '@storybook/addon-viewport': 8.4.6(storybook@8.4.6(prettier@3.2.5)) - storybook: 8.4.6(prettier@3.2.5) + '@storybook/addon-essentials@8.6.4(@types/react@18.2.66)(storybook@8.6.4(prettier@3.2.5))': + dependencies: + '@storybook/addon-actions': 8.6.4(storybook@8.6.4(prettier@3.2.5)) + '@storybook/addon-backgrounds': 8.6.4(storybook@8.6.4(prettier@3.2.5)) + '@storybook/addon-controls': 8.6.4(storybook@8.6.4(prettier@3.2.5)) + '@storybook/addon-docs': 8.6.4(@types/react@18.2.66)(storybook@8.6.4(prettier@3.2.5)) + '@storybook/addon-highlight': 8.6.4(storybook@8.6.4(prettier@3.2.5)) + '@storybook/addon-measure': 8.6.4(storybook@8.6.4(prettier@3.2.5)) + '@storybook/addon-outline': 8.6.4(storybook@8.6.4(prettier@3.2.5)) + '@storybook/addon-toolbars': 8.6.4(storybook@8.6.4(prettier@3.2.5)) + '@storybook/addon-viewport': 8.6.4(storybook@8.6.4(prettier@3.2.5)) + storybook: 8.6.4(prettier@3.2.5) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - '@storybook/addon-highlight@8.4.6(storybook@8.4.6(prettier@3.2.5))': + '@storybook/addon-highlight@8.6.4(storybook@8.6.4(prettier@3.2.5))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.4.6(prettier@3.2.5) + storybook: 8.6.4(prettier@3.2.5) - '@storybook/addon-interactions@8.4.6(storybook@8.4.6(prettier@3.2.5))': + '@storybook/addon-interactions@8.6.4(storybook@8.6.4(prettier@3.2.5))': dependencies: '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.4.6(storybook@8.4.6(prettier@3.2.5)) - '@storybook/test': 8.4.6(storybook@8.4.6(prettier@3.2.5)) + '@storybook/instrumenter': 8.6.4(storybook@8.6.4(prettier@3.2.5)) + '@storybook/test': 8.6.4(storybook@8.6.4(prettier@3.2.5)) polished: 4.3.1 - storybook: 8.4.6(prettier@3.2.5) + storybook: 8.6.4(prettier@3.2.5) ts-dedent: 2.2.0 - '@storybook/addon-links@8.4.6(react@18.2.0)(storybook@8.4.6(prettier@3.2.5))': + '@storybook/addon-links@8.6.4(react@18.2.0)(storybook@8.6.4(prettier@3.2.5))': dependencies: - '@storybook/csf': 0.1.11 '@storybook/global': 5.0.0 - storybook: 8.4.6(prettier@3.2.5) + storybook: 8.6.4(prettier@3.2.5) ts-dedent: 2.2.0 optionalDependencies: react: 18.2.0 - '@storybook/addon-measure@8.4.6(storybook@8.4.6(prettier@3.2.5))': + '@storybook/addon-measure@8.6.4(storybook@8.6.4(prettier@3.2.5))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.4.6(prettier@3.2.5) + storybook: 8.6.4(prettier@3.2.5) tiny-invariant: 1.3.3 - '@storybook/addon-outline@8.4.6(storybook@8.4.6(prettier@3.2.5))': + '@storybook/addon-outline@8.6.4(storybook@8.6.4(prettier@3.2.5))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.4.6(prettier@3.2.5) + storybook: 8.6.4(prettier@3.2.5) ts-dedent: 2.2.0 - '@storybook/addon-toolbars@8.4.6(storybook@8.4.6(prettier@3.2.5))': + '@storybook/addon-toolbars@8.6.4(storybook@8.6.4(prettier@3.2.5))': dependencies: - storybook: 8.4.6(prettier@3.2.5) + storybook: 8.6.4(prettier@3.2.5) - '@storybook/addon-viewport@8.4.6(storybook@8.4.6(prettier@3.2.5))': + '@storybook/addon-viewport@8.6.4(storybook@8.6.4(prettier@3.2.5))': dependencies: memoizerific: 1.11.3 - storybook: 8.4.6(prettier@3.2.5) + storybook: 8.6.4(prettier@3.2.5) - '@storybook/blocks@8.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.4.6(prettier@3.2.5))': + '@storybook/blocks@8.6.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.4(prettier@3.2.5))': dependencies: - '@storybook/csf': 0.1.11 '@storybook/icons': 1.2.12(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - storybook: 8.4.6(prettier@3.2.5) + storybook: 8.6.4(prettier@3.2.5) ts-dedent: 2.2.0 optionalDependencies: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@storybook/builder-vite@8.4.6(storybook@8.4.6(prettier@3.2.5))(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))': + '@storybook/builder-vite@8.6.4(storybook@8.6.4(prettier@3.2.5))(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))': dependencies: - '@storybook/csf-plugin': 8.4.6(storybook@8.4.6(prettier@3.2.5)) + '@storybook/csf-plugin': 8.6.4(storybook@8.6.4(prettier@3.2.5)) browser-assert: 1.2.1 - storybook: 8.4.6(prettier@3.2.5) + storybook: 8.6.4(prettier@3.2.5) ts-dedent: 2.2.0 vite: 5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) @@ -12782,17 +12800,17 @@ snapshots: dependencies: '@storybook/global': 5.0.0 - '@storybook/components@8.4.6(storybook@8.4.6(prettier@3.2.5))': + '@storybook/components@8.6.4(storybook@8.6.4(prettier@3.2.5))': dependencies: - storybook: 8.4.6(prettier@3.2.5) + storybook: 8.6.4(prettier@3.2.5) '@storybook/core-events@8.0.8': dependencies: ts-dedent: 2.2.0 - '@storybook/core@8.4.6(prettier@3.2.5)': + '@storybook/core@8.6.4(prettier@3.2.5)(storybook@8.6.4(prettier@3.2.5))': dependencies: - '@storybook/csf': 0.1.11 + '@storybook/theming': 8.6.4(storybook@8.6.4(prettier@3.2.5)) better-opn: 3.0.2 browser-assert: 1.2.1 esbuild: 0.20.1 @@ -12807,12 +12825,13 @@ snapshots: prettier: 3.2.5 transitivePeerDependencies: - bufferutil + - storybook - supports-color - utf-8-validate - '@storybook/csf-plugin@8.4.6(storybook@8.4.6(prettier@3.2.5))': + '@storybook/csf-plugin@8.6.4(storybook@8.6.4(prettier@3.2.5))': dependencies: - storybook: 8.4.6(prettier@3.2.5) + storybook: 8.6.4(prettier@3.2.5) unplugin: 1.10.0 '@storybook/csf@0.1.11': @@ -12826,77 +12845,77 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@storybook/instrumenter@8.4.6(storybook@8.4.6(prettier@3.2.5))': + '@storybook/instrumenter@8.6.4(storybook@8.6.4(prettier@3.2.5))': dependencies: '@storybook/global': 5.0.0 '@vitest/utils': 2.1.4 - storybook: 8.4.6(prettier@3.2.5) + storybook: 8.6.4(prettier@3.2.5) - '@storybook/manager-api@8.4.6(storybook@8.4.6(prettier@3.2.5))': + '@storybook/manager-api@8.6.4(storybook@8.6.4(prettier@3.2.5))': dependencies: - storybook: 8.4.6(prettier@3.2.5) + storybook: 8.6.4(prettier@3.2.5) - '@storybook/preview-api@8.4.6(storybook@8.4.6(prettier@3.2.5))': + '@storybook/preview-api@8.6.4(storybook@8.6.4(prettier@3.2.5))': dependencies: - storybook: 8.4.6(prettier@3.2.5) + storybook: 8.6.4(prettier@3.2.5) - '@storybook/react-dom-shim@8.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.4.6(prettier@3.2.5))': + '@storybook/react-dom-shim@8.6.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.4(prettier@3.2.5))': dependencies: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - storybook: 8.4.6(prettier@3.2.5) + storybook: 8.6.4(prettier@3.2.5) - '@storybook/react-vite@8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@3.2.5)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.25.0)(storybook@8.4.6(prettier@3.2.5))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))': + '@storybook/react-vite@8.6.4(@storybook/test@8.6.4(storybook@8.6.4(prettier@3.2.5)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.25.0)(storybook@8.6.4(prettier@3.2.5))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.4.2(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.5.0(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)) '@rollup/pluginutils': 5.1.0(rollup@4.25.0) - '@storybook/builder-vite': 8.4.6(storybook@8.4.6(prettier@3.2.5))(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)) - '@storybook/react': 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@3.2.5)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.4.6(prettier@3.2.5))(typescript@5.6.3) + '@storybook/builder-vite': 8.6.4(storybook@8.6.4(prettier@3.2.5))(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)) + '@storybook/react': 8.6.4(@storybook/test@8.6.4(storybook@8.6.4(prettier@3.2.5)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.4(prettier@3.2.5))(typescript@5.6.3) find-up: 5.0.0 magic-string: 0.30.8 react: 18.2.0 react-docgen: 7.0.3 react-dom: 18.2.0(react@18.2.0) resolve: 1.22.8 - storybook: 8.4.6(prettier@3.2.5) + storybook: 8.6.4(prettier@3.2.5) tsconfig-paths: 4.2.0 vite: 5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) + optionalDependencies: + '@storybook/test': 8.6.4(storybook@8.6.4(prettier@3.2.5)) transitivePeerDependencies: - - '@storybook/test' - rollup - supports-color - typescript - '@storybook/react@8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@3.2.5)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.4.6(prettier@3.2.5))(typescript@5.6.3)': + '@storybook/react@8.6.4(@storybook/test@8.6.4(storybook@8.6.4(prettier@3.2.5)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.4(prettier@3.2.5))(typescript@5.6.3)': dependencies: - '@storybook/components': 8.4.6(storybook@8.4.6(prettier@3.2.5)) + '@storybook/components': 8.6.4(storybook@8.6.4(prettier@3.2.5)) '@storybook/global': 5.0.0 - '@storybook/manager-api': 8.4.6(storybook@8.4.6(prettier@3.2.5)) - '@storybook/preview-api': 8.4.6(storybook@8.4.6(prettier@3.2.5)) - '@storybook/react-dom-shim': 8.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.4.6(prettier@3.2.5)) - '@storybook/theming': 8.4.6(storybook@8.4.6(prettier@3.2.5)) + '@storybook/manager-api': 8.6.4(storybook@8.6.4(prettier@3.2.5)) + '@storybook/preview-api': 8.6.4(storybook@8.6.4(prettier@3.2.5)) + '@storybook/react-dom-shim': 8.6.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.4(prettier@3.2.5)) + '@storybook/theming': 8.6.4(storybook@8.6.4(prettier@3.2.5)) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - storybook: 8.4.6(prettier@3.2.5) + storybook: 8.6.4(prettier@3.2.5) optionalDependencies: - '@storybook/test': 8.4.6(storybook@8.4.6(prettier@3.2.5)) + '@storybook/test': 8.6.4(storybook@8.6.4(prettier@3.2.5)) typescript: 5.6.3 - '@storybook/test@8.4.6(storybook@8.4.6(prettier@3.2.5))': + '@storybook/test@8.6.4(storybook@8.6.4(prettier@3.2.5))': dependencies: - '@storybook/csf': 0.1.11 '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.4.6(storybook@8.4.6(prettier@3.2.5)) + '@storybook/instrumenter': 8.6.4(storybook@8.6.4(prettier@3.2.5)) '@testing-library/dom': 10.4.0 '@testing-library/jest-dom': 6.5.0 '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) '@vitest/expect': 2.0.5 '@vitest/spy': 2.0.5 - storybook: 8.4.6(prettier@3.2.5) + storybook: 8.6.4(prettier@3.2.5) - '@storybook/theming@8.4.6(storybook@8.4.6(prettier@3.2.5))': + '@storybook/theming@8.6.4(storybook@8.6.4(prettier@3.2.5))': dependencies: - storybook: 8.4.6(prettier@3.2.5) + storybook: 8.6.4(prettier@3.2.5) '@surma/rollup-plugin-off-main-thread@2.2.3': dependencies: @@ -13179,6 +13198,8 @@ snapshots: '@types/normalize-package-data@2.4.4': {} + '@types/platform@1.3.6': {} + '@types/prop-types@15.7.11': {} '@types/react-dom@18.2.22': @@ -14634,7 +14655,7 @@ snapshots: esbuild-register@3.5.0(esbuild@0.20.1): dependencies: - debug: 4.3.7 + debug: 4.4.0 esbuild: 0.20.1 transitivePeerDependencies: - supports-color @@ -17427,18 +17448,6 @@ snapshots: '@types/react': 18.2.66 optional: true - react-router-dom@6.22.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0): - dependencies: - '@remix-run/router': 1.15.3 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-router: 6.22.3(react@18.2.0) - - react-router@6.22.3(react@18.2.0): - dependencies: - '@remix-run/router': 1.15.3 - react: 18.2.0 - react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@types/cookie': 0.6.0 @@ -17984,25 +17993,26 @@ snapshots: std-env@3.7.0: {} - storybook-addon-remix-react-router@3.0.2(@storybook/blocks@8.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.4.6(prettier@3.2.5)))(@storybook/channels@8.0.8)(@storybook/components@8.4.6(storybook@8.4.6(prettier@3.2.5)))(@storybook/core-events@8.0.8)(@storybook/manager-api@8.4.6(storybook@8.4.6(prettier@3.2.5)))(@storybook/preview-api@8.4.6(storybook@8.4.6(prettier@3.2.5)))(@storybook/theming@8.4.6(storybook@8.4.6(prettier@3.2.5)))(react-dom@18.2.0(react@18.2.0))(react-router-dom@6.22.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react@18.2.0): + storybook-addon-remix-react-router@4.0.1(@storybook/blocks@8.6.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.4(prettier@3.2.5)))(@storybook/channels@8.0.8)(@storybook/components@8.6.4(storybook@8.6.4(prettier@3.2.5)))(@storybook/core-events@8.0.8)(@storybook/manager-api@8.6.4(storybook@8.6.4(prettier@3.2.5)))(@storybook/preview-api@8.6.4(storybook@8.6.4(prettier@3.2.5)))(@storybook/theming@8.6.4(storybook@8.6.4(prettier@3.2.5)))(react-dom@18.2.0(react@18.2.0))(react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react@18.2.0): dependencies: - '@storybook/blocks': 8.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.4.6(prettier@3.2.5)) + '@mjackson/form-data-parser': 0.4.0 + '@storybook/blocks': 8.6.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.4(prettier@3.2.5)) '@storybook/channels': 8.0.8 - '@storybook/components': 8.4.6(storybook@8.4.6(prettier@3.2.5)) + '@storybook/components': 8.6.4(storybook@8.6.4(prettier@3.2.5)) '@storybook/core-events': 8.0.8 - '@storybook/manager-api': 8.4.6(storybook@8.4.6(prettier@3.2.5)) - '@storybook/preview-api': 8.4.6(storybook@8.4.6(prettier@3.2.5)) - '@storybook/theming': 8.4.6(storybook@8.4.6(prettier@3.2.5)) + '@storybook/manager-api': 8.6.4(storybook@8.6.4(prettier@3.2.5)) + '@storybook/preview-api': 8.6.4(storybook@8.6.4(prettier@3.2.5)) + '@storybook/theming': 8.6.4(storybook@8.6.4(prettier@3.2.5)) compare-versions: 6.1.0 react-inspector: 6.0.2(react@18.2.0) - react-router-dom: 6.22.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react-router: 7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) optionalDependencies: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - storybook@8.4.6(prettier@3.2.5): + storybook@8.6.4(prettier@3.2.5): dependencies: - '@storybook/core': 8.4.6(prettier@3.2.5) + '@storybook/core': 8.6.4(prettier@3.2.5)(storybook@8.6.4(prettier@3.2.5)) optionalDependencies: prettier: 3.2.5 transitivePeerDependencies: diff --git a/vite.config.ts b/vite.config.ts index 74778085..2623bd5d 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,4 +1,3 @@ -import { NodeGlobalsPolyfillPlugin as nodeGlobalsPolyfillPlugin } from "@esbuild-plugins/node-globals-polyfill" import { reactRouter } from "@react-router/dev/vite" import { type Options as AutoImportOptions } from "unplugin-auto-import/types" import autoImport from "unplugin-auto-import/vite" @@ -69,8 +68,6 @@ export default defineConfig({ esbuildOptions: { // Node.js global to browser globalThis define: { global: "globalThis" }, - // Enable esbuild polyfill plugins - plugins: [nodeGlobalsPolyfillPlugin({ buffer: true })], }, }, build: { target: "esnext" }, From d5799aa38c8470fb709e7f3b309d02fb0b87c6ba Mon Sep 17 00:00:00 2001 From: Nathan Gerhart Date: Thu, 13 Mar 2025 14:20:22 -0600 Subject: [PATCH 14/19] Storybook: serve built storybook This is faster and nicer than the dev server if you're just poking around --- package.json | 2 + pnpm-lock.yaml | 150 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 152 insertions(+) diff --git a/package.json b/package.json index b1d09ad6..0d4c6704 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "preinstall": "npx only-allow pnpm", "preview": "vite preview --port 3000", "start": "npx sirv-cli build/client/ --single --port 3000", + "start:storybook": "http-server storybook-static/ --port 6006 -os", "storybook": "storybook dev -p 6006", "test": "vitest", "test:run": "vitest --run", @@ -121,6 +122,7 @@ "eslint-plugin-react-hooks": "^4.6.2", "eslint-plugin-storybook": "^0.11.1", "eslint-plugin-unused-imports": "^3.2.0", + "http-server": "^14.1.1", "mockdate": "^3.0.5", "npm-run-all": "^4.1.5", "platform": "^1.3.6", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8b71d5e9..47f38e25 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -272,6 +272,9 @@ importers: eslint-plugin-unused-imports: specifier: ^3.2.0 version: 3.2.0(@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0) + http-server: + specifier: ^14.1.1 + version: 14.1.1(debug@4.3.4) mockdate: specifier: ^3.0.5 version: 3.0.5 @@ -4100,6 +4103,10 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + basic-auth@2.0.1: + resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} + engines: {node: '>= 0.8'} + better-opn@3.0.2: resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==} engines: {node: '>=12.0.0'} @@ -4447,6 +4454,10 @@ packages: core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + corser@2.0.1: + resolution: {integrity: sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==} + engines: {node: '>= 0.4.0'} + cosmiconfig@8.3.6: resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} @@ -5137,6 +5148,9 @@ packages: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} @@ -5251,6 +5265,15 @@ packages: flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} @@ -5493,6 +5516,10 @@ packages: hast-util-whitespace@2.0.1: resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} @@ -5500,6 +5527,10 @@ packages: resolution: {integrity: sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + html-encoding-sniffer@3.0.0: + resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} + engines: {node: '>=12'} + html-parse-stringify@3.0.1: resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==} @@ -5507,6 +5538,15 @@ packages: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} + http-proxy@1.18.1: + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} + engines: {node: '>=8.0.0'} + + http-server@14.1.1: + resolution: {integrity: sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==} + engines: {node: '>=12'} + hasBin: true + human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} @@ -5525,6 +5565,10 @@ packages: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + icss-utils@5.1.0: resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} engines: {node: ^10 || ^12 || >= 14} @@ -6438,6 +6482,10 @@ packages: mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + mkdirp@1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} engines: {node: '>=10'} @@ -6673,6 +6721,10 @@ packages: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} + opener@1.5.2: + resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} + hasBin: true + optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} @@ -6903,6 +6955,10 @@ packages: resolution: {integrity: sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==} engines: {node: '>=10'} + portfinder@1.0.34: + resolution: {integrity: sha512-aTyliYB9lpGRx0iUzgbLpCz3xiCEBsPOiukSp1X8fOnHalHCKNxxpv2cSc00Cc49mpWUtlyRVFHRSaRJF8ew3g==} + engines: {node: '>= 6.0'} + possible-typed-array-names@1.0.0: resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} engines: {node: '>= 0.4'} @@ -7501,6 +7557,9 @@ packages: require-like@0.1.2: resolution: {integrity: sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==} + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -7601,6 +7660,9 @@ packages: scule@1.3.0: resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} + secure-compare@3.0.1: + resolution: {integrity: sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==} + seed-random@2.2.0: resolution: {integrity: sha512-34EQV6AAHQGhoc0tn/96a9Fsi6v2xdqe/dMUwljGRaFOzR3EgRmECvD0O8vi8X+/uQ50LGHfkNu/Eue5TPKZkQ==} @@ -8304,6 +8366,10 @@ packages: unimport@3.7.1: resolution: {integrity: sha512-V9HpXYfsZye5bPPYUgs0Otn3ODS1mDUciaBlXljI4C2fTwfFpvFZRywmlOu943puN9sncxROMZhsZCjNXEpzEQ==} + union@0.5.0: + resolution: {integrity: sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==} + engines: {node: '>= 0.8.0'} + unique-filename@3.0.0: resolution: {integrity: sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -8403,6 +8469,9 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + url-join@4.0.1: + resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==} + url-join@5.0.0: resolution: {integrity: sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -8685,6 +8754,10 @@ packages: webpack-cli: optional: true + whatwg-encoding@2.0.0: + resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} + engines: {node: '>=12'} + whatwg-url@7.1.0: resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} @@ -13868,6 +13941,10 @@ snapshots: base64-js@1.5.1: {} + basic-auth@2.0.1: + dependencies: + safe-buffer: 5.1.2 + better-opn@3.0.2: dependencies: open: 8.4.2 @@ -14242,6 +14319,8 @@ snapshots: core-util-is@1.0.3: {} + corser@2.0.1: {} + cosmiconfig@8.3.6(typescript@5.6.3): dependencies: import-fresh: 3.3.0 @@ -15085,6 +15164,8 @@ snapshots: event-target-shim@5.0.1: {} + eventemitter3@4.0.7: {} + eventemitter3@5.0.1: {} events@3.3.0: {} @@ -15249,6 +15330,10 @@ snapshots: flatted@3.3.1: {} + follow-redirects@1.15.9(debug@4.3.4): + optionalDependencies: + debug: 4.3.4 + for-each@0.3.3: dependencies: is-callable: 1.2.7 @@ -15515,12 +15600,18 @@ snapshots: hast-util-whitespace@2.0.1: {} + he@1.2.0: {} + hosted-git-info@2.8.9: {} hosted-git-info@6.1.1: dependencies: lru-cache: 7.18.3 + html-encoding-sniffer@3.0.0: + dependencies: + whatwg-encoding: 2.0.0 + html-parse-stringify@3.0.1: dependencies: void-elements: 3.1.0 @@ -15534,6 +15625,33 @@ snapshots: statuses: 2.0.1 toidentifier: 1.0.1 + http-proxy@1.18.1(debug@4.3.4): + dependencies: + eventemitter3: 4.0.7 + follow-redirects: 1.15.9(debug@4.3.4) + requires-port: 1.0.0 + transitivePeerDependencies: + - debug + + http-server@14.1.1(debug@4.3.4): + dependencies: + basic-auth: 2.0.1 + chalk: 4.1.2 + corser: 2.0.1 + he: 1.2.0 + html-encoding-sniffer: 3.0.0 + http-proxy: 1.18.1(debug@4.3.4) + mime: 1.6.0 + minimist: 1.2.8 + opener: 1.5.2 + portfinder: 1.0.34 + secure-compare: 3.0.1 + union: 0.5.0 + url-join: 4.0.1 + transitivePeerDependencies: + - debug + - supports-color + human-signals@2.1.0: {} human-signals@5.0.0: {} @@ -15552,6 +15670,10 @@ snapshots: dependencies: safer-buffer: 2.1.2 + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + icss-utils@5.1.0(postcss@8.4.35): dependencies: postcss: 8.4.35 @@ -16536,6 +16658,10 @@ snapshots: mkdirp-classic@0.5.3: {} + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + mkdirp@1.0.4: {} mlly@1.6.1: @@ -16785,6 +16911,8 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 + opener@1.5.2: {} + optionator@0.9.3: dependencies: '@aashutoshrathi/word-wrap': 1.2.6 @@ -16992,6 +17120,14 @@ snapshots: dependencies: '@babel/runtime': 7.26.0 + portfinder@1.0.34: + dependencies: + async: 3.2.6 + debug: 4.4.0 + mkdirp: 0.5.6 + transitivePeerDependencies: + - supports-color + possible-typed-array-names@1.0.0: {} postcss-discard-duplicates@5.1.0(postcss@8.5.3): @@ -17643,6 +17779,8 @@ snapshots: require-like@0.1.2: {} + requires-port@1.0.0: {} + resolve-from@4.0.0: {} resolve-from@5.0.0: {} @@ -17783,6 +17921,8 @@ snapshots: scule@1.3.0: {} + secure-compare@3.0.1: {} + seed-random@2.2.0: {} seedrandom@3.0.5: @@ -18605,6 +18745,10 @@ snapshots: transitivePeerDependencies: - rollup + union@0.5.0: + dependencies: + qs: 6.11.0 + unique-filename@3.0.0: dependencies: unique-slug: 4.0.0 @@ -18707,6 +18851,8 @@ snapshots: dependencies: punycode: 2.3.1 + url-join@4.0.1: {} + url-join@5.0.0: {} url-or-path@2.3.0: {} @@ -19011,6 +19157,10 @@ snapshots: - esbuild - uglify-js + whatwg-encoding@2.0.0: + dependencies: + iconv-lite: 0.6.3 + whatwg-url@7.1.0: dependencies: lodash.sortby: 4.7.0 From 6d795aa1e64bbb7c418857ace460f15dc9595d28 Mon Sep 17 00:00:00 2001 From: Nathan Gerhart Date: Thu, 13 Mar 2025 14:55:47 -0600 Subject: [PATCH 15/19] Routes: Make the app work update the hooks and routes so that they work with the new DXOS shape of things --- app/hooks/useDatabase.tsx | 29 +++- app/hooks/useLocalState.tsx | 9 +- app/hooks/useRedirect.tsx | 10 +- app/hooks/useSignOut.tsx | 11 +- app/hooks/useTeam.tsx | 38 +++-- app/routes/_private+/_private.tsx | 52 ++++--- .../_private+/devtools+/danger+/_danger.tsx | 49 ++++--- .../danger+/ui/TimeEntryImporter.tsx | 4 +- .../devtools+/inspector+/_inspector.tsx | 25 ++-- app/routes/_private+/dones+/$date.tsx | 13 +- app/routes/_private+/hours+/$year.tsx | 7 +- app/routes/_private+/myweek+/$date.tsx | 29 +++- .../_private+/settings+/devices+/_devices.tsx | 17 ++- .../_private+/settings+/devices+/invite.tsx | 22 --- .../_private+/team+/members+/_members.tsx | 12 +- .../_private+/team+/members+/invite.tsx | 34 ----- .../_private+/team+/members+/remove.tsx | 22 ++- .../_private+/team+/members+/revoke.tsx | 32 ----- app/routes/auth+/begin.tsx | 22 ++- app/routes/auth+/setup+/_.create.tsx | 85 +++++------ app/routes/auth+/setup+/_.join.($code).tsx | 132 ++++++------------ app/routes/auth+/setup+/_.link.($code).tsx | 52 ++++--- app/routes/auth+/setup+/_setup.tsx | 20 ++- app/routes/auth+/signout.tsx | 2 +- app/sw.ts | 26 ---- app/types/types.ts | 25 +--- app/ui/TimeEntryInput.tsx | 4 +- package.json | 2 +- 28 files changed, 355 insertions(+), 430 deletions(-) delete mode 100644 app/routes/_private+/settings+/devices+/invite.tsx delete mode 100644 app/routes/_private+/team+/members+/invite.tsx delete mode 100644 app/routes/_private+/team+/members+/revoke.tsx diff --git a/app/hooks/useDatabase.tsx b/app/hooks/useDatabase.tsx index 7f011eae..f348500c 100644 --- a/app/hooks/useDatabase.tsx +++ b/app/hooks/useDatabase.tsx @@ -1,8 +1,25 @@ -import { DatabaseContext } from "context/Database/DatabaseContextProvider" -import { useContext } from "react" +import { Filter, useQuery, useSpace } from "@dxos/react-client/echo" +import { DoneEntry } from "schema/DoneEntry" +import { TimeEntry } from "schema/TimeEntry" +import { Project } from "schema/Project" +import { Client } from "schema/Client" +import { Contact } from "schema/Contact" +import { useLocalState } from "./useLocalState" -export function useDatabase() { - const db = useContext(DatabaseContext) - if (!db) throw new Error("useDb must be used within an DatabaseContextProvider") - return db +export const useDatabase = () => { + const { spaceKey } = useLocalState() + const space = useSpace(spaceKey) + const contacts = useQuery(space, Filter.schema(Contact)) + const clients = useQuery(space, Filter.schema(Client)) + const doneEntries = useQuery(space, Filter.schema(DoneEntry)) + const projects = useQuery(space, Filter.schema(Project)) + const timeEntries = useQuery(space, Filter.schema(TimeEntry)) + + return { + clients, + contacts, + doneEntries, + projects, + timeEntries, + } } diff --git a/app/hooks/useLocalState.tsx b/app/hooks/useLocalState.tsx index c97b7b3d..c82482f3 100644 --- a/app/hooks/useLocalState.tsx +++ b/app/hooks/useLocalState.tsx @@ -5,14 +5,11 @@ export function useLocalState() { const initialState: LocalState = {} const [state, setState] = useLocalStorage("xdev-localstate", initialState) - const { userName, user, device, shareId, rootDocumentId } = state + const { spaceKey, invitationCode } = state return { - userName, - user, - device, - shareId, - rootDocumentId, + spaceKey, + invitationCode, update: (s: Partial) => setState({ ...state, ...s }), reset: () => setState(initialState), diff --git a/app/hooks/useRedirect.tsx b/app/hooks/useRedirect.tsx index 3ee5f2ac..88e82758 100644 --- a/app/hooks/useRedirect.tsx +++ b/app/hooks/useRedirect.tsx @@ -2,25 +2,31 @@ import { useLocation, useNavigate } from "react-router" import { useEffect } from "react" +import type { LocalState } from "types/types" +import { useLocalState } from "./useLocalState" -export function useRedirect({ from, to, condition = true }: Params) { +export function useRedirect({ from, to, condition = true, localState = undefined }: Params) { const { pathname, state } = useLocation() const navigate = useNavigate() + const { update } = useLocalState() useEffect(() => { if (!condition) return if (typeof from === "string" && pathname === from) { console.log(`redirecting from ${from} to ${to}`) + if (localState) update(localState) void navigate(to, { state }) } else if (from instanceof RegExp && from.test(pathname)) { const newTo = pathname.replace(from, to) console.log(`redirecting from ${from} to ${newTo}`) + if (localState) update(localState) void navigate(newTo, { state }) } - }, [pathname]) + }, [pathname, state, from, to, condition, navigate]) } type Params = { from: string | RegExp to: string condition?: boolean + localState?: Partial } diff --git a/app/hooks/useSignOut.tsx b/app/hooks/useSignOut.tsx index 63735ced..7188d25e 100644 --- a/app/hooks/useSignOut.tsx +++ b/app/hooks/useSignOut.tsx @@ -1,14 +1,13 @@ import { useLocalState } from "hooks/useLocalState" +import { type Client, useClient } from "@dxos/react-client" export const useSignOut = () => { const localState = useLocalState() + const client = useClient() as Client - return () => { - // clear user, device, team from local storage + return async () => { + // clear user, device, team from local storage / halo localState.reset() - - // delete automerge-repo database - indexedDB.deleteDatabase("localforage") - indexedDB.deleteDatabase("automerge") + await client.reset() } } diff --git a/app/hooks/useTeam.tsx b/app/hooks/useTeam.tsx index a325518b..93d5531f 100644 --- a/app/hooks/useTeam.tsx +++ b/app/hooks/useTeam.tsx @@ -1,33 +1,29 @@ -import { type Member } from "@localfirst/auth" -import { useRootDocument } from "hooks/useRootDocument" -import { useState } from "react" -import { type ContactId } from "schema/Contact" -import { useAuth } from "./useAuth" +import { DeviceKind, useDevices, useIdentity } from "@dxos/react-client/halo" +import { HaloSpaceMember, Filter, useMembers, useQuery, useSpace } from "@dxos/react-client/echo" +import { Contact, ExtendedContact } from "schema/Contact" +import { useLocalState } from "./useLocalState" /** * Takes our auth state and builds a bunch of useful derived state about the user and team. */ export const useTeam = () => { - const authState = useAuth() - const { user, team } = authState - - // Get the list of team members, and our list of linked devices, and keep them updated - const [_, setMembers] = useState(team.members()) - const [devices, setDevices] = useState(team.members(user.userId).devices) - team.on("updated", () => { - setMembers(team.members()) - setDevices(team.members(user.userId).devices) + const identity = useIdentity() + const { spaceKey } = useLocalState() + const space = useSpace(spaceKey) + const members = useMembers(space?.key) + const contacts = useQuery(space, Filter.schema(Contact)).map(c => { + const member = members.find(m => m.identity.identityKey.toString() === c.identityId) + const isAdmin = member?.role === HaloSpaceMember.Role.OWNER + const isSelf = member?.identity.identityKey.toString() === identity?.identityKey.toString() + return new ExtendedContact({ contact: c, isAdmin, isSelf, identity: member?.identity }) }) - - const [rootDoc] = useRootDocument() - const contacts = rootDoc ? rootDoc.extendedContacts({ user, team }) : {} - - // Identify our own extended contact - const self = contacts[user.userId as ContactId] + const devices = useDevices() + const device = devices.find(d => d.kind === DeviceKind.CURRENT) + const self = contacts.find(d => d.isSelf)! return { - ...authState, self, + device, devices, contacts, } diff --git a/app/routes/_private+/_private.tsx b/app/routes/_private+/_private.tsx index b2cd8a9b..f614004d 100644 --- a/app/routes/_private+/_private.tsx +++ b/app/routes/_private+/_private.tsx @@ -1,25 +1,43 @@ -import { Outlet } from "react-router" -import { AuthContextProvider } from "context/Auth/AuthContextProvider" -import { DatabaseContextProvider } from "context/Database/DatabaseContextProvider" +import { Outlet, useNavigate } from "react-router" import { useTeam } from "hooks/useTeam" import { AppLayout } from "ui/layouts/AppLayout" import { Loading } from "ui/Loading" +import { useLocalState } from "hooks/useLocalState" +import { HaloSpaceMember, useSpace } from "@dxos/react-client/echo" +import { useIdentity } from "@dxos/react-client/halo" +import { useSignOut } from "hooks/useSignOut" +import { useEffect } from "react" export default function PrivateLayout() { - return ( - - - - - - - - ) -} - -function Layout({ children }: { children: React.ReactNode }) { + const { spaceKey } = useLocalState() + const space = useSpace(spaceKey) + const identity = useIdentity() const { self } = useTeam() - if (self === undefined) return + const navigate = useNavigate() + const signOut = useSignOut() + + useEffect(() => { + if (!identity) void navigate("/auth/begin") + }, [identity, navigate]) + + useEffect(() => { + const members = space?.members.get() + if (!self && identity && members) { + const member = members.find( + d => d.identity.identityKey.toString() === identity.identityKey.toString(), + ) + if (member?.role === HaloSpaceMember.Role.REMOVED) { + ;(async () => { + await signOut() + void navigate("/") + })() + } + } + }, [self, space, identity]) - return {children} + return self ? + + + + : } diff --git a/app/routes/_private+/devtools+/danger+/_danger.tsx b/app/routes/_private+/devtools+/danger+/_danger.tsx index fc4e014e..d6d18341 100644 --- a/app/routes/_private+/devtools+/danger+/_danger.tsx +++ b/app/routes/_private+/devtools+/danger+/_danger.tsx @@ -1,13 +1,28 @@ import { Alert, AlertDescription } from "@ui/alert" +import { create, useSpace, type ReactiveEchoObject } from "@dxos/react-client/echo" +import type { BaseObject } from "@dxos/echo-schema" import { useDatabase } from "hooks/useDatabase" +import { useLocalState } from "hooks/useLocalState" import { DoneEntry } from "schema/DoneEntry" +import { TimeEntry } from "schema/TimeEntry" import { DoneEntryGenerator } from "./ui/DoneEntryGenerator" import { DoneEntryImporter } from "./ui/DoneEntryImporter" import { TimeEntryGenerator } from "./ui/TimeEntryGenerator" import { TimeEntryImporter } from "./ui/TimeEntryImporter" export default function DangerPage() { - const { timeEntries, doneEntries, clients, projects, contacts } = useDatabase() + const { spaceKey } = useLocalState() + const space = useSpace(spaceKey) + const { clients, contacts, doneEntries, projects, timeEntries } = useDatabase() + + const addDone = (done: Omit) => space?.db.add(create(DoneEntry, done)) + const addTimeEntries = (timeEntries: Array>) => { + for (const timeEntry of timeEntries) space?.db.add(create(TimeEntry, timeEntry)) + } + + function destroyAll, U extends BaseObject>(list: T[]) { + for (const item of list) space?.db.remove(item) + } return (
    @@ -26,9 +41,9 @@ export default function DangerPage() { content: (
    doneEntries.add(done)} - destroyAll={() => doneEntries.destroyAll()} + contacts={contacts} + add={addDone} + destroyAll={() => destroyAll(doneEntries)} />
    ), @@ -37,9 +52,9 @@ export default function DangerPage() { heading: "Import dones data", content: ( doneEntries.add(new DoneEntry(done))} - destroyAll={() => doneEntries.destroyAll()} + contacts={contacts} + add={addDone} + destroyAll={() => destroyAll(doneEntries)} /> ), }, @@ -48,11 +63,11 @@ export default function DangerPage() { content: (
    timeEntries.add(t)} - destroyAll={() => timeEntries.destroyAll()} + contacts={contacts} + clients={clients} + projects={projects} + add={addTimeEntries} + destroyAll={() => destroyAll(timeEntries)} />
    ), @@ -63,11 +78,11 @@ export default function DangerPage() {
    timeEntries.destroyAll()} - add={timeEntry => timeEntries.add(timeEntry)} - contacts={contacts.all()} - clients={clients.all()} - projects={projects.all()} + destroyAll={() => destroyAll(timeEntries)} + add={addTimeEntries} + contacts={contacts} + clients={clients} + projects={projects} />
    ), diff --git a/app/routes/_private+/devtools+/danger+/ui/TimeEntryImporter.tsx b/app/routes/_private+/devtools+/danger+/ui/TimeEntryImporter.tsx index 94e1dfb9..bffdf178 100644 --- a/app/routes/_private+/devtools+/danger+/ui/TimeEntryImporter.tsx +++ b/app/routes/_private+/devtools+/danger+/ui/TimeEntryImporter.tsx @@ -44,7 +44,7 @@ export const TimeEntryImporter = ({ const onImport = () => { destroyAll() - for (const d of timeEntries) add(d) + add(timeEntries) setSuccessMessage(`Imported ${timeEntries.length} entries`) } @@ -112,5 +112,5 @@ type Props = { projects: Project[] clients: Client[] destroyAll(): void - add(t: TimeEntryInput): void + add(ts: TimeEntryInput[]): void } diff --git a/app/routes/_private+/devtools+/inspector+/_inspector.tsx b/app/routes/_private+/devtools+/inspector+/_inspector.tsx index b5a2db05..b41dcea7 100644 --- a/app/routes/_private+/devtools+/inspector+/_inspector.tsx +++ b/app/routes/_private+/devtools+/inspector+/_inspector.tsx @@ -1,11 +1,11 @@ -import { useRootDocument } from "hooks/useRootDocument" import { Tabs, TabsList, TabsContent, TabsTrigger } from "@ui/tabs" import { JsonView, defaultStyles } from "react-json-view-lite" import "react-json-view-lite/dist/index.css" +import { useSpaces } from "@dxos/react-client/echo" export default function InspectorPage() { - const [rootDoc] = useRootDocument({ decode: false }) - if (!rootDoc) return null + const spaces = useSpaces() + if (!spaces) return null const styles = { ...defaultStyles, @@ -15,29 +15,26 @@ export default function InspectorPage() { noQuotesForStringValues: true, } - const tabItems = Object.keys(rootDoc) as Array - return (
    - +
    - {tabItems.map(tabItem => { - const count = Object.keys(rootDoc[tabItem]).length + {spaces.map(space => { return ( - - {tabItem} - ({count}) + + {space.id} + {/* ({count}) */} ) })}
    - {tabItems.map(tabItem => ( - + {spaces.map(space => ( + level < 2} clickToExpandNode={true} diff --git a/app/routes/_private+/dones+/$date.tsx b/app/routes/_private+/dones+/$date.tsx index d65f8d7b..40c488c4 100644 --- a/app/routes/_private+/dones+/$date.tsx +++ b/app/routes/_private+/dones+/$date.tsx @@ -7,10 +7,13 @@ import { WeekNav } from "ui/WeekNav" export default function Dones$DatePage() { const { doneEntries } = useDatabase() - const { start } = useSelectedWeek() + const { start, end } = useSelectedWeek() const { self, contacts } = useTeam() - const dones = doneEntries.findBy("week", start) + // get dones for a week + const sStart = start.toString() + const sEnd = end.toString() + const dones = doneEntries.filter(d => d.date >= sStart && d.date <= sEnd) return ( doneEntries.update({ id, likes })} + updateLikes={(done, likes) => { + done.likes = [...likes] + }} />
    diff --git a/app/routes/_private+/hours+/$year.tsx b/app/routes/_private+/hours+/$year.tsx index 3d4032f9..8402a8e4 100644 --- a/app/routes/_private+/hours+/$year.tsx +++ b/app/routes/_private+/hours+/$year.tsx @@ -1,8 +1,8 @@ +import { LocalDate } from "@js-joda/core" import { useDatabase } from "hooks/useDatabase" import { useRedirect } from "hooks/useRedirect" import { useSelectedYear } from "hooks/useSelectedYear" import { useTeam } from "hooks/useTeam" -import { Array as Arr } from "lib/Effect" import { getCurrentYear } from "lib/getCurrentYear" import { HoursReport } from "ui/HoursReport" import { PageLayout } from "ui/layouts/PageLayout" @@ -16,7 +16,10 @@ export default function Hours$YearPage() { useRedirect({ from: "/hours", to: `/hours/${currentYear}`, condition: year > currentYear }) - const years = Arr.dedupe(timeEntries.all().map(entry => entry.date.year())) + const years = + timeEntries.length > 0 ? + new Set(timeEntries.map(({ date }) => LocalDate.parse(date).year())) + : [Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY] const minYear = Math.min(...years) const maxYear = Math.max(...years) diff --git a/app/routes/_private+/myweek+/$date.tsx b/app/routes/_private+/myweek+/$date.tsx index 1c2bff43..efc46ae8 100644 --- a/app/routes/_private+/myweek+/$date.tsx +++ b/app/routes/_private+/myweek+/$date.tsx @@ -1,5 +1,7 @@ +import { useSpace } from "@dxos/react-client/echo" import { Checkbox } from "@ui/checkbox" import { useDatabase } from "hooks/useDatabase" +import { useLocalState } from "hooks/useLocalState" import { useSelectedWeek } from "hooks/useSelectedWeek" import { useTeam } from "hooks/useTeam" import { useState } from "react" @@ -8,10 +10,16 @@ import { MyWeek } from "ui/MyWeek" import { WeekNav } from "ui/WeekNav" export default function MyWeek$DatePage() { - const { doneEntries, timeEntries, projects, clients } = useDatabase() - const { start } = useSelectedWeek() + const { doneEntries, timeEntries, projects, clients, contacts } = useDatabase() + const { start, end } = useSelectedWeek() const { self } = useTeam() const [showWeekends, setShowWeekends] = useState(false) + const { spaceKey } = useLocalState() + const space = useSpace(spaceKey) + + const sStart = start.toString() + const sEnd = end.toString() + const times = timeEntries.filter(d => d.date >= sStart && d.date <= sEnd) return (
    - + space?.db.add(d), + onRemoveDone: d => space?.db.remove(d), + onAddTime: d => space?.db.add(d), + onRemoveTime: d => space?.db.remove(d), + }} + />
    ) diff --git a/app/routes/_private+/settings+/devices+/_devices.tsx b/app/routes/_private+/settings+/devices+/_devices.tsx index 6fd87d0a..0ae0299c 100644 --- a/app/routes/_private+/settings+/devices+/_devices.tsx +++ b/app/routes/_private+/settings+/devices+/_devices.tsx @@ -1,14 +1,29 @@ import { useTeam } from "hooks/useTeam" import { Outlet } from "react-router" +import { type PublicKey, useShell } from "@dxos/react-client" +import { Device, DeviceKind } from "@dxos/react-client/halo" import { Devices } from "ui/Devices" export default function DevicesPage() { const { device, devices } = useTeam() + const shell = useShell() return ( <> - + { + await shell.shareIdentity() + }} + /> {/* Outlet for dialogs */} ) } + +const emptyDevice = { + deviceKey: "" as unknown as PublicKey, + kind: DeviceKind.CURRENT, + presence: Device.PresenceState.ONLINE, +} diff --git a/app/routes/_private+/settings+/devices+/invite.tsx b/app/routes/_private+/settings+/devices+/invite.tsx deleted file mode 100644 index b1ba4dfe..00000000 --- a/app/routes/_private+/settings+/devices+/invite.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { useNavigate } from "react-router" -import { useDeviceInvitationGenerator } from "hooks/useDeviceInvitationGenerator" -import { useTeam } from "hooks/useTeam" -import { InviteDeviceDialog } from "ui/InviteDeviceDialog" - -export default function DevicesInvitePage() { - const { self } = useTeam() - const navigate = useNavigate() - - const invitationCode = useDeviceInvitationGenerator() - - // Only admins can invite new members - if (!self?.isAdmin) return null - - return ( - navigate("..")} - invitationCode={invitationCode} - /> - ) -} diff --git a/app/routes/_private+/team+/members+/_members.tsx b/app/routes/_private+/team+/members+/_members.tsx index 5ae13e27..dd9fd2d6 100644 --- a/app/routes/_private+/team+/members+/_members.tsx +++ b/app/routes/_private+/team+/members+/_members.tsx @@ -1,9 +1,17 @@ import { useTeam } from "hooks/useTeam" import { Outlet } from "react-router" +import { useSpace } from "@dxos/react-client/echo" +import { useShell } from "@dxos/react-client" import { Members } from "ui/Members" +import { useLocalState } from "hooks/useLocalState" export default function MembersPage() { const { contacts, self } = useTeam() + + const shell = useShell() + const { spaceKey } = useLocalState() + const space = useSpace(spaceKey) + return ( <> {}} onDemote={() => {}} onRemove={() => {}} - onInvite={() => {}} + onInvite={() => { + void shell.shareSpace({ spaceId: space!.id }) + }} onRevokeInvitation={() => {}} /> {/* Outlet for dialogs */} diff --git a/app/routes/_private+/team+/members+/invite.tsx b/app/routes/_private+/team+/members+/invite.tsx deleted file mode 100644 index f7721c70..00000000 --- a/app/routes/_private+/team+/members+/invite.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { useDatabase } from "hooks/useDatabase" -import { useMemberInvitationGenerator } from "hooks/useMemberInvitationGenerator" -import { useTeam } from "hooks/useTeam" -import { useLocation, useNavigate } from "react-router" -import { type ContactId } from "schema/Contact" -import { InviteMemberDialog } from "ui/InviteMemberDialog" - -export default function MembersInvitePage() { - // the userId of the contact we're inviting is passed in the location state - const { userId } = useLocation().state as { userId: ContactId } - const { contacts } = useDatabase() - const { self } = useTeam() - const navigate = useNavigate() - - // look up the contact information for the user we're inviting - const contact = contacts.find(userId) - - // generate an invitation code for the contact - const invitationCode = useMemberInvitationGenerator(contact) - - // ↑ hooks - - // Only admins can invite new members - if (!self?.isAdmin) return null - - return ( - navigate("..")} - contact={contact} - invitationCode={invitationCode} - /> - ) -} diff --git a/app/routes/_private+/team+/members+/remove.tsx b/app/routes/_private+/team+/members+/remove.tsx index 52fb5bde..16d4ed31 100644 --- a/app/routes/_private+/team+/members+/remove.tsx +++ b/app/routes/_private+/team+/members+/remove.tsx @@ -1,31 +1,39 @@ -import { useDatabase } from "hooks/useDatabase" import { useTeam } from "hooks/useTeam" import { useLocation, useNavigate } from "react-router" import type { ContactId } from "schema/Contact" +import { useSpace, HaloSpaceMember } from "@dxos/react-client/echo" import { RemoveMemberDialog } from "ui/RemoveMemberDialog" +import { useLocalState } from "hooks/useLocalState" export default function RemovePage() { const { userId } = useLocation().state as { userId: ContactId } - const { contacts } = useDatabase() - const { self, team } = useTeam() + const { self, contacts } = useTeam() const navigate = useNavigate() + const { spaceKey } = useLocalState() + const space = useSpace(spaceKey) // ----- ↑ hooks // Only admins can remove members if (!self?.isAdmin) return null - const contact = contacts.find(userId) + const contact = contacts.find(({ id }) => id === userId) + if (!contact?.identityKey) return null return ( navigate("..")} contact={contact} - remove={() => { - team.remove(contact.id) - contacts.effect.destroy(contact.id) + remove={async () => { + // remove from space + await space?.updateMemberRole({ + memberKey: contact.identityKey!, + newRole: HaloSpaceMember.Role.REMOVED, + }) + // remove contact from contacts list + space?.db.remove(contact.contact) }} /> ) diff --git a/app/routes/_private+/team+/members+/revoke.tsx b/app/routes/_private+/team+/members+/revoke.tsx deleted file mode 100644 index 50179f92..00000000 --- a/app/routes/_private+/team+/members+/revoke.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { useInvitation } from "hooks/useInvitation" -import { useTeam } from "hooks/useTeam" -import { useLocation, useNavigate } from "react-router" -import type { ContactId } from "schema/Contact" -import { RevokeInvitationDialog } from "ui/RevokeInvitationDialog" - -export default function RevokeInvitationPage() { - const { userId } = useLocation().state as { userId: ContactId } - - const { self, contacts } = useTeam() - const navigate = useNavigate() - - const contact = contacts[userId] - const { invitation, revoke } = useInvitation(contact) - - // ----- ↑ hooks - - // Only admins can invite new members - if (!self?.isAdmin) return null - // Only existing invitations can be revoked - if (!invitation) return null - - return ( - navigate("..")} - contact={contact} - invitation={invitation} - revoke={revoke} - /> - ) -} diff --git a/app/routes/auth+/begin.tsx b/app/routes/auth+/begin.tsx index bebc4f62..cd2d0558 100644 --- a/app/routes/auth+/begin.tsx +++ b/app/routes/auth+/begin.tsx @@ -1,17 +1,27 @@ +import { type Client, useClient } from "@dxos/react-client" +import { useIdentity } from "@dxos/react-client/halo" +import { useEffect } from "react" import { useNavigate } from "react-router" -import { useLocalState } from "hooks/useLocalState" import { UserNameForm } from "ui/UserNameForm" -export default function AuthBeginPage() { - const { userName, update } = useLocalState() +export default function Begin() { + const identity = useIdentity() + const client = useClient() as Client const navigate = useNavigate() + useEffect(() => { + if (identity?.profile?.displayName) { + void navigate("/auth/setup") + } + }, [identity, navigate]) + return ( { - update({ userName }) - void navigate("/auth/setup") + void (identity ? + client.halo.updateProfile({ displayName: userName }) + : client.halo.createIdentity({ displayName: userName })) }} /> ) diff --git a/app/routes/auth+/setup+/_.create.tsx b/app/routes/auth+/setup+/_.create.tsx index d2c39e94..a15b362b 100644 --- a/app/routes/auth+/setup+/_.create.tsx +++ b/app/routes/auth+/setup+/_.create.tsx @@ -1,34 +1,30 @@ -// not sure why but these result in false positives; for example eslint thinks Auth.createUser() returns any -/* eslint-disable @typescript-eslint/no-unsafe-argument */ -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ - -import { createUser } from "@localfirst/auth" -import { getShareId } from "@localfirst/auth-provider-automerge-repo" import { useNavigate } from "react-router" -import { createDevice, type UserInfo } from "context/Auth/createDevice" -import { getInitialContacts } from "context/Auth/getInitialContacts" -import { initializeAuthRepo } from "context/Auth/initializeAuthRepo" -import { storeRootDocumentIdOnTeam } from "context/Auth/storeRootDocumentIdOnTeam" -import type { CollectionItem } from "context/Database/types" import { clients } from "data/clients" import { projects } from "data/projects" import { useLocalState } from "hooks/useLocalState" -import { Client } from "schema/Client" import { Contact } from "schema/Contact" -import { Project } from "schema/Project" -import { type RootEncoded } from "schema/Root" +import { useIdentity } from "@dxos/react-client/halo" +import { type Client, useClient } from "@dxos/react-client" +import { create } from "@dxos/react-client/echo" import { TeamNameForm } from "ui/TeamNameForm" +import { useRedirect } from "hooks/useRedirect" export default function AuthCreatePage() { - const { userName, update } = useLocalState() + const identity = useIdentity() const navigate = useNavigate() + const client = useClient() as Client + const { spaceKey, update } = useLocalState() // hooks ↑ - if (!userName) { - void navigate("/auth/begin") - return null - } + useRedirect({ + from: "/auth/setup/create", + to: "/auth/begin", + condition: !identity?.profile?.displayName, + }) + + // already have a team + useRedirect({ from: "/auth/setup/create", to: "/", condition: Boolean(spaceKey) }) const defaultTeamName = "DevResults" @@ -36,36 +32,24 @@ export default function AuthCreatePage() { { - // Create new user and device - const user = createUser(userName) - const device = createDevice(user as UserInfo) - - // Create repo and auth provider - const { auth, repo } = await initializeAuthRepo({ user, device }) - - // The auth provider creates a team, registers it with the server, and waits for connection - const team = await auth.createTeam(teamName) - - // Initialize the root document - const contacts = getInitialContacts(user, teamName) - const rootDoc: RootEncoded = { - contacts: encode(contacts, Contact.encode), - projects: encode(projects, Project.encode), - clients: encode(clients, Client.encode), - doneEntries: {}, - timeEntries: {}, - } - - // Store the root document in the repo and get a document ID - const rootDocHandle = repo.create(rootDoc) - const rootDocumentId = rootDocHandle.documentId - - // Store the root document ID on the team so other devices can find it - storeRootDocumentIdOnTeam(team, rootDocumentId) - - // Get the share ID and update local state - const shareId = getShareId(team) - update({ user, device, rootDocumentId, shareId }) + // create a space with the team name + const space = await client.spaces.create({ name: teamName }) + update({ spaceKey: space.key.toString() }) + await space.waitUntilReady() + + // build a contact for yourself + const contact = create(Contact, { + identityId: identity!.identityKey.toString(), + avatarUrl: "", + firstName: identity!.profile!.displayName!, + lastName: "", + userName: identity!.profile!.displayName!, + }) + space.db.add(contact) + + // seed projects and clients + for (const project of projects) space.db.add(project) + for (const client of clients) space.db.add(client) // Navigate to the app void navigate("/") @@ -73,6 +57,3 @@ export default function AuthCreatePage() { /> ) } - -const encode = (values: T[], encoder: (value: T) => any) => - Object.fromEntries(values.map(value => [value.id, encoder(value)])) diff --git a/app/routes/auth+/setup+/_.join.($code).tsx b/app/routes/auth+/setup+/_.join.($code).tsx index 4975abc2..8f14abcd 100644 --- a/app/routes/auth+/setup+/_.join.($code).tsx +++ b/app/routes/auth+/setup+/_.join.($code).tsx @@ -1,115 +1,69 @@ -// unexplained false positives - eslint thinks `Auth.createUser()` returns `any` -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ - -import { eventPromise } from "@herbcaudill/eventemitter42" -import * as Auth from "@localfirst/auth" -import { createUser } from "@localfirst/auth" -import { type AuthErrorType } from "@localfirst/auth-provider-automerge-repo" import { useNavigate, useParams } from "react-router" -import { createDevice, type UserInfo } from "context/Auth/createDevice" -import { getRootDocumentIdFromTeam } from "context/Auth/getRootDocumentIdFromTeam" -import { initializeAuthRepo } from "context/Auth/initializeAuthRepo" -import { parseInvitationCode } from "context/Auth/parseInvitationCode" import { useLocalState } from "hooks/useLocalState" -import { withTimeout } from "lib/withTimeout" import { useState } from "react" -import { Contact, type ContactId } from "schema/Contact" -import type { Root } from "schema/Root" +import { Contact } from "schema/Contact" +import { useShell } from "@dxos/react-client" +import { useIdentity } from "@dxos/react-client/halo" +import { create } from "@dxos/react-client/echo" import { InvitationForm } from "ui/InvitationForm" -import { load } from "./lib/load" +import { useRedirect } from "hooks/useRedirect" export default function AuthJoinPage() { - const { userName = "", update } = useLocalState() + const identity = useIdentity() const navigate = useNavigate() + const { spaceKey, invitationCode: savedInvitationCode, update } = useLocalState() const invitationCodeFromUrl = useParams().code const [error, setError] = useState(undefined) + const shell = useShell() - // hooks ↑ - - const joinWithCode = async (invitationCode: string) => { - const user = createUser(userName) - const device = createDevice(user as UserInfo) - - const { auth, repo } = await initializeAuthRepo({ user, device }) - - const { shareId, invitationSeed } = parseInvitationCode(invitationCode) - - // Add the invitation to the auth provider, which will try to use it to connect with - // any peers that are members of the team. - - await auth.addInvitation({ shareId, invitationSeed, userName }).catch(error => { - switch (error.name as AuthErrorType) { - case "INVALID_INVITATION_CODE": { - throw new Error("That code doesn't look right! Did you mistype it?") - } - - default: { - throw error - } - } - }) - - auth.on("remoteError", error => { - setError(error.message) - }) - - auth.on("localError", error => { - setError(error.message) - }) - - const { team } = await withTimeout(eventPromise(auth, "joined"), { - timeout: 5000, - message: "We weren't able to connect. Not sure why - maybe try again later?", - }) - - // At this point, we still don't know who we are 😳 - specifically, which contact document is - // ours. When we were invited, our invitation ID was recorded on our contact document. We can - // use our invitation seed to derive our invitation ID, and then look up our contact document. - - // Our invitation ID was originally derived from the invitation seed; we can use the same method - // to derive it again. - const invitationId = Auth.invitation.deriveId(invitationSeed) - - // Now we need our contact record, which is linked to our invitation. We can't use `useTeam` - // here because it relies on auth context already existing. But we do have the repo, and we can - // get the root document ID from the team, and get the list of contacts from there. - const rootDocumentId = getRootDocumentIdFromTeam(team) - const rootDoc = await load(repo, rootDocumentId) - const rootDocHandle = repo.find(rootDocumentId) + const invitationCode = invitationCodeFromUrl ?? savedInvitationCode ?? "" - // Find the contact that has our invitation ID - that's us - const ourContact = Object.values(rootDoc.contacts).find(c => c.invitationId === invitationId) - - if (!ourContact) - throw new Error(`Didn't find a contact containing our invitation ID ${invitationId}`) - - // Create a contact with our new id, and delete the old contact - const oldId = ourContact.id - const newId = user.userId as ContactId - const updatedContact = new Contact({ ...ourContact, id: newId }) - rootDocHandle.change(s => { - s.contacts[newId] = updatedContact - delete s.contacts[oldId] - }) + // hooks ↑ - // Save our user info etc. to local storage - update({ user, device, rootDocumentId, shareId }) + useRedirect({ + from: /.*/, + to: "/auth/begin", + condition: !identity, + localState: { invitationCode }, + }) + useRedirect({ from: /.*/, to: "/", condition: Boolean(spaceKey) }) - void navigate("/") + const joinWithCode = async (invitationCode: string) => { + const { space } = await shell.joinSpace({ invitationCode }) + if (space) { + // Save our user info etc. to local storage + update({ spaceKey: space.id, invitationCode: "" }) + + await space.waitUntilReady() + // build a contact for yourself + const contact = create(Contact, { + identityId: identity!.identityKey.toString(), + avatarUrl: "", + firstName: identity!.profile!.displayName!, + lastName: "", + userName: identity!.profile!.displayName!, + }) + space.db.add(contact) + void navigate(`/`) + } else { + setError("Something went wrong... I don't know what") + } } - return invitationCodeFromUrl ? + return invitationCode ? // Take invitation code from URL & confirm joinWithCode(invitationCodeFromUrl)} + onSubmit={async () => joinWithCode(invitationCode)} /> // Show input for entering invitation code : joinWithCode(invitationCode)} + onSubmit={async ({ invitationCode: enteredInvitationCode }) => + joinWithCode(enteredInvitationCode) + } /> } diff --git a/app/routes/auth+/setup+/_.link.($code).tsx b/app/routes/auth+/setup+/_.link.($code).tsx index da8db54d..be8357cf 100644 --- a/app/routes/auth+/setup+/_.link.($code).tsx +++ b/app/routes/auth+/setup+/_.link.($code).tsx @@ -1,37 +1,33 @@ -import { eventPromise } from "@herbcaudill/eventemitter42" -import { useNavigate } from "react-router" -import { createDevice } from "context/Auth/createDevice" -import { getRootDocumentIdFromTeam } from "context/Auth/getRootDocumentIdFromTeam" -import { initializeAuthRepo } from "context/Auth/initializeAuthRepo" -import { parseInvitationCode } from "context/Auth/parseInvitationCode" -import { useLocalState } from "hooks/useLocalState" +import { useNavigate, useParams } from "react-router" +import { useShell } from "@dxos/react-client" +import { useState } from "react" import { InvitationForm } from "ui/InvitationForm" export default function AuthLinkPage() { - const { userName = "", update } = useLocalState() const navigate = useNavigate() + const invitationCodeFromUrl = useParams().code + const [error] = useState(undefined) + const shell = useShell() // hooks ↑ - return ( - { - const device = createDevice({ userName }) // we'll temporarily use the userName instead of the userId - const { auth } = await initializeAuthRepo({ device }) + const joinWithCode = async (invitationCode: string) => { + await shell.joinIdentity({ invitationCode }) + // do something with the identity? error handling? + void navigate("/") + } - const { shareId, invitationSeed } = parseInvitationCode(invitationCode) - await auth.addInvitation({ shareId, invitationSeed, userName }) - - // Once we're admitted, we'll get the Team data and the real User object - const { team, user } = await eventPromise(auth, "joined") - device.userId = user.userId - - const rootDocumentId = getRootDocumentIdFromTeam(team) - update({ user, device, rootDocumentId, shareId }) - - void navigate("/") - }} - /> - ) + return invitationCodeFromUrl ? + joinWithCode(invitationCodeFromUrl)} + /> + : joinWithCode(invitationCode)} + /> } diff --git a/app/routes/auth+/setup+/_setup.tsx b/app/routes/auth+/setup+/_setup.tsx index 6aeb69f9..e515fb2b 100644 --- a/app/routes/auth+/setup+/_setup.tsx +++ b/app/routes/auth+/setup+/_setup.tsx @@ -1,11 +1,21 @@ -import { useNavigate } from "react-router" import { useLocalState } from "hooks/useLocalState" +import { useIdentity } from "@dxos/react-client/halo" import { SetupOptions } from "ui/SetupOptions" +import { useRedirect } from "hooks/useRedirect" -export default function AuthSetupPage() { - const { userName } = useLocalState() - const navigate = useNavigate() - if (!userName) void navigate("/auth/begin") +export default function Setup() { + const identity = useIdentity() + const { invitationCode, spaceKey } = useLocalState() + + const identityConfigured = Boolean(identity?.profile?.displayName) + + useRedirect({ from: "/auth/setup", to: "/auth/begin", condition: !identityConfigured }) + useRedirect({ + from: "/auth/setup", + to: `/auth/setup/join/${invitationCode}`, + condition: identityConfigured && Boolean(invitationCode), + }) + useRedirect({ from: "/auth/setup", to: "/", condition: Boolean(identity) && Boolean(spaceKey) }) return } diff --git a/app/routes/auth+/signout.tsx b/app/routes/auth+/signout.tsx index 56226d6f..35283111 100644 --- a/app/routes/auth+/signout.tsx +++ b/app/routes/auth+/signout.tsx @@ -11,7 +11,7 @@ export default function SignOutPage() { confirmed={confirmed} onConfirm={() => { setConfirmed(true) - signOut() + void signOut() }} /> ) diff --git a/app/sw.ts b/app/sw.ts index 10b87385..c4217fd6 100644 --- a/app/sw.ts +++ b/app/sw.ts @@ -1,5 +1,4 @@ /* eslint-disable @typescript-eslint/no-floating-promises */ -/* eslint-disable no-await-in-loop */ import { clientsClaim } from "workbox-core" import { @@ -8,8 +7,6 @@ import { precacheAndRoute, } from "workbox-precaching" import { NavigationRoute, registerRoute } from "workbox-routing" -import { CacheFirst } from "workbox-strategies" -import { contacts } from "./data/contacts.js" declare let self: ServiceWorkerGlobalScope @@ -24,26 +21,3 @@ registerRoute(new NavigationRoute(createHandlerBoundToURL("index.html"))) self.skipWaiting() clientsClaim() - -// cache avatars from devresults.com -// https://stackoverflow.com/questions/51984349/cache-remote-http-asset -// this will no longer be necessary once contacts are stored in documents with the rest of the local data - -const cacheName = "avatar-cache" -const avatarUrls = contacts.map(user => user.avatarUrl) // e.g. https://www.devresults.com/images/staff/square/herb.jpg - -// when the service worker is installed, fetch each avatar and cache it -self.addEventListener("install", event => { - event.waitUntil( - caches.open(cacheName).then(async cache => { - for (const url of avatarUrls) { - const response = await fetch(url, { mode: "no-cors" }) - await cache.put(url, response) - } - }), - ) -}) - -// use the cache-first strategy for any requests to devresults.com -// https://developer.chrome.com/docs/workbox/modules/workbox-strategies/#cache-first-cache-falling-back-to-network -registerRoute(/^https:\/\/www\.devresults\.com/, new CacheFirst({ cacheName })) diff --git a/app/types/types.ts b/app/types/types.ts index d9d89639..9d8db49b 100644 --- a/app/types/types.ts +++ b/app/types/types.ts @@ -1,7 +1,3 @@ -import type { DocumentId } from "@automerge/automerge-repo" -import type * as Auth from "@localfirst/auth" -import type { AuthProvider, ShareId } from "@localfirst/auth-provider-automerge-repo" -import { type DoneEntryEncoded, type DoneEntryId } from "schema/DoneEntry" import type { Icon } from "./icons" /** Unix timestamp (nominal type) */ @@ -14,27 +10,10 @@ export type ExtendedArray = { deleteAt(index: number, numDelete?: number): ExtendedArray } & T[] -/** SharedState is the type of the root document in our Automerge Repo. */ -export type SharedState = { - dones: Record - contacts: DocumentId[] -} - -/** AuthState contains data about our @localfirst/auth user, device, and team */ -export type AuthState = { - device: Auth.DeviceWithSecrets - user: Auth.UserWithSecrets - team: Auth.Team - auth: AuthProvider -} - /** LocalState contains any non-shared state data that we want to persist in local storage. */ export type LocalState = { - userName?: string // the user's name (not the same as the user's id) - device?: Auth.DeviceWithSecrets // the local lf/auth device - user?: Auth.UserWithSecrets // the local lf/auth user - shareId?: ShareId // truncated lf/auth team id - rootDocumentId?: DocumentId + spaceKey?: string // we assume one space per domain + invitationCode?: string // to make invitation a little smoother } export type InvitationStatus = "NOT_INVITED" | "PENDING" | "REVOKED" | "EXPIRED" diff --git a/app/ui/TimeEntryInput.tsx b/app/ui/TimeEntryInput.tsx index 6eb431f9..89aa437b 100644 --- a/app/ui/TimeEntryInput.tsx +++ b/app/ui/TimeEntryInput.tsx @@ -21,7 +21,7 @@ export const TimeEntryInput = ({ content, index, isFocused = false, - self: { id: contactId }, + self, date, projects, clients, @@ -97,7 +97,7 @@ export const TimeEntryInput = ({ // process each line as a separate entry const [errors, parsedEntries] = TimeEntry.parseMany({ input: content, - contactId, + contactId: self.id, date: date.toString(), projects, clients, diff --git a/package.json b/package.json index 0d4c6704..1e200a23 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "build:shell": "vite build -c vite.config.shell.ts", "build:storybook": "storybook build", "build:icons": "node ./scripts/generate-icon-types.js", - "dev": "run-p dev:open dev:syncserver", + "dev": "pnpm dev:open", "dev:open": "pnpm dev:start --open", "dev:start": "react-router dev --port 3000 --host", "dev:syncserver": "cross-env DEBUG=localfirst* NODE_ENV=development node ./scripts/syncserver.js", From cd33bc5fa5842e7894587dff571148ad56867e66 Mon Sep 17 00:00:00 2001 From: Nathan Gerhart Date: Thu, 13 Mar 2025 15:24:36 -0600 Subject: [PATCH 16/19] Playwright: get tests working Basically, this is removing tests that are hard automate in dxos (team management through the shell) and giving persistence a little bit longer before refreshing the page --- playwright.config.ts | 23 +++------ test/auth.test.ts | 111 +------------------------------------------ test/dones.test.ts | 65 ++----------------------- test/helpers/App.ts | 29 +---------- 4 files changed, 14 insertions(+), 214 deletions(-) diff --git a/playwright.config.ts b/playwright.config.ts index 3d743c92..def867b9 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -23,8 +23,8 @@ export default defineConfig({ /* Retry on CI only */ retries: process.env.CI ? 2 : 0, - /* Opt out of parallel tests in CI */ - workers: process.env.CI ? 1 : "100%", + /* Opt out of parallel tests */ + workers: 1, /* Reporter to use. See https://playwright.dev/docs/test-reporters */ reporter: "list", @@ -69,18 +69,9 @@ export default defineConfig({ webServer: isPlaywrightUI ? [] - : [ - { - command: "pnpm react-router dev --port 3001", - env: { VITE_SYNC_SERVER_PORT: "3031" }, - url: "http://localhost:3001", - reuseExistingServer: false, - }, - { - command: "pnpm dev:syncserver", - env: { PORT: "3031" }, - url: "http://localhost:3031", - reuseExistingServer: false, - }, - ], + : { + command: "pnpm react-router dev --port 3001", + url: "http://localhost:3001", + reuseExistingServer: true, + }, }) diff --git a/test/auth.test.ts b/test/auth.test.ts index ae3abd07..baea74f6 100644 --- a/test/auth.test.ts +++ b/test/auth.test.ts @@ -1,4 +1,4 @@ -import { expect, test } from "@playwright/test" +import { test } from "@playwright/test" import { newBrowser } from "./helpers/App" test("creates a team", async ({ context }) => { @@ -38,116 +38,9 @@ test("logs in with an arbitrary name", async ({ context }) => { await reginald.expect.toBeLoggedIn("Reginald") }) -test("is populated with DevResults team", async ({ context }) => { - const herb = await newBrowser(context) - await herb.createTeam("herb", "DevResults") - await herb.expect.toBeLoggedIn("Herb") - await herb.navigateTo("Team") - await herb.navigateTo("Members") - await herb.expect.toSeeContact("Herb Caudill") - await herb.expect.toSeeContact("Ritika Bhasker") - await herb.expect.toSeeContact("Fred Pinto") -}) - -test("creates a member invitation", async ({ context }) => { - const herb = await newBrowser(context) - await herb.createTeam("herb", "DevResults") - - const invitationCode = await herb.invite("Ritika Bhasker") - - expect(invitationCode.length).toBeGreaterThan(12) - - await herb.expect.toBeLoggedIn("Herb") -}) - -test("uses an invitation to join as member", async ({ context }) => { - // This ensures that there's more than one team on the sync server, since that was causing - // intermittent test failures at one point. - const noise = await newBrowser(context) - await noise.createTeam("noise", `Noise team`) - - const herb = await newBrowser(context) - await herb.createTeam("herb", "DevResults") - const invitationCode = await herb.invite("Ritika Bhasker") - - const ritika = await newBrowser(context) - await ritika.joinAsMember("ritika", invitationCode) - await ritika.expect.toBeLoggedIn("Ritika Bhasker") -}) - -test("can remove member", async ({ context }) => { - const noise = await newBrowser(context) - await noise.createTeam("noise", `Noise team`) - - const herb = await newBrowser(context) - await herb.createTeam("herb", "DevResults") - - const invitationCode = await herb.invite("Shane Kunkle") - const shane = await newBrowser(context) - await shane.joinAsMember("shane", invitationCode) - await shane.expect.toBeLoggedIn("Shane Kunkle") - - await herb.deleteContact("shane") - await herb.reload() - await herb.expect.not.toSeeContact("Shane Kunkle") -}) - -test("sees new members when they join", async ({ context }) => { - const herb = await newBrowser(context) - await herb.createTeam("herb", "DevResults") - const invitationCode = await herb.invite("Ritika Bhasker") - - const ritika = await newBrowser(context) - await ritika.joinAsMember("ritika", invitationCode) - - await ritika.expect.toBeLoggedIn("Ritika Bhasker") - - await herb.expect.toSeeContact("Ritika Bhasker") -}) - -test("can't use a revoked invitation to join as member", async ({ context }) => { - const herb = await newBrowser(context) - await herb.createTeam("herb", "DevResults") - const invitationCode = await herb.invite("Ritika Bhasker") - await herb.revoke("Ritika Bhasker") - - const ritika = await newBrowser(context) - await ritika.joinAsMember("ritika", invitationCode) - await ritika.expect.toBeLoggedOut() -}) - -test("can join in a second browser instance with a device code invitation", async ({ context }) => { - const chromiumBrowser = await newBrowser(context) - await chromiumBrowser.createTeam("herb", "DevResults") - - const deviceCodeInvitation = await chromiumBrowser.createDeviceInvitation() - - const devicesListBrowser1 = await chromiumBrowser.devices() - let deviceCount = await devicesListBrowser1.count() - - test.expect(deviceCount).toBe(1) - - // Spinning up a second browser instance (an incognito window) - const chromiumBrowserContext2 = await context.browser()!.newContext() - const chromiumBrowser2 = await newBrowser(chromiumBrowserContext2) - await chromiumBrowser2.linkDevice("herb", deviceCodeInvitation) - await chromiumBrowser2.expect.toBeLoggedIn("Herb Caudill") - await chromiumBrowser2.navigateTo("Settings") - await chromiumBrowser2.navigateTo("Devices") - - // verify device count on new device - const devicesListBrowser2 = await chromiumBrowser2.devices() - deviceCount = await devicesListBrowser2.count() - test.expect(deviceCount).toBe(2) - - // verify device count has increased on original device - deviceCount = await devicesListBrowser1.count() - test.expect(deviceCount).toBe(2) -}) - test("can sign out", async ({ context }) => { const herb = await newBrowser(context) - await herb.createTeam("herb", "DevResults") + await herb.createTeam("Herb", "DevResults") await herb.expect.toBeLoggedIn("Herb") await herb.signOut() await herb.expect.toBeLoggedOut() diff --git a/test/dones.test.ts b/test/dones.test.ts index 2c86def1..dbe5e363 100644 --- a/test/dones.test.ts +++ b/test/dones.test.ts @@ -74,66 +74,17 @@ test("shows dones in team view", async ({ context }) => { await expect(herb.page.locator("main")).toContainText(doneText) }) -test(`shows other team members' dones`, async ({ context }) => { - const { herb } = await setup(context) - - await herb.createDone(doneText) - - const invitationCode = await herb.invite("Ritika Bhasker") - - const ritika = await newBrowser(context) - await ritika.joinAsMember("ritika", invitationCode) - - await ritika.pressButton("Dones") - await expect(ritika.page.locator("main")).toContainText(doneText) - - await herb.navigateTo("My week") - await expect(herb.page.locator("main")).toContainText(doneText) -}) - -test(`syncs edits to other members`, async ({ context }) => { - const { herb } = await setup(context) - - await herb.createDone(doneText) - - const invitationCode = await herb.invite("Ritika Bhasker") - - const ritika = await newBrowser(context) - await ritika.joinAsMember("ritika", invitationCode) - - await ritika.navigateTo("Dones") - await expect(ritika.page.locator("main")).toContainText(doneText) - - // herb edits the done - - await herb.navigateTo("My week") - const doneEntry = herb.firstDoneEntryInput() - await doneEntry.click() - await doneEntry.press("Control+A") - await doneEntry.fill("Completed petabytes of coding and compiling") - await doneEntry.press("Enter") - - await expect(ritika.page.locator("main")).toContainText( - "Completed petabytes of coding and compiling", - ) -}) - test("likes a done", async ({ context }) => { const { herb } = await setup(context) await herb.createDone(doneText) - const invitationCode = await herb.invite("Ritika Bhasker") - - const ritika = await newBrowser(context) - await ritika.joinAsMember("ritika", invitationCode) - { - // ritika goes to the team dones page - await ritika.navigateTo("Dones") + // herb goes to the team dones page + await herb.navigateTo("Dones") // the done is visible and has no likes - const done = ritika.page.locator("li").filter({ hasText: doneText }) + const done = herb.page.locator("li").filter({ hasText: doneText }) await expect(done).toBeVisible() await expect(done).not.toContainText("1") @@ -141,16 +92,8 @@ test("likes a done", async ({ context }) => { const likeButton = done.getByRole("button", { name: "Click to like" }).first() await likeButton.click() - // the done now has 1 like and ritika can see that they liked it + // the done now has 1 like and herb can see that they liked it await expect(done).toContainText("1") await expect(done.getByTitle("you liked this")).toBeVisible() } - - { - // herb sees that the done has 1 like and it's from from ritika - await herb.navigateTo("Dones") - const done = herb.page.locator("li").filter({ hasText: doneText }) - await expect(done).toContainText("1") - await expect(herb.page.getByTitle("Ritika liked this")).toBeVisible() - } }) diff --git a/test/helpers/App.ts b/test/helpers/App.ts index 0b033cf9..cae26ded 100644 --- a/test/helpers/App.ts +++ b/test/helpers/App.ts @@ -48,7 +48,7 @@ export class App { } async reload() { - await pause(100) // give storage etc. time to finish + await pause(1000) // give storage etc. time to finish await this.page.reload() return this } @@ -142,17 +142,6 @@ export class App { return contactRow } - async invite(userName: string) { - const contactRow = await this.getContactRow(userName) - const inviteButtonLink = contactRow.getByRole("link", { name: "Invite" }) - await expect(inviteButtonLink).toBeVisible() - await inviteButtonLink.click() - await this.pressButton("Copy code") - await this.page.keyboard.press("Escape") - const invitationCode: string = await this.getClipboard() - return invitationCode - } - async revoke(userName: string) { const contactRow = await this.getContactRow(userName) const revokeButtonLink = contactRow.getByRole("link", { name: "Revoke" }) @@ -180,22 +169,6 @@ export class App { return invitationCode } - async joinAsMember(userName: string, invitationCode: string) { - await this.enterFirstName(userName) - await this.pressButton("Continue") - await this.pressButton("Join a team") - await this.page.getByLabel("Invitation code").fill(invitationCode) - await this.pressButton("Join") - } - - async joinAsDevice(userName: string, invitationCode: string) { - await this.enterFirstName(userName) - await this.pressButton("Continue") - await this.pressButton("Authorize this device") - await this.page.getByLabel("Invitation code").fill(invitationCode) - await this.pressButton("Join") - } - async contacts() { await this.navigateTo("Team") return this.page.locator(".Members") From 6b42b955c4b9dc7cb3f8d3c604cb0f999ed02ee3 Mon Sep 17 00:00:00 2001 From: Nathan Gerhart Date: Thu, 13 Mar 2025 15:30:11 -0600 Subject: [PATCH 17/19] Delete unused files --- app/hooks/useAuth.tsx | 12 -- app/hooks/useDeviceInvitationGenerator.tsx | 34 ----- app/hooks/useInvitation.tsx | 30 ---- app/hooks/useMemberInvitationGenerator.tsx | 39 ----- app/hooks/useRootDocument.tsx | 28 ---- app/lib/getInvitationStatus.tsx | 13 -- app/routes/auth+/setup+/lib/load.tsx | 18 --- package.json | 5 +- scripts/clean-log.js | 168 --------------------- scripts/flaky.js | 107 ------------- scripts/link-local.js | 66 -------- scripts/run.cjs | 2 - scripts/syncserver.js | 15 -- 13 files changed, 1 insertion(+), 536 deletions(-) delete mode 100644 app/hooks/useAuth.tsx delete mode 100644 app/hooks/useDeviceInvitationGenerator.tsx delete mode 100644 app/hooks/useInvitation.tsx delete mode 100644 app/hooks/useMemberInvitationGenerator.tsx delete mode 100644 app/hooks/useRootDocument.tsx delete mode 100644 app/lib/getInvitationStatus.tsx delete mode 100644 app/routes/auth+/setup+/lib/load.tsx delete mode 100644 scripts/clean-log.js delete mode 100644 scripts/flaky.js delete mode 100644 scripts/link-local.js delete mode 100644 scripts/run.cjs delete mode 100644 scripts/syncserver.js diff --git a/app/hooks/useAuth.tsx b/app/hooks/useAuth.tsx deleted file mode 100644 index d8bf9cc6..00000000 --- a/app/hooks/useAuth.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { AuthContext } from "context/Auth/AuthContextProvider" -import { useContext } from "react" - -/** - * Convenience wrapper around our authContext for accessing the auth data and provider. - * You should probably be using `useTeam` instead. - */ -export function useAuth() { - const authState = useContext(AuthContext) - if (!authState) throw new Error("useAuth must be used within an AuthContextProvider") - return authState -} diff --git a/app/hooks/useDeviceInvitationGenerator.tsx b/app/hooks/useDeviceInvitationGenerator.tsx deleted file mode 100644 index 4a03fb60..00000000 --- a/app/hooks/useDeviceInvitationGenerator.tsx +++ /dev/null @@ -1,34 +0,0 @@ -// unexplained false positives - eslint thinks `randomKey()` returns `any` -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ - -import type { UnixTimestamp } from "@localfirst/auth" -import { getShareId } from "@localfirst/auth-provider-automerge-repo" -import { randomKey } from "@localfirst/crypto" -import { useTeam } from "hooks/useTeam" -import { MINUTE } from "lib/constants" -import { useEffect, useState } from "react" -import { type ExtendedContact } from "schema/Contact" - -export function useDeviceInvitationGenerator(contact?: ExtendedContact) { - const [invitationCode, setInvitationCode] = useState() - - const { team } = useTeam() - - useEffect(() => { - if (!invitationCode) { - const seed = randomKey(4) - - // Create an invitation that expires in 30 minutes - const expiration = (Date.now() + 30 * MINUTE) as UnixTimestamp - - // we'll need this for revocation - const { id } = team.inviteDevice({ seed, expiration }) // eslint-disable-line unused-imports/no-unused-vars - - // The "invitation code" that we pass to the device is the shareId + the invitation seed - const shareId = getShareId(team) - setInvitationCode(`${shareId}${seed}`) - } - }, [contact, invitationCode]) - - return invitationCode -} diff --git a/app/hooks/useInvitation.tsx b/app/hooks/useInvitation.tsx deleted file mode 100644 index 6f2aba3d..00000000 --- a/app/hooks/useInvitation.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import type { Invitation } from "@localfirst/auth" -import { useTeam } from "hooks/useTeam" -import { useEffect, useState } from "react" -import { type ExtendedContact } from "schema/Contact" -import { useDatabase } from "./useDatabase" - -export function useInvitation(contact: ExtendedContact) { - const [invitation, setInvitation] = useState() - const { contacts } = useDatabase() - const { team } = useTeam() - - useEffect(() => { - if (contact?.invitationId) { - setInvitation(team.getInvitation(contact.invitationId) as Invitation) - } - }, [team, contact]) - - function revoke() { - if (invitation) { - // revoke the invitation - team.revokeInvitation(invitation?.id) - - // update the contact record - const updated = { ...contact, invitationId: undefined } - contacts.update(updated) - } - } - - return { invitation, revoke } -} diff --git a/app/hooks/useMemberInvitationGenerator.tsx b/app/hooks/useMemberInvitationGenerator.tsx deleted file mode 100644 index f203ded9..00000000 --- a/app/hooks/useMemberInvitationGenerator.tsx +++ /dev/null @@ -1,39 +0,0 @@ -// unexplained false positives - eslint thinks `randomKey()` returns `any` -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ - -import type { UnixTimestamp } from "@localfirst/auth" -import { getShareId } from "@localfirst/auth-provider-automerge-repo" -import { randomKey } from "@localfirst/crypto" -import { useTeam } from "hooks/useTeam" -import { HOUR } from "lib/constants" -import { useEffect, useState } from "react" -import { type ExtendedContact } from "schema/Contact" -import { useDatabase } from "./useDatabase" - -export function useMemberInvitationGenerator(contact?: ExtendedContact) { - const [invitationCode, setInvitationCode] = useState() - - const { team, self } = useTeam() - const { contacts } = useDatabase() - - useEffect(() => { - // Generate a new invitation if we're an admin, the contact has loaded, and we haven't just now generated one - if (self?.isAdmin && contact && !invitationCode) { - const seed = randomKey(4) - - // Create an invitation that expires in 48 hours and can only be used once - const expiration = (Date.now() + 48 * HOUR) as UnixTimestamp - const maxUses = 1 - const { id } = team.inviteMember({ seed, expiration, maxUses }) - - // Record the invitation on the contact's document - contacts.update({ ...contact, invitationId: id }) - - // The "invitation code" that we give the member is the shareId + the invitation seed - const shareId = getShareId(team) - setInvitationCode(`${shareId}${seed}`) - } - }, [contact, invitationCode]) - - return invitationCode -} diff --git a/app/hooks/useRootDocument.tsx b/app/hooks/useRootDocument.tsx deleted file mode 100644 index bf6dd194..00000000 --- a/app/hooks/useRootDocument.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { useDocument } from "@automerge/automerge-repo-react-hooks" -import { assert } from "lib/assert" -import { useMemo } from "react" -import { Root, type RootEncoded } from "schema/Root" -import { useLocalState } from "./useLocalState" - -export function useRootDocument< - Decoded extends boolean = true, - ReturnType = Decoded extends true ? Root : RootEncoded, ->({ decode = true as Decoded }: { decode?: Decoded } = {}): readonly [ - ReturnType | undefined, - typeof changeFn, -] { - const { rootDocumentId } = useLocalState() - assert(rootDocumentId, "useRootDocument should only be used within an AuthContextProvider") - - const [rootDocument, changeFn] = useDocument(rootDocumentId) - - const decoded = useMemo( - () => - rootDocument ? - ((decode ? Root.decode(rootDocument) : rootDocument) as ReturnType) - : undefined, - [rootDocument, decode], - ) - - return [decoded, changeFn] as const -} diff --git a/app/lib/getInvitationStatus.tsx b/app/lib/getInvitationStatus.tsx deleted file mode 100644 index 5315408b..00000000 --- a/app/lib/getInvitationStatus.tsx +++ /dev/null @@ -1,13 +0,0 @@ -// unexplained false positives - eslint thinks `team.getInvitation()` returns `any` -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ - -import { type InvitationStatus } from "types/types" -import { type Base58, type Team } from "@localfirst/auth" - -export const getInvitationStatus = (team: Team, invitationId?: Base58): InvitationStatus => { - if (!invitationId || !team.hasInvitation(invitationId)) return "NOT_INVITED" - const { expiration, revoked } = team.getInvitation(invitationId) - if (revoked) return "REVOKED" - if (expiration < Date.now()) return "EXPIRED" - return "PENDING" -} diff --git a/app/routes/auth+/setup+/lib/load.tsx b/app/routes/auth+/setup+/lib/load.tsx deleted file mode 100644 index 1838b549..00000000 --- a/app/routes/auth+/setup+/lib/load.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import type { Repo, AnyDocumentId } from "@automerge/automerge-repo" - -/** Awaitable utility for getting documents from an Automerge Repo instance. */ -export async function load(repo: Repo, id: AnyDocumentId): Promise -export async function load(repo: Repo, ids: AnyDocumentId[]): Promise -export async function load(repo: Repo, arg: AnyDocumentId | AnyDocumentId[]): Promise { - if (Array.isArray(arg)) { - const ids = arg - return Promise.all(ids.map(async id => load(repo, id))) as Promise - } - - const id = arg - const handle = repo.find(id) - await handle.whenReady() - const doc = await handle.doc() - if (!doc) throw new Error(`Didn't find the document ${id.toString()}`) - return doc -} diff --git a/package.json b/package.json index 1e200a23..9139cc5f 100644 --- a/package.json +++ b/package.json @@ -13,10 +13,8 @@ "dev": "pnpm dev:open", "dev:open": "pnpm dev:start --open", "dev:start": "react-router dev --port 3000 --host", - "dev:syncserver": "cross-env DEBUG=localfirst* NODE_ENV=development node ./scripts/syncserver.js", "icon-types": "node ./scripts/generate-icon-types.js", "context": "node ./scripts/populate-context.js", - "linklocal": "node ./scripts/link-local.js", "lint": "xo", "preinstall": "npx only-allow pnpm", "preview": "vite preview --port 3000", @@ -30,8 +28,7 @@ "test:pw:exec:ui": "pnpm playwright test --project=chromium --ui", "test:pw:log": "pnpm test:pw 2>&1 | node ./scripts/clean-log.js > ./logs/log.txt && code ./logs/log.txt", "test:pw:ui": "cross-env PLAYWRIGHT_UI=1 run-p dev:start dev:syncserver test:pw:exec:ui", - "typecheck": "tsc -p ./app/tsconfig.json --noEmit", - "unlinklocal": "node ./scripts/link-local.js --unlink" + "typecheck": "tsc -p ./app/tsconfig.json --noEmit" }, "dependencies": { "@dxos/config": "0.7.4", diff --git a/scripts/clean-log.js b/scripts/clean-log.js deleted file mode 100644 index b8f07e7f..00000000 --- a/scripts/clean-log.js +++ /dev/null @@ -1,168 +0,0 @@ -import { exec as _exec } from "child_process" -import fs, { appendFileSync } from "fs" -import path from "path" -import { fileURLToPath } from "url" -import { promisify } from "util" -const exec = promisify(_exec) - -/* -example usage: - -> pnpm test:pw |& node ./scripts/clean-log.js > ./logs/log.txt && code ./logs/log.txt - -*/ - -const output = [] -process.stdin - .on("data", line => output.push(line.toString())) - .on("end", () => { - const combinedOutput = output.map(line => line.trim()).join("\n") - process.stdout.write(cleanLogs(combinedOutput)) - }) - -// Reduce visual noise to a minimum in the logs -function cleanLogs(output) { - const A = 65 - const Z = 90 - let i = A - let tokens = { - // A1FR9f: A, - // Q4SKk9: B, - // etc. - } - - // replace all instances of any given hash with a single letter - // this makes it possible to diff different runs of the test - function tokenize(match, p1) { - if (i > Z) i = A - const token = tokens[p1] ?? String.fromCharCode(i++) - tokens[p1] = token - return match.replace(p1, token) - } - - const prefixes = [ - ["message-queue ", "msg-queue"], - ["messagechannel ", "msg-chan"], - ["connection:", "auth-conn"], - ["auth-provider:", "auth-prov"], - ["network:", "network"], - ["repo ", "repo"], - ["syncserver ", "server"], - ["collectionsync ", "col-sync"], - ["remote-heads-subscriptions ", "heads"], - ["dochandle:", "dochandle"], - ["docsync:", "doc-sync"], - ["storage-subsystem ", "storage"], - ["stdout:", "*"], - ["anonymous-auth-conn", "anon-conn"], - ] - const prefixColWidth = prefixes.reduce( - (acc, [, replacement]) => Math.max(acc, replacement.length), - 0, - ) - - const transforms = [ - // Remove quotes - [/"|'|`/g, ""], - - [/^\>.*?$/gm, ""], - [/^RUN.*?$/gm, ""], - [/^\[vite\].*?$/gm, ""], - [/^Download the React DevTools.*?$/gm, ""], - [/^.*websocket:.*?$/gm, ""], - - // Remove ANSI escape codes - [/\u001B\[\d+m/g, ""], - [/\[[0-9;]+m/g, ""], - - // Remove prefixes - [/\[WebServer\]|localfirst\:|auth\:|automerge-repo\:|/g, ""], - - // Remove timestamps - [/\+\d+(ms|s)/g, ""], - [/timestamp: \d+/g, ""], - - // Remove snapshot hashes - [/snapshot,(\w+)/g, ""], - - // Remove %o %s - [/ %o/g, ""], - [/ %s/g, ""], - - // condense stdout - [/^stdout.*\n/gm, "stdout:"], - - // replace deviceIds with userNames - ...[...output.matchAll(/user(?:Name)?: '?(\w+)'?, deviceId: '?(\w+)'?/g)] // - .map(match => ({ userName: match[1], deviceId: match[2] })) - .map(({ userName, deviceId }) => [new RegExp(deviceId, "g"), userName]), - - // tokenize shareIds as TEAM-1 etc - ...[...output.matchAll(/shareId: '?(\w+)'?/g)] - .map(match => match[1]) - .reduce(unique, []) - .map((shareId, i) => [ - // the shareId is a truncated team id; also match the full team id - new RegExp(shareId + "\\w*", "g"), - `TEAM-${i + 1}`, - ]), - - // tokenize documentIds as DOC-1 etc - ...[...output.matchAll(/dochandle:(\w+)/gi)] - // reduce to unique documentIds - .map(match => match[1]) - .reduce(unique, []) - .map((documentId, i) => [ - // these are truncated document ids; also match the full document id - new RegExp(documentId.slice(0, 5) + "\\w*", "g"), - `DOC-${i + 1}`, - ]), - - // Tokenize remaining hashes - [/\b(?=\w*\d)((?:\w|-){10,})\b/g, tokenize], - - // Remove buffers - [/(|$))/gm, "..."], - [/({\s*0:[0-9:,]+})|\[(\s|\d|,)+\d+?(]|$)/gm, "..."], - [/\s*(([0-9]+,)\s+){4,}(\.\.\. \d+ more items)?\s*/g, "..."], - - [/\[Object]/gi, "{...}"], - [/\[Array]/gi, "[...]"], - - // emoji - [/noise/gi, "🐒"], - [/alice/gi, "👩🏾"], - [/bob/gi, "👨‍🦲"], - [/charlie/gi, "👳🏽‍♂️"], - [/dwight/gi, "👴"], - [/eve/gi, "🦹"], - [/herb/gi, "🤓"], - [/ritika/gi, "🥷"], - [/laptop/gi, "💻"], - [/localhost/gi, "🤖"], - [/phone/gi, "📱"], - - [/(\bconnected\b)/gi, " ✅ $1"], - [/(\bpassed\b)/gi, " ✅ $1"], - [/(\bdisconnected\b)/gi, " ❌ $1"], - [/(\berror\b)/gi, " ❌ $1"], - - // Collapse whitespace - [/( |\t)+/g, " "], - [/^\s+/gm, ""], - [/\s+$/gm, ""], - - // Replace prefixes with short fixed-length versions - ...prefixes.map(([prefix, replacement]) => [ - new RegExp(prefix, "gm"), - replacement.padEnd(prefixColWidth) + " | ", - ]), - ] - return transforms.reduce((acc, [rx, replacement]) => acc.replaceAll(rx, replacement), output) -} - -// reduce to unique values -function unique(acc, x) { - if (!acc.includes(x)) acc.push(x) - return acc -} diff --git a/scripts/flaky.js b/scripts/flaky.js deleted file mode 100644 index c775b4d6..00000000 --- a/scripts/flaky.js +++ /dev/null @@ -1,107 +0,0 @@ -import { exec as _exec } from "child_process" -import fs from "fs" -import path from "path" -import { fileURLToPath } from "url" -import { promisify } from "util" - -/* - sample usage: - - node ./scripts/flaky.js "pnpm test:pw -g 'uses an invitation'" - # runs the provided test command until we have one success and one failure; then cleans up the logs and outputs good.txt and bad.txt - - node ./scripts/flaky.js -r - # reuses the last test run, reprocesses the logs and reoutputs good.txt and bad.txt (useful for tweaking the cleanup function without having to wait for tests to rerun) - - */ - -const exec = promisify(_exec) - -// ensure outputDir exists -const __dirname = fileURLToPath(new URL(".", import.meta.url)) -const outputDir = path.join(__dirname, "..", "logs") -if (!fs.existsSync(outputDir)) fs.mkdirSync(outputDir) - -const cmd = process.argv[2] - -// option to reuse the last test run -const flag = process.argv[3] -const reuse = flag === "-r" || flag === "--reuse" - -const output = { - good: undefined, - bad: undefined, -} -const maxRuns = 25 // don't keep trying forever - -// collect good & bad test logs -if (reuse) { - console.log("Reusing the last test run") - output.good = readFile("good.raw.txt") - output.bad = readFile("bad.raw.txt") -} else { - console.log("") - console.log("Running test until we have one success and one failure") - console.log("") - - for (let i = 0; i < maxRuns; i++) { - const passed = await runTest() - const report = readFile("log.txt") - - if (passed) { - console.log("✅") - writeFile("good.raw.txt", report) - output.good = report - } else { - console.log("❌") - writeFile("bad.raw.txt", report) - output.bad = report - } - - // once we have one of each we can continue - if (output.bad && output.good) break - } -} - -console.log("") - -if (!output.good) { - console.log(`Test did not pass after ${maxRuns} runs`) - process.exit(1) -} - -if (!output.bad) { - console.log(`Test did not fail after ${maxRuns} runs`) - process.exit(1) -} - -// clean up both sets of logs and output good.txt and bad.txt -for (const key in output) { - console.log(`Writing ${key}.txt `) - await exec(`cat logs/${key}.raw.txt | node ./scripts/clean-log.js > logs/${key}.txt`) -} - -await exec(`code -d logs/good.txt logs/bad.txt`) - -// HELPERS - -async function runTest() { - try { - // pipe stdout and stderr to log.txt - await exec(`${cmd} &> ${outputDir}/log.txt`) - // test passed - return true - } catch (error) { - // test failed (we still got the output) - return false - } -} - -function readFile(filename) { - return fs.readFileSync(path.join(outputDir, filename), "utf8") -} - -function writeFile(filename, content) { - const stringified = typeof content === "string" ? content : JSON.stringify(content) - fs.writeFileSync(path.join(outputDir, filename), stringified) -} diff --git a/scripts/link-local.js b/scripts/link-local.js deleted file mode 100644 index 2fd3c29a..00000000 --- a/scripts/link-local.js +++ /dev/null @@ -1,66 +0,0 @@ -import chalk from "chalk" -import { execSync } from "child_process" -import { rmSync } from "fs" -import { parseArgs } from "node:util" -import { dirname, join } from "path" -import { exit } from "process" -import { fileURLToPath } from "url" - -const remotePackages = [ - "@localfirst/auth", - "@localfirst/auth-provider-automerge-repo", - "@localfirst/auth-syncserver", - "@localfirst/crdx", - "@localfirst/crypto", - "@localfirst/shared", - "@automerge/automerge-repo", - "@automerge/automerge-repo-network-broadcastchannel", - "@automerge/automerge-repo-network-websocket", - "@automerge/automerge-repo-react-hooks", - "@automerge/automerge-repo-storage-indexeddb", - "@automerge/automerge-repo-storage-nodefs", -] - -const args = parseArgs({ - options: { unlink: { type: "boolean" }, include: { type: "string", multiple: true } }, -}) - -const { unlink: isUnlink, include } = args.values -const packagesToChange = - include ? - remotePackages.filter(packageName => - include.some(includeString => packageName.includes(includeString)), - ) - : remotePackages - -if (packagesToChange.length === 0) { - log(chalk.yellow("No packages to change... is your 'include' correct?"), "") - exit(1) -} - -log( - chalk.yellow( - `${isUnlink ? "Unlinking from" : "Linking to"} local automerge-repo and localfirst/auth packages:`, - ...packagesToChange, - ), -) - -run("pnpm install") -run(`pnpm ${isUnlink ? "unlink" : "link"} --global ${packagesToChange.join(" ")}`) - -// wipe the vite cache so it looks for the newly linked/unlinked dependencies -const __filename = fileURLToPath(import.meta.url) -try { - rmSync(join(dirname(__filename), "..", "node_modules", ".vite"), { recursive: true }) -} catch { - // ignore errors -} - -function log(...lines) { - console.log([""].concat(lines).join("\n")) -} - -function run(cmd) { - log(chalk.dim(`> ${cmd}`), "") - execSync(cmd, { stdio: "inherit" }) -} diff --git a/scripts/run.cjs b/scripts/run.cjs deleted file mode 100644 index 1ddbfe64..00000000 --- a/scripts/run.cjs +++ /dev/null @@ -1,2 +0,0 @@ -// I'm here so Azure can run the sync server on a Windows box -import("./syncserver.js") diff --git a/scripts/syncserver.js b/scripts/syncserver.js deleted file mode 100644 index e705adae..00000000 --- a/scripts/syncserver.js +++ /dev/null @@ -1,15 +0,0 @@ -import fs from "fs" -import { LocalFirstAuthSyncServer } from "@localfirst/auth-syncserver" - -const storageDir = ".dev-sync-server-data" - -// in development, clear stored data on startup -if (process.env.NODE_ENV === "development") fs.rmSync(storageDir, { force: true, recursive: true }) - -const DEFAULT_PORT = 3030 -const port = Number(process.env.PORT) || DEFAULT_PORT -const host = process.env.HOST || "localhost" - -const server = new LocalFirstAuthSyncServer(host) - -server.listen({ port, storageDir }) From b5e1566b51c606e3b562aa1aa3eb49eb4637bb77 Mon Sep 17 00:00:00 2001 From: Nathan Gerhart Date: Thu, 13 Mar 2025 15:44:28 -0600 Subject: [PATCH 18/19] Packages: upgrade many This gets the build working on my local machine :) --- package.json | 52 +- pnpm-lock.yaml | 3173 ++++++++++++++++++++++++++++++++++-------------- vite.config.ts | 5 +- 3 files changed, 2259 insertions(+), 971 deletions(-) diff --git a/package.json b/package.json index 9139cc5f..4d613b4c 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "lint": "xo", "preinstall": "npx only-allow pnpm", "preview": "vite preview --port 3000", - "start": "npx sirv-cli build/client/ --single --port 3000", + "start": "vite preview --port 3000 --host --open", "start:storybook": "http-server storybook-static/ --port 6006 -os", "storybook": "storybook dev -p 6006", "test": "vitest", @@ -55,9 +55,9 @@ "@radix-ui/react-slot": "^1.0.2", "@radix-ui/react-tabs": "^1.1.1", "@radix-ui/react-tooltip": "^1.1.6", - "@react-router/node": "^7.0.0", + "@react-router/node": "^7.2.0", "@react-router/remix-routes-option-adapter": "^7.2.0", - "@storybook/manager-api": "^8.5.8", + "@storybook/manager-api": "^8.6.4", "@svgr/core": "^8.1.0", "@svgr/plugin-jsx": "^8.1.0", "@uidotdev/usehooks": "^2.4.1", @@ -66,15 +66,15 @@ "clsx": "^2.1.0", "csv-parse": "^5.5.5", "debug": "^4.3.4", - "effect": "^3.12.11", - "isbot": "^5", + "effect": "^3.13.10", + "isbot": "^5.1.23", "react": "^18.2.0", "react-dom": "^18.2.0", "react-hook-form": "^7.51.3", "react-hotkeys-hook": "^4.5.0", "react-json-view-lite": "^2.0.1", "react-qr-code": "^2.0.12", - "react-router": "^7.0.0", + "react-router": "^7.2.0", "react-textarea-autosize": "^8.5.3", "remix-flat-routes": "^0.6.4", "tailwind-merge": "^2.2.1", @@ -85,22 +85,24 @@ "unplugin-icons": "^0.18.5", "usehooks-ts": "^3.1.0", "vaul": "^0.9.0", - "workbox-core": "^7.0.0", - "workbox-precaching": "^7.0.0", - "workbox-routing": "^7.0.0", - "workbox-strategies": "^7.0.0", + "workbox-build": "^7.3.0", + "workbox-core": "^7.3.0", + "workbox-precaching": "^7.3.0", + "workbox-routing": "^7.3.0", + "workbox-strategies": "^7.3.0", + "workbox-window": "7.3.0", "zod": "^3.22.4" }, "devDependencies": { "@esbuild-plugins/node-globals-polyfill": "^0.2.3", - "@react-router/dev": "^7.0.0", - "@storybook/addon-essentials": "^8.5.8", - "@storybook/addon-interactions": "^8.5.8", - "@storybook/addon-links": "^8.5.8", - "@storybook/blocks": "^8.5.8", - "@storybook/react": "^8.5.8", - "@storybook/react-vite": "^8.5.8", - "@storybook/test": "^8.5.8", + "@react-router/dev": "^7.2.0", + "@storybook/addon-essentials": "^8.6.4", + "@storybook/addon-interactions": "^8.6.4", + "@storybook/addon-links": "^8.6.4", + "@storybook/blocks": "^8.6.4", + "@storybook/react": "^8.6.4", + "@storybook/react-vite": "^8.6.4", + "@storybook/test": "^8.6.4", "@tailwindcss/forms": "^0.5.7", "@types/debug": "^4.1.12", "@types/node": "^20.11.27", @@ -126,18 +128,18 @@ "postcss": "^8.4.35", "prettier": "^3.2.5", "prettier-plugin-tailwindcss": "^0.5.12", - "storybook": "^8.5.8", + "storybook": "^8.6.4", "storybook-addon-remix-react-router": "^4.0.1", "tailwindcss": "^3.4.3", "ts-node": "^10.9.2", "typescript": "^5.6.3", - "unplugin-auto-import": "^0.17.5", - "vite": "5.1.4", - "vite-plugin-pwa": "^0.19.3", + "unplugin-auto-import": "^19.1.1", + "vite": "5.4.11", + "vite-plugin-pwa": "^0.21.1", "vite-plugin-top-level-await": "^1.5.0", - "vite-plugin-wasm": "^3.3.0", - "vite-tsconfig-paths": "^4.3.2", - "vitest": "^1.5.0", + "vite-plugin-wasm": "^3.4.1", + "vite-tsconfig-paths": "^5.1.4", + "vitest": "^3.0.8", "xo": "^0.58.0" }, "engines": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 47f38e25..deaf92af 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -86,13 +86,13 @@ importers: specifier: ^1.1.6 version: 1.1.6(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@react-router/node': - specifier: ^7.0.0 + specifier: ^7.2.0 version: 7.2.0(react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.6.3) '@react-router/remix-routes-option-adapter': specifier: ^7.2.0 - version: 7.2.0(@react-router/dev@7.2.0(@types/node@20.11.27)(react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(sass@1.85.1)(terser@5.36.0)(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)))(typescript@5.6.3) + version: 7.2.0(@react-router/dev@7.2.0(@types/node@20.11.27)(react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(sass@1.85.1)(terser@5.39.0)(typescript@5.6.3)(vite@5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0)))(typescript@5.6.3) '@storybook/manager-api': - specifier: ^8.5.8 + specifier: ^8.6.4 version: 8.6.4(storybook@8.6.4(prettier@3.2.5)) '@svgr/core': specifier: ^8.1.0 @@ -119,10 +119,10 @@ importers: specifier: ^4.3.4 version: 4.3.4 effect: - specifier: ^3.12.11 + specifier: ^3.13.10 version: 3.13.10 isbot: - specifier: ^5 + specifier: ^5.1.23 version: 5.1.23 react: specifier: ^18.2.0 @@ -143,14 +143,14 @@ importers: specifier: ^2.0.12 version: 2.0.12(react@18.2.0) react-router: - specifier: ^7.0.0 + specifier: ^7.2.0 version: 7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-textarea-autosize: specifier: ^8.5.3 version: 8.5.3(@types/react@18.2.66)(react@18.2.0) remix-flat-routes: specifier: ^0.6.4 - version: 0.6.4(@remix-run/dev@2.8.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))) + version: 0.6.4(@remix-run/dev@2.8.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0))) tailwind-merge: specifier: ^2.2.1 version: 2.2.1 @@ -175,18 +175,24 @@ importers: vaul: specifier: ^0.9.0 version: 0.9.0(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + workbox-build: + specifier: ^7.3.0 + version: 7.3.0(@types/babel__core@7.20.5) workbox-core: - specifier: ^7.0.0 - version: 7.0.0 + specifier: ^7.3.0 + version: 7.3.0 workbox-precaching: - specifier: ^7.0.0 - version: 7.0.0 + specifier: ^7.3.0 + version: 7.3.0 workbox-routing: - specifier: ^7.0.0 - version: 7.0.0 + specifier: ^7.3.0 + version: 7.3.0 workbox-strategies: - specifier: ^7.0.0 - version: 7.0.0 + specifier: ^7.3.0 + version: 7.3.0 + workbox-window: + specifier: 7.3.0 + version: 7.3.0 zod: specifier: ^3.22.4 version: 3.22.4 @@ -195,28 +201,28 @@ importers: specifier: ^0.2.3 version: 0.2.3(esbuild@0.20.1) '@react-router/dev': - specifier: ^7.0.0 - version: 7.2.0(@types/node@20.11.27)(react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(sass@1.85.1)(terser@5.36.0)(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)) + specifier: ^7.2.0 + version: 7.2.0(@types/node@20.11.27)(react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(sass@1.85.1)(terser@5.39.0)(typescript@5.6.3)(vite@5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0)) '@storybook/addon-essentials': - specifier: ^8.5.8 + specifier: ^8.6.4 version: 8.6.4(@types/react@18.2.66)(storybook@8.6.4(prettier@3.2.5)) '@storybook/addon-interactions': - specifier: ^8.5.8 + specifier: ^8.6.4 version: 8.6.4(storybook@8.6.4(prettier@3.2.5)) '@storybook/addon-links': - specifier: ^8.5.8 + specifier: ^8.6.4 version: 8.6.4(react@18.2.0)(storybook@8.6.4(prettier@3.2.5)) '@storybook/blocks': - specifier: ^8.5.8 + specifier: ^8.6.4 version: 8.6.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.4(prettier@3.2.5)) '@storybook/react': - specifier: ^8.5.8 + specifier: ^8.6.4 version: 8.6.4(@storybook/test@8.6.4(storybook@8.6.4(prettier@3.2.5)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.4(prettier@3.2.5))(typescript@5.6.3) '@storybook/react-vite': - specifier: ^8.5.8 - version: 8.6.4(@storybook/test@8.6.4(storybook@8.6.4(prettier@3.2.5)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.25.0)(storybook@8.6.4(prettier@3.2.5))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)) + specifier: ^8.6.4 + version: 8.6.4(@storybook/test@8.6.4(storybook@8.6.4(prettier@3.2.5)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.35.0)(storybook@8.6.4(prettier@3.2.5))(typescript@5.6.3)(vite@5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0)) '@storybook/test': - specifier: ^8.5.8 + specifier: ^8.6.4 version: 8.6.4(storybook@8.6.4(prettier@3.2.5)) '@tailwindcss/forms': specifier: ^0.5.7 @@ -241,7 +247,7 @@ importers: version: 0.7.39 '@vitejs/plugin-react': specifier: ^4.2.1 - version: 4.2.1(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)) + version: 4.2.1(vite@5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0)) autoprefixer: specifier: ^10.4.18 version: 10.4.18(postcss@8.4.35) @@ -294,7 +300,7 @@ importers: specifier: ^0.5.12 version: 0.5.12(prettier@3.2.5) storybook: - specifier: ^8.5.8 + specifier: ^8.6.4 version: 8.6.4(prettier@3.2.5) storybook-addon-remix-react-router: specifier: ^4.0.1 @@ -309,26 +315,26 @@ importers: specifier: ^5.6.3 version: 5.6.3 unplugin-auto-import: - specifier: ^0.17.5 - version: 0.17.5(rollup@4.25.0) + specifier: ^19.1.1 + version: 19.1.1 vite: - specifier: 5.1.4 - version: 5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) + specifier: 5.4.11 + version: 5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0) vite-plugin-pwa: - specifier: ^0.19.3 - version: 0.19.3(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))(workbox-build@7.0.0(@types/babel__core@7.20.5))(workbox-window@7.0.0) + specifier: ^0.21.1 + version: 0.21.1(vite@5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0) vite-plugin-top-level-await: specifier: ^1.5.0 - version: 1.5.0(@swc/helpers@0.5.9)(rollup@4.25.0)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)) + version: 1.5.0(@swc/helpers@0.5.9)(rollup@4.35.0)(vite@5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0)) vite-plugin-wasm: - specifier: ^3.3.0 - version: 3.3.0(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)) + specifier: ^3.4.1 + version: 3.4.1(vite@5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0)) vite-tsconfig-paths: - specifier: ^4.3.2 - version: 4.3.2(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)) + specifier: ^5.1.4 + version: 5.1.4(typescript@5.6.3)(vite@5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0)) vitest: - specifier: ^1.5.0 - version: 1.5.0(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) + specifier: ^3.0.8 + version: 3.0.8(@types/debug@4.1.12)(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0) xo: specifier: ^0.58.0 version: 0.58.0(@types/eslint@9.6.1)(webpack@5.91.0(@swc/core@1.11.9(@swc/helpers@0.5.9))(esbuild@0.20.1)) @@ -381,6 +387,10 @@ packages: resolution: {integrity: sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==} engines: {node: '>=6.9.0'} + '@babel/compat-data@7.26.8': + resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} + engines: {node: '>=6.9.0'} + '@babel/core@7.24.0': resolution: {integrity: sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==} engines: {node: '>=6.9.0'} @@ -393,6 +403,10 @@ packages: resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} engines: {node: '>=6.9.0'} + '@babel/generator@7.26.10': + resolution: {integrity: sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==} + engines: {node: '>=6.9.0'} + '@babel/generator@7.26.2': resolution: {integrity: sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==} engines: {node: '>=6.9.0'} @@ -401,10 +415,6 @@ packages: resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} engines: {node: '>=6.9.0'} - '@babel/helper-builder-binary-assignment-operator-visitor@7.25.9': - resolution: {integrity: sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==} - engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.23.6': resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} engines: {node: '>=6.9.0'} @@ -413,20 +423,30 @@ packages: resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.26.5': + resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} + engines: {node: '>=6.9.0'} + '@babel/helper-create-class-features-plugin@7.25.9': resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-create-regexp-features-plugin@7.25.9': - resolution: {integrity: sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw==} + '@babel/helper-create-class-features-plugin@7.26.9': + resolution: {integrity: sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-create-regexp-features-plugin@7.26.3': + resolution: {integrity: sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-define-polyfill-provider@0.6.2': - resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==} + '@babel/helper-define-polyfill-provider@0.6.3': + resolution: {integrity: sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -478,6 +498,10 @@ packages: resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@7.26.5': + resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} + engines: {node: '>=6.9.0'} + '@babel/helper-remap-async-to-generator@7.25.9': resolution: {integrity: sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==} engines: {node: '>=6.9.0'} @@ -490,6 +514,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-replace-supers@7.26.5': + resolution: {integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-simple-access@7.22.5': resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} @@ -551,6 +581,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.26.10': + resolution: {integrity: sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/parser@7.26.2': resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==} engines: {node: '>=6.0.0'} @@ -598,6 +633,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-decorators@7.25.9': + resolution: {integrity: sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-import-assertions@7.26.0': resolution: {integrity: sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==} engines: {node: '>=6.9.0'} @@ -616,12 +657,24 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-jsx@7.25.9': + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-typescript@7.23.3': resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-typescript@7.25.9': + resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-unicode-sets-regex@7.18.6': resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} @@ -634,8 +687,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-async-generator-functions@7.25.9': - resolution: {integrity: sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==} + '@babel/plugin-transform-async-generator-functions@7.26.8': + resolution: {integrity: sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -646,8 +699,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoped-functions@7.25.9': - resolution: {integrity: sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==} + '@babel/plugin-transform-block-scoped-functions@7.26.5': + resolution: {integrity: sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -712,8 +765,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-exponentiation-operator@7.25.9': - resolution: {integrity: sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==} + '@babel/plugin-transform-exponentiation-operator@7.26.3': + resolution: {integrity: sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -724,8 +777,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-for-of@7.25.9': - resolution: {integrity: sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==} + '@babel/plugin-transform-for-of@7.26.9': + resolution: {integrity: sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -772,6 +825,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-modules-commonjs@7.26.3': + resolution: {integrity: sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-modules-systemjs@7.25.9': resolution: {integrity: sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==} engines: {node: '>=6.9.0'} @@ -796,8 +855,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-nullish-coalescing-operator@7.25.9': - resolution: {integrity: sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==} + '@babel/plugin-transform-nullish-coalescing-operator@7.26.6': + resolution: {integrity: sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -904,14 +963,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-template-literals@7.25.9': - resolution: {integrity: sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==} + '@babel/plugin-transform-template-literals@7.26.8': + resolution: {integrity: sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typeof-symbol@7.25.9': - resolution: {integrity: sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==} + '@babel/plugin-transform-typeof-symbol@7.26.7': + resolution: {integrity: sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -922,6 +981,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-typescript@7.26.8': + resolution: {integrity: sha512-bME5J9AC8ChwA7aEPJ6zym3w7aObZULHhbNLU0bKUhKsAkylkzUdq+0kdymh9rzi8nlNFl2bmldFBCKNJBUpuw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-unicode-escapes@7.25.9': resolution: {integrity: sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==} engines: {node: '>=6.9.0'} @@ -946,8 +1011,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/preset-env@7.26.0': - resolution: {integrity: sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==} + '@babel/preset-env@7.26.9': + resolution: {integrity: sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -963,6 +1028,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/preset-typescript@7.26.0': + resolution: {integrity: sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/runtime@7.24.0': resolution: {integrity: sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==} engines: {node: '>=6.9.0'} @@ -975,6 +1046,10 @@ packages: resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} engines: {node: '>=6.9.0'} + '@babel/runtime@7.26.10': + resolution: {integrity: sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==} + engines: {node: '>=6.9.0'} + '@babel/template@7.24.0': resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} engines: {node: '>=6.9.0'} @@ -983,6 +1058,10 @@ packages: resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} engines: {node: '>=6.9.0'} + '@babel/template@7.26.9': + resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==} + engines: {node: '>=6.9.0'} + '@babel/traverse@7.24.0': resolution: {integrity: sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==} engines: {node: '>=6.9.0'} @@ -991,6 +1070,10 @@ packages: resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} engines: {node: '>=6.9.0'} + '@babel/traverse@7.26.10': + resolution: {integrity: sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==} + engines: {node: '>=6.9.0'} + '@babel/types@7.24.0': resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} engines: {node: '>=6.9.0'} @@ -999,6 +1082,10 @@ packages: resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} engines: {node: '>=6.9.0'} + '@babel/types@7.26.10': + resolution: {integrity: sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==} + engines: {node: '>=6.9.0'} + '@bufbuild/protobuf@2.2.3': resolution: {integrity: sha512-tFQoXHJdkEOSwj5tRIZSPNUuXK3RaR7T1nUrPgbYX1pUbvqqaaZAsfo+NXBPsz5rZMSKVFrgK1WL8Q/MSLvprg==} @@ -1261,6 +1348,9 @@ packages: '@emotion/hash@0.9.1': resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==} + '@emotion/hash@0.9.2': + resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} + '@esbuild-plugins/node-globals-polyfill@0.2.3': resolution: {integrity: sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==} peerDependencies: @@ -1535,10 +1625,6 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} - '@jest/schemas@29.6.3': - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@joshwooding/vite-plugin-react-docgen-typescript@0.5.0': resolution: {integrity: sha512-qYDdL7fPwLRI+bJNurVcis+tNgJmvWjH4YTBGXTA8xMuxFrnAz6E5o35iyzyKbq5J5Lr8mJGfrR5GXl+WGwhgQ==} peerDependencies: @@ -1552,6 +1638,10 @@ packages: resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} @@ -1566,6 +1656,9 @@ packages: '@jridgewell/sourcemap-codec@1.4.15': resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} @@ -1586,8 +1679,8 @@ packages: peerDependencies: '@js-joda/core': '>=1.11.0' - '@jspm/core@2.0.1': - resolution: {integrity: sha512-Lg3PnLp0QXpxwLIAuuJboLeRaIhrgJjeuh797QADg3xz8wGLugQOS5DpsE8A6i6Adgzf+bacllkKZG3J0tGfDw==} + '@jspm/core@2.1.0': + resolution: {integrity: sha512-3sRl+pkyFY/kLmHl0cgHiFp2xEqErA8N3ECjMs7serSUBmoJ70lBa0PG5t0IM6WJgdZNyyI0R8YFfi5wM8+mzg==} '@mdx-js/mdx@2.3.0': resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==} @@ -1629,8 +1722,8 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@npmcli/fs@3.1.0': - resolution: {integrity: sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==} + '@npmcli/fs@3.1.1': + resolution: {integrity: sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} '@npmcli/git@4.1.0': @@ -2949,17 +3042,29 @@ packages: '@types/babel__core': optional: true - '@rollup/plugin-node-resolve@11.2.1': - resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} - engines: {node: '>= 10.0.0'} + '@rollup/plugin-node-resolve@15.3.1': + resolution: {integrity: sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==} + engines: {node: '>=14.0.0'} peerDependencies: rollup: ^4.12.0 + peerDependenciesMeta: + rollup: + optional: true '@rollup/plugin-replace@2.4.2': resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} peerDependencies: rollup: ^4.12.0 + '@rollup/plugin-terser@0.4.4': + resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^4.12.0 + peerDependenciesMeta: + rollup: + optional: true + '@rollup/plugin-virtual@3.0.2': resolution: {integrity: sha512-10monEYsBp3scM4/ND4LNH5Rxvh3e/cVeL3jWTgZ2SrQ+BmUoQcopVQvnaMcOnykb1VkxUFuDAN+0FnpTFRy2A==} engines: {node: '>=14.0.0'} @@ -2984,19 +3089,14 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.13.0': - resolution: {integrity: sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==} - cpu: [arm] - os: [android] - '@rollup/rollup-android-arm-eabi@4.25.0': resolution: {integrity: sha512-CC/ZqFZwlAIbU1wUPisHyV/XRc5RydFrNLtgl3dGYskdwPZdt4HERtKm50a/+DtTlKeCq9IXFEWR+P6blwjqBA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.13.0': - resolution: {integrity: sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==} - cpu: [arm64] + '@rollup/rollup-android-arm-eabi@4.35.0': + resolution: {integrity: sha512-uYQ2WfPaqz5QtVgMxfN6NpLD+no0MYHDBywl7itPYd3K5TjjSghNKmX8ic9S8NU8w81NVhJv/XojcHptRly7qQ==} + cpu: [arm] os: [android] '@rollup/rollup-android-arm64@4.25.0': @@ -3004,19 +3104,19 @@ packages: cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.13.0': - resolution: {integrity: sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==} + '@rollup/rollup-android-arm64@4.35.0': + resolution: {integrity: sha512-FtKddj9XZudurLhdJnBl9fl6BwCJ3ky8riCXjEw3/UIbjmIY58ppWwPEvU3fNu+W7FUsAsB1CdH+7EQE6CXAPA==} cpu: [arm64] - os: [darwin] + os: [android] '@rollup/rollup-darwin-arm64@4.25.0': resolution: {integrity: sha512-YVT6L3UrKTlC0FpCZd0MGA7NVdp7YNaEqkENbWQ7AOVOqd/7VzyHpgIpc1mIaxRAo1ZsJRH45fq8j4N63I/vvg==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.13.0': - resolution: {integrity: sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==} - cpu: [x64] + '@rollup/rollup-darwin-arm64@4.35.0': + resolution: {integrity: sha512-Uk+GjOJR6CY844/q6r5DR/6lkPFOw0hjfOIzVx22THJXMxktXG6CbejseJFznU8vHcEBLpiXKY3/6xc+cBm65Q==} + cpu: [arm64] os: [darwin] '@rollup/rollup-darwin-x64@4.25.0': @@ -3024,34 +3124,49 @@ packages: cpu: [x64] os: [darwin] + '@rollup/rollup-darwin-x64@4.35.0': + resolution: {integrity: sha512-3IrHjfAS6Vkp+5bISNQnPogRAW5GAV1n+bNCrDwXmfMHbPl5EhTmWtfmwlJxFRUCBZ+tZ/OxDyU08aF6NI/N5Q==} + cpu: [x64] + os: [darwin] + '@rollup/rollup-freebsd-arm64@4.25.0': resolution: {integrity: sha512-xpEIXhiP27EAylEpreCozozsxWQ2TJbOLSivGfXhU4G1TBVEYtUPi2pOZBnvGXHyOdLAUUhPnJzH3ah5cqF01g==} cpu: [arm64] os: [freebsd] + '@rollup/rollup-freebsd-arm64@4.35.0': + resolution: {integrity: sha512-sxjoD/6F9cDLSELuLNnY0fOrM9WA0KrM0vWm57XhrIMf5FGiN8D0l7fn+bpUeBSU7dCgPV2oX4zHAsAXyHFGcQ==} + cpu: [arm64] + os: [freebsd] + '@rollup/rollup-freebsd-x64@4.25.0': resolution: {integrity: sha512-sC5FsmZGlJv5dOcURrsnIK7ngc3Kirnx3as2XU9uER+zjfyqIjdcMVgzy4cOawhsssqzoAX19qmxgJ8a14Qrqw==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.13.0': - resolution: {integrity: sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==} - cpu: [arm] - os: [linux] + '@rollup/rollup-freebsd-x64@4.35.0': + resolution: {integrity: sha512-2mpHCeRuD1u/2kruUiHSsnjWtHjqVbzhBkNVQ1aVD63CcexKVcQGwJ2g5VphOd84GvxfSvnnlEyBtQCE5hxVVw==} + cpu: [x64] + os: [freebsd] '@rollup/rollup-linux-arm-gnueabihf@4.25.0': resolution: {integrity: sha512-uD/dbLSs1BEPzg564TpRAQ/YvTnCds2XxyOndAO8nJhaQcqQGFgv/DAVko/ZHap3boCvxnzYMa3mTkV/B/3SWA==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-gnueabihf@4.35.0': + resolution: {integrity: sha512-mrA0v3QMy6ZSvEuLs0dMxcO2LnaCONs1Z73GUDBHWbY8tFFocM6yl7YyMu7rz4zS81NDSqhrUuolyZXGi8TEqg==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.25.0': resolution: {integrity: sha512-ZVt/XkrDlQWegDWrwyC3l0OfAF7yeJUF4fq5RMS07YM72BlSfn2fQQ6lPyBNjt+YbczMguPiJoCfaQC2dnflpQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.13.0': - resolution: {integrity: sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==} - cpu: [arm64] + '@rollup/rollup-linux-arm-musleabihf@4.35.0': + resolution: {integrity: sha512-DnYhhzcvTAKNexIql8pFajr0PiDGrIsBYPRvCKlA5ixSS3uwo/CWNZxB09jhIapEIg945KOzcYEAGGSmTSpk7A==} + cpu: [arm] os: [linux] '@rollup/rollup-linux-arm64-gnu@4.25.0': @@ -3059,8 +3174,8 @@ packages: cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.13.0': - resolution: {integrity: sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==} + '@rollup/rollup-linux-arm64-gnu@4.35.0': + resolution: {integrity: sha512-uagpnH2M2g2b5iLsCTZ35CL1FgyuzzJQ8L9VtlJ+FckBXroTwNOaD0z0/UF+k5K3aNQjbm8LIVpxykUOQt1m/A==} cpu: [arm64] os: [linux] @@ -3069,14 +3184,24 @@ packages: cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-musl@4.35.0': + resolution: {integrity: sha512-XQxVOCd6VJeHQA/7YcqyV0/88N6ysSVzRjJ9I9UA/xXpEsjvAgDTgH3wQYz5bmr7SPtVK2TsP2fQ2N9L4ukoUg==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.35.0': + resolution: {integrity: sha512-5pMT5PzfgwcXEwOaSrqVsz/LvjDZt+vQ8RT/70yhPU06PTuq8WaHhfT1LW+cdD7mW6i/J5/XIkX/1tCAkh1W6g==} + cpu: [loong64] + os: [linux] + '@rollup/rollup-linux-powerpc64le-gnu@4.25.0': resolution: {integrity: sha512-BVSQvVa2v5hKwJSy6X7W1fjDex6yZnNKy3Kx1JGimccHft6HV0THTwNtC2zawtNXKUu+S5CjXslilYdKBAadzA==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.13.0': - resolution: {integrity: sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==} - cpu: [riscv64] + '@rollup/rollup-linux-powerpc64le-gnu@4.35.0': + resolution: {integrity: sha512-c+zkcvbhbXF98f4CtEIP1EBA/lCic5xB0lToneZYvMeKu5Kamq3O8gqrxiYYLzlZH6E3Aq+TSW86E4ay8iD8EA==} + cpu: [ppc64] os: [linux] '@rollup/rollup-linux-riscv64-gnu@4.25.0': @@ -3084,14 +3209,19 @@ packages: cpu: [riscv64] os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.35.0': + resolution: {integrity: sha512-s91fuAHdOwH/Tad2tzTtPX7UZyytHIRR6V4+2IGlV0Cej5rkG0R61SX4l4y9sh0JBibMiploZx3oHKPnQBKe4g==} + cpu: [riscv64] + os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.25.0': resolution: {integrity: sha512-9T/w0kQ+upxdkFL9zPVB6zy9vWW1deA3g8IauJxojN4bnz5FwSsUAD034KpXIVX5j5p/rn6XqumBMxfRkcHapQ==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.13.0': - resolution: {integrity: sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==} - cpu: [x64] + '@rollup/rollup-linux-s390x-gnu@4.35.0': + resolution: {integrity: sha512-hQRkPQPLYJZYGP+Hj4fR9dDBMIM7zrzJDWFEMPdTnTy95Ljnv0/4w/ixFw3pTBMEuuEuoqtBINYND4M7ujcuQw==} + cpu: [s390x] os: [linux] '@rollup/rollup-linux-x64-gnu@4.25.0': @@ -3099,8 +3229,8 @@ packages: cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.13.0': - resolution: {integrity: sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==} + '@rollup/rollup-linux-x64-gnu@4.35.0': + resolution: {integrity: sha512-Pim1T8rXOri+0HmV4CdKSGrqcBWX0d1HoPnQ0uw0bdp1aP5SdQVNBy8LjYncvnLgu3fnnCt17xjWGd4cqh8/hA==} cpu: [x64] os: [linux] @@ -3109,19 +3239,19 @@ packages: cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.13.0': - resolution: {integrity: sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==} - cpu: [arm64] - os: [win32] + '@rollup/rollup-linux-x64-musl@4.35.0': + resolution: {integrity: sha512-QysqXzYiDvQWfUiTm8XmJNO2zm9yC9P/2Gkrwg2dH9cxotQzunBHYr6jk4SujCTqnfGxduOmQcI7c2ryuW8XVg==} + cpu: [x64] + os: [linux] '@rollup/rollup-win32-arm64-msvc@4.25.0': resolution: {integrity: sha512-JT8tcjNocMs4CylWY/CxVLnv8e1lE7ff1fi6kbGocWwxDq9pj30IJ28Peb+Y8yiPNSF28oad42ApJB8oUkwGww==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.13.0': - resolution: {integrity: sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==} - cpu: [ia32] + '@rollup/rollup-win32-arm64-msvc@4.35.0': + resolution: {integrity: sha512-OUOlGqPkVJCdJETKOCEf1mw848ZyJ5w50/rZ/3IBQVdLfR5jk/6Sr5m3iO2tdPgwo0x7VcncYuOvMhBWZq8ayg==} + cpu: [arm64] os: [win32] '@rollup/rollup-win32-ia32-msvc@4.25.0': @@ -3129,9 +3259,9 @@ packages: cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.13.0': - resolution: {integrity: sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==} - cpu: [x64] + '@rollup/rollup-win32-ia32-msvc@4.35.0': + resolution: {integrity: sha512-2/lsgejMrtwQe44glq7AFFHLfJBPafpsTa6JvP2NGef/ifOa4KBoglVf7AKN7EV9o32evBPRqfg96fEHzWo5kw==} + cpu: [ia32] os: [win32] '@rollup/rollup-win32-x64-msvc@4.25.0': @@ -3139,8 +3269,10 @@ packages: cpu: [x64] os: [win32] - '@sinclair/typebox@0.27.8': - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + '@rollup/rollup-win32-x64-msvc@4.35.0': + resolution: {integrity: sha512-PIQeY5XDkrOysbQblSW7v3l1MDZzkTEzAfTPkj5VAu3FW8fS4ynyLg2sINp0fp3SjZ8xkRYpLqoKcYqAkhU1dw==} + cpu: [x64] + os: [win32] '@sindresorhus/merge-streams@2.3.0': resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} @@ -3594,6 +3726,9 @@ packages: '@types/mdx@2.0.11': resolution: {integrity: sha512-HM5bwOaIQJIQbAYfax35HCKxx7a3KrK3nBtIqJgSOitivTD1y3oW9P3rxY9RkXYPUk7y/AjAohfHKmFpGE79zw==} + '@types/mdx@2.0.13': + resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} + '@types/minimatch@5.1.2': resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} @@ -3603,6 +3738,9 @@ packages: '@types/node@20.11.27': resolution: {integrity: sha512-qyUZfMnCg1KEz57r7pzFtSGt49f6RPkPBis3Vo4PbS7roQEDn22hiHzl/Lo1q4i4hDEgBJmBF/NTNg2XR0HbFg==} + '@types/node@20.17.24': + resolution: {integrity: sha512-d7fGCyB96w9BnWQrOsJtpyiSaBcAYYr75bnK6ZRjDbql2cGLj/3GsL5OYmLPNq76l7Gf2q4Rv9J2o6h5CrD9sA==} + '@types/node@20.17.6': resolution: {integrity: sha512-VEI7OdvK2wP7XHnsuXbAJnEpEkF6NjSN45QJlL4VGqZSXsnicpesdTWsg9RISeSdYd3yeRj/y3k5KGjUXYnFwQ==} @@ -3621,8 +3759,8 @@ packages: '@types/react@18.2.66': resolution: {integrity: sha512-OYTmMI4UigXeFMF/j4uv0lBBEbongSgptPrHBxqME44h9+yNov+oL6Z3ocJKo0WyXR84sQUNeyIp9MRfckvZpg==} - '@types/resolve@1.17.1': - resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} + '@types/resolve@1.20.2': + resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} '@types/resolve@1.20.6': resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==} @@ -3646,8 +3784,8 @@ packages: '@types/ua-parser-js@0.7.39': resolution: {integrity: sha512-P/oDfpofrdtF5xw433SPALpdSchtJmY7nsJItf8h3KXqOslkbySh8zq4dSWXH2oTjRvJ5PczVEoCZPow6GicLg==} - '@types/unist@2.0.10': - resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} + '@types/unist@2.0.11': + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} '@types/uuid@9.0.8': resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} @@ -3747,17 +3885,17 @@ packages: '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - '@vanilla-extract/babel-plugin-debug-ids@1.0.5': - resolution: {integrity: sha512-Rc9A6ylsw7EBErmpgqCMvc/Z/eEZxI5k1xfLQHw7f5HHh3oc5YfzsAsYU/PdmSNjF1dp3sGEViBdDltvwnfVaA==} + '@vanilla-extract/babel-plugin-debug-ids@1.2.0': + resolution: {integrity: sha512-z5nx2QBnOhvmlmBKeRX5sPVLz437wV30u+GJL+Hzj1rGiJYVNvgIIlzUpRNjVQ0MgAgiQIqIUbqPnmMc6HmDlQ==} - '@vanilla-extract/css@1.14.1': - resolution: {integrity: sha512-V4JUuHNjZgl64NGfkDJePqizkNgiSpphODtZEs4cCPuxLAzwOUJYATGpejwimJr1n529kq4DEKWexW22LMBokw==} + '@vanilla-extract/css@1.17.1': + resolution: {integrity: sha512-tOHQXHm10FrJeXKFeWE09JfDGN/tvV6mbjwoNB9k03u930Vg021vTnbrCwVLkECj9Zvh/SHLBHJ4r2flGqfovw==} '@vanilla-extract/integration@6.5.0': resolution: {integrity: sha512-E2YcfO8vA+vs+ua+gpvy1HRqvgWbI+MTlUpxA8FvatOvybuNcWAY0CKwQ/Gpj7rswYKtC6C7+xw33emM6/ImdQ==} - '@vanilla-extract/private@1.0.3': - resolution: {integrity: sha512-17kVyLq3ePTKOkveHxXuIJZtGYs+cSoev7BlP+Lf4916qfDhk/HBjvlYDe8egrea7LNPHKwSZJK/bzZC+Q6AwQ==} + '@vanilla-extract/private@1.0.6': + resolution: {integrity: sha512-ytsG/JLweEjw7DBuZ/0JCN4WAQgM9erfSTdS1NQY778hFQSZ6cfCDEZZ0sgVm4k54uNz6ImKB33AYvSR//fjxw==} '@vitejs/plugin-react@4.2.1': resolution: {integrity: sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==} @@ -3765,32 +3903,43 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 - '@vitest/expect@1.5.0': - resolution: {integrity: sha512-0pzuCI6KYi2SIC3LQezmxujU9RK/vwC1U9R0rLuGlNGcOuDWxqWKu6nUdFsX9tH1WU0SXtAxToOsEjeUn1s3hA==} - '@vitest/expect@2.0.5': resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} + '@vitest/expect@3.0.8': + resolution: {integrity: sha512-Xu6TTIavTvSSS6LZaA3EebWFr6tsoXPetOWNMOlc7LO88QVVBwq2oQWBoDiLCN6YTvNYsGSjqOO8CAdjom5DCQ==} + + '@vitest/mocker@3.0.8': + resolution: {integrity: sha512-n3LjS7fcW1BCoF+zWZxG7/5XvuYH+lsFg+BDwwAz0arIwHQJFUEsKBQ0BLU49fCxuM/2HSeBPHQD8WjgrxMfow==} + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + '@vitest/pretty-format@2.0.5': resolution: {integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==} '@vitest/pretty-format@2.1.4': resolution: {integrity: sha512-L95zIAkEuTDbUX1IsjRl+vyBSLh3PwLLgKpghl37aCK9Jvw0iP+wKwIFhfjdUtA2myLgjrG6VU6JCFLv8q/3Ww==} - '@vitest/runner@1.5.0': - resolution: {integrity: sha512-7HWwdxXP5yDoe7DTpbif9l6ZmDwCzcSIK38kTSIt6CFEpMjX4EpCgT6wUmS0xTXqMI6E/ONmfgRKmaujpabjZQ==} + '@vitest/pretty-format@3.0.8': + resolution: {integrity: sha512-BNqwbEyitFhzYMYHUVbIvepOyeQOSFA/NeJMIP9enMntkkxLgOcgABH6fjyXG85ipTgvero6noreavGIqfJcIg==} - '@vitest/snapshot@1.5.0': - resolution: {integrity: sha512-qpv3fSEuNrhAO3FpH6YYRdaECnnRjg9VxbhdtPwPRnzSfHVXnNzzrpX4cJxqiwgRMo7uRMWDFBlsBq4Cr+rO3A==} + '@vitest/runner@3.0.8': + resolution: {integrity: sha512-c7UUw6gEcOzI8fih+uaAXS5DwjlBaCJUo7KJ4VvJcjL95+DSR1kova2hFuRt3w41KZEFcOEiq098KkyrjXeM5w==} - '@vitest/spy@1.5.0': - resolution: {integrity: sha512-vu6vi6ew5N5MMHJjD5PoakMRKYdmIrNJmyfkhRpQt5d9Ewhw9nZ5Aqynbi3N61bvk9UvZ5UysMT6ayIrZ8GA9w==} + '@vitest/snapshot@3.0.8': + resolution: {integrity: sha512-x8IlMGSEMugakInj44nUrLSILh/zy1f2/BgH0UeHpNyOocG18M9CWVIFBaXPt8TrqVZWmcPjwfG/ht5tnpba8A==} '@vitest/spy@2.0.5': resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==} - '@vitest/utils@1.5.0': - resolution: {integrity: sha512-BDU0GNL8MWkRkSRdNFvCUCAVOeHaUlVJ9Tx0TYBZyXaaOTmGtUFObzchCivIBrIwKzvZA7A9sCejVhXM2aY98A==} + '@vitest/spy@3.0.8': + resolution: {integrity: sha512-MR+PzJa+22vFKYb934CejhR4BeRpMSoxkvNoDit68GQxRLSf11aT6CTj3XaqUU9rxgWJFnqicN/wxw6yBRkI1Q==} '@vitest/utils@2.0.5': resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==} @@ -3798,6 +3947,9 @@ packages: '@vitest/utils@2.1.4': resolution: {integrity: sha512-MXDnZn0Awl2S86PSNIim5PWXgIAx8CIkzu35mBdSApUip6RFOGXBCf3YFyeEu8n1IHk4bWD46DeYFu9mQlFIRg==} + '@vitest/utils@3.0.8': + resolution: {integrity: sha512-nkBC3aEhfX2PdtQI/QwAWp8qZWwzASsU4Npbcd5RdMPBSSLCpkZp52P3xku3s3uA0HIEhGvEcF8rNkBsz9dQ4Q==} + '@web3-storage/multipart-parser@1.0.0': resolution: {integrity: sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw==} @@ -3904,15 +4056,33 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.14.1: + resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} + engines: {node: '>=0.4.0'} + hasBin: true + aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} + ajv-formats@2.1.1: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + ajv-keywords@3.5.2: resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} peerDependencies: ajv: ^6.9.1 + ajv-keywords@5.1.0: + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} + peerDependencies: + ajv: ^8.8.2 + ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} @@ -3977,6 +4147,10 @@ packages: resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} engines: {node: '>= 0.4'} + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} @@ -4021,6 +4195,10 @@ packages: resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} engines: {node: '>= 0.4'} + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + arrify@3.0.0: resolution: {integrity: sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==} engines: {node: '>=12'} @@ -4028,9 +4206,6 @@ packages: assert@2.1.0: resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} - assertion-error@1.1.0: - resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} - assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} @@ -4039,10 +4214,14 @@ packages: resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} engines: {node: '>=4'} - astring@1.8.6: - resolution: {integrity: sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==} + astring@1.9.0: + resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} hasBin: true + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + async@3.2.6: resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} @@ -4070,18 +4249,18 @@ packages: babel-dead-code-elimination@1.0.9: resolution: {integrity: sha512-JLIhax/xullfInZjtu13UJjaLHDeTzt3vOeomaSUdO/nAMEL/pWC/laKrSvWylXMnVWyL5bpmG9njqBZlUQOdg==} - babel-plugin-polyfill-corejs2@0.4.11: - resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==} + babel-plugin-polyfill-corejs2@0.4.12: + resolution: {integrity: sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-polyfill-corejs3@0.10.6: - resolution: {integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==} + babel-plugin-polyfill-corejs3@0.11.1: + resolution: {integrity: sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-polyfill-regenerator@0.6.2: - resolution: {integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==} + babel-plugin-polyfill-regenerator@0.6.3: + resolution: {integrity: sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -4127,8 +4306,8 @@ packages: blake2b@2.1.4: resolution: {integrity: sha512-AyBuuJNI64gIvwx13qiICz6H6hpmjvYS5DGkG6jbXMOT8Z3WUJ3V1X0FlhIoT1b/5JtHE3ki+xjtMvu1nn+t9A==} - body-parser@1.20.2: - resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} + body-parser@1.20.3: + resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} boolean@3.2.0: @@ -4164,6 +4343,11 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + browserslist@4.24.4: + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + bs58@5.0.0: resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} @@ -4244,6 +4428,9 @@ packages: caniuse-lite@1.0.30001680: resolution: {integrity: sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==} + caniuse-lite@1.0.30001704: + resolution: {integrity: sha512-+L2IgBbV6gXB4ETf0keSvLr7JUrRVbIaB/lrQ1+z8mRcQiisG5k+lG6O4n6Y5q6f5EuNfaYXKgymucphlEXQew==} + catering@2.1.1: resolution: {integrity: sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==} engines: {node: '>=6'} @@ -4261,14 +4448,14 @@ packages: chacha20-universal@1.0.4: resolution: {integrity: sha512-/IOxdWWNa7nRabfe7+oF+jVkGjlr2xUL4J8l/OvzZhj+c9RpMqoo3Dq+5nU1j/BflRV4BKnaQ4+4oH1yBpQG1Q==} - chai@4.4.1: - resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} - engines: {node: '>=4'} - chai@5.1.2: resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} engines: {node: '>=12'} + chai@5.2.0: + resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} + engines: {node: '>=12'} + chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -4297,9 +4484,6 @@ packages: character-reference-invalid@2.0.1: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} - check-error@1.0.3: - resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} - check-error@2.1.1: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} @@ -4412,6 +4596,12 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + confbox@0.2.1: + resolution: {integrity: sha512-hkT3yDPFbs95mNCy1+7qNKC6Pro+/ibzYxtM2iqEigpf0sVw+bg4Zh9/snjsBcf990vfIsg5+1U7VyiyBb3etg==} + confusing-browser-globals@1.0.11: resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} @@ -4429,18 +4619,18 @@ packages: cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - cookie-signature@1.2.1: - resolution: {integrity: sha512-78KWk9T26NhzXtuL26cIJ8/qNHANyJ/ZYrmEXFzUmhZdjpBv+DlWlOANRTGBt48YcyslsLrj0bMLFTmXvLRCOw==} + cookie-signature@1.2.2: + resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} engines: {node: '>=6.6.0'} - cookie@0.5.0: - resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} - engines: {node: '>= 0.6'} - cookie@0.6.0: resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} + cookie@0.7.1: + resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} + engines: {node: '>= 0.6'} + cookie@1.0.2: resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} engines: {node: '>=18'} @@ -4448,8 +4638,8 @@ packages: core-js-compat@3.36.1: resolution: {integrity: sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA==} - core-js-compat@3.39.0: - resolution: {integrity: sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==} + core-js-compat@3.41.0: + resolution: {integrity: sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==} core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -4488,6 +4678,10 @@ packages: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + crypto-random-string@2.0.0: resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} engines: {node: '>=8'} @@ -4518,14 +4712,26 @@ packages: resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} engines: {node: '>= 0.4'} + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + data-view-byte-length@1.0.1: resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} engines: {node: '>= 0.4'} + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + data-view-byte-offset@1.0.0: resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} engines: {node: '>= 0.4'} + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} + date-fns@3.6.0: resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==} @@ -4572,8 +4778,8 @@ packages: supports-color: optional: true - decode-named-character-reference@1.0.2: - resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + decode-named-character-reference@1.1.0: + resolution: {integrity: sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==} decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} @@ -4587,10 +4793,6 @@ packages: babel-plugin-macros: optional: true - deep-eql@4.1.3: - resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} - engines: {node: '>=6'} - deep-eql@5.0.2: resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} engines: {node: '>=6'} @@ -4659,10 +4861,6 @@ packages: didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} @@ -4695,8 +4893,8 @@ packages: dot-case@3.0.4: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} - dotenv@16.4.5: - resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + dotenv@16.4.7: + resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} engines: {node: '>=12'} dunder-proto@1.0.1: @@ -4723,6 +4921,9 @@ packages: electron-to-chromium@1.4.705: resolution: {integrity: sha512-LKqhpwJCLhYId2VVwEzFXWrqQI5n5zBppz1W9ehhTlfYU8CUUW6kClbN8LHF/v7flMgRdETS772nqywJ+ckVAw==} + electron-to-chromium@1.5.117: + resolution: {integrity: sha512-G4+CYIJBiQ72N0gi868tmG4WsD8bwLE9XytBdfgXO5zdlTlvOP2ABzWYILYxCIHmsbm2HjBSgm/E/H/QfcnIyQ==} + electron-to-chromium@1.5.55: resolution: {integrity: sha512-6maZ2ASDOTBtjt9FhqYPRnbvKU5tjG0IN9SztUOWYw2AzNDNpKJYLJmlK0/En4Hs/aiWnB+JZ+gW19PIGszgKg==} @@ -4746,6 +4947,10 @@ packages: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} @@ -4757,8 +4962,8 @@ packages: resolution: {integrity: sha512-kxpoMgrdtkXZ5h0SeraBS1iRntpTpQ3R8ussdb38+UAFnMGX5DDyJXePm+OCHOcoXvHDw7mc2erbJBpDnl7TPw==} engines: {node: '>=0.6'} - enhanced-resolve@5.17.1: - resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} + enhanced-resolve@5.18.1: + resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} engines: {node: '>=10.13.0'} entities@4.5.0: @@ -4783,6 +4988,10 @@ packages: resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} engines: {node: '>= 0.4'} + es-abstract@1.23.9: + resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} + engines: {node: '>= 0.4'} + es-array-method-boxes-properly@1.0.0: resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} @@ -4805,6 +5014,9 @@ packages: es-module-lexer@1.5.4: resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + es-module-lexer@1.6.0: + resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} + es-object-atoms@1.0.0: resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} engines: {node: '>= 0.4'} @@ -4817,6 +5029,10 @@ packages: resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} engines: {node: '>= 0.4'} + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + es-shim-unscopables@1.0.2: resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} @@ -4824,8 +5040,12 @@ packages: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} - esbuild-plugins-node-modules-polyfill@1.6.3: - resolution: {integrity: sha512-nydQGT3RijD8mBd3Hek+2gSAxndgceZU9GIjYYiqU+7CE7veN8utTmupf0frcKpwIXCXWpRofL9CY9k0yU70CA==} + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + engines: {node: '>= 0.4'} + + esbuild-plugins-node-modules-polyfill@1.7.0: + resolution: {integrity: sha512-Z81w5ReugIBAgufGeGWee+Uxzgs5Na4LprUAK3XlJEh2ktY3LkNuEGMaZyBXxQxGK8SQDS5yKLW5QKGF5qLjYA==} engines: {node: '>=14.0.0'} peerDependencies: esbuild: ^0.20.1 @@ -5174,10 +5394,17 @@ packages: resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} engines: {node: '>=6'} - express@4.18.3: - resolution: {integrity: sha512-6VyCijWQ+9O7WuVMTRBTl+cjNNIzD5cY5mQ1WM8r/LEkI2u8EYpOotESNwzNlyCn3g+dmjKYI6BmNneSr/FSRw==} + expect-type@1.2.0: + resolution: {integrity: sha512-80F22aiJ3GLyVnS/B3HzgR6RelZVumzj9jkL0Rhz4h0xYbNW9PjlQz5h3J/SShErbXBc295vseR4/MIbVmUbeA==} + engines: {node: '>=12.0.0'} + + express@4.21.2: + resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} engines: {node: '>= 0.10.0'} + exsolve@1.0.4: + resolution: {integrity: sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw==} + extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -5207,8 +5434,8 @@ packages: fast-sha256@1.3.0: resolution: {integrity: sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ==} - fast-uri@3.0.3: - resolution: {integrity: sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==} + fast-uri@3.0.6: + resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} @@ -5216,6 +5443,14 @@ packages: fault@2.0.1: resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} + fdir@6.4.3: + resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -5227,8 +5462,8 @@ packages: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} - finalhandler@1.2.0: - resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + finalhandler@1.3.1: + resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} engines: {node: '>= 0.8'} find-cache-dir@5.0.0: @@ -5277,10 +5512,18 @@ packages: for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + foreground-child@3.1.1: resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} engines: {node: '>=14'} + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + format@0.2.2: resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} engines: {node: '>=0.4.x'} @@ -5343,6 +5586,10 @@ packages: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} + function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} + engines: {node: '>= 0.4'} + functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} @@ -5357,9 +5604,6 @@ packages: resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} engines: {node: '>=18'} - get-func-name@2.0.2: - resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - get-intrinsic@1.2.4: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} @@ -5403,6 +5647,10 @@ packages: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} + get-tsconfig@4.7.3: resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==} @@ -5425,8 +5673,13 @@ packages: engines: {node: '>=16 || 14 >=14.17'} hasBin: true + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} @@ -5444,6 +5697,10 @@ packages: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + globby@10.0.2: resolution: {integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==} engines: {node: '>=8'} @@ -5479,6 +5736,10 @@ packages: has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} + has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} @@ -5494,6 +5755,10 @@ packages: resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} engines: {node: '>= 0.4'} + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} @@ -5612,6 +5877,7 @@ packages: inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -5626,6 +5892,10 @@ packages: resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} engines: {node: '>= 0.4'} + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} + interpret@1.4.0: resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} engines: {node: '>= 0.10'} @@ -5659,6 +5929,10 @@ packages: resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} engines: {node: '>= 0.4'} + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} @@ -5666,9 +5940,17 @@ packages: resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} engines: {node: '>= 0.4'} + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} + is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} @@ -5677,6 +5959,10 @@ packages: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} + is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} + is-buffer@2.0.5: resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} engines: {node: '>=4'} @@ -5692,14 +5978,26 @@ packages: is-core-module@2.13.1: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + is-data-view@1.0.1: resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} engines: {node: '>= 0.4'} + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} + is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} @@ -5723,6 +6021,10 @@ packages: is-finalizationregistry@1.0.2: resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} + is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -5731,6 +6033,10 @@ packages: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} + is-generator-function@1.1.0: + resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} + engines: {node: '>= 0.4'} + is-get-set-prop@1.0.0: resolution: {integrity: sha512-DvAYZ1ZgGUz4lzxKMPYlt08qAUqyG9ckSg2pIjfvcQ7+pkVNUHk8yVLXOnCLe5WKXhLop8oorWFBJHpwWQpszQ==} @@ -5780,6 +6086,10 @@ packages: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -5813,13 +6123,17 @@ packages: is-proto-prop@2.0.0: resolution: {integrity: sha512-jl3NbQ/fGLv5Jhan4uX+Ge9ohnemqyblWVVCpAvtTQzNFvV2xhJq+esnkIbYQ9F1nITXoLfDDQLp7LBw/zzncg==} - is-reference@3.0.2: - resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} + is-reference@3.0.3: + resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + is-regexp@1.0.0: resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} engines: {node: '>=0.10.0'} @@ -5836,6 +6150,10 @@ packages: resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} engines: {node: '>= 0.4'} + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} @@ -5848,14 +6166,26 @@ packages: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + is-symbol@1.0.4: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} engines: {node: '>= 0.4'} + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + is-typed-array@1.1.13: resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} engines: {node: '>= 0.4'} + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + is-unc-path@1.0.0: resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==} engines: {node: '>=0.10.0'} @@ -5875,6 +6205,10 @@ packages: is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} + is-weakset@2.0.3: resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} engines: {node: '>= 0.4'} @@ -5920,6 +6254,9 @@ packages: resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} engines: {node: '>=14'} + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jake@10.9.2: resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} engines: {node: '>=10'} @@ -5928,10 +6265,6 @@ packages: javascript-stringify@2.1.0: resolution: {integrity: sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==} - jest-worker@26.6.2: - resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} - engines: {node: '>= 10.13.0'} - jest-worker@27.5.1: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} @@ -5943,8 +6276,8 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-tokens@8.0.3: - resolution: {integrity: sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==} + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} js-types@1.0.0: resolution: {integrity: sha512-bfwqBW9cC/Lp7xcRpug7YrXm0IVw+T9e3g4mCYnv0Pjr3zIzU9PCQElYU9oSGAWzXlbdl9X5SAMPejO9sxkeUw==} @@ -6101,6 +6434,10 @@ packages: resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} engines: {node: '>=14'} + local-pkg@1.1.1: + resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==} + engines: {node: '>=14'} + localforage@1.10.0: resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==} @@ -6177,12 +6514,12 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - loupe@2.3.7: - resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} - loupe@3.1.2: resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==} + loupe@3.1.3: + resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} + lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} @@ -6194,6 +6531,9 @@ packages: resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} engines: {node: 14 || >=16.14} + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -6216,6 +6556,9 @@ packages: resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} engines: {node: '>=12'} + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + magic-string@0.30.8: resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} engines: {node: '>=12'} @@ -6288,8 +6631,8 @@ packages: resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} engines: {node: '>=18'} - merge-descriptors@1.0.1: - resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -6448,6 +6791,10 @@ packages: resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} @@ -6475,6 +6822,10 @@ packages: resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} engines: {node: '>=16 || 14 >=14.17'} + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + minizlib@2.1.2: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} @@ -6494,11 +6845,14 @@ packages: mlly@1.6.1: resolution: {integrity: sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==} + mlly@1.7.4: + resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} + mockdate@3.0.5: resolution: {integrity: sha512-iniQP4rj1FhBdBYS/+eQv7j1tadJ9lJtdzgOpvsOHng/GbcDh2Fhdeq+ZRldrPYdXvCyfFUmFeEwEGXZB5I/AQ==} - modern-ahocorasick@1.0.1: - resolution: {integrity: sha512-yoe+JbhTClckZ67b2itRtistFKf8yPYelHLc7e5xAwtNAXxM6wJTUx2C7QeVSJFDzKT7bCIFyBVybPMKvmB9AA==} + modern-ahocorasick@1.1.0: + resolution: {integrity: sha512-sEKPVl2rM+MNVkGQt3ChdmD8YsigmXdn5NifZn6jiwn9LRJpWm8F3guhaqrJT/JOat6pwpbXEk6kv+b9DMIjsQ==} module-error@1.0.2: resolution: {integrity: sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==} @@ -6609,6 +6963,9 @@ packages: node-releases@2.0.18: resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} @@ -6668,6 +7025,10 @@ packages: object-inspect@1.13.1: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + object-is@1.1.6: resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} engines: {node: '>= 0.4'} @@ -6680,6 +7041,10 @@ packages: resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} engines: {node: '>= 0.4'} + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} + object.entries@1.1.7: resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} engines: {node: '>= 0.4'} @@ -6736,6 +7101,10 @@ packages: outdent@0.8.0: resolution: {integrity: sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==} + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} + p-defer@3.0.0: resolution: {integrity: sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==} engines: {node: '>=8'} @@ -6752,10 +7121,6 @@ packages: resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - p-limit@5.0.0: - resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} - engines: {node: '>=18'} - p-locate@3.0.0: resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} engines: {node: '>=6'} @@ -6784,6 +7149,9 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + pako@0.2.9: resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} @@ -6791,8 +7159,8 @@ packages: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} - parse-entities@4.0.1: - resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} + parse-entities@4.0.2: + resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} parse-json@4.0.0: resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} @@ -6848,8 +7216,12 @@ packages: resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} engines: {node: '>=16 || 14 >=14.17'} - path-to-regexp@0.1.7: - resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-to-regexp@0.1.12: + resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} path-type@3.0.0: resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} @@ -6866,8 +7238,8 @@ packages: pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} - pathval@1.1.1: - resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} pathval@2.0.0: resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} @@ -6889,6 +7261,10 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + pidtree@0.3.1: resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} engines: {node: '>=0.10'} @@ -6926,6 +7302,12 @@ packages: pkg-types@1.0.3: resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + pkg-types@2.1.0: + resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==} + pkg-up@3.1.0: resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} engines: {node: '>=8'} @@ -6963,6 +7345,10 @@ packages: resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} engines: {node: '>= 0.4'} + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + postcss-discard-duplicates@5.1.0: resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} engines: {node: ^10 || ^12 || >=14.0} @@ -7017,18 +7403,36 @@ packages: peerDependencies: postcss: ^8.1.0 + postcss-modules-extract-imports@3.1.0: + resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + postcss-modules-local-by-default@4.0.4: resolution: {integrity: sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 + postcss-modules-local-by-default@4.2.0: + resolution: {integrity: sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + postcss-modules-scope@3.1.1: resolution: {integrity: sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 + postcss-modules-scope@3.2.1: + resolution: {integrity: sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + postcss-modules-values@4.0.0: resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} engines: {node: ^10 || ^12 || >= 14} @@ -7040,6 +7444,11 @@ packages: peerDependencies: postcss: ^8.0.0 + postcss-modules@6.0.1: + resolution: {integrity: sha512-zyo2sAkVvuZFFy0gc2+4O+xar5dYlaVy/ebO24KT0ftk/iJevSNyPyQellsBLlnccwh7f6V6Y4GvuKRYToNgpQ==} + peerDependencies: + postcss: ^8.0.0 + postcss-nested@6.0.0: resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==} engines: {node: '>=12.0'} @@ -7056,6 +7465,10 @@ packages: resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==} engines: {node: '>=4'} + postcss-selector-parser@7.1.0: + resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==} + engines: {node: '>=4'} + postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} @@ -7157,10 +7570,6 @@ packages: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - pretty-ms@7.0.1: resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==} engines: {node: '>=10'} @@ -7191,8 +7600,8 @@ packages: prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - property-information@6.4.1: - resolution: {integrity: sha512-OHYtXfu5aI2sS2LWFSN5rgJjrQ4pCy8i1jubJLe2QvMF8JJ++HXTUIVWFLfXJoaOfvYYjk2SN8J2wFUWIGXT4w==} + property-information@6.5.0: + resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} proto-props@2.0.0: resolution: {integrity: sha512-2yma2tog9VaRZY2mn3Wq51uiSW4NcPYT1cQdBagwyrznrilKSZwIZ0UG3ZPL/mx+axEns0hE35T5ufOYZXEnBQ==} @@ -7212,6 +7621,9 @@ packages: pump@3.0.0: resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + pumpify@1.5.1: resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==} @@ -7232,6 +7644,13 @@ packages: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} engines: {node: '>=0.6'} + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} + + quansync@0.2.8: + resolution: {integrity: sha512-4+saucphJMazjt7iOM27mbFCk+D9dd/zmgMDCzRZ8MEoBfYp7lAvoN38et/phRQF6wOPMy/OROBGgoWeSKyluA==} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -7333,9 +7752,6 @@ packages: react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - react-is@18.2.0: - resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - react-json-view-lite@2.0.1: resolution: {integrity: sha512-yElNMSzL7UJ9rMDQIbTiBemXbvfAoqpxM/0IQd3nr52CLLBC0HxOSKcta/bayct2QCq7ZVzLzI8CGfuf387hHw==} engines: {node: '>=18'} @@ -7360,6 +7776,10 @@ packages: resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} engines: {node: '>=0.10.0'} + react-refresh@0.14.2: + resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} + engines: {node: '>=0.10.0'} + react-remove-scroll-bar@2.3.6: resolution: {integrity: sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==} engines: {node: '>=10'} @@ -7488,6 +7908,10 @@ packages: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + reflect.getprototypeof@1.0.5: resolution: {integrity: sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ==} engines: {node: '>= 0.4'} @@ -7513,8 +7937,12 @@ packages: resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} - regexpu-core@6.1.1: - resolution: {integrity: sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==} + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + + regexpu-core@6.2.0: + resolution: {integrity: sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==} engines: {node: '>=4'} regjsgen@0.8.0: @@ -7524,8 +7952,8 @@ packages: resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} hasBin: true - regjsparser@0.11.2: - resolution: {integrity: sha512-3OGZZ4HoLJkkAZx/48mTXJNlmqTGOzc0o9OWQPuWpkOlXXPbyN6OafCcoXUnBqE2D3f/T5L+pWc1kdEmnfnRsA==} + regjsparser@0.12.0: + resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} hasBin: true remark-frontmatter@4.0.1: @@ -7571,10 +7999,15 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve.exports@2.0.2: - resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} + resolve.exports@2.0.3: + resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} engines: {node: '>=10'} + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true + resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -7599,19 +8032,13 @@ packages: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true - rollup-plugin-terser@7.0.2: - resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} - deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser - peerDependencies: - rollup: ^4.12.0 - - rollup@4.13.0: - resolution: {integrity: sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==} + rollup@4.25.0: + resolution: {integrity: sha512-uVbClXmR6wvx5R1M3Od4utyLUxrmOcEm3pAtMphn73Apq19PDtHpgZoEvqH2YnnaNUuvKmg2DgRd2Sqv+odyqg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - rollup@4.25.0: - resolution: {integrity: sha512-uVbClXmR6wvx5R1M3Od4utyLUxrmOcEm3pAtMphn73Apq19PDtHpgZoEvqH2YnnaNUuvKmg2DgRd2Sqv+odyqg==} + rollup@4.35.0: + resolution: {integrity: sha512-kg6oI4g+vc41vePJyO6dHt/yl0Rz3Thv0kJeVQ3D1kS3E5XSuKbPc29G4IpT/Kv1KQwgHVcN+HtyS+HYLNSvQg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -7632,16 +8059,28 @@ packages: resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} + safe-array-concat@1.1.3: + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + engines: {node: '>=0.4'} + safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + safe-regex-test@1.0.3: resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} engines: {node: '>= 0.4'} + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -7657,6 +8096,10 @@ packages: resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} engines: {node: '>= 10.13.0'} + schema-utils@4.3.0: + resolution: {integrity: sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==} + engines: {node: '>= 10.13.0'} + scule@1.3.0: resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} @@ -7687,23 +8130,28 @@ packages: engines: {node: '>=10'} hasBin: true - send@0.18.0: - resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} - engines: {node: '>= 0.8.0'} + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + engines: {node: '>=10'} + hasBin: true - serialize-javascript@4.0.0: - resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} + send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + engines: {node: '>= 0.8.0'} serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} - serve-static@1.15.0: - resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} engines: {node: '>= 0.8.0'} set-cookie-parser@2.6.0: resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} + set-cookie-parser@2.7.1: + resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} + set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -7712,6 +8160,10 @@ packages: resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} engines: {node: '>= 0.4'} + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} @@ -7746,10 +8198,26 @@ packages: shell-quote@1.8.1: resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + side-channel@1.0.6: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} engines: {node: '>= 0.4'} + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -7777,6 +8245,9 @@ packages: resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} engines: {node: '>=14.16'} + smob@1.5.0: + resolution: {integrity: sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==} + snake-case@3.0.4: resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} @@ -7831,8 +8302,8 @@ packages: spdx-license-ids@3.0.17: resolution: {integrity: sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==} - ssri@10.0.5: - resolution: {integrity: sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==} + ssri@10.0.6: + resolution: {integrity: sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} stackback@0.0.2: @@ -7842,8 +8313,8 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} - std-env@3.7.0: - resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} + std-env@3.8.1: + resolution: {integrity: sha512-vj5lIj3Mwf9D79hBkltk5qmkFI+biIKWS2IBxEyEU3AX1tUf7AoL8nSazCOiiqQsGKIq01SClsKEzweu34uwvA==} storybook-addon-remix-react-router@4.0.1: resolution: {integrity: sha512-Plhul9kInTKdOhoHumiJ0KRmuIVYhT5WBCnAlNt9MlsmDGEuuiimh8msyj5LPWnGD51/t38i14xI8gmmTyu1ow==} @@ -7904,10 +8375,18 @@ packages: resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} engines: {node: '>= 0.4'} + string.prototype.matchall@4.0.12: + resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} + engines: {node: '>= 0.4'} + string.prototype.padend@3.1.5: resolution: {integrity: sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==} engines: {node: '>= 0.4'} + string.prototype.trim@1.2.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} + engines: {node: '>= 0.4'} + string.prototype.trim@1.2.8: resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} engines: {node: '>= 0.4'} @@ -7922,6 +8401,10 @@ packages: string.prototype.trimend@1.0.8: resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} + string.prototype.trimstart@1.0.7: resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} @@ -7935,8 +8418,8 @@ packages: string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - stringify-entities@4.0.3: - resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==} + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} stringify-object@3.3.0: resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} @@ -7982,11 +8465,8 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - strip-literal@1.3.0: - resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} - - strip-literal@2.0.0: - resolution: {integrity: sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA==} + strip-literal@3.0.0: + resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==} style-to-object@0.4.4: resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} @@ -8079,12 +8559,15 @@ packages: tar-fs@2.1.1: resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + tar-fs@2.1.2: + resolution: {integrity: sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==} + tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} engines: {node: '>=6'} - tar@6.2.0: - resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} + tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} telejson@7.2.0: @@ -8098,8 +8581,8 @@ packages: resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} engines: {node: '>=10'} - terser-webpack-plugin@5.3.10: - resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} + terser-webpack-plugin@5.3.14: + resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==} engines: {node: '>= 10.13.0'} peerDependencies: '@swc/core': '*' @@ -8114,8 +8597,8 @@ packages: uglify-js: optional: true - terser@5.36.0: - resolution: {integrity: sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==} + terser@5.39.0: + resolution: {integrity: sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==} engines: {node: '>=10'} hasBin: true @@ -8141,19 +8624,26 @@ packages: tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - tinybench@2.6.0: - resolution: {integrity: sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==} + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinypool@0.8.3: - resolution: {integrity: sha512-Ud7uepAklqRH1bvwy22ynrliC7Dljz7Tm8M/0RBUW+YRa4YHhZ6e4PpgE+fu1zr/WqB1kbeuVrdfeuyIBpy4tw==} - engines: {node: '>=14.0.0'} + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + + tinyglobby@0.2.12: + resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} + engines: {node: '>=12.0.0'} + + tinypool@1.0.2: + resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} + engines: {node: ^18.0.0 || >=20.0.0} tinyrainbow@1.2.0: resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} engines: {node: '>=14.0.0'} - tinyspy@2.2.1: - resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} engines: {node: '>=14.0.0'} tinyspy@3.0.2: @@ -8249,10 +8739,6 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - type-fest@0.16.0: resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} engines: {node: '>=10'} @@ -8285,14 +8771,26 @@ packages: resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} engines: {node: '>= 0.4'} + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + typed-array-byte-length@1.0.1: resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} engines: {node: '>= 0.4'} + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} + typed-array-byte-offset@1.0.2: resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} engines: {node: '>= 0.4'} + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} + typed-array-length@1.0.5: resolution: {integrity: sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==} engines: {node: '>= 0.4'} @@ -8301,6 +8799,10 @@ packages: resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} engines: {node: '>= 0.4'} + typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + engines: {node: '>= 0.4'} + typescript@5.6.3: resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} engines: {node: '>=14.17'} @@ -8316,6 +8818,9 @@ packages: ufo@1.4.0: resolution: {integrity: sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==} + ufo@1.5.4: + resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} + uint64be@3.0.0: resolution: {integrity: sha512-mliiCSrsE29aNBI7O9W5gGv6WmA9kBR8PtTt6Apaxns076IRdYrrtFhXHEWMj5CSum3U7cv7/pi4xmi4XsIOqg==} @@ -8326,6 +8831,10 @@ packages: unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} + unc-path-regex@0.1.2: resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==} engines: {node: '>=0.10.0'} @@ -8363,8 +8872,9 @@ packages: unified@10.1.2: resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} - unimport@3.7.1: - resolution: {integrity: sha512-V9HpXYfsZye5bPPYUgs0Otn3ODS1mDUciaBlXljI4C2fTwfFpvFZRywmlOu943puN9sncxROMZhsZCjNXEpzEQ==} + unimport@4.1.2: + resolution: {integrity: sha512-oVUL7PSlyVV3QRhsdcyYEMaDX8HJyS/CnUonEJTYA3//bWO+o/4gG8F7auGWWWkrrxBQBYOO8DKe+C53ktpRXw==} + engines: {node: '>=18.12.0'} union@0.5.0: resolution: {integrity: sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==} @@ -8414,8 +8924,8 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} - unplugin-auto-import@0.17.5: - resolution: {integrity: sha512-fHNDkDSxv3PGagX1wmKBYBkgaM4AKAgZmdJw/bxjhNljx9KSXSgHpGfX0MwUrq9qw6q1bhHIZVWyOwoY2koo4w==} + unplugin-auto-import@19.1.1: + resolution: {integrity: sha512-sCGZZrSR1Bc8RfN8Q0RUDxXtC20rdAt7UB4lDyq8MNtKVHiXXh+5af6Nz4JRp9Q+7HjnbgQfQox0TkEymjdUAQ==} engines: {node: '>=14'} peerDependencies: '@nuxt/kit': ^3.2.2 @@ -8446,10 +8956,18 @@ packages: vue-template-es2015-compiler: optional: true + unplugin-utils@0.2.4: + resolution: {integrity: sha512-8U/MtpkPkkk3Atewj1+RcKIjb5WBimZ/WSLhhR3w6SsIj8XJuKTacSP8g+2JhfSGw0Cb125Y+2zA/IzJZDVbhA==} + engines: {node: '>=18.12.0'} + unplugin@1.10.0: resolution: {integrity: sha512-CuZtvvO8ua2Wl+9q2jEaqH6m3DoQ38N7pvBYQbbaeNlWGvK2l6GHiKi29aIHDPoSxdUzQ7Unevf1/ugil5X6Pg==} engines: {node: '>=14.0.0'} + unplugin@2.2.0: + resolution: {integrity: sha512-m1ekpSwuOT5hxkJeZGRxO7gXbXT3gF26NjQ7GdVHoLoF8/nopLcd/QfPigpCy7i51oFHiRJg/CyHhj4vs2+KGw==} + engines: {node: '>=18.12.0'} + upath@1.2.0: resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} engines: {node: '>=4'} @@ -8466,6 +8984,12 @@ packages: peerDependencies: browserslist: '>= 4.21.0' + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -8623,8 +9147,8 @@ packages: vfile@5.3.7: resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} - vite-node@1.5.0: - resolution: {integrity: sha512-tV8h6gMj6vPzVCa7l+VGq9lwoJjW8Y79vst8QZZGiuRAfijU+EEWuc0kFpmndQrWhMMhet1jdSF+40KSZUqIIw==} + vite-node@1.6.1: + resolution: {integrity: sha512-YAXkfvGtuTzwWbDSACdJSg4A4DZiAqckWe90Zapc/sEX3XvHcw1NdurM/6od8J207tSDqNbSsgdCacBgvJKFuA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -8633,14 +9157,19 @@ packages: engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true - vite-plugin-pwa@0.19.3: - resolution: {integrity: sha512-ajY7Vn39hFbkWyqkyoJT40hPJcfU9AAfCugARJ3AdqK258z3mi3dmG88PB0+1WqJwUsedRRPkScH5HnQBzmRMQ==} + vite-node@3.0.8: + resolution: {integrity: sha512-6PhR4H9VGlcwXZ+KWCdMqbtG649xCPZqfI9j2PsK1FcXgEzro5bGHcVKFCTqPLaNKZES8Evqv4LwvZARsq5qlg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + + vite-plugin-pwa@0.21.1: + resolution: {integrity: sha512-rkTbKFbd232WdiRJ9R3u+hZmf5SfQljX1b45NF6oLA6DSktEKpYllgTo1l2lkiZWMWV78pABJtFjNXfBef3/3Q==} engines: {node: '>=16.0.0'} peerDependencies: - '@vite-pwa/assets-generator': ^0.2.4 - vite: ^3.1.0 || ^4.0.0 || ^5.0.0 - workbox-build: ^7.0.0 - workbox-window: ^7.0.0 + '@vite-pwa/assets-generator': ^0.2.6 + vite: ^3.1.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 + workbox-build: ^7.3.0 + workbox-window: ^7.3.0 peerDependenciesMeta: '@vite-pwa/assets-generator': optional: true @@ -8650,21 +9179,21 @@ packages: peerDependencies: vite: '>=2.8' - vite-plugin-wasm@3.3.0: - resolution: {integrity: sha512-tVhz6w+W9MVsOCHzxo6SSMSswCeIw4HTrXEi6qL3IRzATl83jl09JVO1djBqPSwfjgnpVHNLYcaMbaDX5WB/pg==} + vite-plugin-wasm@3.4.1: + resolution: {integrity: sha512-ja3nSo2UCkVeitltJGkS3pfQHAanHv/DqGatdI39ja6McgABlpsZ5hVgl6wuR8Qx5etY3T5qgDQhOWzc5RReZA==} peerDependencies: - vite: ^2 || ^3 || ^4 || ^5 + vite: ^2 || ^3 || ^4 || ^5 || ^6 - vite-tsconfig-paths@4.3.2: - resolution: {integrity: sha512-0Vd/a6po6Q+86rPlntHye7F31zA2URZMbH8M3saAZ/xR9QoGN/L21bxEGfXdWmFdNkqPpRdxFT7nmNe12e9/uA==} + vite-tsconfig-paths@5.1.4: + resolution: {integrity: sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==} peerDependencies: vite: '*' peerDependenciesMeta: vite: optional: true - vite@5.1.4: - resolution: {integrity: sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==} + vite@5.4.11: + resolution: {integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -8672,6 +9201,7 @@ packages: less: '*' lightningcss: ^1.21.0 sass: '*' + sass-embedded: '*' stylus: '*' sugarss: '*' terser: ^5.4.0 @@ -8684,6 +9214,8 @@ packages: optional: true sass: optional: true + sass-embedded: + optional: true stylus: optional: true sugarss: @@ -8691,20 +9223,23 @@ packages: terser: optional: true - vitest@1.5.0: - resolution: {integrity: sha512-d8UKgR0m2kjdxDWX6911uwxout6GHS0XaGH1cksSIVVG8kRlE7G7aBw7myKQCvDI5dT4j7ZMa+l706BIORMDLw==} - engines: {node: ^18.0.0 || >=20.0.0} + vitest@3.0.8: + resolution: {integrity: sha512-dfqAsNqRGUc8hB9OVR2P0w8PZPEckti2+5rdZip0WIz9WW0MnImJ8XiR61QhqLa92EQzKP2uPkzenKOAHyEIbA==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' - '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 1.5.0 - '@vitest/ui': 1.5.0 + '@types/debug': ^4.1.12 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@vitest/browser': 3.0.8 + '@vitest/ui': 3.0.8 happy-dom: '*' jsdom: '*' peerDependenciesMeta: '@edge-runtime/vm': optional: true + '@types/debug': + optional: true '@types/node': optional: true '@vitest/browser': @@ -8744,6 +9279,9 @@ packages: webpack-virtual-modules@0.6.1: resolution: {integrity: sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==} + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + webpack@5.91.0: resolution: {integrity: sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==} engines: {node: '>=10.13.0'} @@ -8764,10 +9302,18 @@ packages: which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + which-builtin-type@1.1.3: resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} engines: {node: '>= 0.4'} + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + which-collection@1.0.2: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} engines: {node: '>= 0.4'} @@ -8776,6 +9322,10 @@ packages: resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} engines: {node: '>= 0.4'} + which-typed-array@1.1.19: + resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} + engines: {node: '>= 0.4'} + which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true @@ -8790,60 +9340,59 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} hasBin: true - why-is-node-running@2.2.2: - resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} engines: {node: '>=8'} hasBin: true - workbox-background-sync@7.0.0: - resolution: {integrity: sha512-S+m1+84gjdueM+jIKZ+I0Lx0BDHkk5Nu6a3kTVxP4fdj3gKouRNmhO8H290ybnJTOPfBDtTMXSQA/QLTvr7PeA==} + workbox-background-sync@7.3.0: + resolution: {integrity: sha512-PCSk3eK7Mxeuyatb22pcSx9dlgWNv3+M8PqPaYDokks8Y5/FX4soaOqj3yhAZr5k6Q5JWTOMYgaJBpbw11G9Eg==} - workbox-broadcast-update@7.0.0: - resolution: {integrity: sha512-oUuh4jzZrLySOo0tC0WoKiSg90bVAcnE98uW7F8GFiSOXnhogfNDGZelPJa+6KpGBO5+Qelv04Hqx2UD+BJqNQ==} + workbox-broadcast-update@7.3.0: + resolution: {integrity: sha512-T9/F5VEdJVhwmrIAE+E/kq5at2OY6+OXXgOWQevnubal6sO92Gjo24v6dCVwQiclAF5NS3hlmsifRrpQzZCdUA==} - workbox-build@7.0.0: - resolution: {integrity: sha512-CttE7WCYW9sZC+nUYhQg3WzzGPr4IHmrPnjKiu3AMXsiNQKx+l4hHl63WTrnicLmKEKHScWDH8xsGBdrYgtBzg==} + workbox-build@7.3.0: + resolution: {integrity: sha512-JGL6vZTPlxnlqZRhR/K/msqg3wKP+m0wfEUVosK7gsYzSgeIxvZLi1ViJJzVL7CEeI8r7rGFV973RiEqkP3lWQ==} engines: {node: '>=16.0.0'} - workbox-cacheable-response@7.0.0: - resolution: {integrity: sha512-0lrtyGHn/LH8kKAJVOQfSu3/80WDc9Ma8ng0p2i/5HuUndGttH+mGMSvOskjOdFImLs2XZIimErp7tSOPmu/6g==} + workbox-cacheable-response@7.3.0: + resolution: {integrity: sha512-eAFERIg6J2LuyELhLlmeRcJFa5e16Mj8kL2yCDbhWE+HUun9skRQrGIFVUagqWj4DMaaPSMWfAolM7XZZxNmxA==} - workbox-core@7.0.0: - resolution: {integrity: sha512-81JkAAZtfVP8darBpfRTovHg8DGAVrKFgHpOArZbdFd78VqHr5Iw65f2guwjE2NlCFbPFDoez3D3/6ZvhI/rwQ==} + workbox-core@7.3.0: + resolution: {integrity: sha512-Z+mYrErfh4t3zi7NVTvOuACB0A/jA3bgxUN3PwtAVHvfEsZxV9Iju580VEETug3zYJRc0Dmii/aixI/Uxj8fmw==} - workbox-expiration@7.0.0: - resolution: {integrity: sha512-MLK+fogW+pC3IWU9SFE+FRStvDVutwJMR5if1g7oBJx3qwmO69BNoJQVaMXq41R0gg3MzxVfwOGKx3i9P6sOLQ==} + workbox-expiration@7.3.0: + resolution: {integrity: sha512-lpnSSLp2BM+K6bgFCWc5bS1LR5pAwDWbcKt1iL87/eTSJRdLdAwGQznZE+1czLgn/X05YChsrEegTNxjM067vQ==} - workbox-google-analytics@7.0.0: - resolution: {integrity: sha512-MEYM1JTn/qiC3DbpvP2BVhyIH+dV/5BjHk756u9VbwuAhu0QHyKscTnisQuz21lfRpOwiS9z4XdqeVAKol0bzg==} - deprecated: It is not compatible with newer versions of GA starting with v4, as long as you are using GAv3 it should be ok, but the package is not longer being maintained + workbox-google-analytics@7.3.0: + resolution: {integrity: sha512-ii/tSfFdhjLHZ2BrYgFNTrb/yk04pw2hasgbM70jpZfLk0vdJAXgaiMAWsoE+wfJDNWoZmBYY0hMVI0v5wWDbg==} - workbox-navigation-preload@7.0.0: - resolution: {integrity: sha512-juWCSrxo/fiMz3RsvDspeSLGmbgC0U9tKqcUPZBCf35s64wlaLXyn2KdHHXVQrb2cqF7I0Hc9siQalainmnXJA==} + workbox-navigation-preload@7.3.0: + resolution: {integrity: sha512-fTJzogmFaTv4bShZ6aA7Bfj4Cewaq5rp30qcxl2iYM45YD79rKIhvzNHiFj1P+u5ZZldroqhASXwwoyusnr2cg==} - workbox-precaching@7.0.0: - resolution: {integrity: sha512-EC0vol623LJqTJo1mkhD9DZmMP604vHqni3EohhQVwhJlTgyKyOkMrZNy5/QHfOby+39xqC01gv4LjOm4HSfnA==} + workbox-precaching@7.3.0: + resolution: {integrity: sha512-ckp/3t0msgXclVAYaNndAGeAoWQUv7Rwc4fdhWL69CCAb2UHo3Cef0KIUctqfQj1p8h6aGyz3w8Cy3Ihq9OmIw==} - workbox-range-requests@7.0.0: - resolution: {integrity: sha512-SxAzoVl9j/zRU9OT5+IQs7pbJBOUOlriB8Gn9YMvi38BNZRbM+RvkujHMo8FOe9IWrqqwYgDFBfv6sk76I1yaQ==} + workbox-range-requests@7.3.0: + resolution: {integrity: sha512-EyFmM1KpDzzAouNF3+EWa15yDEenwxoeXu9bgxOEYnFfCxns7eAxA9WSSaVd8kujFFt3eIbShNqa4hLQNFvmVQ==} - workbox-recipes@7.0.0: - resolution: {integrity: sha512-DntcK9wuG3rYQOONWC0PejxYYIDHyWWZB/ueTbOUDQgefaeIj1kJ7pdP3LZV2lfrj8XXXBWt+JDRSw1lLLOnww==} + workbox-recipes@7.3.0: + resolution: {integrity: sha512-BJro/MpuW35I/zjZQBcoxsctgeB+kyb2JAP5EB3EYzePg8wDGoQuUdyYQS+CheTb+GhqJeWmVs3QxLI8EBP1sg==} - workbox-routing@7.0.0: - resolution: {integrity: sha512-8YxLr3xvqidnbVeGyRGkaV4YdlKkn5qZ1LfEePW3dq+ydE73hUUJJuLmGEykW3fMX8x8mNdL0XrWgotcuZjIvA==} + workbox-routing@7.3.0: + resolution: {integrity: sha512-ZUlysUVn5ZUzMOmQN3bqu+gK98vNfgX/gSTZ127izJg/pMMy4LryAthnYtjuqcjkN4HEAx1mdgxNiKJMZQM76A==} - workbox-strategies@7.0.0: - resolution: {integrity: sha512-dg3qJU7tR/Gcd/XXOOo7x9QoCI9nk74JopaJaYAQ+ugLi57gPsXycVdBnYbayVj34m6Y8ppPwIuecrzkpBVwbA==} + workbox-strategies@7.3.0: + resolution: {integrity: sha512-tmZydug+qzDFATwX7QiEL5Hdf7FrkhjaF9db1CbB39sDmEZJg3l9ayDvPxy8Y18C3Y66Nrr9kkN1f/RlkDgllg==} - workbox-streams@7.0.0: - resolution: {integrity: sha512-moVsh+5to//l6IERWceYKGiftc+prNnqOp2sgALJJFbnNVpTXzKISlTIsrWY+ogMqt+x1oMazIdHj25kBSq/HQ==} + workbox-streams@7.3.0: + resolution: {integrity: sha512-SZnXucyg8x2Y61VGtDjKPO5EgPUG5NDn/v86WYHX+9ZqvAsGOytP0Jxp1bl663YUuMoXSAtsGLL+byHzEuMRpw==} - workbox-sw@7.0.0: - resolution: {integrity: sha512-SWfEouQfjRiZ7GNABzHUKUyj8pCoe+RwjfOIajcx6J5mtgKkN+t8UToHnpaJL5UVVOf5YhJh+OHhbVNIHe+LVA==} + workbox-sw@7.3.0: + resolution: {integrity: sha512-aCUyoAZU9IZtH05mn0ACUpyHzPs0lMeJimAYkQkBsOWiqaJLgusfDCR+yllkPkFRxWpZKF8vSvgHYeG7LwhlmA==} - workbox-window@7.0.0: - resolution: {integrity: sha512-j7P/bsAWE/a7sxqTzXo3P2ALb1reTfZdvVp6OJ/uLr/C2kZAMvjeWGm8V4htQhor7DOvYg0sSbFN2+flT5U0qA==} + workbox-window@7.3.0: + resolution: {integrity: sha512-qW8PDy16OV1UBaUNGlTVcepzrlzyzNW/ZJvFQQs2j2TzGsg6IKjcpZC1RSquqQnTOafl5pCj5bGfAHlCjOOjdA==} wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} @@ -8856,8 +9405,8 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - ws@7.5.9: - resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} engines: {node: '>=8.3.0'} peerDependencies: bufferutil: ^4.0.1 @@ -8994,6 +9543,8 @@ snapshots: '@babel/compat-data@7.26.2': {} + '@babel/compat-data@7.26.8': {} + '@babel/core@7.24.0': dependencies: '@ampproject/remapping': 2.3.0 @@ -9041,6 +9592,14 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 + '@babel/generator@7.26.10': + dependencies: + '@babel/parser': 7.26.10 + '@babel/types': 7.26.10 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.0.2 + '@babel/generator@7.26.2': dependencies: '@babel/parser': 7.26.2 @@ -9053,13 +9612,6 @@ snapshots: dependencies: '@babel/types': 7.26.0 - '@babel/helper-builder-binary-assignment-operator-visitor@7.25.9': - dependencies: - '@babel/traverse': 7.25.9 - '@babel/types': 7.26.0 - transitivePeerDependencies: - - supports-color - '@babel/helper-compilation-targets@7.23.6': dependencies: '@babel/compat-data': 7.23.5 @@ -9076,6 +9628,14 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 + '@babel/helper-compilation-targets@7.26.5': + dependencies: + '@babel/compat-data': 7.26.8 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.4 + lru-cache: 5.1.1 + semver: 6.3.1 + '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 @@ -9089,21 +9649,34 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.25.9(@babel/core@7.24.5)': + '@babel/helper-create-class-features-plugin@7.26.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-annotate-as-pure': 7.25.9 - regexpu-core: 6.1.1 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.24.5) + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/traverse': 7.26.10 semver: 6.3.1 + transitivePeerDependencies: + - supports-color - '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.24.5)': + '@babel/helper-create-regexp-features-plugin@7.26.3(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-annotate-as-pure': 7.25.9 + regexpu-core: 6.2.0 + semver: 6.3.1 + + '@babel/helper-define-polyfill-provider@0.6.3(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 debug: 4.4.0 lodash.debounce: 4.0.8 - resolve: 1.22.8 + resolve: 1.22.10 transitivePeerDependencies: - supports-color @@ -9162,12 +9735,14 @@ snapshots: '@babel/helper-plugin-utils@7.25.9': {} + '@babel/helper-plugin-utils@7.26.5': {} + '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-wrap-function': 7.25.9 - '@babel/traverse': 7.25.9 + '@babel/traverse': 7.26.10 transitivePeerDependencies: - supports-color @@ -9180,6 +9755,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-replace-supers@7.26.5(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/traverse': 7.26.10 + transitivePeerDependencies: + - supports-color + '@babel/helper-simple-access@7.22.5': dependencies: '@babel/types': 7.24.0 @@ -9216,9 +9800,9 @@ snapshots: '@babel/helper-wrap-function@7.25.9': dependencies: - '@babel/template': 7.25.9 - '@babel/traverse': 7.25.9 - '@babel/types': 7.26.0 + '@babel/template': 7.26.9 + '@babel/traverse': 7.26.10 + '@babel/types': 7.26.10 transitivePeerDependencies: - supports-color @@ -9245,6 +9829,10 @@ snapshots: dependencies: '@babel/types': 7.24.0 + '@babel/parser@7.26.10': + dependencies: + '@babel/types': 7.26.10 + '@babel/parser@7.26.2': dependencies: '@babel/types': 7.26.0 @@ -9252,25 +9840,25 @@ snapshots: '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/traverse': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/traverse': 7.26.10 transitivePeerDependencies: - supports-color '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.24.5) transitivePeerDependencies: @@ -9279,8 +9867,8 @@ snapshots: '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/traverse': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/traverse': 7.26.10 transitivePeerDependencies: - supports-color @@ -9293,43 +9881,58 @@ snapshots: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-decorators@7.25.9(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-async-generator-functions@7.25.9(@babel/core@7.24.5)': + '@babel/plugin-transform-async-generator-functions@7.26.8(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.24.5) - '@babel/traverse': 7.25.9 + '@babel/traverse': 7.26.10 transitivePeerDependencies: - supports-color @@ -9337,34 +9940,34 @@ snapshots: dependencies: '@babel/core': 7.24.5 '@babel/helper-module-imports': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.24.5) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.25.9(@babel/core@7.24.5)': + '@babel/plugin-transform-block-scoped-functions@7.26.5(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color @@ -9372,10 +9975,10 @@ snapshots: dependencies: '@babel/core': 7.24.5 '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-replace-supers': 7.25.9(@babel/core@7.24.5) - '@babel/traverse': 7.25.9 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.24.5) + '@babel/traverse': 7.26.10 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -9383,53 +9986,50 @@ snapshots: '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/template': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/template': 7.26.9 '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-exponentiation-operator@7.25.9(@babel/core@7.24.5)': + '@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 - transitivePeerDependencies: - - supports-color + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-for-of@7.25.9(@babel/core@7.24.5)': + '@babel/plugin-transform-for-of@7.26.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color @@ -9437,37 +10037,37 @@ snapshots: '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/traverse': 7.25.9 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/traverse': 7.26.10 transitivePeerDependencies: - supports-color '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-literals@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-module-transforms': 7.26.0(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color @@ -9480,13 +10080,21 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-module-transforms': 7.26.0(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.25.9 + '@babel/traverse': 7.26.10 transitivePeerDependencies: - supports-color @@ -9494,55 +10102,55 @@ snapshots: dependencies: '@babel/core': 7.24.5 '@babel/helper-module-transforms': 7.26.0(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-nullish-coalescing-operator@7.25.9(@babel/core@7.24.5)': + '@babel/plugin-transform-nullish-coalescing-operator@7.26.6(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.24.5) '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-replace-supers': 7.25.9(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.24.5) transitivePeerDependencies: - supports-color '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color @@ -9550,13 +10158,13 @@ snapshots: '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color @@ -9564,15 +10172,15 @@ snapshots: dependencies: '@babel/core': 7.24.5 '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-react-jsx-self@7.23.3(@babel/core@7.24.0)': dependencies: @@ -9587,29 +10195,29 @@ snapshots: '@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 regenerator-transform: 0.15.2 '@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-spread@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color @@ -9617,17 +10225,17 @@ snapshots: '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-template-literals@7.25.9(@babel/core@7.24.5)': + '@babel/plugin-transform-template-literals@7.26.8(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-typeof-symbol@7.25.9(@babel/core@7.24.5)': + '@babel/plugin-transform-typeof-symbol@7.26.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-typescript@7.23.6(@babel/core@7.24.5)': dependencies: @@ -9639,35 +10247,46 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-typescript@7.26.8(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.24.5) + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.26.5 - '@babel/preset-env@7.26.0(@babel/core@7.24.5)': + '@babel/preset-env@7.26.9(@babel/core@7.24.5)': dependencies: - '@babel/compat-data': 7.26.2 + '@babel/compat-data': 7.26.8 '@babel/core': 7.24.5 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-validator-option': 7.25.9 '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.24.5) '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.24.5) @@ -9679,9 +10298,9 @@ snapshots: '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.24.5) '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.5) '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.24.5) - '@babel/plugin-transform-async-generator-functions': 7.25.9(@babel/core@7.24.5) + '@babel/plugin-transform-async-generator-functions': 7.26.8(@babel/core@7.24.5) '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.24.5) - '@babel/plugin-transform-block-scoped-functions': 7.25.9(@babel/core@7.24.5) + '@babel/plugin-transform-block-scoped-functions': 7.26.5(@babel/core@7.24.5) '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.24.5) '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.24.5) '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.24.5) @@ -9692,21 +10311,21 @@ snapshots: '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.24.5) '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.24.5) '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.24.5) - '@babel/plugin-transform-exponentiation-operator': 7.25.9(@babel/core@7.24.5) + '@babel/plugin-transform-exponentiation-operator': 7.26.3(@babel/core@7.24.5) '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.24.5) - '@babel/plugin-transform-for-of': 7.25.9(@babel/core@7.24.5) + '@babel/plugin-transform-for-of': 7.26.9(@babel/core@7.24.5) '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.24.5) '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.24.5) '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.24.5) '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.24.5) '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.24.5) '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.24.5) - '@babel/plugin-transform-modules-commonjs': 7.25.9(@babel/core@7.24.5) + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.24.5) '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.24.5) '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.24.5) '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.24.5) '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.24.5) - '@babel/plugin-transform-nullish-coalescing-operator': 7.25.9(@babel/core@7.24.5) + '@babel/plugin-transform-nullish-coalescing-operator': 7.26.6(@babel/core@7.24.5) '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.24.5) '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.24.5) '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.24.5) @@ -9722,17 +10341,17 @@ snapshots: '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.24.5) '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.24.5) '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.24.5) - '@babel/plugin-transform-template-literals': 7.25.9(@babel/core@7.24.5) - '@babel/plugin-transform-typeof-symbol': 7.25.9(@babel/core@7.24.5) + '@babel/plugin-transform-template-literals': 7.26.8(@babel/core@7.24.5) + '@babel/plugin-transform-typeof-symbol': 7.26.7(@babel/core@7.24.5) '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.24.5) '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.24.5) '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.24.5) '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.24.5) '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.5) - babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.5) - babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.24.5) - babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.5) - core-js-compat: 3.39.0 + babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.24.5) + babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.24.5) + babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.24.5) + core-js-compat: 3.41.0 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -9740,8 +10359,8 @@ snapshots: '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/types': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/types': 7.26.10 esutils: 2.0.3 '@babel/preset-typescript@7.23.3(@babel/core@7.24.5)': @@ -9755,6 +10374,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/preset-typescript@7.26.0(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.24.5) + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.24.5) + '@babel/plugin-transform-typescript': 7.26.8(@babel/core@7.24.5) + transitivePeerDependencies: + - supports-color + '@babel/runtime@7.24.0': dependencies: regenerator-runtime: 0.14.1 @@ -9767,6 +10397,10 @@ snapshots: dependencies: regenerator-runtime: 0.14.1 + '@babel/runtime@7.26.10': + dependencies: + regenerator-runtime: 0.14.1 + '@babel/template@7.24.0': dependencies: '@babel/code-frame': 7.23.5 @@ -9779,6 +10413,12 @@ snapshots: '@babel/parser': 7.26.2 '@babel/types': 7.26.0 + '@babel/template@7.26.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.10 + '@babel/types': 7.26.10 + '@babel/traverse@7.24.0': dependencies: '@babel/code-frame': 7.23.5 @@ -9806,6 +10446,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/traverse@7.26.10': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.10 + '@babel/parser': 7.26.10 + '@babel/template': 7.26.9 + '@babel/types': 7.26.10 + debug: 4.4.0 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + '@babel/types@7.24.0': dependencies: '@babel/helper-string-parser': 7.23.4 @@ -9817,6 +10469,11 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 + '@babel/types@7.26.10': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@bufbuild/protobuf@2.2.3': {} '@cbor-extract/cbor-extract-darwin-arm64@2.2.0': @@ -10815,6 +11472,8 @@ snapshots: '@emotion/hash@0.9.1': {} + '@emotion/hash@0.9.2': {} + '@esbuild-plugins/node-globals-polyfill@0.2.3(esbuild@0.20.1)': dependencies: esbuild: 0.20.1 @@ -11075,16 +11734,12 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@jest/schemas@29.6.3': - dependencies: - '@sinclair/typebox': 0.27.8 - - '@joshwooding/vite-plugin-react-docgen-typescript@0.5.0(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.5.0(typescript@5.6.3)(vite@5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0))': dependencies: glob: 10.3.10 magic-string: 0.27.0 react-docgen-typescript: 2.2.2(typescript@5.6.3) - vite: 5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) + vite: 5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0) optionalDependencies: typescript: 5.6.3 @@ -11094,17 +11749,25 @@ snapshots: '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/set-array@1.2.1': {} '@jridgewell/source-map@0.3.6': dependencies: - '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 '@jridgewell/sourcemap-codec@1.4.15': {} + '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 @@ -11126,12 +11789,12 @@ snapshots: dependencies: '@js-joda/core': 5.6.2 - '@jspm/core@2.0.1': {} + '@jspm/core@2.1.0': {} '@mdx-js/mdx@2.3.0': dependencies: '@types/estree-jsx': 1.0.5 - '@types/mdx': 2.0.11 + '@types/mdx': 2.0.13 estree-util-build-jsx: 2.2.2 estree-util-is-identifier-name: 2.1.0 estree-util-to-js: 1.2.0 @@ -11188,9 +11851,9 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 - '@npmcli/fs@3.1.0': + '@npmcli/fs@3.1.1': dependencies: - semver: 7.6.3 + semver: 7.7.1 '@npmcli/git@4.1.0': dependencies: @@ -12399,7 +13062,7 @@ snapshots: clsx: 2.1.0 react: 18.2.0 - '@react-router/dev@7.2.0(@types/node@20.11.27)(react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(sass@1.85.1)(terser@5.36.0)(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))': + '@react-router/dev@7.2.0(@types/node@20.11.27)(react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(sass@1.85.1)(terser@5.39.0)(typescript@5.6.3)(vite@5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0))': dependencies: '@babel/core': 7.24.5 '@babel/generator': 7.26.2 @@ -12430,8 +13093,8 @@ snapshots: semver: 7.6.3 set-cookie-parser: 2.6.0 valibot: 0.41.0(typescript@5.6.3) - vite: 5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) - vite-node: 3.0.0-beta.2(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) + vite: 5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0) + vite-node: 3.0.0-beta.2(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: @@ -12441,6 +13104,7 @@ snapshots: - less - lightningcss - sass + - sass-embedded - stylus - sugarss - supports-color @@ -12456,9 +13120,9 @@ snapshots: optionalDependencies: typescript: 5.6.3 - '@react-router/remix-routes-option-adapter@7.2.0(@react-router/dev@7.2.0(@types/node@20.11.27)(react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(sass@1.85.1)(terser@5.36.0)(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)))(typescript@5.6.3)': + '@react-router/remix-routes-option-adapter@7.2.0(@react-router/dev@7.2.0(@types/node@20.11.27)(react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(sass@1.85.1)(terser@5.39.0)(typescript@5.6.3)(vite@5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0)))(typescript@5.6.3)': dependencies: - '@react-router/dev': 7.2.0(@types/node@20.11.27)(react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(sass@1.85.1)(terser@5.36.0)(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)) + '@react-router/dev': 7.2.0(@types/node@20.11.27)(react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(sass@1.85.1)(terser@5.39.0)(typescript@5.6.3)(vite@5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0)) optionalDependencies: typescript: 5.6.3 @@ -12471,35 +13135,35 @@ snapshots: dependencies: react: 18.2.0 - '@remix-run/dev@2.8.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))': + '@remix-run/dev@2.8.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0))': dependencies: '@babel/core': 7.24.5 - '@babel/generator': 7.26.2 - '@babel/parser': 7.26.2 - '@babel/plugin-syntax-decorators': 7.24.0(@babel/core@7.24.5) - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.24.5) - '@babel/preset-typescript': 7.23.3(@babel/core@7.24.5) - '@babel/traverse': 7.25.9 - '@babel/types': 7.26.0 + '@babel/generator': 7.26.10 + '@babel/parser': 7.26.10 + '@babel/plugin-syntax-decorators': 7.25.9(@babel/core@7.24.5) + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.24.5) + '@babel/preset-typescript': 7.26.0(@babel/core@7.24.5) + '@babel/traverse': 7.26.10 + '@babel/types': 7.26.10 '@mdx-js/mdx': 2.3.0 '@npmcli/package-json': 4.0.1 '@remix-run/node': 2.8.1(typescript@5.6.3) '@remix-run/router': 1.15.3-pre.0 '@remix-run/server-runtime': 2.8.1(typescript@5.6.3) - '@types/mdx': 2.0.11 - '@vanilla-extract/integration': 6.5.0(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) + '@types/mdx': 2.0.13 + '@vanilla-extract/integration': 6.5.0(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0) arg: 5.0.2 cacache: 17.1.4 chalk: 4.1.2 chokidar: 3.6.0 - cross-spawn: 7.0.3 - dotenv: 16.4.5 - es-module-lexer: 1.5.4 + cross-spawn: 7.0.6 + dotenv: 16.4.7 + es-module-lexer: 1.6.0 esbuild: 0.20.1 - esbuild-plugins-node-modules-polyfill: 1.6.3(esbuild@0.20.1) + esbuild-plugins-node-modules-polyfill: 1.7.0(esbuild@0.20.1) execa: 5.1.1 exit-hook: 2.2.1 - express: 4.18.3 + express: 4.21.2 fs-extra: 10.1.0 get-port: 5.1.1 gunzip-maybe: 1.4.2 @@ -12507,7 +13171,7 @@ snapshots: json5: 2.2.3 lodash: 4.17.21 lodash.debounce: 4.0.8 - minimatch: 9.0.4 + minimatch: 9.0.5 ora: 5.4.1 picocolors: 1.1.1 picomatch: 2.3.1 @@ -12515,27 +13179,29 @@ snapshots: postcss: 8.5.3 postcss-discard-duplicates: 5.1.0(postcss@8.5.3) postcss-load-config: 4.0.2(postcss@8.5.3)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3)) - postcss-modules: 6.0.0(postcss@8.5.3) + postcss-modules: 6.0.1(postcss@8.5.3) prettier: 2.8.8 pretty-ms: 7.0.1 - react-refresh: 0.14.0 + react-refresh: 0.14.2 remark-frontmatter: 4.0.1 remark-mdx-frontmatter: 1.1.1 - semver: 7.6.3 - set-cookie-parser: 2.6.0 - tar-fs: 2.1.1 + semver: 7.7.1 + set-cookie-parser: 2.7.1 + tar-fs: 2.1.2 tsconfig-paths: 4.2.0 - ws: 7.5.9 + ws: 7.5.10 optionalDependencies: typescript: 5.6.3 - vite: 5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) + vite: 5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0) transitivePeerDependencies: - '@types/node' + - babel-plugin-macros - bluebird - bufferutil - less - lightningcss - sass + - sass-embedded - stylus - sugarss - supports-color @@ -12550,7 +13216,7 @@ snapshots: '@remix-run/web-file': 3.1.0 '@remix-run/web-stream': 1.1.0 '@web3-storage/multipart-parser': 1.0.0 - cookie-signature: 1.2.1 + cookie-signature: 1.2.2 source-map-support: 0.5.21 stream-slice: 0.1.2 optionalDependencies: @@ -12566,14 +13232,14 @@ snapshots: '@types/cookie': 0.6.0 '@web3-storage/multipart-parser': 1.0.0 cookie: 0.6.0 - set-cookie-parser: 2.6.0 + set-cookie-parser: 2.7.1 source-map: 0.7.4 optionalDependencies: typescript: 5.6.3 - '@remix-run/v1-route-convention@0.1.4(@remix-run/dev@2.8.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)))': + '@remix-run/v1-route-convention@0.1.4(@remix-run/dev@2.8.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0)))': dependencies: - '@remix-run/dev': 2.8.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)) + '@remix-run/dev': 2.8.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0)) minimatch: 7.4.6 '@remix-run/web-blob@3.1.0': @@ -12604,146 +13270,170 @@ snapshots: dependencies: web-streams-polyfill: 3.3.3 - '@rollup/plugin-babel@5.3.1(@babel/core@7.24.5)(@types/babel__core@7.20.5)(rollup@4.25.0)': + '@rollup/plugin-babel@5.3.1(@babel/core@7.24.5)(@types/babel__core@7.20.5)(rollup@4.35.0)': dependencies: '@babel/core': 7.24.5 '@babel/helper-module-imports': 7.25.9 - '@rollup/pluginutils': 3.1.0(rollup@4.25.0) - rollup: 4.25.0 + '@rollup/pluginutils': 3.1.0(rollup@4.35.0) + rollup: 4.35.0 optionalDependencies: '@types/babel__core': 7.20.5 transitivePeerDependencies: - supports-color - '@rollup/plugin-node-resolve@11.2.1(rollup@4.25.0)': + '@rollup/plugin-node-resolve@15.3.1(rollup@4.35.0)': dependencies: - '@rollup/pluginutils': 3.1.0(rollup@4.25.0) - '@types/resolve': 1.17.1 - builtin-modules: 3.3.0 + '@rollup/pluginutils': 5.1.0(rollup@4.35.0) + '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 - resolve: 1.22.8 - rollup: 4.25.0 + resolve: 1.22.10 + optionalDependencies: + rollup: 4.35.0 - '@rollup/plugin-replace@2.4.2(rollup@4.25.0)': + '@rollup/plugin-replace@2.4.2(rollup@4.35.0)': dependencies: - '@rollup/pluginutils': 3.1.0(rollup@4.25.0) + '@rollup/pluginutils': 3.1.0(rollup@4.35.0) magic-string: 0.25.9 - rollup: 4.25.0 + rollup: 4.35.0 + + '@rollup/plugin-terser@0.4.4(rollup@4.35.0)': + dependencies: + serialize-javascript: 6.0.2 + smob: 1.5.0 + terser: 5.39.0 + optionalDependencies: + rollup: 4.35.0 - '@rollup/plugin-virtual@3.0.2(rollup@4.25.0)': + '@rollup/plugin-virtual@3.0.2(rollup@4.35.0)': optionalDependencies: - rollup: 4.25.0 + rollup: 4.35.0 - '@rollup/pluginutils@3.1.0(rollup@4.25.0)': + '@rollup/pluginutils@3.1.0(rollup@4.35.0)': dependencies: '@types/estree': 0.0.39 estree-walker: 1.0.1 picomatch: 2.3.1 - rollup: 4.25.0 + rollup: 4.35.0 - '@rollup/pluginutils@5.1.0(rollup@4.25.0)': + '@rollup/pluginutils@5.1.0(rollup@4.35.0)': dependencies: '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 optionalDependencies: - rollup: 4.25.0 - - '@rollup/rollup-android-arm-eabi@4.13.0': - optional: true + rollup: 4.35.0 '@rollup/rollup-android-arm-eabi@4.25.0': optional: true - '@rollup/rollup-android-arm64@4.13.0': + '@rollup/rollup-android-arm-eabi@4.35.0': optional: true '@rollup/rollup-android-arm64@4.25.0': optional: true - '@rollup/rollup-darwin-arm64@4.13.0': + '@rollup/rollup-android-arm64@4.35.0': optional: true '@rollup/rollup-darwin-arm64@4.25.0': optional: true - '@rollup/rollup-darwin-x64@4.13.0': + '@rollup/rollup-darwin-arm64@4.35.0': optional: true '@rollup/rollup-darwin-x64@4.25.0': optional: true + '@rollup/rollup-darwin-x64@4.35.0': + optional: true + '@rollup/rollup-freebsd-arm64@4.25.0': optional: true + '@rollup/rollup-freebsd-arm64@4.35.0': + optional: true + '@rollup/rollup-freebsd-x64@4.25.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.13.0': + '@rollup/rollup-freebsd-x64@4.35.0': optional: true '@rollup/rollup-linux-arm-gnueabihf@4.25.0': optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.35.0': + optional: true + '@rollup/rollup-linux-arm-musleabihf@4.25.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.13.0': + '@rollup/rollup-linux-arm-musleabihf@4.35.0': optional: true '@rollup/rollup-linux-arm64-gnu@4.25.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.13.0': + '@rollup/rollup-linux-arm64-gnu@4.35.0': optional: true '@rollup/rollup-linux-arm64-musl@4.25.0': optional: true + '@rollup/rollup-linux-arm64-musl@4.35.0': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.35.0': + optional: true + '@rollup/rollup-linux-powerpc64le-gnu@4.25.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.13.0': + '@rollup/rollup-linux-powerpc64le-gnu@4.35.0': optional: true '@rollup/rollup-linux-riscv64-gnu@4.25.0': optional: true + '@rollup/rollup-linux-riscv64-gnu@4.35.0': + optional: true + '@rollup/rollup-linux-s390x-gnu@4.25.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.13.0': + '@rollup/rollup-linux-s390x-gnu@4.35.0': optional: true '@rollup/rollup-linux-x64-gnu@4.25.0': optional: true - '@rollup/rollup-linux-x64-musl@4.13.0': + '@rollup/rollup-linux-x64-gnu@4.35.0': optional: true '@rollup/rollup-linux-x64-musl@4.25.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.13.0': + '@rollup/rollup-linux-x64-musl@4.35.0': optional: true '@rollup/rollup-win32-arm64-msvc@4.25.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.13.0': + '@rollup/rollup-win32-arm64-msvc@4.35.0': optional: true '@rollup/rollup-win32-ia32-msvc@4.25.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.13.0': + '@rollup/rollup-win32-ia32-msvc@4.35.0': optional: true '@rollup/rollup-win32-x64-msvc@4.25.0': optional: true - '@sinclair/typebox@0.27.8': {} + '@rollup/rollup-win32-x64-msvc@4.35.0': + optional: true '@sindresorhus/merge-streams@2.3.0': {} @@ -12853,13 +13543,13 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@storybook/builder-vite@8.6.4(storybook@8.6.4(prettier@3.2.5))(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))': + '@storybook/builder-vite@8.6.4(storybook@8.6.4(prettier@3.2.5))(vite@5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0))': dependencies: '@storybook/csf-plugin': 8.6.4(storybook@8.6.4(prettier@3.2.5)) browser-assert: 1.2.1 storybook: 8.6.4(prettier@3.2.5) ts-dedent: 2.2.0 - vite: 5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) + vite: 5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0) '@storybook/channels@8.0.8': dependencies: @@ -12938,11 +13628,11 @@ snapshots: react-dom: 18.2.0(react@18.2.0) storybook: 8.6.4(prettier@3.2.5) - '@storybook/react-vite@8.6.4(@storybook/test@8.6.4(storybook@8.6.4(prettier@3.2.5)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.25.0)(storybook@8.6.4(prettier@3.2.5))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))': + '@storybook/react-vite@8.6.4(@storybook/test@8.6.4(storybook@8.6.4(prettier@3.2.5)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.35.0)(storybook@8.6.4(prettier@3.2.5))(typescript@5.6.3)(vite@5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.5.0(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)) - '@rollup/pluginutils': 5.1.0(rollup@4.25.0) - '@storybook/builder-vite': 8.6.4(storybook@8.6.4(prettier@3.2.5))(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.5.0(typescript@5.6.3)(vite@5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0)) + '@rollup/pluginutils': 5.1.0(rollup@4.35.0) + '@storybook/builder-vite': 8.6.4(storybook@8.6.4(prettier@3.2.5))(vite@5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0)) '@storybook/react': 8.6.4(@storybook/test@8.6.4(storybook@8.6.4(prettier@3.2.5)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.4(prettier@3.2.5))(typescript@5.6.3) find-up: 5.0.0 magic-string: 0.30.8 @@ -12952,7 +13642,7 @@ snapshots: resolve: 1.22.8 storybook: 8.6.4(prettier@3.2.5) tsconfig-paths: 4.2.0 - vite: 5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) + vite: 5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0) optionalDependencies: '@storybook/test': 8.6.4(storybook@8.6.4(prettier@3.2.5)) transitivePeerDependencies: @@ -12995,7 +13685,7 @@ snapshots: ejs: 3.1.10 json5: 2.2.3 magic-string: 0.25.9 - string.prototype.matchall: 4.0.11 + string.prototype.matchall: 4.0.12 '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.24.0)': dependencies: @@ -13242,7 +13932,7 @@ snapshots: '@types/hast@2.3.10': dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 '@types/json-schema@7.0.15': {} @@ -13253,10 +13943,12 @@ snapshots: '@types/mdast@3.0.15': dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 '@types/mdx@2.0.11': {} + '@types/mdx@2.0.13': {} + '@types/minimatch@5.1.2': {} '@types/ms@0.7.34': {} @@ -13265,6 +13957,10 @@ snapshots: dependencies: undici-types: 5.26.5 + '@types/node@20.17.24': + dependencies: + undici-types: 6.19.8 + '@types/node@20.17.6': dependencies: undici-types: 6.19.8 @@ -13285,9 +13981,7 @@ snapshots: '@types/scheduler': 0.16.8 csstype: 3.1.3 - '@types/resolve@1.17.1': - dependencies: - '@types/node': 20.17.6 + '@types/resolve@1.20.2': {} '@types/resolve@1.20.6': {} @@ -13309,7 +14003,7 @@ snapshots: '@types/ua-parser-js@0.7.39': {} - '@types/unist@2.0.10': {} + '@types/unist@2.0.11': {} '@types/uuid@9.0.8': {} @@ -13360,7 +14054,7 @@ snapshots: dependencies: '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.6.3) '@typescript-eslint/utils': 7.8.0(eslint@8.57.0)(typescript@5.6.3) - debug: 4.3.4 + debug: 4.4.0 eslint: 8.57.0 ts-api-utils: 1.3.0(typescript@5.6.3) optionalDependencies: @@ -13376,7 +14070,7 @@ snapshots: dependencies: '@typescript-eslint/types': 7.8.0 '@typescript-eslint/visitor-keys': 7.8.0 - debug: 4.3.4 + debug: 4.4.0 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.4 @@ -13444,70 +14138,69 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vanilla-extract/babel-plugin-debug-ids@1.0.5': + '@vanilla-extract/babel-plugin-debug-ids@1.2.0': dependencies: '@babel/core': 7.24.5 transitivePeerDependencies: - supports-color - '@vanilla-extract/css@1.14.1': + '@vanilla-extract/css@1.17.1': dependencies: - '@emotion/hash': 0.9.1 - '@vanilla-extract/private': 1.0.3 - chalk: 4.1.2 + '@emotion/hash': 0.9.2 + '@vanilla-extract/private': 1.0.6 css-what: 6.1.0 cssesc: 3.0.0 csstype: 3.1.3 + dedent: 1.5.3 deep-object-diff: 1.1.9 deepmerge: 4.3.1 + lru-cache: 10.4.3 media-query-parser: 2.0.2 - modern-ahocorasick: 1.0.1 - outdent: 0.8.0 + modern-ahocorasick: 1.1.0 + picocolors: 1.1.1 + transitivePeerDependencies: + - babel-plugin-macros - '@vanilla-extract/integration@6.5.0(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)': + '@vanilla-extract/integration@6.5.0(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0)': dependencies: '@babel/core': 7.24.5 - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.24.5) - '@vanilla-extract/babel-plugin-debug-ids': 1.0.5 - '@vanilla-extract/css': 1.14.1 + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.24.5) + '@vanilla-extract/babel-plugin-debug-ids': 1.2.0 + '@vanilla-extract/css': 1.17.1 esbuild: 0.20.1 eval: 0.1.8 find-up: 5.0.0 javascript-stringify: 2.1.0 lodash: 4.17.21 - mlly: 1.6.1 + mlly: 1.7.4 outdent: 0.8.0 - vite: 5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) - vite-node: 1.5.0(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) + vite: 5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0) + vite-node: 1.6.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0) transitivePeerDependencies: - '@types/node' + - babel-plugin-macros - less - lightningcss - sass + - sass-embedded - stylus - sugarss - supports-color - terser - '@vanilla-extract/private@1.0.3': {} + '@vanilla-extract/private@1.0.6': {} - '@vitejs/plugin-react@4.2.1(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))': + '@vitejs/plugin-react@4.2.1(vite@5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0))': dependencies: '@babel/core': 7.24.0 '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.24.0) '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.24.0) '@types/babel__core': 7.20.5 react-refresh: 0.14.0 - vite: 5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) + vite: 5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0) transitivePeerDependencies: - supports-color - '@vitest/expect@1.5.0': - dependencies: - '@vitest/spy': 1.5.0 - '@vitest/utils': 1.5.0 - chai: 4.4.1 - '@vitest/expect@2.0.5': dependencies: '@vitest/spy': 2.0.5 @@ -13515,6 +14208,21 @@ snapshots: chai: 5.1.2 tinyrainbow: 1.2.0 + '@vitest/expect@3.0.8': + dependencies: + '@vitest/spy': 3.0.8 + '@vitest/utils': 3.0.8 + chai: 5.2.0 + tinyrainbow: 2.0.0 + + '@vitest/mocker@3.0.8(vite@5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0))': + dependencies: + '@vitest/spy': 3.0.8 + estree-walker: 3.0.3 + magic-string: 0.30.17 + optionalDependencies: + vite: 5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0) + '@vitest/pretty-format@2.0.5': dependencies: tinyrainbow: 1.2.0 @@ -13523,32 +14231,28 @@ snapshots: dependencies: tinyrainbow: 1.2.0 - '@vitest/runner@1.5.0': + '@vitest/pretty-format@3.0.8': dependencies: - '@vitest/utils': 1.5.0 - p-limit: 5.0.0 - pathe: 1.1.2 + tinyrainbow: 2.0.0 - '@vitest/snapshot@1.5.0': + '@vitest/runner@3.0.8': dependencies: - magic-string: 0.30.8 - pathe: 1.1.2 - pretty-format: 29.7.0 + '@vitest/utils': 3.0.8 + pathe: 2.0.3 - '@vitest/spy@1.5.0': + '@vitest/snapshot@3.0.8': dependencies: - tinyspy: 2.2.1 + '@vitest/pretty-format': 3.0.8 + magic-string: 0.30.17 + pathe: 2.0.3 '@vitest/spy@2.0.5': dependencies: tinyspy: 3.0.2 - '@vitest/utils@1.5.0': + '@vitest/spy@3.0.8': dependencies: - diff-sequences: 29.6.3 - estree-walker: 3.0.3 - loupe: 2.3.7 - pretty-format: 29.7.0 + tinyspy: 3.0.2 '@vitest/utils@2.0.5': dependencies: @@ -13563,6 +14267,12 @@ snapshots: loupe: 3.1.2 tinyrainbow: 1.2.0 + '@vitest/utils@3.0.8': + dependencies: + '@vitest/pretty-format': 3.0.8 + loupe: 3.1.3 + tinyrainbow: 2.0.0 + '@web3-storage/multipart-parser@1.0.0': {} '@webassemblyjs/ast@1.14.1': @@ -13677,17 +14387,17 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 - acorn-import-assertions@1.9.0(acorn@8.14.0): + acorn-import-assertions@1.9.0(acorn@8.14.1): dependencies: - acorn: 8.14.0 + acorn: 8.14.1 acorn-jsx@5.3.2(acorn@8.11.3): dependencies: acorn: 8.11.3 - acorn-jsx@5.3.2(acorn@8.14.0): + acorn-jsx@5.3.2(acorn@8.14.1): dependencies: - acorn: 8.14.0 + acorn: 8.14.1 acorn-walk@8.3.2: {} @@ -13695,15 +14405,26 @@ snapshots: acorn@8.14.0: {} + acorn@8.14.1: {} + aggregate-error@3.1.0: dependencies: clean-stack: 2.2.0 indent-string: 4.0.0 + ajv-formats@2.1.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + ajv-keywords@3.5.2(ajv@6.12.6): dependencies: ajv: 6.12.6 + ajv-keywords@5.1.0(ajv@8.17.1): + dependencies: + ajv: 8.17.1 + fast-deep-equal: 3.1.3 + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 @@ -13714,7 +14435,7 @@ snapshots: ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.0.3 + fast-uri: 3.0.6 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -13766,6 +14487,11 @@ snapshots: call-bind: 1.0.7 is-array-buffer: 3.0.4 + array-buffer-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + is-array-buffer: 3.0.5 + array-flatten@1.1.1: {} array-includes@3.1.7: @@ -13849,6 +14575,16 @@ snapshots: is-array-buffer: 3.0.4 is-shared-array-buffer: 1.0.3 + arraybuffer.prototype.slice@1.0.4: + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + is-array-buffer: 3.0.5 + arrify@3.0.0: {} assert@2.1.0: @@ -13859,15 +14595,15 @@ snapshots: object.assign: 4.1.5 util: 0.12.5 - assertion-error@1.1.0: {} - assertion-error@2.0.1: {} ast-types@0.16.1: dependencies: tslib: 2.6.2 - astring@1.8.6: {} + astring@1.9.0: {} + + async-function@1.0.0: {} async@3.2.6: {} @@ -13902,27 +14638,27 @@ snapshots: transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.24.5): + babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.24.5): dependencies: - '@babel/compat-data': 7.26.2 + '@babel/compat-data': 7.26.8 '@babel/core': 7.24.5 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.5) + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.24.5) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.24.5): + babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.24.5): dependencies: '@babel/core': 7.24.5 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.5) - core-js-compat: 3.39.0 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.24.5) + core-js-compat: 3.41.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.24.5): + babel-plugin-polyfill-regenerator@0.6.3(@babel/core@7.24.5): dependencies: '@babel/core': 7.24.5 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.5) + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.24.5) transitivePeerDependencies: - supports-color @@ -13971,7 +14707,7 @@ snapshots: blake2b-wasm: 2.4.0 nanoassert: 2.0.0 - body-parser@1.20.2: + body-parser@1.20.3: dependencies: bytes: 3.1.2 content-type: 1.0.5 @@ -13981,7 +14717,7 @@ snapshots: http-errors: 2.0.0 iconv-lite: 0.4.24 on-finished: 2.4.1 - qs: 6.11.0 + qs: 6.13.0 raw-body: 2.5.2 type-is: 1.6.18 unpipe: 1.0.0 @@ -14030,6 +14766,13 @@ snapshots: node-releases: 2.0.18 update-browserslist-db: 1.1.1(browserslist@4.24.2) + browserslist@4.24.4: + dependencies: + caniuse-lite: 1.0.30001704 + electron-to-chromium: 1.5.117 + node-releases: 2.0.19 + update-browserslist-db: 1.1.3(browserslist@4.24.4) + bs58@5.0.0: dependencies: base-x: 4.0.0 @@ -14074,17 +14817,17 @@ snapshots: cacache@17.1.4: dependencies: - '@npmcli/fs': 3.1.0 + '@npmcli/fs': 3.1.1 fs-minipass: 3.0.3 - glob: 10.3.10 + glob: 10.4.5 lru-cache: 7.18.3 - minipass: 7.0.4 + minipass: 7.1.2 minipass-collect: 1.0.2 minipass-flush: 1.0.5 minipass-pipeline: 1.2.4 p-map: 4.0.0 - ssri: 10.0.5 - tar: 6.2.0 + ssri: 10.0.6 + tar: 6.2.1 unique-filename: 3.0.0 call-bind-apply-helpers@1.0.2: @@ -14122,6 +14865,8 @@ snapshots: caniuse-lite@1.0.30001680: {} + caniuse-lite@1.0.30001704: {} + catering@2.1.1: {} cbor-extract@2.2.0: @@ -14146,17 +14891,15 @@ snapshots: dependencies: nanoassert: 2.0.0 - chai@4.4.1: + chai@5.1.2: dependencies: - assertion-error: 1.1.0 - check-error: 1.0.3 - deep-eql: 4.1.3 - get-func-name: 2.0.2 - loupe: 2.3.7 - pathval: 1.1.1 - type-detect: 4.0.8 + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.2 + pathval: 2.0.0 - chai@5.1.2: + chai@5.2.0: dependencies: assertion-error: 2.0.1 check-error: 2.1.1 @@ -14190,10 +14933,6 @@ snapshots: character-reference-invalid@2.0.1: {} - check-error@1.0.3: - dependencies: - get-func-name: 2.0.2 - check-error@2.1.1: {} chokidar@3.6.0: @@ -14289,6 +15028,10 @@ snapshots: concat-map@0.0.1: {} + confbox@0.1.8: {} + + confbox@0.2.1: {} + confusing-browser-globals@1.0.11: {} content-disposition@0.5.4: @@ -14301,21 +15044,21 @@ snapshots: cookie-signature@1.0.6: {} - cookie-signature@1.2.1: {} - - cookie@0.5.0: {} + cookie-signature@1.2.2: {} cookie@0.6.0: {} + cookie@0.7.1: {} + cookie@1.0.2: {} core-js-compat@3.36.1: dependencies: browserslist: 4.23.0 - core-js-compat@3.39.0: + core-js-compat@3.41.0: dependencies: - browserslist: 4.24.2 + browserslist: 4.24.4 core-util-is@1.0.3: {} @@ -14352,6 +15095,12 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + crypto-random-string@2.0.0: {} css-what@6.1.0: {} @@ -14372,18 +15121,36 @@ snapshots: es-errors: 1.3.0 is-data-view: 1.0.1 + data-view-buffer@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + data-view-byte-length@1.0.1: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-data-view: 1.0.1 + data-view-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + data-view-byte-offset@1.0.0: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-data-view: 1.0.1 + data-view-byte-offset@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + date-fns@3.6.0: {} debug@2.6.9: @@ -14406,7 +15173,7 @@ snapshots: dependencies: ms: 2.1.3 - decode-named-character-reference@1.0.2: + decode-named-character-reference@1.1.0: dependencies: character-entities: 2.0.2 @@ -14416,10 +15183,6 @@ snapshots: dedent@1.5.3: {} - deep-eql@4.1.3: - dependencies: - type-detect: 4.0.8 - deep-eql@5.0.2: {} deep-extend@0.6.0: {} @@ -14476,8 +15239,6 @@ snapshots: didyoumean@1.2.2: {} - diff-sequences@29.6.3: {} - diff@4.0.2: {} diff@5.2.0: {} @@ -14505,7 +15266,7 @@ snapshots: no-case: 3.0.4 tslib: 2.6.2 - dotenv@16.4.5: {} + dotenv@16.4.7: {} dunder-proto@1.0.1: dependencies: @@ -14535,6 +15296,8 @@ snapshots: electron-to-chromium@1.4.705: {} + electron-to-chromium@1.5.117: {} + electron-to-chromium@1.5.55: {} emittery@0.6.0: {} @@ -14549,6 +15312,8 @@ snapshots: encodeurl@1.0.2: {} + encodeurl@2.0.0: {} + end-of-stream@1.4.4: dependencies: once: 1.4.0 @@ -14563,7 +15328,7 @@ snapshots: memory-fs: 0.2.0 tapable: 0.1.10 - enhanced-resolve@5.17.1: + enhanced-resolve@5.18.1: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 @@ -14671,6 +15436,60 @@ snapshots: unbox-primitive: 1.0.2 which-typed-array: 1.1.15 + es-abstract@1.23.9: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-regex: 1.2.1 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.3 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.19 + es-array-method-boxes-properly@1.0.0: {} es-define-property@1.0.0: @@ -14701,6 +15520,8 @@ snapshots: es-module-lexer@1.5.4: {} + es-module-lexer@1.6.0: {} + es-object-atoms@1.0.0: dependencies: es-errors: 1.3.0 @@ -14715,6 +15536,13 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + es-shim-unscopables@1.0.2: dependencies: hasown: 2.0.2 @@ -14725,12 +15553,18 @@ snapshots: is-date-object: 1.0.5 is-symbol: 1.0.4 - esbuild-plugins-node-modules-polyfill@1.6.3(esbuild@0.20.1): + es-to-primitive@1.3.0: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.1.0 + is-symbol: 1.1.1 + + esbuild-plugins-node-modules-polyfill@1.7.0(esbuild@0.20.1): dependencies: - '@jspm/core': 2.0.1 + '@jspm/core': 2.1.0 esbuild: 0.20.1 - local-pkg: 0.5.0 - resolve.exports: 2.0.2 + local-pkg: 1.1.1 + resolve.exports: 2.0.3 esbuild-register@3.5.0(esbuild@0.20.1): dependencies: @@ -15133,7 +15967,7 @@ snapshots: estree-util-to-js@1.2.0: dependencies: '@types/estree-jsx': 1.0.5 - astring: 1.8.6 + astring: 1.9.0 source-map: 0.7.4 estree-util-value-to-estree@1.3.0: @@ -15143,7 +15977,7 @@ snapshots: estree-util-visit@1.2.1: dependencies: '@types/estree-jsx': 1.0.5 - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 estree-walker@1.0.1: {} @@ -15159,7 +15993,7 @@ snapshots: eval@0.1.8: dependencies: - '@types/node': 20.17.6 + '@types/node': 20.17.24 require-like: 0.1.2 event-target-shim@5.0.1: {} @@ -15198,34 +16032,36 @@ snapshots: expand-template@2.0.3: {} - express@4.18.3: + expect-type@1.2.0: {} + + express@4.21.2: dependencies: accepts: 1.3.8 array-flatten: 1.1.1 - body-parser: 1.20.2 + body-parser: 1.20.3 content-disposition: 0.5.4 content-type: 1.0.5 - cookie: 0.5.0 + cookie: 0.7.1 cookie-signature: 1.0.6 debug: 2.6.9 depd: 2.0.0 - encodeurl: 1.0.2 + encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 - finalhandler: 1.2.0 + finalhandler: 1.3.1 fresh: 0.5.2 http-errors: 2.0.0 - merge-descriptors: 1.0.1 + merge-descriptors: 1.0.3 methods: 1.1.2 on-finished: 2.4.1 parseurl: 1.3.3 - path-to-regexp: 0.1.7 + path-to-regexp: 0.1.12 proxy-addr: 2.0.7 - qs: 6.11.0 + qs: 6.13.0 range-parser: 1.2.1 safe-buffer: 5.2.1 - send: 0.18.0 - serve-static: 1.15.0 + send: 0.19.0 + serve-static: 1.16.2 setprototypeof: 1.2.0 statuses: 2.0.1 type-is: 1.6.18 @@ -15234,6 +16070,8 @@ snapshots: transitivePeerDependencies: - supports-color + exsolve@1.0.4: {} + extend@3.0.2: {} fast-check@3.23.2: @@ -15260,7 +16098,7 @@ snapshots: fast-sha256@1.3.0: {} - fast-uri@3.0.3: {} + fast-uri@3.0.6: {} fastq@1.17.1: dependencies: @@ -15270,6 +16108,10 @@ snapshots: dependencies: format: 0.2.2 + fdir@6.4.3(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + file-entry-cache@6.0.1: dependencies: flat-cache: 3.2.0 @@ -15282,10 +16124,10 @@ snapshots: dependencies: to-regex-range: 5.0.1 - finalhandler@1.2.0: + finalhandler@1.3.1: dependencies: debug: 2.6.9 - encodeurl: 1.0.2 + encodeurl: 2.0.0 escape-html: 1.0.3 on-finished: 2.4.1 parseurl: 1.3.3 @@ -15338,11 +16180,20 @@ snapshots: dependencies: is-callable: 1.2.7 + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + foreground-child@3.1.1: dependencies: cross-spawn: 7.0.3 signal-exit: 4.1.0 + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + format@0.2.2: {} forwarded@0.2.0: {} @@ -15382,7 +16233,7 @@ snapshots: fs-minipass@3.0.3: dependencies: - minipass: 7.0.4 + minipass: 7.1.2 fs.realpath@1.0.0: {} @@ -15401,6 +16252,15 @@ snapshots: es-abstract: 1.22.5 functions-have-names: 1.2.3 + function.prototype.name@1.1.8: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + functions-have-names: 1.2.3 + hasown: 2.0.2 + is-callable: 1.2.7 + functions-have-names@1.2.3: {} generic-names@4.0.0: @@ -15411,8 +16271,6 @@ snapshots: get-east-asian-width@1.2.0: {} - get-func-name@2.0.2: {} - get-intrinsic@1.2.4: dependencies: es-errors: 1.3.0 @@ -15459,6 +16317,12 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.2.4 + get-symbol-description@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + get-tsconfig@4.7.3: dependencies: resolve-pkg-maps: 1.0.0 @@ -15483,7 +16347,16 @@ snapshots: minipass: 7.0.4 path-scurry: 1.10.1 - glob@7.2.3: + glob@10.4.5: + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + glob@7.2.3: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -15504,6 +16377,11 @@ snapshots: dependencies: define-properties: 1.2.1 + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 + globby@10.0.2: dependencies: '@types/glob': 7.2.0 @@ -15556,6 +16434,8 @@ snapshots: has-bigints@1.0.2: {} + has-bigints@1.1.0: {} + has-flag@3.0.0: {} has-flag@4.0.0: {} @@ -15566,6 +16446,10 @@ snapshots: has-proto@1.0.3: {} + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 + has-symbols@1.0.3: {} has-symbols@1.1.0: {} @@ -15583,14 +16467,14 @@ snapshots: '@types/estree': 1.0.6 '@types/estree-jsx': 1.0.5 '@types/hast': 2.3.10 - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 comma-separated-tokens: 2.0.3 estree-util-attach-comments: 2.1.1 estree-util-is-identifier-name: 2.1.0 hast-util-whitespace: 2.0.1 mdast-util-mdx-expression: 1.3.2 mdast-util-mdxjs-esm: 1.3.1 - property-information: 6.4.1 + property-information: 6.5.0 space-separated-tokens: 2.0.2 style-to-object: 0.4.4 unist-util-position: 4.0.4 @@ -15724,6 +16608,12 @@ snapshots: hasown: 2.0.2 side-channel: 1.0.6 + internal-slot@1.1.0: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.1.0 + interpret@1.4.0: {} invariant@2.2.4: @@ -15756,16 +16646,34 @@ snapshots: call-bind: 1.0.7 get-intrinsic: 1.2.4 + is-array-buffer@3.0.5: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-arrayish@0.2.1: {} is-async-function@2.0.0: dependencies: has-tostringtag: 1.0.2 + is-async-function@2.1.1: + dependencies: + async-function: 1.0.0 + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + is-bigint@1.0.4: dependencies: has-bigints: 1.0.2 + is-bigint@1.1.0: + dependencies: + has-bigints: 1.1.0 + is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 @@ -15775,6 +16683,11 @@ snapshots: call-bind: 1.0.7 has-tostringtag: 1.0.2 + is-boolean-object@1.2.2: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + is-buffer@2.0.5: {} is-builtin-module@3.2.1: @@ -15787,14 +16700,29 @@ snapshots: dependencies: hasown: 2.0.2 + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + is-data-view@1.0.1: dependencies: is-typed-array: 1.1.13 + is-data-view@1.0.2: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-typed-array: 1.1.15 + is-date-object@1.0.5: dependencies: has-tostringtag: 1.0.2 + is-date-object@1.1.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + is-decimal@2.0.1: {} is-deflate@1.0.0: {} @@ -15809,12 +16737,23 @@ snapshots: dependencies: call-bind: 1.0.7 + is-finalizationregistry@1.1.1: + dependencies: + call-bound: 1.0.4 + is-fullwidth-code-point@3.0.0: {} is-generator-function@1.0.10: dependencies: has-tostringtag: 1.0.2 + is-generator-function@1.1.0: + dependencies: + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + is-get-set-prop@1.0.0: dependencies: get-set-props: 0.1.0 @@ -15855,6 +16794,11 @@ snapshots: dependencies: has-tostringtag: 1.0.2 + is-number-object@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + is-number@7.0.0: {} is-obj-prop@1.0.0: @@ -15881,7 +16825,7 @@ snapshots: lowercase-keys: 1.0.1 proto-props: 2.0.0 - is-reference@3.0.2: + is-reference@3.0.3: dependencies: '@types/estree': 1.0.6 @@ -15890,6 +16834,13 @@ snapshots: call-bind: 1.0.7 has-tostringtag: 1.0.2 + is-regex@1.2.1: + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + is-regexp@1.0.0: {} is-relative@1.0.0: @@ -15902,6 +16853,10 @@ snapshots: dependencies: call-bind: 1.0.7 + is-shared-array-buffer@1.0.4: + dependencies: + call-bound: 1.0.4 + is-stream@2.0.1: {} is-stream@3.0.0: {} @@ -15910,14 +16865,29 @@ snapshots: dependencies: has-tostringtag: 1.0.2 + is-string@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + is-symbol@1.0.4: dependencies: has-symbols: 1.0.3 + is-symbol@1.1.1: + dependencies: + call-bound: 1.0.4 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 + is-typed-array@1.1.13: dependencies: which-typed-array: 1.1.15 + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.19 + is-unc-path@1.0.0: dependencies: unc-path-regex: 0.1.2 @@ -15932,6 +16902,10 @@ snapshots: dependencies: call-bind: 1.0.7 + is-weakref@1.1.1: + dependencies: + call-bound: 1.0.4 + is-weakset@2.0.3: dependencies: call-bind: 1.0.7 @@ -15977,6 +16951,12 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + jake@10.9.2: dependencies: async: 3.2.6 @@ -15986,15 +16966,9 @@ snapshots: javascript-stringify@2.1.0: {} - jest-worker@26.6.2: - dependencies: - '@types/node': 20.17.6 - merge-stream: 2.0.0 - supports-color: 7.2.0 - jest-worker@27.5.1: dependencies: - '@types/node': 20.17.6 + '@types/node': 20.17.24 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -16002,7 +16976,7 @@ snapshots: js-tokens@4.0.0: {} - js-tokens@8.0.3: {} + js-tokens@9.0.1: {} js-types@1.0.0: {} @@ -16131,6 +17105,12 @@ snapshots: mlly: 1.6.1 pkg-types: 1.0.3 + local-pkg@1.1.1: + dependencies: + mlly: 1.7.4 + pkg-types: 2.1.0 + quansync: 0.2.8 + localforage@1.10.0: dependencies: lie: 3.1.1 @@ -16194,12 +17174,10 @@ snapshots: dependencies: js-tokens: 4.0.0 - loupe@2.3.7: - dependencies: - get-func-name: 2.0.2 - loupe@3.1.2: {} + loupe@3.1.3: {} + lower-case@2.0.2: dependencies: tslib: 2.6.2 @@ -16208,6 +17186,8 @@ snapshots: lru-cache@10.2.0: {} + lru-cache@10.4.3: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -16228,6 +17208,10 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 + magic-string@0.30.17: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + magic-string@0.30.8: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 @@ -16243,14 +17227,14 @@ snapshots: mdast-util-definitions@5.1.2: dependencies: '@types/mdast': 3.0.15 - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 unist-util-visit: 4.1.2 mdast-util-from-markdown@1.3.1: dependencies: '@types/mdast': 3.0.15 - '@types/unist': 2.0.10 - decode-named-character-reference: 1.0.2 + '@types/unist': 2.0.11 + decode-named-character-reference: 1.1.0 mdast-util-to-string: 3.2.0 micromark: 3.2.0 micromark-util-decode-numeric-character-reference: 1.1.0 @@ -16284,12 +17268,12 @@ snapshots: '@types/estree-jsx': 1.0.5 '@types/hast': 2.3.10 '@types/mdast': 3.0.15 - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 ccount: 2.0.1 mdast-util-from-markdown: 1.3.1 mdast-util-to-markdown: 1.5.0 - parse-entities: 4.0.1 - stringify-entities: 4.0.3 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 unist-util-remove-position: 4.0.2 unist-util-stringify-position: 3.0.3 vfile-message: 3.1.4 @@ -16335,7 +17319,7 @@ snapshots: mdast-util-to-markdown@1.5.0: dependencies: '@types/mdast': 3.0.15 - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 longest-streak: 3.1.0 mdast-util-phrasing: 3.0.1 mdast-util-to-string: 3.2.0 @@ -16349,7 +17333,7 @@ snapshots: media-query-parser@2.0.2: dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.26.10 media-typer@0.3.0: {} @@ -16363,7 +17347,7 @@ snapshots: meow@13.2.0: {} - merge-descriptors@1.0.1: {} + merge-descriptors@1.0.3: {} merge-stream@2.0.0: {} @@ -16375,7 +17359,7 @@ snapshots: micromark-core-commonmark@1.1.0: dependencies: - decode-named-character-reference: 1.0.2 + decode-named-character-reference: 1.1.0 micromark-factory-destination: 1.1.0 micromark-factory-label: 1.1.0 micromark-factory-space: 1.1.0 @@ -16441,8 +17425,8 @@ snapshots: micromark-extension-mdxjs@1.0.1: dependencies: - acorn: 8.14.0 - acorn-jsx: 5.3.2(acorn@8.14.0) + acorn: 8.14.1 + acorn-jsx: 5.3.2(acorn@8.14.1) micromark-extension-mdx-expression: 1.0.8 micromark-extension-mdx-jsx: 1.0.5 micromark-extension-mdx-md: 1.0.1 @@ -16519,7 +17503,7 @@ snapshots: micromark-util-decode-string@1.1.0: dependencies: - decode-named-character-reference: 1.0.2 + decode-named-character-reference: 1.1.0 micromark-util-character: 1.2.0 micromark-util-decode-numeric-character-reference: 1.1.0 micromark-util-symbol: 1.1.0 @@ -16530,7 +17514,7 @@ snapshots: dependencies: '@types/acorn': 4.0.6 '@types/estree': 1.0.6 - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 estree-util-visit: 1.2.1 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 @@ -16568,7 +17552,7 @@ snapshots: dependencies: '@types/debug': 4.1.12 debug: 4.4.0 - decode-named-character-reference: 1.0.2 + decode-named-character-reference: 1.1.0 micromark-core-commonmark: 1.1.0 micromark-factory-space: 1.1.0 micromark-util-character: 1.2.0 @@ -16629,6 +17613,10 @@ snapshots: dependencies: brace-expansion: 2.0.1 + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + minimist@1.2.8: {} minipass-collect@1.0.2: @@ -16651,6 +17639,8 @@ snapshots: minipass@7.0.4: {} + minipass@7.1.2: {} + minizlib@2.1.2: dependencies: minipass: 3.3.6 @@ -16671,9 +17661,16 @@ snapshots: pkg-types: 1.0.3 ufo: 1.4.0 + mlly@1.7.4: + dependencies: + acorn: 8.14.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.5.4 + mockdate@3.0.5: {} - modern-ahocorasick@1.0.1: {} + modern-ahocorasick@1.1.0: {} module-error@1.0.2: {} @@ -16771,6 +17768,8 @@ snapshots: node-releases@2.0.18: {} + node-releases@2.0.19: {} + normalize-package-data@2.5.0: dependencies: hosted-git-info: 2.8.9 @@ -16837,6 +17836,8 @@ snapshots: object-inspect@1.13.1: {} + object-inspect@1.13.4: {} + object-is@1.1.6: dependencies: call-bind: 1.0.7 @@ -16851,6 +17852,15 @@ snapshots: has-symbols: 1.0.3 object-keys: 1.1.1 + object.assign@4.1.7: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + has-symbols: 1.1.0 + object-keys: 1.1.1 + object.entries@1.1.7: dependencies: call-bind: 1.0.7 @@ -16936,6 +17946,12 @@ snapshots: outdent@0.8.0: {} + own-keys@1.0.1: + dependencies: + get-intrinsic: 1.3.0 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + p-defer@3.0.0: {} p-limit@2.3.0: @@ -16950,10 +17966,6 @@ snapshots: dependencies: yocto-queue: 1.0.0 - p-limit@5.0.0: - dependencies: - yocto-queue: 1.0.0 - p-locate@3.0.0: dependencies: p-limit: 2.3.0 @@ -16980,19 +17992,20 @@ snapshots: p-try@2.2.0: {} + package-json-from-dist@1.0.1: {} + pako@0.2.9: {} parent-module@1.0.1: dependencies: callsites: 3.1.0 - parse-entities@4.0.1: + parse-entities@4.0.2: dependencies: - '@types/unist': 2.0.10 - character-entities: 2.0.2 + '@types/unist': 2.0.11 character-entities-legacy: 3.0.0 character-reference-invalid: 2.0.1 - decode-named-character-reference: 1.0.2 + decode-named-character-reference: 1.1.0 is-alphanumerical: 2.0.1 is-decimal: 2.0.1 is-hexadecimal: 2.0.1 @@ -17036,7 +18049,12 @@ snapshots: lru-cache: 10.2.0 minipass: 7.0.4 - path-to-regexp@0.1.7: {} + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + path-to-regexp@0.1.12: {} path-type@3.0.0: dependencies: @@ -17048,7 +18066,7 @@ snapshots: pathe@1.1.2: {} - pathval@1.1.1: {} + pathe@2.0.3: {} pathval@2.0.0: {} @@ -17062,7 +18080,7 @@ snapshots: dependencies: '@types/estree': 1.0.6 estree-walker: 3.0.3 - is-reference: 3.0.2 + is-reference: 3.0.3 picocolors@1.0.0: {} @@ -17070,6 +18088,8 @@ snapshots: picomatch@2.3.1: {} + picomatch@4.0.2: {} + pidtree@0.3.1: {} pidtree@0.6.0: {} @@ -17096,6 +18116,18 @@ snapshots: mlly: 1.6.1 pathe: 1.1.2 + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.7.4 + pathe: 2.0.3 + + pkg-types@2.1.0: + dependencies: + confbox: 0.2.1 + exsolve: 1.0.4 + pathe: 2.0.3 + pkg-up@3.1.0: dependencies: find-up: 3.0.0 @@ -17130,6 +18162,8 @@ snapshots: possible-typed-array-names@1.0.0: {} + possible-typed-array-names@1.1.0: {} + postcss-discard-duplicates@5.1.0(postcss@8.5.3): dependencies: postcss: 8.5.3 @@ -17184,7 +18218,7 @@ snapshots: postcss: 8.4.35 optional: true - postcss-modules-extract-imports@3.0.0(postcss@8.5.3): + postcss-modules-extract-imports@3.1.0(postcss@8.5.3): dependencies: postcss: 8.5.3 @@ -17196,11 +18230,11 @@ snapshots: postcss-value-parser: 4.2.0 optional: true - postcss-modules-local-by-default@4.0.4(postcss@8.5.3): + postcss-modules-local-by-default@4.2.0(postcss@8.5.3): dependencies: icss-utils: 5.1.0(postcss@8.5.3) postcss: 8.5.3 - postcss-selector-parser: 6.0.16 + postcss-selector-parser: 7.1.0 postcss-value-parser: 4.2.0 postcss-modules-scope@3.1.1(postcss@8.4.35): @@ -17209,10 +18243,10 @@ snapshots: postcss-selector-parser: 6.0.16 optional: true - postcss-modules-scope@3.1.1(postcss@8.5.3): + postcss-modules-scope@3.2.1(postcss@8.5.3): dependencies: postcss: 8.5.3 - postcss-selector-parser: 6.0.16 + postcss-selector-parser: 7.1.0 postcss-modules-values@4.0.0(postcss@8.4.35): dependencies: @@ -17238,15 +18272,15 @@ snapshots: string-hash: 1.1.3 optional: true - postcss-modules@6.0.0(postcss@8.5.3): + postcss-modules@6.0.1(postcss@8.5.3): dependencies: generic-names: 4.0.0 icss-utils: 5.1.0(postcss@8.5.3) lodash.camelcase: 4.3.0 postcss: 8.5.3 - postcss-modules-extract-imports: 3.0.0(postcss@8.5.3) - postcss-modules-local-by-default: 4.0.4(postcss@8.5.3) - postcss-modules-scope: 3.1.1(postcss@8.5.3) + postcss-modules-extract-imports: 3.1.0(postcss@8.5.3) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.3) + postcss-modules-scope: 3.2.1(postcss@8.5.3) postcss-modules-values: 4.0.0(postcss@8.5.3) string-hash: 1.1.3 @@ -17266,6 +18300,11 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 + postcss-selector-parser@7.1.0: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + postcss-value-parser@4.2.0: {} postcss@8.4.35: @@ -17321,12 +18360,6 @@ snapshots: ansi-styles: 5.2.0 react-is: 17.0.2 - pretty-format@29.7.0: - dependencies: - '@jest/schemas': 29.6.3 - ansi-styles: 5.2.0 - react-is: 18.2.0 - pretty-ms@7.0.1: dependencies: parse-ms: 2.1.0 @@ -17350,7 +18383,7 @@ snapshots: object-assign: 4.1.1 react-is: 16.13.1 - property-information@6.4.1: {} + property-information@6.5.0: {} proto-props@2.0.0: {} @@ -17384,6 +18417,11 @@ snapshots: end-of-stream: 1.4.4 once: 1.4.0 + pump@3.0.2: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + pumpify@1.5.1: dependencies: duplexify: 3.7.1 @@ -17402,6 +18440,12 @@ snapshots: dependencies: side-channel: 1.0.6 + qs@6.13.0: + dependencies: + side-channel: 1.1.0 + + quansync@0.2.8: {} + queue-microtask@1.2.3: {} queue-tick@1.0.1: {} @@ -17515,8 +18559,6 @@ snapshots: react-is@17.0.2: {} - react-is@18.2.0: {} - react-json-view-lite@2.0.1(react@18.2.0): dependencies: react: 18.2.0 @@ -17534,6 +18576,8 @@ snapshots: react-refresh@0.14.0: {} + react-refresh@0.14.2: {} + react-remove-scroll-bar@2.3.6(@types/react@18.2.66)(react@18.2.0): dependencies: react: 18.2.0 @@ -17682,6 +18726,17 @@ snapshots: indent-string: 4.0.0 strip-indent: 3.0.0 + reflect.getprototypeof@1.0.10: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + reflect.getprototypeof@1.0.5: dependencies: call-bind: 1.0.7 @@ -17702,7 +18757,7 @@ snapshots: regenerator-transform@0.15.2: dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.26.10 regexp-tree@0.1.27: {} @@ -17713,12 +18768,21 @@ snapshots: es-errors: 1.3.0 set-function-name: 2.0.2 - regexpu-core@6.1.1: + regexp.prototype.flags@1.5.4: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 + + regexpu-core@6.2.0: dependencies: regenerate: 1.4.2 regenerate-unicode-properties: 10.2.0 regjsgen: 0.8.0 - regjsparser: 0.11.2 + regjsparser: 0.12.0 unicode-match-property-ecmascript: 2.0.0 unicode-match-property-value-ecmascript: 2.2.0 @@ -17728,7 +18792,7 @@ snapshots: dependencies: jsesc: 0.5.0 - regjsparser@0.11.2: + regjsparser@0.12.0: dependencies: jsesc: 3.0.2 @@ -17768,10 +18832,10 @@ snapshots: mdast-util-to-hast: 12.3.0 unified: 10.1.2 - remix-flat-routes@0.6.4(@remix-run/dev@2.8.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))): + remix-flat-routes@0.6.4(@remix-run/dev@2.8.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0))): dependencies: - '@remix-run/dev': 2.8.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)) - '@remix-run/v1-route-convention': 0.1.4(@remix-run/dev@2.8.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))) + '@remix-run/dev': 2.8.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0)) + '@remix-run/v1-route-convention': 0.1.4(@remix-run/dev@2.8.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0)(ts-node@10.9.2(@swc/core@1.11.9(@swc/helpers@0.5.9))(@types/node@20.11.27)(typescript@5.6.3))(typescript@5.6.3)(vite@5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0))) fs-extra: 11.2.0 minimatch: 5.1.6 @@ -17787,7 +18851,13 @@ snapshots: resolve-pkg-maps@1.0.0: {} - resolve.exports@2.0.2: {} + resolve.exports@2.0.3: {} + + resolve@1.22.10: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 resolve@1.22.8: dependencies: @@ -17814,33 +18884,6 @@ snapshots: dependencies: glob: 7.2.3 - rollup-plugin-terser@7.0.2(rollup@4.25.0): - dependencies: - '@babel/code-frame': 7.26.2 - jest-worker: 26.6.2 - rollup: 4.25.0 - serialize-javascript: 4.0.0 - terser: 5.36.0 - - rollup@4.13.0: - dependencies: - '@types/estree': 1.0.5 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.13.0 - '@rollup/rollup-android-arm64': 4.13.0 - '@rollup/rollup-darwin-arm64': 4.13.0 - '@rollup/rollup-darwin-x64': 4.13.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.13.0 - '@rollup/rollup-linux-arm64-gnu': 4.13.0 - '@rollup/rollup-linux-arm64-musl': 4.13.0 - '@rollup/rollup-linux-riscv64-gnu': 4.13.0 - '@rollup/rollup-linux-x64-gnu': 4.13.0 - '@rollup/rollup-linux-x64-musl': 4.13.0 - '@rollup/rollup-win32-arm64-msvc': 4.13.0 - '@rollup/rollup-win32-ia32-msvc': 4.13.0 - '@rollup/rollup-win32-x64-msvc': 4.13.0 - fsevents: 2.3.3 - rollup@4.25.0: dependencies: '@types/estree': 1.0.6 @@ -17865,6 +18908,31 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.25.0 fsevents: 2.3.3 + rollup@4.35.0: + dependencies: + '@types/estree': 1.0.6 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.35.0 + '@rollup/rollup-android-arm64': 4.35.0 + '@rollup/rollup-darwin-arm64': 4.35.0 + '@rollup/rollup-darwin-x64': 4.35.0 + '@rollup/rollup-freebsd-arm64': 4.35.0 + '@rollup/rollup-freebsd-x64': 4.35.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.35.0 + '@rollup/rollup-linux-arm-musleabihf': 4.35.0 + '@rollup/rollup-linux-arm64-gnu': 4.35.0 + '@rollup/rollup-linux-arm64-musl': 4.35.0 + '@rollup/rollup-linux-loongarch64-gnu': 4.35.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.35.0 + '@rollup/rollup-linux-riscv64-gnu': 4.35.0 + '@rollup/rollup-linux-s390x-gnu': 4.35.0 + '@rollup/rollup-linux-x64-gnu': 4.35.0 + '@rollup/rollup-linux-x64-musl': 4.35.0 + '@rollup/rollup-win32-arm64-msvc': 4.35.0 + '@rollup/rollup-win32-ia32-msvc': 4.35.0 + '@rollup/rollup-win32-x64-msvc': 4.35.0 + fsevents: 2.3.3 + rtl-css-js@1.16.1: dependencies: '@babel/runtime': 7.26.0 @@ -17888,16 +18956,35 @@ snapshots: has-symbols: 1.0.3 isarray: 2.0.5 + safe-array-concat@1.1.3: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + isarray: 2.0.5 + safe-buffer@5.1.2: {} safe-buffer@5.2.1: {} + safe-push-apply@1.0.0: + dependencies: + es-errors: 1.3.0 + isarray: 2.0.5 + safe-regex-test@1.0.3: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-regex: 1.1.4 + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 + safer-buffer@2.1.2: {} sass@1.85.1: @@ -17919,6 +19006,13 @@ snapshots: ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) + schema-utils@4.3.0: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) + ajv-keywords: 5.1.0(ajv@8.17.1) + scule@1.3.0: {} secure-compare@3.0.1: {} @@ -17938,7 +19032,9 @@ snapshots: semver@7.6.3: {} - send@0.18.0: + semver@7.7.1: {} + + send@0.19.0: dependencies: debug: 2.6.9 depd: 2.0.0 @@ -17956,25 +19052,23 @@ snapshots: transitivePeerDependencies: - supports-color - serialize-javascript@4.0.0: - dependencies: - randombytes: 2.1.0 - serialize-javascript@6.0.2: dependencies: randombytes: 2.1.0 - serve-static@1.15.0: + serve-static@1.16.2: dependencies: - encodeurl: 1.0.2 + encodeurl: 2.0.0 escape-html: 1.0.3 parseurl: 1.3.3 - send: 0.18.0 + send: 0.19.0 transitivePeerDependencies: - supports-color set-cookie-parser@2.6.0: {} + set-cookie-parser@2.7.1: {} + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -17991,6 +19085,12 @@ snapshots: functions-have-names: 1.2.3 has-property-descriptors: 1.0.2 + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + setprototypeof@1.2.0: {} sha256-universal@1.2.1: @@ -18027,6 +19127,26 @@ snapshots: shell-quote@1.8.1: {} + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + side-channel@1.0.6: dependencies: call-bind: 1.0.7 @@ -18034,6 +19154,14 @@ snapshots: get-intrinsic: 1.2.4 object-inspect: 1.13.1 + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + siginfo@2.0.0: {} signal-exit@3.0.7: {} @@ -18056,6 +19184,8 @@ snapshots: slash@5.1.0: {} + smob@1.5.0: {} + snake-case@3.0.4: dependencies: dot-case: 3.0.4 @@ -18123,15 +19253,15 @@ snapshots: spdx-license-ids@3.0.17: {} - ssri@10.0.5: + ssri@10.0.6: dependencies: - minipass: 7.0.4 + minipass: 7.1.2 stackback@0.0.2: {} statuses@2.0.1: {} - std-env@3.7.0: {} + std-env@3.8.1: {} storybook-addon-remix-react-router@4.0.1(@storybook/blocks@8.6.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.4(prettier@3.2.5)))(@storybook/channels@8.0.8)(@storybook/components@8.6.4(storybook@8.6.4(prettier@3.2.5)))(@storybook/core-events@8.0.8)(@storybook/manager-api@8.6.4(storybook@8.6.4(prettier@3.2.5)))(@storybook/preview-api@8.6.4(storybook@8.6.4(prettier@3.2.5)))(@storybook/theming@8.6.4(storybook@8.6.4(prettier@3.2.5)))(react-dom@18.2.0(react@18.2.0))(react-router@7.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react@18.2.0): dependencies: @@ -18210,12 +19340,38 @@ snapshots: set-function-name: 2.0.2 side-channel: 1.0.6 + string.prototype.matchall@4.0.12: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + regexp.prototype.flags: 1.5.4 + set-function-name: 2.0.2 + side-channel: 1.1.0 + string.prototype.padend@3.1.5: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.22.5 + string.prototype.trim@1.2.10: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-object-atoms: 1.1.1 + has-property-descriptors: 1.0.2 + string.prototype.trim@1.2.8: dependencies: call-bind: 1.0.7 @@ -18241,6 +19397,13 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.0.0 + string.prototype.trimend@1.0.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + string.prototype.trimstart@1.0.7: dependencies: call-bind: 1.0.7 @@ -18261,7 +19424,7 @@ snapshots: dependencies: safe-buffer: 5.2.1 - stringify-entities@4.0.3: + stringify-entities@4.0.4: dependencies: character-entities-html4: 2.1.0 character-entities-legacy: 3.0.0 @@ -18300,13 +19463,9 @@ snapshots: strip-json-comments@3.1.1: {} - strip-literal@1.3.0: - dependencies: - acorn: 8.11.3 - - strip-literal@2.0.0: + strip-literal@3.0.0: dependencies: - js-tokens: 8.0.3 + js-tokens: 9.0.1 style-to-object@0.4.4: dependencies: @@ -18451,6 +19610,13 @@ snapshots: pump: 3.0.0 tar-stream: 2.2.0 + tar-fs@2.1.2: + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.2 + tar-stream: 2.2.0 + tar-stream@2.2.0: dependencies: bl: 4.1.0 @@ -18459,7 +19625,7 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 - tar@6.2.0: + tar@6.2.1: dependencies: chownr: 2.0.0 fs-minipass: 2.1.0 @@ -18481,22 +19647,22 @@ snapshots: type-fest: 0.16.0 unique-string: 2.0.0 - terser-webpack-plugin@5.3.10(@swc/core@1.11.9(@swc/helpers@0.5.9))(esbuild@0.20.1)(webpack@5.91.0(@swc/core@1.11.9(@swc/helpers@0.5.9))(esbuild@0.20.1)): + terser-webpack-plugin@5.3.14(@swc/core@1.11.9(@swc/helpers@0.5.9))(esbuild@0.20.1)(webpack@5.91.0(@swc/core@1.11.9(@swc/helpers@0.5.9))(esbuild@0.20.1)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 - schema-utils: 3.3.0 + schema-utils: 4.3.0 serialize-javascript: 6.0.2 - terser: 5.36.0 + terser: 5.39.0 webpack: 5.91.0(@swc/core@1.11.9(@swc/helpers@0.5.9))(esbuild@0.20.1) optionalDependencies: '@swc/core': 1.11.9(@swc/helpers@0.5.9) esbuild: 0.20.1 - terser@5.36.0: + terser@5.39.0: dependencies: '@jridgewell/source-map': 0.3.6 - acorn: 8.14.0 + acorn: 8.14.1 commander: 2.20.3 source-map-support: 0.5.21 @@ -18523,13 +19689,20 @@ snapshots: tiny-invariant@1.3.3: {} - tinybench@2.6.0: {} + tinybench@2.9.0: {} + + tinyexec@0.3.2: {} - tinypool@0.8.3: {} + tinyglobby@0.2.12: + dependencies: + fdir: 6.4.3(picomatch@4.0.2) + picomatch: 4.0.2 + + tinypool@1.0.2: {} tinyrainbow@1.2.0: {} - tinyspy@2.2.1: {} + tinyrainbow@2.0.0: {} tinyspy@3.0.2: {} @@ -18615,8 +19788,6 @@ snapshots: dependencies: prelude-ls: 1.2.1 - type-detect@4.0.8: {} - type-fest@0.16.0: {} type-fest@0.20.2: {} @@ -18640,6 +19811,12 @@ snapshots: es-errors: 1.3.0 is-typed-array: 1.1.13 + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + typed-array-byte-length@1.0.1: dependencies: call-bind: 1.0.7 @@ -18648,6 +19825,14 @@ snapshots: has-proto: 1.0.3 is-typed-array: 1.1.13 + typed-array-byte-length@1.0.3: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + typed-array-byte-offset@1.0.2: dependencies: available-typed-arrays: 1.0.7 @@ -18657,6 +19842,16 @@ snapshots: has-proto: 1.0.3 is-typed-array: 1.1.13 + typed-array-byte-offset@1.0.4: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + typed-array-length@1.0.5: dependencies: call-bind: 1.0.7 @@ -18675,6 +19870,15 @@ snapshots: is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 + typed-array-length@1.0.7: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.1.0 + reflect.getprototypeof: 1.0.10 + typescript@5.6.3: {} ua-parser-js@1.0.37: {} @@ -18683,6 +19887,8 @@ snapshots: ufo@1.4.0: {} + ufo@1.5.4: {} + uint64be@3.0.0: {} ulidx@2.4.1: @@ -18696,6 +19902,13 @@ snapshots: has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 + unbox-primitive@1.1.0: + dependencies: + call-bound: 1.0.4 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 + unc-path-regex@0.1.2: {} undici-types@5.26.5: {} @@ -18719,7 +19932,7 @@ snapshots: unified@10.1.2: dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 bail: 2.0.2 extend: 3.0.2 is-buffer: 2.0.5 @@ -18727,23 +19940,22 @@ snapshots: trough: 2.2.0 vfile: 5.3.7 - unimport@3.7.1(rollup@4.25.0): + unimport@4.1.2: dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.25.0) - acorn: 8.11.3 + acorn: 8.14.0 escape-string-regexp: 5.0.0 estree-walker: 3.0.3 - fast-glob: 3.3.2 - local-pkg: 0.5.0 - magic-string: 0.30.8 - mlly: 1.6.1 - pathe: 1.1.2 - pkg-types: 1.0.3 + local-pkg: 1.1.1 + magic-string: 0.30.17 + mlly: 1.7.4 + pathe: 2.0.3 + picomatch: 4.0.2 + pkg-types: 1.3.1 scule: 1.3.0 - strip-literal: 1.3.0 - unplugin: 1.10.0 - transitivePeerDependencies: - - rollup + strip-literal: 3.0.0 + tinyglobby: 0.2.12 + unplugin: 2.2.0 + unplugin-utils: 0.2.4 union@0.5.0: dependencies: @@ -18765,33 +19977,33 @@ snapshots: unist-util-is@5.2.1: dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 unist-util-position-from-estree@1.1.2: dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 unist-util-position@4.0.4: dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 unist-util-remove-position@4.0.2: dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 unist-util-visit: 4.1.2 unist-util-stringify-position@3.0.3: dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 unist-util-visit-parents@5.1.3: dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 unist-util-is: 5.2.1 unist-util-visit@4.1.2: dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 unist-util-is: 5.2.1 unist-util-visit-parents: 5.1.3 @@ -18799,18 +20011,14 @@ snapshots: unpipe@1.0.0: {} - unplugin-auto-import@0.17.5(rollup@4.25.0): + unplugin-auto-import@19.1.1: dependencies: - '@antfu/utils': 0.7.7 - '@rollup/pluginutils': 5.1.0(rollup@4.25.0) - fast-glob: 3.3.2 - local-pkg: 0.5.0 - magic-string: 0.30.8 - minimatch: 9.0.3 - unimport: 3.7.1(rollup@4.25.0) - unplugin: 1.10.0 - transitivePeerDependencies: - - rollup + local-pkg: 1.1.1 + magic-string: 0.30.17 + picomatch: 4.0.2 + unimport: 4.1.2 + unplugin: 2.2.0 + unplugin-utils: 0.2.4 unplugin-icons@0.18.5(@svgr/core@8.1.0(typescript@5.6.3)): dependencies: @@ -18826,6 +20034,11 @@ snapshots: transitivePeerDependencies: - supports-color + unplugin-utils@0.2.4: + dependencies: + pathe: 2.0.3 + picomatch: 4.0.2 + unplugin@1.10.0: dependencies: acorn: 8.11.3 @@ -18833,6 +20046,11 @@ snapshots: webpack-sources: 3.2.3 webpack-virtual-modules: 0.6.1 + unplugin@2.2.0: + dependencies: + acorn: 8.14.0 + webpack-virtual-modules: 0.6.2 + upath@1.2.0: {} update-browserslist-db@1.0.13(browserslist@4.23.0): @@ -18847,6 +20065,12 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 + update-browserslist-db@1.1.3(browserslist@4.24.4): + dependencies: + browserslist: 4.24.4 + escalade: 3.2.0 + picocolors: 1.1.1 + uri-js@4.4.1: dependencies: punycode: 2.3.1 @@ -18976,125 +20200,148 @@ snapshots: vfile-message@3.1.4: dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 unist-util-stringify-position: 3.0.3 vfile@5.3.7: dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 is-buffer: 2.0.5 unist-util-stringify-position: 3.0.3 vfile-message: 3.1.4 - vite-node@1.5.0(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0): + vite-node@1.6.1(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0): dependencies: cac: 6.7.14 - debug: 4.3.4 + debug: 4.4.0 pathe: 1.1.2 - picocolors: 1.0.0 - vite: 5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) + picocolors: 1.1.1 + vite: 5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0) transitivePeerDependencies: - '@types/node' - less - lightningcss - sass + - sass-embedded - stylus - sugarss - supports-color - terser - vite-node@3.0.0-beta.2(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0): + vite-node@3.0.0-beta.2(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.5.4 pathe: 1.1.2 - vite: 5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) + vite: 5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0) transitivePeerDependencies: - '@types/node' - less - lightningcss - sass + - sass-embedded - stylus - sugarss - supports-color - terser - vite-plugin-pwa@0.19.3(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0))(workbox-build@7.0.0(@types/babel__core@7.20.5))(workbox-window@7.0.0): + vite-node@3.0.8(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0): dependencies: - debug: 4.3.4 - fast-glob: 3.3.2 + cac: 6.7.14 + debug: 4.4.0 + es-module-lexer: 1.6.0 + pathe: 2.0.3 + vite: 5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + vite-plugin-pwa@0.21.1(vite@5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0): + dependencies: + debug: 4.4.0 pretty-bytes: 6.1.1 - vite: 5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) - workbox-build: 7.0.0(@types/babel__core@7.20.5) - workbox-window: 7.0.0 + tinyglobby: 0.2.12 + vite: 5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0) + workbox-build: 7.3.0(@types/babel__core@7.20.5) + workbox-window: 7.3.0 transitivePeerDependencies: - supports-color - vite-plugin-top-level-await@1.5.0(@swc/helpers@0.5.9)(rollup@4.25.0)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)): + vite-plugin-top-level-await@1.5.0(@swc/helpers@0.5.9)(rollup@4.35.0)(vite@5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0)): dependencies: - '@rollup/plugin-virtual': 3.0.2(rollup@4.25.0) + '@rollup/plugin-virtual': 3.0.2(rollup@4.35.0) '@swc/core': 1.11.9(@swc/helpers@0.5.9) uuid: 10.0.0 - vite: 5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) + vite: 5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0) transitivePeerDependencies: - '@swc/helpers' - rollup - vite-plugin-wasm@3.3.0(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)): + vite-plugin-wasm@3.4.1(vite@5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0)): dependencies: - vite: 5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) + vite: 5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0) - vite-tsconfig-paths@4.3.2(typescript@5.6.3)(vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0)): + vite-tsconfig-paths@5.1.4(typescript@5.6.3)(vite@5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0)): dependencies: - debug: 4.3.4 + debug: 4.4.0 globrex: 0.1.2 tsconfck: 3.0.3(typescript@5.6.3) optionalDependencies: - vite: 5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) + vite: 5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0) transitivePeerDependencies: - supports-color - typescript - vite@5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0): + vite@5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0): dependencies: esbuild: 0.20.1 - postcss: 8.4.35 - rollup: 4.13.0 + postcss: 8.5.3 + rollup: 4.25.0 optionalDependencies: '@types/node': 20.11.27 fsevents: 2.3.3 sass: 1.85.1 - terser: 5.36.0 - - vitest@1.5.0(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0): - dependencies: - '@vitest/expect': 1.5.0 - '@vitest/runner': 1.5.0 - '@vitest/snapshot': 1.5.0 - '@vitest/spy': 1.5.0 - '@vitest/utils': 1.5.0 - acorn-walk: 8.3.2 - chai: 4.4.1 - debug: 4.3.4 - execa: 8.0.1 - local-pkg: 0.5.0 - magic-string: 0.30.8 - pathe: 1.1.2 - picocolors: 1.0.0 - std-env: 3.7.0 - strip-literal: 2.0.0 - tinybench: 2.6.0 - tinypool: 0.8.3 - vite: 5.1.4(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) - vite-node: 1.5.0(@types/node@20.11.27)(sass@1.85.1)(terser@5.36.0) - why-is-node-running: 2.2.2 + terser: 5.39.0 + + vitest@3.0.8(@types/debug@4.1.12)(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0): + dependencies: + '@vitest/expect': 3.0.8 + '@vitest/mocker': 3.0.8(vite@5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0)) + '@vitest/pretty-format': 3.0.8 + '@vitest/runner': 3.0.8 + '@vitest/snapshot': 3.0.8 + '@vitest/spy': 3.0.8 + '@vitest/utils': 3.0.8 + chai: 5.2.0 + debug: 4.4.0 + expect-type: 1.2.0 + magic-string: 0.30.17 + pathe: 2.0.3 + std-env: 3.8.1 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinypool: 1.0.2 + tinyrainbow: 2.0.0 + vite: 5.4.11(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0) + vite-node: 3.0.8(@types/node@20.11.27)(sass@1.85.1)(terser@5.39.0) + why-is-node-running: 2.3.0 optionalDependencies: + '@types/debug': 4.1.12 '@types/node': 20.11.27 transitivePeerDependencies: - less - lightningcss + - msw - sass + - sass-embedded - stylus - sugarss - supports-color @@ -19126,6 +20373,8 @@ snapshots: webpack-virtual-modules@0.6.1: {} + webpack-virtual-modules@0.6.2: {} + webpack@5.91.0(@swc/core@1.11.9(@swc/helpers@0.5.9))(esbuild@0.20.1): dependencies: '@types/eslint-scope': 3.7.7 @@ -19133,12 +20382,12 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/wasm-edit': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.14.0 - acorn-import-assertions: 1.9.0(acorn@8.14.0) - browserslist: 4.24.2 + acorn: 8.14.1 + acorn-import-assertions: 1.9.0(acorn@8.14.1) + browserslist: 4.24.4 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.17.1 - es-module-lexer: 1.5.4 + enhanced-resolve: 5.18.1 + es-module-lexer: 1.6.0 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -19149,7 +20398,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.11.9(@swc/helpers@0.5.9))(esbuild@0.20.1)(webpack@5.91.0(@swc/core@1.11.9(@swc/helpers@0.5.9))(esbuild@0.20.1)) + terser-webpack-plugin: 5.3.14(@swc/core@1.11.9(@swc/helpers@0.5.9))(esbuild@0.20.1)(webpack@5.91.0(@swc/core@1.11.9(@swc/helpers@0.5.9))(esbuild@0.20.1)) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -19175,6 +20424,14 @@ snapshots: is-string: 1.0.7 is-symbol: 1.0.4 + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + which-builtin-type@1.1.3: dependencies: function.prototype.name: 1.1.6 @@ -19190,6 +20447,22 @@ snapshots: which-collection: 1.0.2 which-typed-array: 1.1.15 + which-builtin-type@1.2.1: + dependencies: + call-bound: 1.0.4 + function.prototype.name: 1.1.8 + has-tostringtag: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.0 + is-regex: 1.2.1 + is-weakref: 1.1.1 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.19 + which-collection@1.0.2: dependencies: is-map: 2.0.3 @@ -19205,6 +20478,16 @@ snapshots: gopd: 1.0.1 has-tostringtag: 1.0.2 + which-typed-array@1.1.19: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + which@1.3.1: dependencies: isexe: 2.0.0 @@ -19217,29 +20500,30 @@ snapshots: dependencies: isexe: 2.0.0 - why-is-node-running@2.2.2: + why-is-node-running@2.3.0: dependencies: siginfo: 2.0.0 stackback: 0.0.2 - workbox-background-sync@7.0.0: + workbox-background-sync@7.3.0: dependencies: idb: 7.1.1 - workbox-core: 7.0.0 + workbox-core: 7.3.0 - workbox-broadcast-update@7.0.0: + workbox-broadcast-update@7.3.0: dependencies: - workbox-core: 7.0.0 + workbox-core: 7.3.0 - workbox-build@7.0.0(@types/babel__core@7.20.5): + workbox-build@7.3.0(@types/babel__core@7.20.5): dependencies: '@apideck/better-ajv-errors': 0.3.6(ajv@8.17.1) '@babel/core': 7.24.5 - '@babel/preset-env': 7.26.0(@babel/core@7.24.5) - '@babel/runtime': 7.26.0 - '@rollup/plugin-babel': 5.3.1(@babel/core@7.24.5)(@types/babel__core@7.20.5)(rollup@4.25.0) - '@rollup/plugin-node-resolve': 11.2.1(rollup@4.25.0) - '@rollup/plugin-replace': 2.4.2(rollup@4.25.0) + '@babel/preset-env': 7.26.9(@babel/core@7.24.5) + '@babel/runtime': 7.26.10 + '@rollup/plugin-babel': 5.3.1(@babel/core@7.24.5)(@types/babel__core@7.20.5)(rollup@4.35.0) + '@rollup/plugin-node-resolve': 15.3.1(rollup@4.35.0) + '@rollup/plugin-replace': 2.4.2(rollup@4.35.0) + '@rollup/plugin-terser': 0.4.4(rollup@4.35.0) '@surma/rollup-plugin-off-main-thread': 2.2.3 ajv: 8.17.1 common-tags: 1.8.2 @@ -19248,92 +20532,91 @@ snapshots: glob: 7.2.3 lodash: 4.17.21 pretty-bytes: 5.6.0 - rollup: 4.25.0 - rollup-plugin-terser: 7.0.2(rollup@4.25.0) + rollup: 4.35.0 source-map: 0.8.0-beta.0 stringify-object: 3.3.0 strip-comments: 2.0.1 tempy: 0.6.0 upath: 1.2.0 - workbox-background-sync: 7.0.0 - workbox-broadcast-update: 7.0.0 - workbox-cacheable-response: 7.0.0 - workbox-core: 7.0.0 - workbox-expiration: 7.0.0 - workbox-google-analytics: 7.0.0 - workbox-navigation-preload: 7.0.0 - workbox-precaching: 7.0.0 - workbox-range-requests: 7.0.0 - workbox-recipes: 7.0.0 - workbox-routing: 7.0.0 - workbox-strategies: 7.0.0 - workbox-streams: 7.0.0 - workbox-sw: 7.0.0 - workbox-window: 7.0.0 + workbox-background-sync: 7.3.0 + workbox-broadcast-update: 7.3.0 + workbox-cacheable-response: 7.3.0 + workbox-core: 7.3.0 + workbox-expiration: 7.3.0 + workbox-google-analytics: 7.3.0 + workbox-navigation-preload: 7.3.0 + workbox-precaching: 7.3.0 + workbox-range-requests: 7.3.0 + workbox-recipes: 7.3.0 + workbox-routing: 7.3.0 + workbox-strategies: 7.3.0 + workbox-streams: 7.3.0 + workbox-sw: 7.3.0 + workbox-window: 7.3.0 transitivePeerDependencies: - '@types/babel__core' - supports-color - workbox-cacheable-response@7.0.0: + workbox-cacheable-response@7.3.0: dependencies: - workbox-core: 7.0.0 + workbox-core: 7.3.0 - workbox-core@7.0.0: {} + workbox-core@7.3.0: {} - workbox-expiration@7.0.0: + workbox-expiration@7.3.0: dependencies: idb: 7.1.1 - workbox-core: 7.0.0 + workbox-core: 7.3.0 - workbox-google-analytics@7.0.0: + workbox-google-analytics@7.3.0: dependencies: - workbox-background-sync: 7.0.0 - workbox-core: 7.0.0 - workbox-routing: 7.0.0 - workbox-strategies: 7.0.0 + workbox-background-sync: 7.3.0 + workbox-core: 7.3.0 + workbox-routing: 7.3.0 + workbox-strategies: 7.3.0 - workbox-navigation-preload@7.0.0: + workbox-navigation-preload@7.3.0: dependencies: - workbox-core: 7.0.0 + workbox-core: 7.3.0 - workbox-precaching@7.0.0: + workbox-precaching@7.3.0: dependencies: - workbox-core: 7.0.0 - workbox-routing: 7.0.0 - workbox-strategies: 7.0.0 + workbox-core: 7.3.0 + workbox-routing: 7.3.0 + workbox-strategies: 7.3.0 - workbox-range-requests@7.0.0: + workbox-range-requests@7.3.0: dependencies: - workbox-core: 7.0.0 + workbox-core: 7.3.0 - workbox-recipes@7.0.0: + workbox-recipes@7.3.0: dependencies: - workbox-cacheable-response: 7.0.0 - workbox-core: 7.0.0 - workbox-expiration: 7.0.0 - workbox-precaching: 7.0.0 - workbox-routing: 7.0.0 - workbox-strategies: 7.0.0 + workbox-cacheable-response: 7.3.0 + workbox-core: 7.3.0 + workbox-expiration: 7.3.0 + workbox-precaching: 7.3.0 + workbox-routing: 7.3.0 + workbox-strategies: 7.3.0 - workbox-routing@7.0.0: + workbox-routing@7.3.0: dependencies: - workbox-core: 7.0.0 + workbox-core: 7.3.0 - workbox-strategies@7.0.0: + workbox-strategies@7.3.0: dependencies: - workbox-core: 7.0.0 + workbox-core: 7.3.0 - workbox-streams@7.0.0: + workbox-streams@7.3.0: dependencies: - workbox-core: 7.0.0 - workbox-routing: 7.0.0 + workbox-core: 7.3.0 + workbox-routing: 7.3.0 - workbox-sw@7.0.0: {} + workbox-sw@7.3.0: {} - workbox-window@7.0.0: + workbox-window@7.3.0: dependencies: '@types/trusted-types': 2.0.7 - workbox-core: 7.0.0 + workbox-core: 7.3.0 wrap-ansi@7.0.0: dependencies: @@ -19349,7 +20632,7 @@ snapshots: wrappy@1.0.2: {} - ws@7.5.9: {} + ws@7.5.10: {} ws@8.16.0: {} diff --git a/vite.config.ts b/vite.config.ts index 2623bd5d..abaa4896 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -17,7 +17,10 @@ const pwaOptions: Partial = { filename: "sw.ts", registerType: "autoUpdate", strategies: "injectManifest", - injectManifest: { globPatterns: ["**/*.{js,css,html,ico,wasm}"] }, + injectManifest: { + globPatterns: ["**/*.{js,css,html,ico,wasm}"], + maximumFileSizeToCacheInBytes: 3_000_000, // default is ~2MB but sometimes we get bigger files + }, manifest: { name: "XDev", short_name: "XDev", From 808366f0d10db181a21cc71e7b806103f92c5653 Mon Sep 17 00:00:00 2001 From: Nathan Gerhart Date: Thu, 13 Mar 2025 16:33:48 -0600 Subject: [PATCH 19/19] GitHub Actions: run playwright on built app This prevents flaky tests due to dev server startup --- .../build-and-deploy_devresults-xdev.yml | 17 +++++++++++++---- playwright.config.ts | 10 ++++++++-- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build-and-deploy_devresults-xdev.yml b/.github/workflows/build-and-deploy_devresults-xdev.yml index 129042a6..cbf540d2 100644 --- a/.github/workflows/build-and-deploy_devresults-xdev.yml +++ b/.github/workflows/build-and-deploy_devresults-xdev.yml @@ -35,14 +35,23 @@ jobs: - name: lint run: pnpm lint - - name: test - run: | - pnpm test - pnpm test:pw + - name: unit tests + run: pnpm test - name: build run: pnpm build + - name: playwright tests + id: playwright + run: pnpm test:pw + + - name: Capture playwright output + if: ${{ failure() && steps.playwright.conclusion == 'failure' }} + uses: actions/upload-artifact@v4 + with: + name: playwright-test-results + path: ./test-results + - name: Build And Deploy id: builddeploy uses: Azure/static-web-apps-deploy@v1 diff --git a/playwright.config.ts b/playwright.config.ts index def867b9..c4061362 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -67,8 +67,14 @@ export default defineConfig({ ], webServer: - isPlaywrightUI ? - [] + isPlaywrightUI ? [] + : process.env.CI ? + // use the built website for testing in ci + { + command: "pnpm vite preview --port 3001", + url: "http://localhost:3001", + reuseExistingServer: true, + } : { command: "pnpm react-router dev --port 3001", url: "http://localhost:3001",