From 387068014b76b0b4511754c426e59e182d4267ac Mon Sep 17 00:00:00 2001 From: John McDowell Date: Fri, 10 Jan 2025 13:12:38 +0000 Subject: [PATCH 01/69] Add order outcomes --- src/Router.tsx | 2 +- .../GameDetailsLayout/GameDetailsLayout.tsx | 3 +- src/components/Map/Map.tsx | 2 +- src/components/Orders/Orders.tsx | 78 +++++++++++++++---- src/components/Orders/index.ts | 2 +- .../{Orders.utils.ts => orders-utils.ts} | 10 ++- .../Orders/{Orders.hook.ts => use-orders.ts} | 8 +- src/theme.ts | 10 +++ 8 files changed, 90 insertions(+), 25 deletions(-) rename src/components/Orders/{Orders.utils.ts => orders-utils.ts} (66%) rename src/components/Orders/{Orders.hook.ts => use-orders.ts} (78%) diff --git a/src/Router.tsx b/src/Router.tsx index 735c4aa9..01226da6 100644 --- a/src/Router.tsx +++ b/src/Router.tsx @@ -8,7 +8,7 @@ import UserPage from "./screens/UserPage"; import { Map } from "./components/Map"; import { GameDetailsLayout } from "./components/GameDetailsLayout"; import { GameDetailsNavigation } from "./components/GameDetailsNavigation"; -import { Orders } from "./components/Orders"; +import { Orders } from "./components/orders"; import { CreateOrder } from "./components/CreateOrder"; import { Modal } from "./components/Modal"; import { CreateOrderAction } from "./components/CreateOrderAction"; diff --git a/src/components/GameDetailsLayout/GameDetailsLayout.tsx b/src/components/GameDetailsLayout/GameDetailsLayout.tsx index e51a0020..6270c3d1 100644 --- a/src/components/GameDetailsLayout/GameDetailsLayout.tsx +++ b/src/components/GameDetailsLayout/GameDetailsLayout.tsx @@ -20,8 +20,9 @@ const GameDetailsLayout: React.FC<{ diff --git a/src/components/Map/Map.tsx b/src/components/Map/Map.tsx index 2ed0e609..886cb66f 100644 --- a/src/components/Map/Map.tsx +++ b/src/components/Map/Map.tsx @@ -35,7 +35,7 @@ const Map: React.FC = () => {
); diff --git a/src/components/Orders/Orders.tsx b/src/components/Orders/Orders.tsx index 0cc319b6..c8b05d50 100644 --- a/src/components/Orders/Orders.tsx +++ b/src/components/Orders/Orders.tsx @@ -3,13 +3,22 @@ import { CircularProgress, List, ListItem, + ListItemIcon, ListItemText, ListSubheader, Stack, + styled, + Theme, Typography, + useTheme, } from "@mui/material"; -import { useOrders } from "./Orders.hook"; +import { + CheckCircle as OrderOkIcon, + Cancel as OrderErrorIcon, +} from "@mui/icons-material"; + +import { useOrders } from "./use-orders"; type OrderProps = { source: string; @@ -18,6 +27,17 @@ type OrderProps = { aux?: string; }; +const StyledListItem = styled(ListItem)(({ theme }) => ({ + border: `1px solid ${theme.palette.grey[200]}`, +})); + +const StyledListSubheader = styled(ListSubheader)(({ theme }) => ({ + textAlign: "left", + fontWeight: "bold", + border: `1px solid ${theme.palette.grey[200]}`, + backgroundColor: theme.palette.grey[200], +})); + const formatOrderText = (order: OrderProps) => { if (order.orderType === "Hold") { return `${order.source} Hold`; @@ -28,7 +48,26 @@ const formatOrderText = (order: OrderProps) => { return `${order.source} ${order.orderType} to ${order.target}`; }; +const OutcomeLabelMap = { + OK: "Succeeded", + Bounced: "Bounced", + SupportBroken: "Support broken", +} as const; + +const OutcomeIconMap = { + OK: (theme: Theme) => ( + + ), + Bounced: (theme: Theme) => ( + + ), + SupportBroken: (theme: Theme) => ( + + ), +} as const; + const Orders: React.FC = () => { + const theme = useTheme(); const { isLoading, isError, orders } = useOrders(); if (isLoading) { @@ -56,22 +95,29 @@ const Orders: React.FC = () => { Orders {orders.map(({ nation, orders }) => ( - - {nation} - - } - > + {nation}}> {orders.map((order, index) => ( - - {formatOrderText(order)} - + + {order.outcome && ( + + {OutcomeIconMap[order.outcome](theme)} + + )} + + + + {formatOrderText(order)} + + + {order.outcome && ( + + + {OutcomeLabelMap[order.outcome]} + + + )} + + ))} diff --git a/src/components/Orders/index.ts b/src/components/Orders/index.ts index 5d3677a0..9960c475 100644 --- a/src/components/Orders/index.ts +++ b/src/components/Orders/index.ts @@ -1 +1 @@ -export * from "./Orders"; \ No newline at end of file +export * from "./orders"; \ No newline at end of file diff --git a/src/components/Orders/Orders.utils.ts b/src/components/Orders/orders-utils.ts similarity index 66% rename from src/components/Orders/Orders.utils.ts rename to src/components/Orders/orders-utils.ts index 04d9193d..f0e50004 100644 --- a/src/components/Orders/Orders.utils.ts +++ b/src/components/Orders/orders-utils.ts @@ -1,14 +1,18 @@ -import { useGetOrdersQuery, useGetVariantQuery } from "../../common"; +import { useGetOrdersQuery, useGetPhaseQuery, useGetVariantQuery } from "../../common"; + +type Outcome = "OK" | "Bounced" | "SupportBroken" | undefined; type Order = { source: string; orderType: string; target: string | undefined; aux: string | undefined; + outcome: Outcome; }; const createOrders = ( variant: NonNullable["data"]>, + phase: NonNullable["data"]>, orders: NonNullable["data"]> ) => { const ordersByNation = new Map(); @@ -17,12 +21,16 @@ const createOrders = ( const [source, orderType, target, aux] = order.Parts; if (!source) throw new Error("No source found"); if (!orderType) throw new Error("No orderType found"); + const resolution = phase.Resolutions?.find((resolution) => resolution.Province === source); + + const outcome: Outcome = resolution?.Resolution.includes("OK") ? "OK" : resolution?.Resolution.includes("Bounce") ? "Bounced" : resolution?.Resolution.includes("SupportBroken") ? "SupportBroken" : undefined; const orderData = { source: variant.getProvinceLongName(source), orderType: orderType, target: target ? variant.getProvinceLongName(target) : undefined, aux: aux ? variant.getProvinceLongName(aux) : undefined, + outcome: outcome }; if (!ordersByNation.has(order.Nation)) { diff --git a/src/components/Orders/Orders.hook.ts b/src/components/Orders/use-orders.ts similarity index 78% rename from src/components/Orders/Orders.hook.ts rename to src/components/Orders/use-orders.ts index 12f11203..79af0012 100644 --- a/src/components/Orders/Orders.hook.ts +++ b/src/components/Orders/use-orders.ts @@ -1,5 +1,5 @@ -import { mergeQueries, useGetVariantQuery, useGetOrdersQuery } from "../../common"; -import { createOrders } from "./Orders.utils"; +import { mergeQueries, useGetVariantQuery, useGetOrdersQuery, useGetPhaseQuery } from "../../common"; +import { createOrders } from "./orders-utils"; import { useSelectedPhaseContext } from "../selected-phase-context"; import { useGameDetailContext } from "../game-detail-context"; @@ -23,13 +23,13 @@ type SuccessState = { const useOrders = (): LoadingState | ErrorState | SuccessState => { const { gameId } = useGameDetailContext(); - const { selectedPhase } = useSelectedPhaseContext(); const getVariantQuery = useGetVariantQuery(gameId); + const getPhaseQuery = useGetPhaseQuery(gameId, selectedPhase); const listOrdersQuery = useGetOrdersQuery(gameId, selectedPhase); - const { isLoading, isError, data } = mergeQueries([getVariantQuery, listOrdersQuery], createOrders); + const { isLoading, isError, data } = mergeQueries([getVariantQuery, getPhaseQuery, listOrdersQuery], createOrders); if (isLoading) return { isLoading: true }; if (isError) return { isError: true }; diff --git a/src/theme.ts b/src/theme.ts index 41d673bc..286a86ba 100644 --- a/src/theme.ts +++ b/src/theme.ts @@ -13,6 +13,16 @@ const theme = createTheme({ lineHeight: "26px", fontWeight: 600, }, + h4: { + fontSize: "16px", + lineHeight: "24px", + fontWeight: 600, + }, + caption: { + fontSize: "12px", + lineHeight: "18px", + color: "rgb(89, 99, 110)" + }, button: { textTransform: "none", } From b2d061c7541793ba85beb7d04bcad642774f847d Mon Sep 17 00:00:00 2001 From: John McDowell Date: Fri, 10 Jan 2025 13:17:19 +0000 Subject: [PATCH 02/69] case --- src/components/orders/index.ts | 1 + src/components/orders/orders-utils.ts | 49 +++++++++++++++++++ .../{Orders/Orders.tsx => orders/orders.tsx} | 0 src/components/orders/use-orders.ts | 43 ++++++++++++++++ 4 files changed, 93 insertions(+) create mode 100644 src/components/orders/index.ts create mode 100644 src/components/orders/orders-utils.ts rename src/components/{Orders/Orders.tsx => orders/orders.tsx} (100%) create mode 100644 src/components/orders/use-orders.ts diff --git a/src/components/orders/index.ts b/src/components/orders/index.ts new file mode 100644 index 00000000..9960c475 --- /dev/null +++ b/src/components/orders/index.ts @@ -0,0 +1 @@ +export * from "./orders"; \ No newline at end of file diff --git a/src/components/orders/orders-utils.ts b/src/components/orders/orders-utils.ts new file mode 100644 index 00000000..f0e50004 --- /dev/null +++ b/src/components/orders/orders-utils.ts @@ -0,0 +1,49 @@ +import { useGetOrdersQuery, useGetPhaseQuery, useGetVariantQuery } from "../../common"; + +type Outcome = "OK" | "Bounced" | "SupportBroken" | undefined; + +type Order = { + source: string; + orderType: string; + target: string | undefined; + aux: string | undefined; + outcome: Outcome; +}; + +const createOrders = ( + variant: NonNullable["data"]>, + phase: NonNullable["data"]>, + orders: NonNullable["data"]> +) => { + const ordersByNation = new Map(); + + orders.Orders.forEach((order) => { + const [source, orderType, target, aux] = order.Parts; + if (!source) throw new Error("No source found"); + if (!orderType) throw new Error("No orderType found"); + const resolution = phase.Resolutions?.find((resolution) => resolution.Province === source); + + const outcome: Outcome = resolution?.Resolution.includes("OK") ? "OK" : resolution?.Resolution.includes("Bounce") ? "Bounced" : resolution?.Resolution.includes("SupportBroken") ? "SupportBroken" : undefined; + + const orderData = { + source: variant.getProvinceLongName(source), + orderType: orderType, + target: target ? variant.getProvinceLongName(target) : undefined, + aux: aux ? variant.getProvinceLongName(aux) : undefined, + outcome: outcome + }; + + if (!ordersByNation.has(order.Nation)) { + ordersByNation.set(order.Nation, []); + } + + ordersByNation.get(order.Nation)!.push(orderData); + }); + + return Array.from(ordersByNation.entries()).map(([nation, orders]) => ({ + nation, + orders, + })); +} + +export { createOrders }; \ No newline at end of file diff --git a/src/components/Orders/Orders.tsx b/src/components/orders/orders.tsx similarity index 100% rename from src/components/Orders/Orders.tsx rename to src/components/orders/orders.tsx diff --git a/src/components/orders/use-orders.ts b/src/components/orders/use-orders.ts new file mode 100644 index 00000000..79af0012 --- /dev/null +++ b/src/components/orders/use-orders.ts @@ -0,0 +1,43 @@ +import { mergeQueries, useGetVariantQuery, useGetOrdersQuery, useGetPhaseQuery } from "../../common"; +import { createOrders } from "./orders-utils"; +import { useSelectedPhaseContext } from "../selected-phase-context"; +import { useGameDetailContext } from "../game-detail-context"; + +type LoadingState = { + isLoading: true; + isError?: never; + orders?: never; +}; + +type ErrorState = { + isLoading?: never; + isError: true; + orders?: never; +}; + +type SuccessState = { + isLoading?: never; + isError?: never; + orders: ReturnType; +}; + +const useOrders = (): LoadingState | ErrorState | SuccessState => { + const { gameId } = useGameDetailContext(); + const { selectedPhase } = useSelectedPhaseContext(); + + const getVariantQuery = useGetVariantQuery(gameId); + const getPhaseQuery = useGetPhaseQuery(gameId, selectedPhase); + const listOrdersQuery = useGetOrdersQuery(gameId, selectedPhase); + + const { isLoading, isError, data } = mergeQueries([getVariantQuery, getPhaseQuery, listOrdersQuery], createOrders); + + if (isLoading) return { isLoading: true }; + if (isError) return { isError: true }; + if (!data) throw new Error("No data found"); + + return { + orders: data, + } +}; + +export { useOrders }; \ No newline at end of file From 0c11b3aa93e4f2af63d0337cece092617fd7cce9 Mon Sep 17 00:00:00 2001 From: John McDowell Date: Fri, 10 Jan 2025 13:22:42 +0000 Subject: [PATCH 03/69] Fix casing --- ...e-static-web-apps-blue-cliff-00777a403.yml | 92 +++++++++--------- ...re-static-web-apps-nice-sand-001bca703.yml | 94 +++++++++---------- src/components/Orders/index.ts | 1 - src/components/Orders/orders-utils.ts | 49 ---------- src/components/Orders/use-orders.ts | 43 --------- 5 files changed, 93 insertions(+), 186 deletions(-) delete mode 100644 src/components/Orders/index.ts delete mode 100644 src/components/Orders/orders-utils.ts delete mode 100644 src/components/Orders/use-orders.ts diff --git a/.github/workflows/azure-static-web-apps-blue-cliff-00777a403.yml b/.github/workflows/azure-static-web-apps-blue-cliff-00777a403.yml index f10a75fa..fb70f4ae 100644 --- a/.github/workflows/azure-static-web-apps-blue-cliff-00777a403.yml +++ b/.github/workflows/azure-static-web-apps-blue-cliff-00777a403.yml @@ -1,46 +1,46 @@ -name: Azure Static Web Apps CI/CD - -on: - push: - branches: - - main - pull_request: - types: [opened, synchronize, reopened, closed] - branches: - - main - -jobs: - build_and_deploy_job: - if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed') - runs-on: ubuntu-latest - name: Build and Deploy Job - steps: - - uses: actions/checkout@v3 - with: - submodules: true - lfs: false - - name: Build And Deploy - id: builddeploy - uses: Azure/static-web-apps-deploy@v1 - with: - azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_BLUE_CLIFF_00777A403 }} - repo_token: ${{ secrets.GITHUB_TOKEN }} # Used for Github integrations (i.e. PR comments) - action: "upload" - ###### Repository/Build Configurations - These values can be configured to match your app requirements. ###### - # For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig - app_location: "/" # App source code path - api_location: "api" # Api source code path - optional - output_location: "/dist" # Built app content directory - optional - ###### End of Repository/Build Configurations ###### - - close_pull_request_job: - if: github.event_name == 'pull_request' && github.event.action == 'closed' - runs-on: ubuntu-latest - name: Close Pull Request Job - steps: - - name: Close Pull Request - id: closepullrequest - uses: Azure/static-web-apps-deploy@v1 - with: - azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_BLUE_CLIFF_00777A403 }} - action: "close" +name: Azure Static Web Apps CI/CD + +on: + push: + branches: + - main + pull_request: + types: [opened, synchronize, reopened, closed] + branches: + - main + +jobs: + build_and_deploy_job: + if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed') + runs-on: ubuntu-latest + name: Build and Deploy Job + steps: + - uses: actions/checkout@v3 + with: + submodules: true + lfs: false + - name: Build And Deploy + id: builddeploy + uses: Azure/static-web-apps-deploy@v1 + with: + azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_BLUE_CLIFF_00777A403 }} + repo_token: ${{ secrets.GITHUB_TOKEN }} # Used for Github integrations (i.e. PR comments) + action: "upload" + ###### Repository/Build Configurations - These values can be configured to match your app requirements. ###### + # For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig + app_location: "/" # App source code path + api_location: "api" # Api source code path - optional + output_location: "/dist" # Built app content directory - optional + ###### End of Repository/Build Configurations ###### + + close_pull_request_job: + if: github.event_name == 'pull_request' && github.event.action == 'closed' + runs-on: ubuntu-latest + name: Close Pull Request Job + steps: + - name: Close Pull Request + id: closepullrequest + uses: Azure/static-web-apps-deploy@v1 + with: + azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_BLUE_CLIFF_00777A403 }} + action: "close" diff --git a/.github/workflows/azure-static-web-apps-nice-sand-001bca703.yml b/.github/workflows/azure-static-web-apps-nice-sand-001bca703.yml index bb47ba18..984b6068 100644 --- a/.github/workflows/azure-static-web-apps-nice-sand-001bca703.yml +++ b/.github/workflows/azure-static-web-apps-nice-sand-001bca703.yml @@ -1,47 +1,47 @@ -name: Azure Static Web Apps CI/CD - -on: - push: - branches: - - main - pull_request: - types: [opened, synchronize, reopened, closed] - branches: - - main - -jobs: - build_and_deploy_job: - if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed') - runs-on: ubuntu-latest - name: Build and Deploy Job - steps: - - uses: actions/checkout@v3 - with: - submodules: true - lfs: false - - name: Build And Deploy - id: builddeploy - uses: Azure/static-web-apps-deploy@v1 - with: - azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_NICE_SAND_001BCA703 }} - repo_token: ${{ secrets.GITHUB_TOKEN }} # Used for Github integrations (i.e. PR comments) - action: "upload" - ###### Repository/Build Configurations - These values can be configured to match your app requirements. ###### - # For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig - app_location: "/" # App source code path - app_build_command: "npm run build-storybook" - api_location: "api" # Api source code path - optional - output_location: "/storybook-static" # Built app content directory - optional - ###### End of Repository/Build Configurations ###### - - close_pull_request_job: - if: github.event_name == 'pull_request' && github.event.action == 'closed' - runs-on: ubuntu-latest - name: Close Pull Request Job - steps: - - name: Close Pull Request - id: closepullrequest - uses: Azure/static-web-apps-deploy@v1 - with: - azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_NICE_SAND_001BCA703 }} - action: "close" +name: Azure Static Web Apps CI/CD + +on: + push: + branches: + - main + pull_request: + types: [opened, synchronize, reopened, closed] + branches: + - main + +jobs: + build_and_deploy_job: + if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed') + runs-on: ubuntu-latest + name: Build and Deploy Job + steps: + - uses: actions/checkout@v3 + with: + submodules: true + lfs: false + - name: Build And Deploy + id: builddeploy + uses: Azure/static-web-apps-deploy@v1 + with: + azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_NICE_SAND_001BCA703 }} + repo_token: ${{ secrets.GITHUB_TOKEN }} # Used for Github integrations (i.e. PR comments) + action: "upload" + ###### Repository/Build Configurations - These values can be configured to match your app requirements. ###### + # For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig + app_location: "/" # App source code path + app_build_command: "npm run build-storybook" + api_location: "api" # Api source code path - optional + output_location: "/storybook-static" # Built app content directory - optional + ###### End of Repository/Build Configurations ###### + + close_pull_request_job: + if: github.event_name == 'pull_request' && github.event.action == 'closed' + runs-on: ubuntu-latest + name: Close Pull Request Job + steps: + - name: Close Pull Request + id: closepullrequest + uses: Azure/static-web-apps-deploy@v1 + with: + azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_NICE_SAND_001BCA703 }} + action: "close" diff --git a/src/components/Orders/index.ts b/src/components/Orders/index.ts deleted file mode 100644 index 9960c475..00000000 --- a/src/components/Orders/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./orders"; \ No newline at end of file diff --git a/src/components/Orders/orders-utils.ts b/src/components/Orders/orders-utils.ts deleted file mode 100644 index f0e50004..00000000 --- a/src/components/Orders/orders-utils.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { useGetOrdersQuery, useGetPhaseQuery, useGetVariantQuery } from "../../common"; - -type Outcome = "OK" | "Bounced" | "SupportBroken" | undefined; - -type Order = { - source: string; - orderType: string; - target: string | undefined; - aux: string | undefined; - outcome: Outcome; -}; - -const createOrders = ( - variant: NonNullable["data"]>, - phase: NonNullable["data"]>, - orders: NonNullable["data"]> -) => { - const ordersByNation = new Map(); - - orders.Orders.forEach((order) => { - const [source, orderType, target, aux] = order.Parts; - if (!source) throw new Error("No source found"); - if (!orderType) throw new Error("No orderType found"); - const resolution = phase.Resolutions?.find((resolution) => resolution.Province === source); - - const outcome: Outcome = resolution?.Resolution.includes("OK") ? "OK" : resolution?.Resolution.includes("Bounce") ? "Bounced" : resolution?.Resolution.includes("SupportBroken") ? "SupportBroken" : undefined; - - const orderData = { - source: variant.getProvinceLongName(source), - orderType: orderType, - target: target ? variant.getProvinceLongName(target) : undefined, - aux: aux ? variant.getProvinceLongName(aux) : undefined, - outcome: outcome - }; - - if (!ordersByNation.has(order.Nation)) { - ordersByNation.set(order.Nation, []); - } - - ordersByNation.get(order.Nation)!.push(orderData); - }); - - return Array.from(ordersByNation.entries()).map(([nation, orders]) => ({ - nation, - orders, - })); -} - -export { createOrders }; \ No newline at end of file diff --git a/src/components/Orders/use-orders.ts b/src/components/Orders/use-orders.ts deleted file mode 100644 index 79af0012..00000000 --- a/src/components/Orders/use-orders.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { mergeQueries, useGetVariantQuery, useGetOrdersQuery, useGetPhaseQuery } from "../../common"; -import { createOrders } from "./orders-utils"; -import { useSelectedPhaseContext } from "../selected-phase-context"; -import { useGameDetailContext } from "../game-detail-context"; - -type LoadingState = { - isLoading: true; - isError?: never; - orders?: never; -}; - -type ErrorState = { - isLoading?: never; - isError: true; - orders?: never; -}; - -type SuccessState = { - isLoading?: never; - isError?: never; - orders: ReturnType; -}; - -const useOrders = (): LoadingState | ErrorState | SuccessState => { - const { gameId } = useGameDetailContext(); - const { selectedPhase } = useSelectedPhaseContext(); - - const getVariantQuery = useGetVariantQuery(gameId); - const getPhaseQuery = useGetPhaseQuery(gameId, selectedPhase); - const listOrdersQuery = useGetOrdersQuery(gameId, selectedPhase); - - const { isLoading, isError, data } = mergeQueries([getVariantQuery, getPhaseQuery, listOrdersQuery], createOrders); - - if (isLoading) return { isLoading: true }; - if (isError) return { isError: true }; - if (!data) throw new Error("No data found"); - - return { - orders: data, - } -}; - -export { useOrders }; \ No newline at end of file From 274de07dfee65b6a11e693e82925a8d1ae1a3eac Mon Sep 17 00:00:00 2001 From: John McDowell Date: Fri, 10 Jan 2025 17:59:42 +0000 Subject: [PATCH 04/69] Move contexts to context sub-folder --- .gitignore | 2 - .vscode/tasks.json | 45 +++++++++++++++++++ .../ConfirmOrdersAction.tsx | 2 +- .../CreateOrder/CreateOrder.hook.ts | 2 +- .../CreateOrderAction.hook.ts | 2 +- .../GameDetailsLayout/GameDetailsLayout.tsx | 6 ++- .../GameDetailsNavigation.tsx | 2 +- src/components/Map/use-map.ts | 3 +- src/components/orders/use-orders.ts | 3 +- .../phase-select/use-phase-select.ts | 3 +- .../game-detail-context-provider.tsx | 0 .../game-detail-context.ts | 0 .../game-detail.context.types.ts | 0 .../game-detail-context/index.ts | 0 .../use-game-detail-context.ts | 0 src/context/index.ts | 2 + .../selected-phase-context/index.ts | 0 .../selected-phase-context-provider.tsx | 0 .../selected-phase-context.ts | 0 .../selected-phase-context.types.ts | 0 .../use-selected-phase-context.ts | 0 21 files changed, 58 insertions(+), 14 deletions(-) create mode 100644 .vscode/tasks.json rename src/{components => context}/game-detail-context/game-detail-context-provider.tsx (100%) rename src/{components => context}/game-detail-context/game-detail-context.ts (100%) rename src/{components => context}/game-detail-context/game-detail.context.types.ts (100%) rename src/{components => context}/game-detail-context/index.ts (100%) rename src/{components => context}/game-detail-context/use-game-detail-context.ts (100%) create mode 100644 src/context/index.ts rename src/{components => context}/selected-phase-context/index.ts (100%) rename src/{components => context}/selected-phase-context/selected-phase-context-provider.tsx (100%) rename src/{components => context}/selected-phase-context/selected-phase-context.ts (100%) rename src/{components => context}/selected-phase-context/selected-phase-context.types.ts (100%) rename src/{components => context}/selected-phase-context/use-selected-phase-context.ts (100%) diff --git a/.gitignore b/.gitignore index 7b74e43c..013166ed 100644 --- a/.gitignore +++ b/.gitignore @@ -13,8 +13,6 @@ dist-ssr *.local # Editor directories and files -.vscode/* -!.vscode/extensions.json .idea .DS_Store *.suo diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 00000000..3f9d469d --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,45 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "dev", + "type": "shell", + "command": "npm run dev", + "presentation": { + "echo": false, + "reveal": "always", + "focus": false, + "panel": "shared", + "showReuseMessage": false, + "clear": true, + "close": false + }, + "options": { + "cwd": "${workspaceFolder}" + }, + "runOptions": { + "runOn": "folderOpen" + } + }, + { + "label": "build:watch", + "type": "shell", + "command": "npm run build-watch", + "presentation": { + "echo": false, + "reveal": "always", + "focus": false, + "panel": "shared", + "showReuseMessage": false, + "clear": true, + "close": false + }, + "options": { + "cwd": "${workspaceFolder}" + }, + "runOptions": { + "runOn": "folderOpen" + } + } + ] +} diff --git a/src/components/ConfirmOrdersAction/ConfirmOrdersAction.tsx b/src/components/ConfirmOrdersAction/ConfirmOrdersAction.tsx index 6e3750d2..d2aeeb50 100644 --- a/src/components/ConfirmOrdersAction/ConfirmOrdersAction.tsx +++ b/src/components/ConfirmOrdersAction/ConfirmOrdersAction.tsx @@ -8,7 +8,7 @@ import { useGetUserNewestPhaseStateQuery, useUpdatePhaseStateMutation, } from "../../common"; -import { useGameDetailContext } from "../game-detail-context"; +import { useGameDetailContext } from "../../context"; const useConfirmOrdersAction = () => { const { gameId } = useGameDetailContext(); diff --git a/src/components/CreateOrder/CreateOrder.hook.ts b/src/components/CreateOrder/CreateOrder.hook.ts index fb04852c..668d1f92 100644 --- a/src/components/CreateOrder/CreateOrder.hook.ts +++ b/src/components/CreateOrder/CreateOrder.hook.ts @@ -2,7 +2,7 @@ import { useState } from "react"; import { mergeQueries, useCreateOrderMutation, useGetOptionsQuery, useGetVariantQuery } from "../../common"; import { createOrderOptionTree, getNextOptionsNode, getOrderStatus } from "./CreateOrder.util"; import { useModal } from "../Modal"; -import { useGameDetailContext } from "../game-detail-context"; +import { useGameDetailContext } from "../../context"; type LoadingState = { isLoading: true; diff --git a/src/components/CreateOrderAction/CreateOrderAction.hook.ts b/src/components/CreateOrderAction/CreateOrderAction.hook.ts index 9c2d9a0d..102ae35d 100644 --- a/src/components/CreateOrderAction/CreateOrderAction.hook.ts +++ b/src/components/CreateOrderAction/CreateOrderAction.hook.ts @@ -1,6 +1,6 @@ import { useLocation, useNavigate } from "react-router"; import { mergeQueries, useGetCurrentPhaseQuery } from "../../common"; -import { useGameDetailContext } from "../game-detail-context"; +import { useGameDetailContext } from "../../context"; const useCreateOrderAction = () => { const { gameId } = useGameDetailContext(); diff --git a/src/components/GameDetailsLayout/GameDetailsLayout.tsx b/src/components/GameDetailsLayout/GameDetailsLayout.tsx index 6270c3d1..8354ccca 100644 --- a/src/components/GameDetailsLayout/GameDetailsLayout.tsx +++ b/src/components/GameDetailsLayout/GameDetailsLayout.tsx @@ -2,8 +2,10 @@ import { Outlet } from "react-router"; import { AppBar, IconButton, Stack, Toolbar, useTheme } from "@mui/material"; import { ArrowBack as BackIcon } from "@mui/icons-material"; import { PhaseSelect } from "../phase-select"; -import { SelectedPhaseContextProvider } from "../selected-phase-context"; -import { GameDetailContextProvider } from "../game-detail-context"; +import { + GameDetailContextProvider, + SelectedPhaseContextProvider, +} from "../../context"; const GameDetailsLayout: React.FC<{ onClickBack: () => void; diff --git a/src/components/GameDetailsNavigation/GameDetailsNavigation.tsx b/src/components/GameDetailsNavigation/GameDetailsNavigation.tsx index 55ebfc7f..e48161d1 100644 --- a/src/components/GameDetailsNavigation/GameDetailsNavigation.tsx +++ b/src/components/GameDetailsNavigation/GameDetailsNavigation.tsx @@ -9,7 +9,7 @@ import { People as PlayersIcon, } from "@mui/icons-material"; import { useLocation, useNavigate } from "react-router"; -import { useGameDetailContext } from "../game-detail-context"; +import { useGameDetailContext } from "../../context"; const GameDetailsNavigation: React.FC = () => { const { gameId } = useGameDetailContext(); diff --git a/src/components/Map/use-map.ts b/src/components/Map/use-map.ts index 5cd713b9..55b7956d 100644 --- a/src/components/Map/use-map.ts +++ b/src/components/Map/use-map.ts @@ -1,7 +1,6 @@ import { createMap } from "../../common/map/map"; import { mergeQueries, useGetPhaseQuery, useGetMapSvgQuery, useGetUnitSvgQuery, useGetVariantQuery } from "../../common"; -import { useSelectedPhaseContext } from "../selected-phase-context"; -import { useGameDetailContext } from "../game-detail-context"; +import { useGameDetailContext, useSelectedPhaseContext } from "../../context"; const useMap = () => { const { gameId } = useGameDetailContext(); diff --git a/src/components/orders/use-orders.ts b/src/components/orders/use-orders.ts index 79af0012..c746b838 100644 --- a/src/components/orders/use-orders.ts +++ b/src/components/orders/use-orders.ts @@ -1,7 +1,6 @@ import { mergeQueries, useGetVariantQuery, useGetOrdersQuery, useGetPhaseQuery } from "../../common"; import { createOrders } from "./orders-utils"; -import { useSelectedPhaseContext } from "../selected-phase-context"; -import { useGameDetailContext } from "../game-detail-context"; +import { useGameDetailContext, useSelectedPhaseContext } from "../../context"; type LoadingState = { isLoading: true; diff --git a/src/components/phase-select/use-phase-select.ts b/src/components/phase-select/use-phase-select.ts index 20b90134..2b1acade 100644 --- a/src/components/phase-select/use-phase-select.ts +++ b/src/components/phase-select/use-phase-select.ts @@ -1,7 +1,6 @@ import service from "../../common/store/service"; import { mergeQueries } from "../../common"; -import { useSelectedPhaseContext } from "../selected-phase-context"; -import { useGameDetailContext } from "../game-detail-context"; +import { useGameDetailContext, useSelectedPhaseContext } from "../../context"; const usePhaseSelect = () => { const { gameId } = useGameDetailContext(); diff --git a/src/components/game-detail-context/game-detail-context-provider.tsx b/src/context/game-detail-context/game-detail-context-provider.tsx similarity index 100% rename from src/components/game-detail-context/game-detail-context-provider.tsx rename to src/context/game-detail-context/game-detail-context-provider.tsx diff --git a/src/components/game-detail-context/game-detail-context.ts b/src/context/game-detail-context/game-detail-context.ts similarity index 100% rename from src/components/game-detail-context/game-detail-context.ts rename to src/context/game-detail-context/game-detail-context.ts diff --git a/src/components/game-detail-context/game-detail.context.types.ts b/src/context/game-detail-context/game-detail.context.types.ts similarity index 100% rename from src/components/game-detail-context/game-detail.context.types.ts rename to src/context/game-detail-context/game-detail.context.types.ts diff --git a/src/components/game-detail-context/index.ts b/src/context/game-detail-context/index.ts similarity index 100% rename from src/components/game-detail-context/index.ts rename to src/context/game-detail-context/index.ts diff --git a/src/components/game-detail-context/use-game-detail-context.ts b/src/context/game-detail-context/use-game-detail-context.ts similarity index 100% rename from src/components/game-detail-context/use-game-detail-context.ts rename to src/context/game-detail-context/use-game-detail-context.ts diff --git a/src/context/index.ts b/src/context/index.ts new file mode 100644 index 00000000..1a273fd9 --- /dev/null +++ b/src/context/index.ts @@ -0,0 +1,2 @@ +export * from "./game-detail-context"; +export * from "./selected-phase-context"; \ No newline at end of file diff --git a/src/components/selected-phase-context/index.ts b/src/context/selected-phase-context/index.ts similarity index 100% rename from src/components/selected-phase-context/index.ts rename to src/context/selected-phase-context/index.ts diff --git a/src/components/selected-phase-context/selected-phase-context-provider.tsx b/src/context/selected-phase-context/selected-phase-context-provider.tsx similarity index 100% rename from src/components/selected-phase-context/selected-phase-context-provider.tsx rename to src/context/selected-phase-context/selected-phase-context-provider.tsx diff --git a/src/components/selected-phase-context/selected-phase-context.ts b/src/context/selected-phase-context/selected-phase-context.ts similarity index 100% rename from src/components/selected-phase-context/selected-phase-context.ts rename to src/context/selected-phase-context/selected-phase-context.ts diff --git a/src/components/selected-phase-context/selected-phase-context.types.ts b/src/context/selected-phase-context/selected-phase-context.types.ts similarity index 100% rename from src/components/selected-phase-context/selected-phase-context.types.ts rename to src/context/selected-phase-context/selected-phase-context.types.ts diff --git a/src/components/selected-phase-context/use-selected-phase-context.ts b/src/context/selected-phase-context/use-selected-phase-context.ts similarity index 100% rename from src/components/selected-phase-context/use-selected-phase-context.ts rename to src/context/selected-phase-context/use-selected-phase-context.ts From 36b6b78c419faf91a0fc8c700bac83ce79b07cfb Mon Sep 17 00:00:00 2001 From: John McDowell Date: Fri, 10 Jan 2025 18:02:59 +0000 Subject: [PATCH 05/69] Refactor IconButton usage in PhaseSelect component to use StyledIconButton for consistent styling --- src/components/phase-select/phase-select.tsx | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/components/phase-select/phase-select.tsx b/src/components/phase-select/phase-select.tsx index 682de16c..ec375b19 100644 --- a/src/components/phase-select/phase-select.tsx +++ b/src/components/phase-select/phase-select.tsx @@ -29,6 +29,10 @@ const StyledFormControl = styled(FormControl)` min-width: 250px; `; +const StyledIconButton = styled(IconButton)` + height: fit-content; +`; + const PhaseSelect = () => { const { handleNext, @@ -44,8 +48,7 @@ const PhaseSelect = () => { return ( - { disabled={previousDisabled} > - + { ))} - { disabled={nextDisabled} > - + ); }; From 400fa47c88c8e6074f1f4b663aed994f5b11b290 Mon Sep 17 00:00:00 2001 From: John McDowell Date: Fri, 10 Jan 2025 18:06:25 +0000 Subject: [PATCH 06/69] Add "Invalid" outcome to orders utility and update label and icon mappings --- src/components/orders/orders-utils.ts | 4 ++-- src/components/orders/orders.tsx | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/components/orders/orders-utils.ts b/src/components/orders/orders-utils.ts index f0e50004..f869c149 100644 --- a/src/components/orders/orders-utils.ts +++ b/src/components/orders/orders-utils.ts @@ -1,6 +1,6 @@ import { useGetOrdersQuery, useGetPhaseQuery, useGetVariantQuery } from "../../common"; -type Outcome = "OK" | "Bounced" | "SupportBroken" | undefined; +type Outcome = "OK" | "Bounced" | "SupportBroken" | "Invalid" | undefined; type Order = { source: string; @@ -23,7 +23,7 @@ const createOrders = ( if (!orderType) throw new Error("No orderType found"); const resolution = phase.Resolutions?.find((resolution) => resolution.Province === source); - const outcome: Outcome = resolution?.Resolution.includes("OK") ? "OK" : resolution?.Resolution.includes("Bounce") ? "Bounced" : resolution?.Resolution.includes("SupportBroken") ? "SupportBroken" : undefined; + const outcome: Outcome = resolution?.Resolution.includes("OK") ? "OK" : resolution?.Resolution.includes("Bounce") ? "Bounced" : resolution?.Resolution.includes("SupportBroken") ? "SupportBroken" : resolution?.Resolution.includes("Invalid") ? "Invalid" : undefined; const orderData = { source: variant.getProvinceLongName(source), diff --git a/src/components/orders/orders.tsx b/src/components/orders/orders.tsx index c8b05d50..44488d65 100644 --- a/src/components/orders/orders.tsx +++ b/src/components/orders/orders.tsx @@ -52,6 +52,7 @@ const OutcomeLabelMap = { OK: "Succeeded", Bounced: "Bounced", SupportBroken: "Support broken", + Invalid: "Invalid order", } as const; const OutcomeIconMap = { @@ -64,6 +65,9 @@ const OutcomeIconMap = { SupportBroken: (theme: Theme) => ( ), + Invalid: (theme: Theme) => ( + + ), } as const; const Orders: React.FC = () => { From 20450516c7d30c7dd653448b762f026d5fed59b9 Mon Sep 17 00:00:00 2001 From: John McDowell Date: Fri, 10 Jan 2025 18:09:10 +0000 Subject: [PATCH 07/69] wip --- src/components/orders/orders.tsx | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/src/components/orders/orders.tsx b/src/components/orders/orders.tsx index 44488d65..4f017221 100644 --- a/src/components/orders/orders.tsx +++ b/src/components/orders/orders.tsx @@ -8,7 +8,6 @@ import { ListSubheader, Stack, styled, - Theme, Typography, useTheme, } from "@mui/material"; @@ -55,21 +54,6 @@ const OutcomeLabelMap = { Invalid: "Invalid order", } as const; -const OutcomeIconMap = { - OK: (theme: Theme) => ( - - ), - Bounced: (theme: Theme) => ( - - ), - SupportBroken: (theme: Theme) => ( - - ), - Invalid: (theme: Theme) => ( - - ), -} as const; - const Orders: React.FC = () => { const theme = useTheme(); const { isLoading, isError, orders } = useOrders(); @@ -104,7 +88,13 @@ const Orders: React.FC = () => { {order.outcome && ( - {OutcomeIconMap[order.outcome](theme)} + {order.outcome === "OK" ? ( + + ) : ( + + )} )} From 066b362f9a2b01c99c687275a87d0310b6e02612 Mon Sep 17 00:00:00 2001 From: John McDowell Date: Fri, 10 Jan 2025 18:50:41 +0000 Subject: [PATCH 08/69] Add utility functions for order formatting and resolution transformation; implement tests and update order handling --- src/__tests__/util.test.ts | 43 ++++++++++ src/common/schema/list-phases.ts | 10 ++- src/components/orders/orders-utils.ts | 16 ++-- src/components/orders/orders.tsx | 111 ++++++++++---------------- src/util.ts | 41 ++++++++++ 5 files changed, 143 insertions(+), 78 deletions(-) create mode 100644 src/__tests__/util.test.ts create mode 100644 src/util.ts diff --git a/src/__tests__/util.test.ts b/src/__tests__/util.test.ts new file mode 100644 index 00000000..01cb20c5 --- /dev/null +++ b/src/__tests__/util.test.ts @@ -0,0 +1,43 @@ +import { describe, test } from "vitest"; +import { transformResolution } from "../util"; + +describe("transformResolution", () => { + test("OK", () => { + const resolution = "OK"; + const result = transformResolution(resolution); + expect(result).toEqual({ + outcome: "Succeeded", + }); + }) + test("ErrBounce:pie", () => { + const resolution = "ErrBounce:pie"; + const result = transformResolution(resolution); + expect(result).toEqual({ + outcome: "Bounced", + by: "pie", + }); + }) + test("ErrBounce:bul/ec", () => { + const resolution = "ErrBounce:bul/ec"; + const result = transformResolution(resolution); + expect(result).toEqual({ + outcome: "Bounced", + by: "bul/ec", + }); + }) + test("ErrSupportBroken:pie", () => { + const resolution = "ErrSupportBroken:pie"; + const result = transformResolution(resolution); + expect(result).toEqual({ + outcome: "Support broken", + by: "pie", + }); + }) + test("ErrInvalidSupporteeOrder", () => { + const resolution = "ErrInvalidSupporteeOrder"; + const result = transformResolution(resolution); + expect(result).toEqual({ + outcome: "Invalid order", + }); + }) +}); diff --git a/src/common/schema/list-phases.ts b/src/common/schema/list-phases.ts index 55235cc0..480446ea 100644 --- a/src/common/schema/list-phases.ts +++ b/src/common/schema/list-phases.ts @@ -1,5 +1,6 @@ import { z } from "zod"; import { apiResponseSchema, listApiResponseSchema } from "./common"; +import { transformResolution } from "../../util"; const unitSchema = z.object({ Type: z.string(), @@ -36,6 +37,7 @@ const resolutionSchema = z.object({ Resolution: z.string(), }); + const phaseSchema = z.object({ PhaseOrdinal: z.number(), Season: z.string(), @@ -57,7 +59,13 @@ const phaseSchema = z.object({ Dislodgers: z.array(dislodgerSchema).nullable(), ForceDisbands: z.array(z.string()).nullable(), Bounces: z.array(bounceSchema).nullable(), - Resolutions: z.array(resolutionSchema).nullable(), + Resolutions: z.union([z.array(resolutionSchema), z.null()]).transform((data) => { + if (data === null) return []; + return data.map((resolution) => { + const { outcome, by } = transformResolution(resolution.Resolution); + return { province: resolution.Province, outcome, by }; + }) + }), Host: z.string(), SoloSCCount: z.number(), }); diff --git a/src/components/orders/orders-utils.ts b/src/components/orders/orders-utils.ts index f869c149..67d6f24f 100644 --- a/src/components/orders/orders-utils.ts +++ b/src/components/orders/orders-utils.ts @@ -1,13 +1,14 @@ import { useGetOrdersQuery, useGetPhaseQuery, useGetVariantQuery } from "../../common"; -type Outcome = "OK" | "Bounced" | "SupportBroken" | "Invalid" | undefined; - type Order = { source: string; orderType: string; target: string | undefined; aux: string | undefined; - outcome: Outcome; + outcome: { + outcome: string; + by?: string; + } | undefined; }; const createOrders = ( @@ -21,16 +22,17 @@ const createOrders = ( const [source, orderType, target, aux] = order.Parts; if (!source) throw new Error("No source found"); if (!orderType) throw new Error("No orderType found"); - const resolution = phase.Resolutions?.find((resolution) => resolution.Province === source); - - const outcome: Outcome = resolution?.Resolution.includes("OK") ? "OK" : resolution?.Resolution.includes("Bounce") ? "Bounced" : resolution?.Resolution.includes("SupportBroken") ? "SupportBroken" : resolution?.Resolution.includes("Invalid") ? "Invalid" : undefined; + const outcome = phase.Resolutions?.find((resolution) => resolution.province === source); const orderData = { source: variant.getProvinceLongName(source), orderType: orderType, target: target ? variant.getProvinceLongName(target) : undefined, aux: aux ? variant.getProvinceLongName(aux) : undefined, - outcome: outcome + outcome: outcome ? { + outcome: outcome.outcome, + by: outcome.by ? variant.getProvinceLongName(outcome.by) : undefined, + } : undefined, }; if (!ordersByNation.has(order.Nation)) { diff --git a/src/components/orders/orders.tsx b/src/components/orders/orders.tsx index 4f017221..d43dadca 100644 --- a/src/components/orders/orders.tsx +++ b/src/components/orders/orders.tsx @@ -11,20 +11,12 @@ import { Typography, useTheme, } from "@mui/material"; - import { CheckCircle as OrderOkIcon, Cancel as OrderErrorIcon, } from "@mui/icons-material"; - import { useOrders } from "./use-orders"; - -type OrderProps = { - source: string; - orderType: string; - target?: string; - aux?: string; -}; +import { formatOrderText } from "../../util"; const StyledListItem = styled(ListItem)(({ theme }) => ({ border: `1px solid ${theme.palette.grey[200]}`, @@ -37,86 +29,65 @@ const StyledListSubheader = styled(ListSubheader)(({ theme }) => ({ backgroundColor: theme.palette.grey[200], })); -const formatOrderText = (order: OrderProps) => { - if (order.orderType === "Hold") { - return `${order.source} Hold`; - } - if (order.orderType === "Support") { - return `${order.source} Support ${order.target} ${order.aux}`; - } - return `${order.source} ${order.orderType} to ${order.target}`; -}; - -const OutcomeLabelMap = { - OK: "Succeeded", - Bounced: "Bounced", - SupportBroken: "Support broken", - Invalid: "Invalid order", -} as const; +const StyledContainer = styled(Stack)(({ theme }) => ({ + maxWidth: 630, + width: "100%", + margin: "0 auto", + gap: theme.spacing(2), + padding: theme.spacing(2), +})); const Orders: React.FC = () => { const theme = useTheme(); - const { isLoading, isError, orders } = useOrders(); + const { isLoading, orders } = useOrders(); if (isLoading) { return ( - + - + ); } - if (isError) { - return ( - - Error loading orders - - ); - } + if (!orders) return null; return ( - + Orders {orders.map(({ nation, orders }) => ( - - {nation}}> - {orders.map((order, index) => ( - + {nation}} + > + {orders.map((order, index) => ( + + {order.outcome && ( + + {order.outcome.outcome === "Succeeded" ? ( + + ) : ( + + )} + + )} + + + {formatOrderText(order)} + {order.outcome && ( - - {order.outcome === "OK" ? ( - - ) : ( - - )} - - )} - - - {formatOrderText(order)} + + {order.outcome.outcome} + {order.outcome.by ? ` by ${order.outcome.by}` : ""} - {order.outcome && ( - - - {OutcomeLabelMap[order.outcome]} - - - )} - - - ))} - - + )} + + + ))} + ))} - + ); }; diff --git a/src/util.ts b/src/util.ts new file mode 100644 index 00000000..dbb37c25 --- /dev/null +++ b/src/util.ts @@ -0,0 +1,41 @@ +/** + * Formats an order object into a human-readable string. + */ +const formatOrderText = (order: { + source: string; + orderType: string; + target?: string; + aux?: string; +}) => { + if (order.orderType === "Hold") { + return `${order.source} Hold`; + } + if (order.orderType === "Support") { + return `${order.source} Support ${order.target} ${order.aux}`; + } + return `${order.source} ${order.orderType} to ${order.target}`; +} + +/** + * Transforms a resolution string into a human-readable label + * and extracts `by` if it exists. + */ +const transformResolution = (resolution: string): { outcome: string, by?: string } => { + const resolutionMap: Record = { + OK: "Succeeded", + ErrBounce: "Bounced", + ErrSupportBroken: "Support broken", + ErrInvalidSupporteeOrder: "Invalid order", + } + + const regex = /([^:]+)(?::(.+))?/; + + const match = resolution.match(regex); + if (!match) throw new Error(`Unexpected resolution: ${resolution}`); + return { + outcome: resolutionMap[match[1]], + by: match[2], + }; +}; + +export { formatOrderText, transformResolution }; \ No newline at end of file From edc65020511e989b488399183afc63385fddf029 Mon Sep 17 00:00:00 2001 From: John McDowell Date: Mon, 27 Jan 2025 15:44:51 +0000 Subject: [PATCH 09/69] wip --- src/Router.tsx | 18 +- src/common/store/service.ts | 5 +- .../drawer-navigation/drawer-navigation.tsx | 102 +++++++++ src/components/drawer-navigation/index.ts | 1 + src/components/game-card/game-card.tsx | 7 +- src/components/home/home.tsx | 72 ------- src/components/home/index.ts | 1 - src/components/home/use-home.ts | 35 ---- src/components/index.ts | 2 + src/components/query-container.tsx | 54 +++++ src/screens/CreateGame.tsx | 128 ++++++------ src/screens/home/create-game/create-game.tsx | 151 ++++++++++++++ src/screens/home/create-game/index.ts | 1 + .../home/create-game/use-create-game.ts | 0 src/screens/home/find-games/find-games.tsx | 88 ++++++++ src/screens/home/find-games/index.ts | 1 + src/screens/home/find-games/use-find-games.ts | 18 ++ src/screens/home/index.ts | 5 + src/screens/home/layout.tsx | 195 ++++++++++++++++++ src/screens/home/my-games/index.ts | 1 + src/screens/home/my-games/my-games.tsx | 163 +++++++++++++++ src/screens/home/my-games/use-my-games.ts | 36 ++++ src/screens/home/profile/index.ts | 1 + src/screens/home/profile/profile.tsx | 89 ++++++++ src/screens/home/profile/use-profile.ts | 8 + src/screens/home/screen-title.tsx | 34 +++ src/screens/index.ts | 1 + src/theme.ts | 6 +- 28 files changed, 1041 insertions(+), 182 deletions(-) create mode 100644 src/components/drawer-navigation/drawer-navigation.tsx create mode 100644 src/components/drawer-navigation/index.ts delete mode 100644 src/components/home/home.tsx delete mode 100644 src/components/home/index.ts delete mode 100644 src/components/home/use-home.ts create mode 100644 src/components/index.ts create mode 100644 src/components/query-container.tsx create mode 100644 src/screens/home/create-game/create-game.tsx create mode 100644 src/screens/home/create-game/index.ts create mode 100644 src/screens/home/create-game/use-create-game.ts create mode 100644 src/screens/home/find-games/find-games.tsx create mode 100644 src/screens/home/find-games/index.ts create mode 100644 src/screens/home/find-games/use-find-games.ts create mode 100644 src/screens/home/index.ts create mode 100644 src/screens/home/layout.tsx create mode 100644 src/screens/home/my-games/index.ts create mode 100644 src/screens/home/my-games/my-games.tsx create mode 100644 src/screens/home/my-games/use-my-games.ts create mode 100644 src/screens/home/profile/index.ts create mode 100644 src/screens/home/profile/profile.tsx create mode 100644 src/screens/home/profile/use-profile.ts create mode 100644 src/screens/home/screen-title.tsx create mode 100644 src/screens/index.ts diff --git a/src/Router.tsx b/src/Router.tsx index 01226da6..632e5309 100644 --- a/src/Router.tsx +++ b/src/Router.tsx @@ -1,10 +1,8 @@ import React from "react"; -import CreateGame from "./screens/CreateGame"; import { Navigate, Outlet, Route, Routes, useNavigate } from "react-router"; import Login from "./screens/Login"; import { useSelector } from "react-redux"; import { selectAuth } from "./common/store/auth"; -import UserPage from "./screens/UserPage"; import { Map } from "./components/Map"; import { GameDetailsLayout } from "./components/GameDetailsLayout"; import { GameDetailsNavigation } from "./components/GameDetailsNavigation"; @@ -13,11 +11,15 @@ import { CreateOrder } from "./components/CreateOrder"; import { Modal } from "./components/Modal"; import { CreateOrderAction } from "./components/CreateOrderAction"; import { ConfirmOrdersAction } from "./components/ConfirmOrdersAction"; -import { Home } from "./components/home"; -import { HomeLayout } from "./components/home-layout"; import { PlayerInfo } from "./components/PlayerInfo"; import { GameInfo } from "./components/GameInfo"; -import { BrowseGames } from "./components/browse-games"; +import { + CreateGame, + FindGames, + Layout as HomeLayout, + MyGames, + Profile, +} from "./screens"; const Router: React.FC = () => { const { loggedIn } = useSelector(selectAuth); @@ -33,10 +35,10 @@ const Router: React.FC = () => { }> }> - } /> - } /> + } /> + } /> } /> - } /> + } /> diff --git a/src/common/store/service.ts b/src/common/store/service.ts index 46cacced..e0e80bf5 100644 --- a/src/common/store/service.ts +++ b/src/common/store/service.ts @@ -154,7 +154,7 @@ const newGameSchema = z.object({ const baseUrl = "https://diplicity-engine.appspot.com/"; -export default createApi({ +const service = createApi({ tagTypes: [ TagType.Game, TagType.ListGames, @@ -471,7 +471,8 @@ export default createApi({ type Variant = z.infer; -export { newGameSchema, gameSchema, apiResponseSchema, extractProperties, extractPropertiesList, listApiResponseSchema } +export { newGameSchema, gameSchema, apiResponseSchema, extractProperties, extractPropertiesList, listApiResponseSchema, service } export type { Variant } +export default service; diff --git a/src/components/drawer-navigation/drawer-navigation.tsx b/src/components/drawer-navigation/drawer-navigation.tsx new file mode 100644 index 00000000..792c9028 --- /dev/null +++ b/src/components/drawer-navigation/drawer-navigation.tsx @@ -0,0 +1,102 @@ +import React from "react"; +import { + Drawer, + List, + ListItem, + ListItemButton, + ListItemIcon, + ListItemText, + useTheme, +} from "@mui/material"; + +const drawerWidth = 240; + +const DrawerNavigationContext = React.createContext< + | { + value: string; + onChange: (newValue: string) => void; + } + | undefined +>(undefined); + +type DrawerNavigationProps = React.PropsWithChildren<{ + value: string; + onChange: (newValue: string) => void; +}>; + +const DrawerNavigation: React.FC = (props) => { + return ( + + + {props.children} + + + ); +}; + +type DrawerNavigationActionProps = React.PropsWithChildren<{ + label: string; + icon: React.ReactElement; + value: string; +}>; + +const DrawerNavigationAction: React.FC = ( + props +) => { + const theme = useTheme(); + const context = React.useContext(DrawerNavigationContext); + + if (!context) { + throw new Error( + "DrawerNavigationAction must be used within a DrawerNavigation" + ); + } + + const selectedItemIconStyle = { + color: theme.palette.primary.main, + }; + + const selectedItemTextStyle = { + color: theme.palette.primary.main, + fontWeight: "bold", + }; + + const selected = context?.value === props.value; + + return ( + + context.onChange(props.value)}> + + {React.cloneElement(props.icon, { + style: selected ? selectedItemIconStyle : {}, + })} + + + + + ); +}; + +export { DrawerNavigation, DrawerNavigationAction }; diff --git a/src/components/drawer-navigation/index.ts b/src/components/drawer-navigation/index.ts new file mode 100644 index 00000000..2152fb30 --- /dev/null +++ b/src/components/drawer-navigation/index.ts @@ -0,0 +1 @@ +export * from "./drawer-navigation"; \ No newline at end of file diff --git a/src/components/game-card/game-card.tsx b/src/components/game-card/game-card.tsx index 6b2954aa..86f244a4 100644 --- a/src/components/game-card/game-card.tsx +++ b/src/components/game-card/game-card.tsx @@ -24,12 +24,15 @@ import { Chip, Avatar, Link, + styled, } from "@mui/material"; import { useGameCard } from "./use-game-card"; const MAX_AVATARS = 7; const AVATAR_SIZE = 28; +const StyledCard = styled(Card)(() => ({})); + const GameCard: React.FC<{ canJoin: boolean; canLeave: boolean; @@ -82,7 +85,7 @@ const GameCard: React.FC<{ const remainingUsersCount = props.members.length - displayedUsers.length; return ( - + @@ -250,7 +253,7 @@ const GameCard: React.FC<{ - + ); }; diff --git a/src/components/home/home.tsx b/src/components/home/home.tsx deleted file mode 100644 index 39c976ea..00000000 --- a/src/components/home/home.tsx +++ /dev/null @@ -1,72 +0,0 @@ -import React from "react"; -import { CircularProgress, Stack, Typography } from "@mui/material"; -import { useHome } from "./use-home"; -import { GameCard } from "../game-card"; - -const Layout: React.FC<{ - children: React.ReactNode; -}> = (props) => { - return ( - - My games - {props.children} - - ); -}; - -const Home: React.FC = () => { - const { isLoading, isError, data } = useHome(); - - if (isLoading) { - return ( - - - - ); - } - - if (isError) { - return Error; - } - - if (!data) throw new Error("No data"); - - return ( - - - {data.stagingGameCards.length > 0 && ( - - Staging Games - - {data.stagingGameCards.map((game) => ( - - ))} - - - )} - {data.startedGameCards.length > 0 && ( - - Started Games - - {data.startedGameCards.map((game) => ( - - ))} - - - )} - {data.finishedGameCards.length > 0 && ( - - Finished Games - - {data.finishedGameCards.map((game) => ( - - ))} - - - )} - - - ); -}; - -export { Home }; diff --git a/src/components/home/index.ts b/src/components/home/index.ts deleted file mode 100644 index 61a65b75..00000000 --- a/src/components/home/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./home"; \ No newline at end of file diff --git a/src/components/home/use-home.ts b/src/components/home/use-home.ts deleted file mode 100644 index 3ea4b4a5..00000000 --- a/src/components/home/use-home.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { mergeQueries } from "../../common"; -import service from "../../common/store/service"; -import { createGameCardProps } from "../game-card"; - -const options = { my: true, mastered: false }; - -const useHome = () => { - const { endpoints } = service - const listStagingGamesQuery = endpoints.listGames.useQuery( - { - ...options, - status: "Staging", - }, - ); - const listStartedGamesQuery = endpoints.listGames.useQuery({ - ...options, - status: "Started", - }); - const listFinishedGamesQuery = endpoints.listGames.useQuery({ - ...options, - status: "Finished", - }); - return mergeQueries([listStagingGamesQuery, listStartedGamesQuery, listFinishedGamesQuery], (stagingGames, startedGames, finishedGames) => { - const stagingGameCards = stagingGames.map(createGameCardProps) - const startedGameCards = startedGames.map(createGameCardProps) - const finishedGameCards = finishedGames.map(createGameCardProps) - return { - stagingGameCards, - startedGameCards, - finishedGameCards, - } - }); -} - -export { useHome }; \ No newline at end of file diff --git a/src/components/index.ts b/src/components/index.ts new file mode 100644 index 00000000..4ece7d34 --- /dev/null +++ b/src/components/index.ts @@ -0,0 +1,2 @@ +export * from "./drawer-navigation" +export * from "./query-container" \ No newline at end of file diff --git a/src/components/query-container.tsx b/src/components/query-container.tsx new file mode 100644 index 00000000..6f2f2c65 --- /dev/null +++ b/src/components/query-container.tsx @@ -0,0 +1,54 @@ +import React from "react"; +import { CircularProgress, Box, Typography } from "@mui/material"; + +type Query = { + isLoading: boolean; + isError: boolean; + data?: TData; +}; + +type QueryContainerProps = { + query: Query; + children: (data: TData) => React.ReactNode; +}; + +const QueryContainer = ({ + query, + children, +}: QueryContainerProps) => { + if (query.isLoading) { + return ( + + + + ); + } + + if (query.isError) { + return ( + + + An error occurred while loading data. + + + ); + } + + if (query.data === undefined) { + return null; + } + + return <>{children(query.data)}; +}; + +export { QueryContainer }; diff --git a/src/screens/CreateGame.tsx b/src/screens/CreateGame.tsx index 1a6a02f8..55d27c3e 100644 --- a/src/screens/CreateGame.tsx +++ b/src/screens/CreateGame.tsx @@ -8,6 +8,8 @@ import { FormControlLabel, Checkbox, Button, + styled, + Box, } from "@mui/material"; import { toFormikValidationSchema } from "zod-formik-adapter"; import service, { newGameSchema } from "../common/store/service"; @@ -16,6 +18,12 @@ import { useDispatch } from "react-redux"; import { feedbackActions } from "../common/store/feedback"; import { useNavigate } from "react-router"; +const StyledBox = styled(Box)(({ theme }) => ({ + height: "100%", + border: `1px solid ${theme.palette.divider}`, + borderRadius: theme.shape.borderRadius, +})); + const CreateGame: React.FC = () => { const listVariantsQuery = service.endpoints.listVariants.useQuery(undefined); @@ -81,65 +89,67 @@ const CreateGame: React.FC = () => { } return ( -
{ - e.preventDefault(); - formik.handleSubmit(e); - }} - > - - Create Game - formik.setFieldValue("Desc", e.target.value)} - onBlur={formik.handleBlur} - error={formik.touched.Desc && Boolean(formik.errors.Desc)} - helperText={formik.touched.Desc && formik.errors.Desc} - disabled={createGameQuery.isLoading} - /> - formik.setFieldValue("Variant", e.target.value)} - onBlur={formik.handleBlur} - error={formik.touched.Variant && Boolean(formik.errors.Variant)} - helperText={formik.touched.Variant && formik.errors.Variant} - disabled={createGameQuery.isLoading} - > - {listVariantsQuery.data?.map((variant) => ( - - {variant.Name} - - ))} - - - } - label="Private" - /> - - -
+ +
{ + e.preventDefault(); + formik.handleSubmit(e); + }} + > + + Create Game + formik.setFieldValue("Desc", e.target.value)} + onBlur={formik.handleBlur} + error={formik.touched.Desc && Boolean(formik.errors.Desc)} + helperText={formik.touched.Desc && formik.errors.Desc} + disabled={createGameQuery.isLoading} + /> + formik.setFieldValue("Variant", e.target.value)} + onBlur={formik.handleBlur} + error={formik.touched.Variant && Boolean(formik.errors.Variant)} + helperText={formik.touched.Variant && formik.errors.Variant} + disabled={createGameQuery.isLoading} + > + {listVariantsQuery.data?.map((variant) => ( + + {variant.Name} + + ))} + + + } + label="Private" + /> + + +
+
); }; diff --git a/src/screens/home/create-game/create-game.tsx b/src/screens/home/create-game/create-game.tsx new file mode 100644 index 00000000..8355260c --- /dev/null +++ b/src/screens/home/create-game/create-game.tsx @@ -0,0 +1,151 @@ +import React from "react"; +import { useFormik } from "formik"; +import { + Stack, + TextField, + MenuItem, + FormControlLabel, + Checkbox, + Button, +} from "@mui/material"; +import { toFormikValidationSchema } from "zod-formik-adapter"; +import service, { newGameSchema } from "../../../common/store/service"; +import { feedbackActions } from "../../../common/store/feedback"; +import { z } from "zod"; +import { useDispatch } from "react-redux"; +import { useNavigate } from "react-router"; +import { QueryContainer } from "../../../components"; +import { ScreenTopBar } from "../screen-title"; + +const CreateGame: React.FC = () => { + const listVariantsQuery = service.endpoints.listVariants.useQuery(undefined); + + const [createGameMutationTrigger, createGameQuery] = + service.endpoints.createGame.useMutation(); + + const dispatch = useDispatch(); + const navigate = useNavigate(); + + const formik = useFormik>({ + initialValues: { + Anonymous: false, + ChatLanguageISO639_1: "", + Desc: "", + DisableConferenceChat: false, + DisableGroupChat: false, + DisablePrivateChat: false, + FirstMember: { + NationPreferences: "", + }, + GameMasterEnabled: false, + LastYear: 0, + MaxHated: null, + MaxHater: 0, + MaxRating: 0, + MinQuickness: 0, + MinRating: 0, + MinReliability: 0, + NationAllocation: 0, + NonMovementPhaseLengthMinutes: 0, + PhaseLengthMinutes: 1440, + Private: false, + RequireGameMasterInvitation: false, + SkipMuster: true, + Variant: "Classical", + }, + validationSchema: toFormikValidationSchema(newGameSchema), + onSubmit: async (values) => { + try { + await createGameMutationTrigger({ + ...values, + }).unwrap(); + navigate("/"); + dispatch( + feedbackActions.setFeedback({ + severity: "success", + message: "Game created successfully", + }) + ); + } catch { + dispatch( + feedbackActions.setFeedback({ + severity: "error", + message: "Something went wrong", + }) + ); + } + }, + }); + + return ( + <> + +
{ + e.preventDefault(); + formik.handleSubmit(e); + }} + > + + {(data) => ( + + formik.setFieldValue("Desc", e.target.value)} + onBlur={formik.handleBlur} + error={formik.touched.Desc && Boolean(formik.errors.Desc)} + helperText={formik.touched.Desc && formik.errors.Desc} + disabled={createGameQuery.isLoading} + /> + + formik.setFieldValue("Variant", e.target.value) + } + onBlur={formik.handleBlur} + error={formik.touched.Variant && Boolean(formik.errors.Variant)} + helperText={formik.touched.Variant && formik.errors.Variant} + disabled={createGameQuery.isLoading} + > + {data.map((variant) => ( + + {variant.Name} + + ))} + + + } + label="Private" + /> + + + )} + +
+ + ); +}; + +export { CreateGame }; diff --git a/src/screens/home/create-game/index.ts b/src/screens/home/create-game/index.ts new file mode 100644 index 00000000..e7ae89b9 --- /dev/null +++ b/src/screens/home/create-game/index.ts @@ -0,0 +1 @@ +export * from "./create-game" \ No newline at end of file diff --git a/src/screens/home/create-game/use-create-game.ts b/src/screens/home/create-game/use-create-game.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/screens/home/find-games/find-games.tsx b/src/screens/home/find-games/find-games.tsx new file mode 100644 index 00000000..d5e8d629 --- /dev/null +++ b/src/screens/home/find-games/find-games.tsx @@ -0,0 +1,88 @@ +import React from "react"; +import { + Stack, + Typography, + IconButton, + Avatar, + Button, + Link, + ListItem, + ListItemAvatar, + ListItemText, + List, +} from "@mui/material"; +import { MoreHoriz as MenuIcon } from "@mui/icons-material"; +import { QueryContainer } from "../../../components"; +import { useFindGames } from "./use-find-games"; +import { ScreenTopBar } from "../screen-title"; + +const FindGames: React.FC = () => { + const query = useFindGames(); + + return ( + <> + + + + {(games) => + games.map((game) => ( + + + + } + > + + + + + {game.Desc} + + } + secondary={ + + + + {game.Variant} + + + {game.PhaseLengthMinutes} + + + + + } + /> + + )) + } + + + + ); +}; + +export { FindGames }; diff --git a/src/screens/home/find-games/index.ts b/src/screens/home/find-games/index.ts new file mode 100644 index 00000000..49052da3 --- /dev/null +++ b/src/screens/home/find-games/index.ts @@ -0,0 +1 @@ +export * from "./find-games" \ No newline at end of file diff --git a/src/screens/home/find-games/use-find-games.ts b/src/screens/home/find-games/use-find-games.ts new file mode 100644 index 00000000..63124944 --- /dev/null +++ b/src/screens/home/find-games/use-find-games.ts @@ -0,0 +1,18 @@ +import { mergeQueries, service } from "../../../common"; + +const options = { my: false, mastered: false }; + +const useFindGames = () => { + const { endpoints } = service + const listOpenGamesQuery = endpoints.listGames.useQuery( + { + ...options, + status: "Open", + }, + ); + return mergeQueries([listOpenGamesQuery], (games) => { + return games + }); +} + +export { useFindGames }; \ No newline at end of file diff --git a/src/screens/home/index.ts b/src/screens/home/index.ts new file mode 100644 index 00000000..e50caf31 --- /dev/null +++ b/src/screens/home/index.ts @@ -0,0 +1,5 @@ +export * from "./layout"; +export * from "./find-games" +export * from "./create-game" +export * from "./profile" +export * from "./my-games"; \ No newline at end of file diff --git a/src/screens/home/layout.tsx b/src/screens/home/layout.tsx new file mode 100644 index 00000000..c09a425d --- /dev/null +++ b/src/screens/home/layout.tsx @@ -0,0 +1,195 @@ +import React, { useState, useEffect } from "react"; +import { + AppBar, + BottomNavigation, + BottomNavigationAction, + useTheme, + useMediaQuery, + Grid2, + Stack, + Typography, + styled, + Box, +} from "@mui/material"; +import { Outlet, useLocation, useNavigate } from "react-router"; +import { + Home as MyGamesIcon, + Search as FindGamesIcon, + Add as CreateGameIcon, + Person as ProfileIcon, +} from "@mui/icons-material"; +import { DrawerNavigation, DrawerNavigationAction } from "../../components"; + +const NavigationItems = [ + { label: "My Games", icon: , value: "/" }, + { label: "Find Games", icon: , value: "/find-games" }, + { label: "Create Game", icon: , value: "/create-game" }, + { label: "Profile", icon: , value: "/profile" }, +] as const; + +const ScreenContainer = styled(Box)(({ theme }) => ({ + height: "100%", + border: `1px solid ${theme.palette.divider}`, + borderRadius: theme.shape.borderRadius, +})); + +const Layout: React.FC = () => { + const navigate = useNavigate(); + const location = useLocation(); + const theme = useTheme(); + const isMobile = useMediaQuery(theme.breakpoints.down("sm")); + const [navigation, setNavigation] = useState(location.pathname); + + useEffect(() => { + setNavigation(location.pathname); + }, [location.pathname]); + + const handleNavigationChange = (newValue: string) => { + setNavigation(newValue); + navigate(newValue); + }; + + return ( + <> + {isMobile ? ( + <> + + + handleNavigationChange(newValue)} + > + {NavigationItems.map((item) => ( + + ))} + + + + ) : ( + + + {/* Drawer navigation */} + + + {NavigationItems.map((item) => ( + + ))} + + + {/* Main content */} + + + + + + + + {/* About panel */} + + + + Welcome to Diplicity! + + + If you're new to the game, you can learn more about it{" "} + + here + + . + + + To chat with the developers or meet other players, join our{" "} + + Discord server + + . + + + We massively appreciate your support and feedback! If you have + any questions or suggestions, please let us know by sending an{" "} + + email + + . + + + + + + )} + + ); +}; + +export { Layout }; diff --git a/src/screens/home/my-games/index.ts b/src/screens/home/my-games/index.ts new file mode 100644 index 00000000..bb8289e0 --- /dev/null +++ b/src/screens/home/my-games/index.ts @@ -0,0 +1 @@ +export * from "./my-games" \ No newline at end of file diff --git a/src/screens/home/my-games/my-games.tsx b/src/screens/home/my-games/my-games.tsx new file mode 100644 index 00000000..e3af7582 --- /dev/null +++ b/src/screens/home/my-games/my-games.tsx @@ -0,0 +1,163 @@ +import React from "react"; +import { + Avatar, + Box, + Button, + IconButton, + Link, + List, + ListItem, + ListItemAvatar, + ListItemText, + Stack, + styled, + Tab, + Tabs, + Typography, +} from "@mui/material"; +import { + MoreHoriz as MenuIcon, + AddCircleOutline as StagingIcon, + PlayCircleOutline as StartedIcon, + StopCircleOutlined as FinishedIcon, + SportsMotorsports as DiplicityIcon, +} from "@mui/icons-material"; +import { useMyGames } from "./use-my-games"; +import { QueryContainer } from "../../../components"; + +const StyledTabs = styled((props: React.ComponentProps) => ( + }} + /> +))(({ theme }) => ({ + "& .MuiTabs-indicator": { + display: "flex", + justifyContent: "center", + backgroundColor: "transparent", + }, + "& .MuiTabs-indicatorSpan": { + maxWidth: 40, + width: "100%", + backgroundColor: theme.palette.primary.main, + }, +})); + +const statuses = [ + { value: "staging", label: "Staging", icon: }, + { value: "started", label: "Started", icon: }, + { value: "finished", label: "Finished", icon: }, +] as const; + +type Status = (typeof statuses)[number]["value"]; + +const MyGames: React.FC = () => { + const [selectedStatus, setSelectedStatus] = React.useState< + Status | undefined + >(undefined); + + const query = useMyGames(); + + const status = query.data + ? selectedStatus + ? selectedStatus + : query.data?.startedGames.length > 0 + ? "started" + : query.data?.stagingGames.length > 0 + ? "staging" + : "finished" + : undefined; + + return ( + + + + + + setSelectedStatus(value)} + variant="fullWidth" + sx={{ width: "100%" }} + > + {statuses.map((status) => ( + + ))} + + + + + + {(data) => { + const games = + status === "staging" + ? data.stagingGames + : status === "started" + ? data.startedGames + : data.finishedGames; + + return games.map((game) => ( + + + + } + > + + {game.Variant} + + + {game.Desc} + + } + secondary={ + + + {game.Variant} + + {game.PhaseLengthMinutes} + + + + + } + /> + + )); + }} + + + ); +}; + +export { MyGames }; diff --git a/src/screens/home/my-games/use-my-games.ts b/src/screens/home/my-games/use-my-games.ts new file mode 100644 index 00000000..ad833a9b --- /dev/null +++ b/src/screens/home/my-games/use-my-games.ts @@ -0,0 +1,36 @@ +import { mergeQueries, service } from "../../../common"; + +const options = { my: true, mastered: false }; + +const useMyGames = () => { + const { endpoints } = service + const listVariantsQuery = endpoints.listVariants.useQuery(undefined); + const listStagingGamesQuery = endpoints.listGames.useQuery( + { + ...options, + status: "Staging", + }, + ); + const listStartedGamesQuery = endpoints.listGames.useQuery({ + ...options, + status: "Started", + }); + const listFinishedGamesQuery = endpoints.listGames.useQuery({ + ...options, + status: "Finished", + }); + return mergeQueries([listVariantsQuery, listStagingGamesQuery, listStartedGamesQuery, listFinishedGamesQuery], (variants, stagingGames, startedGames, finishedGames) => { + const getMapSvgUrl = (game: typeof stagingGames[number]) => { + const variant = variants.find((variant) => variant.Name === game.Variant); + return variant?.Links?.find((link) => link.Rel === "map")?.URL + } + return { + getMapSvgUrl, + stagingGames, + startedGames, + finishedGames, + } + }); +} + +export { useMyGames }; \ No newline at end of file diff --git a/src/screens/home/profile/index.ts b/src/screens/home/profile/index.ts new file mode 100644 index 00000000..5300370a --- /dev/null +++ b/src/screens/home/profile/index.ts @@ -0,0 +1 @@ +export * from "./profile"; \ No newline at end of file diff --git a/src/screens/home/profile/profile.tsx b/src/screens/home/profile/profile.tsx new file mode 100644 index 00000000..8057936a --- /dev/null +++ b/src/screens/home/profile/profile.tsx @@ -0,0 +1,89 @@ +import React, { useState } from "react"; +import { + Avatar, + Card, + CardContent, + Grid2, + IconButton, + Menu, + MenuItem, + Stack, + Typography, +} from "@mui/material"; +import { MoreHoriz } from "@mui/icons-material"; +import { useProfile } from "./use-profile"; +import { QueryContainer } from "../../../components"; +import { AppDispatch } from "../../../common"; +import { useDispatch } from "react-redux"; +import { authActions } from "../../../common/store/auth"; +import { ScreenTopBar } from "../screen-title"; + +const Profile: React.FC = () => { + const query = useProfile(); + + const dispatch = useDispatch(); + + const [anchorEl, setAnchorEl] = useState(null); + const open = Boolean(anchorEl); + + const handleMenuClick = (event: React.MouseEvent) => { + setAnchorEl(event.currentTarget); + }; + + const handleMenuClose = () => { + setAnchorEl(null); + }; + + const withMenuClose = (fn: () => void) => { + return () => { + fn(); + handleMenuClose(); + }; + }; + + const onClickLogout = () => { + dispatch(authActions.logout()); + }; + + return ( + <> + + + {(data) => ( + + + + + + + + + + {data.Name} + + + + + + + + + Logout + + + + + + + + )} + + + ); +}; + +export { Profile }; diff --git a/src/screens/home/profile/use-profile.ts b/src/screens/home/profile/use-profile.ts new file mode 100644 index 00000000..c9b90c69 --- /dev/null +++ b/src/screens/home/profile/use-profile.ts @@ -0,0 +1,8 @@ +import { service } from "../../../common"; + +const useProfile = () => { + const rootQuery = service.endpoints.getRoot.useQuery(undefined); + return rootQuery; +} + +export { useProfile }; \ No newline at end of file diff --git a/src/screens/home/screen-title.tsx b/src/screens/home/screen-title.tsx new file mode 100644 index 00000000..8470b88d --- /dev/null +++ b/src/screens/home/screen-title.tsx @@ -0,0 +1,34 @@ +import { IconButton, Stack, Typography } from "@mui/material"; +import { KeyboardBackspace as BackIcon } from "@mui/icons-material"; +import { useNavigate } from "react-router"; + +type ScreenTopBarProps = { + title: string; +}; + +const ScreenTopBar: React.FC = ({ title }) => { + const navigate = useNavigate(); + + return ( + ({ borderBottom: `1px solid ${theme.palette.divider}` })} + > + navigate("/")} + sx={(theme) => ({ + padding: 0, + color: theme.palette.text.primary, + })} + > + + + {title} + + ); +}; + +export { ScreenTopBar }; diff --git a/src/screens/index.ts b/src/screens/index.ts new file mode 100644 index 00000000..32c3e8b8 --- /dev/null +++ b/src/screens/index.ts @@ -0,0 +1 @@ +export * from "./home" \ No newline at end of file diff --git a/src/theme.ts b/src/theme.ts index 286a86ba..f853c76d 100644 --- a/src/theme.ts +++ b/src/theme.ts @@ -3,9 +3,9 @@ import { createTheme } from "@mui/material"; const theme = createTheme({ typography: { h1: { - fontSize: "28px", - lineHeight: "34px", - fontWeight: 600, + fontSize: "18px", + lineHeight: "22px", + fontWeight: 800, marginBottom: "8px", }, h2: { From 677097032c1b0ccb50e58a2b2137189ea8a38355 Mon Sep 17 00:00:00 2001 From: John McDowell Date: Mon, 27 Jan 2025 15:57:29 +0000 Subject: [PATCH 10/69] Refactor game-related hooks and components; remove unused files and consolidate logic in useFindGames and useMyGames --- src/common/store/index.ts | 2 + .../home/{create-game => }/create-game.tsx | 113 ++++++++---------- src/screens/home/create-game/index.ts | 1 - .../home/create-game/use-create-game.ts | 0 .../home/{find-games => }/find-games.tsx | 19 ++- src/screens/home/find-games/index.ts | 1 - src/screens/home/find-games/use-find-games.ts | 18 --- src/screens/home/{my-games => }/my-games.tsx | 50 +++++++- src/screens/home/my-games/index.ts | 1 - src/screens/home/my-games/use-my-games.ts | 36 ------ src/screens/home/{profile => }/profile.tsx | 27 +++-- src/screens/home/profile/index.ts | 1 - src/screens/home/profile/use-profile.ts | 8 -- .../{screen-title.tsx => screen-top-bar.tsx} | 0 14 files changed, 129 insertions(+), 148 deletions(-) rename src/screens/home/{create-game => }/create-game.tsx (59%) delete mode 100644 src/screens/home/create-game/index.ts delete mode 100644 src/screens/home/create-game/use-create-game.ts rename src/screens/home/{find-games => }/find-games.tsx (86%) delete mode 100644 src/screens/home/find-games/index.ts delete mode 100644 src/screens/home/find-games/use-find-games.ts rename src/screens/home/{my-games => }/my-games.tsx (78%) delete mode 100644 src/screens/home/my-games/index.ts delete mode 100644 src/screens/home/my-games/use-my-games.ts rename src/screens/home/{profile => }/profile.tsx (80%) delete mode 100644 src/screens/home/profile/index.ts delete mode 100644 src/screens/home/profile/use-profile.ts rename src/screens/home/{screen-title.tsx => screen-top-bar.tsx} (100%) diff --git a/src/common/store/index.ts b/src/common/store/index.ts index eeedb81e..25f6b09d 100644 --- a/src/common/store/index.ts +++ b/src/common/store/index.ts @@ -1,3 +1,4 @@ +import { authActions } from "./auth"; import { feedbackActions } from "./feedback"; export { selectFeedback } from "./feedback"; export * from "./store"; @@ -6,4 +7,5 @@ export * as Service from "./service.types"; export const actions = { ...feedbackActions, + ...authActions }; \ No newline at end of file diff --git a/src/screens/home/create-game/create-game.tsx b/src/screens/home/create-game.tsx similarity index 59% rename from src/screens/home/create-game/create-game.tsx rename to src/screens/home/create-game.tsx index 8355260c..f5f30fe4 100644 --- a/src/screens/home/create-game/create-game.tsx +++ b/src/screens/home/create-game.tsx @@ -9,72 +9,63 @@ import { Button, } from "@mui/material"; import { toFormikValidationSchema } from "zod-formik-adapter"; -import service, { newGameSchema } from "../../../common/store/service"; -import { feedbackActions } from "../../../common/store/feedback"; +import service, { newGameSchema } from "../../common/store/service"; import { z } from "zod"; -import { useDispatch } from "react-redux"; import { useNavigate } from "react-router"; -import { QueryContainer } from "../../../components"; -import { ScreenTopBar } from "../screen-title"; +import { QueryContainer } from "../../components"; +import { ScreenTopBar } from "./screen-top-bar"; -const CreateGame: React.FC = () => { - const listVariantsQuery = service.endpoints.listVariants.useQuery(undefined); +const initialValues = { + Anonymous: false, + ChatLanguageISO639_1: "", + Desc: "", + DisableConferenceChat: false, + DisableGroupChat: false, + DisablePrivateChat: false, + FirstMember: { + NationPreferences: "", + }, + GameMasterEnabled: false, + LastYear: 0, + MaxHated: null, + MaxHater: 0, + MaxRating: 0, + MinQuickness: 0, + MinRating: 0, + MinReliability: 0, + NationAllocation: 0, + NonMovementPhaseLengthMinutes: 0, + PhaseLengthMinutes: 1440, + Private: false, + RequireGameMasterInvitation: false, + SkipMuster: true, + Variant: "Classical", +}; +const useCreateGame = () => { + const navigate = useNavigate(); + + const query = service.endpoints.listVariants.useQuery(undefined); const [createGameMutationTrigger, createGameQuery] = service.endpoints.createGame.useMutation(); - const dispatch = useDispatch(); - const navigate = useNavigate(); + const handleSubmit = async (values: z.infer) => { + await createGameMutationTrigger({ + ...values, + }).unwrap(); + navigate("/"); + }; + + return { query, handleSubmit, isSubmitting: createGameQuery.isLoading }; +}; + +const CreateGame: React.FC = () => { + const { query, handleSubmit, isSubmitting } = useCreateGame(); const formik = useFormik>({ - initialValues: { - Anonymous: false, - ChatLanguageISO639_1: "", - Desc: "", - DisableConferenceChat: false, - DisableGroupChat: false, - DisablePrivateChat: false, - FirstMember: { - NationPreferences: "", - }, - GameMasterEnabled: false, - LastYear: 0, - MaxHated: null, - MaxHater: 0, - MaxRating: 0, - MinQuickness: 0, - MinRating: 0, - MinReliability: 0, - NationAllocation: 0, - NonMovementPhaseLengthMinutes: 0, - PhaseLengthMinutes: 1440, - Private: false, - RequireGameMasterInvitation: false, - SkipMuster: true, - Variant: "Classical", - }, + initialValues, validationSchema: toFormikValidationSchema(newGameSchema), - onSubmit: async (values) => { - try { - await createGameMutationTrigger({ - ...values, - }).unwrap(); - navigate("/"); - dispatch( - feedbackActions.setFeedback({ - severity: "success", - message: "Game created successfully", - }) - ); - } catch { - dispatch( - feedbackActions.setFeedback({ - severity: "error", - message: "Something went wrong", - }) - ); - } - }, + onSubmit: handleSubmit, }); return ( @@ -86,7 +77,7 @@ const CreateGame: React.FC = () => { formik.handleSubmit(e); }} > - + {(data) => ( { onBlur={formik.handleBlur} error={formik.touched.Desc && Boolean(formik.errors.Desc)} helperText={formik.touched.Desc && formik.errors.Desc} - disabled={createGameQuery.isLoading} + disabled={isSubmitting} /> { onBlur={formik.handleBlur} error={formik.touched.Variant && Boolean(formik.errors.Variant)} helperText={formik.touched.Variant && formik.errors.Variant} - disabled={createGameQuery.isLoading} + disabled={isSubmitting} > {data.map((variant) => ( @@ -127,7 +118,7 @@ const CreateGame: React.FC = () => { checked={formik.values.Private} onChange={formik.handleChange} onBlur={formik.handleBlur} - disabled={createGameQuery.isLoading} + disabled={isSubmitting} /> } label="Private" @@ -136,7 +127,7 @@ const CreateGame: React.FC = () => { variant="contained" color="primary" type="submit" - disabled={createGameQuery.isLoading} + disabled={isSubmitting} > Create diff --git a/src/screens/home/create-game/index.ts b/src/screens/home/create-game/index.ts deleted file mode 100644 index e7ae89b9..00000000 --- a/src/screens/home/create-game/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./create-game" \ No newline at end of file diff --git a/src/screens/home/create-game/use-create-game.ts b/src/screens/home/create-game/use-create-game.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/src/screens/home/find-games/find-games.tsx b/src/screens/home/find-games.tsx similarity index 86% rename from src/screens/home/find-games/find-games.tsx rename to src/screens/home/find-games.tsx index d5e8d629..06957ee9 100644 --- a/src/screens/home/find-games/find-games.tsx +++ b/src/screens/home/find-games.tsx @@ -12,12 +12,23 @@ import { List, } from "@mui/material"; import { MoreHoriz as MenuIcon } from "@mui/icons-material"; -import { QueryContainer } from "../../../components"; -import { useFindGames } from "./use-find-games"; -import { ScreenTopBar } from "../screen-title"; +import { QueryContainer } from "../../components"; +import { ScreenTopBar } from "./screen-top-bar"; +import { service } from "../../common"; + +const options = { my: false, mastered: false }; + +const useFindGames = () => { + const { endpoints } = service; + const query = endpoints.listGames.useQuery({ + ...options, + status: "Open", + }); + return { query }; +}; const FindGames: React.FC = () => { - const query = useFindGames(); + const { query } = useFindGames(); return ( <> diff --git a/src/screens/home/find-games/index.ts b/src/screens/home/find-games/index.ts deleted file mode 100644 index 49052da3..00000000 --- a/src/screens/home/find-games/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./find-games" \ No newline at end of file diff --git a/src/screens/home/find-games/use-find-games.ts b/src/screens/home/find-games/use-find-games.ts deleted file mode 100644 index 63124944..00000000 --- a/src/screens/home/find-games/use-find-games.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { mergeQueries, service } from "../../../common"; - -const options = { my: false, mastered: false }; - -const useFindGames = () => { - const { endpoints } = service - const listOpenGamesQuery = endpoints.listGames.useQuery( - { - ...options, - status: "Open", - }, - ); - return mergeQueries([listOpenGamesQuery], (games) => { - return games - }); -} - -export { useFindGames }; \ No newline at end of file diff --git a/src/screens/home/my-games/my-games.tsx b/src/screens/home/my-games.tsx similarity index 78% rename from src/screens/home/my-games/my-games.tsx rename to src/screens/home/my-games.tsx index e3af7582..24cacca5 100644 --- a/src/screens/home/my-games/my-games.tsx +++ b/src/screens/home/my-games.tsx @@ -22,8 +22,51 @@ import { StopCircleOutlined as FinishedIcon, SportsMotorsports as DiplicityIcon, } from "@mui/icons-material"; -import { useMyGames } from "./use-my-games"; -import { QueryContainer } from "../../../components"; +import { QueryContainer } from "../../components"; + +import { mergeQueries, service } from "../../common"; + +const options = { my: true, mastered: false }; + +const useMyGames = () => { + const { endpoints } = service; + const listVariantsQuery = endpoints.listVariants.useQuery(undefined); + const listStagingGamesQuery = endpoints.listGames.useQuery({ + ...options, + status: "Staging", + }); + const listStartedGamesQuery = endpoints.listGames.useQuery({ + ...options, + status: "Started", + }); + const listFinishedGamesQuery = endpoints.listGames.useQuery({ + ...options, + status: "Finished", + }); + const query = mergeQueries( + [ + listVariantsQuery, + listStagingGamesQuery, + listStartedGamesQuery, + listFinishedGamesQuery, + ], + (variants, stagingGames, startedGames, finishedGames) => { + const getMapSvgUrl = (game: (typeof stagingGames)[number]) => { + const variant = variants.find( + (variant) => variant.Name === game.Variant + ); + return variant?.Links?.find((link) => link.Rel === "map")?.URL; + }; + return { + getMapSvgUrl, + stagingGames, + startedGames, + finishedGames, + }; + } + ); + return { query }; +}; const StyledTabs = styled((props: React.ComponentProps) => ( { + const { query } = useMyGames(); const [selectedStatus, setSelectedStatus] = React.useState< Status | undefined >(undefined); - const query = useMyGames(); - const status = query.data ? selectedStatus ? selectedStatus diff --git a/src/screens/home/my-games/index.ts b/src/screens/home/my-games/index.ts deleted file mode 100644 index bb8289e0..00000000 --- a/src/screens/home/my-games/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./my-games" \ No newline at end of file diff --git a/src/screens/home/my-games/use-my-games.ts b/src/screens/home/my-games/use-my-games.ts deleted file mode 100644 index ad833a9b..00000000 --- a/src/screens/home/my-games/use-my-games.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { mergeQueries, service } from "../../../common"; - -const options = { my: true, mastered: false }; - -const useMyGames = () => { - const { endpoints } = service - const listVariantsQuery = endpoints.listVariants.useQuery(undefined); - const listStagingGamesQuery = endpoints.listGames.useQuery( - { - ...options, - status: "Staging", - }, - ); - const listStartedGamesQuery = endpoints.listGames.useQuery({ - ...options, - status: "Started", - }); - const listFinishedGamesQuery = endpoints.listGames.useQuery({ - ...options, - status: "Finished", - }); - return mergeQueries([listVariantsQuery, listStagingGamesQuery, listStartedGamesQuery, listFinishedGamesQuery], (variants, stagingGames, startedGames, finishedGames) => { - const getMapSvgUrl = (game: typeof stagingGames[number]) => { - const variant = variants.find((variant) => variant.Name === game.Variant); - return variant?.Links?.find((link) => link.Rel === "map")?.URL - } - return { - getMapSvgUrl, - stagingGames, - startedGames, - finishedGames, - } - }); -} - -export { useMyGames }; \ No newline at end of file diff --git a/src/screens/home/profile/profile.tsx b/src/screens/home/profile.tsx similarity index 80% rename from src/screens/home/profile/profile.tsx rename to src/screens/home/profile.tsx index 8057936a..3cd7294b 100644 --- a/src/screens/home/profile/profile.tsx +++ b/src/screens/home/profile.tsx @@ -11,19 +11,24 @@ import { Typography, } from "@mui/material"; import { MoreHoriz } from "@mui/icons-material"; -import { useProfile } from "./use-profile"; -import { QueryContainer } from "../../../components"; -import { AppDispatch } from "../../../common"; +import { QueryContainer } from "../../components"; +import { actions, AppDispatch, service } from "../../common"; import { useDispatch } from "react-redux"; -import { authActions } from "../../../common/store/auth"; -import { ScreenTopBar } from "../screen-title"; - -const Profile: React.FC = () => { - const query = useProfile(); +import { ScreenTopBar } from "./screen-top-bar"; +const useProfile = () => { const dispatch = useDispatch(); + const query = service.endpoints.getRoot.useQuery(undefined); + const handleLogout = () => { + dispatch(actions.logout()); + }; + return { query, handleLogout }; +}; +const Profile: React.FC = () => { + const { query, handleLogout } = useProfile(); const [anchorEl, setAnchorEl] = useState(null); + const open = Boolean(anchorEl); const handleMenuClick = (event: React.MouseEvent) => { @@ -41,10 +46,6 @@ const Profile: React.FC = () => { }; }; - const onClickLogout = () => { - dispatch(authActions.logout()); - }; - return ( <> @@ -71,7 +72,7 @@ const Profile: React.FC = () => { open={open} onClose={handleMenuClose} > - + Logout diff --git a/src/screens/home/profile/index.ts b/src/screens/home/profile/index.ts deleted file mode 100644 index 5300370a..00000000 --- a/src/screens/home/profile/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./profile"; \ No newline at end of file diff --git a/src/screens/home/profile/use-profile.ts b/src/screens/home/profile/use-profile.ts deleted file mode 100644 index c9b90c69..00000000 --- a/src/screens/home/profile/use-profile.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { service } from "../../../common"; - -const useProfile = () => { - const rootQuery = service.endpoints.getRoot.useQuery(undefined); - return rootQuery; -} - -export { useProfile }; \ No newline at end of file diff --git a/src/screens/home/screen-title.tsx b/src/screens/home/screen-top-bar.tsx similarity index 100% rename from src/screens/home/screen-title.tsx rename to src/screens/home/screen-top-bar.tsx From 43f9e3633119a87a9d48a5ed512d0649390dbcc8 Mon Sep 17 00:00:00 2001 From: John McDowell Date: Mon, 27 Jan 2025 20:42:25 +0000 Subject: [PATCH 11/69] wip --- public/otto.png | Bin 0 -> 220229 bytes .../drawer-navigation/drawer-navigation.tsx | 36 ++- src/global.d.ts | 5 + src/screens/home/layout.tsx | 188 ++++++------- src/screens/home/my-games.tsx | 265 ++++++++++-------- src/screens/home/profile.tsx | 59 ++-- src/screens/home/screen-top-bar.tsx | 20 +- src/theme.ts | 9 + 8 files changed, 299 insertions(+), 283 deletions(-) create mode 100644 public/otto.png create mode 100644 src/global.d.ts diff --git a/public/otto.png b/public/otto.png new file mode 100644 index 0000000000000000000000000000000000000000..7cb5ff2e2290f9746beaab6d2d2d33259a06d146 GIT binary patch literal 220229 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 literal 0 HcmV?d00001 diff --git a/src/components/drawer-navigation/drawer-navigation.tsx b/src/components/drawer-navigation/drawer-navigation.tsx index 792c9028..c3c0af84 100644 --- a/src/components/drawer-navigation/drawer-navigation.tsx +++ b/src/components/drawer-navigation/drawer-navigation.tsx @@ -6,15 +6,15 @@ import { ListItemButton, ListItemIcon, ListItemText, + Stack, useTheme, } from "@mui/material"; -const drawerWidth = 240; - const DrawerNavigationContext = React.createContext< | { value: string; onChange: (newValue: string) => void; + variant: "expanded" | "collapsed"; } | undefined >(undefined); @@ -22,9 +22,11 @@ const DrawerNavigationContext = React.createContext< type DrawerNavigationProps = React.PropsWithChildren<{ value: string; onChange: (newValue: string) => void; + variant: "expanded" | "collapsed"; }>; const DrawerNavigation: React.FC = (props) => { + const drawerWidth = props.variant === "expanded" ? 240 : 56; return ( = (props) => { width: drawerWidth, flexShrink: 0, "& .MuiDrawer-paper": { - position: "relative", + position: props.variant === "expanded" ? "relative" : "fixed", width: drawerWidth, boxSizing: "border-box", border: "none", @@ -43,6 +45,7 @@ const DrawerNavigation: React.FC = (props) => { value={{ value: props.value, onChange: props.onChange, + variant: props.variant, }} > {props.children} @@ -83,17 +86,22 @@ const DrawerNavigationAction: React.FC = ( return ( context.onChange(props.value)}> - - {React.cloneElement(props.icon, { - style: selected ? selectedItemIconStyle : {}, - })} - - + + + {React.cloneElement(props.icon, { + style: selected ? selectedItemIconStyle : {}, + })} + + {context.variant === "expanded" && ( + + )} + ); diff --git a/src/global.d.ts b/src/global.d.ts new file mode 100644 index 00000000..9e9240a8 --- /dev/null +++ b/src/global.d.ts @@ -0,0 +1,5 @@ +import { SxProps, Theme } from "@mui/material"; + +declare global { + type Styles = Record>; +} \ No newline at end of file diff --git a/src/screens/home/layout.tsx b/src/screens/home/layout.tsx index c09a425d..749c69d2 100644 --- a/src/screens/home/layout.tsx +++ b/src/screens/home/layout.tsx @@ -8,8 +8,7 @@ import { Grid2, Stack, Typography, - styled, - Box, + Link, } from "@mui/material"; import { Outlet, useLocation, useNavigate } from "react-router"; import { @@ -20,6 +19,49 @@ import { } from "@mui/icons-material"; import { DrawerNavigation, DrawerNavigationAction } from "../../components"; +const styles: Styles = { + mobileAppBar: { + top: "auto", + bottom: 0, + }, + drawerNavigationContainer: { + position: "sticky", + top: 0, + alignSelf: "flex-start", + overflow: "auto", + }, + largeRoot: { + alignItems: "center", + }, + largeContentContainer: { + display: "flex", + justifyContent: "center", + flexGrow: 1, + maxWidth: 1000, + width: "100%", + }, + contentContainer: (theme) => ({ + width: "100%", + maxWidth: 600, + minHeight: "100vh", + height: "100%", + border: `1px solid ${theme.palette.divider}`, + }), + infoContainer: { + width: 240, + position: "sticky", + padding: 2, + top: 0, + alignSelf: "flex-start", + height: "100vh", + overflow: "auto", + gap: 1, + }, + infoTitle: { + fontWeight: 600, + }, +}; + const NavigationItems = [ { label: "My Games", icon: , value: "/" }, { label: "Find Games", icon: , value: "/find-games" }, @@ -27,17 +69,41 @@ const NavigationItems = [ { label: "Profile", icon: , value: "/profile" }, ] as const; -const ScreenContainer = styled(Box)(({ theme }) => ({ - height: "100%", - border: `1px solid ${theme.palette.divider}`, - borderRadius: theme.shape.borderRadius, -})); +const InfoPanel: React.FC = () => { + const learnLink = + "https://diplicity.notion.site/Diplicity-FAQ-7b4e0a119eb54c69b80b411f14d43bb9"; + const discordLink = + "https://discord.com/channels/565625522407604254/697344626859704340"; + + return ( + + + Welcome to Diplicity! + + + If you're new to the game, read our{" "} + + FAQ + + . + + + To chat with the developers or meet other players, join our{" "} + + Discord community + + . + + + ); +}; const Layout: React.FC = () => { const navigate = useNavigate(); const location = useLocation(); const theme = useTheme(); const isMobile = useMediaQuery(theme.breakpoints.down("sm")); + const isDesktop = useMediaQuery(theme.breakpoints.up("md")); const [navigation, setNavigation] = useState(location.pathname); useEffect(() => { @@ -54,11 +120,7 @@ const Layout: React.FC = () => { {isMobile ? ( <> - + handleNavigationChange(newValue)} @@ -75,24 +137,11 @@ const Layout: React.FC = () => { ) : ( - - - {/* Drawer navigation */} - + + + @@ -106,85 +155,14 @@ const Layout: React.FC = () => { ))} - {/* Main content */} - - - + + + - - - - {/* About panel */} - - - - Welcome to Diplicity! - - - If you're new to the game, you can learn more about it{" "} - - here - - . - - - To chat with the developers or meet other players, join our{" "} - - Discord server - - . - - - We massively appreciate your support and feedback! If you have - any questions or suggestions, please let us know by sending an{" "} - - email - - . - + + {isDesktop && } )} diff --git a/src/screens/home/my-games.tsx b/src/screens/home/my-games.tsx index 24cacca5..0490e29e 100644 --- a/src/screens/home/my-games.tsx +++ b/src/screens/home/my-games.tsx @@ -1,7 +1,6 @@ import React from "react"; import { Avatar, - Box, Button, IconButton, Link, @@ -10,7 +9,6 @@ import { ListItemAvatar, ListItemText, Stack, - styled, Tab, Tabs, Typography, @@ -20,17 +18,56 @@ import { AddCircleOutline as StagingIcon, PlayCircleOutline as StartedIcon, StopCircleOutlined as FinishedIcon, - SportsMotorsports as DiplicityIcon, } from "@mui/icons-material"; import { QueryContainer } from "../../components"; - import { mergeQueries, service } from "../../common"; -const options = { my: true, mastered: false }; +const styles: Styles = { + header: (theme) => ({ + borderBottom: `1px solid ${theme.palette.divider}`, + alignItems: "center", + }), + headerIcon: { + fontSize: 48, + }, + listItem: (theme) => ({ + gap: 1, + borderBottom: `1px solid ${theme.palette.divider}`, + alignItems: "center", + }), + mapContainer: { + display: "flex", + width: 80, + }, + map: { + borderRadius: 2, + }, + secondaryContainer: { + gap: 1, + }, + rulesContainer: { + gap: 1, + flexDirection: "row", + }, + avatarStackButton: { + justifyContent: "flex-start", + width: "fit-content", + }, + avatarStackContainer: { + alignItems: "center", + }, + avatar: { + width: 24, + height: 24, + }, + noGamesText: { + textAlign: "center", + }, +}; const useMyGames = () => { + const options = { my: true, mastered: false }; const { endpoints } = service; - const listVariantsQuery = endpoints.listVariants.useQuery(undefined); const listStagingGamesQuery = endpoints.listGames.useQuery({ ...options, status: "Staging", @@ -44,21 +81,9 @@ const useMyGames = () => { status: "Finished", }); const query = mergeQueries( - [ - listVariantsQuery, - listStagingGamesQuery, - listStartedGamesQuery, - listFinishedGamesQuery, - ], - (variants, stagingGames, startedGames, finishedGames) => { - const getMapSvgUrl = (game: (typeof stagingGames)[number]) => { - const variant = variants.find( - (variant) => variant.Name === game.Variant - ); - return variant?.Links?.find((link) => link.Rel === "map")?.URL; - }; + [listStagingGamesQuery, listStartedGamesQuery, listFinishedGamesQuery], + (stagingGames, startedGames, finishedGames) => { return { - getMapSvgUrl, stagingGames, startedGames, finishedGames, @@ -68,24 +93,6 @@ const useMyGames = () => { return { query }; }; -const StyledTabs = styled((props: React.ComponentProps) => ( - }} - /> -))(({ theme }) => ({ - "& .MuiTabs-indicator": { - display: "flex", - justifyContent: "center", - backgroundColor: "transparent", - }, - "& .MuiTabs-indicatorSpan": { - maxWidth: 40, - width: "100%", - backgroundColor: theme.palette.primary.main, - }, -})); - const statuses = [ { value: "staging", label: "Staging", icon: }, { value: "started", label: "Started", icon: }, @@ -111,94 +118,106 @@ const MyGames: React.FC = () => { : undefined; return ( - - - - - - setSelectedStatus(value)} - variant="fullWidth" - sx={{ width: "100%" }} - > - {statuses.map((status) => ( - - ))} - - - - - - {(data) => { - const games = - status === "staging" - ? data.stagingGames - : status === "started" - ? data.startedGames - : data.finishedGames; + + + Diplicity + setSelectedStatus(value)} + variant="fullWidth" + sx={styles.tabs} + > + {statuses.map((status) => ( + + ))} + + + + + {(data) => { + const games = + status === "staging" + ? data.stagingGames + : status === "started" + ? data.startedGames + : data.finishedGames; - return games.map((game) => ( - - - - } - > - - {game.Variant} - - - {game.Desc} - + if (games.length === 0) { + return ( + + + You are not a member of any {status} games. + + + Go to "Find games" to join a game or click "Create game" to + start a new game. + + + Join our Discord server to find other players to play with. + + + ); + } + + return games.map((game) => ( + + + } - secondary={ - - - {game.Variant} - - {game.PhaseLengthMinutes} - - - - - } - /> - - )); - }} - - + + + } + /> + + )); + }} + + + ); }; diff --git a/src/screens/home/profile.tsx b/src/screens/home/profile.tsx index 3cd7294b..ab38a26c 100644 --- a/src/screens/home/profile.tsx +++ b/src/screens/home/profile.tsx @@ -1,13 +1,10 @@ import React, { useState } from "react"; import { Avatar, - Card, - CardContent, Grid2, IconButton, Menu, MenuItem, - Stack, Typography, } from "@mui/material"; import { MoreHoriz } from "@mui/icons-material"; @@ -16,6 +13,14 @@ import { actions, AppDispatch, service } from "../../common"; import { useDispatch } from "react-redux"; import { ScreenTopBar } from "./screen-top-bar"; +const styles: Styles = { + root: { + gap: 2, + p: 2, + alignItems: "center", + }, +}; + const useProfile = () => { const dispatch = useDispatch(); const query = service.endpoints.getRoot.useQuery(undefined); @@ -51,36 +56,24 @@ const Profile: React.FC = () => { {(data) => ( - - - - - - - - - - {data.Name} - - - - - - -

- - Logout - - - - -
- - + + + + + + {data.Name} + + + + + + + + Logout + + + + )}
diff --git a/src/screens/home/screen-top-bar.tsx b/src/screens/home/screen-top-bar.tsx index 8470b88d..1daa007f 100644 --- a/src/screens/home/screen-top-bar.tsx +++ b/src/screens/home/screen-top-bar.tsx @@ -6,6 +6,16 @@ type ScreenTopBarProps = { title: string; }; +const styles: Styles = { + root: (theme) => ({ + borderBottom: `1px solid ${theme.palette.divider}`, + }), + iconButton: (theme) => ({ + padding: 0, + color: theme.palette.text.primary, + }), +}; + const ScreenTopBar: React.FC = ({ title }) => { const navigate = useNavigate(); @@ -15,15 +25,9 @@ const ScreenTopBar: React.FC = ({ title }) => { direction="row" alignItems="center" padding={2} - sx={(theme) => ({ borderBottom: `1px solid ${theme.palette.divider}` })} + sx={styles.root} > - navigate("/")} - sx={(theme) => ({ - padding: 0, - color: theme.palette.text.primary, - })} - > + navigate("/")} sx={styles.iconButton}> {title} diff --git a/src/theme.ts b/src/theme.ts index f853c76d..279549b7 100644 --- a/src/theme.ts +++ b/src/theme.ts @@ -36,6 +36,15 @@ const theme = createTheme({ main: "#FDE2B5", }, }, + components: { + MuiTypography: { + styleOverrides: { + root: { + textAlign: "left", + }, + }, + }, + } }); export default theme; \ No newline at end of file From fc3b4518e26213ab32dda3cd00e0171331529665 Mon Sep 17 00:00:00 2001 From: John McDowell Date: Mon, 27 Jan 2025 20:43:39 +0000 Subject: [PATCH 12/69] Add styles for tabs in My Games screen to ensure full-width display --- src/screens/home/my-games.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/screens/home/my-games.tsx b/src/screens/home/my-games.tsx index 0490e29e..0dd13cb8 100644 --- a/src/screens/home/my-games.tsx +++ b/src/screens/home/my-games.tsx @@ -63,6 +63,9 @@ const styles: Styles = { noGamesText: { textAlign: "center", }, + tabs: { + width: "100%", + }, }; const useMyGames = () => { From 15a31785acd259e3a47af7ffd663fe9ad3516e69 Mon Sep 17 00:00:00 2001 From: John McDowell Date: Mon, 27 Jan 2025 20:51:42 +0000 Subject: [PATCH 13/69] Refactor Login screen layout; replace Card with Stack for improved structure and add logo image; update My Games image size --- src/screens/Login.tsx | 36 ++++++++++++++++++++++------------- src/screens/home/my-games.tsx | 2 +- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/src/screens/Login.tsx b/src/screens/Login.tsx index 3495c8d7..ea807627 100644 --- a/src/screens/Login.tsx +++ b/src/screens/Login.tsx @@ -1,5 +1,12 @@ import React from "react"; -import { Button, Card, CardContent, Typography, Box } from "@mui/material"; +import { + Button, + Card, + CardContent, + Typography, + Box, + Stack, +} from "@mui/material"; const getLoginUrl = (): string => { const redirectUrl = location.href; @@ -25,18 +32,21 @@ const Login: React.FC = () => { height="100vh" bgcolor="#f5f5f5" > - - - - Welcome to Diplicity! - - - - - - + + Diplicity Logo + + Welcome to Diplicity! + + + + + ); }; diff --git a/src/screens/home/my-games.tsx b/src/screens/home/my-games.tsx index 0dd13cb8..d1884454 100644 --- a/src/screens/home/my-games.tsx +++ b/src/screens/home/my-games.tsx @@ -126,7 +126,7 @@ const MyGames: React.FC = () => { Diplicity Date: Tue, 28 Jan 2025 11:30:26 +0000 Subject: [PATCH 14/69] Implement player info and game info --- src/Router.tsx | 44 ++---- src/common/hooks/useGetVariantQuery.ts | 1 + src/screens/Login.tsx | 9 +- src/screens/home/game-info.tsx | 199 +++++++++++++++++++++++++ src/screens/home/index.ts | 4 +- src/screens/home/my-games.tsx | 80 +++++++++- src/screens/home/player-info.tsx | 47 ++++++ 7 files changed, 343 insertions(+), 41 deletions(-) create mode 100644 src/screens/home/game-info.tsx create mode 100644 src/screens/home/player-info.tsx diff --git a/src/Router.tsx b/src/Router.tsx index 632e5309..19209f3d 100644 --- a/src/Router.tsx +++ b/src/Router.tsx @@ -1,5 +1,5 @@ import React from "react"; -import { Navigate, Outlet, Route, Routes, useNavigate } from "react-router"; +import { Navigate, Route, Routes, useNavigate } from "react-router"; import Login from "./screens/Login"; import { useSelector } from "react-redux"; import { selectAuth } from "./common/store/auth"; @@ -7,17 +7,15 @@ import { Map } from "./components/Map"; import { GameDetailsLayout } from "./components/GameDetailsLayout"; import { GameDetailsNavigation } from "./components/GameDetailsNavigation"; import { Orders } from "./components/orders"; -import { CreateOrder } from "./components/CreateOrder"; -import { Modal } from "./components/Modal"; import { CreateOrderAction } from "./components/CreateOrderAction"; import { ConfirmOrdersAction } from "./components/ConfirmOrdersAction"; -import { PlayerInfo } from "./components/PlayerInfo"; -import { GameInfo } from "./components/GameInfo"; import { CreateGame, FindGames, + GameInfo, Layout as HomeLayout, MyGames, + PlayerInfo, Profile, } from "./screens"; @@ -33,13 +31,13 @@ const Router: React.FC = () => { return loggedIn ? ( - }> - }> - } /> - } /> - } /> - } /> - + }> + } /> + } /> + } /> + } /> + } /> + } /> { onClickCreateOrder={onClickCreateOrder} navigation={} actions={[, ]} - modals={[ - {() => }, - ]} + modals={ + [ + // {() => }, + ] + } /> } > @@ -69,18 +69,4 @@ const Router: React.FC = () => { ); }; -const HomeModals: React.FC = () => { - return ( - <> - - - {({ value }) => } - - - {({ value }) => } - - - ); -}; - export default Router; diff --git a/src/common/hooks/useGetVariantQuery.ts b/src/common/hooks/useGetVariantQuery.ts index a5d696c0..bcc4e18c 100644 --- a/src/common/hooks/useGetVariantQuery.ts +++ b/src/common/hooks/useGetVariantQuery.ts @@ -8,6 +8,7 @@ const useGetVariantQuery = (gameId: string) => { const getGameQuery = endpoints.getGame.useQuery(gameId); const mergedQuery = mergeQueries([listVariantsQuery, getGameQuery], (variants, game) => { + console.log(variants, game); const variant = variants.find((variant) => variant.Name === game.Variant); if (!variant) throw new Error("Variant not found"); return variant; diff --git a/src/screens/Login.tsx b/src/screens/Login.tsx index ea807627..474b76c8 100644 --- a/src/screens/Login.tsx +++ b/src/screens/Login.tsx @@ -1,12 +1,5 @@ import React from "react"; -import { - Button, - Card, - CardContent, - Typography, - Box, - Stack, -} from "@mui/material"; +import { Button, Typography, Box, Stack } from "@mui/material"; const getLoginUrl = (): string => { const redirectUrl = location.href; diff --git a/src/screens/home/game-info.tsx b/src/screens/home/game-info.tsx new file mode 100644 index 00000000..2cf64228 --- /dev/null +++ b/src/screens/home/game-info.tsx @@ -0,0 +1,199 @@ +import React from "react"; +import { + Avatar, + Button, + Divider, + List, + ListItem, + ListItemIcon, + ListItemText, + ListSubheader, + Stack, +} from "@mui/material"; +import { + Map as VariantIcon, + TimerOutlined as DeadlinesIcon, + Language as LanguageIcon, + People as PlayersIcon, + Flag as WinConditionIcon, + CalendarToday as StartYearIcon, + Person as AuthorIcon, +} from "@mui/icons-material"; +import { QueryContainer } from "../../components"; +import { mergeQueries, service, useGetVariantQuery } from "../../common"; +import { ScreenTopBar } from "./screen-top-bar"; +import { useParams } from "react-router"; + +const styles: Styles = { + listSubheader: (theme) => ({ + textAlign: "left", + color: theme.palette.text.primary, + }), + listItemIcon: (theme) => ({ + color: theme.palette.text.primary, + minWidth: "fit-content", + padding: 1, + }), + listItemPrimaryText: (theme) => ({ + color: theme.palette.text.primary, + }), + listItemSecondaryText: (theme) => ({ + color: theme.palette.text.secondary, + paddingRight: 1, + "& .MuiListItemText-primary": { + textAlign: "right", + }, + }), + avatarStackButton: { + justifyContent: "flex-start", + width: "fit-content", + }, + avatarStackContainer: { + alignItems: "center", + }, + avatar: { + width: 24, + height: 24, + }, +}; + +const useGameInfo = () => { + const { gameId } = useParams(); + if (!gameId) throw new Error("Game ID not found"); + + const getGameQuery = service.endpoints.getGame.useQuery(gameId); + const getVariantQuery = useGetVariantQuery(gameId); + + const query = mergeQueries( + [getGameQuery, getVariantQuery], + (game, variant) => { + return { + game, + variant, + }; + } + ); + + return { query }; +}; + +const GameInfo: React.FC = () => { + const { query } = useGameInfo(); + + const TableListItem: React.FC<{ + label: string; + value: string | undefined; + icon: React.ReactElement; + }> = ({ label, value, icon }) => { + return ( + + {icon} + + + + ); + }; + + return ( + <> + + + {(data) => ( + + + Game settings + + } + /> + } + /> + {data.game.NonMovementPhaseLengthMinutes && ( + } + /> + )} + + + Player settings + + {data.game.ChatLanguageISO639_1 && ( + } + /> + )} + + + {data.game.Members.map((member) => ( + + ))} + + + } + > + + + + + + + + Variant details + + + } + /> + } + /> + } + /> + + + + + + + + + )} + + + ); +}; + +export { GameInfo }; diff --git a/src/screens/home/index.ts b/src/screens/home/index.ts index e50caf31..090a72a4 100644 --- a/src/screens/home/index.ts +++ b/src/screens/home/index.ts @@ -2,4 +2,6 @@ export * from "./layout"; export * from "./find-games" export * from "./create-game" export * from "./profile" -export * from "./my-games"; \ No newline at end of file +export * from "./my-games"; +export * from "./game-info"; +export * from "./player-info"; \ No newline at end of file diff --git a/src/screens/home/my-games.tsx b/src/screens/home/my-games.tsx index d1884454..438a9b58 100644 --- a/src/screens/home/my-games.tsx +++ b/src/screens/home/my-games.tsx @@ -8,6 +8,8 @@ import { ListItem, ListItemAvatar, ListItemText, + Menu, + MenuItem, Stack, Tab, Tabs, @@ -18,9 +20,13 @@ import { AddCircleOutline as StagingIcon, PlayCircleOutline as StartedIcon, StopCircleOutlined as FinishedIcon, + Info as InfoIcon, + Person as PlayerInfoIcon, + Share as ShareIcon, } from "@mui/icons-material"; import { QueryContainer } from "../../components"; import { mergeQueries, service } from "../../common"; +import { useNavigate } from "react-router"; const styles: Styles = { header: (theme) => ({ @@ -106,10 +112,39 @@ type Status = (typeof statuses)[number]["value"]; const MyGames: React.FC = () => { const { query } = useMyGames(); + const navigate = useNavigate(); const [selectedStatus, setSelectedStatus] = React.useState< Status | undefined >(undefined); + const [anchorEls, setAnchorEls] = React.useState<{ + [key: string]: HTMLElement | null; + }>({}); + + const handleMenuOpen = + (gameId: string) => (event: React.MouseEvent) => { + setAnchorEls((prev) => ({ ...prev, [gameId]: event.currentTarget })); + }; + + const handleMenuClose = (gameId: string) => () => { + setAnchorEls((prev) => ({ ...prev, [gameId]: null })); + }; + + const handleClickGameInfo = (gameId: string) => { + console.log("gameId", gameId); + navigate(`/game-info/${gameId}`); + }; + + const handleClickPlayerInfo = (userId: string) => { + navigate(`/player-info/${userId}`); + }; + + const handleClickShare = (gameId: string) => { + navigator.clipboard.writeText( + `${window.location.origin}/game-info/${gameId}` + ); + }; + const status = query.data ? selectedStatus ? selectedStatus @@ -170,9 +205,48 @@ const MyGames: React.FC = () => { - - + <> + + + + + { + handleClickGameInfo(game.ID); + handleMenuClose(game.ID)(); + }} + > + + Game info + + { + handleClickPlayerInfo(game.ID); + handleMenuClose(game.ID)(); + }} + > + + Player info + + { + handleClickShare(game.ID); + handleMenuClose(game.ID)(); + }} + > + + Share + + + } > diff --git a/src/screens/home/player-info.tsx b/src/screens/home/player-info.tsx new file mode 100644 index 00000000..e75a93cb --- /dev/null +++ b/src/screens/home/player-info.tsx @@ -0,0 +1,47 @@ +import React from "react"; +import { + Avatar, + List, + ListItem, + ListItemAvatar, + ListItemText, +} from "@mui/material"; +import { QueryContainer } from "../../components"; +import { service } from "../../common"; +import { ScreenTopBar } from "./screen-top-bar"; +import { useParams } from "react-router"; + +const usePlayerInfo = () => { + const { gameId } = useParams(); + if (!gameId) throw new Error("Game ID not found"); + + const query = service.endpoints.getGame.useQuery(gameId); + + return { query }; +}; + +const PlayerInfo: React.FC = () => { + const { query } = usePlayerInfo(); + + return ( + <> + + + {(data) => ( + + {data.Members.map((member) => ( + + + + + + + ))} + + )} + + + ); +}; + +export { PlayerInfo }; From 86d4285165891d893f08ff7c2162536948d782a4 Mon Sep 17 00:00:00 2001 From: John McDowell Date: Wed, 29 Jan 2025 10:22:21 +0000 Subject: [PATCH 15/69] Add Google Fonts and update theme typography to use 'Cabin' font --- index.html | 4 ++++ src/theme.ts | 1 + 2 files changed, 5 insertions(+) diff --git a/index.html b/index.html index 4cd0db3c..fc97603d 100644 --- a/index.html +++ b/index.html @@ -4,6 +4,10 @@ + + + Diplicity + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + background + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Marseilles + Portugal + Spain + N. Africa + Tunis + WEST MEDITERRANEAN + GOL + Gulf of Lyon + Gascony + MID ATLANTIC + Brest + Paris + Picardy + Burgundy + Belgium + Holland + Ruhr + Munich + Piedmont + Tyrolia + Tuscany + Venice + Rome + Naples + Tyrrhenian Sea + Apulia + Trieste + Albania + Kiel + Greece + TYS + ADRIATIC SEA + IONIAN SEA + Serbia + Vienna + Budapest + Rumania + Bulgaria + SC + EC + SC + NC + SC + NC + AEGEAN SEA + Constantinople + Smyrna + Syria + EAST MED + Armenia + Ankara + Sevastopol + BLACK SEA + Bohemia + Berlin + Silesia + Galicia + Ukraine + Warsaw + Prussia + LVN + Livonia + Moscow + Denmark + St. Petersburg + Finland + Sweden + Norway + BALTIC SEA + SKA + BARENTS SEA + BOT + Gulf of Bothnia + HEL + Helgoland + Bight + Wales + London + IRISH SEA + ENGLISHCHANNEL + Yorkshire + LVP + Liverpool + Clyde + Edinburgh + NTH + North Sea + N. ATLANTIC + NRG + Norwegian Sea + + + + diff --git a/src/common/map/map.parse.ts b/src/common/map/map.parse.ts new file mode 100644 index 00000000..0ec60cf9 --- /dev/null +++ b/src/common/map/map.parse.ts @@ -0,0 +1,247 @@ +import { Map, Point, Text, PathStyles } from "./map.parse.types"; + +const convertCssStringToObject = (css: string) => { + const regex = /([\w-]*)\s*:\s*([^;]*)/g; + let match; + const properties: Record = {}; + while ((match = regex.exec(css))) { + properties[match[1]] = match[2].trim(); + } + return properties; +}; + + +const recognizedTags = ["path", "polygon", "polyline", "rect"]; + +class SvgParser { + private svgString: string; + + constructor(svgString: string) { + console.log("Initialized with string: ", svgString); + this.svgString = svgString; + } + + public parse(): Map { + const parser = new DOMParser(); + const doc = parser.parseFromString(this.svgString, "image/svg+xml"); + const root = doc.documentElement; + + return { + height: this.getHeight(root), + width: this.getWidth(root), + backgroundElements: this.parseBackgroundElements(root), + borders: this.parseBorders(root), + provinces: this.parseProvinces(root), + impassableProvinces: this.parseImpassableProvinces(root) + }; + } + + private getHeight(root: Element): number { + console.log("Getting height for selector: #background-rect"); + const element = root.querySelector("#background-rect"); + console.log("Element: ", element); + return parseFloat(element?.getAttribute("height") || "0"); + } + + private getWidth(root: Element): number { + console.log("Getting width for selector: #background-rect"); + const element = root.querySelector("#background-rect"); + console.log("Element: ", element); + return parseFloat(element?.getAttribute("width") || "0"); + } + + private convertRectToPath(rect: Element): Element { + const x = parseFloat(rect.getAttribute("x") || "0"); + const y = parseFloat(rect.getAttribute("y") || "0"); + const width = parseFloat(rect.getAttribute("width") || "0"); + const height = parseFloat(rect.getAttribute("height") || "0"); + const path = `M${x} ${y} L${x + width} ${y} L${x + width} ${y + height} L${x} ${y + height} Z`; + const pathElement = document.createElementNS("http://www.w3.org/2000/svg", "path"); + pathElement.setAttribute("d", path); + pathElement.setAttribute("style", rect.getAttribute("style") || ""); + return pathElement; + } + + private convertPolygonToPath(polygon: Element): Element { + const points = polygon.getAttribute("points") || ""; + const pointsArray = points.trim().split(" "); + let pathData = `M ${pointsArray[0]}`; + for (let i = 1; i < pointsArray.length; i++) { + pathData += ` L ${pointsArray[i]}`; + } + pathData += " Z"; + const pathElement = document.createElementNS("http://www.w3.org/2000/svg", "path"); + pathElement.setAttribute("d", pathData); + pathElement.setAttribute("style", polygon.getAttribute("style") || ""); + return pathElement; + } + + private convertPolylineToPath(polyline: Element): Element { + const points = polyline.getAttribute("points") || ""; + const path = `M${points}`; + const pathElement = document.createElementNS("http://www.w3.org/2000/svg", "path"); + pathElement.setAttribute("d", path); + pathElement.setAttribute("style", polyline.getAttribute("style") || ""); + return pathElement; + } + + private parseBackgroundElements(root: Element): Map["backgroundElements"] { + console.log("Parsing background elements"); + const backgroundLayer = root.querySelector("#background"); + const elements = backgroundLayer?.querySelectorAll("path, rect"); + console.log("Elements: ", elements); + if (!elements) return []; + return Array.from(elements).map(element => { + if (element.tagName === "rect") { + const path = this.convertRectToPath(element); + return { + path: path.getAttribute("d") || "", + styles: this.parsePathStyles(path) + } + } + return { + path: element.getAttribute("d") || "", + styles: this.parsePathStyles(element) + } + }) + } + + private parseBorders(root: Element): Map["borders"] { + const foregroundLayer = root.querySelector("#foreground"); + const elements = foregroundLayer?.querySelectorAll("path, polygon, polyline"); + if (!elements) return []; + + // Only include elements that don't have fill:url(#impassableStripes) + const filteredElements = Array.from(elements).filter(element => { + const fill = convertCssStringToObject(element.getAttribute("style") || "").fill; + return fill !== "url(#impassableStripes)"; + }) + + // If element is polyline, return points and transform + return Array.from(filteredElements).map(element => { + if (element.tagName === "polygon" || element.tagName === "polyline") { + const path = element.tagName === "polygon" ? this.convertPolygonToPath(element) : this.convertPolylineToPath(element); + return { + path: path.getAttribute("d") || "", + } + } + return { + path: element.getAttribute("d") || "" + } + }) + } + + private parseImpassableProvinces(root: Element): Map["impassableProvinces"] { + const foregroundLayer = root.querySelector("#foreground"); + const elements = foregroundLayer?.querySelectorAll("path, polygon, polyline"); + if (!elements) return []; + + // Only include elements that don't have fill:url(#impassableStripes) + const filteredElements = Array.from(elements).filter(element => { + const fill = convertCssStringToObject(element.getAttribute("style") || "").fill; + return fill === "url(#impassableStripes)"; + }) + + // If element is polyline, return points and transform + return Array.from(filteredElements).map(element => { + if (element.tagName === "polygon" || element.tagName === "polyline") { + const path = element.tagName === "polygon" ? this.convertPolygonToPath(element) : this.convertPolylineToPath(element); + return { + path: path.getAttribute("d") || "", + } + } + return { + path: element.getAttribute("d") || "" + } + }) + } + + private parseProvinces(root: Element): Map["provinces"] { + console.log("Parsing provinces elements"); + const provincesLayer = root.querySelector("#provinces"); + const supplyCentersLayer = root.querySelector("#supply-centers"); + const provinceCentersLayer = root.querySelector("#province-centers"); + const namesLayer = root.querySelector("#names"); + const elements = provincesLayer?.querySelectorAll(recognizedTags.join(", ")); + if (!elements) return []; + return Array.from(elements).map(element => { + const escapedId = element.id.replace("/", "\\/"); + const supplyCenter = supplyCentersLayer?.querySelector(`#${escapedId}Center`); + const provinceCenter = provinceCentersLayer?.querySelector(`#${escapedId}Center`); + const [x, y] = supplyCenter ? this.parseDCenter(supplyCenter as HTMLElement) : provinceCenter ? this.parseDCenter(provinceCenter as HTMLElement) : [0, 0]; + + if (element.tagName === "polygon") { + const path = this.convertPolygonToPath(element); + return { + id: element.id, + center: { x, y }, + supplyCenter: Boolean(supplyCenter), + path: path.getAttribute("d") || "", + text: this.parseText(namesLayer?.querySelector(`#${escapedId}`) || null), + } + } else { + + return { + id: element.id, + center: { x, y }, + supplyCenter: !!supplyCenter, + path: element.getAttribute("d") || "", + text: this.parseText(namesLayer?.querySelector(`#${escapedId}`) || null), + } + } + }); + } + + private parseDCenter(element: HTMLElement): [number, number] { + const d = element.getAttribute("d") || ""; + const match = /^m\s+([\d-.]+),([\d-.]+)\s+/.exec(d); + if (!match) throw new Error(`Invalid d attribute: ${d}`); + return [Number(match[1]), Number(match[2])]; + } + + private parsePoint(element: Element): Point { + return { + x: parseFloat(element.getAttribute("x") || "0"), + y: parseFloat(element.getAttribute("y") || "0") + }; + } + + private parseText(element: Element | null): Text | undefined { + if (!element) return undefined + const tspan = element.querySelector("tspan"); + if (!tspan) return undefined; + const cssStyles = convertCssStringToObject(element.getAttribute("style") || "") + const textPoint = this.parsePoint(tspan); + const textOffset = this.parsePoint(element); + const x = textPoint.x - textOffset.x; + const y = textPoint.y - textOffset.y; + return { + value: element.textContent || "", + styles: { + fontSize: cssStyles["font-size"] || "", + fontFamily: cssStyles["font-family"] || "", + fontWeight: cssStyles["font-weight"] || "", + transform: cssStyles.transform || "" + }, + point: { x, y } + }; + } + + private parsePathStyles(element: Element): PathStyles { + const cssStyles = convertCssStringToObject(element.getAttribute("style") || "") + return { + fill: cssStyles.fill || "", + stroke: cssStyles.stroke, + strokeDasharray: cssStyles["stroke-dasharray"], + strokeMiterlimit: cssStyles["stroke-miterlimit"], + strokeOpacity: cssStyles["stroke-opacity"], + strokeWidth: cssStyles["stroke-width"], + } + } +} + +const parseSvg = (svgString: string): Map => { + return new SvgParser(svgString).parse(); +}; + +export { parseSvg }; \ No newline at end of file diff --git a/src/common/map/map.parse.types.ts b/src/common/map/map.parse.types.ts new file mode 100644 index 00000000..e04c67a5 --- /dev/null +++ b/src/common/map/map.parse.types.ts @@ -0,0 +1,52 @@ +import { CSSProperties } from "react"; + +type Point = { + x: number; + y: number; +} + +type Path = string; + +type TextStyles = Pick; + +type PathStyles = Pick; + +type Text = { + value: string; + styles: TextStyles; + point: Point; +} + +type Province = { + id: string; + center: Point; + supplyCenter: boolean; + text: Text | undefined; + path: string; + transform?: string; +} + +type ImpassableProvince = { + path: string; +} + +type Border = { + path: string; +} + + +type BackgroundElement = { + path: Path; + styles: PathStyles; +} + +type Map = { + height: number; + width: number; + backgroundElements: BackgroundElement[]; + borders: Border[]; + provinces: Province[]; + impassableProvinces: ImpassableProvince[]; +} + +export type { Map, Point, Text, PathStyles } \ No newline at end of file diff --git a/src/components/ConfirmOrdersAction/ConfirmOrdersAction.tsx b/src/components/ConfirmOrdersAction/ConfirmOrdersAction.tsx deleted file mode 100644 index d2aeeb50..00000000 --- a/src/components/ConfirmOrdersAction/ConfirmOrdersAction.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import { Fab, Stack, Typography } from "@mui/material"; -import { - CheckBox as OrdersConfirmedIcon, - CheckBoxOutlineBlank as ConfirmOrdersIcon, -} from "@mui/icons-material"; -import { - mergeQueries, - useGetUserNewestPhaseStateQuery, - useUpdatePhaseStateMutation, -} from "../../common"; -import { useGameDetailContext } from "../../context"; - -const useConfirmOrdersAction = () => { - const { gameId } = useGameDetailContext(); - const phaseStateQuery = useGetUserNewestPhaseStateQuery(gameId); - const [updatePhaseStateTrigger, updatePhaseStateMutation] = - useUpdatePhaseStateMutation(gameId); - - const handleClick = () => - updatePhaseStateTrigger({ - isConfirmed: !phaseStateQuery.data?.ReadyToResolve, - }); - - const mergedQuery = mergeQueries([phaseStateQuery], (phaseState) => ({ - isConfirmed: Boolean(phaseState?.ReadyToResolve), - canUpdate: Boolean(phaseState?.canUpdate), - })); - - return { - ...mergedQuery, - isSubmitting: updatePhaseStateMutation.isLoading, - handleClick, - }; -}; - -const ConfirmOrdersAction: React.FC = () => { - const { isLoading, isError, isSuccess, isSubmitting, data, handleClick } = - useConfirmOrdersAction(); - - if (isLoading) return <>; - if (isError) return <>; - if (!isSuccess) throw new Error("Something went wrong"); - if (!data.canUpdate) return <>; - - return ( - - - {data.isConfirmed ? : } - {data.isConfirmed ? ( - Orders Confirmed - ) : ( - Confirm Orders - )} - - - ); -}; - -export { ConfirmOrdersAction }; diff --git a/src/components/ConfirmOrdersAction/index.ts b/src/components/ConfirmOrdersAction/index.ts deleted file mode 100644 index 2406e770..00000000 --- a/src/components/ConfirmOrdersAction/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./ConfirmOrdersAction"; \ No newline at end of file diff --git a/src/components/CreateOrderAction/CreateOrderAction.hook.ts b/src/components/CreateOrderAction/CreateOrderAction.hook.ts deleted file mode 100644 index 102ae35d..00000000 --- a/src/components/CreateOrderAction/CreateOrderAction.hook.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { useLocation, useNavigate } from "react-router"; -import { mergeQueries, useGetCurrentPhaseQuery } from "../../common"; -import { useGameDetailContext } from "../../context"; - -const useCreateOrderAction = () => { - const { gameId } = useGameDetailContext(); - const location = useLocation(); - const navigate = useNavigate(); - - const currentPhaseQuery = useGetCurrentPhaseQuery(gameId); - - const handleClick = () => { - const searchParams = new URLSearchParams(location.search); - searchParams.set("createOrder", "true"); - navigate({ search: searchParams.toString() }); - }; - - const mergedQuery = mergeQueries([currentPhaseQuery], (phase) => ({ - canCreateOrder: Boolean(phase.canCreateOrder), - })); - - return { - ...mergedQuery, - handleClick, - }; -}; - -export { useCreateOrderAction }; \ No newline at end of file diff --git a/src/components/CreateOrderAction/CreateOrderAction.tsx b/src/components/CreateOrderAction/CreateOrderAction.tsx deleted file mode 100644 index 844248cd..00000000 --- a/src/components/CreateOrderAction/CreateOrderAction.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { Fab } from "@mui/material"; -import { Add as CreateOrderIcon } from "@mui/icons-material"; -import { useCreateOrderAction } from "./CreateOrderAction.hook"; - -const CreateOrderAction: React.FC = () => { - const { isLoading, isError, data, handleClick } = useCreateOrderAction(); - - if (isLoading) return <>; - if (isError) return <>; - if (!data?.canCreateOrder) return <>; - - return ( - - - - ); -}; - -export { CreateOrderAction }; diff --git a/src/components/CreateOrderAction/index.ts b/src/components/CreateOrderAction/index.ts deleted file mode 100644 index b0b4d9f8..00000000 --- a/src/components/CreateOrderAction/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./CreateOrderAction" \ No newline at end of file diff --git a/src/components/GameDetailsLayout/GameDetailsLayout.tsx b/src/components/GameDetailsLayout/GameDetailsLayout.tsx deleted file mode 100644 index 8354ccca..00000000 --- a/src/components/GameDetailsLayout/GameDetailsLayout.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import { Outlet } from "react-router"; -import { AppBar, IconButton, Stack, Toolbar, useTheme } from "@mui/material"; -import { ArrowBack as BackIcon } from "@mui/icons-material"; -import { PhaseSelect } from "../phase-select"; -import { - GameDetailContextProvider, - SelectedPhaseContextProvider, -} from "../../context"; - -const GameDetailsLayout: React.FC<{ - onClickBack: () => void; - onClickCreateOrder: () => void; - actions: React.ReactNode[]; - navigation: React.ReactNode; - modals: React.ReactNode[]; -}> = (props) => { - const theme = useTheme(); - - return ( - - - - - - - - - - - - - - - {props.actions} - - {props.navigation} - {props.modals} - - - - ); -}; - -export { GameDetailsLayout }; diff --git a/src/components/GameDetailsLayout/index.ts b/src/components/GameDetailsLayout/index.ts deleted file mode 100644 index 3383f5db..00000000 --- a/src/components/GameDetailsLayout/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./GameDetailsLayout" \ No newline at end of file diff --git a/src/components/GameDetailsNavigation/GameDetailsNavigation.tsx b/src/components/GameDetailsNavigation/GameDetailsNavigation.tsx deleted file mode 100644 index e48161d1..00000000 --- a/src/components/GameDetailsNavigation/GameDetailsNavigation.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import { - AppBar, - BottomNavigation, - BottomNavigationAction, -} from "@mui/material"; -import { - Map as MapIcon, - Gavel as OrdersIcon, - People as PlayersIcon, -} from "@mui/icons-material"; -import { useLocation, useNavigate } from "react-router"; -import { useGameDetailContext } from "../../context"; - -const GameDetailsNavigation: React.FC = () => { - const { gameId } = useGameDetailContext(); - const location = useLocation(); - const navigate = useNavigate(); - - const navigationPathMap = { - map: `/game/${gameId}`, - orders: `/game/${gameId}/orders`, - players: `/game/${gameId}/players`, - } as const; - - return ( - - { - navigate(value); - }} - > - } - value={navigationPathMap.map} - /> - } - value={navigationPathMap.orders} - /> - } - value={navigationPathMap.players} - /> - - - ); -}; - -export { GameDetailsNavigation }; diff --git a/src/components/GameDetailsNavigation/index.ts b/src/components/GameDetailsNavigation/index.ts deleted file mode 100644 index 5acc94f7..00000000 --- a/src/components/GameDetailsNavigation/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./GameDetailsNavigation" \ No newline at end of file diff --git a/src/components/InteractiveMap/InteractiveMap.stories.tsx b/src/components/InteractiveMap/InteractiveMap.stories.tsx new file mode 100644 index 00000000..2f6ce2ad --- /dev/null +++ b/src/components/InteractiveMap/InteractiveMap.stories.tsx @@ -0,0 +1,15 @@ +import { Meta, StoryObj } from "@storybook/react"; +import { InteractiveMap } from "./InteractiveMap"; +import classical from "../../data/map/classical.json"; + +export default { + title: "Components/InteractiveMap", + component: InteractiveMap, + args: { + map: classical, + }, +} as Meta; + +type Story = StoryObj; + +export const Default: Story = {}; diff --git a/src/components/InteractiveMap/InteractiveMap.tsx b/src/components/InteractiveMap/InteractiveMap.tsx new file mode 100644 index 00000000..a14214ef --- /dev/null +++ b/src/components/InteractiveMap/InteractiveMap.tsx @@ -0,0 +1,143 @@ +import React, { useState } from "react"; +import { Map } from "../../common/map/map.parse.types"; + +type InteractiveMapProps = { + map: Map; +}; + +const HOVER_STROKE_WIDTH = 1; +const HOVER_STROKE_COLOR = "white"; +const HOVER_FILL = "rgba(255, 255, 255, 0.6)"; + +const SELECTED_STROKE_WIDTH = 3; +const SELECTED_STROKE_COLOR = "white"; +const SELECTED_FILL = "rgba(255, 255, 255, 0.8)"; + +const DEFAULT_FILL = "transparent"; + +const InteractiveMap: React.FC = ({ map }) => { + const [hoveredProvince, setHoveredProvince] = useState(null); + const [selectedProvince, setSelectedProvince] = useState(null); + + const getFill = (provinceId: string) => { + if (selectedProvince === provinceId) return SELECTED_FILL; + if (hoveredProvince === provinceId) return HOVER_FILL; + return DEFAULT_FILL; + }; + + const getStroke = (provinceId: string) => { + if (selectedProvince === provinceId) return SELECTED_STROKE_COLOR; + if (hoveredProvince === provinceId) return HOVER_STROKE_COLOR; + return "none"; + }; + + const getStrokeWidth = (provinceId: string) => { + if (selectedProvince === provinceId) return SELECTED_STROKE_WIDTH; + if (hoveredProvince === provinceId) return HOVER_STROKE_WIDTH; + return 1; + }; + + return ( + + + + + + + {map.backgroundElements.map((element, index) => ( + + + + ))} + {map.provinces.map((province) => ( + + setHoveredProvince(province.id)} + onMouseLeave={() => setHoveredProvince(null)} + onClick={() => setSelectedProvince(province.id)} + /> + {province.supplyCenter && ( + + + + + )} + + ))} + {map.provinces.map( + (province) => + province.text && ( + + {province.text.value} + + ) + )} + {map.borders.map((element, index) => ( + + ))} + {map.impassableProvinces.map((element, index) => ( + + ))} + + ); +}; + +export { InteractiveMap }; diff --git a/src/components/Map/Map.tsx b/src/components/Map/Map.tsx index 886cb66f..9df9a440 100644 --- a/src/components/Map/Map.tsx +++ b/src/components/Map/Map.tsx @@ -1,43 +1,20 @@ -import React from "react"; -import { CircularProgress, Box } from "@mui/material"; -import { useMap } from "./use-map"; - -const MapContainer: React.FC<{ - children: React.ReactNode; -}> = ({ children }) => { - return ( - - {children} - - ); -}; +import { useMap } from "../../common"; +import { QueryContainer } from "../query-container"; const Map: React.FC = () => { - const { isLoading, isError, isSuccess, data } = useMap(); - - if (isLoading) { - return ( - - - - ); - } - - if (isError) return
Error loading map
; - if (!isSuccess) return null; - + const { query } = useMap(); return ( - -
- + + {(data) => ( +
+ )} + ); }; diff --git a/src/components/Map/index.ts b/src/components/Map/index.ts index a9fddd5c..fc155f27 100644 --- a/src/components/Map/index.ts +++ b/src/components/Map/index.ts @@ -1 +1 @@ -export * from "./Map"; \ No newline at end of file +export * from "./map"; \ No newline at end of file diff --git a/src/components/Map/use-map.ts b/src/components/Map/use-map.ts deleted file mode 100644 index 55b7956d..00000000 --- a/src/components/Map/use-map.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { createMap } from "../../common/map/map"; -import { mergeQueries, useGetPhaseQuery, useGetMapSvgQuery, useGetUnitSvgQuery, useGetVariantQuery } from "../../common"; -import { useGameDetailContext, useSelectedPhaseContext } from "../../context"; - -const useMap = () => { - const { gameId } = useGameDetailContext(); - const { selectedPhase } = useSelectedPhaseContext(); - - const getVariantQuery = useGetVariantQuery(gameId); - const getPhaseQuery = useGetPhaseQuery(gameId, selectedPhase); - const getMapSvgQuery = useGetMapSvgQuery(gameId); - const getArmySvgQuery = useGetUnitSvgQuery(gameId, "Army"); - const getFleetSvgQuery = useGetUnitSvgQuery(gameId, "Fleet"); - - return mergeQueries([getVariantQuery, getPhaseQuery, getMapSvgQuery, getArmySvgQuery, getFleetSvgQuery], (variant, phase, mapSvg, armySvg, fleetSvg) => { - return createMap(mapSvg, armySvg, fleetSvg, variant, phase); - }); -} - -export { useMap }; diff --git a/src/components/Modal/Modal.context.ts b/src/components/Modal/Modal.context.ts deleted file mode 100644 index 80f07d2a..00000000 --- a/src/components/Modal/Modal.context.ts +++ /dev/null @@ -1,8 +0,0 @@ -import React from "react"; -import { ModalContextType } from "./Modal.types"; - -const ModalContext = React.createContext( - undefined -); - -export { ModalContext }; \ No newline at end of file diff --git a/src/components/Modal/Modal.hook.ts b/src/components/Modal/Modal.hook.ts deleted file mode 100644 index eefe6cd8..00000000 --- a/src/components/Modal/Modal.hook.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { useContext } from "react" -import { ModalContext } from "./Modal.context" - -const useModal = () => { - const context = useContext(ModalContext) - if (!context) { - throw new Error("useModal must be used within a ModalProvider") - } - return context -} - -export { useModal } \ No newline at end of file diff --git a/src/components/Modal/Modal.tsx b/src/components/Modal/Modal.tsx deleted file mode 100644 index 5cc33e96..00000000 --- a/src/components/Modal/Modal.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import React from "react"; -import { Modal as MuiModal, Box, Stack } from "@mui/material"; -import { useLocation, useNavigate } from "react-router"; -import { ModalContext } from "./Modal.context"; - -const style = { - position: "absolute", - top: "50%", - left: "50%", - transform: "translate(-50%, -50%)", - width: 400, - bgcolor: "background.paper", - boxShadow: 24, - p: 4, -}; - -const Modal: React.FC<{ - name: string; - // Update children to be a render prop that passes the value and onClose function - // children: React.ReactNode; - children: (props: { - value: string | null; - onClose: () => void; - }) => React.ReactNode; -}> = (props) => { - const navigate = useNavigate(); - const location = useLocation(); - const queryParams = new URLSearchParams(location.search); - const isOpen = queryParams.has(props.name); - const value = queryParams.get(props.name); - - const onClose = () => { - const searchParams = new URLSearchParams(location.search); - searchParams.delete(props.name); - navigate({ search: searchParams.toString() }); - }; - - return ( - - - - - {props.children({ value, onClose })} - - - - - ); -}; - -export { Modal }; diff --git a/src/components/Modal/Modal.types.ts b/src/components/Modal/Modal.types.ts deleted file mode 100644 index 3f94b302..00000000 --- a/src/components/Modal/Modal.types.ts +++ /dev/null @@ -1,6 +0,0 @@ -type ModalContextType = { - onClose: () => void; - value: string | null; -}; - -export type { ModalContextType }; \ No newline at end of file diff --git a/src/components/Modal/index.ts b/src/components/Modal/index.ts deleted file mode 100644 index dde8dfc1..00000000 --- a/src/components/Modal/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./Modal"; -export * from "./Modal.hook"; \ No newline at end of file diff --git a/src/components/PlayerInfo.tsx b/src/components/PlayerInfo.tsx deleted file mode 100644 index 652ec4b7..00000000 --- a/src/components/PlayerInfo.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import React from "react"; -import { Stack, Typography } from "@mui/material"; -import { PlayerInfoCard } from "./PlayerInfoCard"; -import service from "../common/store/service"; - -const PlayerInfo: React.FC<{ - gameId: string; - getGameQuery?: typeof service.endpoints.getGame.useQuery; -}> = (props) => { - const getGameQuery = props.getGameQuery - ? props.getGameQuery(props.gameId) - : service.endpoints.getGame.useQuery(props.gameId); - - if (getGameQuery.isSuccess) { - return ( - - Player Info - - {getGameQuery.data.Members.map((member) => ( - - ))} - - - ); - } -}; - -export { PlayerInfo }; diff --git a/src/components/PlayerInfoCard.tsx b/src/components/PlayerInfoCard.tsx deleted file mode 100644 index 70865f91..00000000 --- a/src/components/PlayerInfoCard.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import React from "react"; -import { - Avatar, - Card, - CardContent, - Grid2 as Grid, - Typography, -} from "@mui/material"; -import service from "../common/store/service"; - -const PlayerInfoCard: React.FC<{ - member: (typeof service.endpoints.getGame.Types.ResultType)["Members"][0]; -}> = (props) => { - return ( - - - - - - - - - - - - - {props.member.User.Name} - - - - - - - - - - - ); -}; - -export { PlayerInfoCard }; diff --git a/src/components/UserInfo.tsx b/src/components/UserInfo.tsx deleted file mode 100644 index 1070a565..00000000 --- a/src/components/UserInfo.tsx +++ /dev/null @@ -1,101 +0,0 @@ -import React, { useState } from "react"; -import { - Card, - CardContent, - Grid2 as Grid, - IconButton, - Typography, - Menu, - MenuItem, - Avatar, - Stack, - Skeleton, -} from "@mui/material"; -import { MoreHoriz } from "@mui/icons-material"; -import service from "../common/store/service"; -import { useDispatch } from "react-redux"; -import { AppDispatch } from "../common"; -import { authActions } from "../common/store/auth"; - -const UserInfo: React.FC = () => { - const rootQuery = service.endpoints.getRoot.useQuery(undefined); - const dispatch = useDispatch(); - - const [anchorEl, setAnchorEl] = useState(null); - const open = Boolean(anchorEl); - - const handleMenuClick = (event: React.MouseEvent) => { - setAnchorEl(event.currentTarget); - }; - - const handleMenuClose = () => { - setAnchorEl(null); - }; - - const withMenuClose = (fn: () => void) => { - return () => { - fn(); - handleMenuClose(); - }; - }; - - const onClickLogout = () => { - dispatch(authActions.logout()); - }; - - if (rootQuery.isLoading) { - return ( - - - - - - - - - - - - - - - - - - - ); - } - - const user = rootQuery.data; - - return ( - - - - - - - - - - {user?.Name} - - - - - - - - - Logout - - - - - - - - ); -}; - -export default UserInfo; diff --git a/src/screens/game-detail/channel-list.tsx b/src/components/channel/channel-list.tsx similarity index 100% rename from src/screens/game-detail/channel-list.tsx rename to src/components/channel/channel-list.tsx diff --git a/src/screens/game-detail/channel.tsx b/src/components/channel/channel.tsx similarity index 57% rename from src/screens/game-detail/channel.tsx rename to src/components/channel/channel.tsx index 55989869..58392b2e 100644 --- a/src/screens/game-detail/channel.tsx +++ b/src/components/channel/channel.tsx @@ -1,6 +1,4 @@ import React, { useEffect, useRef } from "react"; -import { ScreenTopBar } from "../home/screen-top-bar"; -import { useGameDetailContext } from "../../context"; import { mergeQueries, service, useGetVariantQuery } from "../../common"; import { useChannelContext } from "../../context/channel-context"; import { @@ -14,14 +12,13 @@ import { Stack, TextField, Typography, - useMediaQuery, - useTheme, } from "@mui/material"; import { Send as SendIcon } from "@mui/icons-material"; import { QueryContainer } from "../../components"; import { useGetUserMemberQuery } from "../../common/hooks/useGetUserMemberQuery"; import { useGetChannelQuery } from "../../common/hooks/useGetChannelQuery"; import { getChannelDisplayName } from "../../util"; +import { useGameDetailContext } from "../../context"; const styles: Styles = { listSubheader: (theme) => ({ @@ -128,12 +125,8 @@ const displayTime = (date: Date) => { }); }; -const ChannelComponent: React.FC = () => { - const { query, message, setMessage, handleSubmit, isSubmitting, closed } = - useChannel(); - - const theme = useTheme(); - const isMobile = useMediaQuery(theme.breakpoints.down("md")); +const Channel: React.FC = () => { + const { query } = useChannel(); const listRef = useRef(null); @@ -144,80 +137,78 @@ const ChannelComponent: React.FC = () => { }, [query.data]); return ( - <> - {isMobile && } - - {(data) => ( - - - - {Object.keys(data.messages).map((date) => ( - - - {date} - - {data.messages[date].map((message, index) => ( - - - {message.sender[0]} - - - {message.body} - - {displayTime(new Date(message.date))} - - - } - /> - - ))} - - ))} - - - {!closed && ( - - setMessage(e.target.value)} - fullWidth - disabled={isSubmitting} - /> - - - - - )} + + {(data) => ( + + + + {Object.keys(data.messages).map((date) => ( + + + {date} + + {data.messages[date].map((message, index) => ( + + + {message.sender[0]} + + + {message.body} + + {displayTime(new Date(message.date))} + + + } + /> + + ))} + + ))} + - )} - - + + )} + ); }; -const Channel: React.FC = () => { - return ; +const ChannelTextField: React.FC = () => { + const { message, setMessage, handleSubmit, isSubmitting, closed } = + useChannel(); + + return closed ? null : ( + + setMessage(e.target.value)} + fullWidth + disabled={isSubmitting} + /> + + + + + ); }; -export { Channel }; +export { Channel, ChannelTextField }; diff --git a/src/components/channel/create-channel.tsx b/src/components/channel/create-channel.tsx new file mode 100644 index 00000000..88681d7e --- /dev/null +++ b/src/components/channel/create-channel.tsx @@ -0,0 +1,5 @@ +const CreateChannel: React.FC = () => { + return
Hello world
; +}; + +export { CreateChannel }; diff --git a/src/components/channel/index.ts b/src/components/channel/index.ts new file mode 100644 index 00000000..1d91067d --- /dev/null +++ b/src/components/channel/index.ts @@ -0,0 +1,3 @@ +export * from "./channel"; +export * from "./channel-list"; +export * from "./create-channel"; \ No newline at end of file diff --git a/src/components/game-detail/game-name.tsx b/src/components/game-detail/game-name.tsx new file mode 100644 index 00000000..d3dfeaeb --- /dev/null +++ b/src/components/game-detail/game-name.tsx @@ -0,0 +1,17 @@ +import { Typography } from "@mui/material"; +import { service } from "../../common"; +import { useGameDetailContext } from "../../context"; +import { QueryContainer } from "../query-container"; + +const GameName: React.FC = () => { + const { gameId } = useGameDetailContext(); + const getGameQuery = service.endpoints.getGame.useQuery(gameId); + + return ( + <>}> + {(data) => {data.Desc}} + + ); +}; + +export { GameName }; diff --git a/src/components/home-layout/home-layout.tsx b/src/components/home-layout/home-layout.tsx deleted file mode 100644 index 4395fba0..00000000 --- a/src/components/home-layout/home-layout.tsx +++ /dev/null @@ -1,262 +0,0 @@ -import React, { useState } from "react"; -import { Box } from "@mui/material"; -import { Outlet } from "react-router"; -import { useLocation, useNavigate } from "react-router"; -import { - AppBar, - BottomNavigation, - BottomNavigationAction, - useTheme, - useMediaQuery, - List, - ListItemText, - ListItemIcon, - ListItemButton, - ListItem, - Stack, - Avatar, -} from "@mui/material"; -import { - Home as HomeIcon, - Search as SearchIcon, - Add as AddIcon, -} from "@mui/icons-material"; -import service from "../../common/store/service"; - -type Navigation = "home" | "find-games" | "create-game" | "user"; - -const navigationPathMap: Record = { - home: "/", - "find-games": "/find-games", - "create-game": "/create-game", - user: "/user", -}; - -const TabletNavigation: React.FC<{ - children: React.ReactNode; -}> = ({ children }) => { - return {children}; -}; - -const DesktopNavigation: React.FC<{ - children: React.ReactNode; -}> = ({ children }) => { - return {children}; -}; - -const TabletNavigationAction: React.FC<{ - label: string; - icon: React.ReactElement; - path: string; - style?: React.CSSProperties; -}> = ({ label, icon, path, style }) => { - const navigate = useNavigate(); - const location = useLocation(); - const theme = useTheme(); - - const selectedItemIconStyle = { - color: theme.palette.common.black, - }; - - return ( - - navigate(path)} style={{ padding: 16 }}> - - {React.cloneElement(icon, { - style: - location.pathname === path - ? { ...style, ...selectedItemIconStyle } - : { ...style }, - })} - - - - ); -}; - -const DesktopNavigationAction: React.FC<{ - label: string; - icon: React.ReactElement; - path: string; - style?: React.CSSProperties; -}> = ({ label, icon, path, style }) => { - const navigate = useNavigate(); - const location = useLocation(); - const theme = useTheme(); - - const selectedItemIconStyle = { - color: theme.palette.common.black, - }; - - const selectedItemTextStyle = { - color: theme.palette.common.black, - fontWeight: "bold", - }; - - return ( - - navigate(path)} style={{ padding: 16 }}> - - {React.cloneElement(icon, { - style: - location.pathname === path - ? { ...style, ...selectedItemIconStyle } - : { ...style }, - })} - - - - - ); -}; - -const NavigationWrapper: React.FC<{ - children: React.ReactNode; -}> = ({ children }) => { - const [navigation, setNavigation] = useState("home"); - const theme = useTheme(); - const isMobile = useMediaQuery(theme.breakpoints.down("sm")); - const isTablet = useMediaQuery(theme.breakpoints.between("sm", "md")); - const isDesktop = useMediaQuery(theme.breakpoints.up("md")); - const navigate = useNavigate(); - const rootQuery = service.endpoints.getRoot.useQuery(undefined); - - return isMobile ? ( - <> - {children} - - { - setNavigation(newValue); - navigate(navigationPathMap[newValue as Navigation]); - }} - > - } - value="home" - /> - } - value="find-games" - /> - } - value="create-game" - /> - {rootQuery.isLoading ? ( - } /> - ) : ( - } - value="user" - /> - )} - - - - ) : isTablet ? ( - - - } path="/" /> - } - path="/find-games" - /> - } - path="/create-game" - /> - {rootQuery.isLoading ? ( - } - /> - ) : ( - } - style={{ width: 26, height: 26 }} - path="/user" - /> - )} - - {children} - - ) : isDesktop ? ( - - - } path="/" /> - } - path="/find-games" - /> - } - path="/create-game" - /> - {rootQuery.isLoading ? ( - } - /> - ) : ( - } - style={{ width: 26, height: 26 }} - path="/user" - /> - )} - - {children} - - ) : ( -
Not implemented
- ); -}; - -const HomeLayout: React.FC = () => { - return ( - -
- - - -
-
- ); -}; - -export { HomeLayout }; diff --git a/src/components/home-layout/index.ts b/src/components/home-layout/index.ts deleted file mode 100644 index 92d1d156..00000000 --- a/src/components/home-layout/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./home-layout" \ No newline at end of file diff --git a/src/components/index.ts b/src/components/index.ts index 89a89288..8d809fbf 100644 --- a/src/components/index.ts +++ b/src/components/index.ts @@ -1,4 +1,7 @@ +export * from "./channel" export * from "./drawer-navigation" -export * from "./order-list"; +export * from "./orders"; export * from "./game-card" +export * from "./map" +export * from "./panel" export * from "./query-container" \ No newline at end of file diff --git a/src/components/loading-container.tsx b/src/components/loading-container.tsx deleted file mode 100644 index e69de29b..00000000 diff --git a/src/components/order-list.tsx b/src/components/order-list.tsx deleted file mode 100644 index 892e38f9..00000000 --- a/src/components/order-list.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import React from "react"; -import { useOrders } from "../common/hooks/useOrders"; -import { - Stack, - Typography, - List, - ListSubheader, - Divider, - ListItem, - ListItemText, -} from "@mui/material"; -import { formatOrderText } from "../util"; - -const OrderList: React.FC<{ - orders: NonNullable["query"]["data"]>["orders"]; -}> = ({ orders }) => { - // Reduce orders to be grouped by nation - const ordersByNation = orders.reduce((acc, order) => { - if (!acc[order.nation]) { - acc[order.nation] = []; - } - acc[order.nation].push(order); - return acc; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - }, {} as Record); - return orders.length === 0 ? ( - - No order created during this turn - - ) : ( - - {Object.keys(ordersByNation).map((nation) => ( - - {nation} - - {ordersByNation[nation].map((order) => ( - - ({ - "& .MuiListItemText-secondary": { - color: - order.outcome?.outcome === "Succeeded" - ? theme.palette.success.main - : theme.palette.error.main, - }, - })} - /> - - ))} - - ))} - - ); -}; - -export { OrderList }; diff --git a/src/screens/game-detail/create-order.tsx b/src/components/orders/create-order.tsx similarity index 74% rename from src/screens/game-detail/create-order.tsx rename to src/components/orders/create-order.tsx index 04042d93..82eadaa2 100644 --- a/src/screens/game-detail/create-order.tsx +++ b/src/components/orders/create-order.tsx @@ -1,5 +1,4 @@ import { - FormLabel, Stack, Typography, ButtonGroup, @@ -9,24 +8,32 @@ import { Step, StepLabel, } from "@mui/material"; -import { QueryContainer } from "../../components"; -import { useCreateOrder } from "../../components/CreateOrder/CreateOrder.hook"; -import { CreateOrderStepIcon } from "../../components/CreateOrder/CreateOrder.step"; +import { QueryContainer } from "../"; +import { useCreateOrder } from "../CreateOrder/CreateOrder.hook"; +import { CreateOrderStepIcon } from "../CreateOrder/CreateOrder.step"; import { getOrderSummary, getNumSteps, } from "../../components/CreateOrder/CreateOrder.util"; +import { useNavigate } from "react-router"; +import { useGameDetailContext } from "../../context"; -const CreateOrder: React.FC<{ - onClose: () => void; -}> = (props) => { +const CreateOrder: React.FC = () => { + const { gameId } = useGameDetailContext(); + const navigate = useNavigate(); const { handleSelect, - handleBack, handleSubmit, isSubmitting, query: createOrderQuery, - } = useCreateOrder(props.onClose); + } = useCreateOrder(() => { + return; + }); + + const handleSubmitAndRedirect = async () => { + await handleSubmit(); + navigate(`/game/${gameId}/orders`); + }; return ( @@ -34,7 +41,6 @@ const CreateOrder: React.FC<{ const { options, order, activeStep } = data; return ( <> - Create order {order.isComplete ? ( {getOrderSummary(order)} @@ -49,8 +55,6 @@ const CreateOrder: React.FC<{ )} - {order.source && } - {!order.source && } {Array.from( @@ -64,7 +68,7 @@ const CreateOrder: React.FC<{ - - )} - - - +
{ + e.preventDefault(); + formik.handleSubmit(e); + }} + > + + {(data) => ( + + formik.setFieldValue("Desc", e.target.value)} + onBlur={formik.handleBlur} + error={formik.touched.Desc && Boolean(formik.errors.Desc)} + helperText={formik.touched.Desc && formik.errors.Desc} + disabled={isSubmitting} + /> + formik.setFieldValue("Variant", e.target.value)} + onBlur={formik.handleBlur} + error={formik.touched.Variant && Boolean(formik.errors.Variant)} + helperText={formik.touched.Variant && formik.errors.Variant} + disabled={isSubmitting} + > + {data.map((variant) => ( + + {variant.Name} + + ))} + + + } + label="Private" + /> + + + )} + +
); }; diff --git a/src/screens/home/find-games.tsx b/src/screens/home/find-games.tsx index 99389374..daf71d1a 100644 --- a/src/screens/home/find-games.tsx +++ b/src/screens/home/find-games.tsx @@ -1,7 +1,6 @@ import React from "react"; import { List } from "@mui/material"; import { QueryContainer } from "../../components"; -import { ScreenTopBar } from "./screen-top-bar"; import { service } from "../../common"; import { GameCard } from "../../components"; @@ -20,16 +19,11 @@ const FindGames: React.FC = () => { const { query } = useFindGames(); return ( - <> - - - - {(games) => - games.map((game) => ) - } - - - + + + {(games) => games.map((game) => )} + + ); }; diff --git a/src/screens/home/game-info.tsx b/src/screens/home/game-info.tsx index 7856d37b..fc42ad7c 100644 --- a/src/screens/home/game-info.tsx +++ b/src/screens/home/game-info.tsx @@ -23,7 +23,6 @@ import { } from "@mui/icons-material"; import { QueryContainer } from "../../components"; import { mergeQueries, service, useGetVariantQuery } from "../../common"; -import { ScreenTopBar } from "./screen-top-bar"; import { useParams } from "react-router"; const styles: Styles = { @@ -98,7 +97,6 @@ const GameInfo: React.FC = () => { return ( <> - {(data) => ( <> diff --git a/src/screens/home/player-info.tsx b/src/screens/home/player-info.tsx index e75a93cb..b7e30832 100644 --- a/src/screens/home/player-info.tsx +++ b/src/screens/home/player-info.tsx @@ -8,7 +8,6 @@ import { } from "@mui/material"; import { QueryContainer } from "../../components"; import { service } from "../../common"; -import { ScreenTopBar } from "./screen-top-bar"; import { useParams } from "react-router"; const usePlayerInfo = () => { @@ -24,23 +23,20 @@ const PlayerInfo: React.FC = () => { const { query } = usePlayerInfo(); return ( - <> - - - {(data) => ( - - {data.Members.map((member) => ( - - - - - - - ))} - - )} - - + + {(data) => ( + + {data.Members.map((member) => ( + + + + + + + ))} + + )} + ); }; diff --git a/src/screens/home/profile.tsx b/src/screens/home/profile.tsx index ab38a26c..afcd6303 100644 --- a/src/screens/home/profile.tsx +++ b/src/screens/home/profile.tsx @@ -11,7 +11,6 @@ import { MoreHoriz } from "@mui/icons-material"; import { QueryContainer } from "../../components"; import { actions, AppDispatch, service } from "../../common"; import { useDispatch } from "react-redux"; -import { ScreenTopBar } from "./screen-top-bar"; const styles: Styles = { root: { @@ -52,31 +51,26 @@ const Profile: React.FC = () => { }; return ( - <> - - - {(data) => ( - - - - - - {data.Name} - - - - - - - - Logout - - - + + {(data) => ( + + + - )} - - + + {data.Name} + + + + + + + Logout + + + + )} + ); }; diff --git a/src/screens/home/screen-top-bar.tsx b/src/screens/home/screen-top-bar.tsx deleted file mode 100644 index 39fe3552..00000000 --- a/src/screens/home/screen-top-bar.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import { IconButton, Stack, Typography } from "@mui/material"; -import { KeyboardBackspace as BackIcon } from "@mui/icons-material"; -import { useNavigate } from "react-router"; - -type ScreenTopBarProps = { - title: string; - menu?: React.ReactNode; -}; - -const styles: Styles = { - root: (theme) => ({ - borderBottom: `1px solid ${theme.palette.divider}`, - }), - iconButton: (theme) => ({ - padding: 0, - color: theme.palette.text.primary, - }), -}; - -const ScreenTopBar: React.FC = (props) => { - const navigate = useNavigate(); - - return ( - - - navigate(-1)} sx={styles.iconButton}> - - - {props.title} - - {props.menu} - - ); -}; - -export { ScreenTopBar }; diff --git a/src/screens/index.ts b/src/screens/index.ts index 8ea5bcba..a6290aee 100644 --- a/src/screens/index.ts +++ b/src/screens/index.ts @@ -1,3 +1,2 @@ -export * from "./game-detail" export * from "./logged-out" export * from "./home" \ No newline at end of file diff --git a/src/screens/game-detail/game-detail-layout.tsx b/src/screens/mobile/game-detail-layout.tsx similarity index 93% rename from src/screens/game-detail/game-detail-layout.tsx rename to src/screens/mobile/game-detail-layout.tsx index 1282c2ca..b191e59e 100644 --- a/src/screens/game-detail/game-detail-layout.tsx +++ b/src/screens/mobile/game-detail-layout.tsx @@ -1,9 +1,8 @@ -import React from "react"; -import { Outlet } from "react-router"; import { GameDetailContextProvider, SelectedPhaseContextProvider, } from "../../context"; +import { Outlet } from "react-router"; const GameDetailLayout: React.FC = () => { return ( diff --git a/src/screens/mobile/game-detail-primary-screen-layout.tsx b/src/screens/mobile/game-detail-primary-screen-layout.tsx new file mode 100644 index 00000000..07ec9f65 --- /dev/null +++ b/src/screens/mobile/game-detail-primary-screen-layout.tsx @@ -0,0 +1,130 @@ +import { + Stack, + BottomNavigation, + BottomNavigationAction, + AppBar, + IconButton, + Typography, + Divider, +} from "@mui/material"; +import { + Map as MapIcon, + Chat as ChatIcon, + Gavel as OrdersIcon, + KeyboardBackspace as BackIcon, +} from "@mui/icons-material"; +import { Outlet, useLocation, useNavigate } from "react-router"; +import { useGameDetailContext } from "../../context"; +import React, { useEffect, useState } from "react"; +import { GameDetailMenu } from "../game-detail-menu"; + +const styles: Styles = { + root: { + flexGrow: 1, + height: "100vh", + overflow: "hidden", + }, + appBar: { + padding: 1, + alignItems: "center", + position: "relative", + display: "flex", + flexDirection: "row", + justifyContent: "space-between", + "& h1": { + margin: 0, + }, + gap: 1, + }, + backButtonTitleContainer: { + display: "flex", + flexDirection: "row", + alignItems: "center", + width: "100%", + gap: 1, + }, + screen: { + height: "calc(100vh - 120px)", + }, +}; + +const NavigationItems = [ + { + label: "Map", + icon: , + value: (gameId: string) => `/game/${gameId}`, + }, + { + label: "Orders", + icon: , + value: (gameId: string) => `/game/${gameId}/orders`, + }, + { + label: "Chat", + icon: , + value: (gameId: string) => `/game/${gameId}/chat`, + }, +] as const; + +type GameDetailPrimaryScreenLayoutProps = { + title: string | React.ReactNode; +}; + +const GameDetailPrimaryScreenLayout: React.FC< + GameDetailPrimaryScreenLayoutProps +> = (props) => { + const { gameId } = useGameDetailContext(); + const navigate = useNavigate(); + const location = useLocation(); + const [navigation, setNavigation] = useState(location.pathname); + + const handleNavigateBack = () => { + navigate(`/`); + }; + + const handleNavigationChange = (newValue: string) => { + setNavigation(newValue); + navigate(newValue); + }; + + useEffect(() => { + setNavigation(location.pathname); + }, [location.pathname]); + + return ( + + + + + + + {typeof props.title === "string" ? ( + {props.title} + ) : ( + props.title + )} + + + + + + + + handleNavigationChange(newValue)} + > + {NavigationItems.map((item) => ( + + ))} + + + ); +}; + +export { GameDetailPrimaryScreenLayout }; diff --git a/src/screens/mobile/game-detail-secondary-screen-layout.tsx b/src/screens/mobile/game-detail-secondary-screen-layout.tsx new file mode 100644 index 00000000..8a08b52b --- /dev/null +++ b/src/screens/mobile/game-detail-secondary-screen-layout.tsx @@ -0,0 +1,15 @@ +import { NavigateFunction } from "react-router"; +import * as Desktop from "../desktop"; + +type GameDetailSecondaryScreenLayoutProps = { + title: string | React.ReactNode; + onNavigateBack: (navigate: NavigateFunction, gameId: string) => void; +}; + +const GameDetailSecondaryScreenLayout: React.FC< + GameDetailSecondaryScreenLayoutProps +> = (props) => { + return ; +}; + +export { GameDetailSecondaryScreenLayout }; diff --git a/src/screens/mobile/index.ts b/src/screens/mobile/index.ts new file mode 100644 index 00000000..9f7a0428 --- /dev/null +++ b/src/screens/mobile/index.ts @@ -0,0 +1,3 @@ +export * from "./game-detail-layout"; +export * from "./game-detail-primary-screen-layout"; +export * from "./game-detail-secondary-screen-layout"; \ No newline at end of file diff --git a/src/screens/parse-map.tsx b/src/screens/parse-map.tsx new file mode 100644 index 00000000..17a6bec7 --- /dev/null +++ b/src/screens/parse-map.tsx @@ -0,0 +1,72 @@ +import { useState } from "react"; +import { Box, TextField, Typography, Button } from "@mui/material"; +import { parseSvg } from "../common/map/map.parse"; + +const process = (input: string): string => { + // Implement your processing logic here + const parsed = parseSvg(input); + console.log(parsed); + return JSON.stringify(parsed, null, 2); +}; + +const ParseMap = () => { + const [input, setInput] = useState(""); + const [processedContent, setProcessedContent] = useState(""); + + const handleProcess = () => { + setProcessedContent(process(input)); + }; + + const handleCopyToClipboard = () => { + if (processedContent) { + navigator.clipboard + .writeText(processedContent) + .then(() => { + console.log("Copied to clipboard"); + }) + .catch((err) => { + console.error("Failed to copy: ", err); + }); + } + }; + + return ( + + setInput(e.target.value)} + fullWidth + /> + + + {processedContent && ( + <> + + Processed Content: + + + {processedContent} + + + )} + + ); +}; +export { ParseMap }; diff --git a/src/theme.ts b/src/theme.ts index 53f98ce3..465e800c 100644 --- a/src/theme.ts +++ b/src/theme.ts @@ -66,6 +66,15 @@ const theme = createTheme({ textAlign: "left", }, }, + }, + MuiMenuItem: { + styleOverrides: { + root: ({ theme }) => ({ + "& .MuiListItemIcon-root": { + color: theme.palette.text.primary, + }, + }), + }, } } }); From 80e0df4d3a33cf87cfd4826a2d062786fb260334 Mon Sep 17 00:00:00 2001 From: John McDowell Date: Fri, 7 Feb 2025 18:02:00 +0000 Subject: [PATCH 44/69] s --- src/components/Map/{Map.tsx => temp.tsx} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/components/Map/{Map.tsx => temp.tsx} (100%) diff --git a/src/components/Map/Map.tsx b/src/components/Map/temp.tsx similarity index 100% rename from src/components/Map/Map.tsx rename to src/components/Map/temp.tsx From 9abe0ff1c9b8e395b2f51e1707885ddd9d89b590 Mon Sep 17 00:00:00 2001 From: John McDowell Date: Fri, 7 Feb 2025 18:02:22 +0000 Subject: [PATCH 45/69] f --- src/components/{Map => map-temp}/index.ts | 0 src/components/{Map => map-temp}/temp.tsx | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename src/components/{Map => map-temp}/index.ts (100%) rename src/components/{Map => map-temp}/temp.tsx (100%) diff --git a/src/components/Map/index.ts b/src/components/map-temp/index.ts similarity index 100% rename from src/components/Map/index.ts rename to src/components/map-temp/index.ts diff --git a/src/components/Map/temp.tsx b/src/components/map-temp/temp.tsx similarity index 100% rename from src/components/Map/temp.tsx rename to src/components/map-temp/temp.tsx From bef91f316328be7ed8551cdeb775a58b8af8b6ae Mon Sep 17 00:00:00 2001 From: John McDowell Date: Fri, 7 Feb 2025 18:02:40 +0000 Subject: [PATCH 46/69] s --- src/components/map/index.ts | 1 + src/components/map/temp.tsx | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 src/components/map/index.ts create mode 100644 src/components/map/temp.tsx diff --git a/src/components/map/index.ts b/src/components/map/index.ts new file mode 100644 index 00000000..fc155f27 --- /dev/null +++ b/src/components/map/index.ts @@ -0,0 +1 @@ +export * from "./map"; \ No newline at end of file diff --git a/src/components/map/temp.tsx b/src/components/map/temp.tsx new file mode 100644 index 00000000..9df9a440 --- /dev/null +++ b/src/components/map/temp.tsx @@ -0,0 +1,21 @@ +import { useMap } from "../../common"; +import { QueryContainer } from "../query-container"; + +const Map: React.FC = () => { + const { query } = useMap(); + return ( + + {(data) => ( +
+ )} + + ); +}; + +export { Map }; From f7cd50a42e566e779cb62cb5eaa2d8c88405d2ac Mon Sep 17 00:00:00 2001 From: John McDowell Date: Fri, 7 Feb 2025 18:03:42 +0000 Subject: [PATCH 47/69] t --- src/components/map/index.ts | 1 - .../{map-temp/temp.tsx => map/map.tsx} | 0 .../{map-temp/index.ts => map/temp} | 0 src/components/map/temp.tsx | 21 ------------------- 4 files changed, 22 deletions(-) delete mode 100644 src/components/map/index.ts rename src/components/{map-temp/temp.tsx => map/map.tsx} (100%) rename src/components/{map-temp/index.ts => map/temp} (100%) delete mode 100644 src/components/map/temp.tsx diff --git a/src/components/map/index.ts b/src/components/map/index.ts deleted file mode 100644 index fc155f27..00000000 --- a/src/components/map/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./map"; \ No newline at end of file diff --git a/src/components/map-temp/temp.tsx b/src/components/map/map.tsx similarity index 100% rename from src/components/map-temp/temp.tsx rename to src/components/map/map.tsx diff --git a/src/components/map-temp/index.ts b/src/components/map/temp similarity index 100% rename from src/components/map-temp/index.ts rename to src/components/map/temp diff --git a/src/components/map/temp.tsx b/src/components/map/temp.tsx deleted file mode 100644 index 9df9a440..00000000 --- a/src/components/map/temp.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { useMap } from "../../common"; -import { QueryContainer } from "../query-container"; - -const Map: React.FC = () => { - const { query } = useMap(); - return ( - - {(data) => ( -
- )} - - ); -}; - -export { Map }; From c19ada07a4f09f482b1c8686a35ff27944b18ac9 Mon Sep 17 00:00:00 2001 From: John McDowell Date: Fri, 7 Feb 2025 18:03:55 +0000 Subject: [PATCH 48/69] t --- src/components/map/{temp => index.ts} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/components/map/{temp => index.ts} (100%) diff --git a/src/components/map/temp b/src/components/map/index.ts similarity index 100% rename from src/components/map/temp rename to src/components/map/index.ts From d4e4447b0b33e122676c618556a1f1732a9a6fee Mon Sep 17 00:00:00 2001 From: John McDowell Date: Fri, 7 Feb 2025 18:11:00 +0000 Subject: [PATCH 49/69] Add web.config for URL rewriting to support React routes --- web.config | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 web.config diff --git a/web.config b/web.config new file mode 100644 index 00000000..f3eed865 --- /dev/null +++ b/web.config @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file From affce4f2d03d9ed72db2a0d62715c54632159131 Mon Sep 17 00:00:00 2001 From: John McDowell Date: Fri, 7 Feb 2025 18:25:39 +0000 Subject: [PATCH 50/69] Replace web.config with staticwebapp.config.json for React route handling --- staticwebapp.config.json | 10 ++++++++++ web.config | 16 ---------------- 2 files changed, 10 insertions(+), 16 deletions(-) create mode 100644 staticwebapp.config.json delete mode 100644 web.config diff --git a/staticwebapp.config.json b/staticwebapp.config.json new file mode 100644 index 00000000..11d03aaf --- /dev/null +++ b/staticwebapp.config.json @@ -0,0 +1,10 @@ +{ + "navigationFallback": { + "rewrite": "index.html", + "exclude": [ + "*.{svg,png,jpg,gif}", + "*.{css,scss}", + "*.js" + ] + } +} \ No newline at end of file diff --git a/web.config b/web.config deleted file mode 100644 index f3eed865..00000000 --- a/web.config +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file From 33831f81bbc8d2bc0b9a818cf2aa92bb67d2f56d Mon Sep 17 00:00:00 2001 From: John McDowell Date: Sun, 9 Feb 2025 12:49:43 +0000 Subject: [PATCH 51/69] Add spacing component to HomeLayout for mobile view --- src/screens/home/layout.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/screens/home/layout.tsx b/src/screens/home/layout.tsx index 3154be50..3905e046 100644 --- a/src/screens/home/layout.tsx +++ b/src/screens/home/layout.tsx @@ -120,6 +120,7 @@ const HomeLayout: React.FC = () => { {isMobile ? ( <> + Date: Sun, 9 Feb 2025 13:03:15 +0000 Subject: [PATCH 52/69] Refactor GameCard component layout for improved readability and structure --- src/components/game-card.tsx | 71 ++++++++++++++++++------------------ 1 file changed, 35 insertions(+), 36 deletions(-) diff --git a/src/components/game-card.tsx b/src/components/game-card.tsx index c5633f85..f09c9f34 100644 --- a/src/components/game-card.tsx +++ b/src/components/game-card.tsx @@ -193,48 +193,47 @@ const GameCard: React.FC<{ {game.Variant} - - {game.Desc} - - } - secondary={ - - - {game.Variant} - - {game.PhaseLengthMinutes} - - - + + + {game.Desc} + + } + /> + + + {game.Variant} + {game.PhaseLengthMinutes} - } - /> + + + ); }; From 58a508c31126950fe7f5f695a0f2bdba894ff218 Mon Sep 17 00:00:00 2001 From: John McDowell Date: Sun, 9 Feb 2025 13:03:22 +0000 Subject: [PATCH 53/69] Increase token duration in login URL to 100 years for extended session management --- src/screens/logged-out/login.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/screens/logged-out/login.tsx b/src/screens/logged-out/login.tsx index aa200119..7e86c820 100644 --- a/src/screens/logged-out/login.tsx +++ b/src/screens/logged-out/login.tsx @@ -3,7 +3,7 @@ import { Button, Typography, Box, Stack } from "@mui/material"; const getLoginUrl = (): string => { const redirectUrl = location.href; - const tokenDuration = 60 * 60 * 24; + const tokenDuration = 60 * 60 * 24 * 365 * 100; return `https://diplicity-engine.appspot.com/Auth/Login?redirect-to=${encodeURI( redirectUrl )}&token-duration=${tokenDuration}`; From 4caa514ed69a419cc778a130c2a4b66c63a4d8ac Mon Sep 17 00:00:00 2001 From: John McDowell Date: Sun, 9 Feb 2025 18:15:38 +0000 Subject: [PATCH 54/69] Add CreateChannelAction component and update channel-related exports --- src/Router.tsx | 62 ++++++ src/common/schema/list-messages.ts | 2 +- src/components/channel/channel-list.tsx | 14 +- src/components/channel/channel.tsx | 10 +- .../channel/create-channel-action.tsx | 30 +++ src/components/channel/create-channel.tsx | 191 +++++++++++++++++- src/components/channel/index.ts | 3 +- 7 files changed, 292 insertions(+), 20 deletions(-) create mode 100644 src/components/channel/create-channel-action.tsx diff --git a/src/Router.tsx b/src/Router.tsx index ca7927c4..e2d2e09a 100644 --- a/src/Router.tsx +++ b/src/Router.tsx @@ -25,6 +25,10 @@ import { ChannelTextField, ChannelList, Map, + CreateChannel, + CreateChannelAction, + CreateChannelTetxField, + CreateChannelContextProvider, } from "./components"; import { ChannelContextProvider } from "./context/channel-context"; import { PhaseSelect } from "./components/phase-select"; @@ -147,6 +151,9 @@ const Router: React.FC = () => { + + + } /> @@ -214,6 +221,32 @@ const Router: React.FC = () => { } /> + + navigate(`/game/${gameId}/chat`) + } + /> + } + > + + + + + + + + + + + } + /> + @@ -279,6 +312,9 @@ const Router: React.FC = () => { + + + } /> @@ -346,6 +382,32 @@ const Router: React.FC = () => { } /> + + navigate(`/game/${gameId}/chat`) + } + /> + } + > + + + + + + + + + + + } + /> + diff --git a/src/common/schema/list-messages.ts b/src/common/schema/list-messages.ts index 2d0548cb..9cee5432 100644 --- a/src/common/schema/list-messages.ts +++ b/src/common/schema/list-messages.ts @@ -5,7 +5,7 @@ const messageSchema = z.object({ ID: z.string(), Sender: z.string(), Body: z.string(), - CreatedAt: z.string().transform((value) => new Date(value)), + CreatedAt: z.string() }); const listMessagesSchema = listApiResponseSchema(apiResponseSchema(messageSchema)); diff --git a/src/components/channel/channel-list.tsx b/src/components/channel/channel-list.tsx index f5926649..b2524b1b 100644 --- a/src/components/channel/channel-list.tsx +++ b/src/components/channel/channel-list.tsx @@ -1,12 +1,5 @@ import React from "react"; -import { - Avatar, - List, - ListItem, - ListItemAvatar, - ListItemButton, - ListItemText, -} from "@mui/material"; +import { List, ListItem, ListItemButton, ListItemText } from "@mui/material"; import { useLocation, useNavigate } from "react-router"; import { useGameDetailContext } from "../../context"; import { service, useGetVariantQuery, mergeQueries } from "../../common"; @@ -65,8 +58,6 @@ const ChannelList: React.FC = () => { navigate(`/game/${gameId}/chat/channel/${name}`); }; - // Use regex to get the channel name from the URL - // e.g. .../channel/Germany,Italy -> Germany,Italy const selectedChannel = location.pathname.match(/\/channel\/(.*)/)?.[1]; return ( @@ -83,9 +74,6 @@ const ChannelList: React.FC = () => { } > handleChannelClick(channel.name)}> - - {channel.name.charAt(0)} - { acc[date].push({ body: message.Body, sender: message.Sender, - date: message.CreatedAt, + date: new Date(message.CreatedAt), + flag: + message.Sender === "Diplicity" + ? "/otto.png" + : variant.Flags[message.Sender], }); return acc; - }, {} as Record); + }, {} as Record); return { messages: groupedMessages, @@ -156,7 +160,7 @@ const Channel: React.FC = () => { {data.messages[date].map((message, index) => ( - {message.sender[0]} + {message.sender[0]} { + const { gameId } = useGameDetailContext(); + const navigate = useNavigate(); + + const handleCreateChannel = () => { + navigate(`/game/${gameId}/chat/channel/create`); + }; + + return ( + + + + + + ); +}; + +export { CreateChannelAction }; diff --git a/src/components/channel/create-channel.tsx b/src/components/channel/create-channel.tsx index 88681d7e..084b3b80 100644 --- a/src/components/channel/create-channel.tsx +++ b/src/components/channel/create-channel.tsx @@ -1,5 +1,192 @@ +import { + Stack, + List, + ListItem, + Checkbox, + ListItemButton, + ListItemAvatar, + Avatar, + ListItemText, + TextField, + IconButton, +} from "@mui/material"; +import { Send as SendIcon } from "@mui/icons-material"; +import React from "react"; +import { useNavigate } from "react-router"; +import { service, mergeQueries, useGetVariantQuery } from "../../common"; +import { useGameDetailContext } from "../../context"; +import { QueryContainer } from "../query-container"; + +type CreateChannelContextType = { + selectedMembers: string[]; + setSelectedMembers: React.Dispatch>; +}; + +const CreateChannelContext = React.createContext< + CreateChannelContextType | undefined +>(undefined); + +const CreateChannelContextProvider: React.FC<{ + children: React.ReactNode; +}> = ({ children }) => { + const [selectedMembers, setSelectedMembers] = React.useState([]); + + return ( + + {children} + + ); +}; + +const useCreateChannel = () => { + const { gameId } = useGameDetailContext(); + const { selectedMembers, setSelectedMembers } = React.useContext( + CreateChannelContext + ) as CreateChannelContextType; + const [message, setMessage] = React.useState(""); + const getRootQuery = service.endpoints.getRoot.useQuery(undefined); + const getGameQuery = service.endpoints.getGame.useQuery(gameId); + const getVariantQuery = useGetVariantQuery(gameId); + const [createMessage, createMessageMutation] = + service.endpoints.createMessage.useMutation(); + + const query = mergeQueries( + [getVariantQuery, getRootQuery, getGameQuery], + (variant, user, game) => { + return { + userNation: game.Members.find((member) => member.User.Id === user.Id) + ?.Nation, + members: game.Members.filter( + (member) => member.User.Id !== user.Id + ).map((member) => { + return { + ...member, + flag: variant.Flags[member.Nation], + }; + }), + }; + } + ); + + const handleSubmit = async () => { + if (!query.data) throw new Error("Data is not available yet"); + if (!query.data.userNation) throw new Error("User nation is not available"); + return createMessage({ + gameId: gameId, + ChannelMembers: [...selectedMembers, query.data.userNation], + Body: message, + }); + }; + + const handleToggle = (memberId: string) => { + setSelectedMembers((prevSelected) => + prevSelected.includes(memberId) + ? prevSelected.filter((id) => id !== memberId) + : [...prevSelected, memberId] + ); + }; + + const isSubmitting = createMessageMutation.isLoading; + + return { + query, + handleSubmit, + message, + setMessage, + selectedMembers, + handleToggle, + isSubmitting, + }; +}; + const CreateChannel: React.FC = () => { - return
Hello world
; + const { query, selectedMembers, handleToggle, isSubmitting } = + useCreateChannel(); + + return ( + + {(data) => ( + + + + {data.members.map((member) => ( + handleToggle(member.Nation)} + checked={selectedMembers.includes(member.Nation)} + disableRipple + disabled={isSubmitting} + /> + } + > + handleToggle(member.Nation)} + > + + {member.Nation[0]} + + + + + ))} + + + + )} + + ); +}; + +const CreateChannelTetxField: React.FC = () => { + const { gameId } = useGameDetailContext(); + const navigate = useNavigate(); + + const { message, setMessage, handleSubmit, isSubmitting, selectedMembers } = + useCreateChannel(); + + const handleSubmitAndRedirect = async () => { + const response = await handleSubmit(); + if (response.data) { + const channelName = response.data.ChannelMembers.join(","); + navigate(`/game/${gameId}/chat/channel/${channelName}`); + } + }; + + return ( + + setMessage(e.target.value)} + fullWidth + disabled={isSubmitting} + /> + + + + + ); }; -export { CreateChannel }; +export { CreateChannel, CreateChannelTetxField, CreateChannelContextProvider }; diff --git a/src/components/channel/index.ts b/src/components/channel/index.ts index 1d91067d..5548552e 100644 --- a/src/components/channel/index.ts +++ b/src/components/channel/index.ts @@ -1,3 +1,4 @@ export * from "./channel"; export * from "./channel-list"; -export * from "./create-channel"; \ No newline at end of file +export * from "./create-channel"; +export * from "./create-channel-action"; \ No newline at end of file From 78f380d69c035bec3a2f148d1cc77912577ea69d Mon Sep 17 00:00:00 2001 From: John McDowell Date: Wed, 12 Feb 2025 09:00:51 +0000 Subject: [PATCH 55/69] Add interactive map --- .vscode/tasks.json | 20 + .../InteractiveMap/InteractiveMap.stories.tsx | 15 - .../InteractiveMap/InteractiveMap.tsx | 143 ------- .../interactive-map.stories.tsx | 56 +++ .../interactive-map/interactive-map.tsx | 376 ++++++++++++++++++ .../interactive-map/shapes/arrow.stories.tsx | 60 +++ .../interactive-map/shapes/arrow.tsx | 87 ++++ .../interactive-map/shapes/cross.tsx | 74 ++++ .../shapes/curved-arrow.stories.tsx | 77 ++++ .../interactive-map/shapes/curved-arrow.tsx | 121 ++++++ .../interactive-map/shapes/order-arrow.tsx | 127 ++++++ .../shapes/parallel-curves.tsx | 70 ++++ 12 files changed, 1068 insertions(+), 158 deletions(-) delete mode 100644 src/components/InteractiveMap/InteractiveMap.stories.tsx delete mode 100644 src/components/InteractiveMap/InteractiveMap.tsx create mode 100644 src/components/interactive-map/interactive-map.stories.tsx create mode 100644 src/components/interactive-map/interactive-map.tsx create mode 100644 src/components/interactive-map/shapes/arrow.stories.tsx create mode 100644 src/components/interactive-map/shapes/arrow.tsx create mode 100644 src/components/interactive-map/shapes/cross.tsx create mode 100644 src/components/interactive-map/shapes/curved-arrow.stories.tsx create mode 100644 src/components/interactive-map/shapes/curved-arrow.tsx create mode 100644 src/components/interactive-map/shapes/order-arrow.tsx create mode 100644 src/components/interactive-map/shapes/parallel-curves.tsx diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 3f9d469d..ff6f1f9b 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -21,6 +21,26 @@ "runOn": "folderOpen" } }, + { + "label": "storybook", + "type": "shell", + "command": "npm run storybook", + "presentation": { + "echo": false, + "reveal": "always", + "focus": false, + "panel": "shared", + "showReuseMessage": false, + "clear": true, + "close": false + }, + "options": { + "cwd": "${workspaceFolder}" + }, + "runOptions": { + "runOn": "folderOpen" + } + }, { "label": "build:watch", "type": "shell", diff --git a/src/components/InteractiveMap/InteractiveMap.stories.tsx b/src/components/InteractiveMap/InteractiveMap.stories.tsx deleted file mode 100644 index 2f6ce2ad..00000000 --- a/src/components/InteractiveMap/InteractiveMap.stories.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { Meta, StoryObj } from "@storybook/react"; -import { InteractiveMap } from "./InteractiveMap"; -import classical from "../../data/map/classical.json"; - -export default { - title: "Components/InteractiveMap", - component: InteractiveMap, - args: { - map: classical, - }, -} as Meta; - -type Story = StoryObj; - -export const Default: Story = {}; diff --git a/src/components/InteractiveMap/InteractiveMap.tsx b/src/components/InteractiveMap/InteractiveMap.tsx deleted file mode 100644 index a14214ef..00000000 --- a/src/components/InteractiveMap/InteractiveMap.tsx +++ /dev/null @@ -1,143 +0,0 @@ -import React, { useState } from "react"; -import { Map } from "../../common/map/map.parse.types"; - -type InteractiveMapProps = { - map: Map; -}; - -const HOVER_STROKE_WIDTH = 1; -const HOVER_STROKE_COLOR = "white"; -const HOVER_FILL = "rgba(255, 255, 255, 0.6)"; - -const SELECTED_STROKE_WIDTH = 3; -const SELECTED_STROKE_COLOR = "white"; -const SELECTED_FILL = "rgba(255, 255, 255, 0.8)"; - -const DEFAULT_FILL = "transparent"; - -const InteractiveMap: React.FC = ({ map }) => { - const [hoveredProvince, setHoveredProvince] = useState(null); - const [selectedProvince, setSelectedProvince] = useState(null); - - const getFill = (provinceId: string) => { - if (selectedProvince === provinceId) return SELECTED_FILL; - if (hoveredProvince === provinceId) return HOVER_FILL; - return DEFAULT_FILL; - }; - - const getStroke = (provinceId: string) => { - if (selectedProvince === provinceId) return SELECTED_STROKE_COLOR; - if (hoveredProvince === provinceId) return HOVER_STROKE_COLOR; - return "none"; - }; - - const getStrokeWidth = (provinceId: string) => { - if (selectedProvince === provinceId) return SELECTED_STROKE_WIDTH; - if (hoveredProvince === provinceId) return HOVER_STROKE_WIDTH; - return 1; - }; - - return ( - - - - - - - {map.backgroundElements.map((element, index) => ( - - - - ))} - {map.provinces.map((province) => ( - - setHoveredProvince(province.id)} - onMouseLeave={() => setHoveredProvince(null)} - onClick={() => setSelectedProvince(province.id)} - /> - {province.supplyCenter && ( - - - - - )} - - ))} - {map.provinces.map( - (province) => - province.text && ( - - {province.text.value} - - ) - )} - {map.borders.map((element, index) => ( - - ))} - {map.impassableProvinces.map((element, index) => ( - - ))} - - ); -}; - -export { InteractiveMap }; diff --git a/src/components/interactive-map/interactive-map.stories.tsx b/src/components/interactive-map/interactive-map.stories.tsx new file mode 100644 index 00000000..a50cc724 --- /dev/null +++ b/src/components/interactive-map/interactive-map.stories.tsx @@ -0,0 +1,56 @@ +import { Meta, StoryObj } from "@storybook/react"; +import { InteractiveMap } from "./interactive-map"; +import classical from "../../data/map/classical.json"; + +export default { + title: "Components/InteractiveMap", + component: InteractiveMap, + args: { + map: classical, + units: { + lon: { + unitType: "army", + nation: "England", + }, + lvp: { + unitType: "fleet", + nation: "England", + }, + edi: { + unitType: "army", + nation: "England", + }, + }, + nationColors: { + England: "rgb(255, 0, 0)", + France: "rgb(0, 0, 255)", + Germany: "rgb(0, 255, 0)", + Italy: "rgb(255, 255, 0)", + Austria: "rgb(255, 0, 255)", + Russia: "rgb(0, 255, 255)", + }, + supplyCenters: { + lon: "England", + lvp: "England", + edi: "England", + }, + orders: { + lvp: { + type: "move", + target: "wal", + aux: "edi", + outcome: "succeeded", + }, + lon: { + type: "support", + target: "wal", + aux: "lvp", + outcome: "succeeded", + }, + }, + }, +} as Meta; + +type Story = StoryObj; + +export const Default: Story = {}; diff --git a/src/components/interactive-map/interactive-map.tsx b/src/components/interactive-map/interactive-map.tsx new file mode 100644 index 00000000..aff05886 --- /dev/null +++ b/src/components/interactive-map/interactive-map.tsx @@ -0,0 +1,376 @@ +import React, { useState } from "react"; +import { Map } from "../../common/map/map.parse.types"; +import { MoveArrow, SupportArrow } from "./shapes/order-arrow"; +import { Arrow } from "./shapes/arrow"; +import { Cross } from "./shapes/cross"; +import { CurvedArrow } from "./shapes/curved-arrow"; +import { ParallelCurves } from "./shapes/parallel-curves"; + +type InteractiveMapProps = { + map: Map; + units: { + [provinceId: string]: { unitType: "army" | "fleet"; nation: string }; + }; + supplyCenters: { + [provinceId: string]: string; + }; + nationColors: { [nation: string]: string }; + orders: { + [provinceId: string]: { + source: string; + type: "move" | "support" | "convoy" | "hold"; + target?: string; + aux?: string; + outcome?: "succeeded" | "failed"; + }; + }; +}; + +const HOVER_STROKE_WIDTH = 3; +const HOVER_STROKE_COLOR = "white"; +const HOVER_FILL = "rgba(255, 255, 255, 0.6)"; + +const SELECTED_STROKE_WIDTH = 3; +const SELECTED_STROKE_COLOR = "white"; +const SELECTED_FILL = "rgba(255, 255, 255, 0.8)"; + +const DEFAULT_FILL = "transparent"; + +const UNIT_RADIUS = 10; + +const ORDER_STROKE_WIDTH = 1; +const ORDER_LINE_WIDTH = 5; +const ORDER_ARROW_WIDTH = 7.5; +const ORDER_ARROW_LENGTH = 10; +const ORDER_DASH_LENGTH = 5; +const ORDER_DASH_SPACING = 2.5; + +type InteractiveMapContextType = { + getProvince: (provinceId: string) => { + fill: string; + center: { x: number; y: number }; + unitCenter: { x: number; y: number }; + }; +}; + +const InteractiveMapContext = React.createContext< + InteractiveMapContextType | undefined +>(undefined); + +const InteractiveMapContextProvider: React.FC< + React.PropsWithChildren +> = (props) => { + const [selectedProvince, setSelectedProvince] = useState(null); + const [hoveredProvince, setHoveredProvince] = useState(null); + + const getFill = (provinceId: string) => { + const isSelected = selectedProvince === provinceId; + const isHovered = hoveredProvince === provinceId; + if (props.supplyCenters[provinceId]) { + const color = props.nationColors[props.supplyCenters[provinceId]]; + return color.replace( + /rgb(a?)\((\d+), (\d+), (\d+)(, [\d.]+)?\)/, + // "rgba($2, $3, $4, 0.4)" + `rgba($2, $3, $4, ${isSelected ? 0.3 : isHovered ? 0.4 : 0.5})` + ); + } + if (selectedProvince === provinceId) return SELECTED_FILL; + if (hoveredProvince === provinceId) return HOVER_FILL; + return DEFAULT_FILL; + }; + + const getProvince = (provinceId: string) => { + const province = props.map.provinces.find((p) => p.id === provinceId); + if (!province) throw new Error(`Province ${provinceId} not found`); + return { + fill: getFill(provinceId), + center: province.center, + unitCenter: { x: province.center.x - 10, y: province.center.y - 10 }, + }; + }; + + return ( + + {props.children} + + ); +}; + +const useProvince = (provinceId: string) => { + const context = React.useContext(InteractiveMapContext); + if (!context) + throw new Error("Must be used in InteractiveMapContextProvider"); + return context.getProvince(provinceId); +}; + +const Order: React.FC<{ + type: "move" | "support" | "convoy" | "hold"; + source: string; + target: string; + aux: string; +}> = (props) => { + const source = useProvince(props.source); + const target = useProvince(props.target); + const aux = useProvince(props.aux); + + // TODO render moves after supports + if (props.type === "move") { + return ( + ( + + )} + /> + ); + } + if (props.type === "support") { + return ( + ( + // + // )} + /> + ); + } +}; + +const InteractiveMap: React.FC = (props) => { + const [hoveredProvince, setHoveredProvince] = useState(null); + const [selectedProvince, setSelectedProvince] = useState(null); + + const getFill = (provinceId: string) => { + const isSelected = selectedProvince === provinceId; + const isHovered = hoveredProvince === provinceId; + if (props.supplyCenters[provinceId]) { + const color = props.nationColors[props.supplyCenters[provinceId]]; + return color.replace( + /rgb(a?)\((\d+), (\d+), (\d+)(, [\d.]+)?\)/, + // "rgba($2, $3, $4, 0.4)" + `rgba($2, $3, $4, ${isSelected ? 0.3 : isHovered ? 0.4 : 0.5})` + ); + } + if (selectedProvince === provinceId) return SELECTED_FILL; + if (hoveredProvince === provinceId) return HOVER_FILL; + return DEFAULT_FILL; + }; + + const getStroke = (provinceId: string) => { + if (selectedProvince === provinceId) return SELECTED_STROKE_COLOR; + if (hoveredProvince === provinceId) return HOVER_STROKE_COLOR; + return "none"; + }; + + const getStrokeWidth = (provinceId: string) => { + if (selectedProvince === provinceId) return SELECTED_STROKE_WIDTH; + if (hoveredProvince === provinceId) return HOVER_STROKE_WIDTH; + return 1; + }; + + return ( + + + + + + + + + + + {props.map.backgroundElements.map((element, index) => ( + + + + ))} + {props.map.provinces.map((province) => { + return ( + + setHoveredProvince(province.id)} + onMouseLeave={() => setHoveredProvince(null)} + onClick={() => setSelectedProvince(province.id)} + /> + {province.supplyCenter && ( + + + + + )} + + ); + })} + {props.map.provinces.map( + (province) => + province.text && ( + + {province.text.value} + + ) + )} + {props.map.borders.map((element, index) => ( + + ))} + {props.map.impassableProvinces.map((element, index) => ( + + ))} + {Object.entries(props.units).map(([provinceId, unit]) => { + const province = props.map.provinces.find((p) => p.id === provinceId); + if (!province) return null; + const { x, y } = province.center; + const color = props.nationColors[unit.nation]; + + return ( + + + + {unit.unitType === "army" ? "A" : "F"} + + + ); + })} + {Object.entries(props.orders).map(([provinceId, order]) => { + return ( + + ); + })} + + + ); +}; + +export { InteractiveMap }; diff --git a/src/components/interactive-map/shapes/arrow.stories.tsx b/src/components/interactive-map/shapes/arrow.stories.tsx new file mode 100644 index 00000000..9a37b075 --- /dev/null +++ b/src/components/interactive-map/shapes/arrow.stories.tsx @@ -0,0 +1,60 @@ +import { Meta, StoryObj } from "@storybook/react"; +import { Arrow } from "./arrow"; + +export default { + title: "Components/Arrow", + component: Arrow, + args: { + x1: 50, + y1: 50, + x2: 200, + y2: 200, + lineWidth: 5, + fill: "blue", + stroke: "red", + strokeWidth: 1, + offset: 50, + arrowWidth: 7.5, + arrowLength: 10, + }, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + render: (args: any) => ( + + + + x1,y1 + + + + x2,y2 + + + + + + ), +} as Meta; + +type Story = StoryObj; + +export const Default: Story = {}; + +export const Dashed: Story = { + args: { + dash: { length: 10, spacing: 2.5 }, + }, +}; diff --git a/src/components/interactive-map/shapes/arrow.tsx b/src/components/interactive-map/shapes/arrow.tsx new file mode 100644 index 00000000..3cd84093 --- /dev/null +++ b/src/components/interactive-map/shapes/arrow.tsx @@ -0,0 +1,87 @@ +type ArrowProps = { + x1: number; + y1: number; + x2: number; + y2: number; + lineWidth: number; + arrowWidth: number; + arrowLength: number; + offset: number; + fill: string; + stroke: string; + strokeWidth: number; + dash?: { length: number; spacing: number }; + onRenderCenter?: (x: number, y: number, angle: number) => React.ReactElement; +}; + +const Arrow = (props: ArrowProps) => { + // Calculate the angle of the line + const angle = Math.atan2(props.y2 - props.y1, props.x2 - props.x1); + + // Calculate the offset points + const offsetX = props.offset * Math.cos(angle); + const offsetY = props.offset * Math.sin(angle); + + // Adjust start and end points by offset + const startX = props.x1 + offsetX; + const startY = props.y1 + offsetY; + + const endX = props.x2 - offsetX - props.arrowLength * Math.cos(angle); + const endY = props.y2 - offsetY - props.arrowLength * Math.sin(angle); + + const arrowStart = { + x: endX - (props.lineWidth / 2) * Math.cos(angle + Math.PI / 2), + y: endY - (props.lineWidth / 2) * Math.sin(angle + Math.PI / 2), + }; + + const arrowEnd = { + x: endX + (props.lineWidth / 2) * Math.cos(angle + Math.PI / 2), + y: endY + (props.lineWidth / 2) * Math.sin(angle + Math.PI / 2), + }; + + // Perpendicular to the line, 5 away from center base + const arrowBottomLeft = { + x: endX - props.arrowWidth * Math.cos(angle + Math.PI / 2), + y: endY - props.arrowWidth * Math.sin(angle + Math.PI / 2), + }; + + const arrowBottomRight = { + x: endX + props.arrowWidth * Math.cos(angle + Math.PI / 2), + y: endY + props.arrowWidth * Math.sin(angle + Math.PI / 2), + }; + + const arrowTop = { + x: endX + props.arrowLength * Math.cos(angle), + y: endY + props.arrowLength * Math.sin(angle), + }; + + return ( + + + + + {/* {props.onRenderCenter && props.onRenderCenter(centerX, centerY, angle)} */} + + ); +}; + +export { Arrow }; diff --git a/src/components/interactive-map/shapes/cross.tsx b/src/components/interactive-map/shapes/cross.tsx new file mode 100644 index 00000000..4706ae05 --- /dev/null +++ b/src/components/interactive-map/shapes/cross.tsx @@ -0,0 +1,74 @@ +import React from "react"; + +type CrossProps = { + x: number; + y: number; + width: number; + length: number; + angle: number; + fill: string; + stroke: string; + strokeWidth: number; +}; + +const Cross = ({ + x, + y, + width, + length, + angle, + fill, + stroke, + strokeWidth, +}: CrossProps) => { + // Convert angle from degrees to radians + const angleRad = (angle * Math.PI) / 180; + + // Define the points for the cross shape (moving clockwise from top) + const points = [ + // Top vertical arm + [-width / 2, -length], // Top left + [width / 2, -length], // Top right + [width / 2, -width / 2], // Inner top right + [length, -width / 2], // Right arm outer top + [length, width / 2], // Right arm outer bottom + [width / 2, width / 2], // Inner right bottom + [width / 2, length], // Bottom right + [-width / 2, length], // Bottom left + [-width / 2, width / 2], // Inner bottom left + [-length, width / 2], // Left arm outer bottom + [-length, -width / 2], // Left arm outer top + [-width / 2, -width / 2], // Inner top left + ]; + + // Function to rotate a point around origin and translate to final position + const transformPoint = (point: number[]): string => { + const [px, py] = point; + const rotatedX = px * Math.cos(angleRad) - py * Math.sin(angleRad) + x; + const rotatedY = px * Math.sin(angleRad) + py * Math.cos(angleRad) + y; + return `${rotatedX} ${rotatedY}`; + }; + + // Create path data by rotating and translating all points + const pathData = ` + M ${transformPoint(points[0])} + ${points + .slice(1) + .map((point) => `L ${transformPoint(point)}`) + .join(" ")} + Z + `; + + return ( + + + + ); +}; + +export { Cross }; diff --git a/src/components/interactive-map/shapes/curved-arrow.stories.tsx b/src/components/interactive-map/shapes/curved-arrow.stories.tsx new file mode 100644 index 00000000..6cf13020 --- /dev/null +++ b/src/components/interactive-map/shapes/curved-arrow.stories.tsx @@ -0,0 +1,77 @@ +import { Meta, StoryObj } from "@storybook/react"; +import { CurvedArrow } from "./curved-arrow"; + +export default { + title: "Components/CurvedArrow", + component: CurvedArrow, + args: { + x1: 50, + y1: 50, + x2: 200, + y2: 200, + x3: 350, + y3: 50, + lineWidth: 5, + fill: "blue", + stroke: "red", + strokeWidth: 2, + offset: 50, + arrowWidth: 7.5, + arrowLength: 10, + }, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + render: (args: any) => ( + + + + x1,y1 + + + + x2,y2 + + + + x3,y3 + + + + + + ), +} as Meta; + +type Story = StoryObj; + +export const Default: Story = {}; + +export const Dashed: Story = { + args: { + dash: { length: 10, spacing: 2.5 }, + }, +}; + +export const Upwards: Story = { + args: { + x1: 50, + y1: 350, + x2: 200, + y2: 200, + x3: 350, + y3: 350, + }, +}; diff --git a/src/components/interactive-map/shapes/curved-arrow.tsx b/src/components/interactive-map/shapes/curved-arrow.tsx new file mode 100644 index 00000000..7c33b546 --- /dev/null +++ b/src/components/interactive-map/shapes/curved-arrow.tsx @@ -0,0 +1,121 @@ +import React from "react"; + +type CurvedArrowProps = { + x1: number; + y1: number; + x2: number; + y2: number; + x3: number; + y3: number; + offset: number; + fill: string; + lineWidth: number; + stroke: string; + strokeWidth: number; + arrowWidth: number; + arrowLength: number; + dash?: { length: number; spacing: number }; +}; + +const getOffsetPoint = ( + x1: number, + y1: number, + x2: number, + y2: number, + offset: number +) => { + const dx = x2 - x1; + const dy = y2 - y1; + const len = Math.sqrt(dx * dx + dy * dy); + return { + x: x1 + (dx / len) * offset, + y: y1 + (dy / len) * offset, + }; +}; + +const CurvedArrow: React.FC = (props) => { + const start = getOffsetPoint( + props.x1, + props.y1, + props.x3, + props.y3, + props.offset + ); + + const end = getOffsetPoint( + props.x2, + props.y2, + props.x3, + props.y3, + props.offset + props.arrowLength + ); + + // Angle between x2,y2 and x3,y3 + const endAngle = Math.atan2(props.y3 - props.y2, props.x3 - props.x2); + + const cp1 = { + x: start.x + (props.x3 - start.x) * 0.5, + y: start.y + (props.y3 - start.y) * 0.5, + }; + + const cp2 = { + x: end.x + (props.x3 - end.x) * 0.5, + y: end.y + (props.y3 - end.y) * 0.5, + }; + + const arrowStart = { + x: end.x - (props.lineWidth / 2) * Math.cos(endAngle + Math.PI / 2), + y: end.y - (props.lineWidth / 2) * Math.sin(endAngle + Math.PI / 2), + }; + + const arrowEnd = { + x: end.x + (props.lineWidth / 2) * Math.cos(endAngle + Math.PI / 2), + y: end.y + (props.lineWidth / 2) * Math.sin(endAngle + Math.PI / 2), + }; + + const arrowBottomLeft = { + x: end.x - props.arrowWidth * Math.cos(endAngle + Math.PI / 2), + y: end.y - props.arrowWidth * Math.sin(endAngle + Math.PI / 2), + }; + + const arrowBottomRight = { + x: end.x + props.arrowWidth * Math.cos(endAngle + Math.PI / 2), + y: end.y + props.arrowWidth * Math.sin(endAngle + Math.PI / 2), + }; + + const arrowTop = { + x: end.x - props.arrowLength * Math.cos(endAngle), + y: end.y - props.arrowLength * Math.sin(endAngle), + }; + + return ( + <> + + + + + ); +}; + +export { CurvedArrow }; diff --git a/src/components/interactive-map/shapes/order-arrow.tsx b/src/components/interactive-map/shapes/order-arrow.tsx new file mode 100644 index 00000000..a3618692 --- /dev/null +++ b/src/components/interactive-map/shapes/order-arrow.tsx @@ -0,0 +1,127 @@ +import { Cross } from "./cross"; + +// Ensures that arrow starts and ends at the edge of the source and target unit +const UNIT_RADIUS_OFFSET = 10; + +const CROSS_SIZE = 10; + +type MoveArrowProps = { + x1: number; + y1: number; + x2: number; + y2: number; + failed?: boolean; +}; + +type SupportArrowProps = { + x1: number; + y1: number; + x2: number; + y2: number; + x3: number; + y3: number; + failed?: boolean; +}; + +const MoveArrow = (props: MoveArrowProps) => { + const dx = props.x2 - props.x1; + const dy = props.y2 - props.y1; + + const length = Math.sqrt(dx * dx + dy * dy); + + const offsetX = (dx / length) * UNIT_RADIUS_OFFSET; + const offsetY = (dy / length) * UNIT_RADIUS_OFFSET; + + const startX = props.x1 + offsetX; + const startY = props.y1 + offsetY; + + const endX = props.x2 - offsetX; + const endY = props.y2 - offsetY; + + const midX = (startX + endX) / 2; + const midY = (startY + endY) / 2; + + const crossAngle = Math.atan2(dy, dx) * (180 / Math.PI); + + const path = `M ${startX} ${startY} L ${endX} ${endY}`; + + return ( + + + + + ); +}; + +const SupportArrow = (props: SupportArrowProps) => { + const dx = props.x2 - props.x1; + const dy = props.y2 - props.y1; + + const length = Math.sqrt(dx * dx + dy * dy); + + const offsetX = (dx / length) * UNIT_RADIUS_OFFSET; + const offsetY = (dy / length) * UNIT_RADIUS_OFFSET; + + const startX = props.x1 + offsetX; + const startY = props.y1 + offsetY; + + const endX = props.x2 - offsetX; + const endY = props.y2 - offsetY; + + // Calculate control point for the quadratic Bezier curve + const controlX = props.x3; + const controlY = props.y3; + + // Define the path using a quadratic Bezier curve + const path = `M ${startX} ${startY} Q ${controlX} ${controlY} ${endX} ${endY}`; + + // Calculate the midpoint of the quadratic Bezier curve + const t = 0.5; + const midX = + (1 - t) * (1 - t) * startX + 2 * (1 - t) * t * controlX + t * t * endX; + const midY = + (1 - t) * (1 - t) * startY + 2 * (1 - t) * t * controlY + t * t * endY; + + // Rotate the cross to be perpendicular to the line + const crossAngle = Math.atan2(dy, dx) * (180 / Math.PI); + + return ( + + + {/* */} + + ); +}; + +export { MoveArrow, SupportArrow }; diff --git a/src/components/interactive-map/shapes/parallel-curves.tsx b/src/components/interactive-map/shapes/parallel-curves.tsx new file mode 100644 index 00000000..0891ae61 --- /dev/null +++ b/src/components/interactive-map/shapes/parallel-curves.tsx @@ -0,0 +1,70 @@ +import React from "react"; + +interface ParallelCurvesProps { + x1: number; + y1: number; + x2: number; + y2: number; + x3: number; + y3: number; + lineWidth: number; + offset: number; +} + +const ParallelCurves: React.FC = ({ + x1, + y1, + x2, + y2, + x3, + y3, + lineWidth, + offset, +}) => { + // Function to compute perpendicular offset + const getOffsetPoint = ( + x: number, + y: number, + angle: number, + distance: number + ) => ({ + x: x + Math.cos(angle) * distance, + y: y + Math.sin(angle) * distance, + }); + + // Compute angles for the curve directions + const angle1 = Math.atan2(y2 - y1, x2 - x1); + const angle2 = Math.atan2(y3 - y2, x3 - x2); + + // Offset start and end points + const start1 = getOffsetPoint(x1, y1, angle1, offset); + const end1 = getOffsetPoint(x3, y3, angle2, -offset); + + // Compute perpendicular vector for parallel lines + const perpAngle = angle1 + Math.PI / 2; // Perpendicular direction + const start2 = getOffsetPoint(start1.x, start1.y, perpAngle, lineWidth); + const end2 = getOffsetPoint(end1.x, end1.y, perpAngle, lineWidth); + + return ( + + {/* First curved line */} + + {/* Parallel curved line */} + + + ); +}; + +export { ParallelCurves }; From 66e8715b1878d3ffd5adc85e5ed8bd0419818eca Mon Sep 17 00:00:00 2001 From: John McDowell Date: Wed, 12 Feb 2025 12:40:26 +0000 Subject: [PATCH 56/69] Wip --- .../interactive-map.stories.tsx | 8 +- .../interactive-map/interactive-map.tsx | 533 +++++++++--------- .../interactive-map/shapes/arrow.stories.tsx | 22 +- .../interactive-map/shapes/arrow.tsx | 6 +- .../interactive-map/shapes/cross.stories.tsx | 32 ++ .../interactive-map/shapes/cross.tsx | 107 ++-- .../shapes/curved-arrow.stories.tsx | 20 +- .../interactive-map/shapes/curved-arrow.tsx | 26 + .../shapes/octagon.stories.tsx | 50 ++ .../interactive-map/shapes/octagon.tsx | 45 ++ .../interactive-map/shapes/order-arrow.tsx | 127 ----- .../shapes/parallel-curves.tsx | 70 --- 12 files changed, 510 insertions(+), 536 deletions(-) create mode 100644 src/components/interactive-map/shapes/cross.stories.tsx create mode 100644 src/components/interactive-map/shapes/octagon.stories.tsx create mode 100644 src/components/interactive-map/shapes/octagon.tsx delete mode 100644 src/components/interactive-map/shapes/order-arrow.tsx delete mode 100644 src/components/interactive-map/shapes/parallel-curves.tsx diff --git a/src/components/interactive-map/interactive-map.stories.tsx b/src/components/interactive-map/interactive-map.stories.tsx index a50cc724..284492b1 100644 --- a/src/components/interactive-map/interactive-map.stories.tsx +++ b/src/components/interactive-map/interactive-map.stories.tsx @@ -39,13 +39,17 @@ export default { type: "move", target: "wal", aux: "edi", - outcome: "succeeded", + outcome: "failed", }, lon: { type: "support", target: "wal", aux: "lvp", - outcome: "succeeded", + outcome: "failed", + }, + edi: { + type: "hold", + outcome: "failed", }, }, }, diff --git a/src/components/interactive-map/interactive-map.tsx b/src/components/interactive-map/interactive-map.tsx index aff05886..11a30dfd 100644 --- a/src/components/interactive-map/interactive-map.tsx +++ b/src/components/interactive-map/interactive-map.tsx @@ -1,10 +1,9 @@ import React, { useState } from "react"; import { Map } from "../../common/map/map.parse.types"; -import { MoveArrow, SupportArrow } from "./shapes/order-arrow"; import { Arrow } from "./shapes/arrow"; import { Cross } from "./shapes/cross"; import { CurvedArrow } from "./shapes/curved-arrow"; -import { ParallelCurves } from "./shapes/parallel-curves"; +import { Octagon } from "./shapes/octagon"; type InteractiveMapProps = { map: Map; @@ -37,6 +36,8 @@ const SELECTED_FILL = "rgba(255, 255, 255, 0.8)"; const DEFAULT_FILL = "transparent"; const UNIT_RADIUS = 10; +const UNIT_OFFSET_X = 10; +const UNIT_OFFSET_Y = 10; const ORDER_STROKE_WIDTH = 1; const ORDER_LINE_WIDTH = 5; @@ -45,144 +46,11 @@ const ORDER_ARROW_LENGTH = 10; const ORDER_DASH_LENGTH = 5; const ORDER_DASH_SPACING = 2.5; -type InteractiveMapContextType = { - getProvince: (provinceId: string) => { - fill: string; - center: { x: number; y: number }; - unitCenter: { x: number; y: number }; - }; -}; - -const InteractiveMapContext = React.createContext< - InteractiveMapContextType | undefined ->(undefined); - -const InteractiveMapContextProvider: React.FC< - React.PropsWithChildren -> = (props) => { - const [selectedProvince, setSelectedProvince] = useState(null); - const [hoveredProvince, setHoveredProvince] = useState(null); - - const getFill = (provinceId: string) => { - const isSelected = selectedProvince === provinceId; - const isHovered = hoveredProvince === provinceId; - if (props.supplyCenters[provinceId]) { - const color = props.nationColors[props.supplyCenters[provinceId]]; - return color.replace( - /rgb(a?)\((\d+), (\d+), (\d+)(, [\d.]+)?\)/, - // "rgba($2, $3, $4, 0.4)" - `rgba($2, $3, $4, ${isSelected ? 0.3 : isHovered ? 0.4 : 0.5})` - ); - } - if (selectedProvince === provinceId) return SELECTED_FILL; - if (hoveredProvince === provinceId) return HOVER_FILL; - return DEFAULT_FILL; - }; - - const getProvince = (provinceId: string) => { - const province = props.map.provinces.find((p) => p.id === provinceId); - if (!province) throw new Error(`Province ${provinceId} not found`); - return { - fill: getFill(provinceId), - center: province.center, - unitCenter: { x: province.center.x - 10, y: province.center.y - 10 }, - }; - }; - - return ( - - {props.children} - - ); -}; - -const useProvince = (provinceId: string) => { - const context = React.useContext(InteractiveMapContext); - if (!context) - throw new Error("Must be used in InteractiveMapContextProvider"); - return context.getProvince(provinceId); -}; - -const Order: React.FC<{ - type: "move" | "support" | "convoy" | "hold"; - source: string; - target: string; - aux: string; -}> = (props) => { - const source = useProvince(props.source); - const target = useProvince(props.target); - const aux = useProvince(props.aux); - - // TODO render moves after supports - if (props.type === "move") { - return ( - ( - - )} - /> - ); - } - if (props.type === "support") { - return ( - ( - // - // )} - /> - ); - } -}; +const ORDER_FAILED_CROSS_WIDTH = 4; +const ORDER_FAILED_CROSS_LENGTH = 16; +const ORDER_FAILED_CROSS_FILL = "red"; +const ORDER_FAILED_CROSS_STROKE = "black"; +const ORDER_FAILED_CROSS_STROKE_WIDTH = 2; const InteractiveMap: React.FC = (props) => { const [hoveredProvince, setHoveredProvince] = useState(null); @@ -217,159 +85,264 @@ const InteractiveMap: React.FC = (props) => { }; return ( - - - - - - - - - - - {props.map.backgroundElements.map((element, index) => ( - + + + + + + + + + + {props.map.backgroundElements.map((element, index) => ( + + + + ))} + {props.map.provinces.map((province) => { + return ( + setHoveredProvince(province.id)} + onMouseLeave={() => setHoveredProvince(null)} + onClick={() => setSelectedProvince(province.id)} + /> + {province.supplyCenter && ( + + + + + )} + + ); + })} + {props.map.provinces.map( + (province) => + province.text && ( + + {province.text.value} + + ) + )} + {props.map.borders.map((element, index) => ( + + ))} + {props.map.impassableProvinces.map((element, index) => ( + + ))} + {Object.entries(props.units).map(([provinceId, unit]) => { + const province = props.map.provinces.find((p) => p.id === provinceId); + if (!province) return null; + const { x, y } = province.center; + const color = props.nationColors[unit.nation]; + + return ( + + + + {unit.unitType === "army" ? "A" : "F"} + - ))} - {props.map.provinces.map((province) => { + ); + })} + {Object.entries(props.orders) + // eslint-disable-next-line @typescript-eslint/no-unused-vars + .filter(([_, order]) => order.type === "hold") + .map(([provinceId, order]) => { + const source = props.map.provinces.find((p) => p.id === provinceId); + if (!source) return null; return ( - - setHoveredProvince(province.id)} - onMouseLeave={() => setHoveredProvince(null)} - onClick={() => setSelectedProvince(province.id)} - /> - {province.supplyCenter && ( - - - - - )} - + ( + + ) + : undefined + } + /> ); })} - {props.map.provinces.map( - (province) => - province.text && ( - - {province.text.value} - - ) - )} - {props.map.borders.map((element, index) => ( - - ))} - {props.map.impassableProvinces.map((element, index) => ( - - ))} - {Object.entries(props.units).map(([provinceId, unit]) => { - const province = props.map.provinces.find((p) => p.id === provinceId); - if (!province) return null; - const { x, y } = province.center; - const color = props.nationColors[unit.nation]; - + {Object.entries(props.orders) + // eslint-disable-next-line @typescript-eslint/no-unused-vars + .filter(([_, order]) => order.type === "support") + .map(([provinceId, order]) => { + const source = props.map.provinces.find((p) => p.id === provinceId); + const target = props.map.provinces.find((p) => p.id === order.target); + const aux = props.map.provinces.find((p) => p.id === order.aux); + if (!source || !target || !aux) return null; return ( - - - - {unit.unitType === "army" ? "A" : "F"} - - + ( + + ) + : undefined + } + /> ); })} - {Object.entries(props.orders).map(([provinceId, order]) => { + {Object.entries(props.orders) + // eslint-disable-next-line @typescript-eslint/no-unused-vars + .filter(([_, order]) => order.type === "move") + .map(([provinceId, order]) => { + const source = props.map.provinces.find((p) => p.id === provinceId); + const target = props.map.provinces.find((p) => p.id === order.target); + if (!source || !target) return null; return ( - ( + + ) + : undefined + } /> ); })} - - + ); }; diff --git a/src/components/interactive-map/shapes/arrow.stories.tsx b/src/components/interactive-map/shapes/arrow.stories.tsx index 9a37b075..755db777 100644 --- a/src/components/interactive-map/shapes/arrow.stories.tsx +++ b/src/components/interactive-map/shapes/arrow.stories.tsx @@ -1,8 +1,9 @@ import { Meta, StoryObj } from "@storybook/react"; import { Arrow } from "./arrow"; +import { Cross } from "./cross"; export default { - title: "Components/Arrow", + title: "Components/Shapes/Arrow", component: Arrow, args: { x1: 50, @@ -58,3 +59,22 @@ export const Dashed: Story = { dash: { length: 10, spacing: 2.5 }, }, }; + +export const Failed: Story = { + args: { + onRenderCenter: (x, y, angle) => { + return ( + + ); + }, + }, +}; diff --git a/src/components/interactive-map/shapes/arrow.tsx b/src/components/interactive-map/shapes/arrow.tsx index 3cd84093..62a9a3fc 100644 --- a/src/components/interactive-map/shapes/arrow.tsx +++ b/src/components/interactive-map/shapes/arrow.tsx @@ -29,6 +29,9 @@ const Arrow = (props: ArrowProps) => { const endX = props.x2 - offsetX - props.arrowLength * Math.cos(angle); const endY = props.y2 - offsetY - props.arrowLength * Math.sin(angle); + const centerX = (startX + endX) / 2; + const centerY = (startY + endY) / 2; + const arrowStart = { x: endX - (props.lineWidth / 2) * Math.cos(angle + Math.PI / 2), y: endY - (props.lineWidth / 2) * Math.sin(angle + Math.PI / 2), @@ -39,7 +42,6 @@ const Arrow = (props: ArrowProps) => { y: endY + (props.lineWidth / 2) * Math.sin(angle + Math.PI / 2), }; - // Perpendicular to the line, 5 away from center base const arrowBottomLeft = { x: endX - props.arrowWidth * Math.cos(angle + Math.PI / 2), y: endY - props.arrowWidth * Math.sin(angle + Math.PI / 2), @@ -79,7 +81,7 @@ const Arrow = (props: ArrowProps) => { strokeWidth={props.strokeWidth} fill={props.fill} /> - {/* {props.onRenderCenter && props.onRenderCenter(centerX, centerY, angle)} */} + {props.onRenderCenter && props.onRenderCenter(centerX, centerY, angle)} ); }; diff --git a/src/components/interactive-map/shapes/cross.stories.tsx b/src/components/interactive-map/shapes/cross.stories.tsx new file mode 100644 index 00000000..08d45db1 --- /dev/null +++ b/src/components/interactive-map/shapes/cross.stories.tsx @@ -0,0 +1,32 @@ +import { Meta, StoryObj } from "@storybook/react"; +import { Cross } from "./cross"; + +export default { + title: "Components/Shapes/Cross", + component: Cross, + args: { + x: 50, + y: 50, + width: 10, + length: 50, + angle: 45, + fill: "blue", + stroke: "red", + strokeWidth: 2, + }, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + render: (args: any) => ( + + + {/* Draw a dot represnting x,y */} + + + x,y + + + ), +} as Meta; + +type Story = StoryObj; + +export const Default: Story = {}; diff --git a/src/components/interactive-map/shapes/cross.tsx b/src/components/interactive-map/shapes/cross.tsx index 4706ae05..262cf35a 100644 --- a/src/components/interactive-map/shapes/cross.tsx +++ b/src/components/interactive-map/shapes/cross.tsx @@ -1,5 +1,3 @@ -import React from "react"; - type CrossProps = { x: number; y: number; @@ -11,62 +9,65 @@ type CrossProps = { strokeWidth: number; }; -const Cross = ({ - x, - y, - width, - length, - angle, - fill, - stroke, - strokeWidth, -}: CrossProps) => { - // Convert angle from degrees to radians - const angleRad = (angle * Math.PI) / 180; +const Cross = (props: CrossProps) => { + const halfLength = props.length / 2; + const strokeWidth = props.strokeWidth; - // Define the points for the cross shape (moving clockwise from top) - const points = [ - // Top vertical arm - [-width / 2, -length], // Top left - [width / 2, -length], // Top right - [width / 2, -width / 2], // Inner top right - [length, -width / 2], // Right arm outer top - [length, width / 2], // Right arm outer bottom - [width / 2, width / 2], // Inner right bottom - [width / 2, length], // Bottom right - [-width / 2, length], // Bottom left - [-width / 2, width / 2], // Inner bottom left - [-length, width / 2], // Left arm outer bottom - [-length, -width / 2], // Left arm outer top - [-width / 2, -width / 2], // Inner top left - ]; + const x1 = props.x - halfLength; + const y1 = props.y; + const x2 = props.x + halfLength; + const y2 = props.y; - // Function to rotate a point around origin and translate to final position - const transformPoint = (point: number[]): string => { - const [px, py] = point; - const rotatedX = px * Math.cos(angleRad) - py * Math.sin(angleRad) + x; - const rotatedY = px * Math.sin(angleRad) + py * Math.cos(angleRad) + y; - return `${rotatedX} ${rotatedY}`; - }; + const x3 = props.x; + const y3 = props.y - halfLength; + const x4 = props.x; + const y4 = props.y + halfLength; - // Create path data by rotating and translating all points - const pathData = ` - M ${transformPoint(points[0])} - ${points - .slice(1) - .map((point) => `L ${transformPoint(point)}`) - .join(" ")} - Z - `; + const fillX1 = x1 + strokeWidth; + const fillX2 = x2 - strokeWidth; + const fillY3 = y3 + strokeWidth; + const fillY4 = y4 - strokeWidth; return ( - - + + + {/* Stroke */} + + + + + {/* Fill */} + + + ); }; diff --git a/src/components/interactive-map/shapes/curved-arrow.stories.tsx b/src/components/interactive-map/shapes/curved-arrow.stories.tsx index 6cf13020..071059f6 100644 --- a/src/components/interactive-map/shapes/curved-arrow.stories.tsx +++ b/src/components/interactive-map/shapes/curved-arrow.stories.tsx @@ -1,8 +1,9 @@ import { Meta, StoryObj } from "@storybook/react"; import { CurvedArrow } from "./curved-arrow"; +import { Cross } from "./cross"; export default { - title: "Components/CurvedArrow", + title: "Components/Shapes/CurvedArrow", component: CurvedArrow, args: { x1: 50, @@ -75,3 +76,20 @@ export const Upwards: Story = { y3: 350, }, }; + +export const Failed: Story = { + args: { + onRenderCenter: (x, y, angle) => ( + + ), + }, +}; diff --git a/src/components/interactive-map/shapes/curved-arrow.tsx b/src/components/interactive-map/shapes/curved-arrow.tsx index 7c33b546..98c197d2 100644 --- a/src/components/interactive-map/shapes/curved-arrow.tsx +++ b/src/components/interactive-map/shapes/curved-arrow.tsx @@ -15,6 +15,7 @@ type CurvedArrowProps = { arrowWidth: number; arrowLength: number; dash?: { length: number; spacing: number }; + onRenderCenter?: (x: number, y: number, angle: number) => React.ReactElement; }; const getOffsetPoint = ( @@ -33,6 +34,26 @@ const getOffsetPoint = ( }; }; +const getBezierPoint = ( + t: number, + p0: { x: number; y: number }, + p1: { x: number; y: number }, + p2: { x: number; y: number }, + p3: { x: number; y: number } +) => { + const x = + Math.pow(1 - t, 3) * p0.x + + 3 * Math.pow(1 - t, 2) * t * p1.x + + 3 * (1 - t) * Math.pow(t, 2) * p2.x + + Math.pow(t, 3) * p3.x; + const y = + Math.pow(1 - t, 3) * p0.y + + 3 * Math.pow(1 - t, 2) * t * p1.y + + 3 * (1 - t) * Math.pow(t, 2) * p2.y + + Math.pow(t, 3) * p3.y; + return { x, y }; +}; + const CurvedArrow: React.FC = (props) => { const start = getOffsetPoint( props.x1, @@ -88,6 +109,9 @@ const CurvedArrow: React.FC = (props) => { y: end.y - props.arrowLength * Math.sin(endAngle), }; + const centerPoint = getBezierPoint(0.5, start, cp1, cp2, end); + const centerAngleBezier = Math.atan2(cp2.y - cp1.y, cp2.x - cp1.x); + return ( <> = (props) => { strokeWidth={props.strokeWidth} fill={props.fill} /> + {props.onRenderCenter && + props.onRenderCenter(centerPoint.x, centerPoint.y, centerAngleBezier)} ); }; diff --git a/src/components/interactive-map/shapes/octagon.stories.tsx b/src/components/interactive-map/shapes/octagon.stories.tsx new file mode 100644 index 00000000..f4bf6fd0 --- /dev/null +++ b/src/components/interactive-map/shapes/octagon.stories.tsx @@ -0,0 +1,50 @@ +import { Meta, StoryObj } from "@storybook/react"; +import { Octagon } from "./octagon"; +import { Cross } from "./cross"; + +export default { + title: "Components/Shapes/Octagon", + component: Octagon, + args: { + x: 100, + y: 100, + size: 50, + fill: "transparent", + stroke: "black", + strokeWidth: 8, + }, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + render: (args: any) => ( + + + {/* Draw a dot representing x,y */} + + + x,y + + + ), +} as Meta; + +type Story = StoryObj; + +export const Default: Story = {}; + +export const Failed: Story = { + args: { + onRenderBottomCenter: (x: number, y: number) => { + return ( + + ); + }, + }, +}; diff --git a/src/components/interactive-map/shapes/octagon.tsx b/src/components/interactive-map/shapes/octagon.tsx new file mode 100644 index 00000000..064305d0 --- /dev/null +++ b/src/components/interactive-map/shapes/octagon.tsx @@ -0,0 +1,45 @@ +type OctagonProps = { + x: number; + y: number; + size: number; + fill: string; + stroke: string; + strokeWidth: number; + onRenderBottomCenter?: (x: number, y: number) => React.ReactElement; +}; + +const Octagon = (props: OctagonProps) => { + const angle = Math.PI / 4; + const radius = props.size / (2 * Math.sin(angle)); + const points = Array.from({ length: 8 }).map((_, i) => { + const theta = angle * i + Math.PI / 8; // Rotate by 22.5 degrees + return [ + props.x + radius * Math.cos(theta), + props.y + radius * Math.sin(theta), + ].join(","); + }); + + const bottomCenterX = + (parseFloat(points[1].split(",")[0]) + + parseFloat(points[2].split(",")[0])) / + 2; + const bottomCenterY = + (parseFloat(points[1].split(",")[1]) + + parseFloat(points[2].split(",")[1])) / + 2; + + return ( + + + {props.onRenderBottomCenter && + props.onRenderBottomCenter(bottomCenterX, bottomCenterY)} + + ); +}; + +export { Octagon }; diff --git a/src/components/interactive-map/shapes/order-arrow.tsx b/src/components/interactive-map/shapes/order-arrow.tsx deleted file mode 100644 index a3618692..00000000 --- a/src/components/interactive-map/shapes/order-arrow.tsx +++ /dev/null @@ -1,127 +0,0 @@ -import { Cross } from "./cross"; - -// Ensures that arrow starts and ends at the edge of the source and target unit -const UNIT_RADIUS_OFFSET = 10; - -const CROSS_SIZE = 10; - -type MoveArrowProps = { - x1: number; - y1: number; - x2: number; - y2: number; - failed?: boolean; -}; - -type SupportArrowProps = { - x1: number; - y1: number; - x2: number; - y2: number; - x3: number; - y3: number; - failed?: boolean; -}; - -const MoveArrow = (props: MoveArrowProps) => { - const dx = props.x2 - props.x1; - const dy = props.y2 - props.y1; - - const length = Math.sqrt(dx * dx + dy * dy); - - const offsetX = (dx / length) * UNIT_RADIUS_OFFSET; - const offsetY = (dy / length) * UNIT_RADIUS_OFFSET; - - const startX = props.x1 + offsetX; - const startY = props.y1 + offsetY; - - const endX = props.x2 - offsetX; - const endY = props.y2 - offsetY; - - const midX = (startX + endX) / 2; - const midY = (startY + endY) / 2; - - const crossAngle = Math.atan2(dy, dx) * (180 / Math.PI); - - const path = `M ${startX} ${startY} L ${endX} ${endY}`; - - return ( - - - - - ); -}; - -const SupportArrow = (props: SupportArrowProps) => { - const dx = props.x2 - props.x1; - const dy = props.y2 - props.y1; - - const length = Math.sqrt(dx * dx + dy * dy); - - const offsetX = (dx / length) * UNIT_RADIUS_OFFSET; - const offsetY = (dy / length) * UNIT_RADIUS_OFFSET; - - const startX = props.x1 + offsetX; - const startY = props.y1 + offsetY; - - const endX = props.x2 - offsetX; - const endY = props.y2 - offsetY; - - // Calculate control point for the quadratic Bezier curve - const controlX = props.x3; - const controlY = props.y3; - - // Define the path using a quadratic Bezier curve - const path = `M ${startX} ${startY} Q ${controlX} ${controlY} ${endX} ${endY}`; - - // Calculate the midpoint of the quadratic Bezier curve - const t = 0.5; - const midX = - (1 - t) * (1 - t) * startX + 2 * (1 - t) * t * controlX + t * t * endX; - const midY = - (1 - t) * (1 - t) * startY + 2 * (1 - t) * t * controlY + t * t * endY; - - // Rotate the cross to be perpendicular to the line - const crossAngle = Math.atan2(dy, dx) * (180 / Math.PI); - - return ( - - - {/* */} - - ); -}; - -export { MoveArrow, SupportArrow }; diff --git a/src/components/interactive-map/shapes/parallel-curves.tsx b/src/components/interactive-map/shapes/parallel-curves.tsx deleted file mode 100644 index 0891ae61..00000000 --- a/src/components/interactive-map/shapes/parallel-curves.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import React from "react"; - -interface ParallelCurvesProps { - x1: number; - y1: number; - x2: number; - y2: number; - x3: number; - y3: number; - lineWidth: number; - offset: number; -} - -const ParallelCurves: React.FC = ({ - x1, - y1, - x2, - y2, - x3, - y3, - lineWidth, - offset, -}) => { - // Function to compute perpendicular offset - const getOffsetPoint = ( - x: number, - y: number, - angle: number, - distance: number - ) => ({ - x: x + Math.cos(angle) * distance, - y: y + Math.sin(angle) * distance, - }); - - // Compute angles for the curve directions - const angle1 = Math.atan2(y2 - y1, x2 - x1); - const angle2 = Math.atan2(y3 - y2, x3 - x2); - - // Offset start and end points - const start1 = getOffsetPoint(x1, y1, angle1, offset); - const end1 = getOffsetPoint(x3, y3, angle2, -offset); - - // Compute perpendicular vector for parallel lines - const perpAngle = angle1 + Math.PI / 2; // Perpendicular direction - const start2 = getOffsetPoint(start1.x, start1.y, perpAngle, lineWidth); - const end2 = getOffsetPoint(end1.x, end1.y, perpAngle, lineWidth); - - return ( - - {/* First curved line */} - - {/* Parallel curved line */} - - - ); -}; - -export { ParallelCurves }; From 5943f3482160c97d50b2349b6db3e9bd79adcf84 Mon Sep 17 00:00:00 2001 From: John McDowell Date: Thu, 13 Feb 2025 21:56:48 +0000 Subject: [PATCH 57/69] wip --- README.md | 33 + packages/native/.gitignore | 38 + packages/native/README.md | 50 + packages/native/android/.gitignore | 16 + packages/native/android/app/build.gradle | 177 + packages/native/android/app/debug.keystore | Bin 0 -> 2257 bytes .../native/android/app/google-services.json | 54 + .../native/android/app/proguard-rules.pro | 14 + .../android/app/src/debug/AndroidManifest.xml | 7 + .../android/app/src/main/AndroidManifest.xml | 33 + .../java/com/diplicity/app/MainActivity.kt | 65 + .../java/com/diplicity/app/MainApplication.kt | 57 + .../res/drawable-hdpi/splashscreen_logo.png | Bin 0 -> 20754 bytes .../res/drawable-mdpi/splashscreen_logo.png | Bin 0 -> 12863 bytes .../res/drawable-xhdpi/splashscreen_logo.png | Bin 0 -> 29081 bytes .../res/drawable-xxhdpi/splashscreen_logo.png | Bin 0 -> 47123 bytes .../drawable-xxxhdpi/splashscreen_logo.png | Bin 0 -> 66529 bytes .../res/drawable/ic_launcher_background.xml | 6 + .../res/drawable/rn_edit_text_material.xml | 37 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + .../src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 0 -> 3300 bytes .../mipmap-hdpi/ic_launcher_foreground.webp | Bin 0 -> 8031 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 0 -> 4103 bytes .../src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 0 -> 2048 bytes .../mipmap-mdpi/ic_launcher_foreground.webp | Bin 0 -> 5079 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 0 -> 2613 bytes .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin 0 -> 4535 bytes .../mipmap-xhdpi/ic_launcher_foreground.webp | Bin 0 -> 11145 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 0 -> 5673 bytes .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 0 -> 7345 bytes .../mipmap-xxhdpi/ic_launcher_foreground.webp | Bin 0 -> 18064 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 0 -> 9091 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 0 -> 10108 bytes .../ic_launcher_foreground.webp | Bin 0 -> 25030 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 0 -> 12469 bytes .../app/src/main/res/values-night/colors.xml | 1 + .../app/src/main/res/values/colors.xml | 6 + .../app/src/main/res/values/strings.xml | 6 + .../app/src/main/res/values/styles.xml | 19 + packages/native/android/build.gradle | 43 + packages/native/android/gradle.properties | 56 + .../android/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 43583 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 + packages/native/android/gradlew | 252 + packages/native/android/gradlew.bat | 94 + packages/native/android/settings.gradle | 38 + packages/native/app.json | 50 + packages/native/app/(tabs)/_layout.tsx | 45 + packages/native/app/(tabs)/explore.tsx | 109 + packages/native/app/(tabs)/index.tsx | 93 + packages/native/app/+not-found.tsx | 32 + packages/native/app/_layout.tsx | 39 + .../native/assets/fonts/SpaceMono-Regular.ttf | Bin 0 -> 93252 bytes .../native/assets/images/adaptive-icon.png | Bin 0 -> 17547 bytes packages/native/assets/images/favicon.png | Bin 0 -> 1466 bytes packages/native/assets/images/icon.png | Bin 0 -> 22380 bytes .../assets/images/partial-react-logo.png | Bin 0 -> 5075 bytes packages/native/assets/images/react-logo.png | Bin 0 -> 6341 bytes .../native/assets/images/react-logo@2x.png | Bin 0 -> 14225 bytes .../native/assets/images/react-logo@3x.png | Bin 0 -> 21252 bytes packages/native/assets/images/splash-icon.png | Bin 0 -> 17547 bytes packages/native/components/Collapsible.tsx | 45 + packages/native/components/ExternalLink.tsx | 24 + packages/native/components/HapticTab.tsx | 18 + packages/native/components/HelloWave.tsx | 40 + .../native/components/ParallaxScrollView.tsx | 82 + packages/native/components/ThemedText.tsx | 60 + packages/native/components/ThemedView.tsx | 14 + .../components/__tests__/ThemedText-test.tsx | 10 + .../__snapshots__/ThemedText-test.tsx.snap | 24 + .../native/components/ui/IconSymbol.ios.tsx | 32 + packages/native/components/ui/IconSymbol.tsx | 43 + .../components/ui/TabBarBackground.ios.tsx | 22 + .../native/components/ui/TabBarBackground.tsx | 6 + packages/native/constants/Colors.ts | 26 + packages/native/eas.json | 21 + packages/native/hooks/useColorScheme.ts | 1 + packages/native/hooks/useColorScheme.web.ts | 21 + packages/native/hooks/useThemeColor.ts | 21 + packages/native/package-lock.json | 16965 ++++++++++++++++ packages/native/package.json | 58 + packages/native/scripts/reset-project.js | 112 + packages/native/services/auth.ts | 89 + packages/native/services/index.ts | 2 + packages/native/services/telemetry.ts | 24 + packages/native/tsconfig.json | 17 + 87 files changed, 19264 insertions(+) create mode 100644 packages/native/.gitignore create mode 100644 packages/native/README.md create mode 100644 packages/native/android/.gitignore create mode 100644 packages/native/android/app/build.gradle create mode 100644 packages/native/android/app/debug.keystore create mode 100644 packages/native/android/app/google-services.json create mode 100644 packages/native/android/app/proguard-rules.pro create mode 100644 packages/native/android/app/src/debug/AndroidManifest.xml create mode 100644 packages/native/android/app/src/main/AndroidManifest.xml create mode 100644 packages/native/android/app/src/main/java/com/diplicity/app/MainActivity.kt create mode 100644 packages/native/android/app/src/main/java/com/diplicity/app/MainApplication.kt create mode 100644 packages/native/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png create mode 100644 packages/native/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png create mode 100644 packages/native/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png create mode 100644 packages/native/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png create mode 100644 packages/native/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png create mode 100644 packages/native/android/app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 packages/native/android/app/src/main/res/drawable/rn_edit_text_material.xml create mode 100644 packages/native/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 packages/native/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 packages/native/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp create mode 100644 packages/native/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp create mode 100644 packages/native/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp create mode 100644 packages/native/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp create mode 100644 packages/native/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp create mode 100644 packages/native/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp create mode 100644 packages/native/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp create mode 100644 packages/native/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp create mode 100644 packages/native/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp create mode 100644 packages/native/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp create mode 100644 packages/native/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp create mode 100644 packages/native/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp create mode 100644 packages/native/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp create mode 100644 packages/native/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp create mode 100644 packages/native/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp create mode 100644 packages/native/android/app/src/main/res/values-night/colors.xml create mode 100644 packages/native/android/app/src/main/res/values/colors.xml create mode 100644 packages/native/android/app/src/main/res/values/strings.xml create mode 100644 packages/native/android/app/src/main/res/values/styles.xml create mode 100644 packages/native/android/build.gradle create mode 100644 packages/native/android/gradle.properties create mode 100644 packages/native/android/gradle/wrapper/gradle-wrapper.jar create mode 100644 packages/native/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 packages/native/android/gradlew create mode 100644 packages/native/android/gradlew.bat create mode 100644 packages/native/android/settings.gradle create mode 100644 packages/native/app.json create mode 100644 packages/native/app/(tabs)/_layout.tsx create mode 100644 packages/native/app/(tabs)/explore.tsx create mode 100644 packages/native/app/(tabs)/index.tsx create mode 100644 packages/native/app/+not-found.tsx create mode 100644 packages/native/app/_layout.tsx create mode 100644 packages/native/assets/fonts/SpaceMono-Regular.ttf create mode 100644 packages/native/assets/images/adaptive-icon.png create mode 100644 packages/native/assets/images/favicon.png create mode 100644 packages/native/assets/images/icon.png create mode 100644 packages/native/assets/images/partial-react-logo.png create mode 100644 packages/native/assets/images/react-logo.png create mode 100644 packages/native/assets/images/react-logo@2x.png create mode 100644 packages/native/assets/images/react-logo@3x.png create mode 100644 packages/native/assets/images/splash-icon.png create mode 100644 packages/native/components/Collapsible.tsx create mode 100644 packages/native/components/ExternalLink.tsx create mode 100644 packages/native/components/HapticTab.tsx create mode 100644 packages/native/components/HelloWave.tsx create mode 100644 packages/native/components/ParallaxScrollView.tsx create mode 100644 packages/native/components/ThemedText.tsx create mode 100644 packages/native/components/ThemedView.tsx create mode 100644 packages/native/components/__tests__/ThemedText-test.tsx create mode 100644 packages/native/components/__tests__/__snapshots__/ThemedText-test.tsx.snap create mode 100644 packages/native/components/ui/IconSymbol.ios.tsx create mode 100644 packages/native/components/ui/IconSymbol.tsx create mode 100644 packages/native/components/ui/TabBarBackground.ios.tsx create mode 100644 packages/native/components/ui/TabBarBackground.tsx create mode 100644 packages/native/constants/Colors.ts create mode 100644 packages/native/eas.json create mode 100644 packages/native/hooks/useColorScheme.ts create mode 100644 packages/native/hooks/useColorScheme.web.ts create mode 100644 packages/native/hooks/useThemeColor.ts create mode 100644 packages/native/package-lock.json create mode 100644 packages/native/package.json create mode 100644 packages/native/scripts/reset-project.js create mode 100644 packages/native/services/auth.ts create mode 100644 packages/native/services/index.ts create mode 100644 packages/native/services/telemetry.ts create mode 100644 packages/native/tsconfig.json diff --git a/README.md b/README.md index e507ca22..85d39edc 100644 --- a/README.md +++ b/README.md @@ -61,3 +61,36 @@ Before you begin, ensure you have the following installed on your machine: ``` Storybook will be available at `http://localhost:6006`. + +## Developing on Android + +### Developing in web browser + +1. Navigate to the `native` package + + ```sh + cd packages/native + ``` + +2. Run Metro + + ```sh + npx expo start + ``` + +### Developing on Android device + +Follow the instructions here: +https://docs.expo.dev/get-started/set-up-your-environment/?mode=development-build + +1. Navigate to the `native` packge + + ```sh + cd packages/native + ``` + +2. Run build command + + ```sh + eas build --platform android --profile development + ``` diff --git a/packages/native/.gitignore b/packages/native/.gitignore new file mode 100644 index 00000000..c9d575d7 --- /dev/null +++ b/packages/native/.gitignore @@ -0,0 +1,38 @@ +# Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files + +# dependencies +node_modules/ + +# Expo +.expo/ +dist/ +web-build/ +expo-env.d.ts + +# Native +*.orig.* +*.jks +*.p8 +*.p12 +*.key +*.mobileprovision + +# Metro +.metro-health-check* + +# debug +npm-debug.* +yarn-debug.* +yarn-error.* + +# macOS +.DS_Store +*.pem + +# local env files +.env*.local + +# typescript +*.tsbuildinfo + +app-example diff --git a/packages/native/README.md b/packages/native/README.md new file mode 100644 index 00000000..cd4feb8a --- /dev/null +++ b/packages/native/README.md @@ -0,0 +1,50 @@ +# Welcome to your Expo app 👋 + +This is an [Expo](https://expo.dev) project created with [`create-expo-app`](https://www.npmjs.com/package/create-expo-app). + +## Get started + +1. Install dependencies + + ```bash + npm install + ``` + +2. Start the app + + ```bash + npx expo start + ``` + +In the output, you'll find options to open the app in a + +- [development build](https://docs.expo.dev/develop/development-builds/introduction/) +- [Android emulator](https://docs.expo.dev/workflow/android-studio-emulator/) +- [iOS simulator](https://docs.expo.dev/workflow/ios-simulator/) +- [Expo Go](https://expo.dev/go), a limited sandbox for trying out app development with Expo + +You can start developing by editing the files inside the **app** directory. This project uses [file-based routing](https://docs.expo.dev/router/introduction). + +## Get a fresh project + +When you're ready, run: + +```bash +npm run reset-project +``` + +This command will move the starter code to the **app-example** directory and create a blank **app** directory where you can start developing. + +## Learn more + +To learn more about developing your project with Expo, look at the following resources: + +- [Expo documentation](https://docs.expo.dev/): Learn fundamentals, or go into advanced topics with our [guides](https://docs.expo.dev/guides). +- [Learn Expo tutorial](https://docs.expo.dev/tutorial/introduction/): Follow a step-by-step tutorial where you'll create a project that runs on Android, iOS, and the web. + +## Join the community + +Join our community of developers creating universal apps. + +- [Expo on GitHub](https://github.com/expo/expo): View our open source platform and contribute. +- [Discord community](https://chat.expo.dev): Chat with Expo users and ask questions. diff --git a/packages/native/android/.gitignore b/packages/native/android/.gitignore new file mode 100644 index 00000000..8a6be077 --- /dev/null +++ b/packages/native/android/.gitignore @@ -0,0 +1,16 @@ +# OSX +# +.DS_Store + +# Android/IntelliJ +# +build/ +.idea +.gradle +local.properties +*.iml +*.hprof +.cxx/ + +# Bundle artifacts +*.jsbundle diff --git a/packages/native/android/app/build.gradle b/packages/native/android/app/build.gradle new file mode 100644 index 00000000..aa3a6dc2 --- /dev/null +++ b/packages/native/android/app/build.gradle @@ -0,0 +1,177 @@ +apply plugin: "com.android.application" +apply plugin: "org.jetbrains.kotlin.android" +apply plugin: "com.facebook.react" +apply plugin: 'com.google.gms.google-services' + +def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath() + +/** + * This is the configuration block to customize your React Native Android app. + * By default you don't need to apply any configuration, just uncomment the lines you need. + */ +react { + entryFile = file(["node", "-e", "require('expo/scripts/resolveAppEntry')", projectRoot, "android", "absolute"].execute(null, rootDir).text.trim()) + reactNativeDir = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile() + hermesCommand = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/sdks/hermesc/%OS-BIN%/hermesc" + codegenDir = new File(["node", "--print", "require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile() + + // Use Expo CLI to bundle the app, this ensures the Metro config + // works correctly with Expo projects. + cliFile = new File(["node", "--print", "require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })"].execute(null, rootDir).text.trim()) + bundleCommand = "export:embed" + + /* Folders */ + // The root of your project, i.e. where "package.json" lives. Default is '../..' + // root = file("../../") + // The folder where the react-native NPM package is. Default is ../../node_modules/react-native + // reactNativeDir = file("../../node_modules/react-native") + // The folder where the react-native Codegen package is. Default is ../../node_modules/@react-native/codegen + // codegenDir = file("../../node_modules/@react-native/codegen") + + /* Variants */ + // The list of variants to that are debuggable. For those we're going to + // skip the bundling of the JS bundle and the assets. By default is just 'debug'. + // If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants. + // debuggableVariants = ["liteDebug", "prodDebug"] + + /* Bundling */ + // A list containing the node command and its flags. Default is just 'node'. + // nodeExecutableAndArgs = ["node"] + + // + // The path to the CLI configuration file. Default is empty. + // bundleConfig = file(../rn-cli.config.js) + // + // The name of the generated asset file containing your JS bundle + // bundleAssetName = "MyApplication.android.bundle" + // + // The entry file for bundle generation. Default is 'index.android.js' or 'index.js' + // entryFile = file("../js/MyApplication.android.js") + // + // A list of extra flags to pass to the 'bundle' commands. + // See https://github.com/react-native-community/cli/blob/main/docs/commands.md#bundle + // extraPackagerArgs = [] + + /* Hermes Commands */ + // The hermes compiler command to run. By default it is 'hermesc' + // hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc" + // + // The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map" + // hermesFlags = ["-O", "-output-source-map"] + + /* Autolinking */ + autolinkLibrariesWithApp() +} + +/** + * Set this to true to Run Proguard on Release builds to minify the Java bytecode. + */ +def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInReleaseBuilds') ?: false).toBoolean() + +/** + * The preferred build flavor of JavaScriptCore (JSC) + * + * For example, to use the international variant, you can use: + * `def jscFlavor = 'org.webkit:android-jsc-intl:+'` + * + * The international variant includes ICU i18n library and necessary data + * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that + * give correct results when using with locales other than en-US. Note that + * this variant is about 6MiB larger per architecture than default. + */ +def jscFlavor = 'org.webkit:android-jsc:+' + +android { + ndkVersion rootProject.ext.ndkVersion + + buildToolsVersion rootProject.ext.buildToolsVersion + compileSdk rootProject.ext.compileSdkVersion + + namespace 'com.diplicity.app' + defaultConfig { + applicationId 'com.diplicity.app' + minSdkVersion rootProject.ext.minSdkVersion + targetSdkVersion rootProject.ext.targetSdkVersion + versionCode 1 + versionName "1.0.0" + } + signingConfigs { + debug { + storeFile file('debug.keystore') + storePassword 'android' + keyAlias 'androiddebugkey' + keyPassword 'android' + } + } + buildTypes { + debug { + signingConfig signingConfigs.debug + } + release { + // Caution! In production, you need to generate your own keystore file. + // see https://reactnative.dev/docs/signed-apk-android. + signingConfig signingConfigs.debug + shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false) + minifyEnabled enableProguardInReleaseBuilds + proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" + crunchPngs (findProperty('android.enablePngCrunchInReleaseBuilds')?.toBoolean() ?: true) + } + } + packagingOptions { + jniLibs { + useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false) + } + } + androidResources { + ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:!CVS:!thumbs.db:!picasa.ini:!*~' + } +} + +// Apply static values from `gradle.properties` to the `android.packagingOptions` +// Accepts values in comma delimited lists, example: +// android.packagingOptions.pickFirsts=/LICENSE,**/picasa.ini +["pickFirsts", "excludes", "merges", "doNotStrip"].each { prop -> + // Split option: 'foo,bar' -> ['foo', 'bar'] + def options = (findProperty("android.packagingOptions.$prop") ?: "").split(","); + // Trim all elements in place. + for (i in 0.. 0) { + println "android.packagingOptions.$prop += $options ($options.length)" + // Ex: android.packagingOptions.pickFirsts += '**/SCCS/**' + options.each { + android.packagingOptions[prop] += it + } + } +} + +dependencies { + // The version of react-native is set by the React Native Gradle Plugin + implementation("com.facebook.react:react-android") + + def isGifEnabled = (findProperty('expo.gif.enabled') ?: "") == "true"; + def isWebpEnabled = (findProperty('expo.webp.enabled') ?: "") == "true"; + def isWebpAnimatedEnabled = (findProperty('expo.webp.animated') ?: "") == "true"; + + if (isGifEnabled) { + // For animated gif support + implementation("com.facebook.fresco:animated-gif:${reactAndroidLibs.versions.fresco.get()}") + } + + if (isWebpEnabled) { + // For webp support + implementation("com.facebook.fresco:webpsupport:${reactAndroidLibs.versions.fresco.get()}") + if (isWebpAnimatedEnabled) { + // Animated webp support + implementation("com.facebook.fresco:animated-webp:${reactAndroidLibs.versions.fresco.get()}") + } + } + + if (hermesEnabled.toBoolean()) { + implementation("com.facebook.react:hermes-android") + } else { + implementation jscFlavor + } +} diff --git a/packages/native/android/app/debug.keystore b/packages/native/android/app/debug.keystore new file mode 100644 index 0000000000000000000000000000000000000000..364e105ed39fbfd62001429a68140672b06ec0de GIT binary patch literal 2257 zcmchYXEfYt8;7T1^dLH$VOTZ%2NOdOH5j5LYLtZ0q7x-V8_6gU5)#7dkq{HTmsfNq zB3ZqcAxeY^G10@?efK?Q&)M(qInVv!xjx+IKEL}p*K@LYvIzo#AZG>st5|P)KF1_Z;y){W{<7K{nl!CPuE z_^(!C(Ol0n8 zK13*rzAtW>(wULKPRYLd7G18F8#1P`V*9`(Poj26eOXYyBVZPno~Cvvhx7vPjAuZo zF?VD!zB~QG(!zbw#qsxT8%BSpqMZ4f70ZPn-3y$L8{EVbbN9$H`B&Z1quk9tgp5FM zuxp3pJ0b8u|3+#5bkJ4SRnCF2l7#DyLYXYY8*?OuAwK4E6J{0N=O3QNVzQ$L#FKkR zi-c@&!nDvezOV$i$Lr}iF$XEcwnybQ6WZrMKuw8gCL^U#D;q3t&HpTbqyD%vG=TeDlzCT~MXUPC|Leb-Uk+ z=vnMd(|>ld?Fh>V8poP;q;;nc@en$|rnP0ytzD&fFkCeUE^kG9Kx4wUh!!rpjwKDP zyw_e|a^x_w3E zP}}@$g>*LLJ4i0`Gx)qltL}@;mDv}D*xR^oeWcWdPkW@Uu)B^X&4W1$p6}ze!zudJ zyiLg@uggoMIArBr*27EZV7djDg@W1MaL+rcZ-lrANJQ%%>u8)ZMWU@R2qtnmG(acP z0d_^!t>}5W zpT`*2NR+0+SpTHb+6Js4b;%LJB;B_-ChhnU5py}iJtku*hm5F0!iql8Hrpcy1aYbT z1*dKC5ua6pMX@@iONI?Hpr%h;&YaXp9n!ND7-=a%BD7v&g zOO41M6EbE24mJ#S$Ui0-brR5ML%@|ndz^)YLMMV1atna{Fw<;TF@>d&F|!Z>8eg>>hkFrV)W+uv=`^F9^e zzzM2*oOjT9%gLoub%(R57p-`TXFe#oh1_{&N-YN z<}artH|m=d8TQuKSWE)Z%puU|g|^^NFwC#N=@dPhasyYjoy(fdEVfKR@cXKHZV-`06HsP`|Ftx;8(YD$fFXumLWbGnu$GMqRncXYY9mwz9$ap zQtfZB^_BeNYITh^hA7+(XNFox5WMeG_LtJ%*Q}$8VKDI_p8^pqX)}NMb`0e|wgF7D zuQACY_Ua<1ri{;Jwt@_1sW9zzdgnyh_O#8y+C;LcZq6=4e^cs6KvmK@$vVpKFGbQ= z$)Eux5C|Fx;Gtmv9^#Y-g@7Rt7*eLp5n!gJmn7&B_L$G?NCN`AP>cXQEz}%F%K;vUs{+l4Q{}eWW;ATe2 zqvXzxoIDy(u;F2q1JH7Sf;{jy_j})F+cKlIOmNfjBGHoG^CN zM|Ho&&X|L-36f}Q-obEACz`sI%2f&k>z5c$2TyTSj~vmO)BW~+N^kt`Jt@R|s!){H ze1_eCrlNaPkJQhL$WG&iRvF*YG=gXd1IyYQ9ew|iYn7r~g!wOnw;@n42>enAxBv*A zEmV*N#sxdicyNM=A4|yaOC5MByts}s_Hpfj|y<6G=o=!3S@eIFKDdpR7|FY>L&Wat&oW&cm&X~ z5Bt>Fcq(fgnvlvLSYg&o6>&fY`ODg4`V^lWWD=%oJ#Kbad2u~! zLECFS*??>|vDsNR&pH=Ze0Eo`sC_G`OjoEKVHY|wmwlX&(XBE<@sx3Hd^gtd-fNwUHsylg06p`U2y_={u}Bc + + + + + diff --git a/packages/native/android/app/src/main/AndroidManifest.xml b/packages/native/android/app/src/main/AndroidManifest.xml new file mode 100644 index 00000000..6cc18e7b --- /dev/null +++ b/packages/native/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/native/android/app/src/main/java/com/diplicity/app/MainActivity.kt b/packages/native/android/app/src/main/java/com/diplicity/app/MainActivity.kt new file mode 100644 index 00000000..837bb13c --- /dev/null +++ b/packages/native/android/app/src/main/java/com/diplicity/app/MainActivity.kt @@ -0,0 +1,65 @@ +package com.diplicity.app +import expo.modules.splashscreen.SplashScreenManager + +import android.os.Build +import android.os.Bundle + +import com.facebook.react.ReactActivity +import com.facebook.react.ReactActivityDelegate +import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled +import com.facebook.react.defaults.DefaultReactActivityDelegate + +import expo.modules.ReactActivityDelegateWrapper + +class MainActivity : ReactActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + // Set the theme to AppTheme BEFORE onCreate to support + // coloring the background, status bar, and navigation bar. + // This is required for expo-splash-screen. + // setTheme(R.style.AppTheme); + // @generated begin expo-splashscreen - expo prebuild (DO NOT MODIFY) sync-f3ff59a738c56c9a6119210cb55f0b613eb8b6af + SplashScreenManager.registerOnActivity(this) + // @generated end expo-splashscreen + super.onCreate(null) + } + + /** + * Returns the name of the main component registered from JavaScript. This is used to schedule + * rendering of the component. + */ + override fun getMainComponentName(): String = "main" + + /** + * Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate] + * which allows you to enable New Architecture with a single boolean flags [fabricEnabled] + */ + override fun createReactActivityDelegate(): ReactActivityDelegate { + return ReactActivityDelegateWrapper( + this, + BuildConfig.IS_NEW_ARCHITECTURE_ENABLED, + object : DefaultReactActivityDelegate( + this, + mainComponentName, + fabricEnabled + ){}) + } + + /** + * Align the back button behavior with Android S + * where moving root activities to background instead of finishing activities. + * @see onBackPressed + */ + override fun invokeDefaultOnBackPressed() { + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.R) { + if (!moveTaskToBack(false)) { + // For non-root activities, use the default implementation to finish them. + super.invokeDefaultOnBackPressed() + } + return + } + + // Use the default back button implementation on Android S + // because it's doing more than [Activity.moveTaskToBack] in fact. + super.invokeDefaultOnBackPressed() + } +} diff --git a/packages/native/android/app/src/main/java/com/diplicity/app/MainApplication.kt b/packages/native/android/app/src/main/java/com/diplicity/app/MainApplication.kt new file mode 100644 index 00000000..4df63626 --- /dev/null +++ b/packages/native/android/app/src/main/java/com/diplicity/app/MainApplication.kt @@ -0,0 +1,57 @@ +package com.diplicity.app + +import android.app.Application +import android.content.res.Configuration + +import com.facebook.react.PackageList +import com.facebook.react.ReactApplication +import com.facebook.react.ReactNativeHost +import com.facebook.react.ReactPackage +import com.facebook.react.ReactHost +import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load +import com.facebook.react.defaults.DefaultReactNativeHost +import com.facebook.react.soloader.OpenSourceMergedSoMapping +import com.facebook.soloader.SoLoader + +import expo.modules.ApplicationLifecycleDispatcher +import expo.modules.ReactNativeHostWrapper + +class MainApplication : Application(), ReactApplication { + + override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper( + this, + object : DefaultReactNativeHost(this) { + override fun getPackages(): List { + val packages = PackageList(this).packages + // Packages that cannot be autolinked yet can be added manually here, for example: + // packages.add(new MyReactNativePackage()); + return packages + } + + override fun getJSMainModuleName(): String = ".expo/.virtual-metro-entry" + + override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG + + override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED + override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED + } + ) + + override val reactHost: ReactHost + get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost) + + override fun onCreate() { + super.onCreate() + SoLoader.init(this, OpenSourceMergedSoMapping) + if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { + // If you opted-in for the New Architecture, we load the native entry point for this app. + load() + } + ApplicationLifecycleDispatcher.onApplicationCreate(this) + } + + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + ApplicationLifecycleDispatcher.onConfigurationChanged(this, newConfig) + } +} diff --git a/packages/native/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png b/packages/native/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..31df827b18bba369596d713b3ed5f554c432c5db GIT binary patch literal 20754 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 literal 0 HcmV?d00001 diff --git a/packages/native/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png b/packages/native/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ef243aab6c07672628b98d8eb239605edfb97c5c GIT binary patch literal 12863 zcmdVBXH-*L^e<}HLkFn=L5kE!7ZDJYUZqO!9Z8T5N;``5CelGbN~ne^L7Ip(5fKq- zA|N0jozOdP#xvf3yf635`*QCcBW8qT@4fb3YpyweWg4M%Pl=QWL3HZWDN+?>d7V?I zPG2SbyL92ysZ-R!W&fT!C450e{;rE)Iv8@-vPwS(1-*GZoPgi|;YKC26}^3-zY zo~PE*qHt2c200H*ndHYmJ^$O9n0Kd*<9C+2OG4eX>cNdKOAEKg4mOuK#jVaC1xSDT z&iagk`RgUtXG)^7mnJD=C}e%*+2O0c|9ii}{XRarDD_zM=@7qJJt{QxU7MPmoSgsO zj0GvP-@0vL7&*%nW@Aof?r^V{(j<>k_EMbVGl~!F2-at7;fj}7rE>pwf7L^5@AyZp zQ4gy>(&Wb?CucE*(c;cs-#bru7`}l83A}Fu0yEQFwChhM@-PeMZs3N>+$ij;CR4{oq^71OuSS2UY|PrmrWJ)k6>V*m6c30cE=m|Cb5aw18y~lFuQR8K zQKX!*7zwwy(dp*9yT&>_t!ZR2A(*43*KX~G?B-S4rr#{KwrF(Mc`JGekGCao@ zJMZ2Ol=A5;gnr<(RHPCfeQ8b&2O&M@y_j=5IF(V4eRpFGpFV0j@S{f$N z9v3b2{lN{Q5E@ksTdb}ePX&^=yXvcPMobJTO;kG%?NIb$eTlw@tJy`H#7d;v`CwMI zcrnyyM-}o#mp8l=#`Yyl8@x081HZ_#v3jlj;^RnAX)BM4*}ZRQW;Qd39i@)4tFIU4 zpyHwWhgya=MeX;-#@jNRA3t(=GgmkhMid0;f1iXQ5D4plfU%di53;73bq|Y7`8PJ_ z&-M4~zJ5&&3$4m2dFkBKXRTHrCM$AR!dN)#9&b6z=A431XG6rW1@58R1d@e94|Y~J zcJYE&u9*ED?pO`0Zxa~UA^s(FVZLj9p;UnK(zzmCQSGY~mc3bHOC!}85(;J*9U*dN zDXq(wbsf|8Lb zd);YXniQF%`IE1G@q%#s`pI^zfktrqp^NpV&Br&oyU+KJWonP07)kl~`0TxI^#1yF zHH@MznyT!gf}%c#VD~bA;kcEJ4L+mbDPfCoEpVL;o)$L zXF-S4WC;l(`Ta&uTf`K`e*P3q#)x|_6%kzsUh-7sxo}~B;QbvLj825}P?>h=UETo= z1A_}TB-ug7=SNU<7s;9B8+TD{#At8t3gk(v3^H>85m38zbm@wK|odp|U+vuoypqoMJq zvt+C94#aTi4K+(6TCRJIA=Bcf@BA4YS(!DTcasWANqre>m`FEk2+X4p;9$gmNJ~w< z<7|TIZxVf7ZjhFdF$KHyT=3n%2xRxv_hQ{d)oYM8@~cHO1nJr6Ns3i5u;&#UeMP52 ztfD8^XS$o*cuUzt(5? z=xrzj$YOk1^>}GE<_oha$+#|s$Z}(R_ct$&2b~~~j*cQN(vFVP1(6q+*^Uc7#9K4&N}5In$R%Sy1TU z=p5BID*4{x*j?p{^dX{HkEpVGB>c*9OK_OFMh`5Jb+nbg|1%MXdmbCJ=(F7EC^xrw zr8wrakdQ{<3$i)fldjJO2lb6jsR)jnhgJ@f6yZ3$eh+;$nZRdRbr+DSc%dp?6hrFy0JbxYAjgZkO{y~7eM!xo%L zbnl!l7AuYLmu8X9j`Nl3iu*p@Y4dyIW{gnmkEVm0OXE$980sF_RJ*M#(!W212q<$l zD093(@|U?EY@^ApNIV-(L$$?vZY|tEc54dKztZE)t+5H*X{e6mOv}!`dGp~o?6Lm7 zJ_XKxrOYWMHMJ;eB0fjbc;#od!gn1U3jYafEx};UcUQgjoPS|#A&^l!A)Uk2X=P&* zTvKyHoHGTCBn z7Kn+7S_Ev}9Dls1(e}lf-8&KPadIQX$;rv;(W8j0EdC1@F6`F5J300X4O8l}_xSC8 zRuop4ldDsObDBxo|Ksja7|rPWD&*tGkN?ci=iE!`wsV}&eY|$RL#%NTN4I%cvD$v^=@}6SCvBt9zL>uX671i(v5pBebqu_S-qd? z@wSJt1l}pu(;>`b{||&-rQu6cmpdBjpWSv=YG2;kD04!i?@I-nHF)z3dG)llF`?1u z5jw{#eWet6lVp9>*ro0l>wU(W1aZYH>y!>uAcq<^zo|(P4|xHe5vXW1&25m(ix!HG zJGrB&Nyp;v8tW?l`5s+_{O+${kIhX_A?f3@9rX3}-;md72xt7N=kK+4b)~>w(JdWN z=J-+PwYUnoGI%Xf(YJ%XHH6rrNWFm0hGg%Mn(oir& zHY-kALJ8JJA)&{9?@yk`>oR^VBrW8EylRow!tAV@&d$zKQF%&nCH{d>l+x4%==l9} zqJ=K4IzDqKGu?~K$_hkubSjDaZQssn|NfoYBEYNXxBF2^Y*&}t{(jZM@2&($+1fl9 z--G4ak(yE^jeD_qiEJs01_ouOBD%V|Qc=|o6E=`4Ls8yz24(&sYq5&H*4EZ%y4Uj( zts!Sa3WX1)kjg%{hOv8k*(C~v;_;N@eyeY~Y=sYX^81|#pBY$KTIl6`d=zi{i+_L{ z9^u7MJA8R*Z*Nb8y^%cQ09TwOwOjCgLICV3i8_$uvHH_<+)2Em+?Y$}{834EM&BQh zVRRTU)TB@TCC5e!Uoxw-k3FH_=+Ql*`7*&s$e= zsPgb82@fnFq%9)noP2!~UBy-X{GQG^+1W8?3q((_yfWpt8Wj@}NqAFRTTPRYkeA(g1??=h4$D8P^+WC2&2Q{RGGuu7hz`M)Daj1Kp{8fs4J>JVi z=SP}@SWGG%dR?SX4$q9BVz;-cBjjJghO6G43}d18f@~s(%2Jdv7%HE*N>5Vx&fLz` zHI6VEqyalmPgww{@PJrsx?EUbcX>~aTr;NTzHYIeU`NH9HyyC&OstG(gM!>t#U&DIdpm97-<)OxYyy#-LMQI|r}ohJio~V~Q(?4F zsBKlIN$v5yI#YYT{ey#npFgQdM^G#$yPYx=y>W_CbY+XeLPEiIM#$^e-S;FP2v9a4~DLEudR zTE}=wbjzSANG^;-s-+yOYWDIIBLCyu9O+c^8yrsX_U*fJ@Fl<5KA#CC$%WHlp>V?1 zq6K>vdCahP?6eklqLwNEm7cByu8~MQ-VKVsBQ`B7OVj}h1j*D%Qcpq8=4O7MF=R4p z6e=1k?lyJZ-l0%iwX(7C0aNE)lnh*`)@4k%ST8-)@@tr#5h{7H{%76B6~HR0n9t)) zXV0BE-4-+ipniMh$}1h7%S0i&+oOJO%ew6WP7D6Y%W04-1>pQ-I1o{ZjTZXcD^M%} zL);2Hq&LCOq@+L{$peDcwYjsy*Va5RF;T9szb>I7Hjmv5G%03tJL-n>y)Q+uy<^VY2|4Xar?zOQwPQ;UmvR>m5X>P&@< zO%|Y(s%vUOAdoOidd!+ZF>`W6lcr-Zc4FN)G*Yea>saRG@zFu}vK>2aV7jvv694Ph zuTue1^Wc7cN-9@>_^|oM@UW%jEAs9t-*J5dgF25n{-`LmUH?Gq%4h2bXGLv=10w6U zyizmGU>a4g3kc|7^_4lMn51@z`WzGIx~d>Yduwy+h0EtIz!g8U9IxeAC&XTn{M3`- zqi$l7@%Yd;wWZ~5+jb@8sJ)k0Qfw?gLf>Em;HsFjyZZ}0-n^oWbi~|roXpfCp$^xb z6*EPp&iSP!PAV0O2##IN!{bwCW(**gHR8&%;D=jUR&(m(({u++j^O`}kz>983aVf>UgN>A1Gth}OnW&%%4h{ya z0i#2_DWX^yE76hd!V%{_f4S%J=c`dWXHQR0+R6$ufzZ5xjPl$%1Lk>SsM(w~p{uVy zAF8i5ZOGhD#R*%idzgS=WNf7$A^{w59I{v+9UGhOx5Hed#Vsq9#gVa$ zF~%0l9OHGN)}E_0j9yMu#q91cW)#%cT6p<5q-ADaOH!?5ID7VJ;c$MDL36Xk*3OPDR=+2S&w{6WoidK=C5Es(xU1O~xrBH-dy$MA z*OkO)5Z*2UTr?!)(c{PU-xteStQwk*_bCZ~eE1-RLtl>aatFkO>sAwJYWw+1(n)Ki0%>y3^ z1Ox;~5#AaP*Uf2ZXDiW+*#e(^CIULWwNxj?7e(`RoB-Glzs|}+k^*WYs1xa$?CCE4 zhdcy47jUqR5Sxdbw0jg7Ed(g+>L?)Yw2=`hSYlbLfu->=C7AeL6L@Rh(};zycKxO8 z9X5~x0@YW{A3IUlkOVeoOZu!-8ToB55z4Bd^f7gxKcdfbU?DVzKilH{>JFcnlbc&w zXk8tHdmYp0WO-1NtnkQ_Y4KhENwbpOn zgfnO^o%=XP=V%CGQ+PptcmZ)(UZjN0gHR23vlL|xMY$SdF;wuw=A%Jd;adnuqP|C4 z?7queLveyPZrqdOOqhnJLxrhgY>T4gtqJMB&ZS3-j!1zfcV0BN7?Ng0`;@4B9%Vb{ z?STD6;Kih%t|=ri*w8a(=;6@SZ{B>I?_aIZeJQae225=j*E2lK(LtY%&0{Yva(0fw zLy;6K#a=HdifW&N{CqWCjXnJV3iZ=4IYcOQWkodOhJ-|@osoEKD`b2pT!YW*i+c`E zt}l5BD4LBb;+Ob+gm4=3%6OAn^)jeqoo*G#sJ=cSF}}=|4yevX(J?Wse=llfWv*>d zI`C({tICLvuQaqCgHf2mi}#30NW>08;gBM1=V2>g1>I2Rb8GB9Jzv^KbxuPKcLM3_ z21l`h4~A0XJ~G)681|)eXHZ!>-;-3&=OyN*!HhuuF32%N{@U21mL#y@ z_9%Vpa*N7^)nt z)X+OuUpZE_w_ig*Q2$w6)LqhoAm`1tcx44Lg+1}PGosIAS>f1>8F5BYNA%zM`Ghke z@hXYc05l^)An-7IU_A8wY2R{QSJ> z+)QK}2|C4X_JpxOBE2h`q$mn(Ix6>`GkQ3GYs)JTD5YZo26HWtDz1}6(iBN6a_9&f z)E*}PFyGkBq52Ju#0!V!lh@_Z?IivU`a1rF&JU0%3~oR6%nmB7770d=0?e?CZndY+ z18C<2qLYGid(gMBOrgEQr^XiL>&iDY+wk@}F^nkEvXffBkG|}8ksF&%sj*j6;Np^%E?HQPv#X@B7YY$Ci z+qk+uKLL`Z?Y+F9>$kHq6C@%d^N^Ekj>ao9bD8Ouduq>H*Gb~DMKLj6gmZ%kW`vVC z++^DRPDc1VU#WW{NvhY{8kAMCHkXU-x+L%UqfZ9F~;O* z8H$J+)fgABQe2v@=a)=ctUq^#6;U!E+=Ij6?2AhEOF_SGQLktf1dtZQotF8_)u ziLHN7^Fbc~B?1YF6JEUFIZ#Brf#fiZ#3tqPGr6>SnWgg}VuWwr)R5!;u2^GyV@Yt} z!N47!a9R*4T>Pe_PTZ{ee0Es8)QBip0 z{}RNE`z>G}JizZEtqXpQoBpn)ivQDRlfIl}U~c8U&O@3!lc&X9p$n!qO@su-Q$8^oeW0hkqH3&Hlq3cO+VkdT`nJc>z1HiK-kAZWK80(9EEL2 z;+3OARWTp+9npLXAj^^xs^mOmRBA7Xff@I-o`nU~K8iT5I$+A9lgqW5&wG1qM#Tn7 zYykMLefsl<9zG(w*|M|e;Kzz9D-+F{Z1MRyrKM3lpf_=*p$c2T3Hn>g7nhfFAU4~zHyGA3W6`=!pXEI&pi_f{G%LZ!tw0vN}S`H(w4Tz#cqTKVoB0mky-0Ioc1 z6;c?Rnrd7>IEvIrPfdMgg+|9fO#ekxU#gJnd$;5=?P}<8uL`-MghFA_dNOX3j{g4L zbr~tpt6e$(m$dcw{{d51F-tP)6ewL@l#!i1T{C2ES6xt0pp2=f_KH_l zW(9DIiVD7H0b29fQQRIF3ZxnNH65v>08z{d%9FPQ+-HkrRM*@b=mO*8fiB~R7wH7d z^Nq2Hz=8)g4*+R@#G3fP0(9cg>wAx$w$OU4|NaNp4^q_p%1Ta4Druq)YOr=9FwAZQ z9-WNY|9s_bQEL-$>Fn(}or(sAU)-FK`tsvP2@G(s!%{UySf?uzp3gx8g(`#heY(9Z zYEV9|l^x)n6(3Itxh-R+o}ZnaeYU#yi^tZ2#=v+M%%WE50N9=&x&||euT@!Rj5VKp z1^D*k2jbzoM=yJXJG4p}5Cw%?%0OI}t=MrI+|;jfs;kvV$>UO=JPB;)gzTuVPYcH6 zwS;+aJ30yW+%k1k`|j>^9Eb@I0SUfUEv#;vR+++cba!9#!cSfMG{e?n`7bD)Qp`6Q z85uu8thctd+CO?^be*3+O{X~j%#%x9whf=`4;)?1QlNmk*CAPg4k>$EVSYZ^`_Xvu z@e#woV$Qa|FD9sZ@hyO3;vTL2V(p;M z3IqO8L@vF1C3!|rOiaDbRMr{vO}e_Dr>L2*y+`md|?}ot^UxO||2d69FAC-gHU5IqoZmXX3_)`>tID1J4!| z1Oiuh`!>9n?kcU?ubqp#K2RCEyQB0qNFpm^XF*s89ed$N&0^!h3Xs0<#Xg^Bx()6tDMiZWypC*V z13738N{9PYo5^85C@@fpL78bImx)ey6)%yHplY)gqKXKd-Z`LQ=A{K6hGt-#*(xwF zS+{Up=wIuEGP4Fn;Sns9=AD((ZQI|%(KSIQfe^tW_Pnr5;C$E_X_a`M?`T)GXfUr+uLNOL)U1DrvY7O{1zvxL7dn< zc<>bD0d`!9B8m?~-DS(zK`$ZMQ0KiYVdD1tqg9sl(G!r+I+sUlDNn}XU8NA>L^J#N zeLTC;a3q)|@v2_Hbo1C<5_Q6tF_fb#TSFEOj~{=~GT^;mJn#V34oVxas0wt3Y|e+n z!^XRZH$h!_U6u??(m(JC_)9JNP>_oCFjn5)>0lr6wc&uuI~dVc8tO6FKzgWyN{M4* zj*C~82h?(vHfm#Qs5Vi@nDv;&*_j545(GO(f;QxB6Suu}JDp;eXd!vF)5vaF(CU2o zW0?bji;Mp`?#k8Ut)wY$+D2?_^wZk_?u6RP_MRS)#x-V5unGeM(+w;FlCa!Ks&|M< zb#*T@NqUpu{TS(2P#NP7TCP_$`hN5`OYx09a zYx#FjMm2boFjnsFFRLATU)9+2DJm+e!x^Cw5!z(TQsKUVqEmGek2k$wKLFEM8S^Uw z&57^KlT)2>EOuUABcQ1Zr|Hn~n~ENOGJWgX$C1EeXGCl44A>M{Q3XxxwCn0P`@oNd zJVT`W=AXszx$fEX9w*0V8%1SgG<|%MA@8ldrlqx?UtZ?Q=)up)SXhD&By|>3Q^1<0 zUJQ1<6xhB}n$Vdt>8b~r?cX^kTia)4Wy~;6yLG%?N$~vqKPwYK@AadjqX{S;>hud` zc|%jvDI-TTgW%8RlRJ|+5OsLA%114R`h4aKD_^XQXgl7lzusPE%r`BwBmwmhelSVu zvV~MtQ$v+(2X?Miw1Qd`c>Z%%J1YU)7?|BT07M;%F#sgM7+GHa=glB^6QFL>j4bg- z3vr)6*d|@~IGnxdN9|R%$R^ecGQESQjCp;~$?1+aRq#=!v#sr%jZHsLI+$oEgy2nw z_tbmNSGk!fHEsVWHEr6z0glV!A|na8%;az-dqGo^S!GXXXsFgF;lg`O*kOBOV&d5! zHH;;Ng@0*DEK5+Zuhf?WuDrJ^62J!RL|~VK(UMonr%`E`UoN1*nJ_sg9(3%105ZT* z`3Nx?ff9?FP6QBGRwha(KnCqOr9iF=HJc&L3wF>ye(dgluzYr_=jOzk8lLdJTuZJ8 zeHk6}9UY3F=ldUCj_VxZwIP9X`v#JLxlikTv=zSe5d5KgFU4Eh+Q>!0wf30&KqnP- z=jwYUmVo!0o4R6RV&R>a>1_zcK9q;HC;&;|O=U9-)kJh&hISkf&b}zIWa>V-^RI&& zoDA3KU)!9&L}*hWI7Es(?IYEzX#^^!!;xTS+8j8xM)GD5NR}V6+saKS&TeFLbF;Mh zXxSN(YFAVneQONk&AriycLjxo79+TxDQo6#cLEQ3Gbk0cI8+V}IWdMBb_AjIMO&4% zF^@6}AkV_uUIpqV9QRmcd; z4F2FkNkXY18uDU*N({%YjZPdVI}ohj>H6dO=YE%(f6}u?*KKR+bpMORyk&6_+j@Y%ddxUg!YG?Mr>U z?|GrS3Y3OvBM|Erf#8dXda5Yo{qtc`5K5?;n!;8WS2nEc)Y>F?75Jy%Hq?6oATM0B zAR~Es3F5If;FD7KegtspF&EeiY9E+?3dq5`&=6Hyn;oi_@(z+_1vpUNtK%^`k;}Hx zllW;asmGh)mV&ZuefJ(dlp%#FBY3m^8{&B1mlEy0(6fR9c&QCU2KuI$3O_SGWKvpU z60=qUgF~EP5?@tE(mJ@iC#zyU5QNCyJ|H3BA-{+5A=7l?0zjhWpjw7kqUw#%&@y;H zSvE>AXvRD}Jzv$#&OuHH2|2&9HpyP|_N~15PpFgk#2TWqk;u>5rS~6g^i0dMDLID1 z=BuozAPffW3lF?vYR4a6uB--^eGXeY{u^fEt;@gA0-&!SNeEr0+mH3|BG8hCKbSZn z14DQ=<6-K{m$2WXw7BJA1bDT6|9)m7=p-Dl$@|nh@5@2w0S?GZ6+v<7T=eu?(4J{& zX#oJ~1Nt2pxUb9oy4bzW`c5&l-XW8<;+3B&bF^qeIv^&7UZk;?(g9T18$Iqv`(6-| zk%~4Y#@H!wyZ?F-phY5ox-*Vo&_k++5HiLVKwAtkYz<~rog%-;03_ zFtd)x%)COVOhsCMF7?3j{?}8Ih#pN;Rq&VY`MY-NV%D7!o_{EyGtBnEgIIYs6$gh< z0Qb>g3-_x7`U3pOyAUk|VvmUM`dJVz-j)Hmq9RgQ+dBmEebV8^R5C!+ZvDi)?%80Z zA+iIStspC$242dO4(`-CA;3pR<8&h1+s}WSzXy9GY`6|O5^!MEOyTKkU5+x<3sRuP zjL)E~Z;)1Z#{G%Cu4??fLY2b)!%|g@_2A&3p^*`=A`NVLIkc&0iXvK9AGXYGP!ffx ziz2Rp)(JSPH)63Kbka0vPtYc~W6(SiuZp3N%!nDr!~Ta(tXS|Li3j@oH4O~FcP1vT z2BR4qzMHVI4g+PDmzNI-8jvx%6;vHlyk_LwM>i&Z^F!idy-*wlBZ-S-;o~i&bG2cRU@3DNb-c$;xGWZdPAjnG!cGb5Ks8KfR2a|t| zerVW&KCv$QYN-UR&8cx7 za%1|lw8Tbr+J;0|SF_8ueh(-Pg@808KFW3N*If_?-orsW)T+?TL+I!E+4!jQb=fQf z6H|V3P)dnSA%dA%2#NwbLgR(HH_v}zm}-bDA@rviJGTi0$LzL$HQt!bfOf?&lUkRw zy}fHmAcH$Q>jHpBUdOr}AD%~HB1TZMCU zcWm_wH=%STK!pgn={se$_YaY=2$H~Q&mY!~JXE)%8 zE(K@)&Q)bdj1mOF@B;KPJd-_5#v&~*`uH5a+krih28dLlW_GTXl~v2nrUNW5HMEH> z>47^yI4>jbp0)w9Y-7wP4y1bSq)4b2iNdPR#G|4_bH4j1|%ucT>lLPv(Bkr+&Y zaz5!O4yLydi#5Xwz|Q+R%|M~Cu`xK~Q4i2)1!oP64j2+? zpmf)~Grv*uBh=mOV)wUavUfqZYw(_Nbe6o6DI3l*atSX3Rxm*az@K1txfI5}ex*<~ zn*Cl}OY>@%D}*8=|9{ayKHO+YXh~mtjvg&(kZgsfYEtHfKgz{5HD^-z&BS~;s3S{U z#b5tDM(g3j?DVuQk=p?yzv5R`NIK}@>*$p6M|1g8=dCxM0vMglkHy_ea&Z0QgfxE^&F zm`!LKH)lW~a!vWu`wKOB{-2+JCD?M#>D1ijmO-$5-Rh5j{HBY&;S3=eVx#q-6JiFekH^U|1sp0io!klGFi)~ F{}05A4LSe- literal 0 HcmV?d00001 diff --git a/packages/native/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png b/packages/native/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e9d5474519c701b4b518f2f0a24d7d8742e93416 GIT binary patch literal 29081 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≠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 PMTS3g4RtcK&inljbZB-$ literal 0 HcmV?d00001 diff --git a/packages/native/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png b/packages/native/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d61da15d2410dd60355d0d9ca34bb2aa741267f0 GIT binary patch literal 47123 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 literal 0 HcmV?d00001 diff --git a/packages/native/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png b/packages/native/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..4aeed11d00badbb02d5b40a3d24fcf97dbabbd5a GIT binary patch literal 66529 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

^;WArDFIvK1}FmU%q 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 N_G%kxm1)=q{|~x=+3WxS literal 0 HcmV?d00001 diff --git a/packages/native/android/app/src/main/res/drawable/ic_launcher_background.xml b/packages/native/android/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 00000000..883b2a08 --- /dev/null +++ b/packages/native/android/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/packages/native/android/app/src/main/res/drawable/rn_edit_text_material.xml b/packages/native/android/app/src/main/res/drawable/rn_edit_text_material.xml new file mode 100644 index 00000000..5c25e728 --- /dev/null +++ b/packages/native/android/app/src/main/res/drawable/rn_edit_text_material.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + diff --git a/packages/native/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/packages/native/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 00000000..3941bea9 --- /dev/null +++ b/packages/native/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/packages/native/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/packages/native/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 00000000..3941bea9 --- /dev/null +++ b/packages/native/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/packages/native/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/packages/native/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..7fae0ccbcfa5c1de75a85a4420f0d8a01e2b0744 GIT binary patch literal 3300 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 z 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 literal 0 HcmV?d00001 diff --git a/packages/native/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/packages/native/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..afa0a4ef4ba5230871e032f2a6df96ec572d7c49 GIT binary patch literal 4103 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 ULJ*w>3_FmIhrfIM_Q;I?0&7K2ZU6uP literal 0 HcmV?d00001 diff --git a/packages/native/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/packages/native/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..c4f6e101ec73d0b675780f81d04a3d1b2ddcb04f GIT binary patch literal 2613 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 literal 0 HcmV?d00001 diff --git a/packages/native/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/packages/native/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..7a0f085faac07551f2407aea014b4ada7044a04c GIT binary patch literal 4535 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 Za-wxV!t(TUd!WS@wBOc+(qO|#{9nh>`J4a% literal 0 HcmV?d00001 diff --git a/packages/native/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/packages/native/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..6c2d40bf55ead27ea9e0f88465db2de95683b533 GIT binary patch literal 5673 zcmZu#c|4SB*fy477;Dndv=|y|8vD|uELq1|DQm_SC)*%f)C?N?P-7{DLzd&%$sSF% zA&E>#!l07GOymsd)b}{w@Av)n{V?9&`#$r$&-2{ZeO=dmr`p?^3k%8!a&d79TUwYp zg8!cTe*#eOxpY5DkBjRd+tSqNVl-s^xlQ0mSXaqz$+xaTPxN`&y_Ui2C)RZg1G_rpg~k3%evz1mtmO}EX^WprBFPR({}AR}vAAbas@QuY9OtbE z7f2w+&HKt2i7o9J7Uf@)!6RO?I7*V(3g2%LT>^1@JE+j3SNQ%uC(Y(MjDhg&oIC8# zHA{nr9*I7-quDTcVQ6V}6VA3_9;QtbHK^(&WHyf!$vV!FXGf0B&*adwi@2ri=BG(4 zt_A2TjnlqNS6Z81#DSe7Y*(gxkyyIIV_qzOoM?MLl^_)jiH7V5v31x|4P)Lu-=f`l z>$vhE)JpmZ=2_Bju6f>huBm9a>d`D2wj5K#PWM1Nw;N=h_ZIZc1KISMo6FA?7N};*ZjrR+0LvD$ zq-(o@vEn<|m@!Nl7{=mN6zMEvY;)!xRki}NOP+?3KE+ed-ofQ;@&HHeuAwPf6 zyY;%G@HoqI)u7o{9}T52eRCY+Lmei=qFlAqLYyqS9+_2GNEYd{K+>m*R$jb+l)U^F zYldc9Gpn&l13n%+MZSYedKEK)jcwEYoaAT^%IHmT;+)v=w-s*K=>v!K~6(`moCSfR(j6ybh$=h+Jbs@Q&SiREdB2dwMNQg{jSrr$Su=hPR*SMyI%=wPzH6?Wu{yCXB9Oo( zE}Pqgfg4@VoDw68yIh}G)v8;|9_xxON)IS_pXKWu8`Gg&Xq(m2^6V$_M6%z7A(m&~uWjmc*b8zSr)Ab>t8*akW zqv|~Qq-mlyr9p50pv2VLb_c;bvAjI3sQ46&qmG2W?}<;2?6R)9$n3qNsYl7oU~{32 z4GK|(whoFPdmgv_2+^)`5Y^Qw7T}#}1XdxbM$#6a<2)VZS7hXcsGju>>%$shuf62lw--zLEPk#%tGgTRAPIt->rp@EfJcC|+WsN+=k~;el61-Rnr12{ zBc)WJ@3SUM93QYM>FOHw{oT9Hi`55HOH=m0aVNpLYi_bFILNZY?Zd5{v>Rec6KmW0 zBo?GTEXx-GHIF;e-k$_FN%8K-z$uL2sDPGtkMu84FTU_{L(&22HFQ@R8|)=)hcIw> z-#8gBaNvc{#Quo6x%e;JHh)hFlJTKAc*L7O(wllb6sW_@7&ZE9mk|MQn>(La&%@I2 z(x;4yFDxbjRwD!s4iIWM9MLkDS}<_A)S|KHR(eMVw&fiP9J;g_QD8|=N8wWS$*{|h zUzc4h=xf4J!jOMCsc6aANJ&|}!@%)4gqdP_DDvTfA0liuIq2_aA=GTM<#Pz_1&?8aFlpGDNgY!8`t|E7h|jn)Q`!t}_>YamL||*b zmN1}+455VV*|w-F?(V&SY|3*`X{b_*k{mCWJl`)aL6#vw>tejJ%Yt_RAT63_Q1}I( z{w42)mF=zak9I8?qeL##RHT z#BFI?Zr`w%Lqb?XU%qIVrwRau>js1r)?ty*19|$#x5oOr#OE|RCmFCK{$(g)Jg{}Q z_s}bXL?52^>66Y}uwB{!w~ET8bv+S6jgKCjfOHjw@&IQ0xgN5%)T!^}^miE}0Nv8w zPTONGFyBPj6(@<8~*s5S5u?vs60w=ET2HCsHDeze|-`#D|)fh*)%D*O(A1=r5O(GQ7pF@ zKO`(tr~vu5$4=RIHNs$^J+iCv%vi2Cny@ydb0@*PN{jx)s$5@?FKcu(2rY|>E>c;K zw9`Zv+ET5YI~O>X<1vXQ)$%k>^4r#v$j8%b)DhnY`;ndt&H_yLN&Mu=OA&3ej~9;l zqq9eRSGRv4>8(NE;){7}Wsra0BQ9c&Q!O=ZuV=DE2MB@a*ZxS0#w)ZY)kSgVyb}Xn zB!K<<#AP4$za{>)()q(>(jq1j7q#^+q9J(1JuByo3swNT!#<9Z z05NXeJ6$Ffh3qa0M#$A>>MOuS|%z@v@^SuY=wLqBl6L4TW!vUHcC*fI8 z;bf)$stNaGO0hf|!O*g-ya0#t+|xk7Eh;bEuNdxAEFX9Ac9sG}hc7_GHibo6EYB(D z-aDRxxK@C!2*4nrI8-qpT?1odkc+_lP!S?LI0jA2X7CQ)R5=%A6qINpERj822JR20 z3bY0>SbMlqw<5-J9c{S$e8 znsx99OR=Pkt*4Kk%%1r!aNvqZ-NYX)GYe-uUH10)pST18(!d#Kfrr>r3K_73Y)ppy z!xqbN^7E24d9Vd=$iP|gD;9g|9)B0}vyiR)7`gRTKH7<;Qn9(fmd z&;0a#3$wLir&$$YFbd27!0((ta;VmIR)Sa7+yZ!+;xWQvuXG`R7c3}fuEecKuFzJ! zZYD5b_EpOATlv2rHO_HgvuJG=w4ZTzfujbF)HLbw-;*)FSikGm5))g2@23v=9RYCP zaI^w7Uc&MIeR}?IbTLUpe%pXT;+czo@9I%DEb_Jvlk(u{|D`l9W(Cp~kgV zWLb5@D`q$6&6=wL+@!*{0G;QHcLwm(s6C!i=CLpVbfZxn9FMruSS*vZAowvSz8W16%Cqk^x_3OzODnAWi;IhuouJtp$ zr-={c%K(HkzHV#?(f^v10+V-l$3L0E2D@C>(Pd@ZUW=%09U??Vaqip=>-fuZ%7!T; zH|5C;?`IJYJ+K$!?Qa~!#8G4cbb8GicN67$R4WwKH3C$4d%U)kUVq56qsfQG#+gpK=iKH>uzm%IbdKCSoHd;DP zk)j3!=AAZ!Uwh8T$frFhT} z6cgNkx8+tfDRm+(=b!juH#HR`cq87K4CKuV0p%PZ-}OHN6i1)LAx3r3nbdi-5wK>T zaG6fkwNa5WNIC`%GSKgT!|(R2=eZ}7n)95t@?%>V#4<0xI_$@H4e*Ueg@w>sC)Z;A z3w;>4A2W#3uv6AX{LO`vxHnv;f3p=0EWIa!42-)V9h6%D3c#$qNIo_%Upxk~#_=30zV4E*qUSb%zbS8@*hZRn=9COWt6?49;pSAV-;CO) zxJ9F-E7sjT=c^~Dz+6^p`M%_N&y0a@Q$$_Th`eh4NZ7X}XXmT+%{}wpz^aR)P#?DR zH+LUlN?Xj7&Lhl{@IdK6@llm?C!iojK(3d!RPo;E=t6K>yNR?<{n67dL7wpvy)fWwx_tWZ^RQk2|G5orFirDF0+LraTX z2B?YNX$iyoJO^(HzR@QSB)aqcI@sQy@gYnEly!6dS|6usgSx@U|Es$1{h3ob6SxXW zgw*9Lmz8~$^3x5{Bzstz-Ym%F4$<`FJz4g`%WQlKcr$jiB1J2XitX)n z)&_-3@}TesMQm`Cf7{Ksk!FCm2E2^GB23Q(__30)#DTtUo~I&DhccwevLC|$O$-5k z2p#u}YOB)KX_e1y0?i8?`n+;(Zxe1qurKAffP-hQMve zu;YK>B^LPW)FC6l@zX+xnlzORUZa#LnT2B-nft2*3|;{!36J>i;{08pMDe$Wv~nDi zN_siT$Zy_EUEEMwY0804K~=8HIgX$aRGJc?SPqEnyf_1V($yU#)iV_x`w6PxLb%*( zNe`Wd+KAz4e*wEv_t0DL6j#S{+Ha%(uPMj{N^-D@7M4)m!vhtdXYeOs4k`DH+k=?| zuizlrD!&%%u0qDt`4Y{ykZfpiNC?-M`U%h%<7Rss7TmENzmDqf-{VlWM5z^YkH~QyiEGdeT&!a6JyzidF@=GbW=3;3+)-C z9&(vDLL6q8LqfPixUOTNQd!e7Y;HD-7Ea?3t+6pINC-~|WDjd5WjAQZRt7&en5SuN zq-Lz4E@=VsjBoxUtTB3Xo^PJdgS!aQ1B>I?k+DbX3p2B5$A}9&)6s%guV^EX4F zBwmx&`t?3$%-zv{;za#oNIms#rJ20g=_G5LLVq~b^>eo*K4dMJdRvv*RCd9)zFE2J z2Wi3uHtC*j?OK$+pj)cCPm6u zEH?CFNq}@7q9^@~4H}=FwqFVPb64t7MZ6A%*o?D44}Rzl*A6cuR%vukCa5G_PCP1Z z{tm}^s!N-lSlN13`v+EY&z$LA1c%wpaimLkCeXZ$&+3&oSP$jrptm4Z$$ig%EWx?w`2<(rLX>zL*?$q!` zS)d=eXc?9oCGBstNf%^CED8C$cLy2!p|9wwq0pu>>xvZOn`q z&_bAvpC+b#UXh2)iteyLswH!h2LpX(XScoMXQNDlM;xjT5V!*Jr6r-s*wEC@Q*qA~ zyC)}B_3^L9@b<={!wh_ zk3uRdUGC5^xoeEmI;V`dKm7P~gX`DD)V6Vj-u`|w3hr3#aHEX|XGcWL%?VW7?D)8i zBw0gBw5+@wt1T5H+UinPcKPAChIvls-MbFF`32_e)XFTgZgz#fk1ObY6A)S75XQJu zhSRy{BC0MW8q#;C%+TJN_`a$p*YxniAXN;}=OO{SogG!jqfR`P$7!`WX-lDw9xW&> z{i6d%o~katR*;!_=<)FN_Abs28L<2J!MIwG50f>day(r8ov{&z}Ci!KDCozB_O$eI`E zH9r4z%9P2SpTDaknc%MN@)O}+s4vfy&QXh|;6xRu^(V#i)g`yH7CewW2(poTp@c>H zj-+O3-&f6VR5A3pyVjCqk@c*a!qhmoW?S0JW@|!3t({1{APs9 zZ8M#qM8-_jQ6L;MUV22ICa;4Bnc<#ROPe7-z4UxcN#0}&ja(f01VvVSi@yik0v)6B zGZnJA+f5|NKtV*o9gi8xUru0z82g%^e?4=t>!W9mWrbz+(8E*eg39e%&tF^O#K%W{ zyKyc|JvMaaYmk-vT*;AV5xaJ6{zEzo^7unvUt~D4zbJ#7ys|>OYZpMTz}9%3C8t2n zx3WS`q6MZoE`1flkA1Ve4T=xR-U29+NZAc9)zc%FFwV7oQm>r2%HQhhsxa-PCsEl& zD!ZKQ`i8S-pP1!8aVH@^zR%BlAgvY-%$v5au0cK{ShyNz8(4phBHQ^i&$qat;Nc)+ ze6vS=OpLUFJoAp-m)~iqT$?Xp-WhIKRK%O_JIHQh@5|r@ewdMJDCpEOD($B}pW(#H z!IcBVPrbyT-YwoiA3S z4<0^zWyC7M^8V*O21BNM@>yac0R7o>G8YVro3+BrKA1AMRwdNH3puq`dFbZyj^y>` zJ7S3M1B!ENYj;5*4B{d$zu#|vS~X8&%!X+9&XAJV>%6obFz}xhWy=Z?4AF)ndt0UE zu3Z&fXeuIoDuR)^>k77ETSATYp@%`5a6ixRR@QU|w)lE84$l#N!?RV*lVSMW2wfCL z7)$6&q$oGPIo05LvBiBaf+kCj%yN1_`GQw3FoZQu=5#rz9!h^;1O)(T^lnBzJaN1| zuh-6$c|iDef(ZUNx{ie#L8u99P80PllkU-ZfOlbG@$+d53#T&}n@ZjAGCOA1u%#T~Tt&U#rg-_e()ik+C*QStti< zV*dU|janJ5J}6`#MDJ@WAWp&nRL9rL4ip^c=TAulhb)d5U^>>YYopE2M_gfZBVk^^ z*>5I*{GtuX6MJ46oNPG!XO!I2kILq1VrpVSiuHVWV+7)pEaLu{nFQJB=5cFjhov$H zo-jM=uWv$r?%nu%Fzv(5*UkSCH=DS{>uUm!L;4Oqb!~K0R?b{m_HSPkz^R# zA8OX#?JJhac=xpaWYb@^RFCcj4|Hw9dzdyyNfax>Ghw`{OvC!S=~g6kG3o>KV({F)B)K`1A*E zOS>Ss0$MCv+^z8a?0b|i|Fm{~`zE)#c5Gn4VM($wzZDk+?XYF^L@?$0)$oxDy|Vd- zqjfD9;=?S<-5D0;anE0~y~zHCvI_v??g3~GiwY;o@l(0jn(O?hb!-tQ$-%())|N4{QG1R#!ke&5VI)V6l`7<$Cz`MHYmT{1h>E}K|Asqd?XHHP`TQTJU$NA{+g z>38du>ZljlF41~aq1?@hq3zjejbs(f6B^Bz>cK(nyl}y@q~8RJ*x^HGSv%MTh0hA$d7=0nK(aOD% zyyXO-GjV2Kd8W*Z(u6tFBAkxb+1fLHi9f!&c6ihWQvUsOp**o5y5knBSO2} zGjZ(k>w}%-C)H0UTf_W|v%VU1N@nD7-REuei%VuNvPxQBh zr&gjHLxrvJ&$E5()=~0V{FMw=3GW?l;qQ+ka4wzK_hKzd2j(A5N_!hT+-soRGMZ!$ zyvQ-2W$Vg=k-FiQq;GNc%7o6*+9eK1f6WlY(Pji zJoV|1V?>pZigOKfeg?(v#sbq_=ukWzHAWA8%QXozAZcJK$S zC(<1cJzKdi3n+)gmOZq#{f{nPyJk};1EZa|zQ|>o6|`K)k9kwxX>@V~)w-lg1@qcm z{ks<>BL=IxchryS0Z=&{Y%xLyen<5f3^sztnzpHMsu&J#^r)B4?hdKI>DZEZKq5-> z`wo!mTo4e8o9Y=lIqRqd!;YE-22B4f4#(R|uBWNGS}uC#pVpgP)OQ%j?v1UtseF^i z@aa{BWL9&MJp27v)3$JArto^!^!X>JodT{@uUB^4-}33l!a(w<5!vWtsBQBbYiUAk zy-!nGS|g4;+O=qg-cRuL-X$3?-XlWb0x`BW>4pb}VWR<2J6JhdSCOwI zR_%t5-AUdKXFJV)D9e;N+O^>E&X9rYvpxMx53kcb`J~==bie(fK4s=Y zOg%J;y#0@a4{8f*(ktL3l3L%FXV|a353b7Yg~{JZ9(*I+xtmOBJYMKeS7r~>4_P>c z#5!y4i49`-mMl%Bx~mYk$9#De7i*}90^kC>*awLWVXKJ1gZcItF@(UN$9~6IGn{0 zleG`oRYzWPMD{3c8u}_mmRoydXnz2Mtr|L#n6EFRB;M2X`};zF6-;pT5LNI85U=0S z3ojGSQO!GY>jeFUj4#L!gS!Kxdl=|LJnl9My&;^R~8_{Qu~RQ+%;OxY)6}m zXtJaDjhFi$o)XjyZ@R|xX;Q*S09K73l6Sl)$-veQzr`(BkzI1P=Hhfd=NNPgIGdMf zVR*{1B{`>7Rc7S+uN+INq;Bt5KTQ@&cpX7)zW$!Skv6*!7G7pu60kmloYOPC%6!2q zX|0fZ`Cnj7m{U)69bvU9D}%asv!h~leIq!ztP=aI-dk2c*KcW@yTd9`>z3{ls^<$- z`mm&0w|{O~)ee^wwc#vGHKeX`ikr2$>0DHZPgavD)H}q_4*eFFTUFe6gKv^{jOb_T zO7)oNO`tVCYg|t7j&;^8im69AAU3k2MpWz%4dN7)o*6PkcOyL5u(rldHlX+TQEwt+ zNw!UHUM8Mt5MZAyZxc`JCbvHqJV;su-*qZGqJqKxrnEsBW}s@cZS}hwF->m!F%r#h z1W2V5E$(W}NRYX5XmL?|I~ggHa{WML_od%i&ybFUEy@qN-P4e zn4v_f9j)V{K75Z;#%Fo6v-JOoQ|6;S7?&E6v@(?HZeeR)sfL$%>A>2LZf3|!X3_-e z8LSX&O@0gzCmrTP%EZzW9rwcCkDle89Uc5U|6*Vk7Wn?iex7Y#1&C)=r`9i+roTkv z0UF?Lc~b^HdDxmj3M<<9Y#ODI7fg}O@3XM1(C5zOd&=ZgXIc8bo{}KD+~hU03`%v- z_=~oc5BzUV8BBmk@KcbC{~W7Z&j$(&5=3ME5dd+V-0mKI<^d%SkAzfi;0mWxZef|& zaMAoc$SXNQ#SE}QC3++y{7szP>Dn`sBISVWO>VI8Bwq8b3^Q>=(mga%O$9?&{TA0h zuP#YJL?0f8E~Ih3FUAz)&t@e$48o7H^~!Ma!+fJYAqPdh}fv_BS07MjlVaZI|Gm8MtxW)zJMq{#Xe=jxR;ld(1G ziN97V0dawv9$j0?loPX*_FckuOAFmp{C%FS3M;y{wrHzSkU=k`UkYw{WBt2pL;p}# z+H$-Y7{P9`(QxoBV0cJ1NQ~-M+>RfsimPk416o20B)mmQy!rMQo_ey`u`$w@;>Wma z*N%~0ntl_6G`@*j=54a*Wy1PwQl+g5*tMNI(3%G?gmEz7$MTC1taYc^Dcxns+MZ@*hPyKB`1@u z3Kqf%jROfMIzIXsmW-sP-gwV9;y)z__5_lH+Rp;d`~Nu`ZT2iXN?q!zMp0i3DKkxA zR2dYYATKoWlyI@Vlr9uY8XF8u;+sG(6%~%3XtbLD>#s*IS67cgdO)r^f`o|skjv-) z0YZCeZDn?;1ifW^5lYpHUhzMU3Z3xrlew4Oz?Jd4X@EN2+!`Rky_kKK=n-WGiGtga zj|IU|M+tcs_`b$P3lurjLxL7e0crr)!?(Bs`#K6-l8lCSbarm= zjW7=PECQPj|4|n*WOkIS+i)(}HCH9oqtVgz&C7@v>*Z158L)S9a@|POD1-cx=Fn-ta_eQoa#F zHxWQ5cvPrrpC-TEcn{_C~j5q2)#@|3Fp~PrHz7de>-O?N_H!@2s)py<$C@eTJ7-E;K zZ}JYIoBAL*2OoXF*6i<=rX}kO;mOjzBYUcWcxb_UWa&dz(wr%>BPa);TZ1!gk6bpJ z12$p6W0jTLerwZ}D`rsSmDpU%itaXmx_TFU4I3YVHzgS$2@o<^epoC}VNH$L2KExz zdIJ&E2X5Mezdr)$p*bVfr1Qq&o~ur$O%yoU^e&E>*!^7DRgMybg0a;v|%dr(n+79`8?dRNH5Ni;zXL>7vdcw;tSYDQ)&5AbMo+x-cylG&70Cc3bb|3V%10L+D`FS}W??PJI^XD^j z5ELk{)WOe^DH&&Oxy+=`EMzZ+HoVPx94(mMbHKYax zTQ`*ssA%}uP}XSQmOYb*#J6#BW3c=XgwS^XoSZ-A)7S%?9pVTFho=*$ouCA-tu4C( zKAhC(S5V9WlQGz6KQj`1M}MkEvxg6(%eD5de)Wfe9 zuP$>^XJg~jkSrXKz@4S)AVOAhP^ZO{y%Y>!SnjM zXa&03Q1%Q|+IMyEoaG%W0XKU@a9R+1=w26*YRzuiv3*F|Mw@hSDnQ-<+U`vCg_i(^ z?fBcj=B~&e)FAAJCkQlD>@f>$^e+TIn8louJ_kQ$c84Rmnqc=r{lk4%A@`uZ&e zTu9(v-{Ou@WPxQV(b<0F0~iV5GD4&cpm2e$?` zw!sywvsPA`uoB&hUS8Ju@|Oexy`@qzr|ZtYs%mb6i~n*K``>$C7n5M!T*x&L`f#ShPL__Sd zdZ8F$qf5*;qEsclakG2CtA#QZ%*a;QW+K@VRi-n58jTi!4WgeC_q3Kvl6A7Zm940W zvSq7CA&m%a$daP;+ehdGA1=eq9myw2-9U$577-f1LzOMV_H9uNq` zZ*4_%1cAWBf4@jL@E@OCyb4)=M|F&G{#R+Bc?UL}zyy%w{R_yIIq{;Y0yhys4Hnm@1T!$Vr?=^s~J z(BJ#JZJ72}zfG(2Rk7liSo-No zu;Jjn&wIS<@wXN3?p7a#+jH3iAI2PfMGRd_7pAR&Y9=QS8x);?%89+bEGlU*w%LVE zT8_Q#?6(fQPv^V69P63=WYb_wT`LB7Zw?>ZG-w+5f9_&MzVwsLD=d&DS0BS0#9Zca2E@TVnm*Ropn zt#mC{2zW$0*b3HVnm=QHQTA2JQIH!{U`w)^zYf}lcwi!TcADu7%^-ggeSs*n_`kKn zDo;0cY4{L9Of6W=M9o~0{ETs~Kyff2^UZYUYBIruvdJ1`YHHQGN-!#(aT$arCdYWf zi@(%5>bRw^TxOOK+M#dlDQ%)YMl0%s0I&{=Ogoj10*MAq{oqz;grv}Xyx&M@Be&9E z38PVlhW)?(=~bC1JDlUbs6 z*oZRLBXi;p5DPqC<$wVTd81;aVgxQ8ZWgr>wPBH++>4h1O^KLNIuAA;#XZy9bo_fmw0?8RN13f!A`RzgGHO9hdC&n#f z;IdU4^sPyLiTN8YKTB@`(z8Bpk^*)QyazsO_VLeX)Er-gLfFGryM!2RPllfFv+zbo zI&#s2J`a2249oR4AfC<}RzxxUau^YtMVNJ`LA5O59f30x<6hRQ^IGS}l&^*zD zvOR*0Ks8H~% z-o_4&cpqqO(;qvE21X_DJq<5DETfRGVBijys~HLHQ=XC@z49PKVh~n%u0&!9We&{i;5+gf#I1Q`~ z3i{UDj#QJYwYS^>lLY7Uo7+^u`+UFkvmUmIz7V8#$;Id#^h0nWYVoRB566Tg_vM1b zm%mqcp+apUHI$iO!NpuHkC7>ktRX{e@){wcwYA~ycTbXtjuB7sy!#GUnI%XW%umIc zQmu$h&N^2!7e-&1_Z)9%aPCr7e_GV?p(8<^sg1!Os0}cC$BJk~PPxpq2&^5v*Ea9M zIkOxwRU1KPToyZr@h1*DdV8t3i}uTUWmVizUazi1g$`NgD26pIbfb#7F7(2;OspPp z&r=*G##49X?zNql4NH#fETzeCUFJSbU`Z_|VV}$_bZqisex8+96MS0 zxjc^hSv(%^u6^`qCQGAw0=3eL{q?FLH~|*gWA4za#<{Tkpb_#%YQTZOrNB2(w7Z9> zWw9zNuuqGmOuJf^-9zNp|2%n8KGh5kh8n(|UUFO4)en-E17}4yeu)_0G!fIbp-4(d z_=Sb7|HQBEK6aS+iSl&Oj`4rqS)8`eXhxeM2vkl;aZZ%&ou0YOJ6GA#_I(T!4?PPB zlCaFzW2{FnKbV^@7Vc^h{g8ifc{+ertlDFZ5zTub`m>|;nx^O5=C=Rj@V%X@MT8@; zA4;vF>)N#)?9Mjr`e2V#=SzH^Z^IjdCBUu^?o&ZjIVi7c)YahNR_@-gc+8l{qI-Np;7^4DKG^>dF|jp%t76@%b!AFfnO1WCW%{?XW>TzUkD!;!3n_$B1o(!{MB z_)%G5bGxg(>eBL_E@6$9UOx!3)q~vsZt>ns1xdjz%>=4nRG?8=#eL=0%h7x}ivi2|Tfo zr`DXspOeXrWmCo-MIS2XE^*)()SueX=BI6!dt(&u%QlyWz z5=MIIuDspdf{q%+&$)4eewr(D>^baxLNf@}hdh#mGnM#Hzggc(*c<|@ufZC8b#LTf zwC6OHePc(y)>ZZIk=QK$ygrW=tpRyKSdtD3LhjsO7v1}v8-fQH>{zH!NBt>J-U#^> zZYtB2d-qBvV z<$X=23u_piJ!0a;eF3Z`7{i5H|LrM{JwdC&7IVclMRpd^N|S!2w(|Gd3I%-;{h1&6 zE)>!&cJ2(Fst+Ds8r|+1o8CRUu4K;8Q!W1TR%Q#%oN_Y#TgkGtbl4QO#V$`r(>YcY zeMfp6W--~2KTgl;xX1%c2QQBx>((;yVoB==^uj-&DoZ_8+tmVKT&?}&NZCo&lSA1( z?zrQS41yF*%-h+USGN&z4s;%5e`@jokYP+WgoE4;c;}p+VP-6hR$(Lf2lg{j9MrgU z@fZEsf48LDi3-h)Y&;uj6$1HDPK+>w^;n0QW+2&NS2;wc9=H{2P@2ygEH(e> z#R(MQJKk$ z1g06mmCAIyM;!KHm$R%#JF_;)n^P7JN1rPB1t&a?>{Kv$%oQPo$$W$Oc`ecd;X3n^ zZ%#@0L$KE9_631KJ78*|@lEpfgi4@BGq?U!XCX@;j^}#gNxwFjbjd7&e`QSmQ|oIr z|Dow6gD~YV<#o~JW6`H3d*x%UBew}wHpFu&9G+~>(dCH0T)*zt2Y>Sw{;y3{uD_&I z%tvC;iR$z80NW1mz=hyH+A&2$M!WUD@Lb_%8&&d@c{$sSGAeFBiWrf>z}lj{A1U_O zUzl|&dkoV^ou8?19TM>i-t1=Uedt(rSNRIw@Z`v{@2a$F5A4YQ?uaZ|CTutbi3>J! z6CEPuvm#5yeL#3oq{M%MEBwHeA^)Zn)_7VJHX8NXG(vJc&XId%iju2cQCr1U;uLF> zzQZ|RfE|a)bL41PX{0Q=28lQM-C|ViLc*lOfVy8}HgCvU>ct+apdY2W3oI#&MwJRA zU2S=-WZSF~sP;5`l@IOHeFT((O)ylvd2A~7e(Oj=jPMZ0PG$L+DaVxK?Z~t1#Tt}! zm~iwK29O&UOLU6*8}1iP0P?#1xUc-%k?Ez)29K_s^Fz}q$_>Frau@Z+@6fK2Y^a7N zp(*Kdz>+ZSFzL5=SaI-`SgMwV0Qk{@yCp-f+_Z~(!Mz>i1v3Pr`c~R0+nfJpNz|W` zO}v7_3&$Lk{tWq(!kF_8jx^S`647bky7JY1jGr|)L%T;jO=Lk9RhW9mrlOPzPSiKZ z1whOloaD2PpA;?USyZ$@7VIPf>20j=^=tJxIxa@oqBV?fMI0<21yw9ft5|{v4|lrD zDn15lz&x$%l*znuhx@P{t{lyFEpuFh4KxS)ze!oUA{vp6@sUc*)@uo@xT8!33iS7z&e7zU zLhYEsh{oU>j82GOyra4~9@r}Rwq^L$bCi7JjIcwP%GZRASgRlHZ6DWSj-aM-=U|^zCb2??A~mAvk@f|c*Sa66 zJ5XrlkEC?%;^&fG!xCM5$*G`H5FO34D~fv@kcgiOW?u#`s(JGQftoPscQvSJKWnGO z#jWYJ?i}}5#BUJE(T(cPpI>uqD!2f*6foWd8A5`Mz%rRPC6jKZ;YSaHei@NWJ}XWB z)(1jG7?ZUC%E=%+<{@XhB4iMk52fF7p7-yWuGV2*=EDn|KEdL_^X6oHzzYPC(H}T-MiF z*w>n&0|23Hu*zB7!^&82$GQ`*PhYtAHmhy{!FFKFvr7vhuj@bEE1P0{ew}$|XzZG% z+}jKHroo)&>>8>dbSj57d3Wl9z=oc;bl*xS5g&JNL|47}{ACng{3lP?fme*JAC080 zzXRjrI4CqJ)7j0%##dRNcJJv+38?= zhy%;KTie^(o>5Vv`T3$Te+y9^8K2HtmO19f6Ripe$)-M=09HIKSyNH*VIRkrGB5|B zG<;i=!vIhz3r=%!aC0-nU~Ns@ppmpxT9hpsYZ@G^laTOdGTF2Rg?jxQ7=K3)nBPzl zo6lZgt7!?PfJH?`^Lu-HkAr&Rl9J3|G#5$OlY6#Z&Y(?N4YlU~CnqQ|B1_~4LJ4!k z&${DP0AE({-FdgeY1!YW=`C$?^*M~Mnan3gxs=Wib22g78V@Bb^p)e_6ocjfWo zi@sEx8Zxnbdit{sTE86lDBo|Ov(c5a1LXB9h(VLry32(GKsvF9J%SdWa&BM0P>oL7 zX{o#AOZcJO3dg^gu8#5>?p(bU^<}qxbeT8r<)(@8`EMV-fpU+hh1-)AE+b zS3#76L9cax(28O8@~t9Ur@L;BaJmnL&vxb`&q7ls+UtWe2T#lNgGDr~b1G>)YP%~X-P|)QZEmW~+e`mwGr&!WXj{eQu?NL~p z(xkv(CvZ~-&~*lg;TJ$neoWccc9?KytMdY{q{%VrzFt|T}pxt~38rah*lPY2k>U@hV?wJ2{eFH=lO?K;_({20Biip80uJ%lSW%pGw{mqABvN ztvbstGkN{$CtmCFC;jSR98&NnF1i6Z!L+YF_z~BZtD_F<@?@tw7myOxJ%uLMzhRfI zRlcrOs>#&^AQz-lrq+jyk_ZfBA$v*RhieNQ^Elg0|Kf5p6`yI00sJYvc z?f`s|?e^VMC~2oc|K?q>`HO7ku7!w>u}w{RH19?|nd`_A2`UPCQk27DsqKqzZBlb~71sl_?)zD929AenWig7y`h(@?G5}{( za_~%9tEeRR6MzA4Ad3jXfC?pqoX@*neRProp@b-kCb~=Ymo#CWB1FeWBe$0^pPPYUC%3t}wyd%ptIh0HP_5@}i?X_;>(;~5o+V9*PKktGG z2h;&V3UTWgWz{EhB7@u|yT&EiwfwPI8>0+O(cB0I2vs(E`PfqJtxYOZbHj{T^u1d0 zkIqVdC4{p1el%)CUIEz0!q$(>Y^W!nhHJ3nJ>hFy^mu4|ZX67lxA0^}Gh>2>V)$x$ z7Z&OYfHa5vBOt)VbaVFE0aA`gBm96;tN6<8m@)OI@!$;;jA9fZ$&BRylSVt_pJc3` z{wy`?kth19LvU-aD zc4kE% z`n+@0`RW2^bvHLCGTBzvEr^Cc~;mi3mu zBZ-gb@Z4!(s(hxw`3@Ps8Ium%+8zC~Fa&OWM!y zH}7UGj7BH^>egHmzW7>61=m{i4vILrWepiw2 zLDS#dcl2>vzCmuAwrJLd4tkFNf_=6O=FAUR$U*6=;BVmbWmc}lqmYpP83JP`bRe6+ zmgwx6?xXYJr!>6np%BOS85Jp(h1lZf-=M{amgC-UNZ<*uUedl8k0DzPV8&O0gN!pe zUnHI0KK#;n{BLqNfMN#5Xk`b69mkVQ4tZN~k0ays>2l$Xdm=&7`#mBk^J~|SO>HM| zj#|Jlr5Ou9qKPlgd^8p@AK?PnA;`;@2`)nw3Mrb ziKp$q=$tiY8jnoBp3Kvybd!iid>2fzyZHSy$1ULGUuj4$FeH6(9e}C_%mGFAAh0mZ zZh{!jBGf@geIWC)5XvGgtgiLib%(yJDcmuO? z7_+B+2HY&ZuG}RA4~1eQ@C&s=+YS>89X^ve2iw5-t7XNjnX75QMiGHlqEtEXiTdCN z?CBIErLK{6Mb^T8qfoxnza{>6g7{J{*OWv93FAvU9KP)3Km0!b6#@+i3s^;`#wy zt(*W#=mY#}ft{q|;aQ&h+BWnOV$T$l1`v7Z;{X|SBnBAX*_86$l!d`QR@RQ-Lopxp zOsDt^*~;vY)9K<#G6e2F$t;c5wof5L#jV$(m900F#=S_U0#r`UKer4M9fH6-Q%oKr z{>JdY8jbG2+7T>Ux;CPUZN-8 zV79}={dCncgE>o+?Cdge=#UCJOXLOb2fR2bfc&wBE!8(b3okA@0VngmD-*=o5PvWh zvN~gY`R4FTIs~1%8GuP&ztAQ2CVk?sg+uS1JoNGd^U94oY)h5$o3$GbL2mHEGxfnh z{=8FmlVobF(qnn^$eP#?z($SXyUvcA=5KBSdGUnYz9p`L&Ahsj#x=DL#3Qz_&+WmbA)Wzw`?jqLb}94 zGoMJ`88WI&p*_w8Li;T3t0l`T-^;-Q04>l6Ns`%Tdz|v=8G`{4fa{g9^uZmuWc~qw zn~vVetW|mp*|q)#@WgwA#CZX4h6C$=1FEMljJjZ7+I|jKnYDzI&x0>vqJn^mX6~Zt z1$~=5VPlom+UBG4ugcXs+GTN_(z3V&-i!i_Y&EDFlC2bDkWRvLh-=W>etC?e&%*l; z0SB$lir5TlXXS%>4+8?6xX2IS8d?9Ros9`5Mno3qa?kYA!@_`y+Fv1@1p;ki50JWB z^YRy+ftYpFYW5raaAjQAag#WV1%}!=*+8)RdrsI)R9!FzH zr0lC3o#2iee>SyL3RA*d?~E>vOpK23E04q@k1_pp(oNmT2T4U89D6|AVMxm%~e9 zAc?Yy6@H+;Zevlm(XJ9W)G75m_tvlhf2OPz=1Z)OE{4nWKsZ@kjx9QUhX{k?oCEiID zjHpn$Q~3a_e*lzW&7XEo+@J9DDDCTsz=JE3!#Hf5=sL{TPj0d~TMJX+!3Nb;<43vt zOxKij+~~hzBn-&@mIR4|*qt1(Z;uVr!)lv#Ych{35(W@vo}i-LLZA9zSA@Gg>!rk; zxulhl2Xq&8hy2!ss5a2|r;?aovW|;k44B%iK>Y}<&HT8ci3C8}eyZs9sOugNP`V&- zT-xLuMQ12i-->+rtizz9TT7)sYSG9d4JW=e>38R5IMMI80pDEQU|XfgqK_6v=qr)C z`#Rv3svMbD^Y0?O|TA5O?~1vcEM83TFAp%_p?fr zoIfF751cY#_iq!X0L)4-LR-~k%`Oj2=`0m`pdd+_?56?==t4&7lfA1;xi-X{{y{2B z!&`=Opps9b_e$QlF|M~x>2Vc()zW1=Rl<@Y#^iS4R?HOgQ8(bzc9)5Uvke@R941=Q z`4|JIG8HPWYYl$rPzR-186LzM4#&KN8a$J55$g8<=i1U!B`t~VN>FTo4$dmjQ>Gm; z90qTasy(=UsPILD6+bQZmUXr38=*H@6CSJww`>z~Imva}$_9;|C+9b+pBbBlp{R45|=vVK|WlVE$>KUNd(}N#37=Y*;iVedL<-V+H}S$U%ky!F-X<3 zIpq*2kUKoRYk;$5r3@?nsZ=8(3+F4_qn`yg}@q@_KtjO+=`-RzEVJNgn#=4^*eO_ZRd3 z8)Lmkji%;}k~kx!`M+M2o}&{p4=WIFL<`)U+rxCmdOI6sX?vh@tE&OQuO1FkBR!x5 zQH5jP1C2M=wYGm4b?_}-BbWirFb6#0%MUaV_TIKv{%g%RUO)sSibmk<`o`!c2iLs>ezef6-*(%aYMauXRrW#U;X+D^|R&q(1oT zM=n4u!lQo*gt-D&-Yc}=(=Jwv^)AqKHM1Z~dS|9!z`3D13$?d8W6W8D1~vn(N*?kc zHHoSrP@$#{P^%37MWAptOa*75Hux_*6edwAwpx^gTjAu7l$bjgjjB#*4U%rC=?`*+5IaeMH2N3TCE$o@w{&{NmGBqi{jNhv0hkDc^e*8$Ajx4jPud%S7K*JFaa8@CVF|36H*l_yWICeV0&Wn|GGFZBV-Ah6*q(C80p5 zI_rV~)Bu=V(>hV=-?<+j__3m>ghIcT?;tl-KFT*Js27!c$XYFsT4H5bK6KBIkT0vU zjrreQ8xbV$9M9pFgs;lC+M(9fh6p(;V^sORf%uZ=BWF^=8ynz@FvnhYR2~?eaBw}) zqAnsDRUogG{nge+J{BaHl*)49uJ_M8goQdx)Dn)X<|hYza&__%IsrM^%bhyWVw z)P>4r2ed6NDJWncWQG$LK|=tJ6s%J!1*cfca^@NZuK9(`r33?Yz243&qDwmL(vRi3K*{0_i^O)BZGQ?wj9D1)0v~KOmUQ?iPPnZZ(Gh8{ za-YyEFlQ zq}C3FX1*|7=(ux(k8w^q>_}aTVqJ3{I;iMk_ZrR9woZ^Suv7e{?o4`kV~q`c4J=nS zu|pZzsSkD>vgwdGhlx6(80?1u8jwtOlypE#r~Zv3tyC55(WqhQoOvK<_#~hZ#cHE)7FVx3_i*w_ zlkZ8Ub7K7^@{%~EtKuu~t%Aj2qM09JRMTttossmedhC~zwdy4oH&N(v~B?CZ=@ zpt=zNTu%9u78pSkX|1n1#1+cbCLdMQ%5MmGWd?#4sG!eg0^|ST&4nJo_|t+1sja7` z9>Pc#b)QoKEMED)@hOJjpBhXcs^)b_;f0a1GbE+rp!aaKMmopU+o%qr81OV-6P@;Eh3Wqei{%wh zn5>mgTxM>{pNno>NE-bZ_=Z^gd?bA#>pEc^yz!oWDsMa<dS`*mS;g|vaNH9NTqz2>>(5xd`=3E;Q3dGs~^WW*tDEmLmnkaYM8MEH9n~D09 z(<#d;k$~DKV-^JRI_J#9B+6wW{xH-Fmpus{86$%rYn*lrnLd6NxDmeWHK!A@@({->dOq5U;Zy zN^!q;evifH=pH_dYZrmJ+K5<1*iZlEZ5as5Sdq0T6_37*f{NH#b8j45YG@oDX&)YkPPdXiBMbMFwYK_+y z+>b0B#15;EmnIg&{3L!nQ9S?mCVup0Erg;0&Jy-f>JiqXyLPkgtX)kLMuRQN#m2+PzN(feF} zdfsA9hq!Lgu9#D#9d?wvZ2^U+AL7 znw7kby}2o<{=@2KD?haB7hwzP&a)@?8gq2)jL$u_qFh1>8Jl} zODDeyGS|wW9ahaXw|=RsoaN^1$Q5qz_dAM59J;J&OL$bQ82mVE;q|tyR=B}q*dfG? z)bag;l!OfA8q5VL1U(MvsdnRfAhIREX=m+v%d`tv>8#LzqXoJiX< zbIS-Sgap#C&&kTPIxkIWzsp$VYmpteF#hT7g-chx4}?7*Cw-UaG%@#GCZp2w4vkd5jn1Do#&O7i*4K`z6E{7& z_EvdcJ95qGHQD9-7|R%#B&2BRtI~V6=ayG%ES`p+;EsXBKu-6-A3S)_1X==njeK0% zzab@V>c)3DC!I_j-FOr$OA+eXXdoDwnxkiTa7{x#o=LO3vu4k-M*Xv@S&L`O9+#bw z8kowh#PK^hnVt&;MQe_;dAGzdQx25EUYcxehxB5|@ZE?4XW%F%Coqn?ERz(aoYH(o ziXsG9R9Sk;pIF6x|979C-I(j;f^jF?YuDX_K4U0gp+km@jP7w&<7!uj{3 zE8pkz#Ou`bh0axfKr`ihbkln;cyq3g~St~-|q@Vfdn#7f`+BP9?2Rpx7lMAil z3|I8PRUf{VmzQ%DSo@!=1zHA}HKw#sM&*=~KXz4^Eu#hr;}5u_KWve)@aqrIK3ADZ z`ZxhZ#W#XzZ0SjpG1v`~!_<4@j;K0vkF9{2nOP&yWFYPWSv|D2sY=OHl$}Ysd?THl zAK4xHssF;!)VJivu#mHKq;^ThXw^{H*bWfW;~EyVYCwy?*3M3Fa^bk?=|@3cUVqW7 zA@~8f5wL)Q6s3w~s2k3d5-OZsq*?UTM>lP!Q{HL}wi`>6DO5~OCKvAfqOcKUmtMwE z3LJ6by?u`8%o(LhMVJ2$6Q`(OiO(X-EMwodq^ki7WIT{f-byO|ln{x&XDzc7#oVK+ z*VYPWXXN_DLMclLt5?uj@O1M1^pz3om-@Wg<%-tJhtS=U1t-nXKbvb$7&MY z`TXiSOrQP%-y4(($c-&^n!KpFju+)6RyavO=h|oaWCSb8U*#QlDLEHMdu)-wSSKpC z)V&3DQRXkstht4pvCXqbEIEDeV7Yxw$UUQ5*xRKMUVK$(%NA4h;XaB-)7SLKSirq# z&GeY;t((>_I}Zokv&k6^Hh<}r7^6$_^0GAR&Fhzd%8Q&~=GIwJeqEN)Gfa#1kXZ^X zb57h(Nk2>gnhH$+nPgvM-ymJv)U;s!17#h`T^=kx9DwfG@GyVrMl-BcnVj@@o}8M} z6f<2ZfN$`7^Qwi2TVKtLeOGz+?!(;ad)lO$p(Jc&X1QbCeM)HP-wPCfdceIG3Qjfl zl9jtlAbz0DgpZG}MIL=h@2G9UvD`r%cQ9fYb_#50i>-15p6_`SOn!Tde`0DX|MTaT zFGRl+9ByxZ3h=j=-cj;wA)6meBzy~PQ+9Wc z0gcNN@@8hwO76WCa>(;J1bqAZdpI2aOOAEn-OSA6?TNZ=qQg_gR)ySwaZ>jFKA0?7 z_2^O7?(PG==7YU$(6&1^>Cc4B%*=Jkfb*1c3;Blweh)(e9L%uZN;($##*Aj(W@vMk z=Ii(Gi@-a=%xLY3_V%^#?3a(+E@(#TOhyVflkyGkz5NOW3{Hi<2V-y7u(p2us3}`M zF8=4s)+eX@!TICtZ1xkjkW$C?mp!76p&exmBqM6h@qK&Yhigg+e=*->zK(RY)9oSe zZm=Ts)|EWV9?M9q?2$Y?+MfQzALu~+#D<}D6az05KfEFJYI3qf>w<^x!fb11lH#YI z1;}V<=$SV~WNq;#m(8!`;az1!(Th=rt}qk&cIcH&`ykqh+{$%l=5zCcK^!6?;FiF* zwo47SISH=<#y@}tH+0B6$0vpky5zB#QX%$@WqxsbfyTBJ_-=(-tc$W=>U^Fm&P@n zKt8V~T!gPnGvCz$!aZniHDN!bkNiW<950PZQC*qBL@HDV%2Wq-ja6aJLZeBVT#GMJ z(-E2F_|d4OF2vRsLUuYFtuI&MmRp$s4#=gC8v*axB?#M^3gm7Sb0_Bg%Ml5l^23M? zs5g)334&Ps`^o|qVDiSJD#YUHvZD02%uY4yQx~2~q%SOOGp|T(nX$cUQQpSrXiH@B zJ+pJADX|p!`zLwJ7i7X7Bi@$2*oVmQ?|#CEc#cWf0NKfONzGeV^g1h|e&?`Z0V|?_ zwfU%1dP}A3dU~gETQ+i8<1- zM?C_1B^k_J86W>XqIKt2o~DTD3^{vCnUIxkG%olo{JD+or2cThx>5Aaz&Hr$16KrS zKve#|d8X!?+XGC3_{v#oYi65tN2$rX!_RL-t%{nO#3b>SV}P8(xB{I89lZxc2la~3 z*58=YwKJK?<6^XjLW>|ZvX0@Cz1fliO|(y6CgZonee@zPm9!)PJ#aE-GgsndV&p#(En4ZhXsq{U`yh~UG3qY|JFEmsVtSI8K?>8*_OmZ#; z5VxL}l~$UX97%n7vujK>V3=5-`7t2~0LQ{6?Qng%4!5626A!meLle=gCN%;9?|GUsOw;o)tt0rI%ZF?F_-hOi^K*1Tori z89%|YteaE3y9ylaxW-yhet6zLBfCLcB5a56$H&dO$C~;wGmzRLU1LoG<;}=NG4GQp z`r}SShUp4^WbX!c;ptv6wl8)NsIGkuHEQa0Lt_%EDpVrMkR&It;o+UJNx$8 z(IuVdmQSUUV)O>=*pK*x$4}B$C3;%!bbF2W<2N7u3g^_LrXSa z68&~3TO@%k1#aXk-&7_IC&_?i1hfPP)*ZE}(TQEcS_~58RN}?t@$Z;QL0Y`XmgeNk zSE%i}YUrpYtO|QB8_iOaKa_zHu2PM{HXcZKGN0AO%$PmU_PdnwGNkMpHbjFHbDOcQ zW>a<@WK5Y1GEaZL@J7AJA?IQUZ&fK(hOP1dwnbXoysNpO(Q`oza9Sz}FS4b@G^di3 z5RA&l+&;gufjDh0jCr32c~1K%e?I}e*nr6(2*56JwRCmy;RFj1UBWWGu7MijZ;tp}yubFwqgJ_} zvg;44PRxv59PO5TBex}si3b6lqd^(e!?eRDKjo?%hZrR$F(o1~d|OvIx>li1`Kb$d z;{h1j6jgg1*&$M3mz=ndnoXP2+c~3KguLex`+ip1bmlwf6s?#G*&C4LdDk`CKIhOw zT$XrV0qD|uLu1fIkStp-x6=0kV-?mVy4X;r&wNL9$!s`Fkb}7hd~&3$g4?ySBEJ+; zbNpQ36|ZRbsH)^V!dUXl&bj6Ef)TZz3zz2F#mrO=owEC@_~8++t^XSl^l0k2HNe#8 zFp>VlUuXc8yCPxwkno?ttS)B`@@bS=2<_s&c%1o{>jKv>s2bu#J%nMS#t~bPFVtm1 zDfl+zmv-I(t{vox87WR`mbufQD(qfIp0-hZAmE3_khkipl^HA7yGxr2Ml=8fI=3v+ zp+(P1rO82$1I$$*<*2II2_bW|aN$lY7aVwcQjK%T(+t1>qHImJ$+c^dS5NQ*R{*g5 zuew#riwE+CYFV4nK1zJ4g`}>~PA7^uNQx;l&wt8~N*kdw?}Exyf|*$XxpmAKiy2 z9)7kerUvYWn_ggEfh;Pmxj7BfMSPSFtrdxM$XoNIA>V^z^+esM#r!Yi+OZZ*JZKw>?w)~91fFR){z=*`t!y0x*3=5_X(|e8rv{s+L zvhe0-=#@%WSDF5XlN())jUmH}LOx0j_>e1F^qzk5N5}C<^F>+eoeCG?5vV=C&$ENL zn1&tR+s`iCN8K2q4!>YUR3IOMdd}6c=9GF|II9^8r=Homq5~W^jcV8l^7VKtorESv zF?S3>LW#h;5-lHp3MqS&RsH_@!tYYeCKc=HWyZjNn11l_^mQTDv_{3*wDl8fn`Q;p zM|vh;YegCCF`x?auAtd(*#;IfV7%MY5-HREYs@Qhi+|%wPiQJy$6L_<5VD{yunSL~ zzqB9UB&JWruI*{+DD+H-tQGCi)J<2qq_!l+bEyGr2TguF&uli!pg{54&5VwqvWagA zK||73$Zz(POG3bNrhAxi81hI}SqakR}JRu$%|Y;9)kQ5X%<8| z$Ya0qtU@^MVbOF_hrP}p{SITGYmvy$Q;wpAG^ruLsc8eIOui$b$PUEMTY=w~0NsF5 z=Yp=TjxAM(Or?&;LM!*E2Y@SqxOt(4L4XhpzehZ?rHaX=8SCnkTfk%N-~5G6C3us@cV`m1 zmp<@_-H8qHN6JP++mq&atBhlfAD40;qW`EX3r!imT^5S?0WU=0Jzco(^KbERT-P?Q z`_7TD!_rwho&8h*JpK8CjR}(j%?S?AS7~83sj+Maj2X%hZEA^F@xVN%{JMiw?+%sp z*0#!NJC=P;pwh1FVbY9jf#5LwGa-gw-J}Wnr;eoz3Z z0FO|YvuW(nuC7BkL;-Xo-y^A;wH1 z$KGUo<+cUWZ#oMCWG`*NGmpDW4XbJegb`@Ho@Jzr9i#oA34js+2_k;OfMTdk|B*}h zOsIywq8+9^7A`*!Munn>=+`OXCNh>3#uQTdo$)fod>dEA)a?d9cI1+m0CJn8JnGOqFWN&B9Z)il7q z%ve!$Ul)AM?KPww(!SA!;(1keU!BNHa5IVINYNfctD!wVN#2I*hsL??L!Xy*$jn0L zmg8{&!bFLCX@U6i60n@_lY7_<^myVh{GCuG_#COqlYWTF)k0Rm z!ScwGB0iuM=r?fesr(w^)>zqH!YSImHRZODb?J{sQ6S%a3v?gZL}nR5>!H_u`4_$#Hg4Ye-bXw#^b{fv^JS>syGm{7c*q{9soz?e-*@U6IL2RX@5Oeg( zqW+F=0me%tZ}4#}SiMs662}{sH4L>)vlOivcCWgmx~M8^*wD)Ow{NUviIO>c}Pjv&!G41=eu KpUXO@geCyPqIRYL literal 0 HcmV?d00001 diff --git a/packages/native/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/packages/native/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..345261586ca9baa40c35e3db8d50b048a8a6bff6 GIT binary patch literal 9091 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ΞnADf zu>~(57_sDNp6S038%eM$yo26|*gCYTg4YoYMZyM;zf+a;L5|-$H)KQ?D&n&_@_CzD za>ud#N5Yyp?Gbqk73?4SjCjTwDTZss736Pz8fxPrW3Hm=OSl8CJtf>Ty=_0EnBmQt zKU2Z`-ITSTaX_lqHFy&FOMA6BtPCkPS0VDljito;D?PIBORywO5?*M~D(|4aV61Q) zvDVUIF7o(rZXluYC8JOOFDxTG!-k~8TybH!K!4~$_yX3m!SOGL@ZUV2IcvlBu#|mL8N9N>4dP{2w7MBW?fy literal 0 HcmV?d00001 diff --git a/packages/native/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/packages/native/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..b11a322ab4a6750ecea03c2ab21a772a1d293bac GIT binary patch literal 10108 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 literal 0 HcmV?d00001 diff --git a/packages/native/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp b/packages/native/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000000000000000000000000000000000000..49a464ee361fe64ce9d076716724a756c521d807 GIT binary patch literal 25030 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 literal 0 HcmV?d00001 diff --git a/packages/native/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/packages/native/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..b51fd15c26cdca51913e3696386b5e694327ca8a GIT binary patch literal 12469 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 X_39jKitxW9Fqs-!7~DVQ9Q%I&1uk6m literal 0 HcmV?d00001 diff --git a/packages/native/android/app/src/main/res/values-night/colors.xml b/packages/native/android/app/src/main/res/values-night/colors.xml new file mode 100644 index 00000000..3c05de5b --- /dev/null +++ b/packages/native/android/app/src/main/res/values-night/colors.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/native/android/app/src/main/res/values/colors.xml b/packages/native/android/app/src/main/res/values/colors.xml new file mode 100644 index 00000000..f387b901 --- /dev/null +++ b/packages/native/android/app/src/main/res/values/colors.xml @@ -0,0 +1,6 @@ + + #ffffff + #ffffff + #023c69 + #ffffff + \ No newline at end of file diff --git a/packages/native/android/app/src/main/res/values/strings.xml b/packages/native/android/app/src/main/res/values/strings.xml new file mode 100644 index 00000000..fb689e96 --- /dev/null +++ b/packages/native/android/app/src/main/res/values/strings.xml @@ -0,0 +1,6 @@ + + diplicity-react-native + automatic + contain + false + \ No newline at end of file diff --git a/packages/native/android/app/src/main/res/values/styles.xml b/packages/native/android/app/src/main/res/values/styles.xml new file mode 100644 index 00000000..6bc01705 --- /dev/null +++ b/packages/native/android/app/src/main/res/values/styles.xml @@ -0,0 +1,19 @@ + + + + + \ No newline at end of file diff --git a/packages/native/android/build.gradle b/packages/native/android/build.gradle new file mode 100644 index 00000000..49acce19 --- /dev/null +++ b/packages/native/android/build.gradle @@ -0,0 +1,43 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + ext { + buildToolsVersion = findProperty('android.buildToolsVersion') ?: '35.0.0' + minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '24') + compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '35') + targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '34') + kotlinVersion = findProperty('android.kotlinVersion') ?: '1.9.25' + googlePlayServicesAuthVersion = "20.7.0" + + ndkVersion = "26.1.10909125" + } + repositories { + google() + mavenCentral() + } + dependencies { + classpath('com.android.tools.build:gradle') + classpath('com.facebook.react:react-native-gradle-plugin') + classpath('org.jetbrains.kotlin:kotlin-gradle-plugin') + classpath('com.google.gms:google-services:4.4.2') + } +} + +apply plugin: "com.facebook.react.rootproject" + +allprojects { + repositories { + maven { + // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm + url(new File(['node', '--print', "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim(), '../android')) + } + maven { + // Android JSC is installed from npm + url(new File(['node', '--print', "require.resolve('jsc-android/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim(), '../dist')) + } + + google() + mavenCentral() + maven { url 'https://www.jitpack.io' } + } +} diff --git a/packages/native/android/gradle.properties b/packages/native/android/gradle.properties new file mode 100644 index 00000000..7531e9eb --- /dev/null +++ b/packages/native/android/gradle.properties @@ -0,0 +1,56 @@ +# Project-wide Gradle settings. + +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. + +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html + +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m +org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m + +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true + +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app's APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true + +# Enable AAPT2 PNG crunching +android.enablePngCrunchInReleaseBuilds=true + +# Use this property to specify which architecture you want to build. +# You can also override it from the CLI using +# ./gradlew -PreactNativeArchitectures=x86_64 +reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64 + +# Use this property to enable support to the new architecture. +# This will allow you to use TurboModules and the Fabric render in +# your application. You should enable this flag either if you want +# to write custom TurboModules/Fabric components OR use libraries that +# are providing them. +newArchEnabled=true + +# Use this property to enable or disable the Hermes JS engine. +# If set to false, you will be using JSC instead. +hermesEnabled=true + +# Enable GIF support in React Native images (~200 B increase) +expo.gif.enabled=true +# Enable webp support in React Native images (~85 KB increase) +expo.webp.enabled=true +# Enable animated webp support (~3.4 MB increase) +# Disabled by default because iOS doesn't support animated webp +expo.webp.animated=false + +# Enable network inspector +EX_DEV_CLIENT_NETWORK_INSPECTOR=true + +# Use legacy packaging to compress native libraries in the resulting APK. +expo.useLegacyPackaging=false diff --git a/packages/native/android/gradle/wrapper/gradle-wrapper.jar b/packages/native/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..a4b76b9530d66f5e68d973ea569d8e19de379189 GIT binary patch literal 43583 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 yu?e%!_ptzGB|8GrCfu%p?(_ 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 GZ~q4|mN%#X literal 0 HcmV?d00001 diff --git a/packages/native/android/gradle/wrapper/gradle-wrapper.properties b/packages/native/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..79eb9d00 --- /dev/null +++ b/packages/native/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/packages/native/android/gradlew b/packages/native/android/gradlew new file mode 100644 index 00000000..f5feea6d --- /dev/null +++ b/packages/native/android/gradlew @@ -0,0 +1,252 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/packages/native/android/gradlew.bat b/packages/native/android/gradlew.bat new file mode 100644 index 00000000..9d21a218 --- /dev/null +++ b/packages/native/android/gradlew.bat @@ -0,0 +1,94 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/packages/native/android/settings.gradle b/packages/native/android/settings.gradle new file mode 100644 index 00000000..6b8b5d75 --- /dev/null +++ b/packages/native/android/settings.gradle @@ -0,0 +1,38 @@ +pluginManagement { + includeBuild(new File(["node", "--print", "require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim()).getParentFile().toString()) +} +plugins { id("com.facebook.react.settings") } + +extensions.configure(com.facebook.react.ReactSettingsExtension) { ex -> + if (System.getenv('EXPO_USE_COMMUNITY_AUTOLINKING') == '1') { + ex.autolinkLibrariesFromCommand() + } else { + def command = [ + 'node', + '--no-warnings', + '--eval', + 'require(require.resolve(\'expo-modules-autolinking\', { paths: [require.resolve(\'expo/package.json\')] }))(process.argv.slice(1))', + 'react-native-config', + '--json', + '--platform', + 'android' + ].toList() + ex.autolinkLibrariesFromCommand(command) + } +} + +rootProject.name = 'diplicity-react-native' + +dependencyResolutionManagement { + versionCatalogs { + reactAndroidLibs { + from(files(new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim(), "../gradle/libs.versions.toml"))) + } + } +} + +apply from: new File(["node", "--print", "require.resolve('expo/package.json')"].execute(null, rootDir).text.trim(), "../scripts/autolinking.gradle"); +useExpoModules() + +include ':app' +includeBuild(new File(["node", "--print", "require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim()).getParentFile()) diff --git a/packages/native/app.json b/packages/native/app.json new file mode 100644 index 00000000..4dfda2e8 --- /dev/null +++ b/packages/native/app.json @@ -0,0 +1,50 @@ +{ + "expo": { + "name": "diplicity-react-native", + "slug": "diplicity-react-native", + "version": "1.0.0", + "orientation": "portrait", + "icon": "./assets/images/icon.png", + "scheme": "myapp", + "userInterfaceStyle": "automatic", + "newArchEnabled": true, + "ios": { + "supportsTablet": true + }, + "android": { + "adaptiveIcon": { + "foregroundImage": "./assets/images/adaptive-icon.png", + "backgroundColor": "#ffffff" + }, + "package": "com.diplicity.app" + }, + "web": { + "bundler": "metro", + "output": "static", + "favicon": "./assets/images/favicon.png" + }, + "plugins": [ + "expo-router", + [ + "expo-splash-screen", + { + "image": "./assets/images/splash-icon.png", + "imageWidth": 200, + "resizeMode": "contain", + "backgroundColor": "#ffffff" + } + ] + ], + "experiments": { + "typedRoutes": true + }, + "extra": { + "router": { + "origin": false + }, + "eas": { + "projectId": "9d511a57-60e6-44ed-9a59-e47841b1a0ec" + } + } + } +} \ No newline at end of file diff --git a/packages/native/app/(tabs)/_layout.tsx b/packages/native/app/(tabs)/_layout.tsx new file mode 100644 index 00000000..cfbc1e23 --- /dev/null +++ b/packages/native/app/(tabs)/_layout.tsx @@ -0,0 +1,45 @@ +import { Tabs } from 'expo-router'; +import React from 'react'; +import { Platform } from 'react-native'; + +import { HapticTab } from '@/components/HapticTab'; +import { IconSymbol } from '@/components/ui/IconSymbol'; +import TabBarBackground from '@/components/ui/TabBarBackground'; +import { Colors } from '@/constants/Colors'; +import { useColorScheme } from '@/hooks/useColorScheme'; + +export default function TabLayout() { + const colorScheme = useColorScheme(); + + return ( + + , + }} + /> + , + }} + /> + + ); +} diff --git a/packages/native/app/(tabs)/explore.tsx b/packages/native/app/(tabs)/explore.tsx new file mode 100644 index 00000000..06e70c4f --- /dev/null +++ b/packages/native/app/(tabs)/explore.tsx @@ -0,0 +1,109 @@ +import { StyleSheet, Image, Platform } from 'react-native'; + +import { Collapsible } from '@/components/Collapsible'; +import { ExternalLink } from '@/components/ExternalLink'; +import ParallaxScrollView from '@/components/ParallaxScrollView'; +import { ThemedText } from '@/components/ThemedText'; +import { ThemedView } from '@/components/ThemedView'; +import { IconSymbol } from '@/components/ui/IconSymbol'; + +export default function TabTwoScreen() { + return ( + + }> + + Explore + + This app includes example code to help you get started. + + + This app has two screens:{' '} + app/(tabs)/index.tsx and{' '} + app/(tabs)/explore.tsx + + + The layout file in app/(tabs)/_layout.tsx{' '} + sets up the tab navigator. + + + Learn more + + + + + You can open this project on Android, iOS, and the web. To open the web version, press{' '} + w in the terminal running this project. + + + + + For static images, you can use the @2x and{' '} + @3x suffixes to provide files for + different screen densities + + + + Learn more + + + + + Open app/_layout.tsx to see how to load{' '} + + custom fonts such as this one. + + + + Learn more + + + + + This template has light and dark mode support. The{' '} + useColorScheme() hook lets you inspect + what the user's current color scheme is, and so you can adjust UI colors accordingly. + + + Learn more + + + + + This template includes an example of an animated component. The{' '} + components/HelloWave.tsx component uses + the powerful react-native-reanimated{' '} + library to create a waving hand animation. + + {Platform.select({ + ios: ( + + The components/ParallaxScrollView.tsx{' '} + component provides a parallax effect for the header image. + + ), + })} + + + ); +} + +const styles = StyleSheet.create({ + headerImage: { + color: '#808080', + bottom: -90, + left: -35, + position: 'absolute', + }, + titleContainer: { + flexDirection: 'row', + gap: 8, + }, +}); diff --git a/packages/native/app/(tabs)/index.tsx b/packages/native/app/(tabs)/index.tsx new file mode 100644 index 00000000..7e2dc1ce --- /dev/null +++ b/packages/native/app/(tabs)/index.tsx @@ -0,0 +1,93 @@ +import { Image, StyleSheet, Platform } from "react-native"; + +import { HelloWave } from "@/components/HelloWave"; +import ParallaxScrollView from "@/components/ParallaxScrollView"; +import { ThemedText } from "@/components/ThemedText"; +import { ThemedView } from "@/components/ThemedView"; +import { GoogleSigninButton } from "@react-native-google-signin/google-signin"; +import { authService, telemetry } from "@/services"; + +export default function HomeScreen() { + const onPressSignIn = async () => { + telemetry.logInfo("Sign in button pressed"); + authService.getServerAuthCode().then((serverAuthCode) => { + authService.getCallbackUrl(serverAuthCode).then((callbackUrl) => { + telemetry.logInfo(`Navigating to ${callbackUrl}`); + }); + }); + }; + + return ( + + } + > + + Hello world! + + + + + Step 1: Try it + + Edit{" "} + app/(tabs)/index.tsx{" "} + to see changes. Press{" "} + + {Platform.select({ + ios: "cmd + d", + android: "cmd + m", + web: "F12", + })} + {" "} + to open developer tools. + + + + Step 2: Explore + + Tap the Explore tab to learn more about what's included in this + starter app. + + + + Step 3: Get a fresh start + + When you're ready, run{" "} + npm run reset-project{" "} + to get a fresh app{" "} + directory. This will move the current{" "} + app to{" "} + app-example. + + + + ); +} + +const styles = StyleSheet.create({ + titleContainer: { + flexDirection: "row", + alignItems: "center", + gap: 8, + }, + stepContainer: { + gap: 8, + marginBottom: 8, + }, + reactLogo: { + height: 178, + width: 290, + bottom: 0, + left: 0, + position: "absolute", + }, +}); diff --git a/packages/native/app/+not-found.tsx b/packages/native/app/+not-found.tsx new file mode 100644 index 00000000..963b04fb --- /dev/null +++ b/packages/native/app/+not-found.tsx @@ -0,0 +1,32 @@ +import { Link, Stack } from 'expo-router'; +import { StyleSheet } from 'react-native'; + +import { ThemedText } from '@/components/ThemedText'; +import { ThemedView } from '@/components/ThemedView'; + +export default function NotFoundScreen() { + return ( + <> + + + This screen doesn't exist. + + Go to home screen! + + + + ); +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + alignItems: 'center', + justifyContent: 'center', + padding: 20, + }, + link: { + marginTop: 15, + paddingVertical: 15, + }, +}); diff --git a/packages/native/app/_layout.tsx b/packages/native/app/_layout.tsx new file mode 100644 index 00000000..db745789 --- /dev/null +++ b/packages/native/app/_layout.tsx @@ -0,0 +1,39 @@ +import { DarkTheme, DefaultTheme, ThemeProvider } from '@react-navigation/native'; +import { useFonts } from 'expo-font'; +import { Stack } from 'expo-router'; +import * as SplashScreen from 'expo-splash-screen'; +import { StatusBar } from 'expo-status-bar'; +import { useEffect } from 'react'; +import 'react-native-reanimated'; + +import { useColorScheme } from '@/hooks/useColorScheme'; + +// Prevent the splash screen from auto-hiding before asset loading is complete. +SplashScreen.preventAutoHideAsync(); + +export default function RootLayout() { + const colorScheme = useColorScheme(); + const [loaded] = useFonts({ + SpaceMono: require('../assets/fonts/SpaceMono-Regular.ttf'), + }); + + useEffect(() => { + if (loaded) { + SplashScreen.hideAsync(); + } + }, [loaded]); + + if (!loaded) { + return null; + } + + return ( + + + + + + + + ); +} diff --git a/packages/native/assets/fonts/SpaceMono-Regular.ttf b/packages/native/assets/fonts/SpaceMono-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..28d7ff717769d29e5d1f036bfa91eea660ce8a24 GIT binary patch literal 93252 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%0Ay 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 literal 0 HcmV?d00001 diff --git a/packages/native/assets/images/icon.png b/packages/native/assets/images/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a0b1526fc7b78680fd8d733dbc6113e1af695487 GIT binary patch literal 22380 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 literal 0 HcmV?d00001 diff --git a/packages/native/assets/images/partial-react-logo.png b/packages/native/assets/images/partial-react-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..66fd9570e4fac42bca15352def191c563100b2ed GIT binary patch literal 5075 zcmW-lc{CK>`^RUDF*EjzZN@faiImZdeUh<+LiR{8$Wp|Fki?9!D^2#LvJW9kmXEAs zO%Xz+kg-+vJzMzA_xHy=&+~rW=ic`{=bm%Vy*JL>%#e#6$qoPjxQvbTEdc-)HUI#K zgMygk$)C6`W`Gfm?EL`%L7D$Gps}U&Iuio@Ee&-66$7FROu_1bH^l=0)z3KoIfI!x z&D_M=fEl5rVrV!GN-E$bRYJoGq2Yzlumb4gB4z>!FMyJYprjmVSP=&^2`hqx6+*(8 zl{v7mLNJqrGhrd@F|)FWJ(R|Tu&^RnI1LtF1R*gY4f2>t3fM^nFs39ky9%LXCMjei zF>4ChNi_D*0_G4XDW5Hr_WzDd_re?F>9fq0DF;}ZSpiUOI=oX;Btp&_0X2mVA6(;I zL+9iYE6oR~&nk(}h*Wc;?=z<=^FecSUxIntU@W5{3jpAYGuFpj2Rkmmi1V3M=Zj82 zJ?Ke7Ii&f%zn>_+);)dLHsQ`k7=Z_P$Q)VP)h;~(>UI3qG`0}xUl!0)>tD8=BFT@8 zXxA86H1WiD{7}?b*kpTwt})HJ4RPRKr8JKH=sd1{7bRp)JJg$QrPUuMw^}0Hv#sh^ z)>%|#ZpmL>ySJkKXZ`%B4TAbN^jLqSPFd^wj~zM97gritK3dr}0PPqX-}A~kxQew4 z-NsHxdMnZJmC6oQD*HSV~a7*rJfmTDP45WC=wlG+Dpz2EO4R=|ZPkAR;JInJpjs{KW z0m&JEkwZ@CHI-$$S#}B|lN>*>iKf@}Cy+CDJkiCqa|i!|kurF=H$k-Wz9!e1j-j*oAh zM4&42%aQ)+=nygmY4-ne&IK-b9jGLI!D=q@dEX#vWwC1=tP6S2S_U%6wo#a^FR2|**;HbYA9qkP@ zC+tR0dKFaWIg#|~#-$qUo@t8RNKj20aos`OwaV4}b8bGVHRmDDN1e*&{Crqz+p@_~ zXMAK~9DG$RAwEV3Iv8xhs5I&7B&R@axt8Et0{fkbV%*Xg{n9wn<}kBNf6bmP{nrP;S2YDg`(V*_Rz_Wc53E~{Yv z-4pKC9ZaAt*#5{a;`x>5CvA6Mf$Z@L2Dz$p2IG@X&ObFtUwIt@a>`LSDSy2IJ3@qX z9MA~btRB|sh(BLf&b8tG)4viWtrNrRZ5#Ust_ugreQNLvbix!|gQhNZp9a%$5SA=E zz(g3&-2mz-k{$08$m_!-FfbO}9*iE`n9)&$PJzbXsq?1!pmw`no^}+C1y6@xHvuMt zsu>};GmVPb;F>^Qh#uglQpG=fCDeUMr@r~3QF~p49qAE0yk(mL=!ziX&a4BI?08!t z=NwPRgQp)+XH@e4C)qQY^4lyv@zbepmI=_YSJb8Mi1mwfh!ICM%9CduX%YCzOAVN2 zXF2mG!aLd4c>R%VgAFgov1x!%BLrN}O#MtNu@A?@Ylm#{W-sPV*R(hVHcsQsUd4i| z^Mj1QEBN@JCocFs@s!~AX9OeH+HY!?p2QV93UY2UqIPZZ+SI+7Mn8*f*aO&C${SAZ zFxr9-dEdZ$Ww||H+E(;7aUEXDrU?B`f!M2r=jLk*62$f6g`X3)PFDkVNhb^xAICx1 ztWWFeGFejf&rf78kRm8Ngt-`&JCWY2xxm3e;7QB#B-{?(ivm|ccDultvTYW?FOueR zwlB;?d$IelD!?Y8+Yq#Gx5!on*w%q_lq(7teIbE!AqkdP200$U0pL-8`us=5>#K^f z0y_k8kgK#iQaa$sTbX11*_!W%OFaKov}5i9SKE^gedLqLcnH%};WJ(78VO8-ESsG! z62nqQF7E?4LMC11_q|Z2x<7eMm)dpjf2GHR!#8-4{bIZI7T7Ts%E{-8Rn00?TV=^u z>Bu)*mwat0>{SFl9)l75;JfK7EbcW6oEq9U6~vWIsMgm1{7jKis}48_#x^1pfJ>$FkyW$T^;G zSmm$3hwZUdo@Jiy;dxVIg>8g_sWTpxbO(<DJmcE{loifrBifhGc4^!?x_?`F?{#l3clu8@biy>EYEmbcmBE_p#Q8P%_p)Of zcwKhpa}FX=#hgv4RDgJJ3y2AYskj?Yd$F)*)S+8sqP|pH31oOhBK*^CCX2r?HHyG= z?|e$E^O}0jeNzdZG2Qo>OG0YZ2v|l$5Lht9zdWP4PMsvB(}f=pXr2)ZZCBHbQ*QEQ z6cNAR^q&-9u1zdJJ*vxLF+?URkzBvP+UV^cYBpYKtQ5o;5^G-1S{+ zKkO#ANpxW+w%yF%JiPyR+UI&AEAi|jp5su4Z;N(y0j!S^(h6?!D~w5PnHq>G;eJ)c zIZ&9g`_8Ffjxzk*vVML-$vv4YS+`tp!BOrk=vw^#keat@a!Nbdy3;~TRNRPdDe6S9 zN$ld*>`l4wJ;5s0$qOZWqJJx9U13)(6IV3HYx*$Pm4&_)xFD=!wjQT$#t&zXZoTqL zUp-#+zmo^OoX1&8X{)rX)H*Bn+QWe+8|;C(gU?m{ccMUa+G#{h4uPuH>gHTmHSV%X zJm@8~K+Arr5kf+s+96KWtxnqEonDkGPKCc;x!xh0m^WLiKHaZ;7C3}F({4QMPc|Yo z57KU}7sRsc8{@|(IlZe%bg-blpbW6nbq~2LE#j z7jjs3980K@!M_TcTY6)|x~_m??fG9F8CXfwwswQE$l#srp`!^7tQ)=sKDUR4DE=fa zo{CdF$pxX zcO<^#Gu16eit@dh+jQ1To_Rc%BAm3QCpxSnc=^nQ)M(l6dgQm0ipR9dK1&-*MQK{^ zK@0@vh%Je`EZ9-jb#P&1j-hPj@)B7Y!;y#H-^$DT;M`*p_urf+`X;nnIY@gOi~kop z(Dz10Kr*tpf1gV0trr~xkALEqitL%6NUSL|b}{VJ58U&ZyZV{LOE?WWTDLQueKdH9 zvHrou0+eNtcZ;op+c)gKo8w8ue&f2Y;ZkIvcwvsCMqQ)48B}R+OMWlZE{4N*W~yqs zFI&JY?$r-v*ByIW3M`&R?TZ;Ww$wQr+P<%=ab-kUb46tjEOoZ^m#5&fNWxA}cJ1$> zBFmX2hVdriF<+8cv%NPjGI%DVf8kTFs6)x?rwWqpx>6k<09gj!+5x_zk2>06h5F)m z3Uf`Y)y{`Q_RJP7494U1t)(Y;%L3nAr6vw356;z(b#!<;+Swa zPBy(KG*T@eP4r9Ap}F68>SCSydkeQ)Pm!e*Wu^GW?PRul^wX_g(Ui9jULkcbBf1zG zBABddu|5~Q_KxR+yXO8oCE!%IM`Ea_nKE21*){v^T6KACfgmb@^U`IJ(@H>*Y$Cs` z-bjQ0Lj3_e=pb-UeFH{dV-RC`;wRp7FTS|yA2u=Aal4_P&=zO^o$D)k#TD{jdCal5 zhI`WxBfDE7J0o+Fr&+9-=A%MD3RxuzWplOK|2qZt{0y8~b2;#_rbD_V02qKZtNtz0 zx1Vh0@ZmA>%Qx;}soAFM3iKs{LyTs4EUY_U- zpcyz=EZ4(GwMceUx)d~?6qDDoD$nlc$3XDOjYjf4+V<;JzL}s3n$u(ndrY=k&J}Fp zrSqKQ;MA_!9Hcfpva6AP0~&us&a7@xd!?Bz#vgGVypMOwqnjm~oa&Yr9peV5 z0BNA95l-Z`#zWlo^##ZAjr6)g9Y`Gs5m^!;Uc z)bmsiWMoWoW|gq^B&HzD;pReGJsm~a4f&cT25>~;x@Q+zp^m%pA;#su#9xEc{*;hp=%ng|E z?R@pZF}xWjV};&}lltZZK_s_(LrgT@$xSRnRVZFhYQ&x}%J)q9tX?2cBbuPQEbLYf z>gAUEb!0qVYwlW2o%X9p=Db4JyEwD_f-0scujclR3dK@*Q#YktAu?|71K+UgU>GI* zY5R4^k32z~aq1Yf#W}MsZpHccf#vM#mb=9{ymd zszl$)0KZ=JgM(E+#r@nV^7*#10>8!PK!OqV_h05~e3RWm14w{Wkz$WL6l0- zY;l7G;O2-O6WvONCVS-+gb1eeadXD`dx?k=aLWhJsK8Vb2`X8uGAPV5TOv*~sT)kf z)!z%l(mCA`-e+}m`2PsUp~VB^7xxo3$J#d~Zmk9~qcg`qLqTLZszVoRR kvXn3fU`gP6K*T?Yo!&0+^B6>v`J)9eHZaq#&?Q9tAFP`sjQ{`u literal 0 HcmV?d00001 diff --git a/packages/native/assets/images/react-logo.png b/packages/native/assets/images/react-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9d72a9ffcbb39d89709073e1a7edd8ba414932c1 GIT binary patch literal 6341 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

OG^bt6yG2??7FhdGVc8feK}syBta)V!iG4 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 + setIsOpen((value) => !value)} + activeOpacity={0.8}> + + + {title} + + {isOpen && {children}} + + ); +} + +const styles = StyleSheet.create({ + heading: { + flexDirection: 'row', + alignItems: 'center', + gap: 6, + }, + content: { + marginTop: 6, + marginLeft: 24, + }, +}); diff --git a/packages/native/components/ExternalLink.tsx b/packages/native/components/ExternalLink.tsx new file mode 100644 index 00000000..8f05675b --- /dev/null +++ b/packages/native/components/ExternalLink.tsx @@ -0,0 +1,24 @@ +import { Link } from 'expo-router'; +import { openBrowserAsync } from 'expo-web-browser'; +import { type ComponentProps } from 'react'; +import { Platform } from 'react-native'; + +type Props = Omit, 'href'> & { href: string }; + +export function ExternalLink({ href, ...rest }: Props) { + return ( + { + if (Platform.OS !== 'web') { + // Prevent the default behavior of linking to the default browser on native. + event.preventDefault(); + // Open the link in an in-app browser. + await openBrowserAsync(href); + } + }} + /> + ); +} diff --git a/packages/native/components/HapticTab.tsx b/packages/native/components/HapticTab.tsx new file mode 100644 index 00000000..7f3981cb --- /dev/null +++ b/packages/native/components/HapticTab.tsx @@ -0,0 +1,18 @@ +import { BottomTabBarButtonProps } from '@react-navigation/bottom-tabs'; +import { PlatformPressable } from '@react-navigation/elements'; +import * as Haptics from 'expo-haptics'; + +export function HapticTab(props: BottomTabBarButtonProps) { + return ( + { + if (process.env.EXPO_OS === 'ios') { + // Add a soft haptic feedback when pressing down on the tabs. + Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); + } + props.onPressIn?.(ev); + }} + /> + ); +} diff --git a/packages/native/components/HelloWave.tsx b/packages/native/components/HelloWave.tsx new file mode 100644 index 00000000..9b4bc31c --- /dev/null +++ b/packages/native/components/HelloWave.tsx @@ -0,0 +1,40 @@ +import { useEffect } from 'react'; +import { StyleSheet } from 'react-native'; +import Animated, { + useSharedValue, + useAnimatedStyle, + withTiming, + withRepeat, + withSequence, +} from 'react-native-reanimated'; + +import { ThemedText } from '@/components/ThemedText'; + +export function HelloWave() { + const rotationAnimation = useSharedValue(0); + + useEffect(() => { + rotationAnimation.value = withRepeat( + withSequence(withTiming(25, { duration: 150 }), withTiming(0, { duration: 150 })), + 4 // Run the animation 4 times + ); + }, []); + + const animatedStyle = useAnimatedStyle(() => ({ + transform: [{ rotate: `${rotationAnimation.value}deg` }], + })); + + return ( + + 👋 + + ); +} + +const styles = StyleSheet.create({ + text: { + fontSize: 28, + lineHeight: 32, + marginTop: -6, + }, +}); diff --git a/packages/native/components/ParallaxScrollView.tsx b/packages/native/components/ParallaxScrollView.tsx new file mode 100644 index 00000000..5df1d75f --- /dev/null +++ b/packages/native/components/ParallaxScrollView.tsx @@ -0,0 +1,82 @@ +import type { PropsWithChildren, ReactElement } from 'react'; +import { StyleSheet } from 'react-native'; +import Animated, { + interpolate, + useAnimatedRef, + useAnimatedStyle, + useScrollViewOffset, +} from 'react-native-reanimated'; + +import { ThemedView } from '@/components/ThemedView'; +import { useBottomTabOverflow } from '@/components/ui/TabBarBackground'; +import { useColorScheme } from '@/hooks/useColorScheme'; + +const HEADER_HEIGHT = 250; + +type Props = PropsWithChildren<{ + headerImage: ReactElement; + headerBackgroundColor: { dark: string; light: string }; +}>; + +export default function ParallaxScrollView({ + children, + headerImage, + headerBackgroundColor, +}: Props) { + const colorScheme = useColorScheme() ?? 'light'; + const scrollRef = useAnimatedRef(); + const scrollOffset = useScrollViewOffset(scrollRef); + const bottom = useBottomTabOverflow(); + const headerAnimatedStyle = useAnimatedStyle(() => { + return { + transform: [ + { + translateY: interpolate( + scrollOffset.value, + [-HEADER_HEIGHT, 0, HEADER_HEIGHT], + [-HEADER_HEIGHT / 2, 0, HEADER_HEIGHT * 0.75] + ), + }, + { + scale: interpolate(scrollOffset.value, [-HEADER_HEIGHT, 0, HEADER_HEIGHT], [2, 1, 1]), + }, + ], + }; + }); + + return ( + + + + {headerImage} + + {children} + + + ); +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + }, + header: { + height: HEADER_HEIGHT, + overflow: 'hidden', + }, + content: { + flex: 1, + padding: 32, + gap: 16, + overflow: 'hidden', + }, +}); diff --git a/packages/native/components/ThemedText.tsx b/packages/native/components/ThemedText.tsx new file mode 100644 index 00000000..c0e1a78f --- /dev/null +++ b/packages/native/components/ThemedText.tsx @@ -0,0 +1,60 @@ +import { Text, type TextProps, StyleSheet } from 'react-native'; + +import { useThemeColor } from '@/hooks/useThemeColor'; + +export type ThemedTextProps = TextProps & { + lightColor?: string; + darkColor?: string; + type?: 'default' | 'title' | 'defaultSemiBold' | 'subtitle' | 'link'; +}; + +export function ThemedText({ + style, + lightColor, + darkColor, + type = 'default', + ...rest +}: ThemedTextProps) { + const color = useThemeColor({ light: lightColor, dark: darkColor }, 'text'); + + return ( + + ); +} + +const styles = StyleSheet.create({ + default: { + fontSize: 16, + lineHeight: 24, + }, + defaultSemiBold: { + fontSize: 16, + lineHeight: 24, + fontWeight: '600', + }, + title: { + fontSize: 32, + fontWeight: 'bold', + lineHeight: 32, + }, + subtitle: { + fontSize: 20, + fontWeight: 'bold', + }, + link: { + lineHeight: 30, + fontSize: 16, + color: '#0a7ea4', + }, +}); diff --git a/packages/native/components/ThemedView.tsx b/packages/native/components/ThemedView.tsx new file mode 100644 index 00000000..4d2cb09d --- /dev/null +++ b/packages/native/components/ThemedView.tsx @@ -0,0 +1,14 @@ +import { View, type ViewProps } from 'react-native'; + +import { useThemeColor } from '@/hooks/useThemeColor'; + +export type ThemedViewProps = ViewProps & { + lightColor?: string; + darkColor?: string; +}; + +export function ThemedView({ style, lightColor, darkColor, ...otherProps }: ThemedViewProps) { + const backgroundColor = useThemeColor({ light: lightColor, dark: darkColor }, 'background'); + + return ; +} diff --git a/packages/native/components/__tests__/ThemedText-test.tsx b/packages/native/components/__tests__/ThemedText-test.tsx new file mode 100644 index 00000000..1ac32250 --- /dev/null +++ b/packages/native/components/__tests__/ThemedText-test.tsx @@ -0,0 +1,10 @@ +import * as React from 'react'; +import renderer from 'react-test-renderer'; + +import { ThemedText } from '../ThemedText'; + +it(`renders correctly`, () => { + const tree = renderer.create(Snapshot test!).toJSON(); + + expect(tree).toMatchSnapshot(); +}); diff --git a/packages/native/components/__tests__/__snapshots__/ThemedText-test.tsx.snap b/packages/native/components/__tests__/__snapshots__/ThemedText-test.tsx.snap new file mode 100644 index 00000000..b68e53e9 --- /dev/null +++ b/packages/native/components/__tests__/__snapshots__/ThemedText-test.tsx.snap @@ -0,0 +1,24 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`renders correctly 1`] = ` + + Snapshot test! + +`; diff --git a/packages/native/components/ui/IconSymbol.ios.tsx b/packages/native/components/ui/IconSymbol.ios.tsx new file mode 100644 index 00000000..9177f4da --- /dev/null +++ b/packages/native/components/ui/IconSymbol.ios.tsx @@ -0,0 +1,32 @@ +import { SymbolView, SymbolViewProps, SymbolWeight } from 'expo-symbols'; +import { StyleProp, ViewStyle } from 'react-native'; + +export function IconSymbol({ + name, + size = 24, + color, + style, + weight = 'regular', +}: { + name: SymbolViewProps['name']; + size?: number; + color: string; + style?: StyleProp; + weight?: SymbolWeight; +}) { + return ( + + ); +} diff --git a/packages/native/components/ui/IconSymbol.tsx b/packages/native/components/ui/IconSymbol.tsx new file mode 100644 index 00000000..f1fabd4a --- /dev/null +++ b/packages/native/components/ui/IconSymbol.tsx @@ -0,0 +1,43 @@ +// This file is a fallback for using MaterialIcons on Android and web. + +import MaterialIcons from '@expo/vector-icons/MaterialIcons'; +import { SymbolWeight } from 'expo-symbols'; +import React from 'react'; +import { OpaqueColorValue, StyleProp, ViewStyle } from 'react-native'; + +// Add your SFSymbol to MaterialIcons mappings here. +const MAPPING = { + // See MaterialIcons here: https://icons.expo.fyi + // See SF Symbols in the SF Symbols app on Mac. + 'house.fill': 'home', + 'paperplane.fill': 'send', + 'chevron.left.forwardslash.chevron.right': 'code', + 'chevron.right': 'chevron-right', +} as Partial< + Record< + import('expo-symbols').SymbolViewProps['name'], + React.ComponentProps['name'] + > +>; + +export type IconSymbolName = keyof typeof MAPPING; + +/** + * An icon component that uses native SFSymbols on iOS, and MaterialIcons on Android and web. This ensures a consistent look across platforms, and optimal resource usage. + * + * Icon `name`s are based on SFSymbols and require manual mapping to MaterialIcons. + */ +export function IconSymbol({ + name, + size = 24, + color, + style, +}: { + name: IconSymbolName; + size?: number; + color: string | OpaqueColorValue; + style?: StyleProp; + weight?: SymbolWeight; +}) { + return ; +} diff --git a/packages/native/components/ui/TabBarBackground.ios.tsx b/packages/native/components/ui/TabBarBackground.ios.tsx new file mode 100644 index 00000000..6668e78d --- /dev/null +++ b/packages/native/components/ui/TabBarBackground.ios.tsx @@ -0,0 +1,22 @@ +import { useBottomTabBarHeight } from '@react-navigation/bottom-tabs'; +import { BlurView } from 'expo-blur'; +import { StyleSheet } from 'react-native'; +import { useSafeAreaInsets } from 'react-native-safe-area-context'; + +export default function BlurTabBarBackground() { + return ( + + ); +} + +export function useBottomTabOverflow() { + const tabHeight = useBottomTabBarHeight(); + const { bottom } = useSafeAreaInsets(); + return tabHeight - bottom; +} diff --git a/packages/native/components/ui/TabBarBackground.tsx b/packages/native/components/ui/TabBarBackground.tsx new file mode 100644 index 00000000..70d1c3c0 --- /dev/null +++ b/packages/native/components/ui/TabBarBackground.tsx @@ -0,0 +1,6 @@ +// This is a shim for web and Android where the tab bar is generally opaque. +export default undefined; + +export function useBottomTabOverflow() { + return 0; +} diff --git a/packages/native/constants/Colors.ts b/packages/native/constants/Colors.ts new file mode 100644 index 00000000..14e67844 --- /dev/null +++ b/packages/native/constants/Colors.ts @@ -0,0 +1,26 @@ +/** + * Below are the colors that are used in the app. The colors are defined in the light and dark mode. + * There are many other ways to style your app. For example, [Nativewind](https://www.nativewind.dev/), [Tamagui](https://tamagui.dev/), [unistyles](https://reactnativeunistyles.vercel.app), etc. + */ + +const tintColorLight = '#0a7ea4'; +const tintColorDark = '#fff'; + +export const Colors = { + light: { + text: '#11181C', + background: '#fff', + tint: tintColorLight, + icon: '#687076', + tabIconDefault: '#687076', + tabIconSelected: tintColorLight, + }, + dark: { + text: '#ECEDEE', + background: '#151718', + tint: tintColorDark, + icon: '#9BA1A6', + tabIconDefault: '#9BA1A6', + tabIconSelected: tintColorDark, + }, +}; diff --git a/packages/native/eas.json b/packages/native/eas.json new file mode 100644 index 00000000..cf587d3b --- /dev/null +++ b/packages/native/eas.json @@ -0,0 +1,21 @@ +{ + "cli": { + "version": ">= 15.0.10", + "appVersionSource": "remote" + }, + "build": { + "development": { + "developmentClient": true, + "distribution": "internal" + }, + "preview": { + "distribution": "internal" + }, + "production": { + "autoIncrement": true + } + }, + "submit": { + "production": {} + } +} diff --git a/packages/native/hooks/useColorScheme.ts b/packages/native/hooks/useColorScheme.ts new file mode 100644 index 00000000..17e3c63e --- /dev/null +++ b/packages/native/hooks/useColorScheme.ts @@ -0,0 +1 @@ +export { useColorScheme } from 'react-native'; diff --git a/packages/native/hooks/useColorScheme.web.ts b/packages/native/hooks/useColorScheme.web.ts new file mode 100644 index 00000000..7eb1c1b7 --- /dev/null +++ b/packages/native/hooks/useColorScheme.web.ts @@ -0,0 +1,21 @@ +import { useEffect, useState } from 'react'; +import { useColorScheme as useRNColorScheme } from 'react-native'; + +/** + * To support static rendering, this value needs to be re-calculated on the client side for web + */ +export function useColorScheme() { + const [hasHydrated, setHasHydrated] = useState(false); + + useEffect(() => { + setHasHydrated(true); + }, []); + + const colorScheme = useRNColorScheme(); + + if (hasHydrated) { + return colorScheme; + } + + return 'light'; +} diff --git a/packages/native/hooks/useThemeColor.ts b/packages/native/hooks/useThemeColor.ts new file mode 100644 index 00000000..0608e731 --- /dev/null +++ b/packages/native/hooks/useThemeColor.ts @@ -0,0 +1,21 @@ +/** + * Learn more about light and dark modes: + * https://docs.expo.dev/guides/color-schemes/ + */ + +import { Colors } from '@/constants/Colors'; +import { useColorScheme } from '@/hooks/useColorScheme'; + +export function useThemeColor( + props: { light?: string; dark?: string }, + colorName: keyof typeof Colors.light & keyof typeof Colors.dark +) { + const theme = useColorScheme() ?? 'light'; + const colorFromProps = props[theme]; + + if (colorFromProps) { + return colorFromProps; + } else { + return Colors[theme][colorName]; + } +} diff --git a/packages/native/package-lock.json b/packages/native/package-lock.json new file mode 100644 index 00000000..106d51c1 --- /dev/null +++ b/packages/native/package-lock.json @@ -0,0 +1,16965 @@ +{ + "name": "diplicity-react-native", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "diplicity-react-native", + "version": "1.0.0", + "dependencies": { + "@expo/vector-icons": "^14.0.2", + "@react-native-async-storage/async-storage": "^2.1.1", + "@react-native-google-signin/google-signin": "^13.1.0", + "@react-navigation/bottom-tabs": "^7.2.0", + "@react-navigation/native": "^7.0.14", + "expo": "~52.0.33", + "expo-blur": "~14.0.3", + "expo-constants": "~17.0.5", + "expo-dev-client": "~5.0.12", + "expo-font": "~13.0.3", + "expo-haptics": "~14.0.1", + "expo-linking": "~7.0.5", + "expo-router": "~4.0.17", + "expo-splash-screen": "~0.29.21", + "expo-status-bar": "~2.0.1", + "expo-symbols": "~0.2.2", + "expo-system-ui": "~4.0.8", + "expo-web-browser": "~14.0.2", + "react": "18.3.1", + "react-dom": "18.3.1", + "react-native": "0.76.7", + "react-native-gesture-handler": "~2.20.2", + "react-native-reanimated": "~3.16.1", + "react-native-safe-area-context": "4.12.0", + "react-native-screens": "~4.4.0", + "react-native-web": "~0.19.13", + "react-native-webview": "13.12.5" + }, + "devDependencies": { + "@babel/core": "^7.25.2", + "@react-native-community/cli": "latest", + "@types/jest": "^29.5.12", + "@types/react": "~18.3.12", + "@types/react-test-renderer": "^18.3.0", + "jest": "^29.2.1", + "jest-expo": "~52.0.3", + "react-test-renderer": "18.3.1", + "typescript": "^5.3.3" + } + }, + "node_modules/@0no-co/graphql.web": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/@0no-co/graphql.web/-/graphql.web-1.0.13.tgz", + "integrity": "sha512-jqYxOevheVTU1S36ZdzAkJIdvRp2m3OYIG5SEoKDw5NI8eVwkoI0D/Q3DYNGmXCxkA6CQuoa7zvMiDPTLqUNuw==", + "license": "MIT", + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0" + }, + "peerDependenciesMeta": { + "graphql": { + "optional": true + } + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", + "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.8.tgz", + "integrity": "sha512-l+lkXCHS6tQEc5oUpK28xBOZ6+HwaH7YwoYQbLFiYb4nS2/l1tKnZEtEWkD0GuiYdvArf9qBS0XlQGXzPMsNqQ==", + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.8", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.7", + "@babel/parser": "^7.26.8", + "@babel/template": "^7.26.8", + "@babel/traverse": "^7.26.8", + "@babel/types": "^7.26.8", + "@types/gensync": "^1.0.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.8.tgz", + "integrity": "sha512-ef383X5++iZHWAXX0SXQR6ZyQhw/0KtTkrTz61WXRhFM6dhpHulO/RJz79L8S6ugZHJkOOkUrUdxgdF2YiPFnA==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.26.8", + "@babel/types": "^7.26.8", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", + "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", + "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.25.9", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz", + "integrity": "sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "regexpu-core": "^6.2.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz", + "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", + "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", + "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", + "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-wrap-function": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", + "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", + "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", + "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.7.tgz", + "integrity": "sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.9.tgz", + "integrity": "sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.8.tgz", + "integrity": "sha512-TZIQ25pkSoaKEYYaHbbxkfL36GNsQ6iFiBbeuzAkLnXayKR1yP1zFe+NxuZWWsUyvt8icPU9CCq0sgWGXR1GEw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.8" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", + "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", + "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", + "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", + "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.9.tgz", + "integrity": "sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-decorators": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-default-from": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.25.9.tgz", + "integrity": "sha512-ykqgwNfSnNOB+C8fV5X4mG3AVmvu+WVxcaU9xHHtBb7PCrPeweMmPjGsn8eMaeJg6SJuoUuZENeeSWaarWqonQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.9.tgz", + "integrity": "sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-default-from": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.25.9.tgz", + "integrity": "sha512-9MhJ/SMTsVqsd69GyQg89lYR4o9T+oDGv5F6IsigxxqFVOyR/IflDLYP8WDI1l8fkhNGGktqkvL5qwNCtGEpgQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-flow": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.26.0.tgz", + "integrity": "sha512-B+O2DnPc0iG+YXFqOxv2WNuNU97ToWjOomUQ78DouOENWUaM5sVrmet9mcomUGQFwpJd//gvUagXBSdzO1fRKg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", + "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", + "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz", + "integrity": "sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-remap-async-to-generator": "^7.25.9", + "@babel/traverse": "^7.26.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", + "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz", + "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", + "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", + "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", + "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", + "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", + "license": "MIT", + "dependencies": { + "@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/traverse": "^7.25.9", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", + "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/template": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", + "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", + "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", + "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", + "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", + "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", + "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-flow-strip-types": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.26.5.tgz", + "integrity": "sha512-eGK26RsbIkYUns3Y8qKl362juDDYK+wEdPGHGrhzUl6CewZFo55VZ7hg+CyMFU4dd5QQakBN86nBMpRsFpRvbQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/plugin-syntax-flow": "^7.26.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz", + "integrity": "sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", + "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", + "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", + "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", + "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", + "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", + "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", + "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", + "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", + "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", + "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.26.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz", + "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", + "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", + "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", + "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", + "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", + "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", + "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", + "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", + "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz", + "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", + "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz", + "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==", + "license": "MIT", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz", + "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz", + "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz", + "integrity": "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", + "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", + "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", + "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.26.8.tgz", + "integrity": "sha512-H0jlQxFMI0Q8SyGPsj9pO3ygVQRxPkIGytsL3m1Zqca8KrCPpMlvh+e2dxknqdfS8LFwBw+PpiYPD9qy/FPQpA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", + "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", + "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", + "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz", + "integrity": "sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.26.7.tgz", + "integrity": "sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.8.tgz", + "integrity": "sha512-bME5J9AC8ChwA7aEPJ6zym3w7aObZULHhbNLU0bKUhKsAkylkzUdq+0kdymh9rzi8nlNFl2bmldFBCKNJBUpuw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-syntax-typescript": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", + "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", + "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", + "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", + "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.8.tgz", + "integrity": "sha512-um7Sy+2THd697S4zJEfv/U5MHGJzkN2xhtsR3T/SWRbVSic62nbISh51VVfU9JiO/L/Z97QczHTaFVkOU8IzNg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/compat-data": "^7.26.8", + "@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/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.26.0", + "@babel/plugin-syntax-import-attributes": "^7.26.0", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.25.9", + "@babel/plugin-transform-async-generator-functions": "^7.26.8", + "@babel/plugin-transform-async-to-generator": "^7.25.9", + "@babel/plugin-transform-block-scoped-functions": "^7.26.5", + "@babel/plugin-transform-block-scoping": "^7.25.9", + "@babel/plugin-transform-class-properties": "^7.25.9", + "@babel/plugin-transform-class-static-block": "^7.26.0", + "@babel/plugin-transform-classes": "^7.25.9", + "@babel/plugin-transform-computed-properties": "^7.25.9", + "@babel/plugin-transform-destructuring": "^7.25.9", + "@babel/plugin-transform-dotall-regex": "^7.25.9", + "@babel/plugin-transform-duplicate-keys": "^7.25.9", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-dynamic-import": "^7.25.9", + "@babel/plugin-transform-exponentiation-operator": "^7.26.3", + "@babel/plugin-transform-export-namespace-from": "^7.25.9", + "@babel/plugin-transform-for-of": "^7.25.9", + "@babel/plugin-transform-function-name": "^7.25.9", + "@babel/plugin-transform-json-strings": "^7.25.9", + "@babel/plugin-transform-literals": "^7.25.9", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", + "@babel/plugin-transform-member-expression-literals": "^7.25.9", + "@babel/plugin-transform-modules-amd": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.26.3", + "@babel/plugin-transform-modules-systemjs": "^7.25.9", + "@babel/plugin-transform-modules-umd": "^7.25.9", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-new-target": "^7.25.9", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6", + "@babel/plugin-transform-numeric-separator": "^7.25.9", + "@babel/plugin-transform-object-rest-spread": "^7.25.9", + "@babel/plugin-transform-object-super": "^7.25.9", + "@babel/plugin-transform-optional-catch-binding": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9", + "@babel/plugin-transform-private-methods": "^7.25.9", + "@babel/plugin-transform-private-property-in-object": "^7.25.9", + "@babel/plugin-transform-property-literals": "^7.25.9", + "@babel/plugin-transform-regenerator": "^7.25.9", + "@babel/plugin-transform-regexp-modifiers": "^7.26.0", + "@babel/plugin-transform-reserved-words": "^7.25.9", + "@babel/plugin-transform-shorthand-properties": "^7.25.9", + "@babel/plugin-transform-spread": "^7.25.9", + "@babel/plugin-transform-sticky-regex": "^7.25.9", + "@babel/plugin-transform-template-literals": "^7.26.8", + "@babel/plugin-transform-typeof-symbol": "^7.26.7", + "@babel/plugin-transform-unicode-escapes": "^7.25.9", + "@babel/plugin-transform-unicode-property-regex": "^7.25.9", + "@babel/plugin-transform-unicode-regex": "^7.25.9", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.11.0", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.40.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", + "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.3", + "core-js-compat": "^3.40.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-flow": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.25.9.tgz", + "integrity": "sha512-EASHsAhE+SSlEzJ4bzfusnXSHiU+JfAYzj+jbw2vgQKgq5HrUr8qs+vgtiEL5dOH6sEweI+PNt2D7AqrDSHyqQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-transform-flow-strip-types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.26.3.tgz", + "integrity": "sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-transform-react-display-name": "^7.25.9", + "@babel/plugin-transform-react-jsx": "^7.25.9", + "@babel/plugin-transform-react-jsx-development": "^7.25.9", + "@babel/plugin-transform-react-pure-annotations": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz", + "integrity": "sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.25.9", + "@babel/plugin-transform-typescript": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/register": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.25.9.tgz", + "integrity": "sha512-8D43jXtGsYmEeDvm4MWHYUpWf8iiXgWYx3fW7E7Wb7Oe6FWqJPl5K6TuFW0dOwNZzEE5rjlaSJYH9JjrUKJszA==", + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.6", + "source-map-support": "^0.5.16" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/register/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "license": "MIT", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@babel/runtime": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.7.tgz", + "integrity": "sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==", + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.8.tgz", + "integrity": "sha512-iNKaX3ZebKIsCvJ+0jd6embf+Aulaa3vNBqZ41kM7iTWjx5qzWKXGHiJUW3+nTpQ18SG11hdF8OAzKrpXkb96Q==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.26.8", + "@babel/types": "^7.26.8" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.8.tgz", + "integrity": "sha512-nic9tRkjYH0oB2dzr/JoGIm+4Q6SuYeLEiIiZDwBscRMYFJ+tMAz98fuel9ZnbXViA2I0HVSSRRK8DW5fjXStA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.8", + "@babel/parser": "^7.26.8", + "@babel/template": "^7.26.8", + "@babel/types": "^7.26.8", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse--for-generate-function-map": { + "name": "@babel/traverse", + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.8.tgz", + "integrity": "sha512-nic9tRkjYH0oB2dzr/JoGIm+4Q6SuYeLEiIiZDwBscRMYFJ+tMAz98fuel9ZnbXViA2I0HVSSRRK8DW5fjXStA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.8", + "@babel/parser": "^7.26.8", + "@babel/template": "^7.26.8", + "@babel/types": "^7.26.8", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.8.tgz", + "integrity": "sha512-eUuWapzEGWFEpHFxgEaBG8e3n6S8L3MSu0oda755rOfabWPnh0Our1AozNFVUxGFIhbKgd1ksprsoDGMinTOTA==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@egjs/hammerjs": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/@egjs/hammerjs/-/hammerjs-2.0.17.tgz", + "integrity": "sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==", + "license": "MIT", + "dependencies": { + "@types/hammerjs": "^2.0.36" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@expo/bunyan": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@expo/bunyan/-/bunyan-4.0.1.tgz", + "integrity": "sha512-+Lla7nYSiHZirgK+U/uYzsLv/X+HaJienbD5AKX1UQZHYfWaP+9uuQluRB4GrEVWF0GZ7vEVp/jzaOT9k/SQlg==", + "license": "MIT", + "dependencies": { + "uuid": "^8.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@expo/cli": { + "version": "0.22.15", + "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.22.15.tgz", + "integrity": "sha512-iXG8E+Fcyq21yM0g5hwdRyAQ9G/T0B+fAXXhwNmUP1jyoqb5wZUmld3gYycsByEJbM2TX9xKMnjtq/zyjYxYOA==", + "license": "MIT", + "dependencies": { + "@0no-co/graphql.web": "^1.0.8", + "@babel/runtime": "^7.20.0", + "@expo/code-signing-certificates": "^0.0.5", + "@expo/config": "~10.0.9", + "@expo/config-plugins": "~9.0.15", + "@expo/devcert": "^1.1.2", + "@expo/env": "~0.4.1", + "@expo/image-utils": "^0.6.4", + "@expo/json-file": "^9.0.1", + "@expo/metro-config": "~0.19.9", + "@expo/osascript": "^2.1.5", + "@expo/package-manager": "^1.7.1", + "@expo/plist": "^0.2.1", + "@expo/prebuild-config": "^8.0.26", + "@expo/rudder-sdk-node": "^1.1.1", + "@expo/spawn-async": "^1.7.2", + "@expo/ws-tunnel": "^1.0.1", + "@expo/xcpretty": "^4.3.0", + "@react-native/dev-middleware": "0.76.7", + "@urql/core": "^5.0.6", + "@urql/exchange-retry": "^1.3.0", + "accepts": "^1.3.8", + "arg": "^5.0.2", + "better-opn": "~3.0.2", + "bplist-creator": "0.0.7", + "bplist-parser": "^0.3.1", + "cacache": "^18.0.2", + "chalk": "^4.0.0", + "ci-info": "^3.3.0", + "compression": "^1.7.4", + "connect": "^3.7.0", + "debug": "^4.3.4", + "env-editor": "^0.4.1", + "fast-glob": "^3.3.2", + "form-data": "^3.0.1", + "freeport-async": "^2.0.0", + "fs-extra": "~8.1.0", + "getenv": "^1.0.0", + "glob": "^10.4.2", + "internal-ip": "^4.3.0", + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1", + "lodash.debounce": "^4.0.8", + "minimatch": "^3.0.4", + "node-forge": "^1.3.1", + "npm-package-arg": "^11.0.0", + "ora": "^3.4.0", + "picomatch": "^3.0.1", + "pretty-bytes": "^5.6.0", + "pretty-format": "^29.7.0", + "progress": "^2.0.3", + "prompts": "^2.3.2", + "qrcode-terminal": "0.11.0", + "require-from-string": "^2.0.2", + "requireg": "^0.2.2", + "resolve": "^1.22.2", + "resolve-from": "^5.0.0", + "resolve.exports": "^2.0.3", + "semver": "^7.6.0", + "send": "^0.19.0", + "slugify": "^1.3.4", + "source-map-support": "~0.5.21", + "stacktrace-parser": "^0.1.10", + "structured-headers": "^0.4.1", + "tar": "^6.2.1", + "temp-dir": "^2.0.0", + "tempy": "^0.7.1", + "terminal-link": "^2.1.1", + "undici": "^6.18.2", + "unique-string": "~2.0.0", + "wrap-ansi": "^7.0.0", + "ws": "^8.12.1" + }, + "bin": { + "expo-internal": "build/bin/cli" + } + }, + "node_modules/@expo/cli/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/code-signing-certificates": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.5.tgz", + "integrity": "sha512-BNhXkY1bblxKZpltzAx98G2Egj9g1Q+JRcvR7E99DOj862FTCX+ZPsAUtPTr7aHxwtrL7+fL3r0JSmM9kBm+Bw==", + "license": "MIT", + "dependencies": { + "node-forge": "^1.2.1", + "nullthrows": "^1.1.1" + } + }, + "node_modules/@expo/config": { + "version": "10.0.9", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-10.0.9.tgz", + "integrity": "sha512-dEw2PKnSjzik3nc2mMzWnLtfiFpd3uGsdBdSl8tEbaRwtMAu74/BOJ1qCgh8slWppikaTcQLQ0xWlqlQU2i4aw==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "~7.10.4", + "@expo/config-plugins": "~9.0.15", + "@expo/config-types": "^52.0.4", + "@expo/json-file": "^9.0.1", + "deepmerge": "^4.3.1", + "getenv": "^1.0.0", + "glob": "^10.4.2", + "require-from-string": "^2.0.2", + "resolve-from": "^5.0.0", + "resolve-workspace-root": "^2.0.0", + "semver": "^7.6.0", + "slugify": "^1.3.4", + "sucrase": "3.35.0" + } + }, + "node_modules/@expo/config-plugins": { + "version": "9.0.15", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-9.0.15.tgz", + "integrity": "sha512-elKY/zIpAJ40RH26iwfyp+hwgeyPgIXX0SrCSOcjeJLsMsCmMac9ewvb+AN8y4k+N7m5lD/dMZupsaateKTFwA==", + "license": "MIT", + "dependencies": { + "@expo/config-types": "^52.0.4", + "@expo/json-file": "~9.0.1", + "@expo/plist": "^0.2.1", + "@expo/sdk-runtime-versions": "^1.0.0", + "chalk": "^4.1.2", + "debug": "^4.3.5", + "getenv": "^1.0.0", + "glob": "^10.4.2", + "resolve-from": "^5.0.0", + "semver": "^7.5.4", + "slash": "^3.0.0", + "slugify": "^1.6.6", + "xcode": "^3.0.1", + "xml2js": "0.6.0" + } + }, + "node_modules/@expo/config-plugins/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/config-types": { + "version": "52.0.4", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-52.0.4.tgz", + "integrity": "sha512-oMGrb2o3niVCIfjnIHFrOoiDA9jGb0lc3G4RI1UiO//KjULBaQr3QTBoKDzZQwMqDV1AgYgSr9mgEcnX3LqhIg==", + "license": "MIT" + }, + "node_modules/@expo/config/node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@expo/config/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/devcert": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.1.4.tgz", + "integrity": "sha512-fqBODr8c72+gBSX5Ty3SIzaY4bXainlpab78+vEYEKL3fXmsOswMLf0+KE36mUEAa36BYabX7K3EiXOXX5OPMw==", + "license": "MIT", + "dependencies": { + "application-config-path": "^0.1.0", + "command-exists": "^1.2.4", + "debug": "^3.1.0", + "eol": "^0.9.1", + "get-port": "^3.2.0", + "glob": "^10.4.2", + "lodash": "^4.17.21", + "mkdirp": "^0.5.1", + "password-prompt": "^1.0.4", + "sudo-prompt": "^8.2.0", + "tmp": "^0.0.33", + "tslib": "^2.4.0" + } + }, + "node_modules/@expo/devcert/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@expo/env": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@expo/env/-/env-0.4.1.tgz", + "integrity": "sha512-oDtbO3i9yXD1nx93acWiPTWGljJ3vABn35x1NAbqtQ2JL6mFOcRcArt1dwi4imZyLnG4VCcjabT9irj+LgYntw==", + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "debug": "^4.3.4", + "dotenv": "~16.4.5", + "dotenv-expand": "~11.0.6", + "getenv": "^1.0.0" + } + }, + "node_modules/@expo/fingerprint": { + "version": "0.11.9", + "resolved": "https://registry.npmjs.org/@expo/fingerprint/-/fingerprint-0.11.9.tgz", + "integrity": "sha512-db99WKkC4JKAnCLL55LOUJ2OvGQOrxOPyQ4stBOgWb5v/OM25rtREqwLtGDpJ5VBvr5DKbXbscWd1yxginq99g==", + "license": "MIT", + "dependencies": { + "@expo/spawn-async": "^1.7.2", + "arg": "^5.0.2", + "chalk": "^4.1.2", + "debug": "^4.3.4", + "find-up": "^5.0.0", + "getenv": "^1.0.0", + "minimatch": "^3.0.4", + "p-limit": "^3.1.0", + "resolve-from": "^5.0.0", + "semver": "^7.6.0" + }, + "bin": { + "fingerprint": "bin/cli.js" + } + }, + "node_modules/@expo/fingerprint/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/image-utils": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.6.4.tgz", + "integrity": "sha512-L++1PBzSvf5iYc6UHJ8Db8GcYNkfLDw+a+zqEFBQ3xqRXP/muxb/O7wuiMFlXrj/cfkx4e0U+z1a4ceV0A7S7Q==", + "license": "MIT", + "dependencies": { + "@expo/spawn-async": "^1.7.2", + "chalk": "^4.0.0", + "fs-extra": "9.0.0", + "getenv": "^1.0.0", + "jimp-compact": "0.16.1", + "parse-png": "^2.1.0", + "resolve-from": "^5.0.0", + "semver": "^7.6.0", + "temp-dir": "~2.0.0", + "unique-string": "~2.0.0" + } + }, + "node_modules/@expo/image-utils/node_modules/fs-extra": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", + "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/image-utils/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@expo/image-utils/node_modules/jsonfile/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@expo/image-utils/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/image-utils/node_modules/universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@expo/json-file": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-9.0.1.tgz", + "integrity": "sha512-ZVPhbbEBEwafPCJ0+kI25O2Iivt3XKHEKAADCml1q2cmOIbQnKgLyn8DpOJXqWEyRQr/VWS+hflBh8DU2YFSqg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "~7.10.4", + "json5": "^2.2.3", + "write-file-atomic": "^2.3.0" + } + }, + "node_modules/@expo/json-file/node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@expo/metro-config": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.19.9.tgz", + "integrity": "sha512-JAsLWhFQqwLH0KsI4OMbPXsKFji5KJEmsi+/02Sz1GCT17YrjRmv1fZ91regUS/FUH2Y/PDAE/+2ulrTgMeG7A==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.20.0", + "@babel/generator": "^7.20.5", + "@babel/parser": "^7.20.0", + "@babel/types": "^7.20.0", + "@expo/config": "~10.0.8", + "@expo/env": "~0.4.1", + "@expo/json-file": "~9.0.1", + "@expo/spawn-async": "^1.7.2", + "chalk": "^4.1.0", + "debug": "^4.3.2", + "fs-extra": "^9.1.0", + "getenv": "^1.0.0", + "glob": "^10.4.2", + "jsc-safe-url": "^0.2.4", + "lightningcss": "~1.27.0", + "minimatch": "^3.0.4", + "postcss": "~8.4.32", + "resolve-from": "^5.0.0" + } + }, + "node_modules/@expo/metro-config/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/metro-config/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@expo/metro-config/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@expo/metro-runtime": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@expo/metro-runtime/-/metro-runtime-4.0.1.tgz", + "integrity": "sha512-CRpbLvdJ1T42S+lrYa1iZp1KfDeBp4oeZOK3hdpiS5n0vR0nhD6sC1gGF0sTboCTp64tLteikz5Y3j53dvgOIw==", + "license": "MIT", + "peerDependencies": { + "react-native": "*" + } + }, + "node_modules/@expo/osascript": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.1.5.tgz", + "integrity": "sha512-Cp7YF7msGiTAIbFdzNovwHBfecdMLVL5XzSqq4xQz72ALFCQ3uSIUXRph1QV2r61ugH7Yem0gY8yi7RcDlI4qg==", + "license": "MIT", + "dependencies": { + "@expo/spawn-async": "^1.7.2", + "exec-async": "^2.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@expo/package-manager": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.7.1.tgz", + "integrity": "sha512-DKbELrTOdl7U3KT0C07Aka9P+sUP3LL+1UTKf1KmLx2x2gPH1IC+c68N7iQlwNt+yA37qIw6/vKoqyTGu5EL9g==", + "license": "MIT", + "dependencies": { + "@expo/json-file": "^9.0.1", + "@expo/spawn-async": "^1.7.2", + "ansi-regex": "^5.0.0", + "chalk": "^4.0.0", + "find-up": "^5.0.0", + "js-yaml": "^3.13.1", + "micromatch": "^4.0.8", + "npm-package-arg": "^11.0.0", + "ora": "^3.4.0", + "resolve-workspace-root": "^2.0.0", + "split": "^1.0.1", + "sudo-prompt": "9.1.1" + } + }, + "node_modules/@expo/package-manager/node_modules/sudo-prompt": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.1.1.tgz", + "integrity": "sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "license": "MIT" + }, + "node_modules/@expo/plist": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.2.1.tgz", + "integrity": "sha512-9TaXGuNxa0LQwHQn4rYiU6YaERv6dPnQgsdKWq2rKKTr6LWOtGNQCi/yOk/HBLeZSxBm59APT5/6x60uRvr0Mg==", + "license": "MIT", + "dependencies": { + "@xmldom/xmldom": "~0.7.7", + "base64-js": "^1.2.3", + "xmlbuilder": "^14.0.0" + } + }, + "node_modules/@expo/prebuild-config": { + "version": "8.0.26", + "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-8.0.26.tgz", + "integrity": "sha512-SryIKBXPkykUzoCUVP3nt7GclChE74TM8xAstxZ7paXxgcSMN68mNVyUr/zOivLTYQijXltD1I9rNj20Vm5aFw==", + "license": "MIT", + "dependencies": { + "@expo/config": "~10.0.8", + "@expo/config-plugins": "~9.0.15", + "@expo/config-types": "^52.0.4", + "@expo/image-utils": "^0.6.4", + "@expo/json-file": "^9.0.1", + "@react-native/normalize-colors": "0.76.7", + "debug": "^4.3.1", + "fs-extra": "^9.0.0", + "resolve-from": "^5.0.0", + "semver": "^7.6.0", + "xml2js": "0.6.0" + } + }, + "node_modules/@expo/prebuild-config/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/prebuild-config/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@expo/prebuild-config/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/prebuild-config/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@expo/rudder-sdk-node": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@expo/rudder-sdk-node/-/rudder-sdk-node-1.1.1.tgz", + "integrity": "sha512-uy/hS/awclDJ1S88w9UGpc6Nm9XnNUjzOAAib1A3PVAnGQIwebg8DpFqOthFBTlZxeuV/BKbZ5jmTbtNZkp1WQ==", + "license": "MIT", + "dependencies": { + "@expo/bunyan": "^4.0.0", + "@segment/loosely-validate-event": "^2.0.0", + "fetch-retry": "^4.1.1", + "md5": "^2.2.1", + "node-fetch": "^2.6.1", + "remove-trailing-slash": "^0.1.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@expo/sdk-runtime-versions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz", + "integrity": "sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==", + "license": "MIT" + }, + "node_modules/@expo/server": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@expo/server/-/server-0.5.1.tgz", + "integrity": "sha512-lk8pKKw0eVP6rqkDR46vQB3vLA46z4KNGrqHpjD/SvMu1cGaRmQG2cQdX44mQtG8WyO9EYau+fBMHQQS2OTFKg==", + "license": "MIT", + "dependencies": { + "@remix-run/node": "^2.12.0", + "abort-controller": "^3.0.0", + "debug": "^4.3.4", + "source-map-support": "~0.5.21" + } + }, + "node_modules/@expo/spawn-async": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.7.2.tgz", + "integrity": "sha512-QdWi16+CHB9JYP7gma19OVVg0BFkvU8zNj9GjWorYI8Iv8FUxjOCcYRuAmX4s/h91e4e7BPsskc8cSrZYho9Ew==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@expo/vector-icons": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-14.0.4.tgz", + "integrity": "sha512-+yKshcbpDfbV4zoXOgHxCwh7lkE9VVTT5T03OUlBsqfze1PLy6Hi4jp1vSb1GVbY6eskvMIivGVc9SKzIv0oEQ==", + "license": "MIT", + "dependencies": { + "prop-types": "^15.8.1" + } + }, + "node_modules/@expo/ws-tunnel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@expo/ws-tunnel/-/ws-tunnel-1.0.4.tgz", + "integrity": "sha512-spXCVXxbeKOe8YZ9igd+MDfXZe6LeDvFAdILijeTSG+XcxGrZLmqMWWkFKR0nV8lTWZ+NugUT3CoiXmEuKKQ7w==" + }, + "node_modules/@expo/xcpretty": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@expo/xcpretty/-/xcpretty-4.3.2.tgz", + "integrity": "sha512-ReZxZ8pdnoI3tP/dNnJdnmAk7uLT4FjsKDGW7YeDdvdOMz2XCQSmSCM9IWlrXuWtMF9zeSB6WJtEhCQ41gQOfw==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/code-frame": "7.10.4", + "chalk": "^4.1.0", + "find-up": "^5.0.0", + "js-yaml": "^4.1.0" + }, + "bin": { + "excpretty": "build/cli.js" + } + }, + "node_modules/@expo/xcpretty/node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@expo/xcpretty/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/@expo/xcpretty/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/ttlcache": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz", + "integrity": "sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/core/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/create-cache-key-function": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz", + "integrity": "sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==", + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@jest/reporters/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/@jest/transform/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/fs/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz", + "integrity": "sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.1.tgz", + "integrity": "sha512-avutXAFL1ehGvAXtPquu0YK5oz6ctS474iM3vNGQIkswrVhdrS52e3uoMQBzZhNRAIE0jBnUyXWNmSjGHhCFcw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@react-native-async-storage/async-storage": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-2.1.1.tgz", + "integrity": "sha512-UqlnxddwM3rlCHvteFz+HpIXjqhQM7GkBgVQ9sMvMdl8QVOJQDjG7BODCUvabysMDw+9QfMFlLiOI8U6c0VzzQ==", + "license": "MIT", + "dependencies": { + "merge-options": "^3.0.4" + }, + "peerDependencies": { + "react-native": "^0.0.0-0 || >=0.65 <1.0" + } + }, + "node_modules/@react-native-community/cli": { + "version": "15.1.3", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-15.1.3.tgz", + "integrity": "sha512-+ih/WYUkJsEV2CMAnOHvVoSIz/Ahg5UJk+sqSIOmY79mWAglQzfLP71o7b0neJCnJWLmWiO6G6/S+kmULefD5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@react-native-community/cli-clean": "15.1.3", + "@react-native-community/cli-config": "15.1.3", + "@react-native-community/cli-debugger-ui": "15.1.3", + "@react-native-community/cli-doctor": "15.1.3", + "@react-native-community/cli-server-api": "15.1.3", + "@react-native-community/cli-tools": "15.1.3", + "@react-native-community/cli-types": "15.1.3", + "chalk": "^4.1.2", + "commander": "^9.4.1", + "deepmerge": "^4.3.0", + "execa": "^5.0.0", + "find-up": "^5.0.0", + "fs-extra": "^8.1.0", + "graceful-fs": "^4.1.3", + "prompts": "^2.4.2", + "semver": "^7.5.2" + }, + "bin": { + "rnc-cli": "build/bin.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native-community/cli-clean": { + "version": "15.1.3", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-15.1.3.tgz", + "integrity": "sha512-3s9NGapIkONFoCUN2s77NYI987GPSCdr74rTf0TWyGIDf4vTYgKoWKKR+Ml3VTa1BCj51r4cYuHEKE1pjUSc0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@react-native-community/cli-tools": "15.1.3", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "fast-glob": "^3.3.2" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@react-native-community/cli-config": { + "version": "15.1.3", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-15.1.3.tgz", + "integrity": "sha512-fJ9MrWp+/SszEVg5Wja8A57Whl5EfjRCHWFNkvFBtfjVUfi2hWvSTW3VBxzJuCHnPIIwpQafwjEgOrIRUI8y6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@react-native-community/cli-tools": "15.1.3", + "chalk": "^4.1.2", + "cosmiconfig": "^9.0.0", + "deepmerge": "^4.3.0", + "fast-glob": "^3.3.2", + "joi": "^17.2.1" + } + }, + "node_modules/@react-native-community/cli-config-android": { + "version": "15.1.3", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-config-android/-/cli-config-android-15.1.3.tgz", + "integrity": "sha512-v9okV/WQfMJEWRddI0S6no2v9Lvk54KgFkw1mvMYhJKVqloCNsIWzoqme0u7zIuYSzwsjXUQXVlGiDzbbwdkBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@react-native-community/cli-tools": "15.1.3", + "chalk": "^4.1.2", + "fast-glob": "^3.3.2", + "fast-xml-parser": "^4.4.1" + } + }, + "node_modules/@react-native-community/cli-config-apple": { + "version": "15.1.3", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-config-apple/-/cli-config-apple-15.1.3.tgz", + "integrity": "sha512-Qv6jaEaycv+7s8wR9l9bdpIeSNFCeVANfGCX1x76SgOmGfZNIa7J3l1HaeF/5ktERMYsw/hm4u3rUn4Ks0YV1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@react-native-community/cli-tools": "15.1.3", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "fast-glob": "^3.3.2" + } + }, + "node_modules/@react-native-community/cli-config-apple/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-config-apple/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-config-apple/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-config-apple/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli-config-apple/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-config-apple/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-config-apple/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@react-native-community/cli-config/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/@react-native-community/cli-config/node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@react-native-community/cli-config/node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-config/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@react-native-community/cli-config/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@react-native-community/cli-debugger-ui": { + "version": "15.1.3", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-15.1.3.tgz", + "integrity": "sha512-m+fb9iAUNb9WiDdokCBLh0InJvollcgAM3gLjCT8DGTP6bH/jxtZ3DszzyIRqN9cMamItVrvDM0vkIg48xK7rQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "serve-static": "^1.13.1" + } + }, + "node_modules/@react-native-community/cli-doctor": { + "version": "15.1.3", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-15.1.3.tgz", + "integrity": "sha512-WC9rawobuITAtJjyZ68E1M0geRt+b9A2CGB354L/tQp+XMKobGGVI4Y0DsattK83Wdg59GPyldE8C0Wevfgm/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@react-native-community/cli-config": "15.1.3", + "@react-native-community/cli-platform-android": "15.1.3", + "@react-native-community/cli-platform-apple": "15.1.3", + "@react-native-community/cli-platform-ios": "15.1.3", + "@react-native-community/cli-tools": "15.1.3", + "chalk": "^4.1.2", + "command-exists": "^1.2.8", + "deepmerge": "^4.3.0", + "envinfo": "^7.13.0", + "execa": "^5.0.0", + "node-stream-zip": "^1.9.1", + "ora": "^5.4.1", + "semver": "^7.5.2", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1", + "yaml": "^2.2.1" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/ora/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@react-native-community/cli-doctor/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli-platform-android": { + "version": "15.1.3", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-15.1.3.tgz", + "integrity": "sha512-ZwrBK0UK4DRHoQm2v5m8+PlNHBK5gmibBU6rqNFLo4aZJ2Rufalbv3SF+DukgSyoI9/kI8UVrzSNj17e+HhN5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@react-native-community/cli-config-android": "15.1.3", + "@react-native-community/cli-tools": "15.1.3", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "logkitty": "^0.7.1" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@react-native-community/cli-platform-apple": { + "version": "15.1.3", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-apple/-/cli-platform-apple-15.1.3.tgz", + "integrity": "sha512-awotqCGVcTdeRmTlE3wlsZgNxZUDGojUhPYOVMKejgdCzNM2bvzF8fqhETH2sc64Hbw/tQJg8pYeD4MZR0bHxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@react-native-community/cli-config-apple": "15.1.3", + "@react-native-community/cli-tools": "15.1.3", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "fast-xml-parser": "^4.4.1" + } + }, + "node_modules/@react-native-community/cli-platform-apple/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-platform-apple/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-platform-apple/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-platform-apple/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli-platform-apple/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-platform-apple/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-platform-apple/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@react-native-community/cli-platform-ios": { + "version": "15.1.3", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-15.1.3.tgz", + "integrity": "sha512-DxM8GYkqjrlGuuGiGjrcvUmKC2xv9zDzHbsc4+S160Nn0zbF2OH1DhMlnIuUeCmQnAO6QFMqU99O120iEzCAug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@react-native-community/cli-platform-apple": "15.1.3" + } + }, + "node_modules/@react-native-community/cli-server-api": { + "version": "15.1.3", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-15.1.3.tgz", + "integrity": "sha512-kXZ0evedluLt6flWQiI3JqwnW8rSBspOoQ7JVTQYiG5lDHAeL3Om9PjAyiQBg1EZRMjiWZDV7nDxhR+m+6NX5Q==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@react-native-community/cli-debugger-ui": "15.1.3", + "@react-native-community/cli-tools": "15.1.3", + "compression": "^1.7.1", + "connect": "^3.6.5", + "errorhandler": "^1.5.1", + "nocache": "^3.0.1", + "pretty-format": "^26.6.2", + "serve-static": "^1.13.1", + "ws": "^6.2.3" + } + }, + "node_modules/@react-native-community/cli-server-api/node_modules/@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@react-native-community/cli-server-api/node_modules/@types/yargs": { + "version": "15.0.19", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", + "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@react-native-community/cli-server-api/node_modules/pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@react-native-community/cli-server-api/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@react-native-community/cli-server-api/node_modules/ws": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/@react-native-community/cli-tools": { + "version": "15.1.3", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-15.1.3.tgz", + "integrity": "sha512-2RzoUKR+Y03ijBeeSoCSQihyN6dxy3fbHjraO4MheZZUzt/Yd1VMEDd0R5aa6rtiRDoknbHt45RL2GMa8MSaEA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "appdirsjs": "^1.2.4", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "find-up": "^5.0.0", + "mime": "^2.4.1", + "open": "^6.2.0", + "ora": "^5.4.1", + "prompts": "^2.4.2", + "semver": "^7.5.2", + "shell-quote": "^1.7.3", + "sudo-prompt": "^9.0.0" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "devOptional": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/open": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "devOptional": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "devOptional": true, + "license": "ISC" + }, + "node_modules/@react-native-community/cli-tools/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/sudo-prompt": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz", + "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@react-native-community/cli-types": { + "version": "15.1.3", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-15.1.3.tgz", + "integrity": "sha512-0ZaM8LMsa7z7swBN+ObL2ysc6aA3AdS698Q6uEukym6RyX1uLbiofUdlvFSMpWSEL3D8f9OTymmL4RkCH8k6dw==", + "dev": true, + "license": "MIT", + "dependencies": { + "joi": "^17.2.1" + } + }, + "node_modules/@react-native-community/cli/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/@react-native-community/cli/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@react-native-community/cli/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native-community/cli/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-community/cli/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@react-native-community/cli/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@react-native-google-signin/google-signin": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/@react-native-google-signin/google-signin/-/google-signin-13.1.0.tgz", + "integrity": "sha512-C2/sqb0/s0c+Dwc/mykASZsRuHxGqn7SFrCxCY9D8p8IOQO05haInhCc7lzraJshRixGva5c/4usQZ71HMYSEQ==", + "license": "MIT", + "peerDependencies": { + "expo": ">=50.0.0", + "react": "*", + "react-dom": "*", + "react-native": "*" + }, + "peerDependenciesMeta": { + "expo": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@react-native/assets-registry": { + "version": "0.76.7", + "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.76.7.tgz", + "integrity": "sha512-o79whsqL5fbPTUQO9w1FptRd4cw1TaeOrXtQSLQeDrMVAenw/wmsjyPK10VKtvqxa1KNMtWEyfgxcM8CVZVFmg==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/babel-plugin-codegen": { + "version": "0.76.7", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.76.7.tgz", + "integrity": "sha512-+8H4DXJREM4l/pwLF/wSVMRzVhzhGDix5jLezNrMD9J1U1AMfV2aSkWA1XuqR7pjPs/Vqf6TaPL7vJMZ4LU05Q==", + "license": "MIT", + "dependencies": { + "@react-native/codegen": "0.76.7" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/babel-preset": { + "version": "0.76.7", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.76.7.tgz", + "integrity": "sha512-/c5DYZ6y8tyg+g8tgXKndDT7mWnGmkZ9F+T3qNDfoE3Qh7ucrNeC2XWvU9h5pk8eRtj9l4SzF4aO1phzwoibyg==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.25.2", + "@babel/plugin-proposal-export-default-from": "^7.24.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-default-from": "^7.24.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.24.7", + "@babel/plugin-transform-async-generator-functions": "^7.25.4", + "@babel/plugin-transform-async-to-generator": "^7.24.7", + "@babel/plugin-transform-block-scoping": "^7.25.0", + "@babel/plugin-transform-class-properties": "^7.25.4", + "@babel/plugin-transform-classes": "^7.25.4", + "@babel/plugin-transform-computed-properties": "^7.24.7", + "@babel/plugin-transform-destructuring": "^7.24.8", + "@babel/plugin-transform-flow-strip-types": "^7.25.2", + "@babel/plugin-transform-for-of": "^7.24.7", + "@babel/plugin-transform-function-name": "^7.25.1", + "@babel/plugin-transform-literals": "^7.25.2", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.8", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", + "@babel/plugin-transform-numeric-separator": "^7.24.7", + "@babel/plugin-transform-object-rest-spread": "^7.24.7", + "@babel/plugin-transform-optional-catch-binding": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.8", + "@babel/plugin-transform-parameters": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/plugin-transform-private-property-in-object": "^7.24.7", + "@babel/plugin-transform-react-display-name": "^7.24.7", + "@babel/plugin-transform-react-jsx": "^7.25.2", + "@babel/plugin-transform-react-jsx-self": "^7.24.7", + "@babel/plugin-transform-react-jsx-source": "^7.24.7", + "@babel/plugin-transform-regenerator": "^7.24.7", + "@babel/plugin-transform-runtime": "^7.24.7", + "@babel/plugin-transform-shorthand-properties": "^7.24.7", + "@babel/plugin-transform-spread": "^7.24.7", + "@babel/plugin-transform-sticky-regex": "^7.24.7", + "@babel/plugin-transform-typescript": "^7.25.2", + "@babel/plugin-transform-unicode-regex": "^7.24.7", + "@babel/template": "^7.25.0", + "@react-native/babel-plugin-codegen": "0.76.7", + "babel-plugin-syntax-hermes-parser": "^0.25.1", + "babel-plugin-transform-flow-enums": "^0.0.2", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/@react-native/codegen": { + "version": "0.76.7", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.76.7.tgz", + "integrity": "sha512-FAn585Ll65YvkSrKDyAcsdjHhhAGiMlSTUpHh0x7J5ntudUns+voYms0xMP+pEPt0XuLdjhD7zLIIlAWP407+g==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.3", + "glob": "^7.1.1", + "hermes-parser": "0.23.1", + "invariant": "^2.2.4", + "jscodeshift": "^0.14.0", + "mkdirp": "^0.5.1", + "nullthrows": "^1.1.1", + "yargs": "^17.6.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" + } + }, + "node_modules/@react-native/codegen/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@react-native/community-cli-plugin": { + "version": "0.76.7", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.76.7.tgz", + "integrity": "sha512-lrcsY2WPLCEWU1pjdNV9+Ccj8vCEwCCURZiPa5aqi7lKB4C++1hPrxA8/CWWnTNcQp76DsBKGYqTFj7Ud4aupw==", + "license": "MIT", + "dependencies": { + "@react-native/dev-middleware": "0.76.7", + "@react-native/metro-babel-transformer": "0.76.7", + "chalk": "^4.0.0", + "execa": "^5.1.1", + "invariant": "^2.2.4", + "metro": "^0.81.0", + "metro-config": "^0.81.0", + "metro-core": "^0.81.0", + "node-fetch": "^2.2.0", + "readline": "^1.3.0", + "semver": "^7.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@react-native-community/cli-server-api": "*" + }, + "peerDependenciesMeta": { + "@react-native-community/cli-server-api": { + "optional": true + } + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/@react-native/debugger-frontend": { + "version": "0.76.7", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.76.7.tgz", + "integrity": "sha512-89ZtZXt7ZxE94i7T94qzZMhp4Gfcpr/QVpGqEaejAxZD+gvDCH21cYSF+/Rz2ttBazm0rk5MZ0mFqb0Iqp1jmw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/dev-middleware": { + "version": "0.76.7", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.76.7.tgz", + "integrity": "sha512-Jsw8g9DyLPnR9yHEGuT09yHZ7M88/GL9CtU9WmyChlBwdXSeE3AmRqLegsV3XcgULQ1fqdemokaOZ/MwLYkjdA==", + "license": "MIT", + "dependencies": { + "@isaacs/ttlcache": "^1.4.1", + "@react-native/debugger-frontend": "0.76.7", + "chrome-launcher": "^0.15.2", + "chromium-edge-launcher": "^0.2.0", + "connect": "^3.6.5", + "debug": "^2.2.0", + "invariant": "^2.2.4", + "nullthrows": "^1.1.1", + "open": "^7.0.3", + "selfsigned": "^2.4.1", + "serve-static": "^1.13.1", + "ws": "^6.2.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/dev-middleware/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@react-native/dev-middleware/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/@react-native/dev-middleware/node_modules/ws": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "license": "MIT", + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/@react-native/gradle-plugin": { + "version": "0.76.7", + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.76.7.tgz", + "integrity": "sha512-gQI6RcrJbigU8xk7F960C5xQIgvbBj20TUvGecD+N2PHfbLpqR+92cj7hz3UcbrCONmTP40WHnbMMJ8P+kLsrA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/js-polyfills": { + "version": "0.76.7", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.76.7.tgz", + "integrity": "sha512-+iEikj6c6Zvrg1c3cYMeiPB+5nS8EaIC3jCtP6Muk3qc7c386IymEPM2xycIlfg04DPZvO3D4P2/vaO9/TCnUg==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/metro-babel-transformer": { + "version": "0.76.7", + "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.76.7.tgz", + "integrity": "sha512-jDS1wR7q46xY5ah+jF714Mvss9l7+lmwW/tplahZgLKozkYDC8Td5o9TOCgKlv18acw9H1V7zv8ivuRSj8ICPg==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.25.2", + "@react-native/babel-preset": "0.76.7", + "hermes-parser": "0.23.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/@react-native/normalize-colors": { + "version": "0.76.7", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.76.7.tgz", + "integrity": "sha512-ST1xxBuYVIXPdD81dR6+tzIgso7m3pa9+6rOBXTh5Xm7KEEFik7tnQX+GydXYMp3wr1gagJjragdXkPnxK6WNg==", + "license": "MIT" + }, + "node_modules/@react-native/virtualized-lists": { + "version": "0.76.7", + "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.76.7.tgz", + "integrity": "sha512-pRUf1jUO8H9Ft04CaWv76t34QI9wY0sydoYlIwEtqXjjMJgmgDoOCAWBjArgn2mk8/rK+u/uicI67ZCYCp1pJw==", + "license": "MIT", + "dependencies": { + "invariant": "^2.2.4", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/react": "^18.2.6", + "react": "*", + "react-native": "*" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@react-navigation/bottom-tabs": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@react-navigation/bottom-tabs/-/bottom-tabs-7.2.0.tgz", + "integrity": "sha512-1LxjgnbPyFINyf9Qr5d1YE0pYhuJayg5TCIIFQmbcX4PRhX7FKUXV7cX8OzrKXEdZi/UE/VNXugtozPAR9zgvA==", + "license": "MIT", + "dependencies": { + "@react-navigation/elements": "^2.2.5", + "color": "^4.2.3" + }, + "peerDependencies": { + "@react-navigation/native": "^7.0.14", + "react": ">= 18.2.0", + "react-native": "*", + "react-native-safe-area-context": ">= 4.0.0", + "react-native-screens": ">= 4.0.0" + } + }, + "node_modules/@react-navigation/core": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-7.3.1.tgz", + "integrity": "sha512-S3KCGvNsoqVk8ErAtQI2EAhg9185lahF5OY01ofrrD4Ij/uk3QEHHjoGQhR5l5DXSCSKr1JbMQA7MEKMsBiWZA==", + "license": "MIT", + "dependencies": { + "@react-navigation/routers": "^7.1.2", + "escape-string-regexp": "^4.0.0", + "nanoid": "3.3.8", + "query-string": "^7.1.3", + "react-is": "^18.2.0", + "use-latest-callback": "^0.2.1", + "use-sync-external-store": "^1.2.2" + }, + "peerDependencies": { + "react": ">= 18.2.0" + } + }, + "node_modules/@react-navigation/elements": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-2.2.5.tgz", + "integrity": "sha512-sDhE+W14P7MNWLMxXg1MEVXwkLUpMZJGflE6nQNzLmolJQIHgcia0Mrm8uRa3bQovhxYu1UzEojLZ+caoZt7Fg==", + "license": "MIT", + "dependencies": { + "color": "^4.2.3" + }, + "peerDependencies": { + "@react-native-masked-view/masked-view": ">= 0.2.0", + "@react-navigation/native": "^7.0.14", + "react": ">= 18.2.0", + "react-native": "*", + "react-native-safe-area-context": ">= 4.0.0" + }, + "peerDependenciesMeta": { + "@react-native-masked-view/masked-view": { + "optional": true + } + } + }, + "node_modules/@react-navigation/native": { + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-7.0.14.tgz", + "integrity": "sha512-Gi6lLw4VOGSWAhmUdJOMauOKGK51/YA1CprjXm91sNfgERWvznqEMw8QmUQx9SEqYfi0LfZhbzpMst09SJ00lw==", + "license": "MIT", + "dependencies": { + "@react-navigation/core": "^7.3.1", + "escape-string-regexp": "^4.0.0", + "fast-deep-equal": "^3.1.3", + "nanoid": "3.3.8", + "use-latest-callback": "^0.2.1" + }, + "peerDependencies": { + "react": ">= 18.2.0", + "react-native": "*" + } + }, + "node_modules/@react-navigation/native-stack": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-7.2.0.tgz", + "integrity": "sha512-mw7Nq9qQrGsmJmCTwIIWB7yY/3tWYXvQswx+HJScGAadIjemvytJXm1fcl3+YZ9T9Ym0aERcVe5kDs+ny3X4vA==", + "license": "MIT", + "dependencies": { + "@react-navigation/elements": "^2.2.5", + "warn-once": "^0.1.1" + }, + "peerDependencies": { + "@react-navigation/native": "^7.0.14", + "react": ">= 18.2.0", + "react-native": "*", + "react-native-safe-area-context": ">= 4.0.0", + "react-native-screens": ">= 4.0.0" + } + }, + "node_modules/@react-navigation/routers": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-7.1.2.tgz", + "integrity": "sha512-emdEjpVDK8zbiu2GChC8oYIAub9i/OpNuQJekVsbyFCBz4/TzaBzms38Q53YaNhdIFNmiYLfHv/Y1Ub7KYfm3w==", + "license": "MIT", + "dependencies": { + "nanoid": "3.3.8" + } + }, + "node_modules/@remix-run/node": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/@remix-run/node/-/node-2.15.3.tgz", + "integrity": "sha512-TYfS6BPhbABBpSRZ6WBA4qIWSwWvJhRVQGXCHUtgOwkuW863rcFmjh9g2Xj/IHyTmbOYPdcjHsIgZ9el4CHOKQ==", + "license": "MIT", + "dependencies": { + "@remix-run/server-runtime": "2.15.3", + "@remix-run/web-fetch": "^4.4.2", + "@web3-storage/multipart-parser": "^1.0.0", + "cookie-signature": "^1.1.0", + "source-map-support": "^0.5.21", + "stream-slice": "^0.1.2", + "undici": "^6.11.1" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "typescript": "^5.1.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@remix-run/router": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.22.0.tgz", + "integrity": "sha512-MBOl8MeOzpK0HQQQshKB7pABXbmyHizdTpqnrIseTbsv0nAepwC2ENZa1aaBExNQcpLoXmWthhak8SABLzvGPw==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@remix-run/server-runtime": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/@remix-run/server-runtime/-/server-runtime-2.15.3.tgz", + "integrity": "sha512-taHBe1DEqxZNjjj6OfkSYbup+sZPjbTgUhykaI+nHqrC2NDQuTiisBXhLwtx60GctONR/x0lWhF7R9ZGC5WsHw==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.22.0", + "@types/cookie": "^0.6.0", + "@web3-storage/multipart-parser": "^1.0.0", + "cookie": "^0.6.0", + "set-cookie-parser": "^2.4.8", + "source-map": "^0.7.3", + "turbo-stream": "2.4.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "typescript": "^5.1.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@remix-run/web-blob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@remix-run/web-blob/-/web-blob-3.1.0.tgz", + "integrity": "sha512-owGzFLbqPH9PlKb8KvpNJ0NO74HWE2euAn61eEiyCXX/oteoVzTVSN8mpLgDjaxBf2btj5/nUllSUgpyd6IH6g==", + "license": "MIT", + "dependencies": { + "@remix-run/web-stream": "^1.1.0", + "web-encoding": "1.1.5" + } + }, + "node_modules/@remix-run/web-fetch": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@remix-run/web-fetch/-/web-fetch-4.4.2.tgz", + "integrity": "sha512-jgKfzA713/4kAW/oZ4bC3MoLWyjModOVDjFPNseVqcJKSafgIscrYL9G50SurEYLswPuoU3HzSbO0jQCMYWHhA==", + "license": "MIT", + "dependencies": { + "@remix-run/web-blob": "^3.1.0", + "@remix-run/web-file": "^3.1.0", + "@remix-run/web-form-data": "^3.1.0", + "@remix-run/web-stream": "^1.1.0", + "@web3-storage/multipart-parser": "^1.0.0", + "abort-controller": "^3.0.0", + "data-uri-to-buffer": "^3.0.1", + "mrmime": "^1.0.0" + }, + "engines": { + "node": "^10.17 || >=12.3" + } + }, + "node_modules/@remix-run/web-file": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@remix-run/web-file/-/web-file-3.1.0.tgz", + "integrity": "sha512-dW2MNGwoiEYhlspOAXFBasmLeYshyAyhIdrlXBi06Duex5tDr3ut2LFKVj7tyHLmn8nnNwFf1BjNbkQpygC2aQ==", + "license": "MIT", + "dependencies": { + "@remix-run/web-blob": "^3.1.0" + } + }, + "node_modules/@remix-run/web-form-data": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@remix-run/web-form-data/-/web-form-data-3.1.0.tgz", + "integrity": "sha512-NdeohLMdrb+pHxMQ/Geuzdp0eqPbea+Ieo8M8Jx2lGC6TBHsgHzYcBvr0LyPdPVycNRDEpWpiDdCOdCryo3f9A==", + "license": "MIT", + "dependencies": { + "web-encoding": "1.1.5" + } + }, + "node_modules/@remix-run/web-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@remix-run/web-stream/-/web-stream-1.1.0.tgz", + "integrity": "sha512-KRJtwrjRV5Bb+pM7zxcTJkhIqWWSy+MYsIxHK+0m5atcznsf15YwUBWHWulZerV2+vvHH1Lp1DD7pw6qKW8SgA==", + "license": "MIT", + "dependencies": { + "web-streams-polyfill": "^3.1.1" + } + }, + "node_modules/@segment/loosely-validate-event": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz", + "integrity": "sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw==", + "dependencies": { + "component-type": "^1.2.1", + "join-component": "^1.1.0" + } + }, + "node_modules/@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "license": "MIT" + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", + "license": "MIT" + }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@types/gensync": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/gensync/-/gensync-1.0.4.tgz", + "integrity": "sha512-C3YYeRQWp2fmq9OryX+FoDy8nXS6scQ7dPptD8LnFDAUNcKWJjXQKDNJD3HVm+kOUsXhTOkpi69vI4EuAr95bA==", + "license": "MIT" + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/hammerjs": { + "version": "2.0.46", + "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.46.tgz", + "integrity": "sha512-ynRvcq6wvqexJ9brDMS4BnBLzmr0e14d6ZJTEShTBWKymQiHwlAyGu0ZPEFI2Fh1U53F7tN9ufClWM5KvqkKOw==", + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", + "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/jsdom": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", + "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.13.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.1.tgz", + "integrity": "sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.14", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", + "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.18", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.18.tgz", + "integrity": "sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-test-renderer": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/@types/react-test-renderer/-/react-test-renderer-18.3.1.tgz", + "integrity": "sha512-vAhnk0tG2eGa37lkU9+s5SoroCsRI08xnsWFiAXOuPH2jqzMbcXvKExXViPi1P5fIklDeCvXqyrdmipFaSkZrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "^18" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "license": "MIT" + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "license": "MIT" + }, + "node_modules/@urql/core": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@urql/core/-/core-5.1.0.tgz", + "integrity": "sha512-yC3sw8yqjbX45GbXxfiBY8GLYCiyW/hLBbQF9l3TJrv4ro00Y0ChkKaD9I2KntRxAVm9IYBqh0awX8fwWAe/Yw==", + "license": "MIT", + "dependencies": { + "@0no-co/graphql.web": "^1.0.5", + "wonka": "^6.3.2" + } + }, + "node_modules/@urql/exchange-retry": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@urql/exchange-retry/-/exchange-retry-1.3.0.tgz", + "integrity": "sha512-FLt+d81gP4oiHah4hWFDApimc+/xABWMU1AMYsZ1PVB0L0YPtrMCjbOp9WMM7hBzy4gbTDrG24sio0dCfSh/HQ==", + "license": "MIT", + "dependencies": { + "@urql/core": "^5.0.0", + "wonka": "^6.3.2" + }, + "peerDependencies": { + "@urql/core": "^5.0.0" + } + }, + "node_modules/@web3-storage/multipart-parser": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@web3-storage/multipart-parser/-/multipart-parser-1.0.0.tgz", + "integrity": "sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw==", + "license": "(Apache-2.0 AND MIT)" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xmldom/xmldom": { + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.13.tgz", + "integrity": "sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==", + "deprecated": "this version is no longer supported, please update to at least 0.8.*", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "license": "Apache-2.0", + "peer": true + }, + "node_modules/@zxing/text-encoding": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz", + "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==", + "license": "(Unlicense OR Apache-2.0)", + "optional": true + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", + "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" + } + }, + "node_modules/acorn-loose": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/acorn-loose/-/acorn-loose-8.4.0.tgz", + "integrity": "sha512-M0EUka6rb+QC4l9Z3T0nJEzNOO7JcoJlYMrBlyBCiFSXRyxjLKayd4TbQs2FDRWQU1h9FR7QVNHt+PEaoNL5rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/anser": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", + "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==", + "license": "MIT" + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-fragments": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", + "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "colorette": "^1.0.7", + "slice-ansi": "^2.0.0", + "strip-ansi": "^5.0.0" + } + }, + "node_modules/ansi-fragments/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-fragments/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/appdirsjs": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/appdirsjs/-/appdirsjs-1.2.7.tgz", + "integrity": "sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/application-config-path": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/application-config-path/-/application-config-path-0.1.1.tgz", + "integrity": "sha512-zy9cHePtMP0YhwG+CfHm0bgwdnga2X3gZexpdCwEj//dpb+TKajtiC8REEUJUSq6Ab4f9cgNy2l8ObXzCXFkEw==", + "license": "MIT" + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "license": "MIT" + }, + "node_modules/ast-types": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz", + "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/babel-core": { + "version": "7.0.0-bridge.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", + "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", + "license": "MIT", + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "license": "MIT", + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.12", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz", + "integrity": "sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.3", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz", + "integrity": "sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.3" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-react-native-web": { + "version": "0.19.13", + "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.19.13.tgz", + "integrity": "sha512-4hHoto6xaN23LCyZgL9LJZc3olmAxd7b6jDzlZnKXAh4rRAbZRKNBJoOOdp46OBqgy+K0t0guTj5/mhA8inymQ==", + "license": "MIT" + }, + "node_modules/babel-plugin-syntax-hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.25.1.tgz", + "integrity": "sha512-IVNpGzboFLfXZUAwkLFcI/bnqVbwky0jP3eBno4HKtqvQJAHBLdgxiG6lQ4to0+Q/YCN3PO0od5NZwIKyY4REQ==", + "license": "MIT", + "dependencies": { + "hermes-parser": "0.25.1" + } + }, + "node_modules/babel-plugin-syntax-hermes-parser/node_modules/hermes-estree": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", + "license": "MIT" + }, + "node_modules/babel-plugin-syntax-hermes-parser/node_modules/hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", + "license": "MIT", + "dependencies": { + "hermes-estree": "0.25.1" + } + }, + "node_modules/babel-plugin-transform-flow-enums": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz", + "integrity": "sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==", + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-flow": "^7.12.1" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", + "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-expo": { + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-12.0.7.tgz", + "integrity": "sha512-XT2ZOnonTU343eRnd/UBuqYLxmaB47g+RtLMANMsj/j9XL2kkTk3a6yepLbV4BrACaTf2ddiBZDi+BQ0lgjVaw==", + "license": "MIT", + "dependencies": { + "@babel/plugin-proposal-decorators": "^7.12.9", + "@babel/plugin-transform-export-namespace-from": "^7.22.11", + "@babel/plugin-transform-object-rest-spread": "^7.12.13", + "@babel/plugin-transform-parameters": "^7.22.15", + "@babel/preset-react": "^7.22.15", + "@babel/preset-typescript": "^7.23.0", + "@react-native/babel-preset": "0.76.7", + "babel-plugin-react-native-web": "~0.19.13", + "react-refresh": "^0.14.2" + }, + "peerDependencies": { + "babel-plugin-react-compiler": "^19.0.0-beta-9ee70a1-20241017", + "react-compiler-runtime": "^19.0.0-beta-8a03594-20241020" + }, + "peerDependenciesMeta": { + "babel-plugin-react-compiler": { + "optional": true + }, + "react-compiler-runtime": { + "optional": true + } + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/better-opn": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", + "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", + "license": "MIT", + "dependencies": { + "open": "^8.0.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/better-opn/node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/big-integer": { + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "license": "Unlicense", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bplist-creator": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.7.tgz", + "integrity": "sha512-xp/tcaV3T5PCiaY04mXga7o/TE+t95gqeLmADeBI1CvZtdWTbgBt3uLpvh4UWtenKeBhCV6oVxGk38yZr2uYEA==", + "license": "MIT", + "dependencies": { + "stream-buffers": "~2.2.0" + } + }, + "node_modules/bplist-parser": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.2.tgz", + "integrity": "sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==", + "license": "MIT", + "dependencies": { + "big-integer": "1.6.x" + }, + "engines": { + "node": ">= 5.10.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "license": "MIT", + "dependencies": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "node_modules/buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "license": "MIT" + }, + "node_modules/buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", + "license": "MIT" + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "18.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", + "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", + "license": "MIT", + "dependencies": { + "callsites": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/caller-callsite/node_modules/callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", + "license": "MIT", + "dependencies": { + "caller-callsite": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001699", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001699.tgz", + "integrity": "sha512-b+uH5BakXZ9Do9iK+CkDmctUSEqZl+SP056vc5usa0PL+ev5OHw003rZXcnjNDv3L8P5j6rwT6C0BPKSikW08w==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-launcher": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", + "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", + "license": "Apache-2.0", + "dependencies": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0" + }, + "bin": { + "print-chrome-path": "bin/print-chrome-path.js" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/chromium-edge-launcher": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/chromium-edge-launcher/-/chromium-edge-launcher-0.2.0.tgz", + "integrity": "sha512-JfJjUnq25y9yg4FABRRVPmBGWPZZi+AQXT4mxupb67766/0UlhG8PAZCz6xzEMXTbW3CsSoE8PcCWA49n35mKg==", + "license": "Apache-2.0", + "dependencies": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0", + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "node_modules/chromium-edge-launcher/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "license": "MIT", + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", + "license": "MIT" + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "license": "MIT" + }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "license": "MIT" + }, + "node_modules/component-type": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/component-type/-/component-type-1.2.2.tgz", + "integrity": "sha512-99VUHREHiN5cLeHm3YLq312p6v+HUEcwtLCAtelvUDI6+SH5g5Cr85oNR2S1o6ywzL0ykMbuwLzM2ANocjEOIA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.0.tgz", + "integrity": "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.0.2", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/compression/node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/core-js-compat": { + "version": "3.40.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.40.0.tgz", + "integrity": "sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "license": "MIT", + "dependencies": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cosmiconfig/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/cross-fetch": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", + "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.7.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/css-in-js-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-3.1.0.tgz", + "integrity": "sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==", + "license": "MIT", + "dependencies": { + "hyphenate-style-name": "^1.0.3" + } + }, + "node_modules/cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "dev": true, + "license": "MIT" + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true, + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/data-uri-to-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", + "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz", + "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==", + "dev": true, + "license": "MIT" + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "license": "BSD-2-Clause", + "dependencies": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/del": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", + "license": "MIT", + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "license": "Apache-2.0", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "deprecated": "Use your platform's native DOMException instead", + "dev": true, + "license": "MIT", + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dotenv": { + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dotenv-expand": { + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", + "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", + "license": "BSD-2-Clause", + "dependencies": { + "dotenv": "^16.4.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.97", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.97.tgz", + "integrity": "sha512-HKLtaH02augM7ZOdYRuO19rWDeY+QSJ1VxnXFa/XDFLf07HvM90pALIJFgrO+UVaajI3+aJMMpojoUTLZyQ7JQ==", + "license": "ISC" + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.18.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", + "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-editor": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/env-editor/-/env-editor-0.4.2.tgz", + "integrity": "sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/envinfo": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", + "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", + "dev": true, + "license": "MIT", + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eol": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/eol/-/eol-0.9.1.tgz", + "integrity": "sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==", + "license": "MIT" + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "license": "MIT", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/errorhandler": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", + "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.7", + "escape-html": "~1.0.3" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", + "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/exec-async": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/exec-async/-/exec-async-2.2.0.tgz", + "integrity": "sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw==", + "license": "MIT" + }, + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/execa/node_modules/cross-spawn": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/execa/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/execa/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/execa/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/execa/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/expo": { + "version": "52.0.33", + "resolved": "https://registry.npmjs.org/expo/-/expo-52.0.33.tgz", + "integrity": "sha512-8lgeJtqw5N1m7910n/pc8cWBT8bzwaNue1mWXElwdhpKSEpPsCYG1sNQ8eqRnC37Y8aj6i6TrNFmSP++7zUS3Q==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.20.0", + "@expo/cli": "0.22.15", + "@expo/config": "~10.0.9", + "@expo/config-plugins": "~9.0.15", + "@expo/fingerprint": "0.11.9", + "@expo/metro-config": "0.19.9", + "@expo/vector-icons": "^14.0.0", + "babel-preset-expo": "~12.0.7", + "expo-asset": "~11.0.3", + "expo-constants": "~17.0.5", + "expo-file-system": "~18.0.10", + "expo-font": "~13.0.3", + "expo-keep-awake": "~14.0.2", + "expo-modules-autolinking": "2.0.7", + "expo-modules-core": "2.2.1", + "fbemitter": "^3.0.0", + "web-streams-polyfill": "^3.3.2", + "whatwg-url-without-unicode": "8.0.0-3" + }, + "bin": { + "expo": "bin/cli" + }, + "peerDependencies": { + "@expo/dom-webview": "*", + "@expo/metro-runtime": "*", + "react": "*", + "react-native": "*", + "react-native-webview": "*" + }, + "peerDependenciesMeta": { + "@expo/dom-webview": { + "optional": true + }, + "@expo/metro-runtime": { + "optional": true + }, + "react-native-webview": { + "optional": true + } + } + }, + "node_modules/expo-asset": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-11.0.3.tgz", + "integrity": "sha512-vgJnC82IooAVMy5PxbdFIMNJhW4hKAUyxc5VIiAPPf10vFYw6CqHm+hrehu4ST1I4bvg5PV4uKdPxliebcbgLg==", + "license": "MIT", + "dependencies": { + "@expo/image-utils": "^0.6.4", + "expo-constants": "~17.0.5", + "invariant": "^2.2.4", + "md5-file": "^3.2.3" + }, + "peerDependencies": { + "expo": "*", + "react": "*", + "react-native": "*" + } + }, + "node_modules/expo-blur": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/expo-blur/-/expo-blur-14.0.3.tgz", + "integrity": "sha512-BL3xnqBJbYm3Hg9t/HjNjdeY7N/q8eK5tsLYxswWG1yElISWZmMvrXYekl7XaVCPfyFyz8vQeaxd7q74ZY3Wrw==", + "license": "MIT", + "peerDependencies": { + "expo": "*", + "react": "*", + "react-native": "*" + } + }, + "node_modules/expo-constants": { + "version": "17.0.5", + "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-17.0.5.tgz", + "integrity": "sha512-6SHXh32jCB+vrp2TRDNkoGoM421eOBPZIXX9ixI0hKKz71tIjD+LMr/P+rGUd/ks312MP3WK3j5vcYYPkCD8tQ==", + "license": "MIT", + "dependencies": { + "@expo/config": "~10.0.8", + "@expo/env": "~0.4.1" + }, + "peerDependencies": { + "expo": "*", + "react-native": "*" + } + }, + "node_modules/expo-dev-client": { + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/expo-dev-client/-/expo-dev-client-5.0.12.tgz", + "integrity": "sha512-F8Pz3ppxq0vhwVK2XgzmDUfxW1MEFpUdTLl+Pjwp9FDB+Br1wqyIz1yKshD7Hv1i/SR2BwjlJcriOPWt9NREuA==", + "license": "MIT", + "dependencies": { + "expo-dev-launcher": "5.0.29", + "expo-dev-menu": "6.0.19", + "expo-dev-menu-interface": "1.9.3", + "expo-manifests": "~0.15.5", + "expo-updates-interface": "~1.0.0" + }, + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-dev-launcher": { + "version": "5.0.29", + "resolved": "https://registry.npmjs.org/expo-dev-launcher/-/expo-dev-launcher-5.0.29.tgz", + "integrity": "sha512-wb48vIXUwuqD0Z2xvdkNt+o7OLT7FtMoSwYVkx28linG+9Sn2Zgjbs4SVnJYkpRfZZh9unOIRqB9EsJhM12Lzg==", + "license": "MIT", + "dependencies": { + "ajv": "8.11.0", + "expo-dev-menu": "6.0.19", + "expo-manifests": "~0.15.5", + "resolve-from": "^5.0.0" + }, + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-dev-launcher/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/expo-dev-menu": { + "version": "6.0.19", + "resolved": "https://registry.npmjs.org/expo-dev-menu/-/expo-dev-menu-6.0.19.tgz", + "integrity": "sha512-CzjsiUne/Zwr7/AqI5JwcocV2NKQ3lZ3GteVc7ksORU7UZr0a0uTgcmA4ogqbBnFebBRVntxPR6zKXYlsvUGow==", + "license": "MIT", + "dependencies": { + "expo-dev-menu-interface": "1.9.3" + }, + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-dev-menu-interface": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/expo-dev-menu-interface/-/expo-dev-menu-interface-1.9.3.tgz", + "integrity": "sha512-KY/dWTBE1l47i9V366JN5rC6YIdOc9hz8yAmZzkl5DrPia5l3M2WIjtnpHC9zUkNjiSiG2urYoOAq4H/uLdmyg==", + "license": "MIT", + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-file-system": { + "version": "18.0.10", + "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-18.0.10.tgz", + "integrity": "sha512-+GnxkI+J9tOzUQMx+uIOLBEBsO2meyoYHxd87m9oT9M//BpepYqI1AvYBH8YM4dgr9HaeaeLr7z5XFVqfL8tWg==", + "license": "MIT", + "dependencies": { + "web-streams-polyfill": "^3.3.2" + }, + "peerDependencies": { + "expo": "*", + "react-native": "*" + } + }, + "node_modules/expo-font": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-13.0.3.tgz", + "integrity": "sha512-9IdYz+A+b3KvuCYP7DUUXF4VMZjPU+IsvAnLSVJ2TfP6zUD2JjZFx3jeo/cxWRkYk/aLj5+53Te7elTAScNl4Q==", + "license": "MIT", + "dependencies": { + "fontfaceobserver": "^2.1.0" + }, + "peerDependencies": { + "expo": "*", + "react": "*" + } + }, + "node_modules/expo-haptics": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/expo-haptics/-/expo-haptics-14.0.1.tgz", + "integrity": "sha512-V81FZ7xRUfqM6uSI6FA1KnZ+QpEKnISqafob/xEfcx1ymwhm4V3snuLWWFjmAz+XaZQTqlYa8z3QbqEXz7G63w==", + "license": "MIT", + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-json-utils": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/expo-json-utils/-/expo-json-utils-0.14.0.tgz", + "integrity": "sha512-xjGfK9dL0B1wLnOqNkX0jM9p48Y0I5xEPzHude28LY67UmamUyAACkqhZGaPClyPNfdzczk7Ej6WaRMT3HfXvw==", + "license": "MIT" + }, + "node_modules/expo-keep-awake": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-14.0.2.tgz", + "integrity": "sha512-71XAMnoWjKZrN8J7Q3+u0l9Ytp4OfhNAYz8BCWF1/9aFUw09J3I7Z5DuI3MUsVMa/KWi+XhG+eDUFP8cVA19Uw==", + "license": "MIT", + "peerDependencies": { + "expo": "*", + "react": "*" + } + }, + "node_modules/expo-linking": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/expo-linking/-/expo-linking-7.0.5.tgz", + "integrity": "sha512-3KptlJtcYDPWohk0MfJU75MJFh2ybavbtcSd84zEPfw9s1q3hjimw3sXnH03ZxP54kiEWldvKmmnGcVffBDB1g==", + "license": "MIT", + "dependencies": { + "expo-constants": "~17.0.5", + "invariant": "^2.2.4" + }, + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/expo-manifests": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/expo-manifests/-/expo-manifests-0.15.5.tgz", + "integrity": "sha512-3X3eQomnTa4G0Y9GoJeyewHPTscuzWMrTB3x4CknqOyXpGOJjOuCKjhzvccHxXZAt0XswqBI94iTbqIofo9Uqw==", + "license": "MIT", + "dependencies": { + "@expo/config": "~10.0.8", + "expo-json-utils": "~0.14.0" + }, + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-modules-autolinking": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-2.0.7.tgz", + "integrity": "sha512-rkGc6a/90AC3q8wSy4V+iIpq6Fd0KXmQICKrvfmSWwrMgJmLfwP4QTrvLYPYOOMjFwNJcTaohcH8vzW/wYKrMg==", + "license": "MIT", + "dependencies": { + "@expo/spawn-async": "^1.7.2", + "chalk": "^4.1.0", + "commander": "^7.2.0", + "fast-glob": "^3.2.5", + "find-up": "^5.0.0", + "fs-extra": "^9.1.0", + "require-from-string": "^2.0.2", + "resolve-from": "^5.0.0" + }, + "bin": { + "expo-modules-autolinking": "bin/expo-modules-autolinking.js" + } + }, + "node_modules/expo-modules-autolinking/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/expo-modules-autolinking/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/expo-modules-autolinking/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/expo-modules-core": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-2.2.1.tgz", + "integrity": "sha512-pxQpfgevHiy5EVRDE0w3mrVu0UTNHELr4GDXEQWAE1g4JVS5ZGNq/Gu2VGgFbBP18KGPNB+gEy8UFI48ADbiuw==", + "license": "MIT", + "dependencies": { + "invariant": "^2.2.4" + } + }, + "node_modules/expo-router": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/expo-router/-/expo-router-4.0.17.tgz", + "integrity": "sha512-8ybo6bVwdG1S9hafh9BTOjX1hpCgomdUvs6hKHMM01koo8mQ7zocH/+zxQeaMVDxGhboz2dO5GiDchWJ0OheRA==", + "license": "MIT", + "dependencies": { + "@expo/metro-runtime": "4.0.1", + "@expo/server": "^0.5.1", + "@radix-ui/react-slot": "1.0.1", + "@react-navigation/bottom-tabs": "^7.2.0", + "@react-navigation/native": "^7.0.14", + "@react-navigation/native-stack": "^7.2.0", + "client-only": "^0.0.1", + "react-helmet-async": "^1.3.0", + "react-native-helmet-async": "2.0.4", + "react-native-is-edge-to-edge": "^1.1.6", + "schema-utils": "^4.0.1", + "semver": "~7.6.3", + "server-only": "^0.0.1" + }, + "peerDependencies": { + "@react-navigation/drawer": "^7.1.1", + "expo": "*", + "expo-constants": "*", + "expo-linking": "*", + "react-native-reanimated": "*", + "react-native-safe-area-context": "*", + "react-native-screens": "*" + }, + "peerDependenciesMeta": { + "@react-navigation/drawer": { + "optional": true + }, + "@testing-library/jest-native": { + "optional": true + }, + "react-native-reanimated": { + "optional": true + } + } + }, + "node_modules/expo-router/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/expo-splash-screen": { + "version": "0.29.21", + "resolved": "https://registry.npmjs.org/expo-splash-screen/-/expo-splash-screen-0.29.21.tgz", + "integrity": "sha512-7uZ+qvIuNcvrvrLIklW+Wbt6llPuCj6LKYjrMu+GOX8s///laldS4TGiMAbqcE7fmfCzQ8ffgfY7xhxRourhcA==", + "license": "MIT", + "dependencies": { + "@expo/prebuild-config": "^8.0.25" + }, + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-status-bar": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/expo-status-bar/-/expo-status-bar-2.0.1.tgz", + "integrity": "sha512-AkIPX7jWHRPp83UBZ1iXtVvyr0g+DgBVvIXTtlmPtmUsm8Vq9Bb5IGj86PW8osuFlgoTVAg7HI/+Ok7yEYwiRg==", + "license": "MIT", + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/expo-symbols": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/expo-symbols/-/expo-symbols-0.2.2.tgz", + "integrity": "sha512-yTk1MxhA61YflYIMortImD57MCneKEoSvU1acqQ4oKigV5+cNw1XKB7GhcKe3d8Ny3ikC/b1Ia+HQjR0Hmr4JA==", + "license": "MIT", + "dependencies": { + "sf-symbols-typescript": "^2.0.0" + }, + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-system-ui": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/expo-system-ui/-/expo-system-ui-4.0.8.tgz", + "integrity": "sha512-0AmWXJ3ObwMYxi2YGagwRQikydoUZJXLeK4A0FY1PsZpnlorSQ4IAfEVS38JmA54tf5CpP4TjBp5ZVEjRyv1rw==", + "license": "MIT", + "dependencies": { + "@react-native/normalize-colors": "0.76.7", + "debug": "^4.3.2" + }, + "peerDependencies": { + "expo": "*", + "react-native": "*", + "react-native-web": "*" + }, + "peerDependenciesMeta": { + "react-native-web": { + "optional": true + } + } + }, + "node_modules/expo-updates-interface": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/expo-updates-interface/-/expo-updates-interface-1.0.0.tgz", + "integrity": "sha512-93oWtvULJOj+Pp+N/lpTcFfuREX1wNeHtp7Lwn8EbzYYmdn37MvZU3TPW2tYYCZuhzmKEXnUblYcruYoDu7IrQ==", + "license": "MIT", + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-web-browser": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/expo-web-browser/-/expo-web-browser-14.0.2.tgz", + "integrity": "sha512-Hncv2yojhTpHbP6SGWARBFdl7P6wBHc1O8IKaNsH0a/IEakq887o1eRhLxZ5IwztPQyRDhpqHdgJ+BjWolOnwA==", + "license": "MIT", + "peerDependencies": { + "expo": "*", + "react-native": "*" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", + "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==", + "license": "Apache-2.0" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT" + }, + "node_modules/fast-loops": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/fast-loops/-/fast-loops-1.1.4.tgz", + "integrity": "sha512-8dbd3XWoKCTms18ize6JmQF1SFnnfj5s0B7rRry22EofgMu7B6LKHVh+XfFqFGsqnbH54xgeO83PzpKI+ODhlg==", + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fast-xml-parser": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.1.tgz", + "integrity": "sha512-y655CeyUQ+jj7KBbYMc4FG01V8ZQqjN+gDYGJ50RtfsUB8iG9AmwmwoAgeKLJdmueKKMrH1RJ7yXHTSoczdv5w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + ], + "license": "MIT", + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/fastq": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.0.tgz", + "integrity": "sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fbemitter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", + "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", + "license": "BSD-3-Clause", + "dependencies": { + "fbjs": "^3.0.0" + } + }, + "node_modules/fbjs": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.5.tgz", + "integrity": "sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==", + "license": "MIT", + "dependencies": { + "cross-fetch": "^3.1.5", + "fbjs-css-vars": "^1.0.0", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^1.0.35" + } + }, + "node_modules/fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==", + "license": "MIT" + }, + "node_modules/fetch-retry": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-4.1.1.tgz", + "integrity": "sha512-e6eB7zN6UBSwGVwrbWVH+gdLnkW9WwHhmq2YDK1Sh30pzx1onRVGBvogTlUeWxwTa+L86NYdo4hFkh7O8ZjSnA==", + "license": "MIT" + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "license": "MIT", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "license": "MIT", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-cache-dir/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/find-cache-dir/node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "license": "MIT", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flow-enums-runtime": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/flow-enums-runtime/-/flow-enums-runtime-0.0.6.tgz", + "integrity": "sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==", + "license": "MIT" + }, + "node_modules/flow-parser": { + "version": "0.260.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.260.0.tgz", + "integrity": "sha512-GvVx+yGdVK4U6Q5AcLCCqVjCyJTeYClOrMYlxhSG7fPNcsiYqtIOIXA+/SaTsvj1kB/xyiwZ5+iOGQXbwaE6Ew==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/fontfaceobserver": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.3.0.tgz", + "integrity": "sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg==", + "license": "BSD-2-Clause" + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.2.tgz", + "integrity": "sha512-sJe+TQb2vIaIyO783qN6BlMYWMw3WBOHA1Ay2qxsnjuafEOQFJ2JakedOQirT6D5XPRxDvS7AHYyem9fTpb4LQ==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/freeport-async": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/freeport-async/-/freeport-async-2.0.0.tgz", + "integrity": "sha512-K7od3Uw45AJg00XUmy15+Hae2hOcgKcmN3/EF6Y7i01O0gaqiRx8sUSpsb9+BRNL8RPBrhzPsVfy8q9ADlJuWQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", + "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "function-bind": "^1.1.2", + "get-proto": "^1.0.0", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/getenv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/getenv/-/getenv-1.0.0.tgz", + "integrity": "sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hermes-estree": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.23.1.tgz", + "integrity": "sha512-eT5MU3f5aVhTqsfIReZ6n41X5sYn4IdQL0nvz6yO+MMlPxw49aSARHLg/MSehQftyjnrE8X6bYregzSumqc6cg==", + "license": "MIT" + }, + "node_modules/hermes-parser": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.23.1.tgz", + "integrity": "sha512-oxl5h2DkFW83hT4DAUJorpah8ou4yvmweUzLJmmr6YV2cezduCdlil1AvU/a/xSsAFo4WUcNA4GoV5Bvq6JffA==", + "license": "MIT", + "dependencies": { + "hermes-estree": "0.23.1" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/hyphenate-style-name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.1.0.tgz", + "integrity": "sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==", + "license": "BSD-3-Clause" + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/image-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.2.0.tgz", + "integrity": "sha512-4S8fwbO6w3GeCVN6OPtA9I5IGKkcDMPcKndtUlpJuCwu7JLjtj7JZpwqLuyY2nrmQT3AWsCJLSKPsc2mPBSl3w==", + "license": "MIT", + "dependencies": { + "queue": "6.0.2" + }, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=16.x" + } + }, + "node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", + "license": "MIT", + "dependencies": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "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.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/inline-style-prefixer": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-6.0.4.tgz", + "integrity": "sha512-FwXmZC2zbeeS7NzGjJ6pAiqRhXR0ugUShSNb6GApMl6da0/XGc4MOJsoWAywia52EEWbXNSy0pzkwz/+Y+swSg==", + "license": "MIT", + "dependencies": { + "css-in-js-utils": "^3.1.0", + "fast-loops": "^1.1.3" + } + }, + "node_modules/internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "license": "MIT", + "dependencies": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arguments": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "license": "MIT" + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/jest-changed-files/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-changed-files/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-changed-files/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-changed-files/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-changed-files/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-changed-files/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", + "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/jsdom": "^20.0.0", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0", + "jsdom": "^20.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-expo": { + "version": "52.0.3", + "resolved": "https://registry.npmjs.org/jest-expo/-/jest-expo-52.0.3.tgz", + "integrity": "sha512-z2gptekrQ0FIichvRhrES31X9twtCCTzu00sWnPyFaQuWQdoyZiCj2WFPqVrpgIgNYLFIEGhc0VP9rUT9johJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@expo/config": "~10.0.8", + "@expo/json-file": "^9.0.1", + "@jest/create-cache-key-function": "^29.2.1", + "@jest/globals": "^29.2.1", + "babel-jest": "^29.2.1", + "fbemitter": "^3.0.0", + "find-up": "^5.0.0", + "jest-environment-jsdom": "^29.2.1", + "jest-snapshot": "^29.2.1", + "jest-watch-select-projects": "^2.0.0", + "jest-watch-typeahead": "2.2.1", + "json5": "^2.2.3", + "lodash": "^4.17.19", + "react-server-dom-webpack": "19.0.0-rc-6230622a1a-20240610", + "react-test-renderer": "18.3.1", + "server-only": "^0.0.1", + "stacktrace-js": "^2.0.2" + }, + "bin": { + "jest": "bin/jest.js" + }, + "peerDependencies": { + "expo": "*", + "react-native": "*" + } + }, + "node_modules/jest-expo/node_modules/react": { + "version": "19.0.0-rc-6230622a1a-20240610", + "resolved": "https://registry.npmjs.org/react/-/react-19.0.0-rc-6230622a1a-20240610.tgz", + "integrity": "sha512-SMgWGY//7nO7F3HMuBfmC15Cr4vTe2tlpSCATfnz/wymSftDOKUqc+0smjRhcUeCFCc1zhOAWJ+N//U5CrmOzQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-expo/node_modules/react-dom": { + "version": "19.0.0-rc-6230622a1a-20240610", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0-rc-6230622a1a-20240610.tgz", + "integrity": "sha512-56G4Pum5E7FeGL1rwHX5IxidSJxQnXP4yORRo0pVeOJuu5DQJvNKpUwmJoftMP/ez0AiglYTY77L2Gs8iyt1Hg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "scheduler": "0.25.0-rc-6230622a1a-20240610" + }, + "peerDependencies": { + "react": "19.0.0-rc-6230622a1a-20240610" + } + }, + "node_modules/jest-expo/node_modules/react-server-dom-webpack": { + "version": "19.0.0-rc-6230622a1a-20240610", + "resolved": "https://registry.npmjs.org/react-server-dom-webpack/-/react-server-dom-webpack-19.0.0-rc-6230622a1a-20240610.tgz", + "integrity": "sha512-nr+IsOVD07QdeCr4BLvR5TALfLaZLi9AIaoa6vXymBc051iDPWedJujYYrjRJy5+9jp9oCx3G8Tt/Bs//TckJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn-loose": "^8.3.0", + "neo-async": "^2.6.1" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "react": "19.0.0-rc-6230622a1a-20240610", + "react-dom": "19.0.0-rc-6230622a1a-20240610", + "webpack": "^5.59.0" + } + }, + "node_modules/jest-expo/node_modules/scheduler": { + "version": "0.25.0-rc-6230622a1a-20240610", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0-rc-6230622a1a-20240610.tgz", + "integrity": "sha512-GTIQdJXthps5mgkIFo7yAq03M0QQYTfN8z+GrnMC/SCKFSuyFP5tk2BMaaWUsVy4u4r+dTLdiXH8JEivVls0Bw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-runner/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-select-projects": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jest-watch-select-projects/-/jest-watch-select-projects-2.0.0.tgz", + "integrity": "sha512-j00nW4dXc2NiCW6znXgFLF9g8PJ0zP25cpQ1xRro/HU2GBfZQFZD0SoXnAlaoKkIY4MlfTMkKGbNXFpvCdjl1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.3.0", + "chalk": "^3.0.0", + "prompts": "^2.2.1" + } + }, + "node_modules/jest-watch-select-projects/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-2.2.1.tgz", + "integrity": "sha512-jYpYmUnTzysmVnwq49TAxlmtOAwp8QIqvZyoofQFn8fiWhEDZj33ZXzg3JA4nGnzWFm1hbWf3ADpteUokvXgFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^6.0.0", + "chalk": "^4.0.0", + "jest-regex-util": "^29.0.0", + "jest-watcher": "^29.0.0", + "slash": "^5.0.0", + "string-length": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "jest": "^27.0.0 || ^28.0.0 || ^29.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/ansi-escapes": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", + "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/char-regex": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.2.tgz", + "integrity": "sha512-cbGOjAptfM2LVmWhwRFHEKTPkLwNddVmuqYZQt895yXwAsWsXObCG+YN4DGQ/JBtT4GP1a1lPPdio2z413LmTg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/jest-watch-typeahead/node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/string-length": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", + "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "char-regex": "^2.0.0", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jimp-compact": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/jimp-compact/-/jimp-compact-0.16.1.tgz", + "integrity": "sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==", + "license": "MIT" + }, + "node_modules/joi": { + "version": "17.13.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", + "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/join-component": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/join-component/-/join-component-1.1.0.tgz", + "integrity": "sha512-bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ==", + "license": "MIT" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsc-android": { + "version": "250231.0.0", + "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-250231.0.0.tgz", + "integrity": "sha512-rS46PvsjYmdmuz1OAWXY/1kCYG7pnf1TBqeTiOJr1iDz7s5DLxxC9n/ZMknLDxzYzNVfI7R95MH10emSSG1Wuw==", + "license": "BSD-2-Clause" + }, + "node_modules/jsc-safe-url": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/jsc-safe-url/-/jsc-safe-url-0.2.4.tgz", + "integrity": "sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==", + "license": "0BSD" + }, + "node_modules/jscodeshift": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.14.0.tgz", + "integrity": "sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.13.16", + "@babel/parser": "^7.13.16", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", + "@babel/plugin-proposal-optional-chaining": "^7.13.12", + "@babel/plugin-transform-modules-commonjs": "^7.13.8", + "@babel/preset-flow": "^7.13.13", + "@babel/preset-typescript": "^7.13.0", + "@babel/register": "^7.13.16", + "babel-core": "^7.0.0-bridge.0", + "chalk": "^4.1.2", + "flow-parser": "0.*", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.4", + "neo-async": "^2.5.0", + "node-dir": "^0.1.17", + "recast": "^0.21.0", + "temp": "^0.8.4", + "write-file-atomic": "^2.3.0" + }, + "bin": { + "jscodeshift": "bin/jscodeshift.js" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" + } + }, + "node_modules/jsdom": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", + "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.6", + "acorn": "^8.8.1", + "acorn-globals": "^7.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.2", + "decimal.js": "^10.4.2", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0", + "ws": "^8.11.0", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/form-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/lighthouse-logger": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz", + "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==", + "license": "Apache-2.0", + "dependencies": { + "debug": "^2.6.9", + "marky": "^1.2.2" + } + }, + "node_modules/lighthouse-logger/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/lighthouse-logger/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/lightningcss": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.27.0.tgz", + "integrity": "sha512-8f7aNmS1+etYSLHht0fQApPc2kNO8qGRutifN5rVIc6Xo6ABsEbqOr758UwI7ALVbTt4x1fllKt0PYgzD9S3yQ==", + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^1.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.27.0", + "lightningcss-darwin-x64": "1.27.0", + "lightningcss-freebsd-x64": "1.27.0", + "lightningcss-linux-arm-gnueabihf": "1.27.0", + "lightningcss-linux-arm64-gnu": "1.27.0", + "lightningcss-linux-arm64-musl": "1.27.0", + "lightningcss-linux-x64-gnu": "1.27.0", + "lightningcss-linux-x64-musl": "1.27.0", + "lightningcss-win32-arm64-msvc": "1.27.0", + "lightningcss-win32-x64-msvc": "1.27.0" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.27.0.tgz", + "integrity": "sha512-Gl/lqIXY+d+ySmMbgDf0pgaWSqrWYxVHoc88q+Vhf2YNzZ8DwoRzGt5NZDVqqIW5ScpSnmmjcgXP87Dn2ylSSQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.27.0.tgz", + "integrity": "sha512-0+mZa54IlcNAoQS9E0+niovhyjjQWEMrwW0p2sSdLRhLDc8LMQ/b67z7+B5q4VmjYCMSfnFi3djAAQFIDuj/Tg==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.27.0.tgz", + "integrity": "sha512-n1sEf85fePoU2aDN2PzYjoI8gbBqnmLGEhKq7q0DKLj0UTVmOTwDC7PtLcy/zFxzASTSBlVQYJUhwIStQMIpRA==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.27.0.tgz", + "integrity": "sha512-MUMRmtdRkOkd5z3h986HOuNBD1c2lq2BSQA1Jg88d9I7bmPGx08bwGcnB75dvr17CwxjxD6XPi3Qh8ArmKFqCA==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.27.0.tgz", + "integrity": "sha512-cPsxo1QEWq2sfKkSq2Bq5feQDHdUEwgtA9KaB27J5AX22+l4l0ptgjMZZtYtUnteBofjee+0oW1wQ1guv04a7A==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.27.0.tgz", + "integrity": "sha512-rCGBm2ax7kQ9pBSeITfCW9XSVF69VX+fm5DIpvDZQl4NnQoMQyRwhZQm9pd59m8leZ1IesRqWk2v/DntMo26lg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.27.0.tgz", + "integrity": "sha512-Dk/jovSI7qqhJDiUibvaikNKI2x6kWPN79AQiD/E/KeQWMjdGe9kw51RAgoWFDi0coP4jinaH14Nrt/J8z3U4A==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.27.0.tgz", + "integrity": "sha512-QKjTxXm8A9s6v9Tg3Fk0gscCQA1t/HMoF7Woy1u68wCk5kS4fR+q3vXa1p3++REW784cRAtkYKrPy6JKibrEZA==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.27.0.tgz", + "integrity": "sha512-/wXegPS1hnhkeG4OXQKEMQeJd48RDC3qdh+OA8pCuOPCyvnm/yEayrJdJVqzBsqpy1aJklRCVxscpFur80o6iQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.27.0.tgz", + "integrity": "sha512-/OJLj94Zm/waZShL8nB5jsNj3CfNATLCTyFxZyouilfTmSoLDX7VlVAmhPHoZWVFp4vdmoiEbPEYC8HID3m6yw==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "license": "MIT" + }, + "node_modules/lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==", + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "license": "MIT", + "dependencies": { + "chalk": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/log-symbols/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/logkitty": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/logkitty/-/logkitty-0.7.1.tgz", + "integrity": "sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-fragments": "^0.2.1", + "dayjs": "^1.8.15", + "yargs": "^15.1.0" + }, + "bin": { + "logkitty": "bin/logkitty.js" + } + }, + "node_modules/logkitty/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/logkitty/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/logkitty/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/logkitty/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/logkitty/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/marky": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz", + "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==", + "license": "Apache-2.0" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "license": "BSD-3-Clause", + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "node_modules/md5-file": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-3.2.3.tgz", + "integrity": "sha512-3Tkp1piAHaworfcCgH0jKbTvj1jWWFgbvh2cXaNCgHwyTCBxxvD1Y04rmfpvdPm1P4oXMOpm6+2H7sr7v9v8Fw==", + "license": "MIT", + "dependencies": { + "buffer-alloc": "^1.1.0" + }, + "bin": { + "md5-file": "cli.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", + "license": "MIT" + }, + "node_modules/merge-options": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", + "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", + "license": "MIT", + "dependencies": { + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/metro": { + "version": "0.81.1", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.81.1.tgz", + "integrity": "sha512-fqRu4fg8ONW7VfqWFMGgKAcOuMzyoQah2azv9Y3VyFXAmG+AoTU6YIFWqAADESCGVWuWEIvxTJhMf3jxU6jwjA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/core": "^7.25.2", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.3", + "@babel/types": "^7.25.2", + "accepts": "^1.3.7", + "chalk": "^4.0.0", + "ci-info": "^2.0.0", + "connect": "^3.6.5", + "debug": "^2.2.0", + "error-stack-parser": "^2.0.6", + "flow-enums-runtime": "^0.0.6", + "graceful-fs": "^4.2.4", + "hermes-parser": "0.25.1", + "image-size": "^1.0.2", + "invariant": "^2.2.4", + "jest-worker": "^29.6.3", + "jsc-safe-url": "^0.2.2", + "lodash.throttle": "^4.1.1", + "metro-babel-transformer": "0.81.1", + "metro-cache": "0.81.1", + "metro-cache-key": "0.81.1", + "metro-config": "0.81.1", + "metro-core": "0.81.1", + "metro-file-map": "0.81.1", + "metro-resolver": "0.81.1", + "metro-runtime": "0.81.1", + "metro-source-map": "0.81.1", + "metro-symbolicate": "0.81.1", + "metro-transform-plugins": "0.81.1", + "metro-transform-worker": "0.81.1", + "mime-types": "^2.1.27", + "nullthrows": "^1.1.1", + "serialize-error": "^2.1.0", + "source-map": "^0.5.6", + "throat": "^5.0.0", + "ws": "^7.5.10", + "yargs": "^17.6.2" + }, + "bin": { + "metro": "src/cli.js" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-babel-transformer": { + "version": "0.81.1", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.81.1.tgz", + "integrity": "sha512-JECKDrQaUnDmj0x/Q/c8c5YwsatVx38Lu+BfCwX9fR8bWipAzkvJocBpq5rOAJRDXRgDcPv2VO4Q4nFYrpYNQg==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.25.2", + "flow-enums-runtime": "^0.0.6", + "hermes-parser": "0.25.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-babel-transformer/node_modules/hermes-estree": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", + "license": "MIT" + }, + "node_modules/metro-babel-transformer/node_modules/hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", + "license": "MIT", + "dependencies": { + "hermes-estree": "0.25.1" + } + }, + "node_modules/metro-cache": { + "version": "0.81.1", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.81.1.tgz", + "integrity": "sha512-Uqcmn6sZ+Y0VJHM88VrG5xCvSeU7RnuvmjPmSOpEcyJJBe02QkfHL05MX2ZyGDTyZdbKCzaX0IijrTe4hN3F0Q==", + "license": "MIT", + "dependencies": { + "exponential-backoff": "^3.1.1", + "flow-enums-runtime": "^0.0.6", + "metro-core": "0.81.1" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-cache-key": { + "version": "0.81.1", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.81.1.tgz", + "integrity": "sha512-5fDaHR1yTvpaQuwMAeEoZGsVyvjrkw9IFAS7WixSPvaNY5YfleqoJICPc6hbXFJjvwCCpwmIYFkjqzR/qJ6yqA==", + "license": "MIT", + "dependencies": { + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-config": { + "version": "0.81.1", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.81.1.tgz", + "integrity": "sha512-VAAJmxsKIZ+Fz5/z1LVgxa32gE6+2TvrDSSx45g85WoX4EtLmdBGP3DSlpQW3DqFUfNHJCGwMLGXpJnxifd08g==", + "license": "MIT", + "dependencies": { + "connect": "^3.6.5", + "cosmiconfig": "^5.0.5", + "flow-enums-runtime": "^0.0.6", + "jest-validate": "^29.6.3", + "metro": "0.81.1", + "metro-cache": "0.81.1", + "metro-core": "0.81.1", + "metro-runtime": "0.81.1" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-core": { + "version": "0.81.1", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.81.1.tgz", + "integrity": "sha512-4d2/+02IYqOwJs4dmM0dC8hIZqTzgnx2nzN4GTCaXb3Dhtmi/SJ3v6744zZRnithhN4lxf8TTJSHnQV75M7SSA==", + "license": "MIT", + "dependencies": { + "flow-enums-runtime": "^0.0.6", + "lodash.throttle": "^4.1.1", + "metro-resolver": "0.81.1" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-file-map": { + "version": "0.81.1", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.81.1.tgz", + "integrity": "sha512-aY72H2ujmRfFxcsbyh83JgqFF+uQ4HFN1VhV2FmcfQG4s1bGKf2Vbkk+vtZ1+EswcBwDZFbkpvAjN49oqwGzAA==", + "license": "MIT", + "dependencies": { + "debug": "^2.2.0", + "fb-watchman": "^2.0.0", + "flow-enums-runtime": "^0.0.6", + "graceful-fs": "^4.2.4", + "invariant": "^2.2.4", + "jest-worker": "^29.6.3", + "micromatch": "^4.0.4", + "nullthrows": "^1.1.1", + "walker": "^1.0.7" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-file-map/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/metro-file-map/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/metro-minify-terser": { + "version": "0.81.1", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.81.1.tgz", + "integrity": "sha512-p/Qz3NNh1nebSqMlxlUALAnESo6heQrnvgHtAuxufRPtKvghnVDq9hGGex8H7z7YYLsqe42PWdt4JxTA3mgkvg==", + "license": "MIT", + "dependencies": { + "flow-enums-runtime": "^0.0.6", + "terser": "^5.15.0" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-resolver": { + "version": "0.81.1", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.81.1.tgz", + "integrity": "sha512-E61t6fxRoYRkl6Zo3iUfCKW4DYfum/bLjcejXBMt1y3I7LFkK84TCR/Rs9OAwsMCY/7GOPB4+CREYZOtCC7CNA==", + "license": "MIT", + "dependencies": { + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-runtime": { + "version": "0.81.1", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.81.1.tgz", + "integrity": "sha512-pqu5j5d01rjF85V/K8SDDJ0NR3dRp6bE3z5bKVVb5O2Rx0nbR9KreUxYALQCRCcQHaYySqCg5fYbGKBHC295YQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.25.0", + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-source-map": { + "version": "0.81.1", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.81.1.tgz", + "integrity": "sha512-1i8ROpNNiga43F0ZixAXoFE/SS3RqcRDCCslpynb+ytym0VI7pkTH1woAN2HI9pczYtPrp3Nq0AjRpsuY35ieA==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.3", + "@babel/traverse--for-generate-function-map": "npm:@babel/traverse@^7.25.3", + "@babel/types": "^7.25.2", + "flow-enums-runtime": "^0.0.6", + "invariant": "^2.2.4", + "metro-symbolicate": "0.81.1", + "nullthrows": "^1.1.1", + "ob1": "0.81.1", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-source-map/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro-symbolicate": { + "version": "0.81.1", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.81.1.tgz", + "integrity": "sha512-Lgk0qjEigtFtsM7C0miXITbcV47E1ZYIfB+m/hCraihiwRWkNUQEPCWvqZmwXKSwVE5mXA0EzQtghAvQSjZDxw==", + "license": "MIT", + "dependencies": { + "flow-enums-runtime": "^0.0.6", + "invariant": "^2.2.4", + "metro-source-map": "0.81.1", + "nullthrows": "^1.1.1", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + }, + "bin": { + "metro-symbolicate": "src/index.js" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-symbolicate/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro-transform-plugins": { + "version": "0.81.1", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.81.1.tgz", + "integrity": "sha512-7L1lI44/CyjIoBaORhY9fVkoNe8hrzgxjSCQ/lQlcfrV31cZb7u0RGOQrKmUX7Bw4FpejrB70ArQ7Mse9mk7+Q==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.25.2", + "@babel/generator": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.3", + "flow-enums-runtime": "^0.0.6", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-transform-worker": { + "version": "0.81.1", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.81.1.tgz", + "integrity": "sha512-M+2hVT3rEy5K7PBmGDgQNq3Zx53TjScOcO/CieyLnCRFtBGWZiSJ2+bLAXXOKyKa/y3bI3i0owxtyxuPGDwbZg==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.25.2", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/types": "^7.25.2", + "flow-enums-runtime": "^0.0.6", + "metro": "0.81.1", + "metro-babel-transformer": "0.81.1", + "metro-cache": "0.81.1", + "metro-cache-key": "0.81.1", + "metro-minify-terser": "0.81.1", + "metro-source-map": "0.81.1", + "metro-transform-plugins": "0.81.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "license": "MIT" + }, + "node_modules/metro/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/metro/node_modules/hermes-estree": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", + "license": "MIT" + }, + "node_modules/metro/node_modules/hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", + "license": "MIT", + "dependencies": { + "hermes-estree": "0.25.1" + } + }, + "node_modules/metro/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/metro/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.53.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", + "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "license": "MIT" + }, + "node_modules/nested-error-stacks": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz", + "integrity": "sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==", + "license": "MIT" + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "license": "MIT" + }, + "node_modules/nocache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/nocache/-/nocache-3.0.4.tgz", + "integrity": "sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/node-dir": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", + "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", + "license": "MIT", + "dependencies": { + "minimatch": "^3.0.2" + }, + "engines": { + "node": ">= 0.10.5" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "license": "MIT" + }, + "node_modules/node-stream-zip": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", + "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/antelle" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-package-arg": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.3.tgz", + "integrity": "sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==", + "license": "ISC", + "dependencies": { + "hosted-git-info": "^7.0.0", + "proc-log": "^4.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-package-arg/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "license": "MIT", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", + "license": "MIT" + }, + "node_modules/nwsapi": { + "version": "2.2.16", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.16.tgz", + "integrity": "sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/ob1": { + "version": "0.81.1", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.81.1.tgz", + "integrity": "sha512-1PEbvI+AFvOcgdNcO79FtDI1TUO8S3lhiKOyAiyWQF3sFDDKS+aw2/BZvGlArFnSmqckwOOB9chQuIX0/OahoQ==", + "license": "MIT", + "dependencies": { + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "license": "MIT", + "dependencies": { + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ora/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/ora/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ora/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ora/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-png": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-png/-/parse-png-2.1.0.tgz", + "integrity": "sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ==", + "license": "MIT", + "dependencies": { + "pngjs": "^3.3.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/parse5": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz", + "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^4.5.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/password-prompt": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.3.tgz", + "integrity": "sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw==", + "license": "0BSD", + "dependencies": { + "ansi-escapes": "^4.3.2", + "cross-spawn": "^7.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", + "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/plist": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", + "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", + "license": "MIT", + "dependencies": { + "@xmldom/xmldom": "^0.8.8", + "base64-js": "^1.5.1", + "xmlbuilder": "^15.1.1" + }, + "engines": { + "node": ">=10.4.0" + } + }, + "node_modules/plist/node_modules/@xmldom/xmldom": { + "version": "0.8.10", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", + "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/plist/node_modules/xmlbuilder": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", + "license": "MIT", + "engines": { + "node": ">=8.0" + } + }, + "node_modules/pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "license": "MIT", + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, + "node_modules/pump": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, + "node_modules/qrcode-terminal": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.11.0.tgz", + "integrity": "sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ==", + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" + } + }, + "node_modules/query-string": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz", + "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==", + "license": "MIT", + "dependencies": { + "decode-uri-component": "^0.2.2", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "license": "MIT", + "dependencies": { + "inherits": "~2.0.3" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-devtools-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-5.3.2.tgz", + "integrity": "sha512-crr9HkVrDiJ0A4zot89oS0Cgv0Oa4OG1Em4jit3P3ZxZSKPMYyMjfwMqgcJna9o625g8oN87rBm8SWWrSTBZxg==", + "license": "MIT", + "dependencies": { + "shell-quote": "^1.6.1", + "ws": "^7" + } + }, + "node_modules/react-devtools-core/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-fast-compare": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", + "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==", + "license": "MIT" + }, + "node_modules/react-freeze": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/react-freeze/-/react-freeze-1.0.4.tgz", + "integrity": "sha512-r4F0Sec0BLxWicc7HEyo2x3/2icUTrRmDjaaRyzzn+7aDyFZliszMDOgLVwSnQnYENOlL1o569Ze2HZefk8clA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": ">=17.0.0" + } + }, + "node_modules/react-helmet-async": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", + "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.12.5", + "invariant": "^2.2.4", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.2.0", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": "^16.6.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, + "node_modules/react-native": { + "version": "0.76.7", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.76.7.tgz", + "integrity": "sha512-GPJcQeO3qUi1MvuhsC2DC6tH8gJQ4uc4JWPORrdeuCGFWE3QLsN8/hiChTEvJREHLfQSV61YPI8gIOtAQ8c37g==", + "license": "MIT", + "dependencies": { + "@jest/create-cache-key-function": "^29.6.3", + "@react-native/assets-registry": "0.76.7", + "@react-native/codegen": "0.76.7", + "@react-native/community-cli-plugin": "0.76.7", + "@react-native/gradle-plugin": "0.76.7", + "@react-native/js-polyfills": "0.76.7", + "@react-native/normalize-colors": "0.76.7", + "@react-native/virtualized-lists": "0.76.7", + "abort-controller": "^3.0.0", + "anser": "^1.4.9", + "ansi-regex": "^5.0.0", + "babel-jest": "^29.7.0", + "babel-plugin-syntax-hermes-parser": "^0.23.1", + "base64-js": "^1.5.1", + "chalk": "^4.0.0", + "commander": "^12.0.0", + "event-target-shim": "^5.0.1", + "flow-enums-runtime": "^0.0.6", + "glob": "^7.1.1", + "invariant": "^2.2.4", + "jest-environment-node": "^29.6.3", + "jsc-android": "^250231.0.0", + "memoize-one": "^5.0.0", + "metro-runtime": "^0.81.0", + "metro-source-map": "^0.81.0", + "mkdirp": "^0.5.1", + "nullthrows": "^1.1.1", + "pretty-format": "^29.7.0", + "promise": "^8.3.0", + "react-devtools-core": "^5.3.1", + "react-refresh": "^0.14.0", + "regenerator-runtime": "^0.13.2", + "scheduler": "0.24.0-canary-efb381bbf-20230505", + "semver": "^7.1.3", + "stacktrace-parser": "^0.1.10", + "whatwg-fetch": "^3.0.0", + "ws": "^6.2.3", + "yargs": "^17.6.2" + }, + "bin": { + "react-native": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/react": "^18.2.6", + "react": "^18.2.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-native-gesture-handler": { + "version": "2.20.2", + "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.20.2.tgz", + "integrity": "sha512-HqzFpFczV4qCnwKlvSAvpzEXisL+Z9fsR08YV5LfJDkzuArMhBu2sOoSPUF/K62PCoAb+ObGlTC83TKHfUd0vg==", + "license": "MIT", + "dependencies": { + "@egjs/hammerjs": "^2.0.17", + "hoist-non-react-statics": "^3.3.0", + "invariant": "^2.2.4", + "prop-types": "^15.7.2" + }, + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/react-native-helmet-async": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/react-native-helmet-async/-/react-native-helmet-async-2.0.4.tgz", + "integrity": "sha512-m3CkXWss6B1dd6mCMleLpzDCJJGGaHOLQsUzZv8kAASJmMfmVT4d2fx375iXKTRWT25ThBfae3dECuX5cq/8hg==", + "license": "Apache-2.0", + "dependencies": { + "invariant": "^2.2.4", + "react-fast-compare": "^3.2.2", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": "^16.6.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-native-is-edge-to-edge": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/react-native-is-edge-to-edge/-/react-native-is-edge-to-edge-1.1.6.tgz", + "integrity": "sha512-1pHnFTlBahins6UAajXUqeCOHew9l9C2C8tErnpGC3IyLJzvxD+TpYAixnCbrVS52f7+NvMttbiSI290XfwN0w==", + "license": "MIT", + "peerDependencies": { + "react": ">=18.2.0", + "react-native": ">=0.73.0" + } + }, + "node_modules/react-native-reanimated": { + "version": "3.16.7", + "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-3.16.7.tgz", + "integrity": "sha512-qoUUQOwE1pHlmQ9cXTJ2MX9FQ9eHllopCLiWOkDkp6CER95ZWeXhJCP4cSm6AD4jigL5jHcZf/SkWrg8ttZUsw==", + "license": "MIT", + "dependencies": { + "@babel/plugin-transform-arrow-functions": "^7.0.0-0", + "@babel/plugin-transform-class-properties": "^7.0.0-0", + "@babel/plugin-transform-classes": "^7.0.0-0", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.0.0-0", + "@babel/plugin-transform-optional-chaining": "^7.0.0-0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0-0", + "@babel/plugin-transform-template-literals": "^7.0.0-0", + "@babel/plugin-transform-unicode-regex": "^7.0.0-0", + "@babel/preset-typescript": "^7.16.7", + "convert-source-map": "^2.0.0", + "invariant": "^2.2.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0", + "react": "*", + "react-native": "*" + } + }, + "node_modules/react-native-safe-area-context": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.12.0.tgz", + "integrity": "sha512-ukk5PxcF4p3yu6qMZcmeiZgowhb5AsKRnil54YFUUAXVIS7PJcMHGGC+q44fCiBg44/1AJk5njGMez1m9H0BVQ==", + "license": "MIT", + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/react-native-screens": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-4.4.0.tgz", + "integrity": "sha512-c7zc7Zwjty6/pGyuuvh9gK3YBYqHPOxrhXfG1lF4gHlojQSmIx2piNbNaV+Uykj+RDTmFXK0e/hA+fucw/Qozg==", + "license": "MIT", + "dependencies": { + "react-freeze": "^1.0.0", + "warn-once": "^0.1.0" + }, + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/react-native-web": { + "version": "0.19.13", + "resolved": "https://registry.npmjs.org/react-native-web/-/react-native-web-0.19.13.tgz", + "integrity": "sha512-etv3bN8rJglrRCp/uL4p7l8QvUNUC++QwDbdZ8CB7BvZiMvsxfFIRM1j04vxNldG3uo2puRd6OSWR3ibtmc29A==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@react-native/normalize-colors": "^0.74.1", + "fbjs": "^3.0.4", + "inline-style-prefixer": "^6.0.1", + "memoize-one": "^6.0.0", + "nullthrows": "^1.1.1", + "postcss-value-parser": "^4.2.0", + "styleq": "^0.1.3" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/react-native-web/node_modules/@react-native/normalize-colors": { + "version": "0.74.89", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.74.89.tgz", + "integrity": "sha512-qoMMXddVKVhZ8PA1AbUCk83trpd6N+1nF2A6k1i6LsQObyS92fELuk8kU/lQs6M7BsMHwqyLCpQJ1uFgNvIQXg==", + "license": "MIT" + }, + "node_modules/react-native-web/node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", + "license": "MIT" + }, + "node_modules/react-native-webview": { + "version": "13.12.5", + "resolved": "https://registry.npmjs.org/react-native-webview/-/react-native-webview-13.12.5.tgz", + "integrity": "sha512-INOKPom4dFyzkbxbkuQNfeRG9/iYnyRDzrDkJeyvSWgJAW2IDdJkWFJBS2v0RxIL4gqLgHkiIZDOfiLaNnw83Q==", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^4.0.0", + "invariant": "2.2.4" + }, + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/react-native/node_modules/babel-plugin-syntax-hermes-parser": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.23.1.tgz", + "integrity": "sha512-uNLD0tk2tLUjGFdmCk+u/3FEw2o+BAwW4g+z2QVlxJrzZYOOPADroEcNtTPt5lNiScctaUmnsTkVEnOwZUOLhA==", + "license": "MIT", + "dependencies": { + "hermes-parser": "0.23.1" + } + }, + "node_modules/react-native/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/react-native/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/react-native/node_modules/promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "license": "MIT", + "dependencies": { + "asap": "~2.0.6" + } + }, + "node_modules/react-native/node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "license": "MIT" + }, + "node_modules/react-native/node_modules/scheduler": { + "version": "0.24.0-canary-efb381bbf-20230505", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.24.0-canary-efb381bbf-20230505.tgz", + "integrity": "sha512-ABvovCDe/k9IluqSh4/ISoq8tIJnW8euVAWYt5j/bg6dRnqwQwiGO1F/V4AyK96NGF/FB04FhOUDuWj8IKfABA==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/react-native/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/react-native/node_modules/ws": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "license": "MIT", + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-shallow-renderer": { + "version": "16.15.0", + "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz", + "integrity": "sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4.1.1", + "react-is": "^16.12.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-test-renderer": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-18.3.1.tgz", + "integrity": "sha512-KkAgygexHUkQqtvvx/otwxtuFu5cVjfzTCtjXLH9boS19/Nbtg84zS7wIQn39G8IlrhThBpQsMKkq5ZHZIYFXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "react-is": "^18.3.1", + "react-shallow-renderer": "^16.15.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readline": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", + "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==", + "license": "BSD" + }, + "node_modules/recast": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.21.5.tgz", + "integrity": "sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==", + "license": "MIT", + "dependencies": { + "ast-types": "0.15.2", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/recast/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "license": "MIT" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexpu-core": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", + "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.12.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", + "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.0.2" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/remove-trailing-slash": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz", + "integrity": "sha512-o4S4Qh6L2jpnCy83ysZDau+VORNvnFw07CKSAymkd6ICNVEPisMyzlc00KlvvicsxKck94SEwhDnMNdICzO+tA==", + "license": "MIT" + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true, + "license": "ISC" + }, + "node_modules/requireg": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/requireg/-/requireg-0.2.2.tgz", + "integrity": "sha512-nYzyjnFcPNGR3lx9lwPPPnuQxv6JWEZd2Ci0u9opN7N5zUEPIhY/GbL3vMGOr2UXwEg9WwSyV9X9Y/kLFgPsOg==", + "dependencies": { + "nested-error-stacks": "~2.0.1", + "rc": "~1.2.7", + "resolve": "~1.7.1" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/requireg/node_modules/resolve": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "license": "MIT", + "dependencies": { + "path-parse": "^1.0.5" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-workspace-root/-/resolve-workspace-root-2.0.0.tgz", + "integrity": "sha512-IsaBUZETJD5WsI11Wt8PKHwaIe45or6pwNc8yflvLJ4DWtImK9kuLoH5kUva/2Mmx/RdIyr4aONNSa2v9LTJsw==", + "license": "MIT" + }, + "node_modules/resolve.exports": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "license": "MIT", + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "license": "ISC" + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/schema-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "license": "MIT", + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.1.tgz", + "integrity": "sha512-p4rRk4f23ynFEfcD9LA0xRYngj+IyGiEYyqqOak8kaN0TvNmuxC2dcVeBn62GpCeR2CpWqyHCNScTP91QbAVFg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/send/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", + "integrity": "sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-static/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-static/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/serve-static/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serve-static/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serve-static/node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-static/node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serve-static/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/server-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/server-only/-/server-only-0.0.1.tgz", + "integrity": "sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==", + "license": "MIT" + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true, + "license": "ISC" + }, + "node_modules/set-cookie-parser": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "license": "MIT" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/sf-symbols-typescript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sf-symbols-typescript/-/sf-symbols-typescript-2.1.0.tgz", + "integrity": "sha512-ezT7gu/SHTPIOEEoG6TF+O0m5eewl0ZDAO4AtdBi5HjsrUI6JdCG17+Q8+aKp0heM06wZKApRCn5olNbs0Wb/A==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", + "license": "MIT" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", + "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/simple-plist": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.1.tgz", + "integrity": "sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw==", + "license": "MIT", + "dependencies": { + "bplist-creator": "0.1.0", + "bplist-parser": "0.3.1", + "plist": "^3.0.5" + } + }, + "node_modules/simple-plist/node_modules/bplist-creator": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.1.0.tgz", + "integrity": "sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==", + "license": "MIT", + "dependencies": { + "stream-buffers": "2.2.x" + } + }, + "node_modules/simple-plist/node_modules/bplist-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.1.tgz", + "integrity": "sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA==", + "license": "MIT", + "dependencies": { + "big-integer": "1.6.x" + }, + "engines": { + "node": ">= 5.10.0" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "license": "MIT" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/slugify": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz", + "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "license": "MIT", + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" + }, + "node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/stack-generator": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz", + "integrity": "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "license": "MIT" + }, + "node_modules/stacktrace-gps": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.1.2.tgz", + "integrity": "sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map": "0.5.6", + "stackframe": "^1.3.4" + } + }, + "node_modules/stacktrace-gps/node_modules/source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stacktrace-js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-2.0.2.tgz", + "integrity": "sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "error-stack-parser": "^2.0.6", + "stack-generator": "^2.0.5", + "stacktrace-gps": "^3.0.4" + } + }, + "node_modules/stacktrace-parser": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.7.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/stacktrace-parser/node_modules/type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stream-buffers": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", + "integrity": "sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==", + "license": "Unlicense", + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/stream-slice": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/stream-slice/-/stream-slice-0.1.2.tgz", + "integrity": "sha512-QzQxpoacatkreL6jsxnVb7X5R/pGw9OUv2qWTYWnmLpg4NdN31snPy/f3TdQE1ZUXaThRvj1Zw4/OGg0ZkaLMA==", + "license": "MIT" + }, + "node_modules/strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-length/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", + "dev": true, + "license": "MIT" + }, + "node_modules/structured-headers": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/structured-headers/-/structured-headers-0.4.1.tgz", + "integrity": "sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg==", + "license": "MIT" + }, + "node_modules/styleq": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/styleq/-/styleq-0.1.3.tgz", + "integrity": "sha512-3ZUifmCDCQanjeej1f6kyl/BeP/Vae5EYkQ9iJfUm/QwZvlgnZzyflqAsAWYURdtea8Vkvswu2GrC57h3qffcA==", + "license": "MIT" + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/sudo-prompt": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-8.2.5.tgz", + "integrity": "sha512-rlBo3HU/1zAJUrkY6jNxDOC9eVYliG6nS4JA8u8KAshITd07tafMc/Br7xQwCSseXwJ2iCcHCE8SNWX3q8Z+kw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "license": "MIT" + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/temp": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", + "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", + "license": "MIT", + "dependencies": { + "rimraf": "~2.6.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/temp/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/temp/node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/tempy": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.7.1.tgz", + "integrity": "sha512-vXPxwOyaNVi9nyczO16mxmHGpl6ASC5/TVhRRHpqeYHvKQm58EaWNvZXxAhR0lYYnBOQFjXjhzeLsaXdjxLjRg==", + "license": "MIT", + "dependencies": { + "del": "^6.0.0", + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.38.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.38.2.tgz", + "integrity": "sha512-w8CXxxbFA5zfNsR/i8HZq5bvn18AK0O9jj7hyo1YqkovLxEFa0uP0LCVGZRqiRaKRFxXhELBp8SteeAjEnfeJg==", + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.11.tgz", + "integrity": "sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "license": "MIT" + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "license": "MIT" + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "license": "BSD-3-Clause" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "license": "Apache-2.0" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/turbo-stream": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.4.0.tgz", + "integrity": "sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==", + "license": "ISC" + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ua-parser-js": { + "version": "1.0.40", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.40.tgz", + "integrity": "sha512-z6PJ8Lml+v3ichVojCiB8toQJBuwR42ySM4ezjXIqXK3M0HczmKQ3LF4rhU55PfD99KEEXQG6yb7iOMyvYuHew==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "license": "MIT", + "bin": { + "ua-parser-js": "script/cli.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/undici": { + "version": "6.21.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.1.tgz", + "integrity": "sha512-q/1rj5D0/zayJB2FraXdaWxbhWiNKDvu8naDT2dl1yTlvJp4BLtOcp2a5BvgGNQpYYJzau7tf1WgKv3b+7mqpQ==", + "license": "MIT", + "engines": { + "node": ">=18.17" + } + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "license": "MIT" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "license": "MIT", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", + "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/use-latest-callback": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/use-latest-callback/-/use-latest-callback-0.2.3.tgz", + "integrity": "sha512-7vI3fBuyRcP91pazVboc4qu+6ZqM8izPWX9k7cRnT8hbD5svslcknsh3S9BUhaK11OmgTV4oWZZVSeQAiV53SQ==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz", + "integrity": "sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", + "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vlq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz", + "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==", + "license": "MIT" + }, + "node_modules/w3c-xmlserializer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/warn-once": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/warn-once/-/warn-once-0.1.1.tgz", + "integrity": "sha512-VkQZJbO8zVImzYFteBXvBOZEl1qL175WH8VmZcxF2fZAoudNhNDvHi+doCaAEdU2l2vtcIwa2zn0QK5+I1HQ3Q==", + "license": "MIT" + }, + "node_modules/watchpack": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/web-encoding": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/web-encoding/-/web-encoding-1.1.5.tgz", + "integrity": "sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==", + "license": "MIT", + "dependencies": { + "util": "^0.12.3" + }, + "optionalDependencies": { + "@zxing/text-encoding": "0.9.0" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/webpack": { + "version": "5.97.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.97.1.tgz", + "integrity": "sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "license": "MIT", + "peer": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/webpack/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-fetch": { + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", + "license": "MIT" + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url-without-unicode": { + "version": "8.0.0-3", + "resolved": "https://registry.npmjs.org/whatwg-url-without-unicode/-/whatwg-url-without-unicode-8.0.0-3.tgz", + "integrity": "sha512-HoKuzZrUlgpz35YO27XgD28uh/WJH4B0+3ttFqRo//lmq+9T/mIOJ6kqmINI9HpUpz1imRC/nR/lxKpJiv0uig==", + "license": "MIT", + "dependencies": { + "buffer": "^5.4.3", + "punycode": "^2.1.1", + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/whatwg-url-without-unicode/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/which-typed-array": { + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", + "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wonka": { + "version": "6.3.4", + "resolved": "https://registry.npmjs.org/wonka/-/wonka-6.3.4.tgz", + "integrity": "sha512-CjpbqNtBGNAeyNS/9W6q3kSkKE52+FjIj7AkFlLr11s/VWGUu6a2CdYSdGxocIhIVjaW/zchesBQUKPVU69Cqg==", + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xcode": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/xcode/-/xcode-3.0.1.tgz", + "integrity": "sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==", + "license": "Apache-2.0", + "dependencies": { + "simple-plist": "^1.1.0", + "uuid": "^7.0.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/xcode/node_modules/uuid": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", + "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12" + } + }, + "node_modules/xml2js": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.0.tgz", + "integrity": "sha512-eLTh0kA8uHceqesPqSE+VvO1CDDJWMwlQfB6LuN6T8w6MaDJ8Txm8P7s5cHD0miF0V+GGTZrDQfxPZQVsur33w==", + "license": "MIT", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xml2js/node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlbuilder": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-14.0.0.tgz", + "integrity": "sha512-ts+B2rSe4fIckR6iquDjsKbQFK2NlUk6iG5nf14mDEyldgoc2nEKZ3jZWMPTxGQwVgToSjt6VGIho1H8/fNFTg==", + "license": "MIT", + "engines": { + "node": ">=8.0" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "license": "MIT" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", + "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/packages/native/package.json b/packages/native/package.json new file mode 100644 index 00000000..ca49151e --- /dev/null +++ b/packages/native/package.json @@ -0,0 +1,58 @@ +{ + "name": "diplicity-react-native", + "main": "expo-router/entry", + "version": "1.0.0", + "scripts": { + "start": "expo start", + "reset-project": "node ./scripts/reset-project.js", + "android": "expo run:android", + "ios": "expo run:ios", + "web": "expo start --web", + "test": "jest --watchAll", + "lint": "expo lint" + }, + "jest": { + "preset": "jest-expo" + }, + "dependencies": { + "@expo/vector-icons": "^14.0.2", + "@react-native-async-storage/async-storage": "^2.1.1", + "@react-native-google-signin/google-signin": "^13.1.0", + "@react-navigation/bottom-tabs": "^7.2.0", + "@react-navigation/native": "^7.0.14", + "expo": "~52.0.33", + "expo-blur": "~14.0.3", + "expo-constants": "~17.0.5", + "expo-dev-client": "~5.0.12", + "expo-font": "~13.0.3", + "expo-haptics": "~14.0.1", + "expo-linking": "~7.0.5", + "expo-router": "~4.0.17", + "expo-splash-screen": "~0.29.21", + "expo-status-bar": "~2.0.1", + "expo-symbols": "~0.2.2", + "expo-system-ui": "~4.0.8", + "expo-web-browser": "~14.0.2", + "react": "18.3.1", + "react-dom": "18.3.1", + "react-native": "0.76.7", + "react-native-gesture-handler": "~2.20.2", + "react-native-reanimated": "~3.16.1", + "react-native-safe-area-context": "4.12.0", + "react-native-screens": "~4.4.0", + "react-native-web": "~0.19.13", + "react-native-webview": "13.12.5" + }, + "devDependencies": { + "@babel/core": "^7.25.2", + "@react-native-community/cli": "latest", + "@types/jest": "^29.5.12", + "@types/react": "~18.3.12", + "@types/react-test-renderer": "^18.3.0", + "jest": "^29.2.1", + "jest-expo": "~52.0.3", + "react-test-renderer": "18.3.1", + "typescript": "^5.3.3" + }, + "private": true +} diff --git a/packages/native/scripts/reset-project.js b/packages/native/scripts/reset-project.js new file mode 100644 index 00000000..51dff15a --- /dev/null +++ b/packages/native/scripts/reset-project.js @@ -0,0 +1,112 @@ +#!/usr/bin/env node + +/** + * This script is used to reset the project to a blank state. + * It deletes or moves the /app, /components, /hooks, /scripts, and /constants directories to /app-example based on user input and creates a new /app directory with an index.tsx and _layout.tsx file. + * You can remove the `reset-project` script from package.json and safely delete this file after running it. + */ + +const fs = require("fs"); +const path = require("path"); +const readline = require("readline"); + +const root = process.cwd(); +const oldDirs = ["app", "components", "hooks", "constants", "scripts"]; +const exampleDir = "app-example"; +const newAppDir = "app"; +const exampleDirPath = path.join(root, exampleDir); + +const indexContent = `import { Text, View } from "react-native"; + +export default function Index() { + return ( + + Edit app/index.tsx to edit this screen. + + ); +} +`; + +const layoutContent = `import { Stack } from "expo-router"; + +export default function RootLayout() { + return ; +} +`; + +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, +}); + +const moveDirectories = async (userInput) => { + try { + if (userInput === "y") { + // Create the app-example directory + await fs.promises.mkdir(exampleDirPath, { recursive: true }); + console.log(`📁 /${exampleDir} directory created.`); + } + + // Move old directories to new app-example directory or delete them + for (const dir of oldDirs) { + const oldDirPath = path.join(root, dir); + if (fs.existsSync(oldDirPath)) { + if (userInput === "y") { + const newDirPath = path.join(root, exampleDir, dir); + await fs.promises.rename(oldDirPath, newDirPath); + console.log(`➡️ /${dir} moved to /${exampleDir}/${dir}.`); + } else { + await fs.promises.rm(oldDirPath, { recursive: true, force: true }); + console.log(`❌ /${dir} deleted.`); + } + } else { + console.log(`➡️ /${dir} does not exist, skipping.`); + } + } + + // Create new /app directory + const newAppDirPath = path.join(root, newAppDir); + await fs.promises.mkdir(newAppDirPath, { recursive: true }); + console.log("\n📁 New /app directory created."); + + // Create index.tsx + const indexPath = path.join(newAppDirPath, "index.tsx"); + await fs.promises.writeFile(indexPath, indexContent); + console.log("📄 app/index.tsx created."); + + // Create _layout.tsx + const layoutPath = path.join(newAppDirPath, "_layout.tsx"); + await fs.promises.writeFile(layoutPath, layoutContent); + console.log("📄 app/_layout.tsx created."); + + console.log("\n✅ Project reset complete. Next steps:"); + console.log( + `1. Run \`npx expo start\` to start a development server.\n2. Edit app/index.tsx to edit the main screen.${ + userInput === "y" + ? `\n3. Delete the /${exampleDir} directory when you're done referencing it.` + : "" + }` + ); + } catch (error) { + console.error(`❌ Error during script execution: ${error.message}`); + } +}; + +rl.question( + "Do you want to move existing files to /app-example instead of deleting them? (Y/n): ", + (answer) => { + const userInput = answer.trim().toLowerCase() || "y"; + if (userInput === "y" || userInput === "n") { + moveDirectories(userInput).finally(() => rl.close()); + } else { + console.log("❌ Invalid input. Please enter 'Y' or 'N'."); + rl.close(); + } + } +); diff --git a/packages/native/services/auth.ts b/packages/native/services/auth.ts new file mode 100644 index 00000000..3ae99d92 --- /dev/null +++ b/packages/native/services/auth.ts @@ -0,0 +1,89 @@ +import { telemetry } from "./telemetry"; +import AsyncStorage from "@react-native-async-storage/async-storage"; +import { GoogleSignin } from "@react-native-google-signin/google-signin"; + +interface IAuthService { + getTokenFromStorage: () => Promise; + getServerAuthCode: () => Promise; + getCallbackUrl: (serverAuthCode: string) => Promise; + getTokenFromRedirectUrl: (redirectUrl: string) => string; + removeTokenFromStorage: () => Promise; + setTokenInStorage: (token: string) => Promise; +} + +const serviceUrl = "https://diplicity-engine.appspot.com/"; + +class AuthService implements IAuthService { + constructor() { + GoogleSignin.configure({ + webClientId: + "635122585664-ao5i9f2p5365t4htql1qdb6uulso4929.apps.googleusercontent.com", + offlineAccess: true, + }); + } + public async getTokenFromStorage() { + telemetry.logInfo("Reading token from storage"); + const token = await AsyncStorage.getItem("token"); + telemetry.logInfo(`Token is in storage: ${Boolean(token)}`); + return token; + } + public async setTokenInStorage(token: string) { + telemetry.logInfo("Setting token in storage"); + await AsyncStorage.setItem("token", token); + telemetry.logInfo("Token set in storage"); + } + public async removeTokenFromStorage() { + telemetry.logInfo("Setting token in storage"); + await AsyncStorage.removeItem("token"); + telemetry.logInfo("Token set in storage"); + } + public async getCallbackUrl(serverAuthCode: string) { + const encodedServerAuthCode = encodeURIComponent(serverAuthCode); + const encodedState = encodeURIComponent(serviceUrl); + return `${serviceUrl}Auth/OAuth2Callback?code=${encodedServerAuthCode}&approve-redirect=true&state=${encodedState}`; + } + public getTokenFromRedirectUrl(redirectUrl: string) { + const decodedRedirectUrl = decodeURIComponent(redirectUrl); + const match = decodedRedirectUrl.match(/token=([^&]*)/); + if (!match) { + throw new Error("Could not get token from decoded redirect URL"); + } + return match[1]; + } + public async getServerAuthCode() { + try { + telemetry.logInfo("Checking if user has play services"); + const hasPlayServices = await GoogleSignin.hasPlayServices(); + telemetry.logInfo(`Has play services: ${hasPlayServices}`); + + telemetry.logInfo("Signing in"); + const userInfo = await GoogleSignin.signIn(); + telemetry.logInfo("Signed in"); + + if (!userInfo.data) { + throw new Error("User info is null"); + } + + telemetry.logInfo("Checking server auth code"); + const { serverAuthCode } = userInfo.data; + if (!serverAuthCode) { + throw new Error("Server auth code is null"); + } + telemetry.logInfo("Server auth code is not null"); + return serverAuthCode; + } catch (error) { + if (error instanceof Error) { + telemetry.logError( + `Error thrown while signing in: ${error.message}` + ); + } else { + telemetry.logError("Error is not an instance of Error"); + } + throw error; + } + } +} + +const authService = new AuthService(); + +export { authService }; diff --git a/packages/native/services/index.ts b/packages/native/services/index.ts new file mode 100644 index 00000000..b23df449 --- /dev/null +++ b/packages/native/services/index.ts @@ -0,0 +1,2 @@ +export * from "./auth"; +export * from "./telemetry"; \ No newline at end of file diff --git a/packages/native/services/telemetry.ts b/packages/native/services/telemetry.ts new file mode 100644 index 00000000..1e0bcf9a --- /dev/null +++ b/packages/native/services/telemetry.ts @@ -0,0 +1,24 @@ +class TelemetryService { + private static instance: TelemetryService; + + private constructor() { } + + public static getInstance(): TelemetryService { + if (!TelemetryService.instance) { + TelemetryService.instance = new TelemetryService(); + } + return TelemetryService.instance; + } + + public logInfo(eventName: string, eventData?: unknown): void { + console.log(`Info: ${eventName}`, eventData); + } + + public logError(errorName: string, errorData?: unknown): void { + console.error(`Error: ${errorName}`, errorData); + } +} + +const telemetry = TelemetryService.getInstance(); + +export { telemetry }; \ No newline at end of file diff --git a/packages/native/tsconfig.json b/packages/native/tsconfig.json new file mode 100644 index 00000000..909e9010 --- /dev/null +++ b/packages/native/tsconfig.json @@ -0,0 +1,17 @@ +{ + "extends": "expo/tsconfig.base", + "compilerOptions": { + "strict": true, + "paths": { + "@/*": [ + "./*" + ] + } + }, + "include": [ + "**/*.ts", + "**/*.tsx", + ".expo/types/**/*.ts", + "expo-env.d.ts" + ] +} From 006c334e8e7d15bb72b36efe4281bbdc538d38ab Mon Sep 17 00:00:00 2001 From: John McDowell Date: Thu, 13 Feb 2025 22:08:14 +0000 Subject: [PATCH 58/69] wip --- packages/native/android/app/build.gradle | 1 - packages/native/android/build.gradle | 2 -- packages/native/app.json | 6 ++++-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/native/android/app/build.gradle b/packages/native/android/app/build.gradle index aa3a6dc2..7ef38167 100644 --- a/packages/native/android/app/build.gradle +++ b/packages/native/android/app/build.gradle @@ -1,7 +1,6 @@ apply plugin: "com.android.application" apply plugin: "org.jetbrains.kotlin.android" apply plugin: "com.facebook.react" -apply plugin: 'com.google.gms.google-services' def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath() diff --git a/packages/native/android/build.gradle b/packages/native/android/build.gradle index 49acce19..abbcb8ec 100644 --- a/packages/native/android/build.gradle +++ b/packages/native/android/build.gradle @@ -7,7 +7,6 @@ buildscript { compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '35') targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '34') kotlinVersion = findProperty('android.kotlinVersion') ?: '1.9.25' - googlePlayServicesAuthVersion = "20.7.0" ndkVersion = "26.1.10909125" } @@ -19,7 +18,6 @@ buildscript { classpath('com.android.tools.build:gradle') classpath('com.facebook.react:react-native-gradle-plugin') classpath('org.jetbrains.kotlin:kotlin-gradle-plugin') - classpath('com.google.gms:google-services:4.4.2') } } diff --git a/packages/native/app.json b/packages/native/app.json index 4dfda2e8..ee44e71c 100644 --- a/packages/native/app.json +++ b/packages/native/app.json @@ -16,7 +16,8 @@ "foregroundImage": "./assets/images/adaptive-icon.png", "backgroundColor": "#ffffff" }, - "package": "com.diplicity.app" + "package": "com.diplicity.app", + "googleServicesFile": "./google-services.json" }, "web": { "bundler": "metro", @@ -33,7 +34,8 @@ "resizeMode": "contain", "backgroundColor": "#ffffff" } - ] + ], + "@react-native-google-signin/google-signin" ], "experiments": { "typedRoutes": true From 2a0fefa68bb12d9853ec85a830ce32b227167514 Mon Sep 17 00:00:00 2001 From: John McDowell Date: Thu, 13 Feb 2025 22:10:12 +0000 Subject: [PATCH 59/69] wip --- packages/native/app.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/native/app.json b/packages/native/app.json index ee44e71c..2dfd5a90 100644 --- a/packages/native/app.json +++ b/packages/native/app.json @@ -17,7 +17,7 @@ "backgroundColor": "#ffffff" }, "package": "com.diplicity.app", - "googleServicesFile": "./google-services.json" + "googleServicesFile": "./android/app/google-services.json" }, "web": { "bundler": "metro", From 29ee73ac0ebb04d4bb461b3ea751844a9a03a309 Mon Sep 17 00:00:00 2001 From: John McDowell Date: Thu, 13 Feb 2025 22:11:48 +0000 Subject: [PATCH 60/69] move2 --- packages/native/{android/app => }/google-services.json | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename packages/native/{android/app => }/google-services.json (100%) diff --git a/packages/native/android/app/google-services.json b/packages/native/google-services.json similarity index 100% rename from packages/native/android/app/google-services.json rename to packages/native/google-services.json From b753a9fdf640fa70df38a59c0c0b162dd38da7df Mon Sep 17 00:00:00 2001 From: John McDowell Date: Thu, 13 Feb 2025 22:12:21 +0000 Subject: [PATCH 61/69] wip --- packages/native/app.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/native/app.json b/packages/native/app.json index 2dfd5a90..ee44e71c 100644 --- a/packages/native/app.json +++ b/packages/native/app.json @@ -17,7 +17,7 @@ "backgroundColor": "#ffffff" }, "package": "com.diplicity.app", - "googleServicesFile": "./android/app/google-services.json" + "googleServicesFile": "./google-services.json" }, "web": { "bundler": "metro", From ab07433c40adeefe446911bde398043a6418f121 Mon Sep 17 00:00:00 2001 From: John McDowell Date: Fri, 14 Feb 2025 10:43:44 +0000 Subject: [PATCH 62/69] Add Google Services configuration for Firebase integration --- packages/native/android/app/build.gradle | 2 + .../native/android/app/google-services.json | 54 +++++++++++++++++++ packages/native/android/build.gradle | 1 + 3 files changed, 57 insertions(+) create mode 100644 packages/native/android/app/google-services.json diff --git a/packages/native/android/app/build.gradle b/packages/native/android/app/build.gradle index 7ef38167..998aab83 100644 --- a/packages/native/android/app/build.gradle +++ b/packages/native/android/app/build.gradle @@ -174,3 +174,5 @@ dependencies { implementation jscFlavor } } + +apply plugin: 'com.google.gms.google-services' \ No newline at end of file diff --git a/packages/native/android/app/google-services.json b/packages/native/android/app/google-services.json new file mode 100644 index 00000000..376e0e35 --- /dev/null +++ b/packages/native/android/app/google-services.json @@ -0,0 +1,54 @@ +{ + "project_info": { + "project_number": "926579634115", + "project_id": "diplicity-native-1645808087338", + "storage_bucket": "diplicity-native-1645808087338.firebasestorage.app" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:926579634115:android:59ec71161d0df140059776", + "android_client_info": { + "package_name": "com.diplicity.app" + } + }, + "oauth_client": [ + { + "client_id": "926579634115-csd07oel41rr3fnv1vi271ik4qjjvuro.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.diplicity.app", + "certificate_hash": "5e8f16062ea3cd2c4a0d547876baa6f38cabf625" + } + }, + { + "client_id": "926579634115-8glhtmatbf80je9pkmnt9inkt5c1lt29.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCey1H3ABDKfIBRb13p8dT9kUjTGTQmGVA" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "926579634115-67kdr7hhd1qtodbop3r15l358gf0in1u.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "926579634115-v2cb3jnos97q58gdakm6eb4uthsca8e2.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "org.reactjs.native.example.diplicityNative" + } + } + ] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/packages/native/android/build.gradle b/packages/native/android/build.gradle index abbcb8ec..47ef0300 100644 --- a/packages/native/android/build.gradle +++ b/packages/native/android/build.gradle @@ -15,6 +15,7 @@ buildscript { mavenCentral() } dependencies { + classpath 'com.google.gms:google-services:4.4.1' classpath('com.android.tools.build:gradle') classpath('com.facebook.react:react-native-gradle-plugin') classpath('org.jetbrains.kotlin:kotlin-gradle-plugin') From 01b7ad972131503d1d3c3bcde6e10c642cf62045 Mon Sep 17 00:00:00 2001 From: John McDowell Date: Fri, 14 Feb 2025 11:36:38 +0000 Subject: [PATCH 63/69] Add more fields to create game --- src/Router.tsx | 21 +- src/common/store/service.ts | 4 +- src/components/index.ts | 3 +- src/components/table-list-item.tsx | 35 ++ src/screens/home/create-game.tsx | 248 ++++++-- src/screens/home/game-info.tsx | 240 ++++---- src/screens/home/player-info.tsx | 45 +- src/terms.ts | 929 +++++++++++++++++++++++++++++ src/util.ts | 88 +++ 9 files changed, 1410 insertions(+), 203 deletions(-) create mode 100644 src/components/table-list-item.tsx create mode 100644 src/terms.ts diff --git a/src/Router.tsx b/src/Router.tsx index e2d2e09a..b0f545c7 100644 --- a/src/Router.tsx +++ b/src/Router.tsx @@ -33,6 +33,7 @@ import { import { ChannelContextProvider } from "./context/channel-context"; import { PhaseSelect } from "./components/phase-select"; import { GameName } from "./components/game-detail/game-name"; +import { GameDetailContextProvider } from "./context"; const Router: React.FC = () => { const { loggedIn } = useSelector(selectAuth); @@ -80,10 +81,12 @@ const Router: React.FC = () => { navigate("/")} - /> + + navigate("/")} + /> + } > } /> @@ -91,10 +94,12 @@ const Router: React.FC = () => { navigate("/")} - /> + + navigate("/")} + /> + } > } /> diff --git a/src/common/store/service.ts b/src/common/store/service.ts index 4f91d6bc..ca4fd265 100644 --- a/src/common/store/service.ts +++ b/src/common/store/service.ts @@ -282,14 +282,14 @@ const service = createApi({ method: "POST", body: JSON.stringify(data), }), - invalidatesTags: [TagType.ListGames], + invalidatesTags: [TagType.ListGames, TagType.Game], }), leaveGame: builder.mutation({ query: ({ gameId, userId }) => ({ url: `/Game/${gameId}/Member/${userId}`, method: "DELETE", }), - invalidatesTags: [TagType.ListGames], + invalidatesTags: [TagType.ListGames, TagType.Game], }), rescheduleGame: builder.mutation< undefined, diff --git a/src/components/index.ts b/src/components/index.ts index 8d809fbf..684a78ee 100644 --- a/src/components/index.ts +++ b/src/components/index.ts @@ -4,4 +4,5 @@ export * from "./orders"; export * from "./game-card" export * from "./map" export * from "./panel" -export * from "./query-container" \ No newline at end of file +export * from "./query-container" +export * from "./table-list-item" \ No newline at end of file diff --git a/src/components/table-list-item.tsx b/src/components/table-list-item.tsx new file mode 100644 index 00000000..96166451 --- /dev/null +++ b/src/components/table-list-item.tsx @@ -0,0 +1,35 @@ +import { ListItem, ListItemIcon, ListItemText } from "@mui/material"; + +const styles: Styles = { + listItemIcon: (theme) => ({ + color: theme.palette.text.primary, + minWidth: "fit-content", + padding: 1, + }), + listItemPrimaryText: (theme) => ({ + color: theme.palette.text.primary, + }), + listItemSecondaryText: (theme) => ({ + color: theme.palette.text.secondary, + paddingRight: 1, + "& .MuiListItemText-primary": { + textAlign: "right", + }, + }), +}; + +const TableListItem: React.FC<{ + label: string; + value: string | undefined; + icon: React.ReactElement; +}> = ({ label, value, icon }) => { + return ( + + {icon} + + + + ); +}; + +export { TableListItem }; diff --git a/src/screens/home/create-game.tsx b/src/screens/home/create-game.tsx index f89f67fa..4377f1c8 100644 --- a/src/screens/home/create-game.tsx +++ b/src/screens/home/create-game.tsx @@ -7,17 +7,31 @@ import { FormControlLabel, Checkbox, Button, + FormControl, + FormHelperText, + Divider, + Typography, + ListItemText, + ListItem, + ListItemIcon, } from "@mui/material"; +import { + People as PlayersIcon, + Flag as WinConditionIcon, + CalendarToday as StartYearIcon, + Person as AuthorIcon, +} from "@mui/icons-material"; import { toFormikValidationSchema } from "zod-formik-adapter"; import service, { newGameSchema } from "../../common/store/service"; import { z } from "zod"; import { useNavigate } from "react-router"; -import { QueryContainer } from "../../components"; +import { QueryContainer, TableListItem } from "../../components"; +import { randomGameName } from "../../util"; const initialValues = { Anonymous: false, ChatLanguageISO639_1: "", - Desc: "", + Desc: randomGameName(), DisableConferenceChat: false, DisableGroupChat: false, DisablePrivateChat: false, @@ -39,6 +53,22 @@ const initialValues = { RequireGameMasterInvitation: false, SkipMuster: true, Variant: "Classical", + phaseLengthUnit: "day", +}; + +const styles: Styles = { + listSubheader: (theme) => ({ + textAlign: "left", + color: theme.palette.text.primary, + }), + listItemIcon: (theme) => ({ + color: theme.palette.text.primary, + minWidth: "fit-content", + padding: 1, + }), + listItemPrimaryText: (theme) => ({ + color: theme.palette.text.primary, + }), }; const useCreateGame = () => { @@ -58,10 +88,17 @@ const useCreateGame = () => { return { query, handleSubmit, isSubmitting: createGameQuery.isLoading }; }; +const getPhaseLengthDivider = (unit: string) => + unit === "day" ? 1440 : unit === "hour" ? 60 : 1; + const CreateGame: React.FC = () => { const { query, handleSubmit, isSubmitting } = useCreateGame(); - const formik = useFormik>({ + const formik = useFormik< + z.infer & { + phaseLengthUnit: string; + } + >({ initialValues, validationSchema: toFormikValidationSchema(newGameSchema), onSubmit: handleSubmit, @@ -75,59 +112,164 @@ const CreateGame: React.FC = () => { }} > - {(data) => ( - - formik.setFieldValue("Desc", e.target.value)} - onBlur={formik.handleBlur} - error={formik.touched.Desc && Boolean(formik.errors.Desc)} - helperText={formik.touched.Desc && formik.errors.Desc} - disabled={isSubmitting} - /> - formik.setFieldValue("Variant", e.target.value)} - onBlur={formik.handleBlur} - error={formik.touched.Variant && Boolean(formik.errors.Variant)} - helperText={formik.touched.Variant && formik.errors.Variant} - disabled={isSubmitting} - > - {data.map((variant) => ( - - {variant.Name} - - ))} - - { + const variant = data.find((v) => v.Name === formik.values.Variant); + if (!variant) throw new Error("Variant not found"); + + const phaseLengthDivider = getPhaseLengthDivider( + formik.values.phaseLengthUnit + ); + + const phaseLengthValue = Math.floor( + formik.values.PhaseLengthMinutes / phaseLengthDivider + ); + + return ( + + + General + + + formik.setFieldValue("Desc", e.target.value)} onBlur={formik.handleBlur} + error={formik.touched.Desc && Boolean(formik.errors.Desc)} + helperText={formik.touched.Desc && formik.errors.Desc} disabled={isSubmitting} /> - } - label="Private" - /> - - - )} + + + + } + label="Private" + /> + + Private games do not appear in the Find Games list. You must + send a link to the game to invite players. + + + + + + formik.setFieldValue( + "PhaseLengthMinutes", + parseInt(e.target.value) * phaseLengthDivider + ) + } + onBlur={formik.handleBlur} + error={ + formik.touched.PhaseLengthMinutes && + Boolean(formik.errors.PhaseLengthMinutes) + } + helperText={ + formik.touched.PhaseLengthMinutes && + formik.errors.PhaseLengthMinutes + } + disabled={isSubmitting} + /> + { + formik.setFieldValue("phaseLengthUnit", e.target.value); + }} + disabled={isSubmitting} + > + Minutes + Hours + Days + + + + The length of each phase in the game. + + + + + Variant + + + formik.setFieldValue("Variant", e.target.value) + } + onBlur={formik.handleBlur} + error={formik.touched.Variant && Boolean(formik.errors.Variant)} + helperText={formik.touched.Variant && formik.errors.Variant} + disabled={isSubmitting} + > + {data.map((variant) => ( + + {variant.Name} + + ))} + + + {variant.Name} + } + /> + } + /> + } + /> + + + + + + + + + ); + }} ); diff --git a/src/screens/home/game-info.tsx b/src/screens/home/game-info.tsx index fc42ad7c..d983768e 100644 --- a/src/screens/home/game-info.tsx +++ b/src/screens/home/game-info.tsx @@ -21,9 +21,10 @@ import { Person as AuthorIcon, Info as InfoIcon, } from "@mui/icons-material"; -import { QueryContainer } from "../../components"; +import { QueryContainer, TableListItem } from "../../components"; import { mergeQueries, service, useGetVariantQuery } from "../../common"; -import { useParams } from "react-router"; +import { useNavigate } from "react-router"; +import { useGameDetailContext } from "../../context"; const styles: Styles = { listSubheader: (theme) => ({ @@ -38,13 +39,6 @@ const styles: Styles = { listItemPrimaryText: (theme) => ({ color: theme.palette.text.primary, }), - listItemSecondaryText: (theme) => ({ - color: theme.palette.text.secondary, - paddingRight: 1, - "& .MuiListItemText-primary": { - textAlign: "right", - }, - }), avatarStackButton: { justifyContent: "flex-start", width: "fit-content", @@ -59,8 +53,7 @@ const styles: Styles = { }; const useGameInfo = () => { - const { gameId } = useParams(); - if (!gameId) throw new Error("Game ID not found"); + const { gameId } = useGameDetailContext(); const getGameQuery = service.endpoints.getGame.useQuery(gameId); const getVariantQuery = useGetVariantQuery(gameId); @@ -79,134 +72,127 @@ const useGameInfo = () => { }; const GameInfo: React.FC = () => { + const { gameId } = useGameDetailContext(); const { query } = useGameInfo(); + const navigate = useNavigate(); - const TableListItem: React.FC<{ - label: string; - value: string | undefined; - icon: React.ReactElement; - }> = ({ label, value, icon }) => { - return ( - - {icon} - - - - ); + const handlePlayerInfo = () => { + navigate(`../player-info/${gameId}`); }; return ( - <> - - {(data) => ( - <> - {!data.game.Started && ( - }> - This game has not started yet. The game will start once{" "} - {data.variant.Nations.length} players have joined. - - )} - - - Game settings - + + {(data) => ( + <> + {!data.game.Started && ( + }> + This game has not started yet. The game will start once{" "} + {data.variant.Nations.length} players have joined. + + )} + + + Game settings + + } + /> + } + /> + {data.game.NonMovementPhaseLengthMinutes && ( } - /> - } + icon={<>} /> - {data.game.NonMovementPhaseLengthMinutes && ( - } - /> - )} - - - Player settings - - {data.game.ChatLanguageISO639_1 && ( - } - /> - )} - - - {data.game.Members.map((member) => ( - - ))} - - - } - > - - - - - - - - Variant details - - - {data.variant.Name} - + )} + + + Player settings + + {data.game.ChatLanguageISO639_1 && ( } + label="Language" + value={data.game.ChatLanguageISO639_1} + icon={} /> - } + )} + + + {data.game.Members.map((member) => ( + + ))} + + + } + > + + + + - } + + + + Variant details + + + {data.variant.Name} + + } + /> + } + /> + } + /> + + + + + - - - - - - - - - - )} - - + + + + + )} + ); }; diff --git a/src/screens/home/player-info.tsx b/src/screens/home/player-info.tsx index b7e30832..d5ffa29e 100644 --- a/src/screens/home/player-info.tsx +++ b/src/screens/home/player-info.tsx @@ -1,20 +1,33 @@ import React from "react"; import { Avatar, + Alert, List, ListItem, ListItemAvatar, ListItemText, } from "@mui/material"; +import { Info as InfoIcon } from "@mui/icons-material"; import { QueryContainer } from "../../components"; -import { service } from "../../common"; +import { mergeQueries, service, useGetVariantQuery } from "../../common"; import { useParams } from "react-router"; const usePlayerInfo = () => { const { gameId } = useParams(); if (!gameId) throw new Error("Game ID not found"); - const query = service.endpoints.getGame.useQuery(gameId); + const getGameQuery = service.endpoints.getGame.useQuery(gameId); + const getVariantQuery = useGetVariantQuery(gameId); + + const query = mergeQueries( + [getGameQuery, getVariantQuery], + (game, variant) => { + return { + game, + variant, + }; + } + ); return { query }; }; @@ -25,16 +38,24 @@ const PlayerInfo: React.FC = () => { return ( {(data) => ( - - {data.Members.map((member) => ( - - - - - - - ))} - + <> + {!data.game.Started && ( + }> + This game has not started yet. The game will start once{" "} + {data.variant.Nations.length} players have joined. + + )} + + {data.game.Members.map((member) => ( + + + + + + + ))} + + )} ); diff --git a/src/terms.ts b/src/terms.ts new file mode 100644 index 00000000..2149d57c --- /dev/null +++ b/src/terms.ts @@ -0,0 +1,929 @@ +export const conflictSynonyms = [ + "affray", + "altercation", + "argument", + "assault", + "barrage", + "battle", + "bout", + "brawl", + "broil", + "brush", + "carnage", + "clash", + "combat", + "competition", + "conflict", + "confrontation", + "contention", + "contest", + "controversy", + "crusade", + "difficulty", + "disagreement", + "dispute", + "dissension", + "duel", + "encounter", + "engagement", + "exchange", + "feud", + "fight", + "fisticuffs", + "fracas", + "fray", + "free-for-all", + "fuss", + "hostility", + "joust", + "match", + "melee", + "quarrel", + "rampage", + "riot", + "rivalry", + "row", + "ruckus", + "rumble", + "scrap", + "scrimmage", + "scuffle", + "set-to", + "skirmish", + "strife", + "struggle", + "tiff", + "to-do", + "tussle", + "war", + "wrangling", +]; + +export const adjectives = [ + "aback", + "abaft", + "abashed", + "aberrant", + "abhorrent", + "abiding", + "abject", + "abortive", + "abounding", + "abrasive", + "abstracted", + "acrid", + "adamant", + "adhoc", + "adjoining", + "adroit", + "aloof", + "amatory", + "animistic", + "antic", + "arcadian", + "auspicious", + "axiomatic", + "baleful", + "barbarous", + "bellicose", + "bilious", + "boorish", + "brash", + "cagey", + "calamitous", + "capricious", + "caustic", + "cerulean", + "cloistered", + "comely", + "concomitant", + "contumacious", + "corpulent", + "crapulous", + "craven", + "dapper", + "debonair", + "decorous", + "defamatory", + "didactic", + "dilatory", + "direful", + "divergent", + "dowdy", + "draconian", + "efficacious", + "effulgent", + "egregious", + "elated", + "endemic", + "erratic", + "ethereal", + "execrable", + "exultant", + "fallacious", + "fastidious", + "feckless", + "fecund", + "friable", + "fulsome", + "furtive", + "garrulous", + "guileless", + "gustatory", + "heady", + "heuristic", + "histrionic", + "hubristic", + "incandescent", + "incendiary", + "innate", + "insidious", + "insolent", + "intransigent", + "inveterate", + "invidious", + "irate", + "irksome", + "jejune", + "jocular", + "judicious", + "lachrymose", + "languid", + "limpid", + "loquacious", + "luminous", + "macabre", + "mannered", + "mendacious", + "meretricious", + "minatory", + "mordant", + "munificent", + "nebulous", + "nefarious", + "nondescript", + "noxious", + "obsequious", + "obtuse", + "onerous", + "ossified", + "overwrought", + "parsimonious", + "pendulous", + "penitent", + "pernicious", + "pervasive", + "petulant", + "picayune", + "piquant", + "placid", + "platitudinous", + "plucky", + "precipitate", + "propitious", + "puckish", + "querulous", + "quiescent", + "rebarbative", + "recalcitrant", + "recondite", + "redolent", + "rhadamanthine", + "risible", + "ruminative", + "sagacious", + "salubrious", + "sartorial", + "sclerotic", + "serpentine", + "sordid", + "spasmodic", + "spurious", + "squalid", + "strident", + "succinct", + "taciturn", + "tawdry", + "tenacious", + "tenuous", + "torpid", + "tremulous", + "trenchant", + "truculent", + "turbulent", + "turgid", + "ubiquitous", + "uxorious", + "vacuous", + "verdant", + "vivacious", + "voluble", + "voracious", + "waggish", + "wheedling", + "wistful", + "withering", + "zealous", + "adamant", + "adroit", + "amatory", + "animistic", + "antic", + "arcadian", + "baleful", + "bellicose", + "bilious", + "boorish", + "calamitous", + "caustic", + "cerulean", + "comely", + "concomitant", + "contumacious", + "corpulent", + "crapulous", + "defamatory", + "didactic", + "dilatory", + "dowdy", + "efficacious", + "effulgent", + "egregious", + "endemic", + "equanimous", + "execrable", + "fastidious", + "feckless", + "fecund", + "friable", + "fulsome", + "garrulous", + "guileless", + "gustatory", + "heuristic", + "histrionic", + "hubristic", + "incendiary", + "insidious", + "insolent", + "intransigent", + "inveterate", + "invidious", + "irksome", + "jejune", + "jocular", + "judicious", + "lachrymose", + "limpid", + "loquacious", + "luminous", + "mannered", + "mendacious", + "meretricious", + "minatory", + "mordant", + "munificent", + "nefarious", + "noxious", + "obtuse", + "parsimonious", + "pendulous", + "pernicious", + "pervasive", + "petulant", + "platitudinous", + "precipitate", + "propitious", + "puckish", + "querulous", + "quiescent", + "rebarbative", + "recalcitrant", + "redolent", + "rhadamanthine", + "risible", + "ruminative", + "sagacious", + "salubrious", + "sartorial", + "sclerotic", + "serpentine", + "spasmodic", + "strident", + "taciturn", + "tenacious", + "tremulous", + "trenchant", + "turbulent", + "turgid", + "ubiquitous", + "uxorious", + "verdant", + "voluble", + "voracious", + "wheedling", + "withering", + "zealous", +]; + +export const nouns = [ + "account", + "act", + "adjustment", + "advertisement", + "agreement", + "air", + "amount", + "amusement", + "animal", + "answer", + "apparatus", + "approval", + "argument", + "art", + "attack", + "attempt", + "attention", + "attraction", + "authority", + "back", + "balance", + "base", + "behavior", + "belief", + "birth", + "bit", + "bite", + "blood", + "blow", + "body", + "brass", + "bread", + "breath", + "brother", + "building", + "burn", + "burst", + "business", + "butter", + "canvas", + "care", + "cause", + "chalk", + "chance", + "change", + "cloth", + "coal", + "color", + "comfort", + "committee", + "company", + "comparison", + "competition", + "condition", + "connection", + "control", + "cook", + "copper", + "copy", + "cork", + "copy", + "cough", + "country", + "cover", + "crack", + "credit", + "crime", + "crush", + "cry", + "current", + "curve", + "damage", + "danger", + "daughter", + "day", + "death", + "debt", + "decision", + "degree", + "design", + "desire", + "destruction", + "detail", + "development", + "digestion", + "direction", + "discovery", + "discussion", + "disease", + "disgust", + "distance", + "distribution", + "division", + "doubt", + "drink", + "driving", + "dust", + "earth", + "edge", + "education", + "effect", + "end", + "error", + "event", + "example", + "exchange", + "existence", + "expansion", + "experience", + "expert", + "fact", + "fall", + "family", + "father", + "fear", + "feeling", + "fiction", + "field", + "fight", + "fire", + "flame", + "flight", + "flower", + "fold", + "food", + "force", + "form", + "friend", + "front", + "fruit", + "glass", + "gold", + "government", + "grain", + "grass", + "grip", + "group", + "growth", + "guide", + "harbor", + "harmony", + "hate", + "hearing", + "heat", + "help", + "history", + "hole", + "hope", + "hour", + "humor", + "ice", + "idea", + "impulse", + "increase", + "industry", + "ink", + "insect", + "instrument", + "insurance", + "interest", + "invention", + "iron", + "jelly", + "join", + "journey", + "judge", + "jump", + "kick", + "kiss", + "knowledge", + "land", + "language", + "laugh", + "low", + "lead", + "learning", + "leather", + "letter", + "level", + "lift", + "light", + "limit", + "linen", + "liquid", + "list", + "look", + "loss", + "love", + "machine", + "man", + "manager", + "mark", + "market", + "mass", + "meal", + "measure", + "meat", + "meeting", + "memory", + "metal", + "middle", + "milk", + "mind", + "mine", + "minute", + "mist", + "money", + "month", + "morning", + "mother", + "motion", + "mountain", + "move", + "music", + "name", + "nation", + "need", + "news", + "night", + "noise", + "note", + "number", + "observation", + "offer", + "oil", + "operation", + "opinion", + "order", + "organization", + "ornament", + "owner", + "page", + "pain", + "paint", + "paper", + "part", + "paste", + "payment", + "peace", + "person", + "place", + "plant", + "play", + "pleasure", + "point", + "poison", + "polish", + "porter", + "position", + "powder", + "power", + "price", + "print", + "process", + "produce", + "profit", + "property", + "prose", + "protest", + "pull", + "punishment", + "purpose", + "push", + "quality", + "question", + "rain", + "range", + "rate", + "ray", + "reaction", + "reading", + "reason", + "record", + "regret", + "relation", + "religion", + "representative", + "request", + "respect", + "rest", + "reward", + "rhythm", + "rice", + "river", + "road", + "roll", + "room", + "rub", + "rule", + "run", + "salt", + "sand", + "scale", + "science", + "sea", + "seat", + "secretary", + "selection", + "self", + "sense", + "servant", + "sex", + "shade", + "shake", + "shame", + "shock", + "side", + "sign", + "silk", + "silver", + "sister", + "size", + "sky", + "sleep", + "slip", + "slope", + "smash", + "smell", + "smile", + "smoke", + "sneeze", + "snow", + "soap", + "society", + "son", + "song", + "sort", + "sound", + "soup", + "space", + "stage", + "start", + "statement", + "steam", + "steel", + "step", + "stitch", + "stone", + "stop", + "story", + "stretch", + "structure", + "substance", + "sugar", + "suggestion", + "summer", + "support", + "surprise", + "swim", + "system", + "talk", + "taste", + "tax", + "teaching", + "tendency", + "test", + "theory", + "thing", + "thought", + "thunder", + "time", + "tin", + "top", + "touch", + "trade", + "transport", + "trick", + "trouble", + "turn", + "twist", + "unit", + "use", + "value", + "verse", + "vessel", + "view", + "voice", + "walk", + "war", + "wash", + "waste", + "water", + "wave", + "wax", + "way", + "weather", + "week", + "weight", + "wind", + "wine", + "winter", + "woman", + "wood", + "wool", + "word", + "work", + "wound", + "writing", + "year", + "angle", + "ant", + "apple", + "arch", + "arm", + "army", + "baby", + "bag", + "ball", + "band", + "basin", + "basket", + "bath", + "bed", + "bee", + "bell", + "berry", + "bird", + "blade", + "board", + "boat", + "bone", + "book", + "boot", + "bottle", + "box", + "boy", + "brain", + "brake", + "branch", + "brick", + "bridge", + "brush", + "bucket", + "bulb", + "button", + "cake", + "camera", + "card", + "carriage", + "cart", + "cat", + "chain", + "cheese", + "chess", + "chin", + "church", + "circle", + "clock", + "cloud", + "coat", + "collar", + "comb", + "cord", + "cow", + "cup", + "curtain", + "cushion", + "dog", + "door", + "drain", + "drawer", + "dress", + "drop", + "ear", + "egg", + "engine", + "eye", + "face", + "farm", + "feather", + "finger", + "fish", + "flag", + "floor", + "fly", + "foot", + "fork", + "fowl", + "frame", + "garden", + "girl", + "glove", + "goat", + "gun", + "hair", + "hammer", + "hand", + "hat", + "head", + "heart", + "hook", + "horn", + "horse", + "hospital", + "house", + "island", + "jewel", + "kettle", + "key", + "knee", + "knife", + "knot", + "leaf", + "leg", + "library", + "line", + "lip", + "lock", + "map", + "match", + "monkey", + "moon", + "mouth", + "muscle", + "nail", + "neck", + "needle", + "nerve", + "net", + "nose", + "nut", + "office", + "orange", + "oven", + "parcel", + "pen", + "pencil", + "picture", + "pig", + "pin", + "pipe", + "plane", + "plate", + "plough", + "pocket", + "pot", + "potato", + "prison", + "pump", + "rail", + "rat", + "receipt", + "ring", + "rod", + "roof", + "root", + "sail", + "school", + "scissors", + "screw", + "seed", + "sheep", + "shelf", + "ship", + "shirt", + "shoe", + "skin", + "skirt", + "snake", + "sock", + "spade", + "sponge", + "spoon", + "spring", + "square", + "stamp", + "star", + "station", + "stem", + "stick", + "stocking", + "stomach", + "store", + "street", + "sun", + "table", + "tail", + "thread", + "throat", + "thumb", + "ticket", + "toe", + "tongue", + "tooth", + "town", + "train", + "tray", + "tree", + "trousers", + "umbrella", + "wall", + "watch", + "wheel", + "whip", + "whistle", + "window", + "wing", + "wire", + "worm", +]; \ No newline at end of file diff --git a/src/util.ts b/src/util.ts index e7384485..a4c6c98b 100644 --- a/src/util.ts +++ b/src/util.ts @@ -1,4 +1,92 @@ import { service } from "./common"; +import { adjectives, conflictSynonyms, nouns } from "./terms"; + +function capitalize(s: string) { + return s.slice(0, 1).toUpperCase() + s.slice(1); +} + +function randomOf(ary: string[]) { + return ary[Math.floor(Math.random() * ary.length)]; +} + +function dziemba_levenshtein(a: string, b: string) { + let tmp; + if (a.length === 0) { + return b.length; + } + if (b.length === 0) { + return a.length; + } + if (a.length > b.length) { + tmp = a; + a = b; + b = tmp; + } + let i, + j, + res, + // eslint-disable-next-line prefer-const + alen = a.length, + // eslint-disable-next-line prefer-const + blen = b.length, + // eslint-disable-next-line prefer-const + row = Array(alen); + for (i = 0; i <= alen; i++) { + row[i] = i; + } + + for (i = 1; i <= blen; i++) { + res = i; + for (j = 1; j <= alen; j++) { + tmp = row[j - 1]; + row[j - 1] = res; + res = + b[i - 1] === a[j - 1] + ? tmp + : Math.min(tmp + 1, Math.min(res + 1, row[j] + 1)); + } + } + return res; +} + +function funkyFactor(s1: string, s2: string) { + if (s1.length < 3 || s2.length < 3) { + return dziemba_levenshtein(s1, s2); + } + return ( + dziemba_levenshtein(s1.slice(0, 3), s2.slice(0, 3)) + + dziemba_levenshtein(s1.slice(-3), s2.slice(-3)) + ); +} + +function randomOfFunky(basis: string, ary: string[]) { + const options: { option: string; score: number }[] = []; + for (let i = 0; i < Math.floor(ary.length / 10); i++) { + const option = randomOf(ary); + options.push({ + option: option, + score: funkyFactor(basis, option), + }); + } + options.sort((a, b) => { + return a.score < b.score ? -1 : 1; + }); + return options[0].option; +} + +export function randomGameName() { + const synonym = randomOf(conflictSynonyms); + const adjective = randomOfFunky(synonym, adjectives); + const noun = randomOfFunky(adjective, nouns); + return ( + "The " + + capitalize(synonym) + + " of the " + + capitalize(adjective) + + " " + + capitalize(noun) + ); +} /** * Formats an order object into a human-readable string. From 7f7a1b1ea69bfeb4791ab4a235c3de05c0952e03 Mon Sep 17 00:00:00 2001 From: John McDowell Date: Fri, 14 Feb 2025 17:02:08 +0000 Subject: [PATCH 64/69] Add GameMenu and JoinLeaveButton components; update game detail context and screens --- src/Router.tsx | 43 +++++- src/components/game-card.tsx | 140 ++---------------- src/components/game-join-leave-button.tsx | 93 ++++++++++++ .../game-menu.tsx} | 34 ++++- src/components/index.ts | 1 + .../game-detail-context-provider.tsx | 4 +- src/screens/desktop/game-detail-layout.tsx | 61 ++++---- .../desktop/home-secondary-screen-layout.tsx | 27 +++- .../game-detail-primary-screen-layout.tsx | 10 +- 9 files changed, 229 insertions(+), 184 deletions(-) create mode 100644 src/components/game-join-leave-button.tsx rename src/{screens/game-detail-menu.tsx => components/game-menu.tsx} (65%) diff --git a/src/Router.tsx b/src/Router.tsx index b0f545c7..2a0b5f52 100644 --- a/src/Router.tsx +++ b/src/Router.tsx @@ -29,6 +29,7 @@ import { CreateChannelAction, CreateChannelTetxField, CreateChannelContextProvider, + GameMenu, } from "./components"; import { ChannelContextProvider } from "./context/channel-context"; import { PhaseSelect } from "./components/phase-select"; @@ -82,10 +83,23 @@ const Router: React.FC = () => { path="game-info/:gameId" element={ - navigate("/")} - /> + {(gameId) => ( + navigate("/")} + secondaryAction={ + + navigate(`/game-info/${gameId}`) + } + onClickPlayerInfo={(navigate) => + navigate(`/player-info/${gameId}`) + } + /> + } + /> + )} } > @@ -95,10 +109,23 @@ const Router: React.FC = () => { path="player-info/:gameId" element={ - navigate("/")} - /> + {(gameId) => ( + + navigate(`/game-info/${gameId}`) + } + onClickPlayerInfo={(navigate) => + navigate(`/player-info/${gameId}`) + } + /> + } + onNavigateBack={(navigate) => navigate("/")} + /> + )} } > diff --git a/src/components/game-card.tsx b/src/components/game-card.tsx index f09c9f34..eeaf6549 100644 --- a/src/components/game-card.tsx +++ b/src/components/game-card.tsx @@ -2,32 +2,16 @@ import React from "react"; import { Avatar, Button, - IconButton, Link, ListItem, ListItemAvatar, ListItemText, - Menu, - MenuItem, Stack, Typography, } from "@mui/material"; -import { - MoreHoriz as MenuIcon, - Info as InfoIcon, - Person as PlayerInfoIcon, - Add as JoinGameIcon, - Remove as LeaveGameIcon, - Share as ShareIcon, -} from "@mui/icons-material"; import { useNavigate } from "react-router"; -import { - actions, - service, - useJoinGameMutation, - useLeaveGameMutation, -} from "../common"; -import { useDispatch } from "react-redux"; +import { service } from "../common"; +import { GameMenu } from "./game-menu"; const styles: Styles = { listItem: (theme) => ({ @@ -59,56 +43,17 @@ const styles: Styles = { }, }; -const useGameCard = ( - game: (typeof service.endpoints.listGames.Types.ResultType)[number] -) => { - const dispatch = useDispatch(); - const [joinGame, joinGameMutation] = useJoinGameMutation(game.ID); - const [leaveGame, leaveGameMutation] = useLeaveGameMutation(game.ID); - - const isSubmitting = - joinGameMutation.isLoading || leaveGameMutation.isLoading; - - const handleShare = () => { - navigator.clipboard.writeText( - `${window.location.origin}/game-info/${game.ID}` - ); - dispatch(actions.setFeedback({ message: "Link copied to clipboard" })); - }; - - return { joinGame, leaveGame, isSubmitting, handleShare }; -}; - const GameCard: React.FC<{ game: (typeof service.endpoints.listGames.Types.ResultType)[number]; }> = ({ game }) => { const navigate = useNavigate(); - const { joinGame, leaveGame, isSubmitting, handleShare } = useGameCard(game); - - const [anchorEl, setAnchorEl] = React.useState(null); - - const handleMenuOpen = (event: React.MouseEvent) => { - setAnchorEl(event.currentTarget); - }; - - const handleMenuClose = () => { - setAnchorEl(null); - }; const handleClickGameInfo = () => { navigate(`/game-info/${game.ID}`); }; - const handleClickPlayerInfo = (userId: string) => { - navigate(`/player-info/${userId}`); - }; - - const handleJoinGame = async () => { - await joinGame(); - }; - - const handleLeaveGame = async () => { - await leaveGame(); + const handleClickPlayerInfo = () => { + navigate(`/player-info/${game.ID}`); }; const handleClickGame = () => { @@ -123,71 +68,11 @@ const GameCard: React.FC<{ - - - -

- { - handleClickGameInfo(); - handleMenuClose(); - }} - disabled={isSubmitting} - > - - Game info - - { - handleClickPlayerInfo(game.ID); - handleMenuClose(); - }} - disabled={isSubmitting} - > - - Player info - - {game.canJoin && ( - { - await handleJoinGame(); - handleMenuClose(); - }} - disabled={isSubmitting} - > - - Join game - - )} - {game.canLeave && ( - { - await handleLeaveGame(); - handleMenuClose(); - }} - disabled={isSubmitting} - > - - Leave game - - )} - { - handleShare(); - handleMenuClose(); - }} - disabled={isSubmitting} - > - - Share - - - + } > @@ -212,12 +97,7 @@ const GameCard: React.FC<{ {game.Variant} {game.PhaseLengthMinutes} -