From acae344da37d62ccba17dd4fb5351db314d4a229 Mon Sep 17 00:00:00 2001 From: crssstha Date: Fri, 10 Apr 2026 14:13:17 +0545 Subject: [PATCH 01/13] feat: navbar and link component --- .github/pull_request_template.md | 24 +++ .github/workflow/ci.yml | 64 ++++++++ app/App.css | 0 app/Root/config/routes.ts | 51 ++++++ app/Root/hooks/useRouteMatching.tsx | 39 +++++ app/Root/index.tsx | 16 +- app/components/Footer/index.tsx | 192 +++++++++++++++++++++++ app/components/Footer/styles.module.css | 15 ++ app/components/Link/index.tsx | 134 ++++++++++++++++ app/components/Link/styles.module.css | 13 ++ app/components/NavLink/index.tsx | 74 +++++++++ app/components/NavLink/styles.module.css | 11 ++ app/components/Navbar/index.tsx | 121 ++++++++++++++ app/components/Navbar/styles.module.css | 19 +++ app/components/Page/index.tsx | 123 +++++++++++++++ app/components/Page/styles.module.css | 29 ++++ app/contexts/UserContext.ts | 9 +- app/index.css | 36 +++++ app/resources/image/logo.png | Bin 0 -> 87120 bytes app/views/Home/index.tsx | 61 ++++++- app/views/PublicLayout/index.tsx | 6 +- app/views/RootLayout/index.tsx | 58 ++----- app/views/RootLayout/styles.module.css | 3 + package.json | 2 + stylelint.config.js | 1 - 25 files changed, 1046 insertions(+), 55 deletions(-) create mode 100644 .github/pull_request_template.md create mode 100644 .github/workflow/ci.yml delete mode 100644 app/App.css create mode 100644 app/Root/hooks/useRouteMatching.tsx create mode 100644 app/components/Footer/index.tsx create mode 100644 app/components/Footer/styles.module.css create mode 100644 app/components/Link/index.tsx create mode 100644 app/components/Link/styles.module.css create mode 100644 app/components/NavLink/index.tsx create mode 100644 app/components/NavLink/styles.module.css create mode 100644 app/components/Navbar/index.tsx create mode 100644 app/components/Navbar/styles.module.css create mode 100644 app/components/Page/index.tsx create mode 100644 app/components/Page/styles.module.css create mode 100644 app/resources/image/logo.png diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..d167467 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,24 @@ +- Addresses XXX +- Depends on XXX + +## Changes + +- Detailed list or prose of changes +- Breaking changes +- Changes to configurations + +## This PR doesn't introduce any + +- [ ] temporary files, auto-generated files or secret keys +- [ ] build works +- [ ] eslint issues +- [ ] typescript issues +- [ ] codegen errors +- [ ] `console.log` meant for debugging +- [ ] typos +- [ ] unwanted comments +- [ ] conflict markers + +## This PR includes + +- [ ] Translation \ No newline at end of file diff --git a/.github/workflow/ci.yml b/.github/workflow/ci.yml new file mode 100644 index 0000000..2941fdd --- /dev/null +++ b/.github/workflow/ci.yml @@ -0,0 +1,64 @@ +name: CI + +on: + pull_request: + push: + branches: + - "main" + +env: + APP_GRAPHQL_CODEGEN_ENDPOINT: "./backend/schema.graphql" + APP_GRAPHQL_ENDPOINT: "http://web:8000/graphql/" + GITHUB_WORKFLOW: true + +jobs: + lint: + name: Lint + runs-on: ubuntu-latest + env: + PIPELINE_TYPE: ci + steps: + - uses: actions/checkout@v4 + with: + submodules: true + - name: Install pnpm + run: npm install -g pnpm + + - uses: actions/setup-node@v4 + with: + node-version: "22.x" + cache: "pnpm" + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Lint + run: pnpm lint + build: + name: Build + needs: [lint] + runs-on: ubuntu-latest + env: + PIPELINE_TYPE: ci + steps: + - uses: actions/checkout@v4 + with: + submodules: true + + - uses: pnpm/action-setup@v4 + name: Install pnpm + + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: "22.x" + cache: "pnpm" + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Generate Type + run: pnpm generate:type + + - name: Build + run: pnpm build \ No newline at end of file diff --git a/app/App.css b/app/App.css deleted file mode 100644 index e69de29..0000000 diff --git a/app/Root/config/routes.ts b/app/Root/config/routes.ts index fca3183..e53f31b 100644 --- a/app/Root/config/routes.ts +++ b/app/Root/config/routes.ts @@ -11,11 +11,62 @@ const home: RouteConfig = { index: true, path: '/', load: () => import('#views/Home'), + visibility: 'is-anything', +}; + +const preparedness: RouteConfig = { + index: true, + path: '/preparedness', + load: () => import('#views/Home'), + visibility: 'is-anything', +}; +const dataAndReport: RouteConfig = { + index: true, + path: '/data-and-report', + load: () => import('#views/Home'), + visibility: 'is-anything', +}; +const capacityAndResources: RouteConfig = { + index: true, + path: '/capacity-and-resources', + load: () => import('#views/Home'), + visibility: 'is-anything', +}; +const ourWork: RouteConfig = { + index: true, + path: '/our-work', + load: () => import('#views/Home'), + visibility: 'is-anything', +}; +const galleries: RouteConfig = { + index: true, + path: '/galleries', + load: () => import('#views/Home'), visibility: 'is-authenticated', }; +const termsAndConditions: RouteConfig = { + index: true, + path: '/terms-and-conditions', + load: () => import('#views/Home'), + visibility: 'is-anything', +}; +const cookie: RouteConfig = { + index: true, + path: '/cookies-policy', + load: () => import('#views/Home'), + visibility: 'is-anything', +}; + const routes = { home, + ourWork, + preparedness, + dataAndReport, + galleries, + capacityAndResources, + termsAndConditions, + cookie }; diff --git a/app/Root/hooks/useRouteMatching.tsx b/app/Root/hooks/useRouteMatching.tsx new file mode 100644 index 0000000..0355604 --- /dev/null +++ b/app/Root/hooks/useRouteMatching.tsx @@ -0,0 +1,39 @@ +import { use } from 'react'; +import { generatePath } from 'react-router'; + +import UserContext from '#contexts/UserContext'; +import type { RouteKeys } from '#root/config/routes'; +import routes from '#root/config/routes'; + +export interface Attrs { + [key: string]: string | number | undefined; +} + +function useRouteMatching(routeKey: RouteKeys, attrs?: Attrs) { + const { authenticated } = use(UserContext); + + const route = routes[routeKey]; + + if(!route){ + return undefined; + } + + const { + visibility, + path, + } = route; + + if (visibility === 'is-not-authenticated' && authenticated) { + return undefined; + } + + if (visibility === 'is-authenticated' && !authenticated) { + return undefined; + } + + return { + to: generatePath(path ?? '/', { ...attrs }), + }; +} + +export default useRouteMatching; diff --git a/app/Root/index.tsx b/app/Root/index.tsx index 2a0a687..611e046 100644 --- a/app/Root/index.tsx +++ b/app/Root/index.tsx @@ -1,4 +1,7 @@ -import { useState } from "react" +import { + Suspense, + useState +} from "react" import { Cookies } from 'react-cookie'; import { Outlet } from 'react-router'; import { AlertContainer } from '@ifrc-go/ui'; @@ -11,10 +14,9 @@ import { } from 'urql'; import UserContext, { type UserContextInterface } from '#contexts/UserContext'; +import type { MeQuery } from "#generated/types/graphql"; import useAlertContextProviderValue from "#hooks/useAlertContextProviderValue"; -import type { User } from './types/user'; - const COOKIE_NAME = `ERCS-${import.meta.env.APP_ENVIRONMENT}-CSRFTOKEN`; const GRAPHQL_ENDPOINT = `${import.meta.env.APP_GRAPHQL_ENDPOINT}/graphql/`; @@ -27,7 +29,7 @@ const gqlClient = new Client({ ], fetchOptions: () => ({ headers: { - 'X-CSRFToken': cookies.get(COOKIE_NAME) || "taWf0Spres9M7HxChROyrQjTewfNgBds" , + 'X-CSRFToken': cookies.get(COOKIE_NAME), }, credentials: 'include', }), @@ -36,7 +38,7 @@ const gqlClient = new Client({ }); function Root() { - const [user, setUser] = useState(); + const [user, setUser] = useState(); const authenticated = !!user; const userContext: UserContextInterface = { authenticated, @@ -51,7 +53,9 @@ function Root() { - + + + diff --git a/app/components/Footer/index.tsx b/app/components/Footer/index.tsx new file mode 100644 index 0000000..95d6734 --- /dev/null +++ b/app/components/Footer/index.tsx @@ -0,0 +1,192 @@ +import { + SocialFacebookIcon, + SocialMediumIcon, + SocialYoutubeIcon, +} from '@ifrc-go/icons'; +import { + Container, + ListView, + PageContainer, +} from '@ifrc-go/ui'; +import { _cs } from '@togglecorp/fujs'; + +import Link from '#components/Link'; +; +import styles from './styles.module.css'; + +const date = new Date(); +const year = date.getFullYear(); + +interface Props { + className?: string; +} + +function GlobalFooter(props: Props) { + const { + className, + } = props; + return ( + + + + +
+ ERCS EOC is a Ethiopian Red Cross platform to connect + information on emergency + needs with the right response. +
+
+ © IFRC {year} +
+
+
+ + + + ifrc.org + + + rcrcsims.org + + + data.ifrc.org + + + + + + + Cookie Policy + + + Terms and Conditions + + + + + + + Dataset + + + Project Mapping + + + Online Interactive + + + + + + + im@ifrc.org + + + + + + + + + + + + + + +
+
+ ); +} + +export default GlobalFooter; \ No newline at end of file diff --git a/app/components/Footer/styles.module.css b/app/components/Footer/styles.module.css new file mode 100644 index 0000000..a0002d0 --- /dev/null +++ b/app/components/Footer/styles.module.css @@ -0,0 +1,15 @@ +.footer { + background-color: var(--go-ui-color-primary-gray); + + * { + color: var(--go-ui-color-text-on-dark); + } + + .social-icon { + font-size: var(--go-ui-height-social-icon); + } + + @media print { + display: none; + } +} \ No newline at end of file diff --git a/app/components/Link/index.tsx b/app/components/Link/index.tsx new file mode 100644 index 0000000..987d9e2 --- /dev/null +++ b/app/components/Link/index.tsx @@ -0,0 +1,134 @@ +import { + Link as RouterLink, + type LinkProps, +} from 'react-router'; +import { + ArrowRightUpLineIcon, + ChevronRightLineIcon +} from '@ifrc-go/icons' +import { + ButtonLayout, + type ButtonLayoutProps +} from '@ifrc-go/ui' +import { _cs } from '@togglecorp/fujs'; + +import type { RouteKeys } from '#root/config/routes'; +import useRouteMatching, { type Attrs } from '#root/hooks/useRouteMatching'; + +import styles from './styles.module.css'; + +interface InternalLinkProps extends Omit { + external?: never; + href?: never; + route: RouteKeys; + attrs?: Attrs +} + +interface ExternalLinkProps extends Omit, 'href'> { + external: true; + href: string | undefined | null; + route?: never; + attrs?: never +} + + +export type CommonLinkProps = ButtonLayoutProps & { + withLinkIcon?: boolean + withUnderline?: boolean +}; + +export type Props = CommonLinkProps & (InternalLinkProps | ExternalLinkProps); + + +function Link(props: Props) { + const { + route, + attrs, + className, + before, + children, + after, + childrenContainerClassName, + colorVariant = 'text', + styleVariant = 'action', + withoutPadding, + spacing, + external, + href, + withEllipsizedContent, + spacingOffset, + withFullWidth, + disabled, + textSize, + withLinkIcon, + withUnderline, + ...otherProps + } = props; + + const routeData = useRouteMatching(route as RouteKeys, attrs); + const content = ( + + {after} + {withLinkIcon && external && ( + + )} + {withLinkIcon && !external && ( + + )} + + )} + > + {children} + + ) + + if (external) { + return ( + + {content} + + ); + } + + if (!routeData) { + return null; + } + + return ( + + {content} + + ); +} + +export default Link; diff --git a/app/components/Link/styles.module.css b/app/components/Link/styles.module.css new file mode 100644 index 0000000..80e920d --- /dev/null +++ b/app/components/Link/styles.module.css @@ -0,0 +1,13 @@ +.link { + display: contents; + + .layout { + &.with-underline { + text-decoration: underline; + } + } + + .link-icon { + font-size: var(--go-ui-height-icon-multiplier); + } +} \ No newline at end of file diff --git a/app/components/NavLink/index.tsx b/app/components/NavLink/index.tsx new file mode 100644 index 0000000..4bc3e25 --- /dev/null +++ b/app/components/NavLink/index.tsx @@ -0,0 +1,74 @@ +import { + NavLink as RouterNavLink, + type NavLinkProps, +} from 'react-router'; +import { + ButtonLayout, + type ButtonLayoutProps +} from '@ifrc-go/ui' +import { _cs } from '@togglecorp/fujs'; + +import type { RouteKeys } from '#root/config/routes'; +import useRouteMatching, { type Attrs } from '#root/hooks/useRouteMatching'; + +import styles from './styles.module.css'; + +export type Props = Omit & ButtonLayoutProps & { + route: RouteKeys; + attrs?: Attrs; + activeClassName?: string; +}; + +function NavLink(props: Props) { + const { + route, + attrs, + className, + before, + children, + after, + childrenContainerClassName, + colorVariant = 'text', + styleVariant = 'action', + withoutPadding, + spacing, + activeClassName, + ...otherProps + } = props; + + const routeData = useRouteMatching(route, attrs); + if (!routeData) { + return null; + } + + return ( + _cs( + styles.smartNavLink, + isActive && styles.active, + isActive && activeClassName, + )} + > + + {children} + + + ); +} + +export default NavLink; diff --git a/app/components/NavLink/styles.module.css b/app/components/NavLink/styles.module.css new file mode 100644 index 0000000..3bb32ba --- /dev/null +++ b/app/components/NavLink/styles.module.css @@ -0,0 +1,11 @@ +.smart-nav-link { + display: contents; + + &.active { + .button-layout { + opacity: 1; + color: var(--go-ui-color-red ); + } + } + +} diff --git a/app/components/Navbar/index.tsx b/app/components/Navbar/index.tsx new file mode 100644 index 0000000..a4ae705 --- /dev/null +++ b/app/components/Navbar/index.tsx @@ -0,0 +1,121 @@ + +import { use, } from "react"; +import { + Button, + DropdownMenu, + Heading, + Image, + ListView, + NavigationTabList, + PageContainer +} from "@ifrc-go/ui" + +import Link from "#components/Link"; +import NavLink from "#components/NavLink"; +import UserContext from "#contexts/UserContext"; +import Logo from "#resources/image/logo.png" + +import styles from './styles.module.css'; + + +const Navbar = () => { + const { authenticated } = use(UserContext); + + return ( + + ) +} + +export default Navbar \ No newline at end of file diff --git a/app/components/Navbar/styles.module.css b/app/components/Navbar/styles.module.css new file mode 100644 index 0000000..45d86f6 --- /dev/null +++ b/app/components/Navbar/styles.module.css @@ -0,0 +1,19 @@ +.navbar { + border-bottom: var(--go-ui-width-separator-thin) solid var(--go-ui-color-separator); + background-color: var(--go-ui-color-white); + .top { + border-bottom: var(--go-ui-width-separator-thin) solid var(--go-ui-color-primary-red); + .top-content { + padding: var(--go-ui-spacing-sm) var(--go-ui-spacing-lg); + .icon { + width: var(--go-ui-height-brand-icon); + height: var(--go-ui-height-brand-icon); + } + } + } + + .bottom { + padding: var(--go-ui-spacing-sm) var(--go-ui-spacing-lg); + } +} + diff --git a/app/components/Page/index.tsx b/app/components/Page/index.tsx new file mode 100644 index 0000000..98dc700 --- /dev/null +++ b/app/components/Page/index.tsx @@ -0,0 +1,123 @@ +import { + type RefObject, + useEffect, +} from 'react'; +import { + ListView, + PageContainer, + PageHeader, +} from '@ifrc-go/ui'; +import { + _cs, + isDefined, + isNotDefined, +} from '@togglecorp/fujs'; + +import styles from './styles.module.css'; + + +interface Props { + className?: string; + title?: string; + actions?: React.ReactNode; + heading?: React.ReactNode; + description?: React.ReactNode; + mainSectionContainerClassName?: string; + breadCrumbs?: React.ReactNode; + info?: React.ReactNode; + children?: React.ReactNode; + mainSectionClassName?: string; + wikiLink?: React.ReactNode; + withBackgroundColorInMainSection?: boolean; + elementRef?: RefObject; + blockingContent?: React.ReactNode; + beforeHeaderContent?: React.ReactNode; +} + +function Page(props: Props) { + const { + className, + title, + actions, + heading, + description, + breadCrumbs, + info, + children, + mainSectionContainerClassName, + mainSectionClassName, + wikiLink, + withBackgroundColorInMainSection, + elementRef, + blockingContent, + beforeHeaderContent, + } = props; + + + useEffect(() => { + if (isDefined(title)) { + document.title = title; + } + }, [title]); + + const showPageContainer = !!breadCrumbs + || !!heading + || !!description + || !!info + || !!actions + || !!wikiLink; + + return ( +
+ {beforeHeaderContent && ( + + {beforeHeaderContent} + + )} + {isNotDefined(blockingContent) && showPageContainer && ( + + )} + {isNotDefined(blockingContent) && ( + + + { children } + + + )} +
+ ); +} + +export default Page; + + diff --git a/app/components/Page/styles.module.css b/app/components/Page/styles.module.css new file mode 100644 index 0000000..bfd24da --- /dev/null +++ b/app/components/Page/styles.module.css @@ -0,0 +1,29 @@ +.page { + display: flex; + flex-direction: column; + flex-grow: 1; + + .machine-translation-warning { + background-color: var(--go-ui-color-warning); + padding: var(--go-ui-spacing-sm); + text-align: center; + color: var(--go-ui-color-white); + } + + .page-header { + background-color: var(--go-ui-color-background); + } + + .main-section-container { + flex-grow: 1; + background-color: var(--go-ui-color-white); + + &.with-background-color { + background-color: var(--go-ui-color-background); + } + + .main-section { + padding: var(--go-ui-spacing-4xl) var(--go-ui-spacing-lg); + } + } +} \ No newline at end of file diff --git a/app/contexts/UserContext.ts b/app/contexts/UserContext.ts index c8799dd..3c6e480 100644 --- a/app/contexts/UserContext.ts +++ b/app/contexts/UserContext.ts @@ -1,10 +1,11 @@ -import type { User } from '#root/types/user'; import { createContext } from 'react'; +import type { MeQuery } from '#generated/types/graphql'; + export interface UserContextInterface { - user: User | undefined; - setUser: React.Dispatch>; + user: MeQuery["me"] | undefined; + setUser: React.Dispatch>; authenticated: boolean, } @@ -12,7 +13,7 @@ const UserContext = createContext({ authenticated: false, user: undefined, setUser: (value: unknown) => { - // eslint-disable-next-line no-console + console.error('setUser called on UserContext without a provider', value); }, }); diff --git a/app/index.css b/app/index.css index e69de29..a0e2996 100644 --- a/app/index.css +++ b/app/index.css @@ -0,0 +1,36 @@ +html, +body { + max-width: 100vw; + overflow-x: hidden; +} + +body { + line-height: var(--go-ui-line-height-md); + color: var(--go-ui-color-text); + font-family: var(--go-ui-font-family-sans-serif); + font-size: var(--go-ui-font-size-md); + font-weight: var(--go-ui-font-weight-normal); +} +h1, +h2, +h3, +h4, +h5, +h6 { + line-height: 1.5; +} + +* { + box-sizing: border-box; + margin: 0; + padding: 0; +} + +p { + line-height: 1.5; +} + +a { + text-decoration: none; + color: inherit; +} \ No newline at end of file diff --git a/app/resources/image/logo.png b/app/resources/image/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..abe10469197227678f73c7fc53180e177b6fdaed GIT binary patch literal 87120 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

*769|+o(&WQOce}@tcm88rHr*-r{tMpu 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 a=&SADdZ)Gm(_bkx)c$1TW!+v=4M2E~rJ+HD`# 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 { + const keyFigures = ( + + } + value={12} + valueType="number" + size="lg" + label="Emergencies in last 30 days" + /> + } + value={250} + valueType="number" + size="lg" + label="People reached in last 30 days" + /> + } + value={18} + valueType="number" + size="lg" + valueOptions={{ compact: true }} + label="population Affected in last 30 days" + /> + } + value={18} + valueType="number" + label="People in Need in last 30 days" + size="lg" + /> + + ); return ( -

+ + {keyFigures} + + )} + > + ) } diff --git a/app/views/PublicLayout/index.tsx b/app/views/PublicLayout/index.tsx index 75c8674..4085dbe 100644 --- a/app/views/PublicLayout/index.tsx +++ b/app/views/PublicLayout/index.tsx @@ -1,6 +1,10 @@ +import { Outlet } from "react-router"; + function PublicLayout() { return ( -
+ <> + + ); } diff --git a/app/views/RootLayout/index.tsx b/app/views/RootLayout/index.tsx index 9e4b680..1526b32 100644 --- a/app/views/RootLayout/index.tsx +++ b/app/views/RootLayout/index.tsx @@ -1,31 +1,23 @@ -// import { -// use, -// useEffect, -// useState, -// } from 'react'; import { use, useEffect, - useState } from 'react' import { Outlet } from 'react-router'; import { isDefined } from '@togglecorp/fujs'; import { gql } from 'urql'; +import GlobalFooter from '#components/Footer'; +import Navbar from '#components/Navbar'; import UserContext from '#contexts/UserContext'; -// import { isDefined } from '@togglecorp/fujs'; -// import { gql } from 'urql'; -// import PreloadMessage from '#components/PreloadMessage'; -// import UserContext from '#contexts/UserContext'; import { useMeQuery } from '#generated/types/graphql'; import styles from './styles.module.css'; -// const fetchHealth = fetch(`${import.meta.env.APP_GRAPHQL_ENDPOINT}/health-check/?format=json`, { -// method: 'GET', -// credentials: 'include', -// }) -// .then((res) => res.json()); +const fetchHealth = fetch(`${import.meta.env.APP_GRAPHQL_ENDPOINT}/health-check/?format=json`, { + method: 'GET', + credentials: 'include', +}) + .then((res) => res.json()); // eslint-disable-next-line @typescript-eslint/no-unused-vars const ME_QUERY = gql` @@ -44,44 +36,26 @@ const ME_QUERY = gql` `; function RootLayout() { + use(fetchHealth); const { setUser } = use(UserContext); - const [ready, setReady] = useState(false); - - // const healthCheck = use(fetchHealth); - const [{ fetching, data }] = useMeQuery(); useEffect(() => { - if ( fetching) { + if (fetching) { return; } if (isDefined(data?.me)) { - const fullName = data.me.fullName || ''; - const [firstName, ...lastNameParts] = fullName.split(' '); - const lastName = lastNameParts.join(' '); - setUser({ - ...data.me, - firstName, - lastName, - }); - } else { - setUser(undefined); - } - - // eslint-disable-next-line react-hooks/set-state-in-effect - setReady(true); + setUser(data.me); + } }, [ fetching, data, setUser]); - if (!ready) { - return ( -
- Checking user session... -
- ); - } return (
- + +
+ +
+
); } diff --git a/app/views/RootLayout/styles.module.css b/app/views/RootLayout/styles.module.css index abe04d7..54231a1 100644 --- a/app/views/RootLayout/styles.module.css +++ b/app/views/RootLayout/styles.module.css @@ -4,4 +4,7 @@ flex-direction: column; height: 100vh; overflow: hidden; + .pageContent{ + flex-grow: 1; + } } diff --git a/package.json b/package.json index 7757bc8..b5cfcc5 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,8 @@ "build": "tsc -b && vite build", "lint": "eslint .", "preview": "vite preview", + "prelint": "pnpm generate:type", + "lint:css": "stylelint \"./app/**/*.css\"", "generate:type": "graphql-codegen --require dotenv/config --config codegen.ts" }, "dependencies": { diff --git a/stylelint.config.js b/stylelint.config.js index 4b4e399..a2125f7 100644 --- a/stylelint.config.js +++ b/stylelint.config.js @@ -1,6 +1,5 @@ import path from 'path'; -// eslint-disable-next-line no-undef const __filename = new URL(import.meta.url).pathname; const __dirname = path.dirname(__filename); From d7d003b5428532954c7629b89395059154ac2606 Mon Sep 17 00:00:00 2001 From: crssstha Date: Thu, 16 Apr 2026 15:30:32 +0545 Subject: [PATCH 02/13] feat(team/galleries): added team and galleries pages --- app/App.tsx | 30 ++- app/Root/config/routes.ts | 17 +- app/Root/hooks/useRouteMatching.tsx | 2 +- app/Root/index.tsx | 12 +- app/components/DropdownMenuItem/index.tsx | 136 ++++++++++++++ app/components/Footer/index.tsx | 10 +- app/components/Link/index.tsx | 32 ++-- app/components/NavLink/index.tsx | 4 +- app/components/Navbar/index.tsx | 75 +++++--- app/components/Page/index.tsx | 4 - app/contexts/UserContext.ts | 6 +- app/hooks/useFilterState.ts | 213 ++++++++++++++++++++++ app/index.css | 1 - app/main.tsx | 8 +- app/resources/image/logo.png | Bin 87120 -> 16608 bytes app/views/Galleries/index.tsx | 200 ++++++++++++++++++++ app/views/Galleries/styles.module.css | 23 +++ app/views/Home/index.tsx | 22 +-- app/views/OurWork/index.tsx | 57 ++++++ app/views/Preparedness/index.tsx | 12 ++ app/views/PrivateLayout/index.tsx | 6 +- app/views/PublicLayout/index.tsx | 6 +- app/views/RootLayout/index.tsx | 10 +- app/views/RootLayout/styles.module.css | 1 - app/views/Team/index.tsx | 173 ++++++++++++++++++ app/views/Team/styles.module.css | 11 ++ package.json | 1 + pnpm-lock.yaml | 16 ++ tsconfig.app.json | 2 +- vite.config.ts | 1 - 30 files changed, 975 insertions(+), 116 deletions(-) create mode 100644 app/components/DropdownMenuItem/index.tsx create mode 100644 app/hooks/useFilterState.ts create mode 100644 app/views/Galleries/index.tsx create mode 100644 app/views/Galleries/styles.module.css create mode 100644 app/views/OurWork/index.tsx create mode 100644 app/views/Preparedness/index.tsx create mode 100644 app/views/Team/index.tsx create mode 100644 app/views/Team/styles.module.css diff --git a/app/App.tsx b/app/App.tsx index dffadd1..e19254f 100644 --- a/app/App.tsx +++ b/app/App.tsx @@ -1,22 +1,22 @@ import { createBrowserRouter, - RouterProvider -} from "react-router" + RouterProvider, +} from 'react-router'; -import type { RouteConfig } from "#root/config/routes.ts"; -import routes from "#root/config/routes.ts"; -import PageError from "#views/PageError/index.tsx"; +import type { RouteConfig } from '#root/config/routes.ts'; +import routes from '#root/config/routes.ts'; +import PageError from '#views/PageError/index.tsx'; const privateRoutes = Object.values(routes).filter( - ({ visibility }) => visibility === "is-authenticated", + ({ visibility }) => visibility === 'is-authenticated', ); const publicRoutes = Object.values(routes).filter( - ({ visibility }) => visibility === "is-anything", + ({ visibility }) => visibility === 'is-anything', ); const guestRoutes = Object.values(routes).filter( - ({ visibility }) => visibility === "is-not-authenticated", + ({ visibility }) => visibility === 'is-not-authenticated', ); function mapRoute(routeConfig: RouteConfig) { @@ -34,37 +34,33 @@ const router = createBrowserRouter([ { errorElement: , lazy: async () => { - const { default: Component } = await import("./Root/index.tsx"); + const { default: Component } = await import('./Root/index.tsx'); return { Component }; }, children: [ { lazy: async () => { - const { default: Component } = - await import("./views/RootLayout/index.tsx"); + const { default: Component } = await import('./views/RootLayout/index.tsx'); return { Component }; }, children: [ { lazy: async () => { - const { default: Component } = - await import("./views/GuestLayout/index.tsx"); + const { default: Component } = await import('./views/GuestLayout/index.tsx'); return { Component }; }, children: guestRoutes.map(mapRoute), }, { lazy: async () => { - const { default: Component } = - await import("./views/PrivateLayout/index.tsx"); + const { default: Component } = await import('./views/PrivateLayout/index.tsx'); return { Component }; }, children: privateRoutes.map(mapRoute), }, { lazy: async () => { - const { default: Component } = - await import("./views/PublicLayout/index.tsx"); + const { default: Component } = await import('./views/PublicLayout/index.tsx'); return { Component }; }, children: publicRoutes.map(mapRoute), diff --git a/app/Root/config/routes.ts b/app/Root/config/routes.ts index e53f31b..3eecfd6 100644 --- a/app/Root/config/routes.ts +++ b/app/Root/config/routes.ts @@ -17,7 +17,7 @@ const home: RouteConfig = { const preparedness: RouteConfig = { index: true, path: '/preparedness', - load: () => import('#views/Home'), + load: () => import('#views/Preparedness'), visibility: 'is-anything', }; const dataAndReport: RouteConfig = { @@ -35,13 +35,13 @@ const capacityAndResources: RouteConfig = { const ourWork: RouteConfig = { index: true, path: '/our-work', - load: () => import('#views/Home'), + load: () => import('#views/OurWork'), visibility: 'is-anything', }; const galleries: RouteConfig = { index: true, path: '/galleries', - load: () => import('#views/Home'), + load: () => import('#views/Galleries'), visibility: 'is-authenticated', }; @@ -56,6 +56,13 @@ const cookie: RouteConfig = { path: '/cookies-policy', load: () => import('#views/Home'), visibility: 'is-anything', + +}; +const team: RouteConfig = { + index: true, + path: '/team/:id', + load: () => import('#views/Team'), + visibility: 'is-authenticated', }; const routes = { @@ -66,10 +73,10 @@ const routes = { galleries, capacityAndResources, termsAndConditions, - cookie + cookie, + team, }; - export type RouteKeys = keyof typeof routes; export default routes; diff --git a/app/Root/hooks/useRouteMatching.tsx b/app/Root/hooks/useRouteMatching.tsx index 0355604..6adf2aa 100644 --- a/app/Root/hooks/useRouteMatching.tsx +++ b/app/Root/hooks/useRouteMatching.tsx @@ -14,7 +14,7 @@ function useRouteMatching(routeKey: RouteKeys, attrs?: Attrs) { const route = routes[routeKey]; - if(!route){ + if (!route) { return undefined; } diff --git a/app/Root/index.tsx b/app/Root/index.tsx index 611e046..eb9d8ca 100644 --- a/app/Root/index.tsx +++ b/app/Root/index.tsx @@ -1,7 +1,7 @@ import { Suspense, - useState -} from "react" + useState, +} from 'react'; import { Cookies } from 'react-cookie'; import { Outlet } from 'react-router'; import { AlertContainer } from '@ifrc-go/ui'; @@ -14,8 +14,8 @@ import { } from 'urql'; import UserContext, { type UserContextInterface } from '#contexts/UserContext'; -import type { MeQuery } from "#generated/types/graphql"; -import useAlertContextProviderValue from "#hooks/useAlertContextProviderValue"; +import type { MeQuery } from '#generated/types/graphql'; +import useAlertContextProviderValue from '#hooks/useAlertContextProviderValue'; const COOKIE_NAME = `ERCS-${import.meta.env.APP_ENVIRONMENT}-CSRFTOKEN`; const GRAPHQL_ENDPOINT = `${import.meta.env.APP_GRAPHQL_ENDPOINT}/graphql/`; @@ -38,14 +38,14 @@ const gqlClient = new Client({ }); function Root() { - const [user, setUser] = useState(); + const [user, setUser] = useState(); const authenticated = !!user; const userContext: UserContextInterface = { authenticated, user, setUser, - } + }; const alertContextValue = useAlertContextProviderValue(); return ( diff --git a/app/components/DropdownMenuItem/index.tsx b/app/components/DropdownMenuItem/index.tsx new file mode 100644 index 0000000..a17730a --- /dev/null +++ b/app/components/DropdownMenuItem/index.tsx @@ -0,0 +1,136 @@ +import { + useCallback, + useContext, +} from 'react'; +import { + Button, + type ButtonProps, + ConfirmButton, + type ConfirmButtonProps, +} from '@ifrc-go/ui'; +import { DropdownMenuContext } from '@ifrc-go/ui/contexts'; +import { isDefined } from '@togglecorp/fujs'; + +import Link, { type Props as LinkProps } from '#components/Link'; + +type CommonProp = { + persist?: boolean; + withoutFullWidth?: boolean; +} + +type ButtonTypeProps = Omit, 'type'> & { + type: 'button'; +} + +type LinkTypeProps = LinkProps & { + type: 'link'; + onClick?: never; +} + +type ConfirmButtonTypeProps = Omit, 'type'> & { + type: 'confirm-button', +} + +type Props = CommonProp & ( + ButtonTypeProps | LinkTypeProps | ConfirmButtonTypeProps +); + +function DropdownMenuItem(props: Props) { + const { + persist = false, + onClick, + withoutFullWidth, + ...remainingProps + } = props; + + const { setShowDropdown } = useContext(DropdownMenuContext); + + const handleLinkClick = useCallback( + () => { + if (!persist) { + setShowDropdown(false); + } + // TODO: maybe add onClick here? + }, + [setShowDropdown, persist], + ); + + const handleButtonClick = useCallback( + (name: NAME, e: React.MouseEvent) => { + if (remainingProps.type !== 'link') { + if (!persist) { + setShowDropdown(false); + } + + if (isDefined(onClick)) { + onClick(name, e); + } + } + }, + [setShowDropdown, persist, onClick, remainingProps.type], + ); + + if (remainingProps.type === 'link') { + const { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + type: _, + styleVariant = 'transparent', + colorVariant = 'text', + children, + ...otherProps + } = remainingProps; + + return ( + + {children} + + ); + } + + if (remainingProps.type === 'button') { + const { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + type: _, + styleVariant = 'transparent', + ...otherProps + } = remainingProps; + + return ( +
- ) - } + )} { > Capacity & Resources - {authenticated && - - Cyrus Shrestha - - } + {authenticated + && ( + + {data?.teams.results.map((info) => ( + + {info.name} + + ))} + + + )} @@ -115,7 +142,7 @@ const Navbar = () => { - ) + ); } -export default Navbar \ No newline at end of file +export default Navbar; diff --git a/app/components/Page/index.tsx b/app/components/Page/index.tsx index 98dc700..7877ae3 100644 --- a/app/components/Page/index.tsx +++ b/app/components/Page/index.tsx @@ -15,7 +15,6 @@ import { import styles from './styles.module.css'; - interface Props { className?: string; title?: string; @@ -53,7 +52,6 @@ function Page(props: Props) { beforeHeaderContent, } = props; - useEffect(() => { if (isDefined(title)) { document.title = title; @@ -119,5 +117,3 @@ function Page(props: Props) { } export default Page; - - diff --git a/app/contexts/UserContext.ts b/app/contexts/UserContext.ts index 3c6e480..6f9e36e 100644 --- a/app/contexts/UserContext.ts +++ b/app/contexts/UserContext.ts @@ -2,10 +2,9 @@ import { createContext } from 'react'; import type { MeQuery } from '#generated/types/graphql'; - export interface UserContextInterface { - user: MeQuery["me"] | undefined; - setUser: React.Dispatch>; + user: MeQuery['me'] | undefined; + setUser: React.Dispatch>; authenticated: boolean, } @@ -13,7 +12,6 @@ const UserContext = createContext({ authenticated: false, user: undefined, setUser: (value: unknown) => { - console.error('setUser called on UserContext without a provider', value); }, }); diff --git a/app/hooks/useFilterState.ts b/app/hooks/useFilterState.ts new file mode 100644 index 0000000..14a62d9 --- /dev/null +++ b/app/hooks/useFilterState.ts @@ -0,0 +1,213 @@ +import { + type SetStateAction, + useCallback, + useMemo, + useReducer, +} from 'react'; +import { useDebouncedValue } from '@ifrc-go/ui/hooks'; +import { hasSomeDefinedValue } from '@ifrc-go/ui/utils'; +import { isNotDefined } from '@togglecorp/fujs'; +import { type EntriesAsList } from '@togglecorp/toggle-form'; + +type SortDirection = 'asc' | 'dsc'; +interface SortParameter { + name: string; + direction: SortDirection; +} +function getOrdering(sorting: SortParameter | undefined) { + if (isNotDefined(sorting)) { + return undefined; + } + if (sorting.direction === 'asc') { + return sorting.name; + } + return `-${sorting.name}`; +} + +interface ResetFilterAction { + type: 'reset-filter'; +} + +interface SetFilterAction { + type: 'set-filter'; + value: SetStateAction; +} + +interface SetPageAction { + type: 'set-page'; + value: number; +} + +interface SetOrderingAction { + type: 'set-ordering' + value: SetStateAction; +} + +type FilterActions = ( + ResetFilterAction + | SetFilterAction + | SetPageAction + | SetOrderingAction +); + +interface FilterState { + filter: FILTER, + ordering: SortParameter | undefined, + page: number, +} + +const defaultOrdering: SortParameter = { + name: 'id', + direction: 'dsc', +}; + +function useFilterState(options: { + filter: FILTER, + ordering?: SortParameter | undefined, + page?: number, + pageSize?: number, + debounceTime?: number, +}) { + const { + filter, + ordering = defaultOrdering, + page = 1, + pageSize = 10, + debounceTime = 200, + } = options; + + const [state, dispatch] = useReducer, [FilterActions]>( + (prevState, action) => { + if (action.type === 'reset-filter') { + return { + filter, + ordering, + page, + }; + } + if (action.type === 'set-filter') { + return { + ...prevState, + filter: typeof action.value === 'function' + ? action.value(prevState.filter) + : action.value, + page: 1, + }; + } + if (action.type === 'set-page') { + return { + ...prevState, + page: action.value, + }; + } + if (action.type === 'set-ordering') { + return { + ...prevState, + ordering: typeof action.value === 'function' + ? action.value(prevState.ordering) + : action.value, + page: 1, + }; + } + return prevState; + }, + { + filter, + ordering, + page, + }, + ); + + const setFilter = useCallback( + (value: SetStateAction) => { + dispatch({ + type: 'set-filter', + value, + }); + }, + [], + ); + + const resetFilter = useCallback( + () => { + dispatch({ type: 'reset-filter' }); + }, + [], + ); + + const setFilterField = useCallback( + (...args: EntriesAsList) => { + const [val, key] = args; + setFilter((oldFilterValue) => { + const newFilterValue = { + ...oldFilterValue, + [key]: val, + }; + return newFilterValue; + }); + }, + [setFilter], + ); + + const setPage = useCallback( + (value: number) => { + dispatch({ + type: 'set-page', + value, + }); + }, + [], + ); + const setOrdering = useCallback( + (value: SetStateAction) => { + dispatch({ + type: 'set-ordering', + value, + }); + }, + [], + ); + + const debouncedState = useDebouncedValue(state, debounceTime); + + const sortState = useMemo( + () => ({ + sorting: state.ordering, + setSorting: setOrdering, + }), + [state.ordering, setOrdering], + ); + + const filtered = useMemo( + () => hasSomeDefinedValue(debouncedState.filter), + [debouncedState.filter], + ); + const rawFiltered = useMemo( + () => hasSomeDefinedValue(state.filter), + [state.filter], + ); + + return { + rawFilter: state.filter, + rawFiltered, + + filter: debouncedState.filter, + filtered, + setFilter, + setFilterField, + + resetFilter, + + page: state.page, + offset: pageSize * (debouncedState.page - 1), + limit: pageSize, + setPage, + + rawOrdering: getOrdering(ordering), + ordering: getOrdering(debouncedState.ordering), + + sortState, + }; +} + +export default useFilterState; diff --git a/app/index.css b/app/index.css index a0e2996..bc348cf 100644 --- a/app/index.css +++ b/app/index.css @@ -1,7 +1,6 @@ html, body { max-width: 100vw; - overflow-x: hidden; } body { diff --git a/app/main.tsx b/app/main.tsx index c04cc59..9423c0a 100644 --- a/app/main.tsx +++ b/app/main.tsx @@ -1,13 +1,13 @@ import '@ifrc-go/ui/index.css'; import './index.css'; -import { StrictMode } from 'react' -import { createRoot } from 'react-dom/client' +import { StrictMode } from 'react'; +import { createRoot } from 'react-dom/client'; -import App from './App.tsx' +import App from './App.tsx'; createRoot(document.getElementById('root')!).render( , -) +); diff --git a/app/resources/image/logo.png b/app/resources/image/logo.png index abe10469197227678f73c7fc53180e177b6fdaed..214f901ef9b6a6a0ff99b6b85da4bcd2e4b05415 100644 GIT binary patch literal 16608 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

*769|+o(&WQOce}@tcm88rHr*-r{tMpu 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 a=&SADdZ)Gm(_bkx)c$1TW!+v=4M2E~rJ+HD`# zG>`Q(bbTgaxl@vyUzhQ{j-3~emSom_lq|VMOO5VcoU3wrKD*S-sl0Jt=p|_4+E`KUeT2m@sn(cZmzWcPOl5q0;&_#% zMlcFt|9_$Zpe(wmzcmg`jQpKtxIF39U8uSEX~q4}x1I!Q0#+dTG@jT}8n3sP5`&kV~cV>6A4F2w@hLqBEA=c#(y3OXrI56)fVd7iy zv(on=axh7M{ay&&3HAIx_|MR)A!YVybYbO+9wF384r6Pk$MazdyRjRa>aR_GR;ulg z7r0DcJME=NI|h^4-ypmkueO##$|@=N>V6egSjayY5nhrqt$i`FT?i)|9%eG~3f>PM zpdxB&YLGI#9%5es4L!%I215w`4@PV9b^Gl6G>N@jjZxRxD1Y?j5;+F##=yPBD+fZp zeLgl^TDx7uYbD{iVu7M!=cWvQ|CX8Wun4eQ6bPQVrS9g4Sj*{PHnwE3eyqXO zwi>^d32N1Fm|5`VnCGwJpu*6<(!*N!mZu~9`>oVJ^7j@L>?ZQtA;-Q3(@GWpicwaj zsoo!4mPdhaPpoucy31U0y6apJ*w{vkwAjCQYc-YJbQLEr#dYSg-~{c|y^ry^b)Q+q z6rqo#V|r#Uxa83{F9VZ$PX|VX9S38jKKed--TSmapw$>Z2G9D9L)0a5O3RYZV5zF# z)!|&+Wp*#yL{>z4?9;3q?XHM8!;qPq3v4>NJ+7?@IU)x&-t~E1lrij78hrqt96;T+ zsy!G!h>?Cwn|#WU#C~t=SwUcf+YV8RalaEZq7OR$C(arzFu8cV7vWruB(Xn}G&&KD z$$w;YAQApqj2z%d)3%lxAztuJWOYuJMX@Ss3BtJdZG@#Q!}*yJkh9Ld&b5!=<_Y?; z!}vKMz*NpBQ?WHP3mFl_XLEYKDF2p<)}y;rC;Q95W)Y@$cWdArq_Z?T%|fw1Qwjpr zm#+=3SXxdVV9V^M`=vJraZ1S#11xxX$paf77#TaOt@S)N)%1K1oo}ypJ6xc)BSLqF zay3Vb8lF#Fqg@X-$(Jsj$5NoCQNka0 zbFI3Tq!Y^igr0_oEE9c)V90OQ@v4Dk!=lOYh5D;1H8~@`AWp+<%bmL`a=XO@I>PVk z7me4qBx^;PK5L1DwrkbewwoYMwppX^ONot!8TIKO8$Lj^;quJcoOV7B3qE-bKeU`b z$HaCP^U-l|aOy;U^9Q0juGDb2%^V7*UUIq!gjx2ayL^KQx|o8@#*2S$W8b(rIg&pi ziT)<@U*28^QGe658GZJvoR9K%CIleCS!p#z&)s}UI~8eX==)fvQ_ptUF86!c>$Typ zx6q>WEPDzYF4j4g(s&_VRGteBfUSspbtS;b_6 z@K9L%McQXNj`GIZ3r_MMV2h`S#ju7}ttW41K8|mah84Ey5?gt?|;;*M9&XML(d}_tdgYA>W>QSN!-WyH&N+)ADw1DyUaOjJW~_c5)TuP z)n7)MKAyO;z18=<#5r!cBY8(7Z?JW-yA!-xHSai~SrMcoUIUE^K;!+T>k5sOrYc|k zldiTJdNY(Pe)uuR-ely(gq?yRyT7~bF~W^N_Q z#_*y0CO}@AK`(mnn!R&yl#5fEuiNg99Tz!g9F_%L*&T0D+GCOGOSTI|EiEl~7xTIE z(|!2zGwokV5jj&4^SdB)X7W5XX6XwT*`Nr1_%Urg&-!gcS~7x2G&(~tv}+CQkAwpb zncj=6CpQm+$%3h{WzXn8s(CRoraNa?y3nK{c;yJvSs9RYJcc@z?ym&F}!LW-iMB&lR+q;>-EV#}C(EsP`%MTJe zJhnJLCxTox=L> zEHxaPtaXM0q#WGBznAQHuG=#Xh|M_PUhMbS_Yn8Awgu2JIdk?4hDoa7q+I2kANyNF zr9U`+QBrW`WH%XH`9qtr5ofmR>XgSedGGUCprBG1XLv#KLU-w zH+H01t|?3nxO`R}H+gfJu_vNkp2BSUv3WYrsQI`M5^n$x6L4pO@U>*IVuzkTg>-bL z$X*$3OqFuP!&SHIbr#62OJDv+jFC%SLSPV5{G;)dLRLnmq|MKPmK0uMgIyH3xA8c;LZfwqv+rnymc zR706f$pp|H0|-I|9x?wez5YPGJe1Z)i7wp!KGSy?m}Eek7a^dns6+`%VFHiGjLbB{ zn+t49KMD&8IgKYCA>_%ho*0iy=X=xisIq;<)P%ASz5rqOGovWMGrF}?p29-D@85EZ zkGGlATHrs+yyL!Bu0xI%ZT+IdNubL0;aDE#+prYn1j=AFWf&f)!OAry6NX z8ztOtkW=!UF~p<+?`g*~CM=PIA~Y&mU{{z7yW;*hcl95P!H^ zGd_PV;ikJRCHn=u!bCy5d2BfT(e;hDjaN-AS->1?z1v4#!5K%;(>ikb7;5*< zkB|?9G~XvHDf|9Ls^~1Ebp5m`elSDZcBsD}2b_A7uHk)Fd8(}mBwhbwi-5QxymOt-8j9hwS(nCU z@Q~nF$#|e|k`td;pDY-eW~kb-=X~}%bir$V2oz&50TdI`p_!O403`u0c7CQi4g71g zcGgH?Z{g@6isAncj+f#jtF~eru@7@9Vbfussnr`43twBG1XO2ymQW z5tn+|mn)Zappz=?CG#%VF=aem4KAM!i?{K2?FK%GdKMOb)z%(}l_DKds99*VLI1rS z$&WU6&P?@i5PmtW`Ope5#j^Kk+{a71dQng63Jv@Ywar!cPTm29p~wG}@4lB@8DzyrsrCQ9aVv>_hg zgct|1J)@5zgl>$k7HwNzi8grY-M7I1ePz(&dxZ~M@J0u9l+JQSiddv->vz#TV;qs7 zUbB{VK5YCKjadEefd-icL%yN6jA_G67^W!bQd6M|RqAeU? z3#BXUe>OjrNs)Aw8xM?fDEMQmci-3_k)8*?U}&mXnC$pMs<2t|RwN~Ft}eUsz?d8f ziTo2=GIrD5#cCqdrYjRC{HtZa29Hh2J#uMG)Gm{~@&t9(`OUkeJqzMRqjhyp*sfhoocxpi9dJr=z8AqAkH)Ii=6*Y0*( z9BJk`!nlIesQ{|(Oi&p>g z&fG_hFVf6OiT*S0Z=*G2(5aSrzA`$?_ic{#P< z))C35UmYP$^|Ds2tlHRq7Bj?glXK?Z%#x?4U#@6#22xLVi6S zI%SWUF$b#>MxL#{CVeiPj{k8q1#K@lE}d%VEydjt^^q@<ftN@M zTK^s-_doMHx2N2qCVwOam++l&zKrZ`zKGIw9;f4_^uj{=W<22xkLo=C7eW3vOTfWY5K-sF<`q{kgF5UrBz5^ zsK1O&7@F_vchTKEE1xd+coP5pE_}*+xqR=@8v0jQ(j|4Hf~D6O5vRP|n_H_+%~eZl zURM3^iq!l;h{cs85|Lq@q@uo1R?l%tt=xN`tK9hsgcqO-9rgK;8L_)ONHc;I$0VBOjpIg))J+ng0jm2m?of0>65>n zS4fu6SJtj-C#nkBPZwW2J39XTHt_E=FB_i5O=`JjWW?rIe>n{(;~DFX(H|r;#66$&=B$$u!i(`68Q#;0C>6FBOKYCstqkG5~u;+1exUuo93Dnxr<5*$K-GOM* z#ah|(s`d8F@*vY!bbk!BN>{sx)c09&KxNwyz9AmH1}dDG!!B{EB1l1lJ(*ox5V#fexY~FQcFnp# zIjEXp99Zki}lVEeSM|+3)kz6 z*;1q-6-FO`kqJQL>x23$Gzx(obK%Z9IT`Zg#IFrg0G9yPp%7q~_|Hx4*z#t{V|doK z<+1!~=ro zS-h1=TCze)ObL8aU#$vtki-sU$h+E$mw?ET7Chs*QmPnrB??7)HQm>d6!p8H_E+}W zw<4GveYi=QpM5NIopZdY?eqoTRn>JI+*vUMG-Y?`!YGJ(Fl!ck_?xPa zs(cmg!pbubC_rIi^=dWQ7SA^H8qREzaIcB_j7=G{fW5|w2(8`4Y})T5_(KtvxpB^ zX0y5NVAMMw4}+UixxwR0FCWtS5>+j&J|H-hGBkVv_I2}<2Zgs1_ICnF@&BQd27~a} z@I9#Aqt;6LbiIu)XN&N@YWKbALQoXOuj)`Qu-1K$ABNmZ(fD@3pue4HzHEmG{IN-lD-Q@|e`hQ;Xwird<((@k`B?L2{o*2_QTg;tQN;8`Z^`ubM16tMycv z*cq=ve!hhPICIo_Q5ie8b+pQ)YHTOfs$G(naAMYza=Vo7gZJp@rJk5_8VH2A>`q4# z+BAo@`?q(8UYjOaPs4(?E7*5qOf<7ja6T z)zo6g%bXT>Y_x{a|2SFDq|&L^e?+H;)52ipDQT>{R_?K9#7MD*E_n1D0x{r=eQJkk zxXb=OmRIxWbwyZW|g$A%gyYC467n3D+%{icbyH6JN$zJEKT z>xn9t#0Y*D1j;pL7Vqqrc*94WgRJ2hCgC_ zk>f@FE0nMt*m0_5Ml+YX%CvSHiT$jh*HvFWC@Y1=x4Rs;w+v-2lWMlnAWhpaT5b{N zYu!y-H!G`E;gh`!4Sa5TxLud^aA~61dJJlQGt~!1h%zYpbV*IvPpo9w0Bb+^+ZgMQ z(SihyElrLB1`zYvd*a32ch$ECXMvpL#K6;MXQ@CQ(Wz5U0TMK^fQD1s@2JDO-K zlul5EIMqJxkIG$eKy8LIpSzCYLvgIpC1~=y4;Fb4If(CztGo6`PW}ja1&YzqAAnu2 za@m66sOd=$E^z=94}`B9w3*cpjp*C@|TanUuWuKF@Vm9DAav}9D%uIc4$C9B(;g_ zq%kX*-NbH*cbnC*TfTjj6$q@Qsdgs+ymMXjWYLB#)$cY+TfQB5r9ch*1r|{})x-a+ z|J*lW^g0EPUTUn8dh3)l`Z|8!Hel5J_Z@kdKeLR~`xB62hGk97g3zI=8Q{104ivd0Q|j-Q52 zlXP7dSZi5<25to|Ykr=}C$S^IoHc+_XF~u48pPKHw4fN2?@3JUTL! zuJ4=~i4a|#0*XBO=??T2zR3zaM3S;H0wksM0(vyf-2Cie%9KS?{8E46XO4|iTb z<`4*O*}-L-kH2Wl2ml7KZE0=szB< zN1M-;Q|mT3TY7}Ti+wka1<_{LpK4PJ^vhr&2s~=UZvtP%<|fSC+~3Pj82baIZLAA6 z4*R1<(y}r$CAv3YJ-LRok+!p<5VCS8SZWbQHb+3`EOJmsgSoDj;;a&r5`_vZznV%Y zr)e_gp%C%J43sv$>|iBW*4C}^RGKFs);>Ny z{vRL@Q0p_SRg9ubv2j*AziF=1)_&ygAafhBzE^0!IAfDd&x%XwXwIUlo?vB zAUru;JR?gz5vPLmDggW$CrkXt*#%)SDtviat`0=oNk;UX>5;#}>OMv^sp2sUWRqbD zY0DCc;DoKDSeE8^j*!&l5k>|dAjdx%p!D@*i0xNYY15?leb1&qfiIRb9c+?%4#Qf6 z6vu@50|{ZfwmLr=-YbVq*>Onsw~>s<@p5We3HO{z%nOGdVPftmb|wDw{(f06A=0RI z3{dI^>dv~yJVHmOVH5M6tl`-wuB409V=MJw>j1J;rt&%hPZ-u7heP$U;cJwRm4P?! z{xKqFj!5yPZ-E*rC06KYsqa&sxS)wSq4$XhkTp%uyaU)g(vpLqnDZYF{K#0Jbz-cV z1-}X}UJ48mX05Ov*ain2--?fuxYa>x4>Fv_JNQdT*Uef~LHt-7FSB+6U%X`gnx_o?cNmzn+FULokehBWH zg0tCYX!Q&88Pq@PWcNOmB#W%DMM4loKInVa#yDeobcoPk@w5!KfwBO%v!$T^=MlLl zrv)BG{>?9imW7VNLb1|z-CCyheVa*O2Ee*fAR!@e3S&IIgdFPy_o^+T5pn$Z`4fvK zf;7|8_gA0M^}&SFn_w}NSrd^X{?zN=ix;xwqan7@@}~c~y~BVoG*`k=Wu!@D?WzF; zgz&zo)y1b`V1#G6SVfo3WLPp;?6||~OD0OZJ%z4UyuX$G0y|}4p?V%&HdltUS94jg zfjEKZo6qW+4mM;f{1|}%6PzkPb0}$8^#E8**;TiEf4$`DUrU37-5KFq;c=Em|M5a< zpxo;75{SB(Rg&>#%_|9r|A`~izcpnkSf67pj15|28~(zr9HMHNeN>MO%-#1R1((Aa zCk3g|JyDwxs!Ei&;h=g7r1oFf`flFqwbpHCh7{7x-4unMr0<6{mf8OB4J~tJk=VF6 zy1O`(1NNkwZ})C%r*6aU$*evCZJ%QvF9q%uUiSR)bj3l;Dg_7AxCirZp|g_0qK^ zD}&<&oli@P^KUY*45#xN?16Hgl~#Dr4x5=jAJsd$zek)s-{Qt5`TGRpZHe_bkV&eS z$;HSbVPz0Nwgl=a?Xr);cT@v zhr)XJNRQ)HvME-iUN^EK*!R=63Fk z`a5<8k>ps&_{>NV^wtU!)Ih()8cG!>!`!g;Rx;B|Wdb9~LViQ=F8KPr`;~Lj7us_u zDF5*}&4wun-vqib27~o8U54G~e!J3Y?q`Oer%jsaf*f40$Jx~yH8|GGp7}|I>bo=T z&MbXWFDa-X{`HkxtS@tq>WZUE74|bBSJ#UVZ(4Sp|^0QtDF*rgu9G1O?+s<%A zD=Uywr2!AB>4c(v)sA_}BY=Y6&jjRtZ=2BnHKzn}9%@UQVjyDH$S(acRjqI;k*C3= z?z&dwd*OI2I0m9qFj#kt9j1R1Y%U~8-z`=qjwaNAb%*SY#M`&SCBV?Py0u{YkMF#j z>k82P2m#vwbA55(CQxF-Z>KGJ*aTZ%-YLq5Je*Me(a@8!o_Y%o<)6dCb&TuHCv@Ma zz^PH&!@POqk}w-L`A+Ua^_>O3wk!pbHj&~htuSi6ObMPZqZFH&KFBL3K-WY+9$>$4 zG#S}SV;}j}=8yQ?UzEyR$(Ca_zUZU16~ZZV-#C4L63-6!{2IY4vRHZhv8M-pW-~%1 zDxTv5M{vZI!sl?aThD)Ix@?_am;!==U}La8&=Ou})LZLb63gN{WQhK$kRO|jA~yAT zzOtR?S|s8LIL^uf8b%};3$V40gs@Q@+IPm}({E9~+x>>zc{eM!8Q6Vd#3c-{j4MX9 zk0yZ5GSnh|=@9p8rK`D&r~ggK``Gyo7}xLjQx7=Fe+eYaLzJ8@tzxK1eX+c^iDgrU+ai!)03Hie3;W_5{rKK zQ@X1VD73*N1|b3nn2}&J?R;dtl3mf(V=CAkjH&?+Ky!j>>k0rX{#2x{yI7M0lsqUF ztC#5X&4KtSF#C!E9Eosb#gpS$<6UUFJ@fEAqBK+zP?*pmCevC@oNx9<^pPscQPai9 z-Q=%pnPkMX>b-5?J|IUQ5!6jY0ew6bsn3ZY(Eq6LMQPzhrQwHn3BCSlMRwd=wkY#@ zl(KEqED%dYZR$@+iMk7389adZPLBmO$$@XXEWGqNtt}4^Ol336(o62>-8TI18gD#4 zX?-Z?N?D(k0KyN~B})6QDsZ@$A{=drs&GuJ_bn|R(~HJm)NZ1}dc$15LIE~FB``Lp zoblTjT~D-7Y{iHm%Zvt>?ZNpqHz-E@jwkZk$pe#3J+3;FTsE$Bk0Q089Td3k~t@{oJO+gu)!Y0bGqh<9=aOHkoUG&Wzg z`xSsL7;ndOHWSR`*|A=;Ai6bBsw>fI^&KFTc%Da!Cwp?I4=_5hXu%)z6%DEAnUN{T ziz3*cK+8#L>u;#DdBWd`*16UK((m<0DVA<`L)@X**c)&2u7nMInH#UaVM|y&x?h0z zpZgzU__`vG-^4IaI*{_N^8|JnKEs;qO2Pr4xSdwhpx4{H+zbyB$Cli?zAoyZh1dfP zu#lU!nCp`K^==Q+k{59|TE|{Q!|M@~qG1;f|5X@GEijj|I?ZB$h=mx^o8D~cHtMBV zuFeOu3#+v9@o`Tlg=6x-m_J`+Q3yDGJT;uO>!eIu#4`PK*t!pty6Czf zLq{ZuBr1Rlxm)G8+ZKdj^m|}Fd5C9@besS1HRKxB*DvgKFAoSo$pYXiuoMIu;{D3& zV-bED4C}`^sD}bu^31w{%{K{mUJ4Zvu<~J=s2?!mwJx}__|NG0`Cgm?^r~*oIZ-#M zOqFF_i3SVgD}b30@-KhnQ};SuZmtdd@7qHuLPM{wl~#SJr7bV!)QeLJtE<>|Km3v3 zde0@IW(~pjL?k$fLKHZ3~XBgOunJADC&* zyOMVJBU^p<%v^a*@C=|o+FxEMH&7-qb^$vNx3jFQ#xe~7CHocx32{+9;4cwGynP_o zcl)rW?tWZOnG;oaCR8HFX@4x>4*31Y$H$py$x?yRs0zCA!$W?bM@z{)zw)IbZ>yUNU)6EIKJ~e|z zKsNgFiz zdcnu6IJ2%W`2~s1gwj4|I}7>_0^m?^CN^p!RJYV_ZAS*qp0c6IR^k- zSTALp?E62TgqcQX8RUYg!G6ur@>lz)dGE>6GOjh<9W_Aq=$SF8;pzpLtV zc@s8STVDyhY~}l9v1eB(5zXV>9MP#dnug0{%rSTIR}Q&OVvG zgjsYhmDTFRb?efKd^biHMFMSK2|Zb8r|)V)ig2CJ>fQrctN`HE+83ULfdNG4Vb^SO zs;cj8x-oDn-8@QFwgr5COK}9-C(XfJ=_Ax}YD0{;IS~g)+y6#})n5OU<6Zd=zKqdw zfb9Y}z5aef=Da$}ZFtZc0ONI_)l8(3_~L+3-#%9c1!g7T``(g<<6vRvopTfWBwI4$ zyMO9}h@umt9+y}rcT zb*$bM^=Zp`MLO(ngCV4AJW+7JOLh+@syT(y6`y1&Jz)Em-W;uOcl;i^BqWk3k?6$? zv=eIq$+k0Bv3)x<`Ii}t6Tlh%ncF#Bhhcppa-W}$5EU@p@P2Pvu+K~IO`VliROUM$ z;bFjO(|85VgJZL70p<$+sT8Ttuh+*7nIdE>F2|vgyay*8bteFj8<=H6``?TIuk5vh zgho1_Yx_mA*V!o#_Vb(?pNC5gtWX~Qqe|8F-;|zyGgYEjk3XdGfNAC#(lx!CvUQm znW-RJzl2CR)znZ31OlN)^#F@l^qa?W+&%AZCa<=G9HaT&k)YtQeh0980Du$?@Lr|l zoestSc|P{*X~X87=#%w6*BK+nw~N6l7$qRyPn5|s%k6-XP1E-gEh!Mg#xVfD*3PgDqhwVNCs8RRjHWP!N6>E@{4$jRzHD@OR|4|JvZ6hh=I0GkB3_z9t>=M>U@n@YX4umeoE*t+(ySJ0=X~s-;b$2OAYY z(!%u#vU0w8ls@|9pi7PwsF)L^^^iT+>|tPqS_kD6$YY~BAR)mQnTSav)zxe;4}O7*-2!J1t>4iXkrc&CdxHWO=%-vh9 zoXQOXcksWYh|xlgh+(!VNE6SsV33-0_NJR@3pjZzYSVlw`3yRP1cDP^WQnDYTVEGw z+!#*?6}fMWeIhS!8};`WD`|N20QpUs{0UIcPGr{VznsyNQ&3P)MD}@?ZUmpsXnFP} zZP`bh!}cieyXmrJvOERE9>_^CS9|Lt5e-skUK4vDrR1&hMD6iJUEFy;Az_+CXDXkJ@`R63vl=9 zBJ2SH&s!{ zzJv*0EyQgxeYIlMbs?t)3IZ(mE13&SD5a&vXZrrp5OhcG&-=PjJze}*=l?wb;}7;$ znbca#wU-xdv>vTJhb@*|zRH4A2kO0$D>F#74wV1E{#3g+Zwa&m?)DYnlYvJfUqGxc zIrn|9`zfC}U4{y)piq`RVXKg#l;SJlVl9c!L$?e`IfGNNKItgx+!H5l{128;RnB#GoK6_q%+MjZ~Y-45_nXVoKGb5a~i=P_~2|{`y7jn_f?)$|x zZs(CRj=_Q?(T?58rsFlX%W2!dFyemCE}+*8hD_?XbZzp68fA|3MC?w~tzSXmxCC5} zd2CRlOy8Fu|5H^{*qh@1Be;cNaW(ti!XjoM2^=?_Yhd#vCA5uiiq-zAA6#ZWeO6Ts z07L39+L3M^Ub~t0d5rSzJ0!j&!$Kl1`D2llP3NMZ5Q$eeAq|ELmajH2?eb~j%9?+8 zeBvj3;x%>4xtv)(eOX2_-6nU^czJWa?FeP6`LB?mun?;_vK)*>vAZbivEfbO2H)-< zCn%3m{D+;&QltvN#ipzVs=*_|cSP&Lca5hTF&aU}Q)6{0uc87fR?weaXBY7m1te@~ zv-sP!sD0Z^a1)&wH-dfn8M;l)!yc{S=ZE#s672WyAzFzPqPO0UhYvnaB07+kVZYWY zK~=8fWR|0FLFV>8KH0g>571 zgV}|%j@z*w>(<#%u5YGtu5zwMb7TM;UtUN6fK>7T6_JZTzt;??I+akHo?SW zBnk#Fv0wuUjpv#Sz$7ZN_kM8b3$COUrXza3cNB}2*5+E189rQN6C>1@8x=fYM!=6x z7+qZ@ey?YmH4_aFqc%02ZN*+2*E5Z4{{Ch4#AK@B@qzLuL7f91z`l6Hlx@m8MFZl(iJ6Aa)OUL zIiOEKoH-Km9HZ%zNYe2)#8X(WKktRGhs;#!OmQgkKRAKxuQXdMn3R{uqCcEov)KIj zx{uF)deYpeJ3?GKl#b~|i!e7Pu)yZwYN-Vwg^YQ?I*GiAV!8FR4F;iL2np&`9IyIR zuyDp<*^I)!@$(~aoCS~R^KiBF2V*L1fmbu5wssJf7wv5;dSXcL?200&`CN|%xu7;s z4l|Sw_Uc8Q8Ry!>Llq<^DX~EI87=TIIRT>MCHtU(VK?X-o$LGbm|D`#5-so;bmCuC z{IzE5x2jUNixnfZ{TK#vL&qloE#wWTje6a?YgUKVtC)^uLm#A5j$-xN8+eTKGi6WO zJn61?bp17SgQxRdJ1%V0xENjNON8v74Oh>^C_PJu>!e{Pb2An>H5;z@eiP^IFy%AmHC>7>s~mfmej7?G zM#dBlR7bJ+{AhO}r1pu7;@#hnbfuonM?1mx*W`Fm^uKqHUo95lFAkS8LHP1)aqu|M z22TaEos{v4^rvQQZDbMG+}Ftc6cSPl!%W+PJWE|LZy6WVfRsIt6BDoEV#s=>68?ECd*U42g@9I|)7>#!>?JNQkE7|8C zU5Hlc^-S1~uIA*)_qXRdOPfMdbR{wQ&jnPXg+nigoWRqLk*5G12z_72fM(h>v4g_> zn7$1@x$=Ur_U5}|CHe$0`_!N7=Qn7Y`|0jUO}NlL5h@2GE=1+8_~D>7^jTfKS_oEQ zAEP^-tLKK8tVr(vLPbeH;xfwfGp8BPsa(m4q+KyeGXx6y1H_th#(HeYzn{Lpcs`%- zXqTrLlek+UNPpM`qiRD)?0Kf9rtpF-FEYKi@NpS6S3-k}?_Qt;v?e62@Ly7Sg^(WL zYUhnRXVjK7@WM)4B!KANJMNZrjW>pTt}yV_1R-t-n)Og>x<+pK(l97#IR9q~MF8VNkr z2Ui|N*W03s5wVHNJW=iERSi31yQGl5=MmNtakC;05_z9^h@MONjgNbO(_Fgo_Z{J4 zu)sG9Sa$a4PZZ#_ROL+8jDTy!HT;js(;gR%vf8L~p!wEs&6x42U66_9vkF=&W{?Hu zOc6LR31*z7NjBS>@ctP{y7xw3P%9z*4{YhrdN6K%&va=~Kgu9FR;E7H>U8fe4bg74nR`!40LNyD?M&3!K6FOp?*Dy{s= zo|=zd?WHJ4zZ9h)+0J@RI`}4CB1idZ-qW@kY8dj0n=)G9Y?c+AFQL_dsd$aXca3pW zd&mV&xNRrq`Pz=t_#}}u2^BLU(~9=?$f2ne=Kiq-uKFOc$HBr z`10J!h*7-;B#H`n>sFb?J_%9?NI7f0qVI)}2KzWV^pP%;3w-jbiBHv52)vn(aC z`s>)ezGnx5?tzIy6Wp`!c+c-1P>48?B-F|nkrlLAK33PyO|h>;1yq90__6{pKP|Kb z`I`xP{C9a6IbF(a5rXz3`z3eGPlcN=&?*VSN+xxh0NV?DvxnRI7kHYK;>Tm$oSajQ zps@hbsz4kpm&Cl;87DcBBQ;V__Ixh`=RB%hMx&N}h64c~}UESBzyzgU#Z4u$Gec?l``( z3QB0;{tz?@3gN<%Tn5(o(KfuCE0O)Bs#RFit97kK&(hldjB~1>n3X8+xHi|LsD8-56joiiRQcp74u1Y$C7c>;e!v>Bp?>%;Z{(9E zZXjjJ=vpuF=xZBojS2|=+$X31*Xgi_KaNJxj$ z-Ek14E+rf~1*A*5;a&XxW4s^k825vmbN1eAuQlg0pE%jhAufv+3l=Z^p3C%b8E`KV zU_)UdpV4%(D&o$Y!>=0GCgPO;j(JkE;vG4m_>%G0K0{(P`KbpmBM+G7& zyotw~Kg6q&2`HIV&;Iijz4H^z@djDplwS0A5?LgOgV?wC^28-kC3f!4&ab7h1iPc9 zX8BSF8E-O!yp4Sd=A)|naRN@=ED|Iv`F^Z)ys+$*`*+Jlr=ilG;Hb)iL<4No|87we z5CY6ZMvhS_*F=|vXDVaI!Q%cpH$&Wul!Syt2B!P4YxAvZf3dLD^@J$WE;Cm2lo=Ug z>8mZT5;cz5L)%5i-Q}VrA`ocxe@8`PZ$1AKG1V!ePt_^=uPb2f3EtD!+z9%0nxaF)l_cULb+m-`34Y`qaec+eZRf*(VXm(~y(5?c z+^(9i+N%AI)5&4xvQ%g}8FD10KXd2pxm%sPQHyKsnYrQB&CSg>zZrcn^@Hfk=|Z~h z0FQCDqW1KNOw%^CX%a}t=>O%4pe?z@FvOV&@J@KeU^zSBcK2#idei6g zjMJU0eJ9?ZF^mbVY_v2uv=l3p*B1|3v~_~R5<7S&O37Jb_Y!Yp#B3|-;^u*>)lCI1 zIKro;5(|>a2ngMvo9Sum=OLs!y;@Z0IP2Q9Ii4l5l9c!hyhe#QWld{Pld{7} z;$F3$Ie!o^K@agim_VYst~M@)|W=hytGn@pYB zgBp&y}JNp z>*bz!FPWE{6 ztGjMlGfVQ3wbzpbN0qi`0kkxx1@dQaubBfrh(G-r@RfOHU-rtae#IBGmpU4Yl<5Noy8on z#V<8BJTB#qaiJhdd{f6|rOB$ukYrnsv)gy_4gl6sR@1VRKn_rx;?dCn@JbL%} z-9x304u!43qu<(zui*J_>1@nB(O@eA;^NI28DB9}7p%Wqdexx8>ng8?lVVf*Da4c;|`o1^I0hDIxmXum9#ecQ=2h1E6&mzuDnh-tJO1HwJ*2lAF``7zU@6LgG z!sWSo=d$d_5H+c`%Pc|lMU;P!>mMil?c(@NI$YTMlX$ofO%m+^<2eoX*}8KT!`+AP z^JU2CNw|65luM;=Zl(<;;(T5r{}O+AV(iB9U*ZE-VVZ;~5~2*1FERKLYy_;8I%|nt z%j}YQ6_z)^Kk5g>yQ+bHX?ZXP4 z(^@_7(9Ms;D$fniy7XcZ3rIX!!h?uDFh4>~BmL)S@>tVlWp%%Zu;IZY9d+Tchz!^L z)giFFAngHMCJjw{)hZLZ@6*nNW+-n-6FDqVj0Gx8$HUO@PJWc7Kt1nwCXf(*X2Y~* z!_kSnB1YfZ7%UGdm*<+txoP9)Ydfh;lHIgH}cjtyGTf4;f=y~#GRAPu8 z1fu*o+Ykcrs6NYbGelHL;FtMgky&$~&QR}Fgr9v^$Q>6yT%4#3@JSvj!jYmLavwJ1 z@=X-u3vP&6_1GYm>@F<3TZrVwkS2HS{(b&!>P;?RV6x^Szwbg5d^gWM*N6g=(+s(0 z3L~IuGI#px7s!A(ALyCyhOqUbgVGD)i2H(B{Y)w(h?L&c;zmF(X zj(V3y{!sUU_`$=)d=8^e?-0|5eGrnt{xc@ZI&0GSU*ui1{+_{glq`VGST#?IX$?{U*I0nt*e2qg#41j)#`* zB@X71awMXz10USS5-Y|Gz-Z#QKlW`B2ZM4iuaNEBPhJ<3--4PrV6EDE&P6QfZ{Jg` z#@)==S#w*R;x{?YOTB&j_93Q%9?g@Y)QfG(GF~dHxqH1>27#OVUo82@t8=Y)x0g-H zN=;b(wCAfE(V2WwB5+v=w^zsGY?%>~#3ft|2?dwU0&CbWD~eX{vSv5H;I@dIChS#A zAAkuHbsA@I=602Lm;ArW7cTeKZtXD*Asw|5SV4cjqo`vXJeJReChox=69y%o;+lNX zteG8UJ2y^{F^9VJpUFSt5(!K^Y$>3GC{N=Mdc58+MzbV(?d^d|L(FT71B{L6C=)iW z?)0HSVwTXmsqxV1dk~rYD)`n9w;CGm z{s%tI5CwJR%0<~aA0F@O@VzO>i~i@=X`3l`ywbUQNT|{3TD#aws32lJRXcKhrDD+N zs0iHlHiB<6VCoWxvQCn#QJx=D2gew%e?QnlRet(B3Nacx*f6%~|_{EAbx9+j3nN)+$G03aG2BJDBGH9A~xu|OVR`K zN4tDkXz38?hggO9RW&6ZWA*jJxgipF|IP06DgLjtF6V^)%3|~fr|?dSnrHDVqn5c* z4Vb&c&Yw`b=`sS~&^R)p0!oLW^}d*$S!i%?ER2_l#kf7s^Kji&*?zB@Ug816X$9e2 zR+%eW8K=yik5}Wb!B0IH*97J=_q){(M8!5f9bb(?o(j&$K8z*P=kE)*wzfW7j78xw zCMG52!&6r89a1pdVg~0W(K#Kjfa;EIXIioHmQ!StiYDSP7UD)5*olpssCA zx4YJ6^*XDpR0jtmV^e|@FMvnZdmkED5I>0j`;oS4qVscG76~!U`~6#w*v9?O%icsu!OND1?H`c=#0%_?s#iLP zP_4~&A|MDs2{xwP!&F6P&R-`!lr6}n6{*n3uu>+(TmtjP5>+yJ-Mle{?=mIUBlM4Z zWb`Y3R8C`}Y-JqEjeL2{;q0L$`JP8ITZYx^LL1uUAARW!hF=tsbJ0J9-VW1!04O`? zjp-FZs+j9v4f*7GxLR7G*G2~)=5V{q%DDfAAOeu0NRu=OnoBkCpumjpP8b$JA&G!j zfGs9>zcxTaDF1iMzyz75!hlA#oF*>L387aKVkJc_xxP#ES^T8oA`AKY zUvUGe%W6>IkVBfflCmNkWwnjOAMDVw#pF&b)arrR@x25GV4R!X?%C8;p+4s4k5GUu zu5|H+3Ac5Pu;;yz{Pf@ks;L{rZL*bNXgw4~wpRD|y(n;}`1B|AD*yZ-USA`s)(-FQ zW&x$A``-)Fx4e)!mbBiBmA-JGM($|cxwd1kYN!@hELdGG1A8{oP z?3F7wo7$#({FhS1_^|%ZFmQa9SJnS~M^Q};3$V@7OYDA>Ezsm49}J#&&x0m%MQwiQ z#CHnbtiZ1AOIDV0^@?s}iEumrq)cw6c<8mIy8g2Mr?-)FDaXNK{DH_M;}YS*kbhLi z!{T6aE^_tsPM$oT-;R4>z4%8YdDxefY|6mpxfQIAN5LccCVT>+n^rJ^DG9hb@>+;Q z2b(6gV=A1p`qk0$e2ZJ*MG0jBkNLeXNTGvqeXVe+WJ*rYPqZ3coUSRwFDVh~%hmik z=G*2Yy*Ec$s_IbGAv&CVb;HgQe)(gak`W*uMn-s-!MWPV9WksiLx@D1?X`46yVCJJ5v z^G0&<4}wCiLRDDt=tKe3DzLww3*#ZcD9JW6Vs_tZq}j6NAexQzQgpHQ=ZH#CJO!74 zW5Z(=^Wej6!I1!JaWGX8<#Lj{$15QrL%@ncS$Pr({k3iSs{JmgA(t_cRN@t|>ku%r zO`szn|4&;Q{L?`5Zy@!5fnj#CVM9h~v3XVTZN^6i(0d-9)lrAhi2 z(oe#sRhJ7bbhQPu=ViG*w|Z05Zkse!&*UD@1|3eESB4v07`?L6w+7`1yFp9$P|whR zBanZOcR~}+&+nX2%|&@Uu@G)BwHbld5H}FonFA|zNkn6z5ZjzcVO!G?SEPwH0+MP` z`AdOZ+?G2vQKsC_ll74VKQ8VjgM0(ak-Hugp9~>ZYa(|l2-r)Al-MWRrd0xw)1s@7 zh{$=&(Xy8zvxP?kR0@n!_p}@p8zj_|uc;K%b~3%4rp6Pp3GrE3WLX{G{`+}{Dt<}5 zQa|2c;w1H|96rR{@vzP0y+U%MFK-_0sCZ;w3}LP98Z9?BH*lIcKUmHZ54+E&2d5HNRu@m2pCm-a}s1!vGy%sOi3z=$@&UZS~Gy$?2ZSX?S=7%N- zr*;DOZ(fcEe;pm*P@-OmR!NksI8`Y3M{JY6qfkESWU3I-^+o-zawy}p#3OS>DSOYm&dV@Of#e-aHs z(dMdrV(tu}X|xN~FllXU=DTm2-pl>DCD_{?+*hnn`BJgNxly}9J#R)lcd0{kq1olw zmo5yaD>gPZ=yD>+(L&kskCh(RQpq4|BWY9_@W0A`Ee{{%1T&!Yx;JmJ_Co*!B9rgAJ zZcKO}=jC>+qv}{S15t<@b;j-1m}CNul1j6aQ|P;tGoY@ReXN>G6BcBXjF}Pa4O( z&mT!(t_8+Mlarbys#(aq)WyQt%A6m>zvQD7a2myuymZ?9aock=&>2LRkIrEQS5~H| zn$gy%E-yCT3cA21D;Ix8DVVvF-8~e8 zo)DwPq5T0pZZk+j+&jWKbaK=_duE$C3vZ((wBkIxm;Q;zqi=Bn5n^UXhp4CVch$wF z16Y;u1HtLu%U)`}6QYLVVUE)~HpMr@$e?V`5~+6M?Yu%jRiqVi!)4~S7F?qL)x1cn znxkosF4~K|N;>6O6wu47T325`@AC9;?Y1OXS6BBOyEt|*|IPDs2y@Zy_SQFEB=gt4 z3vTd@*Zr)q6;;iVrMgRbwXyO}tOo~L`Vx6;vS!0B)PUnXCTxe?p?m@bouqz$EYs&@F9E5v6LKGwxMRr$8>-k% zHfj;{`nJrerJMAu7%nZAFo}?*Dopp;vCktF5eYxVf1b-`+z)g9D2uMz*WFxBq>29^ zRoK(@3M2HI%mpuClTXGw{-Xc%{m1U)hD-lf^ZLP+;m!dH0`&?(_d-zut4^na)6OWe z{TSi@$UUj|9`E>A=NG>*408h!{ZFcYB2^$3EA17UJgPMk8DoGWG4paejn9GPLGAa6 zuho)5uAiq33HQ9Qc8@K`J3e>0zADh?`M#0U1!>iBDp&Bz!8U)1^Se%m?ez5YH!miQ z;$ZT(1RX`gG5!Kuz9Gu$_1)~p=FC|PIE8P0BLZEYYk zi!`3)^xJE9A$2Ufy#~~a_dycnx)m1FWvS=8i_MR6#tZv-oJL`_t*90nxGr7N>%Hn+ z%ESLm1FW)z2B&zFEeB}o>ex$PC`uvS@9fVMy3B}yRQNine&2K+jMFH5)5K#8>I;?!- zbC|93zu1dN3e2=z=Y+<0K}ZTRrr!bI{kh(R!gxW9;`ifiZb{~n%pHvh@(WIt<5>w! zzIK@hqY`$n^~m(~^}$>GalYOLbbzluvFq!I)KkAOQY8m%JjjiQZ5xiG zDdje7rx)T>8op(>9tydAFg#N|%rZt*mZrt2nOb-3MAJu3KzW5q&HV{AmtX{!C zEjy9XiYKXCuX%;m#;{vOhbDvm@iJhh$qTjWrT*K6@0ASsI0=@HD;QEzN2}PSd4B$d zw;1EU_Alzx+XD}B8Y0-~LF$p(uBtr;nbIvbC}o^D!v=Ar5|tSHp6PVfauGaH7vH?N zREzFKKVdJag07PWzwTw(!7*$R&aho~w@v5XEK_$}_HF~oMK!F9)-gNVe{XFh=S>U< zN~6Y+gz|?xm$R0ZjDWo|$P5601#XlK5Z`(QufSGN^2^d@ z;;Ni<8m4$-U6BGOAu6iUj*D(ChUtuhxH)tYc-f)^OFxXK?j{SuT4Bi9ich`#bq67gy9tFFzdJY+|yHuXOa*F zuh-%GMy}0O30&4eyUVR`3j{zqD{yy0N6YQlLanWiEUZ1??t-Z%FxlFZzcf2hF*v|T zKuK1V@g{V?a#jcrAM6Ye9_`+@_~5T5ip4|TAKW{waC2h_wUx|UxNK=)c6{rtMi^m^ z3a?P7{W*13tDMP6wa$ep3>BfM0pDq%iKeFTHP(Fe>+(BHxrcSjhSc)k+avO(tuJ|S z-~Kly)nNN^sTR?F{76ARqft4Dk0NkG?i_>=j%FluIg)h6aMpBHTZRn8cU2p<#{=(n zd>s(DrZHE?@O*b_&pg%us`_HlWwq78=G5I|z9vXa9GZ){KcmrMh3>R>H}c(2j--Xt zSM<871!z?*g->DDXLnN`o_0`tWkr|wpSzuVie3VjbyLx-1@F()sP z+hXCH`#F=>eTBnUT#!$rrwRMrSi}hIZb@Y|yhWduyk`|~mA;NK+d16}Kd9*>E;dU$ zuVRhwY&41Z1tSMs7`Az$P3!1@Hvt^gh$xu!A|mZGMXj!D7UOcNS90ISvNI%tyR3$k zabpNyTdaOW+`sDh9;bfM{Q$-v=#Rsk&fnVLL=@UXw_iScd7ozS6}GhKfscdezXp@6 z7ekP`&!ie~krz6Oc1|%mdu?jNo+uY`NjNo31B6%$muK?uW`>YKti2f?J;#LLzB&S6 zlbT<~3N{hIcM&o!HLCMjvpD|vAbPdCNTj2aoxa=?j_wd>S{-N&`2$@~?q|btELuPa z>A3%JdUghk`QQeVjq;T2Jpyx5L+KSqCsjYl%IPBC@I5HTy)YECT^!Hdoda`> z2jszz2o)xs(YEY+sPtZYOY`P>3%51OJuwO3Fu>Z^^-qDsfa z6bWcxM|*4F&K96ebjoAn&%4VGC;uwbDF+6Yn2YmNL#+q2bFbNI@VQ{<8SsBnr#_uq z$Fs>G0CQ76sn4P`NSRehDOu9-%SSHQ5p+RKR_KOJjz2d}5>@Dd;IF8rCY;9{;DmDl z?|5A23u@qcxo~!M!yR<1kx5rZAU?9d^1&pRsFxRsk=pXA(5vi<9!@d&6rw-&0^GE} zknO~jY%PcNOPM*M24CejeTLB*unfT$90u?7^b~HFd@i_*TU;lQ66wotlCvQNcBE{& z6>yi7b5c4BsaX*yW+c>@b4s?&nk(cWgG1{|qfEm(Jcg@JX<%jr6_5*`CZ=n$tG%@UA@@j~=LXpfer zCc=T(TLUs7AtA!=Xl%~qFJoq%6hcsF>fkYY!6zROWWKo!SE1JgzE(m7&L-7g4-VMh z&&+|3f&)ZeFs`+2n{HrEQg~-#f^`rG$<0nNX2U8)-)M$Z4=OS0sW$5*M8oYkWloc$oVJs(#u@aX{bEg!8xax$?5Iif;zJbq5}k z5GYe_7Wg51@seC2pbEXvB-$_JKh!3u6H+r01U#yXmK{%c%q9a$Y6CPlhbr6i?d?~58zO#Yt% zfsJvV=FtYPNzoEtl@td!W=f^e(<{2`{uHA)@m&(aR!shf^3cfmf8XC>!bw>@Fxg0i z3pQRETC@YP-LGb75;I$Tow^Q{tHPC++_)`&hUH9B)T2V^(Fz9SLIKFnNa;TBRe z_2JMvC;$w{2jWt&G^6480)CeSUYeCMP!DU~QUyFl+hj6E{n8yaLH#&>y!f*d42dn& zLmrj_L@7nV2%}$-F{LPZ$XKjHE|Pw>X_-M8-)SETgCXc174NUOf~{!fg)*mgHJ8~F zPO!Uw!26>laKFKB{rdTQ1HS|c_y7L~Y+xiW3=!wKE?+}unu3G{7{Q;LqDy@?81J0^ zVRyVPbSL_RiktUc>`tnvJ!fh&G5{eA=Z9|j>+ZI}p-!%s$Im-zPtegJEo*zrF-1}SL03mC9=tog zT#mMxy8El(*9Iqs;RvJ3Gxu<*XfEE{ssm>PpEQ0LFR)x{_g8qn_$Y-E&7$NcvVpn% zCBddO(zt$mvRdSc%*EoN9AdqNH*HmiI$`Na8EfZRe5xr5^d04qf5Ek7!+pp05(N|> zS6*m`NwtnfdpXM7AaF+?6GEr9vOURMRX*`GQr|UTe-O6Zi|BfviVGT?nU}wH-ydfi z+dtR;fxkB1tk(+Gu@{mdi|3BJ?;cp)3MRSwmYbv7M(7ULrG|X5BYjnK|30$>FJ2}@ zY^ge%(*OAlMdOO?YgZSnLYX)r;QD{?^sFVOXky`v)ELwsIg#UF$u|ix zm8Ox=InCoC<4C1vmIwtMcA9g$dw5V#IP`KcbFeK>OS^-orWUg7UDHv3Ae%-J9O&)c z)cDiHVro&8qO7W)7XzmUA9NcfLDH9sVyQon7vlRM3HW*;X`dIOt_cgo0z{yE8cPE(F)<)XPo6V;(d+}f9sv*QBy6k)?3%ptH znCqTjVBnPmv9T%q?to$e^!0j<)unXLtNfTQLqSv5Ai~k`Qk=83)vw)OPxTWpa|b&> zvcAb#0Gfh%W~y1GC-|VfG9`x%v2=_>oyG05$qqjcUR7nEv;+_=)>Iz3{rs3id}-C} z>{y~5^)CU4WIdV%AMoAE1w4@&Ue)@7tt(tfC3T?oO{5=EVbBWD!GU$Pv^ggQg4Bu@ z2)bltUL1Hzm*T%H-zY`LXlTEn1GzKcYs`+R0~U>o_l2Wm5NN`pBzt%#cq?^(e)%H4 z>s~>X5e4}a-N`IAL52G6cfpI&FS3`w9gRa)7F-EoibSuxT7cc$Gv;Nue_ z1fa|>Zoew4VoXg7gQM>)(o8N|kkx^U(k}bvnQNd5`%zZ0G`-=%3$|7uEt_bpgh2i3 zWiJDIvtqzc45G?^_qi@v6C(TbH|G6MIHCD@;)vS!iJhb7R-2o@U}>E=2&(F-{TnB% z$(?qYI=Ym}ENpcug7^rM8h^#oaKdrGgOmJSX2pg(L=RlO;$-F;%q=UUp4Z9Bi>yI` zid8c-noLG1T>Pe*irdb^c}`AFrdJ6fBnlDcX$Xz76xq*NNgf|u=ch4rK6rnRAho#WElEytPEaE@}GEJ7on z%wGr%2ujo^Y;MLcBLca)7GdWLyE66na>s=c3Xmz9;vo|a ze4t#wI0#G&RCKF7jC%v?t2L~_?;*d6MZ!rK7{*xsQKKu70hX(=^}N8=$pN~7-WOX?=N# zn+Jk#h#BDO*s}nK0EqPEGVrseyo^DK#k9#{{7c8-3DlrQMk=zh8yvj;2K8-+;&+00 zh&BEfqz(v0Vj`%A;7b>3{4Bv?q!yzCGO$+anKbeGcf)W*n&0toEK_2IGjnn_->A-b ziA9t=$T3RNjNZ59yWr2rDAuvp+tpj$@P}bw_PSPh>!$_RV;jRtE9%w}$ON1r6Q9D_ zjcP)GI;Ylpl=P@&Uu{h67{IXAvcEAq;oyLTn30VQU>i|j>H|^%f33USi{}>lJRf77 zh$VJ)u8#;H?H5=zO3&_2)Z3(pZv&z)ugl7k=KM06Tv1dim#KlSlAk_6<+B(|xI8=Q zGx%3Z&F4i_?2FF5BJ4KxG4GWFs&h~bdx>z(umS*HzYW5|_MYA5 z=5({dxIQ9|OrX{e#>nqDC&^COyKy2INPW0PdubR_z+7PpP0|Jz$t?20`~dBErc(s8 zUydss8L_b#y6mQE`uZdsFVT&MK^5MK#6P6_<^8(`znEh0(tXG#L`di|?xtgLz_1R2 z=CM7pwct>-S^VCl1ZXFA+E$8omkm7*hC#?9BMvGUh8FDJ66VEv7FTq3ZuC!ph&%Ii z8W?XqsD@h2mxW)IV$YKyOC{^o+YE_m$P0H}>ZiArb*I?4bNiO-%*T~pfSPej zFxCLt7(iaon)Sj^69=k%(B!!AMs&o)}UjcAinK`oF5&1-m1%8ah5T#57 znTTKp4B89`1d>lmH$QHNigd{bnK-Fg@?;gi6R^q#!H%A|oT?IWDujx+9rj z_~&6l-dMe6t%GACy*N@#Pq*9aacj8|1rz>~v{UUwmDIx{OXSfyAqW>O?sTi^V~o$Z~$*P+^G zG~`eq{FtBAt$I`Qjv2TZ^=_X{XI5;;Cu|kJH(kp!N5R92q~JDbbteeX+UuaJ8JKAf zHU)z)>C63@N*mzXJVu;_A=N@fWLR5X-FNiQ4q@(f>iW8cZnXj6;)BZLH#pvfeQH^4 zvet!W`Ql_mSZzUnw3l)rg`&cEh#`6O^V0Ex=%4$WWqTdFjusXc8pe{B(weMamz03_RmUi#!L?l;E3i@52SY zN)dS&bw-1@s_Rc5n{-B0eT4UswrsqZS^|&$4teZ`jyZa@AB2FX5nF5!*kX^K7Ap@84oc2?adY!zoa|#f20dVk-W~~sU(x8S*R~WS7CJb0w&|<)T#P?b7yUo(76>m{B%2u-c;KJIl<+3Sy9>Nclz<;N1o+(HDIqWxhuUq zH^8f!0yf&y^j%M-K+TXlH#vqndQ+o~6j3vNoT~^~qRYg%GO=kGH^4@aV|MtJ^ZyK&1D{FcceZD&BrBf~kTtK)_RJAB(7 z<)=<5rLVUc?b$xdFGer(zdFMF)8dkakXbTOtW0DQ_`nCe4;UHMb7ITNcG}c*bqOT^ zdv`n6<24GUFLkH?Rf*+ykRCo2b>HwoTDletLhy&DIp8!iYyVs|Ra(s>>a>+qzSC|@ zpjWhJO~s8N;;`O%E4?ohb{Rcg;$*ncU^g1QIXt9L{h@re;%zd$`F zN@Ix>*_~R1OFA!;0z1H^hoiTN0?tkMLNj6izFOU#*HbszMJ<(XR8fu|eUzgQpg}6` zD^|%C4F?`H{|7Gq3`IfYC7D2{`F5_9FgyIV7i(*lgokU=$eK7pYmvw2k{kn;r<%nN z)J#!W6vC6$!4l765wPU<99*ZT7;28j9jQ~aMdbqRX*N}B!Eq((IzZ~C#H)Em?7;3~` zm`viEIvK_1c?4gO0y!@fV{67p)`m@s0qivziM=D+ja0_BDB*q)%v zkto#-@PGdSxS`GaPzvlA`=esT#l;oI z?JEYq*a<%AF;ix`V7n|H21{Q~_}Y7$#N(uwaABrwvgzjS3Tpzh|LPo|yPy#fhy*r{ z1N&B^d($9@Vj^><;dt&N*lQ;8Em7hr_@d2wvEcuFrjyGn;``q2y{`n)F(!A(~M zWiI!Yv&OPT>aB(e0ii~(#SA`%h_eI;pjG!~0U#|4qXFK!ump($=4i{gIKg$)yj}V@ zrdTR$z1Ic6>+pk3yGu`gO^O#Y+smL_s_OB5$mvd-9Pp3=m5x_cQzKFMjmLKWE-4UV z(}d;Q#f0pw-euQiQ#kQ@c1kH|RuwSIS;>Ysc#o0-uBi6+5%RmcG2?av_}TxI!f?KP zO|A7D()2$+7y{N@zGutL&qORxc#OFOTpX!ZdvX=Cm~D4^A5CUZiUrgGM_rIvs@Lqz z0gA!==WFnG1l2AtCi&2(44(N0yA-W*Ef6dJ=iw5ORA6(Gaj_8$gxz|P0r*S(4K$Q6 zMS46i&&Hy16MPn{Wn}2H>v81@)o<6BJ$@)FFMFq*S}~#msyCFWz_)b?5+Dt&0fH;5 zqbezr6198(RHHjr+547eK5NDFN>Tam{hp2MKTX zwyHvZQ5ABD94&Q;>=0;D{j&;aqNv7r1OzwowUw-$-9^dKlDqHZH&z_>i{{{fYqthw zKc(6)0jB+fvO}CR5cy(l$1;AiJ73xkI5Uxuq`eIw{jOzVB4?+_0*pGWd#-cA?ZOMZ zyL_?NMLoYQVsq)JnHjNnk}ie19`$SLoN;mV)7(rQk))Rn^r&z1_&h2re`?;&V|Oz zixggS|9brnQ{OYQvC+}dg@Q=+TDx9kFz;SZ?gWS{s^gOnu({j&!lK5XTVfY0x~E{1 zRpOfieR5_8LJ82;=Uh^VxbEafx=&5W!@8s+4SrSbx8X?-4i7VNaz3lk-Fl*!rv8Jg z7$!bEtHcVQt1%CKAp2-XdgA-R*}qg(E{{OqLo+iW{T%bkQM`?}za9@58q~ z$14v$(AAYFG@5I#evFw46IE&)kiuL8gc^jL1`5?HfusX%>cgDpN6T696e611+JFvG z2+mh<8PAF5Uw1(DDs8qSoXmcwIC>)Sbim74R#jzv{rMG`;fnO>#s!Y}ijF}a&s?1E z?^btL3b(xj>|GYUFRm79XHfhz+qcHEzB=C*5rZW%bnVHG8E{PjeefOD)#<0}iU- zfB_h`pKXtNEU7#Luz}{p$jR*WLCeC{Do+H}v-=A87!>}Au$H1X=49X0#UGIdC<8H$ zJMUftmtw3Wf#Q5Uk2Qk^*H^W+_=;&5NT7q&*IT&Y_M#6!98T3rn>;Uui!LMGw6X#P z^sn2ubj@dze4~m&n)u=I6vAAtf4V?sTes%KH;G{J;k4II=Mi0%hRx=rou-P~XlMJV28%brc})$S88~n!GVUdI znGtrx(c{N9V+TUI6OwcaSXmKkNSc3nhlq$=)*{_DeD5dZ=Q~OVUp-v;cY?+&+0SG9 z==Ymu0XI0NY|msZ40BRsJSLT*va$uQO#lax^)hxrXn(fUT5=H8+gYSD-eJz?0?1OJ z?O(>>`h(X3ZyLLa6gYrSe6@8e4f^_3voe~~ zKLiDk-0P|@Xj_z3k)=xJtR4&4jHS~6J3PDTHm}h81-@W9dNdM%$k_CZZ)6C2y#)L= zv$ap*;J^a)=dS0My7J#8Dmf!jOu3*2v%`nBbtb$GMS%h7&P=s&%E>Cydhs>Nkx6aztKdn$$xnU{mz$hqzuLJ%1cRJy~IaOqH>=FVPe_U?s z^Z;1Pj#|~2`?+;*Jxc6#@1`ADcH-L^)=LvaEP%yP%%`-0|9m!yJBr_&#&Cl1l0tG= ziJj;EOdLESGOs^FhZA{~X>-moluTLIyGe(J42#G1chLF%DpaH0%<1^Ljy(lbIbse? zhdoKPzs9YT(n_8R1MhR@S>ZTR6;!VLr*gpXR53XnQ0Sh)9Df~u8l)uGbkO5$ELKC! z|NA=xVpsqHM+y}je||SNiSgEp)h1H7I}0=SQ<(d+JT6B@piqX{;@PYJF^{C^C#&w1 z6D4Hg;fY~MVdC-FQn{q63r_L*42CkYy}%H?Z-6Q=cJ&w_c-lIfQ!sUxWd0ET?Rzd~ z5I3a*u`-m+k1*#lTZNC;u3ffi@47wrk_EsOR4q4tmGu$7&0L$ovNmeB`srU$unPkh zd_mMNpL8?gh<7@vClU`v(q)(9;N?fq0~AxAKVmr#(k66()_*pl_N>6Kkt-!Rp)KQS?E-22TROzHrlPdsLXP&kI9OfPC=WL^NVOMvADX z*dCa182vmN5lOR@Buhi)W!IDl%5VwYHjjCEOw1Dy60La<6{#%&vt;K+ya05I6CSnYJ z|H{}=K5&!AqBq&>J9p7(!0*QjhVII}7JmBh8hXyX;&$ptuXnXL+*^%(AbAGF zd5(uv@QEtL)^Hk+zrv*{_?gx07pBgCjsPj3y2OK?1HvOJe}+=sNY@>ft0yZ4jGi@#T>}=0bX-@xr5vGE^u6Z~e z$aO^kcq%Pr4B*fJ=b`m|&aNMP6VH2nXuIN%|D=yP9_F47cHz4- zSBeK{tXmUIxqr5!@O+QLi3Hbv;n~i1i9Jfff&AV#?(|^Fc=%LT=kuIE=`axIDRwA; zQ9V11#+0*zT6gmhwBo;^3PxvSMP6$b0wLM2Qk05;2WdiS#gAXWebZQfXa`RYR4jLl zwR?c0Kb%HuJ(8}Gg+6&A69T}|va-J=hAmZkwV!-e{Ihs~o_C@!ej{$y#O7jeI_=|P z$eWN&WoJ+df1Xqe<95l<%#UN0ROVSc1nOm21WQ>wLtF&Z@5 z>(~&e;5{QG@|0fqZ6$6y;1C(ik4((YKFdleV@c!(`kTSQ5sT^n2pXJWX`zvrg$W!e z3!gD#4zo7SdB*;15}6isbdc+(J!|2Pp;zKWCY~CFJEveJ7Od6qI5Mhz8w^9+01JXK zNg*-oD@cx}av`zLj9B`-JLwG)PF(tH%pd&06g-j9OtGM$2q~C4Wc9eYNxl3U83BI4 zs~!~HLD}Nj)}xsxSHbt8XRm+cMpt(pVy`C9B`JUj1xpy1#8@D_%Up4c99%(CDAwFh zHgHdy-B=#qIN1SYqa>z#(Hx$!d&BIZm7H(w$DJs-2HA#72#a z#pC-#1BkF$6%_{tcTN~{Gl2j(`~Gx@K^gRq#@*c=qy~Jrenk1^zh?)5ShutZ0SKK| z5VH?YQT*W=kClz}xh-K}=mYj*iU%UDd3{WA8A9(jR4vwjp~=v`0@KhpDr_5Dk56Kf z?9P2y*5lvMq(BGl;8uVG3OUdzfq!&*dbSt1!q5454^zJ+3j>DHbhSG+m*#VC1>&Pp zi%dxp7`hM>t>%9KG3o93?pV~6{N>#Cnf`+nOv7G3?P*F13Z(8WNBv|Z{=eTv?qt0L z<_jQ@SOZLiz#0PQCm_Ls)FURfU#rjM3bGU`;cKJr?c5+G6BEi>z1XD=BQ?<*nSpg@ z6-yO$vU=bp4?K8GhlYj#Kw>dL48Yi}FEF)@Pw1R~E}B>V_Ku5hK8=ZIRU9~a8Z(i` z33Ib+wpDwB-cnH5_@55dp+CT-0NZeXrs8dq6<#7nuYz1tiP6k%(bJR-c6ySGW1U?l z3yhZly6Q5PB@zkRqnY-d!Lf{L2duJ;*TGG%qQai}-$ucQUL!et=(hKaYruiw5BLpq z+QxAJr%6>hnTVtks-h6!835B)>?}@`505Y8Lm4wvfCFG~yzp&0qZ3mb(24*+Or9PW zOe>S4=;f(Ac){VRR6IC7z75dGzaJwh{|=l;oE--oujPee(FzEB1twYrNvPnaOfY4G zQ0@!ircnWaKq1N+HvKvA$Atft5_JOXE&~1Qg_Hi}CUwGpR-osm%TO745e5n$LQbP! z_YJzLfrDM* zvv#mUC39(18r+FrdepIfYhDX$xw71j1S6Baw0z6^7nrz!m68ED{c9??mu^YE-}R=! z-faI9Fd6{o=!f&QNKlQmy=qb)U;$n76(=&oEQyndx78pQk5x^D_%t&=3V6u`4-bCz9HR#LhFhio>QiwZEg z6WY#EUJP8ojp;*0LSQ#)3Bi`Q{wS3Czvpq-VwZm^q4`1b^u(PJMQ=IoUDA^hCgmK7vx48&Rd3kuEpE7V{-NcG_# zJQcWS&lv4jBUc*OcXdz*0$O*rg%4267EK3S_$x8Zbr8qN-Rurfo%nbDKa#FHp6dPo zlWvG2dqqZM?>)0+C8>~=oxL{|5wb&e5z5}OSN0~3eaPN>uixu@e}CP_rgLG@wX5mpQB zm!mvr(!~SoS(a}ozzGw}9Fq;aXq!&Vb3~^K+#iBwxG!IOl9Q(RN%TV{IBfo(dsKo{ ztj>0A?j-GV)<(wbdwnF;_Y4Mlso-JI)T<)RCrPA4_N$BWgxCs^!`iYC6hOYe)Z>zP z7bL&wyGEEy03NzS0ZuaCCiLF_oR2Uc@IB}EbRuXRUxuEy_L5BH`v~P1W+Z|amyBF< zsPy8~64M4@SK|uaa?K$>GQqxk5pZoDoJK)(&*9F<tO%fB265cws zK3~nZifLdh!le@Xq$s5F0RLOrkAUn{?;+uW^*)EW^wk|mWiB$=eFMi59JFvkJI%?F zW@I5(DEG%JtIYS8RK3r3+sUdkD|BJED9(@{th6(TW7BKCgV1Z&HopkFo^j%YOCCLM z%c~+jqn;xPDFbQl!x0h{;#AR@9| zN5j9{%98MncJwUNa2ua2trsS-2`zvqjoj503Bqgl#msm(2tePGWr<3z0}8lQX>V=Q z{B+W;-e{>O!Nk=39vIX{^T?N9+fzeduJ1o3f?Xld2Z&vb8DCrmQljUc&#aB)GIO#z zy%xBW-&u^rNA1OlDB)*)_#60WnYsyB9Iayp)^i3Bs4D6zH4r%TO4qaW{uh)SZmJd*M)_F4DbbhVy zQ)GdN6NKmq-37mKExhYIMIY!qd)92l+3;2nla}hP)1QtgRP9BT)AHW*SMHNq2_iXK ze5@V6<>Wh3LIg`Cp`1&34Jn=3G=9=-BvwVCo%$OR7qb{}QA=aVU>UXj3-13FMABFB zv)>|brY!i+#4E8Qs4fHwH~+Ug4su*oZcXTh7Xg@8qoL%N;O@s@Svo4$F(a|djndkS ziQK7!h$M0W>#s61P%f|Ythr{p)*t`FG14a@w6EcvGH3Otm-?Owcr$*;!FoHs25nCR z@SEorR3!p*nLhXkQie|Vm-d=V`)fYFfP;|EI_(q=l%5F5t51k!C_CUuSZGVKr4tp+ zR^rRqxb%T=CpNumBA`*&NHW0S4V5dH@7ifRz5qne(9Q7A0kw#>D127D-qJ)Rpk7ot zRUIYf3d6qks=}K5X+yK-TBr zb&;04Nr}Mc{BZt+P=2zIM=@H~RPLcBle#=shmtab zRbt?G%35eX?5n3FtgySvu_{EddLRu2i8nmANT^Z?ZKdER0B?^0@&Agg$x+G&Gc!ie z*EKgw7t}9N{B`d0)ckE9fREycpq6pr&kcAHuWC=d_YV=ZdwZ;3ek^`wWn~pU`)Z8B z?_pp#Mn;%U{QYHOW(sIVlzjjcDTW+vP9m&op%^}w1;kL;5J3|Agf@WdBR(C$T|cxh zns^=oHiP&jFX^5V1-G_k`Qtaw@9vB&uX1c3;w$7bhZ$N)VyMl!Ks5aeqmN@EDxkT> zyn#hK()A~p>7O@zQy{3Ra@cyei6R?xZ5!?cxER5)+n{zHyPW3JCxY36vL9325FOcr zQ_X!jzY@L^7_YxuQjorOr}a5IvWb4KTw`wqn<;AJG0df9Q6jJ!&6{g>>W8bQ&32@} zzjv{xw2uxS>#6>WHi+Z+&_4f|-~$ZOXWNr$#tLCMmAmH08>s;N4QHzYzCR2#+=F-O zeuz*|$IRq45e`Jstf3VvuCS{Pcc~74!D#x%4FOI|y(x%UrAl@;?YIO;Nq{4ZkTltg zdb?qtLq83X@H>$Z@!>jYKkU-w7oE!H+^dq(7=X zx!CVX7A913HI3B!{gczWyZZO1cTm4j6fJBlHg3AnW};Z6_iwQrfNdFvbS|fMwMl9 z%}5K1joS!v3gn|1G_fADkJ$8GND*CQa>MZnBJ_jr_2Zlz*Z*XB5{SMs zD%|&RuH*cq_fXXGpX`+nq5)#4m%oa6@PPExP(IMxtQ|QxmVuPv(7Dnj5)U(iM|pyNzGoXfPtdO zY*R=6z8}^2xXU)9X`yfK%lxH1WezjgEFhtTi_G~$Mn$WgAhX>_HF1Xg{dRvyo)KP7 zQ2-J(`MF9>*w;we428|je+97B0s(b$Ra4xjib6jal-`Wd2K~ODZ~fcEfRbbU`j+Pe zh41lZrN`2*?3C1Dc$U@+8d3?NF|IQ;JJIH8X=y2{N<`T6Z}FdWZUItajTbKh8I;^> zQ*~~cgU+irk^kbP1v zK;ElE)Up0f-7xOEHN}PVFIl}9s4>g_(H}TvUleW-iN@DyE`ur21nYkl=vKi$TIb>7 z?E)V$>q`TtJKH`x=y(!)T+?0$_8f`q(Qu%{l7yngM0q$HaO5;#xfo0np`riTxrxIl*9ioJ=h3m}3U3e%GqsdD5bmMdQEcdV0M< zG~Vy}m*LNZeVFZxg#;-e#ARiy&~qDoMQcPW;z`_6A&egL_1CHC>FJ)8Y@moy=BUAq zX!keLkpW3x^M^`i*Z!VO2fE_ z`Ioc5ya4{Tx^@jI@DjjSmCqvBGAns~MVdPd!Pw2pLQDGjwSG05w+grayC}hmTT2r?R6C*``xk~8T);}t@BI8jmQh% zhGNeV7C12HJ+VKI7jl7aWoe-0ZU&@3v~WQRkz~KvwU}MQF$Xk9+=Cz!1?9|S=d47* zWan{M?c5vY9R%_^zd5W061|Quw%Q#VU82YBXj>Q?Gu?4ST zGDE(<+>p3hF;+?DirR24uQeij?KJHIJ<$lICR^*Vg|m(pyxq!S_2uApYNjZTj)445 zvg!h079MQ*?f7|LjAx@F^4}2)RrnW!GCNq7%&`$){qwr zUGYTjTS;-BmqP19lW#g&U#J@T{e-?T5n{uJYX2unK{$ciWfQ8s(oJb0+-7m>d~1=W za!MM~g_7wo(S-BO?bg*n>JWFnRTYF9<>42#t{;kM^MC*WHLh9=SJ=dyY`f@X0}b5~ z-Ge9jxn=$E-=SxMq#ZT29E!Y7V$idWc)wm+cn4vQXB{@|1Cc^gZvAy?r8|m3J=jbs ze>UB&N;^HfCZ=}h@g#R39}r5d6ZjnHVi>QagYIrx*7QsCmFn@Dy#ne8Rt$&P$Cw)W z`f7tqz2NGcJM>h_e0DKkp*!w|e1Ew0#@z0Dl__nfsb>58|Io)kBiSdcU7QG)x)1X9 zbB*CKbvM5z7Lc0XyupM+TT&;HhLR5t)_J*k9&YKGN0;ZHgQwEIEx|7XbYbO=N1NDX zKKnq9)Sk9cPVF5hB?uYO<>ZL;dfOQIF;E#ni(|557qi;hb7L^xL9R~k9&xue)F$f} zg0VC~#DxNtx(WZ@Z~9%n@=^I*be)VXxLy|$p_qdN1*pSf1;U8Ezr5;%Sht3UM@}r` zq8Z>Ls9Ib~(k^#=2r;Ulu7o!O)&Bk~CkGV?x3I8q!PvnPfJ(^zEHQTze)g~|%bqmB z_{aXo^Dyg{IBu>-QNMN4g<8e$*Ww)@zk_i@lS`o_@0+U797hE8p&we?&u+Cj4?H{8l4C8es6_1VJ3lG{9Y zj20$eviAL+_mSl%dxpIn+m*#E%O_2S1Iaudw+Y)K?8d&mRdMXSDnoIUAnfdMZsJNPaONF-FVGMt+N9esnzZG*(-~#BWW!XM}Gv8OF?kZ>Qoi)_op2W zq~kamwrU*8acpx-Nw)uB(=q~jx!iee(*)luO33x^Bc|zU30tP~d|Hao-7Bx{ak}to zeCZH5V`TfAV#`-LCN7AGYeK$2%^sGLCz%3gb@f*{IY&xqpC7SI^e|_qhK#-M5>$$Q z#Lhg|N@}n`BRJhNHC`HJGR|C!#(JLzp1^ex!07$~?%ik_Z=j}co9Ysy{j#QbX+yAx z{TQZRLfo6=g0@sSIq+I**Lm`TWN{hduU%&xuXs4_Bf>N({fq>|6Dr=&c&*&i_uQ4^ zDdj0i!Dx}Gu7DiPSY1pUuP=$3j9APA`X;1Y3V2-^&IM*}6xzg!?_=XVD( ztw_Bk4A`54^6gj;sY@;C7=pM$`f(`;}!Echl5uh3}3j2dVfjU#`0b?g5>vEZ^_+dA@ zb=C`9rJLB1-FjASzm|GE1qu@>tj8e6gMnqI(H~Fb=H%Z_+#@GatXt&Vdsv_l=>vs_ zcJZ74a&rEb?1@w3!Rx+Ve;Ef0>tKbdF4H?*-o+Z){*t-~QQMkW{#?WuHWS@F^^4~( zG_Gj!{vOG@{Kv;Ko{ei9+P}X3Z};bA0KPn^CFSIjgy#YXE1vj|8iNXE79O5Aqj}m3 zON+vLodVizP>HGiuUVO6sle|#=^lNAJx82nV%)n4fuJb?l7Ux0Juo&JuJKV#qI;&@ zJDzp0s{5u0gc-`;f^^D4rSJyb=7;AKCpgh{DI$|7I zdi8DfldqSKb_FrA%E=s{e2bD2r>}x;cfYUUztu?`^G&_2H@5ofN5C<-s7MtX%GPw z9PA4Dpt)|_o|&{05=9{0*#%uCC*9t(CfWxh!l+Dx1 zpiLk&pe~Y+cn+}AyJGf_;Em7z`Ln}=GJ(f~$7ZqurSb9$`=S!RVKvVwf8@G8usWRO z(5vW8K7n@z3wB@BtTG7k}W9 zzHdWSbkahD1-2g4KH68VfKuI6X#VQUrZHkHqBxp}zZ;hrZt?fBo4%9N2^d5bK$y-Ermm2nxa@>FAV{ z-goF2WP(Rt(%H<5)@SLJplvJ z#v_@v>OL7f$>vW{3PP<)s_5tWbkq^0?t^q$>M30p9{Z1&ndJy>jLa+HFzM9l45Yss zWJ;BK{MZS+7Hx55-x<4k0By)&VOBMs{q`8853ypWI!uX2F)j#wj}iS(xKf;)>{SfE zEY~gm;3g+pSjTCgvEyUm+K$(rzQWfoVbj#pV;A2801kfhdU?nssntkV>}P5hs%l&N zBVlu=!OVD+R^M=)HL4B?Ox4Z=YvJyU=r;Jb!x8H)9Pr*q!vZLLNOa}f%??~_j*?tl z06u6C;#gr92CES0{i*Jv)Q32n4LyyIG4cgWyjC$Hvi#{{F6PXoNnhVSlDT}D&q8v8 zHW?&R3@>KL+@vjmTgXx$-%le(l`ZdI!&T6kUL( zCs8;io7(TgcEfe53C}8n5(pVny>|ZtU~Ert{uW9V86kNjl;(TE{p-geBM=s-On$qD zYl##Q7wf0!#8M0dbLsn>h8O*kF)1ne30c2nTLzB>;)qf(88+wmj*|I~qSs88+-qmT zB_iA+Efa5LG3SF1X-+)NL5vqXj=t-zYFOp!7rUo^ee=nT4zhYNNGz&4gnQ08z;;sDrDv z!8RNJ@~d6DeQ)ebZV;=$&9Qra0iyv>G5?DWuL-!gFl+F*QXOVs5{##h5Q*Lr_bfpP z)Uq|X?9SSI0YIpIT);G$bN#Qh-+k_M8CWi!J1zKGmM`LC<7dA7EsK41%PD5TLa_Bb z<|Y})?-ucHsuO?s1{nenam)$n9^|!1Uo6=aB(rsHoid^T(su8PrvzE4m-#sP95e+@ zc@L{vPn2~s+ZQn*uKc`=IyyQGVWDKxt_{#=r!iNe6MQe)-q*W1StuzTcLM3>sPq7k z2w(6x&|%*9=7Qm7Qq<>!V;s?@uXc2lci>6j2#A!K8&Dt~8Bu@ZV4krEV0+dBFT%)}>iX7Y z4PE!T8H`~9OmITAQc0e+06XRMiH6cnZ+Ot0T3irdw@A70s+p*$uAab7 z43wsQ-nwSI3K6^IZ~l{3q;lSQth&??KZMg0iE;PAy$D`NWHixkTR(jE`gP9&EJ`P{ z{+)Ieqy+VFwiJ`b)LpW@c=6o+vK#>-pJEuc-o3Mb1gf%>KR(CE?H{iMh(Tii6DE#r z!6_8J1JbdwDFp}sFp0KclYc2F${KsGDm4Z))iIp`su9yV(7P)H&EtTlo zzjr$euxQ=q4-p>Qn{J&wU1d3@E*a^yd21nGq9zmxO=kbf4$I09VJT#kmh$lSM+Fdl zVNiPhQtMuroba244$m633O&_L;#xpv)(fiQ4%bIV=sa7vlEr4AS}Gz&P5fhXGYP!u zjpJ!XiFtZ;iS+W+O8WZx!@o7(*5*+2Z5Xn!=6)40Wl43mx7g28z1ZvKjQfbp8=qMm za)2S?=vhf+S}Smvw!fEjfH^e2Cmv_r3Aus`et43yz+%c1Qt(xX0_HLEZzSG;R#1=> zJnr%t&TD^zLpkcdzCXWX1|x_4)NVWNkma{%25v||FQ~t`U4QM%hGNfi-kSdV%N8&- zDCIb~L}y!lb?ceVZG0?R*+(QEnLN)Ac|^w?i#RNvfIL_>ZqdDwMyL(&F)Uh8&Guf& z1P+MQx?H+#&;cX<>hh+gN5Dhljdr2Fxu z);Ob=HiUf8>p{#cQP^Md$&_4mxTCXkE~=eod5^W=0X?rjc-r8WLAa=iZ}ROq=3l&0 z!UC5mM0Gatsb=G7#i+YG5$D63{0KD;tN(1N%8%RKG-w{IRXOG7QAZ#tv@y;*|D^#}N9d4i#| zm{g5dGDl2Nib7(Bc7DeVS1sb#S9pMg1JDjZsGunP{_`gmL^z!Ym-TzWn&W*q5)aXR z*npKi56syLlZx`Wt?E;k7`>sICm6JslhbvLt+-mPCNG~Qyj4?-0?gIY#scB*2du~z zABo^FM`UhcRbWPhaGPZyoHoYA>(%dzRWatkiYG*6>u5D`7e6$ymjQytxAJg1WD2LhJLZ^wDx$zr<+dvwRCC}c}d;0{O>^-8}wK4z)UIiILR69({kgzfuQ_;ug%v&@jXR z{dHvE0TmTrg*%sSlFqbR4cH4!M)jrhV&wIb2ajsZWza@H;GSxxrkSN+w}{u&&{(xD zr7ub4?-Hl=O{h|GS#F}@eB?V+Oq0~>ExdJX3 z#$Mk6&T?~VjeSX={%4Rc%#ceFz6wD-KMc;glXUvaS%Ugdy*r{?CQu;ges!9sT{qg9 zf%j1wdV|f&gsAU(erW zu;lh$NU#zQuOEiMUd6o;DPsXG8{6N0)cLq*5hH!~^EIWk^k3ZiO67Vor)Ii#cDP=3 z8K>)h+8V#}qegq&*8xgLAI2NVLk@BZLiM~smHbhD71BTO{%5vsP|pzSReFwRJ!5W* zxK2>y>jKR{qDp_Zk`bl_BJbhp2;xEKi^#pgvnU2GRaPm{Z%At5Z~4rU7e~5w4*RNp zOayo5@m`VJ18jXQdQ7$DH;c}?ZpKt?YnY2pjC)JF#`QjY-;DJ1EvxJr8X8S_NI&qz z;f}c(Feph!Gk^&C_jUdG&w?Cz4I)tB=j)XJo7(To`1Y+aiq3ZBEADr^U+$q0pAHZ*cT-0Ha<0F~>6Qj0Je@^p&RkV9IcI#fzB0<}g z)M3JMwIjA=Rlw)-D}QLYJR+;QIf+bBWN`mi+)kA#4`6eaC5+Dn)k|+}>o;F4P_zy8 z1^P^(>R6AEeZZG=k!P@VTl^wQEEq=7pc2be7wD3O^#?o+S&JQ}+F7vUYpRQe!TMI+ zq*Y%LC1kV4*C#TMyWB60r9qriU-=_%V~fxOcou=T$pk-V-x zmrV9+`maw_3xWM#C(izJ}5Puc&KllQODKhW{|ni|Rl zY!4H&^+L)Pa|&O}{hRNX8gn`!edu+QOk{0GMg#NC6g`{Qx&CB{DURFqI@0@MPT?l+ z2gOw)bHbR(?ce^Wavj5LaaMlQ&`Pb+SO(}$IeAA}STm!MT%N``%m>gY@H||qwU(zh zL2^zf$QdDs^hnaL^AhYBC~YSWlNVm@DLpwv7(gT%_!p#y4_d7R3y^qFbp7A+$(BAw zFZ2#}oZCq3TNl|_v}NvM1!dMFA#O;&G=NY>lXgIwAEmf+Oli9S*e#tXlUHsH{bpt1 z>J`59Q$0P^Wez>}f4{QF+-B>`Kh;~n?Ou0A;d{1=naIyN8`Vy|_|rIihWVHA5t-T5 z87o51i#_*60Rvf&R5Sw%E9>gtUxaQ~%SbBFQ}@{&J*o^36~DzF>a83?hd zJukS`BrgwciR6*d8I0jp~X1BIqtI#wNI7c52 zo{Rs$Q4I!QU_-vd#qro~9Ag!-HL0f^%rFZmHA zz@72%vZo}0Nbx-UzQ@0WY}7C-&nj_7|Cg^~sV|`g2&}fG!iGLlpp-WfN+TJ9M{OpA z0@IDi4rsXE0S?XOw1oRaSvf_ALUgsM;=o4#_hp}-;_XPmzcwZKz7AuAZ6EcGBVR&{(ci&+VW7nG$xA%~nfU9nU3w zDmhJ6BYH6i(n2w6^UG=%!0$D*wB+~*XrmPIac=>SL@zkyOz$>*N#i(t+F)pUnD@FI zVA*PrrYuD!BtTagI8>o`a*wlNpwiFpXxu!Fk?EzVRB}>M3s3`)hxZB22+=bMsN9Av zItt)%Zu@};;NgConYIO`(0hm)n)T8oeWn`XpXralUP|pf>-Rr80=JV37YspE-W{}J zha0>HK=*qPBFSYNV1%@-JEehNB(9Ps5C+pl5m;+bA0|w^ZGW&qWnLg|b8NYOQ2^^B zEFVO>uacvOo&m%XOB@TTVTg_ZB~OLTq~mhKb#K*j%5p6+pUD;)WMfud%+sJ!Or#!w ziQ@Z8VsZ74^a~z6MEAJd3-OKDf_)Y3hh>)IXQF8cCoIFaiHx^(h<0|((}uHD*Ke6G zqk-uDi-U1{iS4CGZn}VIQ2phZBhWe`u`U9G%F%!R$>CIOL@R3-d;bS4f|^cNN(p(G zyk(8LuD<)K9B||{no~^t>vzjNGOM-9C+B3K=3iK2EkNzaeY~~# zYz}l$QitxpH!CK8@B9np9!`E6;Q$!-#l^gOo_<}T1;dB_?QB2^Q5sa>6I@rkH_W%8 zV{yJloSzLH$iISAw@}KhVmK3^f#z{eLviY0OOnD@`9gV~Kjo*Rw=7(M(f4=?swTm94 zH=xvyvlHuum1i$--k&m6i-}4f9NCff7&Ic)M8n{dhy)=5ZTjGfc~VGa@&_nhNYneE zmoP;8Og=|Z{>j;8eN>j^N=VKVW$^!c>@T65Mvo;NMd=EyC_Jlm)DSML1_Cy}CP~eQ z0)k&VoGzk(i_Xq+yRTpgdFO)(CAWcDmLM7su$@AsL6dnbDBf6=j?Su`vm$YK*_uk2 zqYo^7)9Uyl@0Ah1wAyiNvXIe@QnTLlmxcOJ61gEFRZPHiiOX%7Z+bUj4y&eE97$zF0P)N4&{?*SsqJ% z*Jnhn4$RCU&8RnMFdgMM7e&`@;ewp~;NkIWn@v}!WJt}b%;m=enu){ zz5l}D6Za#ZC##4*)*7(r*KUX9aH@(Bm-9Pq_KRPOrFx&i)G0Kar6#9A1U2hAp$aGk z!p0ZGSR(ooh|IvmFT|&6e3Uo-XWk+EtMy_?EJ|2?^THQ;oVON8YhKicZZ`FagSx61 z8MX+IzsbJNku`b?=AbB zzu)m*Z?ie>?`zjN#?Je>eQ3qXQcGwyYQf9aE;U0_qaCTJEuvor!IpHi`$m)ks=E{G zCd^3`)%XON#KbRU>7uYVWR(IWn+w!N}E%eBW(mwS$(=rA<{8i&l{#X3Bd$Og4kN zeHPw8vC|$+04SFS0H2npa=3YUc5FQH<=68s@nEhVJ!O8ut_r~p?GeQSv=17%f zq4(EQhn(3SzZsOC@KN|wmepQRyBbNk>TbL(sr*6Y>=Vi$OEj7TOrcO`EjhqrKwo79kB;|YE2&y%na}Wj z0dFC2ncCVP)PG+_i)+*b(n;u`s0CZ=CAawzRRDgt#MK9neKKIq0JTE3Yh*p7n?l<% zAe|(6PtpXT?N zkHTRHqDV5dOTE=3=W+Lj3xfn)NfJVwU(<4OM%<%U7;;Uk=t&h14cWU55;3BRS(i*+pF{5+LI|9R7xwsA9$Gx``gPAdfk2? zN${D_zD#w?;x`~Xdev}p;S}^rvy;JQqRb^{!bb3OmL26O7}VY~sbSXPPhg%WkB zu&<2zkCW}cFKH@w_SGf9*=qSV(d>!zP#0@gA(jH&@YsLRSbhQ1v>(jhs4AAE0|TOp zKww1UH-Bz5MtyBy&vu+5JN)SLK3nDLp%R$q24P~Uc3ppw@yu;K$$yjJ?c1@?FF83En?1azD>3RqXJf{YGy@;V zdnvRuWPe^lsnB(@Q`PPnB^&@@^Oa@n^rT*#&Nfz@OCSlR_E@1+lbDlj3n%wyQ#LU( zBM6fRfDqLdFF4~HN@-gi+>@u$ji2)!zls%f_-{M!dDZHZaB8EJD^O2R6=bve54Mya zHG`SS%iIu{tED~udp~jMi=e(=3b?e#!cP-Q7&^b(pH$`8pU}IOq?_s$)x0`FgHG_b zdc1MwCO6f2R5kb9#omAe`OR>fDlQFo`in)~6t~2gdMLvPXt@WX=vpltdew{L>uvOc zsx1-JdyfLNcoN_cd9LL$#JBmpJuY9zvA^zkFumwwOcpafN(2bU^H8Q0B4w$)kl800 zjA>w@8BQ;H2PsxU_1@~9-xK+rZW-5~QmB^ddu^7uc}c0$W#JmGKYfDwa~EIgbzhzpPPFhNN93{NV_sZKOij^o+u zh=NaZ)N^#B@;$R=me6q>TQ`-*-@${e;TjDB7HfKkqde`4%QH&wvO%sD7VQsN9$^nJ`%qFD!w?Mh z<0=4*YG$i|c?*sK_lsXl!bd`^EtxO3XUc49@CX@I9(*~vObC1*ti(rFlqaMq)u!bQhd5KS&YLL+oJz$H zKhA!mWb%!hclyIdkjPH!l9GhS2K;@2WyBbxG+3ggJaayaG2yl{@SwSpCZwdqF()@? zWuUmlPJi?5lkX(N#2Pv}Pe8bs@_IUv2WL1-WwCj`pNZQPItJQ5etihYdr|P}Jz^b#A;9XKx96y33i&**JvRAqDTE?HU{J)5H~H{#nv`D& z5|2=8lrm>+$JlngQ$ap*8^CM)yFm~~K%AZGNfB@0@(>aW`y^bmULTE`7kvg4zi z_hTFAxTtOE|1Pf1DRxffcDb(x@F_R0UJQda_Q#wwb{6)!8{O^#V|VgB$HY6ShXT^b zJH)=rJuZz<877KmPy#F+YNHoVUGKYZ)h*jD^``nGmYv!nKQXP0)=?hM_|eGViH!ZSh(O(7qm%Bi z@1!i(XKB3992k&z0llUuod}>wCPBfoG!-;xXliRpvX7t7_y+o27*UZLxEJe%+1;jv zb33`jcDT*>9n1N1x2^yIw3;N!_CV}UCM;F5(gg3{U2}o56efrl90s6@nF9bMC2XCt z=%b`s%v1%QO>b%}$aHL{ML6nKAYo5`6DtOrcHkKWB=Kgac?EvQykDm2v{UJJm%lwF zA-0t^h`Kov1FsP@R)$SC(g%MMeme53W7DtwYFB@isLg8*blu8SCJq#w(|RHb8>|cy zv*?e}b(gO}+`jM~^Qt{2Lb9psmnMYR*?Ug{V z`XeQ1BQ`eYBh&2ot$WiYM}}kk_xP8q0MqT4IQ^n7arUV-lvGn& zTM4FJ(1uv>fnEZ-E#Zyn(L%g#xx&P4f@noY$*qumfQ=9aK4E^-E=*tHf(18EIJzm> zE#NW4&YSnuXfyAeYd^_+hHCm2yXwe*h$zv1YU{Aha_jMEzbRizrZn%pyP-EG<~cx? zHWbQfHu2XIeq`P{gJM(VRi*E*Ry18Rntw?)Z>bzbrph)Tky#HouW_`rFwp{y$fD6w zJ?1>*sXZ3dR_PuFKsJcuG(TbwDw%~W4fqWnZ$lO=N7crVB$axv&U?MxS(_THUQk{v zr+Nf}%$6b%^-i%|6VuZ&kM8wPr{7Ye;?oCW1bp`vL5*Ni*w zz_ySRn|rbs%6YQT67gsP@?3_FPA>sQgyRzQJsI%&y>=YW#4Q}evM}c(Jry52o;>)a zS+(*32Xt<2%lr3&W#K911>oKcynQ!$K1_Ka^qfHu2eHJk&%urG9YknqE`>fw+ljJZ z@HwR^5i&x^-+RkMNbE;JQprAB!bBt_TRXZIy%j+q4`4^-=fL%v1*k1Uz%zX<4=>;? z{ln3f$7U2 zuy{#^C%S+iF1GdvWy=uvJhJy~V8u4IYpjT_Lt97WFC$im$TRkt2YA6EcnsOwv; zh*WWp-NkrIM7>@{jq_WHcj}U-49C+xc<&7dPSv6rAkTy;#gPXOth&?@q_nAY&1d-d;U$eB8*S%m?{Cv433K>K)Fe^nMmt_hDyV!|tL$cp0 z1UvX2QT8-p;u-(B2kUiG>2#ITu#g{4QovlLY_cNb>1jI+IUMPzgoXcBIZU;+wbd3& z3)X?g0mFpQR=^;Y*G91#M$+`JwD+oCbt{M*nuM3RA@U5>AqS)Z0%?zd`e_Y(cOSw{ zVhHdpJhwc<%a&FH@$vCaV{<|KAUxI_NSDiRv{og3+3VcfMt4>@;~q0K(W?6##@}soTT^e5@b;)D4 z@zJ$Oi_wz0!s8i_c$l}C@8^|WAWN)&t=;!r`Chxz)g8`b*h`te95x_fj{Snvjv zy&Z@B8q;y(rv{b#?0eux%9k||`JcSPKBP5JSR-&R1V*D28BmcbsPMHICe=3ppMr`R zPOkg$+H53FiK~$R34D=c*nBt*a26?6rkNXR4n*gtD7`DnDGl&sYrI;_foI*#59lCB z1ko%c+?9u5Y?_0pA*7PXX;N}~HZaL{$~K3OZ)Q>%L;zY^ZQkeX2t6lu9iESo0Y-^g zCS+}As;#Yi&G@A3!f8cqol63AaBWhFc#k^}2BzTbI6sryQlLge~j z(M5zI;V}xNY|V@}CaazoEfaltxQPr9;`6nK*mm8%09a?u;X{D3X;)W)oE)9{%U8GokR=-( zpVUnoMAf`QAO6jJTc3!J6UrJz&nqbv|Mp~!QEChy+pZ6f!MX$=Uy)<$ZQrvw1z)mb z3;-D*q8p;VZffP`<__|wG{=2(-W-jMQ5O$04i|6JzFFbc>q`1H5WD&9Q{SelWmNO} z|B_XwtMI5Wy2?nJOz7r1zM`r5M}yXLze#~+h;B2&F2t!kZ5*QU99LUOHFchWUyb{J z;;z8Z&`K)G@OGvm%+pn?H^j2x+Rl>aTH2klh}XSv*^gLM z%|YC+@xojS^x-_p`G@brK$Ydw9$vdUngki8t8T&dKpB#zd8Lx3`lZT>K_5r%;tbq# z(b3PsX?&zJpVHt1^ z8te*Y=2k`V*mZAXKKNKN7p{DZN z{X~>6C+AJt(Ix~pn{EQ~E&v{aaM=^f3wJ;$M;VGa&Z~4G`5k4fUh@OVzy<*lQJh{BF)*CD=Sc-)#0VHp4D?O;QNlQsdI6pTwXRJXd zy7^=CTxD|$M@pud>f=E?7o*S_dwH1WL(x`#%nD=2_P+S zk_z7EhX}}aF1W6Tl$9Mwibt$?k@%=Z`CU0taIE>gS^2qi z%zEZV9f7G^Y25^|rA5Y*u0*7y-woZ+A>+DfUyO|e=QYR69tQGfbrTQL&DskCk(&yjl*&;J7yPIenN1l`C8@jskro;<^@q?S_P~F-$sU zW^4f32hq-@1Nl)VpUP*L7DSC>LCcuJ__0g3J34 zme2K|x1|tOo9=MdTnahwtgUsx$lKvlg~#{@i@%me@NbA6H{<-?Tg#>W*uwQQOg=rr zFTM7!4*TN+@q8F~wotfmlQi&J_*${V_$@|?(LV$=x$UW%(?1z<{j7{oR#6G)UX*_O zmIZ{1QIqAY@Q(rLUnf(|l1V%$+aI)lfN?>JC%BX!Ca{5PB=xmH-_qhg70^_U#id1D zzS^F~$!>Yi+b4t}qkyZhJyVB@WcEpl*LT0CY2bYi z8yh>40sBSL9VfrDdk_RFp0gdWlm~q81@c6<_yo~vFLXbWfti317+9^*=hGQJ_nCgd zN3U;;_p>%(+*%@A?#Y^1AZ;*O6mupUn%MC_oZo9}xrgt%k&nw1PQj-H2~FAmAl&B9 z*m_}vrFXiA4h+%mXTi*`z%n2dKAcNl{(dIkOYrZ=$f~M5s475?6snE%4uk0Zr*eZ@ zk1`z69ZE0>kT>XF9|Rt*7uz@8xY(WCepL8V%0~50t-jso;$hq$k3u3JV&^rX`JZto zsG|5vaLEkR%U}X9fet8kV6SaZ>znuE)`6WSXOsO0_TNqGu^ywpH$+2kpgBL@Wpz@Td+NQs^{&srz-P1kw`)&1ndFukAZGSd@LatES_Uo6`)VA$KZ@n{7qeAU zrisvN^IC_i(R>hV->%N5Oc6`l^C0zDYWLZ_8Z5h_3<4git=-|cw6Zz>I zzU%{h*~V=d8Dn~iHOi;(oF}eP{QdhJoQVWlv9VaWbPjCYA533yu@Ms5j}|CleWZI5 zBaNlhsnoGCb`PeLmFOgYr#@j!^E4*`vOw|KOR+I=asB?^r?=O(|GYdp?qE*!I@7K_ zZLs|I4Sp)A&^UIDA}`WM|9xg83@`)~2E)MjlGw4vRs8MqYsk_rowjE|Zl= zdVwz!N4=OE1$s3*kkl|2@3G&wD+Z5voriXuQMtCmazKs!l7_iF z4^}edk+REclFrD>la1ki!_rBJNmIcxl6hlcqwR6p`e|V(jp!Lx(1#dyDX#}l(efsj z&jTOk@p3coia%j?PtAtqT+DvE&K*u`=jpSC?l~)+iNvPtFaI(Uc)2foD~l@gRA`D4 z2S;)1$q42gs~&{VLF{Yxwu~|-rI<;_V@e^mD;MtilMPFBw#{Gt!YEFFJLMleVaqN8WA3|<3tskG#> zU>0ufdwPzJ0}q)nr>kA$%*+%R7#JI4Bk_5c$}TPC-ZIhQ(bznHsMHK2|IR!_TiYMo zLPCJ;bhYsmd*wG7v!E8&^s>(t(7}U(#s>Y*CdBzE!tigRe}9U_uJdF5^p_^L$;v>+ zD4W>X1hvQ$6AKikST`?3+&HjqK<@!JgA{HMeHi=m`Tm@t z`f6Iqr?)x&Bg#Qrs~cV6k$drgmFH)A<2RP~Fb3-Rw^<9cyeWp`2HR$`T;crg=HPc3 zOo+6hXJ@|?=zm~6a(h%QFui1@xa`g8?b@R**0Cbry81-APh^XKelV!`ESlop7uYCj zPmBAw4>l{q2}(PN1>zf;dY#$unuGN0a671-+K(#Xz9=>S*)xN%P98?}#DD~vJ{S_< zUbsyg5XInOZfbM*=rMkXeF(Yd>|dUviSmIT0Rce-$py=gGQSv+(P7<)iH`mtn58Py zfPNX_z9Wm1QMWr`<-WX04vGpcGTd3=yPFf0?Qy;TSJzudMfHX6;zQQ}LrO_Y2uMhG zmr8dJCEXw)-5?$1AlswEp-CZDU1lX$6UcL@41ESKG(h{hyX2cUi$z@jyusV(I%vrAw1 zS>Qcly7OBQ1X`>;=Q6$Y*3b}GNT1~gq3nF6MV1uvvHXO!&MSrp6C(a(%U?F8+MCbv zSe&|9?RJ7SL#q?e!wtN($JMS%kw2mquG`9~oBhXCn4zmDf2k&khd=E7X6vrlK*86AT{j%VzD4hgpn zgH;q0TArPEcLraI=F8RQ4J+JcMv2~zLg-K>2EW7tCf2@f4t7#|@G z00pzl)a={!+(;VvW%t{ocaM16#$!}ealHbcKPWVRlT4^)#by#ep%s5T*IXPSlGbBo zKmKl4)U3gGjt&`1q&}1F{w`#vjT*j!Ev+}|!1Lt?OHAsKVk*0S$OoM=04$ZbhX-P$ zBaBA?oA+a}-G)tQ3y_iTNaRQa7}sN({LsbU;p69D+bj9e9;ME3^{SR_wi+YhbtV}D zL(cshb>g%^>kln1yc!ys4F4W!0zcF(r^mmc6fj>JmgwB|$O9={zVe;lL$=zrI223J z?D9w7n_rix@}?gP2#f4!)n{XzrPUr(_EO(-0`+-2ITR%Q?Tr863`o0WK!;KVfl%(w zW1N+|Sk8{6Djs0b2br&PL>Z`3R8>uQPAu9qBO!>Qi*Od;v-}lRMG25N15SF9 znAr7O4crQ^cWu)7B{f+ax1JjOA@vqDG0u5oAGUDz=Oq%a6|)UuM53myj^t;l)@0t)=gq4DuqPs19_IJSWXXDZ|b*~{7$Y@SeY$N9xA2JqPgRlWHnVs zXI~BWMz9ae{Bmc8+T~1`anY{en+?@fSK3djls;OBA?nc|*8b${JHT;ofhRzeI`bNK z-MVW@b@=w1RX5^+wBH`}F3GB@7nK#aK8N8sgel)sw=$m(uW0dIN+!3z z-KW^gVhD>-iL@vdjv@h$(hAf8WG318bqm7cRqX_*q3O6f@={!UTb_GhEkLNS z+FhxrACB{TZ^!aI&P!aDjo(>->@AmHMjx$&q!$%60<7L#kmS19Fss1hTZB|R>r}T- z?DzLgoje+kQ6*UlpaTdy4)4Fw%qL?L-y!KmN%?MO7gjqd|Ap(2lY_+s4h&3eWFSfm z0r1hTR@~*{v`GLtAX0?!Vj0`o`prF}Nr9J8RZFjg;&KKv;XE91Tsi0Z&QMR;b zgKjEfRB$w3H<`fr#@U5QgoK`v1HzQpi&`23U-zYmi~9A;$4;O&*TzCsGAHYy#a>Gv zi}C+7P-PS{9+dAKKi)Tk0s$#98H{pE<}VE+f?;e0S^&DR9Ngn$0XtFi?Pd6&wU`}x zwnhx-fsDLQ!@)xb3c;?h#-kWickR%l3t#Td(_SF^z^tAv-QIj_ZM~MLl(0H5+&VHz z_{N&Z&c5VyzG0c}6=4*G;2*;nlN6 z>;u>`WT7x@4we%3R&+@;6^1<~ib9^Z%TyGR!$70?i8GA6uT+r9&tD$8j@P^1K7l<&1_aTlkF+`Ovc)R} z*q0P8zXn_H0I8};mM{rT(=9b&a#D_3%tzRFVJ2EG!#`$ZOi66RuE4l3-W89fp#H9( zZ3KW8z;&JCKN6A^Z)yliLgTO z4c7rC0vxfzy3N%s^+Bi-yjlFQv_HLg9#Zd`P60~E?Sl-N^%MPUTJ~i_Z6W2P4iQW` zAkwKC*vtdwH0{@}>lFY!oIA%V5=PVn#T`<>-h z39$E}!P=~ArFAU7P|(wIk=1`Y#<;Jyy5q3}pxGYo9Qe^3lQJ=prevH*;sNr7;sov~iD>*$uf$v=kRKph z0gq3|#u)~!LGkeugrS<|9|Lm!gT<8sQ6fsv_uD6H<^vyG zQHV7|YD=HASF7-=GZ|E34G&&-**~n?_r2C>#C1wg$WCXar+5kNY}>xb1t}}_=T!se z>r~h^pBigQp=`RPVe|ufzs%79p&=G@?j+4a!Z@Fd+^~jr{qYQ}EO&NunKcB;G|3H4 z9?UGteWY?O-GOo+l-qhyXy$^@#!lb@-$(-JoeCB*3_Z(UY(P6Za`wjryx$>Y*mMjG zGRKG55a|2_pCgdcdT;F(Ryy=)fOt&%X(uD!e+4s5wt$lZe*xKXTO=g~%^`prLMLH6F=>SkDLdZPXLdcUsUEYZg8Wzg??OAgv{ zyDJ(z*Kkrx9ZWj*pq`tX8!TMv;le$p!e)SSI$Pk&Ld8*XTAGUg_N09MYF@Z_%2hy& z9vZBn+!s46mJkvm{W^<>oR#&v0>{bM<{bHaf@za?Pa~j|5uD<;R1)tWpE^+p-~o^h z(sq{Vbdcf9iHUr3b({c*C>s@;9JSHwk)ZbJvkYMz5MEZr3?8)s8$+-JtPRLlBAiYcmuQpEWZ2IsN3G%nhVR-tA290?)%85EV44ST3{<$V*kW4cKNP=;XRV7r_a zjRN91*XP$a)z6?ryT2$Gsnv}8Y!{~hIuP*BlR!g5vq|22JwmSga-isT|oGree1%S(x;G@xHw?5EV4KP<+#Q zAX(e6NA>*{55vBvd$qbe$aF><0VgcV3yYIyXmnl{2cB0nySuwPNy+&b90?JpV@+HT z0=jCJAFmQg5TBtnzU#E)mr+juZUwIY{?j$PbF7my`O_(g@0jO%ym)o~>{qJrcE$YZ zT`XtbW1EzV0DoRXgL1an0Uid>LBY-Rp_JV8-wqy{-z|57-*y#9!fEqih9aFwx=9zy)^A6O?5D+Nzj46Ci_j9A7cOFn8i)Jo=eolAs|)IFtD&?JXAK z`+k|lnVi(74Qt!=pl`N%1tk|IR+YGgIyL;WW@Kcfs$f1H4Pj!{Ff~n3pa~#ze&eTU zKT*ySgB-#2ffIK3-c z_|8^EfERrKY5eQ`uO)Q6C`&z$p}zL+PbS!q`lAN!`ZI}lD*$;21tW&ifOo@Ln31J+ zagwQwphUo~Zhb%pJ|aY5`UzyoAHh7RVPgZhpyGguixh|(0dN~8)keUVsC!-f%>a2# z-Sm$Jyr@z^j7r>#f6`5}*$2GWPL*ar7TSSV<54%pU4UW?a`I?Y4s9E}Za+C{5#IX) z=gC?%pn?t7#ZQ+gI5+Jw34VF;{(e$-#!v@6dl@5Z9bg_GQ_`X~Qi!?OL;oAlZ9DW* zz`lfij{505uzXAorQ*c|Hd)eEa%dqTK_5PRNb5h$|JCmp;2f-YXKrCa4ZP^#4u9s0 zSR0?GXhgsWoz5GWrza-GP%iGfSxb$47^5g}@99v?WYzz0maw$)atK`rMGpFA6sLcO zn0;&g$Mm<(seOYvdxFm?UT36AXnL@U-KqJIzs7bE9Zc-;ybfl9&1j<{A8%QNy@c;x zh^P17-#WL#!OY4R9R}+w1_K_-v%mDL9$~WecQzw>GJm+Bmq#F^%l~#o*`?jQ5}bV? zc{&diLe;JJq*T4Ro*7Y<&htMxz?d;=q1+g;(ioYZ9lkrn2%r19saJ}Lr={t_;)y=^ zsAFs#mluKz<{Y_2^_V2L{i~<-bV@u%FPOn(h3-Ye2BH7s+?igrFP{#(DN^!W3KKmi zyZOk!ZTO#=O0ZGrf%IKO3fGr0I5}w*yTwqZQ2j>Lz{ix#uRkC!n(uf%G@MAM9I&Dn z5Nm7yS0R$QGgFx_zT5QD0v*gKK3iK{t+=Ln@UcL_pLYUa?(;m<&)bL)MCdcMMLih}HPgiK*6`+EUD{v{tjbm47} zcEEMShJ3U_qfQX9=IiGAgVd;EdqwB_S43yGPAeA@o%zbx_-R%;58Coz7K)lpxCSj0 zE~{>2tgq?b$P!~XB0JxOBlUplY7yvSgHGc~J^UygQ}wKG(>GbbMW~8>06f(1-@nrl z(Rjo5AN3L<0h|%76s<4;+cX;yZA(ef5bRWz@fwg_BDfp$rSX4!g{jF|Fjifsmcga#V?4;NzuZBXfYG1 z%jJncl|YsnOs`NSXi#TcM$=kVMTkHNH#awZBcjJQr40-WHj=X<{=`2WEz#xl*iAxN z`b|^Wp0LycrgFEJhcd3N+q{xeraL|VjI7|db$CvM%6TkI0a zt3)d6vVmY9y&>%WR z)+TllO*pNK@5NvC$4KbSS5=edifY2$=XRS=G?wXGKSgj!(k^=_0nHDifEc)}NIN>> zM&MG$d)iOK0ZzAHlgttW1{)m}tDWcWHt`luEuy_rb;^yRSrguL{5+foO=~+B=%siD zU=hAeE#%s@llaId^eXdIJZn785UXTE;8Bp7Drj>vo5cfe{HIi)aIJG6rds!VI2gv za4?8}Ty(`i9Efc6&tpOk=j-;DfOjKIn$GgA6?`U&V5adMr}C@IoYGRLRe{ybUkPRb zfp6LNZ{Bc(eT2}CQ6y-@fH*M(NTvNJi7|NF2RK3@5Vm?}Vx>1T@16s5MC<-lp4)+gDWjMM}6=o|4Qpx-Ki*stRI1nXhuS%;;N6Rm#}jTu*}%uG5vs9D{7;Pa(^$xO-C>zuPp3 z8bQ%_iexesqkT8wET*9UG>Qd{RS(I;fUph&F?sGwte~K#*#gT9zZQ-zejRymRnGWi&v6Azf?DB!k`-7M{mu^ zfrQYuIq;Y0zhYARr9>ENr4PiaU0p6(7$|_2+JSN0{G;$U1vEmDcIpZDWlSD$qrkaZ zdMEMibpSn+CK#A0tUb4zE0|uFGI!%)dJ{mUYvi*j@xqMs>C6y7MuCwF^(#`&h(YVn zQHO89ayJ65N5@!RWMA6K3B$Y#{#MiP{cs1TbvnR*N>L`WPq}Z36A@ysNl3KJ`?tpg ztRcJF{ydf{gg*ty{ET~4Ne=@Q2_!*RMs!R%fHQR`nLbhAvCWg6Mikpdo)?od&Gt`z zZf@^8;-UmYdQ1Yvfc0-MnX1vth&Wu_-^&fS^7-n+w3V}m*MK6bZmJsz{=U3-%PoNI zF9HZ(co57*f|!$g`Q$7KV?$jGDVT>0zU1I}B3)ln`BV`Lc9KStTGd;8CW#x<_n`lb z^mMNEzXiT)*KH`E<9h}sTHwkSUznV_Dy23t8tZpf!2js##1{+u(Q;3Ue&LOZ3dXk| z!6K(xZHI-Zv4kNyj8o>Uk>QfcT%=*qi<+gM8tcdTn%tV>8lFEuNab|7ekh>-6#m!? z9;>NQWJ+V)FA@JS9a}*>mHo1Sc-^@X7kK76t7Jr|u@JuuJ{85Uo(+5Tf-)9(M?amN zoz3Z&&?SF*$o0GG17MY6AQml%vjtp)=L1PlIc^w?*SGn{(7iCe?#V*@YPz zYF>j#pxm*4b#+LYl9hB5GHBNfG`?Bzw2Dc)P0;^F0(&n~K!nCy@E(8T8?#l}FC$KD zL#-txg#@Z!&^#8K#czWF#!+5}3rL~4O2jXOnbeJpKHM}2*H5(3 z!?4a%Q&P-^v&611Gn|1dsGBm+(9S5z+ssjvPI;&TII1mVw*Y2Gi-`=*B5_+rCZ;uz zZ6>V_rwcHwQ#oFzB<-x2b+~q1bk=KjBSD8!c>i8%-r@`VJNmlRpb{BW4VaM(Xfkx% zs2PJ1mrsS;j?Z$Nnv4Xl0Z&P<(HD0qaNBs{GO%u6UYJe9kfbn_I<36C9OMOKWxim> z_IhFlT&61025;{1!le-`ZhsMvzZ@0Z14(jSvjV*>7P;OF5_@_pn|*AZHZ?tZKcM_d-Vi-#!S5QyLS zjDmSTFh`UfHfe6-g3kSPETN=|b3-6P{EiD@fWIRtu#>L-d;TMa&Spw}Zl9P9n!NUZ z+G&qxqVG>8vU&qfSiSo{W{$#n_SR`}2@hV^p%c)LeE5K$}Atp~U(F**Tz)hCl3j}}- zNJ6)#qz6mQ%RW!fgTI^Hg9(eemLBn_cOpabkKXn6dmDJOOkwOqeMnxvl|o?rGnRrN;oJ)LSVRjkD6rI4Wi?Pk7ScaRq@!bFCF8gl zNZGuEKQXvog`t22%3#Z!D5z{GEvDRNh)Z?nR$6w-N_u~lLqz%@U8FSKWtr`Gg-4(H zg8OkZVxd_020mzJiPNE8NnAr7JOOMZbZ%LL3UfeV>o1*#?y+yNR0`>O75ZtteIfE0sOeu9@K`NE= zy;(Nv%`p&^{r+vulRBB3>6!#^lv)EaO!^wPZf^}7nHq^eqA zHp|p-5Z`#*(GiXVzW+ig=p|W&)1kq}=B6BDnZI~*N9wu{@07qw=2EjO2+@%(Kc;0( z9(Ck+?7L2+{y~olCi&j$lhY@YrTR7wHesEsIWc)GDbLyIBxzaxlsgt>lVOKr!#ImR}E4!D;eD8wib+yUD!q$OzOs83>IV?L&(6*&VDb-}nq`smCr3+DGG z&WxnFTgi=tMr3@xyny5iCh;h8iFBBBK+FyYEbS9t(cd;8CfjQL!h7Yk-s0~=Ew9Ys zGW&qE1F0pdmg8e*7{I@Y2}Z}_n#Xrh;ff!0pasML?ouO03!w#k82|9R_FWgcY8eHG z;brt>R(g?K7VOv7M1({{>iYWM>ry6mVjGV$gTN8B;Bhv{-41MlM9kOn6IK! z)!p4q;Ist)1VT{Br1g|EE*ln)ST9Vj{Pwn7Yx^yN>MJFDM{K`H(yCEoqL#m#bC6&X zG)_2?e}L-inDJ7OK>l30Z-Ja$ZN#Ld-ue$20Ke}onoTqIhi%Y}Z<`0LJ4bRm)pRss z!14Yi0?b~6S)#boKQ!bH%~wcWnee%w<58aRcbHcemmSd8sCjw)6#r%0I~Bj{)yP1> zq3-c9k45p-t2m*$;{N`$77qd@g{(0lA7LSY5IgJ819l*nM;ZJ)U@Fb5)p@<+{tp}-9Y6ldM^0T& z8uNYd3Nvn24>PJ1%NRBO+R`1j6ev`TZQ2cygX;ZT^z+z%c<4D0Iq=WlL!c=dc6IaL zhxe_r0{*fh{vPlP$Q$`BrhWTDB?H(^ye2_WPb5~$vFgoE&;XGO1vt0Fhqtn~0Y(MG zo9B6dcLf|5z%xEiM;>%XL@y*}WtH!*di?$)>*R#ju(6c~l+@hQSP-WK5$W|JHYkW1 z`OTxD{euERtXv5OPl_Mazp&_~$^rGn<9P#~N1Syvnoh|x`Twd~T95)-16$L&4xC%s z!R9uy|L5gsz5+e~uRo;mYKFE40ipeVx|o5yN?#VCWsOtZwrP6IS|0s|h?OKxX)qfGLBvBTmuk)V!07iVB|iza0zUTGC2UwB(IckW#_U#>~W&^agl?AI|?=zddg4 z4FkIoI6x>FBK<`Fp5anGQA$1-MFARaT)>6=*y>rbM4AXE`yKNE5MlQ2s&u@DtJnc| zcEL%Y`0*OWUZ)JX_YCygfY8)IF6OsZwmaTVnSnaP`}DJoo2s9e!-LEc^+#Ua2#CkHK07b?JP2QN`JRLA3I}<9jXqrm>)URL<6< zY-ovRRPqxuIW9~|QqFq0QN^CYGQhJ6j4DESy2Hb-R~wJjjkLmk9?sD}P>9>TuxMH?agmK~T$K7W@7KIp3g2$cxK&dRwVyRy*5vCMv5gt8GQ1 zk(BJZ*xJ*BT3F{W_u+^2;257PO94QBY?kThRVzFPNM8fG&;jdG{ z-s@fcwyQPo9@|8;Td%E?TaxTRJs3s60ElFgnC%U<_6R;L7#z0qKtB$;)v^hyI!oc#f?=9t{+h5Sy5~A)$sqzKmx!1DpDgskk0OLv`}*+b zIet+fRN5|b&_>F$_?X1AK%@@C@83Nw4p*SEWMvsjVru>(h`}Hd-Aki>^lO@cWr+w8e$GJ5i(L;i_c{MH$7Yu29 z`JTbB3?u*@S$NoyKLgGqFe(SiS(!+Dg`ep>zD2xX0aWO*@Ax^HvKuyNwTj2DgHv62 zAz;6ZjK_loP$dvn{`7!K+w&O~0(@%EcSdCj6Cnr#Aw}oJcw>=wAw^QAD82Bja^o8x zV*xLA0F-wdK4zf90H!(ud=o&9Eh&J8KmiKs=BeyzdE2L@>%p=APAcGM;86i z;o%-4Yl#V19cl&!Az=Oqj^zk2WQ0!-eF1gm+jBvg`N|i%px0miZA9pa|NIazNaK-gWRU&01I2~)&L+=u^edU`%X_C`{yh^{sg zPyhm$9hq9&i5}Ws+ivF4JZbmk^Nxp@?Z!Xx6b*F98)cPLw&%}h>K?8n5WCX{Dn7!x zr2r9N1@F2b;$K!22>&ICn5^bZ6L(~{7jJp5_~$;9AY4GNE5Zf?n!7Q2TP4K7VSg&;<|?r z61M+;bTRZGGw(&iwfP5f%FmzjMPk*JM;kmTPpB{=tX69bfcKATrst(TcQ5E{((by5 zdJlc>pQ?pR=e}A0@SM0r_eTftfC`rgxJ9|Zy>Jnvny}&RuVSa1xTW;)YaSO9Uw%ZD zn#n(UUT*82>1qxLxtw_=DEgl|xuGm&RnnL`H!CxEj23fvf!`KjZ;4 zjKoX+l}O44H)`{i&*J_qsNg`-Z+AoO{)n1s0`Sb{otS1|K?Sv87%Gy69&)cjdM^0i zS}FHCl5(0ZSCDnIoqu6a4^w^ZOVuqWhgrfiJhwqVz(Xt-3}|O31Pmt=)x&L@Zr!Df zHTMpSRcL_f25h5W0H=(?*iU?|0tSiNHS~MY8|@0&B}{&}vdBLI?;b>!{I-pO)1=0y zjx9lzB&*pR4Hs%U#y?lQyrP>#-DP{_ye8t*L1IIKmGU#YScl{`uM9Qw*iI$9N;ZA7 zw*88ztD!-OR-aK(kiLE`SWCC>H3LJ89nY=Lkdp-6b?WDN?qm49MQF%K;C#*ldnHmf z4Ukijm%ThUI~WxfkjCsE7&z^In{8nTy6nkG24d{sbwR*#sOkURHj*pDZ8_r3l`tph*0`wm(-N!YVb7lZ;X;=Sn$Mc2fn5xPkp>Y$QMY+-nw@X&ALP{iV(|vM zTr*vf6B@<|4a&LMC2^7mJj*(*TfeMB^$84B0MMQH8{5{#fflIm+jGu_|A&|Z4p9kf z1qH)bk9zbCwgN#CgFHfWd%1&gKbU@7uLuIHshRxNlzdlaSJy9ZO%lx?v;fza`_3l= zO+I=ccGyyXY6Dl2^;sgVNH8btx@Y~W<@oA$yCkE>5H%}D@RvMjfJ1)c5a~QF^YkUU z{OYvzi?YJ?rIARrDo|tTLPthQ0?QqU99H+Zr_I4u$R)4sM;*%_{fL?u7g$3erZZSp zi~N1-cKUgkDslROjp;iN9Rdj0s1e$aN+7yB0Ax9Uhmy&J00YKuPo6eo3oUL6QrUAjj z+p#;hX|I7<$hQoSINaVlFyOkRF#SYnOF~NRHcF7CR++P>?-NyFsS1awQcWy-UqNM^Z8Rd}4`FJY6(2jQh_6f= z)J1x;z}8t2!~Uvk|CF#~GUny5IMMwre%pyUgT+R8ex1;y=*;+2j95Cwq%gFzz;=+G zRq1s|aWK;&Q{we)k6(6P9{bg^B}p@DNz6aEsL1=1#$E24sv2F(C&~DOLjL*P=6#;& zhXUzk-zdoj4=cz_2e;NSs)yR^!u7xmX;ul{Fo=RMpN1x=;Z2m_amYS*wUb06*qF{d=HeN zVx|Kd^afh{gP4$J5+Pxa{-0EC(O#>UP>YzFOa{0b7l6_xd36DAkIVbS4DcuAeh&>z z)vgCC_PjbXsdmjw%Sj1&j%`^x8a>q{3qwsgo{t2T>1w0UG8}NOU~&W+g3u+KuT;HC zDH^F7{Y5;4|G~MNhStwsUtQm~=Ghu`qx>kuTyy^0hhLVj>M@G#I_K~ygZbP$ww7}3Q-c|m zR%h10_z{^cl~VzXWWa27%Hvr?Y+;HtaTni%npx%a@uLxOx1)Nb;7EPUI-~sEq1XkC zh`H0uMT z^hn^dReF0Uz;4(?hM0wdwpdGBM=GhKLa!`l)JBV?;6onE>j|$_H9aH1{1PXWbq%M* z>{f5wgyq_h%`6$Ut;MU+J9u34IWih*`$-4wRPeb?Vtn;l5Bd_} ze2NYdg>Z)sm+|j0pprUX{6H?S;v#5{M_Sez$jfG|s=d==te#VZtDpXM7@(pEF(QH< z+`q|o(o56YxqSiRr0s9`Qnr0Q!=zaYZXDSA+`bT#;-G|_gn}KBhZviLVJe3bc8upa zNBh8(B`!#YVedZYkpG5hz$`yeWZ?Iy*ysdJDzcguMGyiSN&@P&q~zpLKnDaCJR$%` zm1?{^9QkS7md&@-|2l{xFi=^iOji3i@!-TSRCOSChszuX%-&4rQ$ zKKmNJ-l7v7zS3s%%&&#BbaH8>S^?owNIQg^Ot1#b5`n-<28iKCffJY|pq>v2eM!tp zeJEreH6l`w_?7IS5oOCGjT9pj3+ypMj2pcWvn){YU|`2$s{=O!F~7^4hGJ~d-gZlV z&HPbCB$zU*t(`lRD~y(Xz_UH4f`t)#09AbfSR)52I6R_Wl&vvt;p|Geg&D)u&>)plOQpLLi<`o>-1PhQ3md9Wd>|m`(AuvNW(_ z20osl2QQ2f<7qIhY-au4K4Qe&%G%_zlHH3vNcoXwXFFF}D6$iNz`@oD@FIk;-C;g8 zVQh@Yd%=m9pFgj%l7M$CTStAIp?2jtksoyoBWpjk6l@FQ?!mMpCW#YMT8N&4k3vuu z8X#)Lg9mZ7piy8ah}Tdmjd6{{Ng>dgi{$uQGtJdHM*?=cUYSlB2dN%=>OFEhMhHKh zO}OlhEtMs5)Pw(-SKuC}g^?-8kxP-BH4uyhOVa*5{a5ksSe%&TNp5`w3=J)ug@q+( zc{@}-QYq;xpNcLN9mPstM_rRX<3$#76}_LOemUO2n2HqaNi5PbayH9R+ryw_O-G@( z{2QuUfF-O8l0Br%1I^)Q`OwOQ(XKCpu15UME5femGE8K7fg;MWG$|T+{=EP7?PPm3 zJ_Y{Eiq5mhySBTEZ(hj(c_CoQ!Qaim-wB%4&BCka&1wzcm1%H(!-qslf>BEBw&SbL zkR;uN26sK3%)&Q7b~9dFCisI>(w zh<@Utx!!Zk0S&kwu>elqb>s4}DN37P{V;31Aa7TkKUE}3+_v+QPZU{P4?Dwv7w^e? z=B&*Icczw-#Pvo3>DS!U?nH~Fy%0<~tpcH_tyAFGTVuTr6v1AN;0G7b)&P!fUHz!C|#JMgvZmx5WxLlv({Wypx~n)D@0{(`r(N&cC-eo}PlZ&_nBm|Q9y8@4(t z6`)g-b+omSxACy+g>EUmqzyx&gLHN&OURB(>^Cb`fX-{B z*8TmnU_2&xHF`&bwodKWcg^Ao^dY3N-D7=bTpp{q5e`}F)%qy&S!k}oTwW1$q|#CU z!O5DxX4|lLKNta<2Ex3Y?_{i1Mm9W6H}ZqEd-)GTvl@Qy@Gqn$? z;oJZCsXDD(sK#UX$P9R(<3OmcMB8O$riX##$^*53t7py-^u-FdCyn5>1#=h*Ivn4t zYLrOn?4Bj1KV}0Z$~4sqzhHumZK8}tBcGnA4*C0YD!fmca;#6Rd^m&r+jGiE|LI1G zXZjHUjgf0H(3J4Du4?hPNF9(-^7MGwfkDxFY zHyan1Fc;V2%N?x$-wlq=mbTVD|L+@0oz!Z<4J`lX8$4_st=v7}jxPU~d-(sqFA-l* z-2nGcBJQ!Zun@LzcJXnueQV%nrhpiK>yM}`F>$g%w;A)cpeYGRp$ (src.startsWith('http') + ? src.replace(/^http:\/\/web:8000/, 'http://localhost:8000') + : src); + +interface ImageComponentProps { + src: string; + name: string; + onView: (src: string) => void; +} + +interface ImageViewerProps { + src: string; + onClose: () => void; +} + +function ImageComponent({ src, name, onView }: ImageComponentProps) { + const safeSrc = toSafeSrc(src); + return ( +

+ ); +} + +function ImageViewer({ src, onClose }: ImageViewerProps) { + return ( + + {src} + + ); +} + +function Galleries() { + const [activeId, setActiveId] = useState(''); + const [selectedImage, setSelectedImage] = useState(''); + const [viewerOpen, setViewerOpen] = useState(false); + + const [{ data }] = useAlbumsQuery(); + const [{ fetching: imageLoading, data: imageData }] = useGalleryQuery({ + variables: { pk: activeId! }, + pause: !activeId, + }); + + const handleView = (src: string) => { + setSelectedImage(src); + setViewerOpen(true); + }; + + useEffect(() => { + if (data?.galleryAlbums?.results?.length && !activeId) { + // eslint-disable-next-line react-hooks/set-state-in-effect + setActiveId(data?.galleryAlbums.results[0].id); + } + }, [data, activeId]); + + return ( + + + + {data?.galleryAlbums.totalCount} + {' '} + Events • 85 Photos + + + + )} + > + + {viewerOpen && ( + setViewerOpen(false)} + /> + )} + Event + + + {data?.galleryAlbums.results.map((item) => ( + setActiveId(item.id)} + > + {item.title} + + ))} + + + + {imageData?.galleryAlbum.images.map((item) => ( + + ))} + + + + + + ); +} + +export default Galleries; diff --git a/app/views/Galleries/styles.module.css b/app/views/Galleries/styles.module.css new file mode 100644 index 0000000..e42a6f9 --- /dev/null +++ b/app/views/Galleries/styles.module.css @@ -0,0 +1,23 @@ +.img-container { + position: relative; + + .action-button { + position: absolute; + top: 4px; + right: 4px; + opacity: 0; + z-index: 999; + } + + transition: all 0.3s ease-in; + + &:hover { + .action-button { + opacity: 1; + } + + transition: all 0.2s ease-out; + opacity: 0.85; + cursor: pointer; + } +} \ No newline at end of file diff --git a/app/views/Home/index.tsx b/app/views/Home/index.tsx index dc0ea74..979ab77 100644 --- a/app/views/Home/index.tsx +++ b/app/views/Home/index.tsx @@ -3,16 +3,16 @@ import { AlertLineIcon, HeartAddLineIcon, InformationFillIcon, -} from "@ifrc-go/icons" +} from '@ifrc-go/icons'; import { Container, KeyFigureView, - ListView -} from "@ifrc-go/ui" + ListView, +} from '@ifrc-go/ui'; -import Page from "#components/Page" +import Page from '#components/Page'; -const Home = () => { +function Home() { const keyFigures = ( { return ( + {keyFigures} )} - > - - ) + /> + ); } -export default Home \ No newline at end of file +export default Home; diff --git a/app/views/OurWork/index.tsx b/app/views/OurWork/index.tsx new file mode 100644 index 0000000..96a772c --- /dev/null +++ b/app/views/OurWork/index.tsx @@ -0,0 +1,57 @@ +import { + AlertLineIcon, + HeartAddLineIcon, + InformationFillIcon, +} from '@ifrc-go/icons'; +import { + Container, + KeyFigureView, + ListView, +} from '@ifrc-go/ui'; + +import Page from '#components/Page'; + +function OurWork() { + const keyFigures = ( + + } + value={250} + valueType="number" + size="lg" + label="People reached in last 30 days" + /> + } + value={18} + valueType="number" + size="lg" + valueOptions={{ compact: true }} + label="population Affected in last 30 days" + /> + } + value={18} + valueType="number" + label="People in Need in last 30 days" + size="lg" + /> + + ); + return ( + + {keyFigures} + + )} + /> + ); +} + +export default OurWork; diff --git a/app/views/Preparedness/index.tsx b/app/views/Preparedness/index.tsx new file mode 100644 index 0000000..58b442f --- /dev/null +++ b/app/views/Preparedness/index.tsx @@ -0,0 +1,12 @@ +import Page from '#components/Page'; + +function Preparedness() { + return ( + + ); +} + +export default Preparedness; diff --git a/app/views/PrivateLayout/index.tsx b/app/views/PrivateLayout/index.tsx index c8f0415..8465672 100644 --- a/app/views/PrivateLayout/index.tsx +++ b/app/views/PrivateLayout/index.tsx @@ -1,10 +1,8 @@ -import { Outlet } from "react-router"; +import { Outlet } from 'react-router'; function PrivateLayout() { return ( - <> - - + ); } diff --git a/app/views/PublicLayout/index.tsx b/app/views/PublicLayout/index.tsx index 4085dbe..6d1a082 100644 --- a/app/views/PublicLayout/index.tsx +++ b/app/views/PublicLayout/index.tsx @@ -1,10 +1,8 @@ -import { Outlet } from "react-router"; +import { Outlet } from 'react-router'; function PublicLayout() { return ( - <> - - + ); } diff --git a/app/views/RootLayout/index.tsx b/app/views/RootLayout/index.tsx index 1526b32..71ad7b2 100644 --- a/app/views/RootLayout/index.tsx +++ b/app/views/RootLayout/index.tsx @@ -1,7 +1,7 @@ import { use, useEffect, -} from 'react' +} from 'react'; import { Outlet } from 'react-router'; import { isDefined } from '@togglecorp/fujs'; import { gql } from 'urql'; @@ -46,16 +46,16 @@ function RootLayout() { } if (isDefined(data?.me)) { setUser(data.me); - } - }, [ fetching, data, setUser]); + } + }, [fetching, data, setUser]); return (
- +
- +
); } diff --git a/app/views/RootLayout/styles.module.css b/app/views/RootLayout/styles.module.css index 54231a1..8be3158 100644 --- a/app/views/RootLayout/styles.module.css +++ b/app/views/RootLayout/styles.module.css @@ -3,7 +3,6 @@ position: relative; flex-direction: column; height: 100vh; - overflow: hidden; .pageContent{ flex-grow: 1; } diff --git a/app/views/Team/index.tsx b/app/views/Team/index.tsx new file mode 100644 index 0000000..3b79ac4 --- /dev/null +++ b/app/views/Team/index.tsx @@ -0,0 +1,173 @@ +import { useParams } from 'react-router'; +import { DownloadTwoFillIcon } from '@ifrc-go/icons'; +import { + Button, + Container, + Description, + Heading, + ListView, + SelectInput, + Table, +} from '@ifrc-go/ui'; +import { SortContext } from '@ifrc-go/ui/contexts'; +import { + createElementColumn, + createStringColumn, +} from '@ifrc-go/ui/utils'; +import { gql } from 'urql'; + +import Link from '#components/Link'; +import Page from '#components/Page'; +import { + type TeamQuery, + useTeamQuery, +} from '#generated/types/graphql'; +import useFilterState from '#hooks/useFilterState'; + +import styles from './styles.module.css'; + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +const TEAM_QUERY = gql` + query Team($pk: ID!) { + team(pk: $pk) { + members { + teamId + position + phoneNumber + order + name + id + email + } + id + name + description + } + } +`; + +type MemberList = NonNullable[number]; + +function NameEmailCell({ + fullName, + email, +}: { + fullName?: string | null; + email?: string | null; +}) { + return ( + + {fullName} + + {email} + + + ); +} + +function Team() { + const { id } = useParams<{ id: string }>(); + + const [{ fetching, data }] = useTeamQuery({ + variables: { pk: id! }, + pause: !id, + }); + + const { sortState } = useFilterState({ + filter: {}, + pageSize: 15, + }); + + const columns = [ + createElementColumn< + MemberList, + string | number, + { fullName?: string | null; email?: string | null } + >( + 'name', + 'Full Name', + NameEmailCell, + (_, member) => ({ + fullName: member?.name, + email: member?.email, + }), + ), + createStringColumn( + 'phoneNumber', + 'Phone Number', + (dept) => dept?.phoneNumber, + { sortable: true }, + ), + createStringColumn( + 'position', + 'Position', + (dept) => dept?.position, + { sortable: true }, + ), + ]; + function idSelector(item: { id: T }) { + return item.id; + } + + return ( + + + 5 Teams • 85 Members • 81 Active + +
+ )} + > + + + + + {data?.team.name} + + + 123 Members • 5 Regions • 21 Active + + + + + option} + labelSelector={(option) => option} + value="Temp" + onChange={() => { }} + /> + )} + > + + + + + + + ); +} + +export default Team; diff --git a/app/views/Team/styles.module.css b/app/views/Team/styles.module.css new file mode 100644 index 0000000..117342c --- /dev/null +++ b/app/views/Team/styles.module.css @@ -0,0 +1,11 @@ +.container { + z-index: 999; + border: var(--go-ui-width-separator-thin) solid var(--go-ui-color-separator); + border-radius: 12px; + .header{ + border-bottom: var(--go-ui-width-separator-thin) solid var(--go-ui-color-separator); + } + .team-name{ + color: var(--go-ui-color-red); + } +} diff --git a/package.json b/package.json index b5cfcc5..46fce66 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "@ifrc-go/icons": "^2.0.1", "@ifrc-go/ui": "2.0.0-beta.2", "@togglecorp/fujs": "^2.2.0", + "@togglecorp/toggle-form": "^2.0.4", "@urql/exchange-graphcache": "^9.0.0", "graphql": "^16.13.2", "knip": "^6.3.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5128b86..fae86e8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,9 @@ importers: '@togglecorp/fujs': specifier: ^2.2.0 version: 2.2.0 + '@togglecorp/toggle-form': + specifier: ^2.0.4 + version: 2.0.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@urql/exchange-graphcache': specifier: ^9.0.0 version: 9.0.0(@urql/core@6.0.1(graphql@16.13.2))(graphql@16.13.2) @@ -1564,6 +1567,12 @@ packages: '@togglecorp/fujs@2.2.0': resolution: {integrity: sha512-OuoQ9Bj7SiI2sTLpaM/HivU6HpSbZ3ANBIn7f9KUz5eFcfwBBEDvjI+4ah6WktJEYTUKY4RxX37z64qOrTJSwA==} + '@togglecorp/toggle-form@2.0.4': + resolution: {integrity: sha512-+EzRzXK/PKlisu44yARpxOkoeowz+0oKk2Rl3CdhxtBfTVfzG28aHAklDTubTBssS8hneGBTav2aInCqmwChfg==} + peerDependencies: + react: ^18.2.0 + react-dom: ^18.2.0 + '@tybys/wasm-util@0.10.1': resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} @@ -6357,6 +6366,13 @@ snapshots: dependencies: '@babel/runtime-corejs3': 7.29.2 + '@togglecorp/toggle-form@2.0.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@babel/runtime-corejs3': 7.29.2 + '@togglecorp/fujs': 2.2.0 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + '@tybys/wasm-util@0.10.1': dependencies: tslib: 2.8.1 diff --git a/tsconfig.app.json b/tsconfig.app.json index 67afcd4..6f824de 100644 --- a/tsconfig.app.json +++ b/tsconfig.app.json @@ -31,7 +31,7 @@ /* Linting */ "strict": true, - "noUnusedLocals": true, + "noUnusedLocals": false, "noUnusedParameters": true, "erasableSyntaxOnly": true, "noFallthroughCasesInSwitch": true diff --git a/vite.config.ts b/vite.config.ts index c1a993e..0f2933c 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -3,7 +3,6 @@ import react, { reactCompilerPreset } from '@vitejs/plugin-react' import tsconfigPaths from "vite-tsconfig-paths"; import babel from '@rolldown/plugin-babel' - export default defineConfig(({ mode }) => { const isProd = mode === "production"; return { From 6b12a114cca24a8b9784c1c89ee268cf46cff1aa Mon Sep 17 00:00:00 2001 From: crssstha Date: Mon, 20 Apr 2026 14:15:03 +0545 Subject: [PATCH 03/13] feat(login): added login page, info card and keycard --- app/Root/config/routes.ts | 12 ++- app/components/Footer/index.tsx | 2 + app/components/InfoCard/index.tsx | 58 ++++++++++ app/components/InfoCard/styles.module.css | 8 ++ app/components/KeyCard/index.tsx | 123 ++++++++++++++++++++++ app/components/KeyCard/styles.module.css | 19 ++++ app/components/Navbar/index.tsx | 10 +- app/index.css | 18 ++++ app/views/DataAndReport/index.tsx | 36 +++++++ app/views/Galleries/index.tsx | 10 +- app/views/Galleries/styles.module.css | 14 +++ app/views/Home/index.tsx | 107 +++++++++++++++++-- app/views/Login/index.tsx | 115 ++++++++++++++++++++ app/views/OurWork/index.tsx | 19 ++-- backend | 2 +- 15 files changed, 530 insertions(+), 23 deletions(-) create mode 100644 app/components/InfoCard/index.tsx create mode 100644 app/components/InfoCard/styles.module.css create mode 100644 app/components/KeyCard/index.tsx create mode 100644 app/components/KeyCard/styles.module.css create mode 100644 app/views/DataAndReport/index.tsx create mode 100644 app/views/Login/index.tsx diff --git a/app/Root/config/routes.ts b/app/Root/config/routes.ts index 3eecfd6..8864e78 100644 --- a/app/Root/config/routes.ts +++ b/app/Root/config/routes.ts @@ -23,7 +23,7 @@ const preparedness: RouteConfig = { const dataAndReport: RouteConfig = { index: true, path: '/data-and-report', - load: () => import('#views/Home'), + load: () => import('#views/DataAndReport'), visibility: 'is-anything', }; const capacityAndResources: RouteConfig = { @@ -56,8 +56,8 @@ const cookie: RouteConfig = { path: '/cookies-policy', load: () => import('#views/Home'), visibility: 'is-anything', - }; + const team: RouteConfig = { index: true, path: '/team/:id', @@ -65,6 +65,13 @@ const team: RouteConfig = { visibility: 'is-authenticated', }; +const login: RouteConfig = { + index: true, + path: '/login', + load: () => import('#views/Login'), + visibility: 'is-not-authenticated', +}; + const routes = { home, ourWork, @@ -75,6 +82,7 @@ const routes = { termsAndConditions, cookie, team, + login, }; export type RouteKeys = keyof typeof routes; diff --git a/app/components/Footer/index.tsx b/app/components/Footer/index.tsx index 44a1680..ea95753 100644 --- a/app/components/Footer/index.tsx +++ b/app/components/Footer/index.tsx @@ -155,6 +155,8 @@ function GlobalFooter(props: Props) { styleVariant="filled" external withLinkIcon + textSize="sm" + spacing="xs" > im@ifrc.org diff --git a/app/components/InfoCard/index.tsx b/app/components/InfoCard/index.tsx new file mode 100644 index 0000000..aacbfd0 --- /dev/null +++ b/app/components/InfoCard/index.tsx @@ -0,0 +1,58 @@ +import React from 'react'; +import { + Container, + type ContainerProps, + Description, + Heading, + InlineLayout, + ListView, +} from '@ifrc-go/ui'; + +import styles from './styles.module.css'; + +interface InfoCardProps extends Omit { + icon: React.ReactNode; + title: string; + description: string; +} + +const InfoCard: React.FC = ({ + icon, + title, + description, + withDarkBackground = true, + ...containerProps +}) => ( + + + + {icon} + + )} + spacing="2xs" + > + + {title} + + + + {description} + + + +); + +export default InfoCard; diff --git a/app/components/InfoCard/styles.module.css b/app/components/InfoCard/styles.module.css new file mode 100644 index 0000000..0294fcf --- /dev/null +++ b/app/components/InfoCard/styles.module.css @@ -0,0 +1,8 @@ +.icon { + line-height: 1; + color: var(--go-ui-color-primary-red); +} +.infoCard{ + border-bottom: 1px solid var(--go-ui-color-gray-30) ; + border-radius: 0 !important; +} \ No newline at end of file diff --git a/app/components/KeyCard/index.tsx b/app/components/KeyCard/index.tsx new file mode 100644 index 0000000..516fcee --- /dev/null +++ b/app/components/KeyCard/index.tsx @@ -0,0 +1,123 @@ +import React from 'react'; +import { + Button, + Container, + Description, + InlineLayout, + KeyFigure, + type KeyFigureProps, + ListView, +} from '@ifrc-go/ui'; +import { + _cs, + isDefined, +} from '@togglecorp/fujs'; + +import styles from './styles.module.css'; + +type KeyCardProps = KeyFigureProps & { + withShadow?: boolean + icon?: React.ReactNode; + pillText?: React.ReactNode; + info?: string; + withIconBackground?: boolean; + viewButton? :boolean; + onViewClick?: () => void +} + +function KeyCard(props : KeyCardProps) { + const { + className, + icon, + pillText, + info, + withShadow, + withIconBackground, + viewButton, + onViewClick, + ...keyFigureProps + } = props; + + return ( + + + {(isDefined(icon) || isDefined(pillText)) && ( + + + {pillText} + + + ) + )} + contentAlignment="start" + before={(icon + && ( + + {icon} + + ) + )} + /> + )} + + + + {isDefined(icon) && ( + + {info} + + )} + + {isDefined(viewButton) + && ( + + View + + )} + /> + )} + + + + ); +} + +export default KeyCard; diff --git a/app/components/KeyCard/styles.module.css b/app/components/KeyCard/styles.module.css new file mode 100644 index 0000000..ea651d2 --- /dev/null +++ b/app/components/KeyCard/styles.module.css @@ -0,0 +1,19 @@ +.key-card { + .icon { + line-height: 1; + color: var(--go-ui-color-primary-red); + font-size: var(--go-ui-height-key-figure-icon); + } + .icon-with-background { + border-radius: var(--go-ui-spacing-sm); + background-color: var(--go-ui-color-red-10); + padding: var(--go-ui-spacing-sm);; + width: var(--go-ui-spacing-3xl); + height: var(--go-ui-spacing-3xl); + } + .pill{ + border-radius: var(--go-ui-spacing-md); + padding: var(--go-ui-spacing-3xs) var(--go-ui-spacing-sm) ; + font-weight: 500; + } +} diff --git a/app/components/Navbar/index.tsx b/app/components/Navbar/index.tsx index 35b5914..fa811ed 100644 --- a/app/components/Navbar/index.tsx +++ b/app/components/Navbar/index.tsx @@ -1,4 +1,5 @@ import { use } from 'react'; +import { useNavigate } from 'react-router'; import { Button, DropdownMenu, @@ -33,7 +34,12 @@ const TEAMS_QUERY = gql` function Navbar() { const { authenticated } = use(UserContext); - const [{ fetching, data }] = useTeamListQuery(); + const navigate = useNavigate(); + const [{ data }] = useTeamListQuery(); + + const handleLogin = () => { + navigate('/login'); + }; return (
- - - + )} + filters={( + option} + labelSelector={(option) => option} + value="Temp" + onChange={() => { }} + /> + )} + > + +
+ + ); } -export default Team; +export default Members; diff --git a/app/views/Team/styles.module.css b/app/views/Team/styles.module.css deleted file mode 100644 index 117342c..0000000 --- a/app/views/Team/styles.module.css +++ /dev/null @@ -1,11 +0,0 @@ -.container { - z-index: 999; - border: var(--go-ui-width-separator-thin) solid var(--go-ui-color-separator); - border-radius: 12px; - .header{ - border-bottom: var(--go-ui-width-separator-thin) solid var(--go-ui-color-separator); - } - .team-name{ - color: var(--go-ui-color-red); - } -} diff --git a/app/views/TeamList/index.tsx b/app/views/TeamList/index.tsx new file mode 100644 index 0000000..b008bde --- /dev/null +++ b/app/views/TeamList/index.tsx @@ -0,0 +1,76 @@ +import { Table } from '@ifrc-go/ui'; +import { + createElementColumn, + createStringColumn, +} from '@ifrc-go/ui/utils'; +import { gql } from 'urql'; + +import Link from '#components/Link'; +import Page from '#components/Page'; +import { + type TeamListQuery, + useTeamListQuery, +} from '#generated/types/graphql'; + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +const TEAMS_QUERY = gql` + query TeamList { + teams { + results { + id + name + } + } +} +`; +const teamKeySelector = (item: TeamList) => item.id; + +type TeamList = NonNullable[number]; + +function TeamActions({ id }: {id: string}) { + return ( + + View Members + + ); +} + +function TeamList() { + const [{ data, fetching }] = useTeamListQuery(); + + const columns = [ + createStringColumn( + 'name', + 'Team Name', + (dept) => dept?.name, + ), + createElementColumn( + 'action', + 'Actions', + TeamActions, + (_key, item) => ({ + id: item.id, + }), + ), + ]; + return ( + +
+ + ); +} + +export default TeamList; From 6f0c63505e3b6047c4a5715b9fd535b83b0739d3 Mon Sep 17 00:00:00 2001 From: crssstha Date: Fri, 24 Apr 2026 15:42:57 +0545 Subject: [PATCH 06/13] feat(web-app-serve): added we app serve --- .dockerignore | 16 + .github/{workflow => workflows}/ci.yml | 0 .github/workflows/publish-web-app-serve.yml | 25 + Dockerfile | 44 +- app/Root/hooks/useRouteMatching.tsx | 2 +- app/Root/index.tsx | 1 + app/components/InfoCard/index.tsx | 66 +- app/contexts/UserContext.ts | 1 + app/declarations/env.d.ts | 15 + app/views/Galleries/index.tsx | 1 + env.ts | 41 + package.json | 12 +- pnpm-lock.yaml | 3060 ++++++++++++------- stylelint.config.js | 1 + tsconfig.app.json | 4 +- tsconfig.node.json | 4 +- vite.config.ts | 12 +- web-app-serve/.gitignore | 1 + web-app-serve/docker-compose.yml | 12 + 19 files changed, 2095 insertions(+), 1223 deletions(-) create mode 100644 .dockerignore rename .github/{workflow => workflows}/ci.yml (100%) create mode 100644 .github/workflows/publish-web-app-serve.yml create mode 100644 app/declarations/env.d.ts create mode 100644 env.ts create mode 100644 web-app-serve/.gitignore create mode 100644 web-app-serve/docker-compose.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..e0cfbe6 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,16 @@ +# dotenv environment variables file +.env +.env* +**/.env +**/.env* + +# Sensitive Deploy Files +deploy/eb/ + +# tox +./.tox + + +# Backend +backend +!backend/schema.graphql \ No newline at end of file diff --git a/.github/workflow/ci.yml b/.github/workflows/ci.yml similarity index 100% rename from .github/workflow/ci.yml rename to .github/workflows/ci.yml diff --git a/.github/workflows/publish-web-app-serve.yml b/.github/workflows/publish-web-app-serve.yml new file mode 100644 index 0000000..f6115fb --- /dev/null +++ b/.github/workflows/publish-web-app-serve.yml @@ -0,0 +1,25 @@ +name: Publish web app serve + +on: + workflow_dispatch: + push: + branches: + - develop + - feat-web-app-serve # TODO: Delete me + +permissions: + packages: write + +jobs: + publish_image: + name: Publish Docker Image + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + submodules: true + + - name: Publish web-app-serve + uses: toggle-corp/web-app-serve-action@v0.1.1 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index d343580..468903c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,41 +1,41 @@ FROM node:22-bookworm AS dev RUN apt-get update -y \ - && apt-get install -y --no-install-recommends \ - git bash g++ make \ - && rm -rf /var/lib/apt/lists/* - -RUN corepack enable + && apt-get install -y --no-install-recommends git \ + && rm -rf /var/lib/apt/lists/* \ + # NOTE: yarn > 1.22.19 breaks yarn-install invoked by pnpm + && npm install -g pnpm@10.33.0 yarn@1.22.19 --force \ + && git config --global --add safe.directory /code WORKDIR /code -RUN git config --global --add safe.directory /code - -COPY package.json pnpm-lock.yaml /code/ -RUN corepack prepare pnpm@latest --activate # -------------------------- Nginx - Builder -------------------------------- -FROM dev AS nginx-build +FROM dev AS web-app-serve-build + +COPY ./package.json ./pnpm-lock.yaml /code/ -RUN pnpm install --frozen-lockfile +RUN pnpm install -COPY . . +COPY . /code/ -ENV APP_TITLE=APP_TITLE_PLACEHOLDER -ENV APP_GRAPHQL_ENDPOINT=APP_GRAPHQL_ENDPOINT_PLACEHOLDER +# # Build variables (Requires backend pulled) +ENV APP_TITLE=ercs-eoc +ENV APP_ENVIRONMENT=production +ENV APP_GRAPHQL_ENDPOINT=http://localhost:8000 ENV APP_GRAPHQL_CODEGEN_ENDPOINT=./backend/schema.graphql +ENV APP_MAPBOX_TOKEN=APP_MAPBOX_TOKEN_PLACEHOLDER +ENV APP_GO_API=WEB_APP_SERVE_PLACEHOLDER__APP_GO_API_PLACEHOLDER +ENV APP_GO_URL=WEB_APP_SERVE_PLACEHOLDER__APP_GO_URL_PLACEHOLDER -RUN pnpm generate:type && pnpm build +RUN pnpm generate:type && WEB_APP_SERVE_ENABLED=true pnpm build # --------------------------------------------------------------------------- -FROM nginx:1 AS nginx-serve +FROM ghcr.io/toggle-corp/web-app-serve:v0.1.2 AS web-app-serve LABEL maintainer="Togglecorp Dev" LABEL org.opencontainers.image.source="https://github.com/ToogleCorp/ercs-client" -COPY ./nginx-serve/apply-config.sh /docker-entrypoint.d/ -COPY ./nginx-serve/nginx.conf.template /etc/nginx/templates/default.conf.template -COPY --from=nginx-build /code/build /code/build - +# Env for apply-config script ENV APPLY_CONFIG__SOURCE_DIRECTORY=/code/build/ -ENV APPLY_CONFIG__DESTINATION_DIRECTORY=/usr/share/nginx/html/ -ENV APPLY_CONFIG__OVERWRITE_DESTINATION=true \ No newline at end of file + +COPY --from=web-app-serve-build /code/build "$APPLY_CONFIG__SOURCE_DIRECTORY" \ No newline at end of file diff --git a/app/Root/hooks/useRouteMatching.tsx b/app/Root/hooks/useRouteMatching.tsx index a71fdd4..a2b2a5a 100644 --- a/app/Root/hooks/useRouteMatching.tsx +++ b/app/Root/hooks/useRouteMatching.tsx @@ -6,7 +6,7 @@ import type { RouteKeys } from '#root/config/routes'; import routes from '#root/config/routes'; export interface Attrs { - [key: string]: string | number | undefined; + [key: string]: string | undefined; } function useRouteMatching(routeKey: RouteKeys, attrs?: Attrs) { diff --git a/app/Root/index.tsx b/app/Root/index.tsx index eb9d8ca..97dfd1e 100644 --- a/app/Root/index.tsx +++ b/app/Root/index.tsx @@ -40,6 +40,7 @@ const gqlClient = new Client({ function Root() { const [user, setUser] = useState(); const authenticated = !!user; + // eslint-disable-next-line react/jsx-no-constructed-context-values const userContext: UserContextInterface = { authenticated, user, diff --git a/app/components/InfoCard/index.tsx b/app/components/InfoCard/index.tsx index aacbfd0..f5f1118 100644 --- a/app/components/InfoCard/index.tsx +++ b/app/components/InfoCard/index.tsx @@ -11,48 +11,50 @@ import { import styles from './styles.module.css'; interface InfoCardProps extends Omit { - icon: React.ReactNode; - title: string; - description: string; + icon: React.ReactNode; + title: string; + description: string; } -const InfoCard: React.FC = ({ +function InfoCard({ icon, title, description, withDarkBackground = true, ...containerProps -}) => ( - - - - {icon} - - )} + - + {icon} + + )} + spacing="2xs" > - {title} - - - - {description} - - - -); + + {title} + + + + {description} + + + + ); +} export default InfoCard; diff --git a/app/contexts/UserContext.ts b/app/contexts/UserContext.ts index 6f9e36e..1141f73 100644 --- a/app/contexts/UserContext.ts +++ b/app/contexts/UserContext.ts @@ -12,6 +12,7 @@ const UserContext = createContext({ authenticated: false, user: undefined, setUser: (value: unknown) => { + // eslint-disable-next-line no-console console.error('setUser called on UserContext without a provider', value); }, }); diff --git a/app/declarations/env.d.ts b/app/declarations/env.d.ts new file mode 100644 index 0000000..7001d49 --- /dev/null +++ b/app/declarations/env.d.ts @@ -0,0 +1,15 @@ +/// + +type ImportMetaEnvAugmented = import('@togglecorp/vite-plugin-validate-env').ImportMetaEnvAugmented< + typeof import('../../env').default +> + +interface ImportMetaEnv extends ImportMetaEnvAugmented { + // The custom environment variables that are passed through the vite + APP_COMMIT_HASH: string; + APP_VERSION: string; +} + +interface ImportMeta { + readonly env: ImportMetaEnv +} diff --git a/app/views/Galleries/index.tsx b/app/views/Galleries/index.tsx index e0790b7..969233f 100644 --- a/app/views/Galleries/index.tsx +++ b/app/views/Galleries/index.tsx @@ -142,6 +142,7 @@ function Galleries() { useEffect(() => { if (data?.galleryAlbums?.results?.length && !activeId) { + // eslint-disable-next-line react-hooks/set-state-in-effect setActiveId(data?.galleryAlbums.results[0].id); } }, [data, activeId]); diff --git a/env.ts b/env.ts new file mode 100644 index 0000000..ee7bd10 --- /dev/null +++ b/env.ts @@ -0,0 +1,41 @@ +import { + defineConfig, + overrideDefineForWebAppServe, + Schema, +} from '@togglecorp/vite-plugin-validate-env'; + +const webAppServeEnabled = process.env.WEB_APP_SERVE_ENABLED?.toLowerCase() === 'true'; +if (webAppServeEnabled) { + // eslint-disable-next-line no-console + console.warn('Building application for web-app-serve'); +} +const overrideDefine = webAppServeEnabled + ? overrideDefineForWebAppServe + : undefined; + +export default defineConfig({ + overrideDefine, + validator: 'builtin', + schema: { + APP_TITLE: Schema.string(), + APP_ENVIRONMENT: (key: string, value: string) => { + // NOTE: APP_ENVIRONMENT_PLACEHOLDER is meant to be used with image builds + // The value will be later replaced with the actual value + const regex = /^production|staging|testing|alpha-\d+|development|APP_ENVIRONMENT_PLACEHOLDER$/; + const valid = !!value && (value.match(regex) !== null); + if (!valid) { + throw new Error(`Value for environment variable "${key}" must match regex "${regex}", instead received "${value}"`); + } + if (value === 'APP_ENVIRONMENT_PLACEHOLDER') { + // eslint-disable-next-line no-console + console.warn(`Using ${value} for app environment. Make sure to not use this for builds without nginx-serve`); + } + return value as ('production' | 'staging' | 'testing' | `alpha-${number}` | 'development' | 'APP_ENVIRONMENT_PLACEHOLDER'); + }, + APP_GRAPHQL_CODEGEN_ENDPOINT: Schema.string(), + APP_GRAPHQL_ENDPOINT: Schema.string(), + APP_GO_URL: Schema.string.optional(), + APP_GO_API: Schema.string.optional(), + APP_MAPBOX_TOKEN: Schema.string.optional(), + }, +}); \ No newline at end of file diff --git a/package.json b/package.json index c2c98a9..8063259 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,8 @@ "lint": "eslint .", "preview": "vite preview", "lint:css": "stylelint \"./app/**/*.css\"", - "generate:type": "graphql-codegen --require dotenv/config --config codegen.ts" + "generate:type": "graphql-codegen --require dotenv/config --config codegen.ts", + "typecheck": "tsc" }, "dependencies": { "@graphql-codegen/cli": "^6.2.1", @@ -20,6 +21,7 @@ "@urql/exchange-graphcache": "^9.0.0", "graphql": "^16.13.2", "knip": "^6.3.0", + "lint": "^0.8.19", "react": "^19.2.4", "react-cookie": "^8.1.0", "react-dom": "^19.2.4", @@ -34,16 +36,17 @@ "@graphql-codegen/introspection": "^5.0.1", "@graphql-codegen/typescript-urql": "^5.0.0", "@rolldown/plugin-babel": "^0.2.2", + "@togglecorp/vite-plugin-validate-env": "^2.2.1", "@types/babel__core": "^7.20.5", "@types/node": "^24.12.2", "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", + "@typescript-eslint/eslint-plugin": "^8.49.0", + "@typescript-eslint/parser": "^8.54.0", "@vitejs/plugin-react": "^6.0.1", "autoprefixer": "^10.4.27", "babel-plugin-react-compiler": "^1.0.0", "dotenv-cli": "^11.0.0", - "@typescript-eslint/eslint-plugin": "^8.49.0", - "@typescript-eslint/parser": "^8.54.0", "eslint": "^9.39.4", "eslint-config-airbnb": "^19.0.4", "eslint-import-resolver-typescript": "^4.4.4", @@ -69,7 +72,6 @@ "typescript-eslint": "^8.58.0", "vite": "^8.0.4", "vite-plugin-checker": "^0.13.0", - "vite-plugin-svgr": "^5.2.0", - "vite-tsconfig-paths": "^6.1.1" + "vite-plugin-svgr": "^5.2.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d293613..c1caa57 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,19 +10,19 @@ importers: dependencies: '@graphql-codegen/cli': specifier: ^6.2.1 - version: 6.2.1(@types/node@24.12.2)(graphql@16.13.2)(typescript@6.0.2) + version: 6.3.1(@types/node@24.12.2)(graphql@16.13.2)(typescript@6.0.3) '@ifrc-go/icons': specifier: ^2.0.1 - version: 2.0.1(react@19.2.4) + version: 2.0.1(react@19.2.5) '@ifrc-go/ui': specifier: 2.0.0-beta.2 - version: 2.0.0-beta.2(@ifrc-go/icons@2.0.1(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 2.0.0-beta.2(@ifrc-go/icons@2.0.1(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@togglecorp/fujs': specifier: ^2.2.0 version: 2.2.0 '@togglecorp/toggle-form': specifier: ^2.0.4 - version: 2.0.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 2.0.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@urql/exchange-graphcache': specifier: ^9.0.0 version: 9.0.0(@urql/core@6.0.1(graphql@16.13.2))(graphql@16.13.2) @@ -31,22 +31,25 @@ importers: version: 16.13.2 knip: specifier: ^6.3.0 - version: 6.3.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + version: 6.6.2(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + lint: + specifier: ^0.8.19 + version: 0.8.19 react: specifier: ^19.2.4 - version: 19.2.4 + version: 19.2.5 react-cookie: specifier: ^8.1.0 - version: 8.1.0(@types/react@19.2.14)(react@19.2.4) + version: 8.1.0(@types/react@19.2.14)(react@19.2.5) react-dom: specifier: ^19.2.4 - version: 19.2.4(react@19.2.4) + version: 19.2.5(react@19.2.5) react-router: specifier: ^7.14.0 - version: 7.14.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 7.14.2(react-dom@19.2.5(react@19.2.5))(react@19.2.5) urql: specifier: ^5.0.1 - version: 5.0.1(@urql/core@6.0.1(graphql@16.13.2))(react@19.2.4) + version: 5.0.2(@urql/core@6.0.1(graphql@16.13.2))(react@19.2.5) devDependencies: '@babel/core': specifier: ^7.29.0 @@ -62,13 +65,16 @@ importers: version: 1.2.0 '@graphql-codegen/introspection': specifier: ^5.0.1 - version: 5.0.1(graphql@16.13.2) + version: 5.0.2(graphql@16.13.2) '@graphql-codegen/typescript-urql': specifier: ^5.0.0 - version: 5.0.0(graphql-tag@2.12.6(graphql@16.13.2))(graphql@16.13.2) + version: 5.0.1(graphql-tag@2.12.6(graphql@16.13.2))(graphql@16.13.2) '@rolldown/plugin-babel': specifier: ^0.2.2 - version: 0.2.2(@babel/core@7.29.0)(@babel/runtime@7.29.2)(rolldown@1.0.0-rc.12(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2))(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3)) + version: 0.2.3(@babel/core@7.29.0)(@babel/runtime@7.29.2)(rolldown@1.0.0-rc.17)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3)) + '@togglecorp/vite-plugin-validate-env': + specifier: ^2.2.1 + version: 2.2.1(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3)) '@types/babel__core': specifier: ^7.20.5 version: 7.20.5 @@ -83,16 +89,16 @@ importers: version: 19.2.3(@types/react@19.2.14) '@typescript-eslint/eslint-plugin': specifier: ^8.49.0 - version: 8.58.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2))(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2) + version: 8.59.0(@typescript-eslint/parser@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3))(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3) '@typescript-eslint/parser': specifier: ^8.54.0 - version: 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2) + version: 8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3) '@vitejs/plugin-react': specifier: ^6.0.1 - version: 6.0.1(@rolldown/plugin-babel@0.2.2(@babel/core@7.29.0)(@babel/runtime@7.29.2)(rolldown@1.0.0-rc.12(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2))(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3)))(babel-plugin-react-compiler@1.0.0)(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3)) + version: 6.0.1(@rolldown/plugin-babel@0.2.3(@babel/core@7.29.0)(@babel/runtime@7.29.2)(rolldown@1.0.0-rc.17)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3)))(babel-plugin-react-compiler@1.0.0)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3)) autoprefixer: specifier: ^10.4.27 - version: 10.4.27(postcss@8.5.9) + version: 10.5.0(postcss@8.5.10) babel-plugin-react-compiler: specifier: ^1.0.0 version: 1.0.0 @@ -104,13 +110,13 @@ importers: version: 9.39.4(jiti@2.6.1) eslint-config-airbnb: specifier: ^19.0.4 - version: 19.0.4(eslint-plugin-import@2.32.0)(eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.4(jiti@2.6.1)))(eslint-plugin-react-hooks@7.0.1(eslint@9.39.4(jiti@2.6.1)))(eslint-plugin-react@7.37.5(eslint@9.39.4(jiti@2.6.1)))(eslint@9.39.4(jiti@2.6.1)) + version: 19.0.4(eslint-plugin-import@2.32.0)(eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.4(jiti@2.6.1)))(eslint-plugin-react-hooks@7.1.1(eslint@9.39.4(jiti@2.6.1)))(eslint-plugin-react@7.37.5(eslint@9.39.4(jiti@2.6.1)))(eslint@9.39.4(jiti@2.6.1)) eslint-import-resolver-typescript: specifier: ^4.4.4 version: 4.4.4(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.6.1)) eslint-plugin-import: specifier: ^2.32.0 - version: 2.32.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.4(jiti@2.6.1)) + version: 2.32.0(@typescript-eslint/parser@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.4(jiti@2.6.1)) eslint-plugin-import-exports-imports-resolver: specifier: ^1.0.1 version: 1.0.1 @@ -125,7 +131,7 @@ importers: version: 7.37.5(eslint@9.39.4(jiti@2.6.1)) eslint-plugin-react-hooks: specifier: ^7.0.1 - version: 7.0.1(eslint@9.39.4(jiti@2.6.1)) + version: 7.1.1(eslint@9.39.4(jiti@2.6.1)) eslint-plugin-react-refresh: specifier: ^0.4.24 version: 0.4.26(eslint@9.39.4(jiti@2.6.1)) @@ -134,52 +140,49 @@ importers: version: 13.0.0(eslint@9.39.4(jiti@2.6.1)) globals: specifier: ^17.4.0 - version: 17.4.0 + version: 17.5.0 postcss: specifier: ^8.5.9 - version: 8.5.9 + version: 8.5.10 postcss-nested: specifier: ^7.0.2 - version: 7.0.2(postcss@8.5.9) + version: 7.0.2(postcss@8.5.10) postcss-normalize: specifier: ^13.0.1 - version: 13.0.1(browserslist@4.28.2)(postcss@8.5.9) + version: 13.0.1(browserslist@4.28.2)(postcss@8.5.10) postcss-preset-env: specifier: ^11.2.0 - version: 11.2.0(postcss@8.5.9) + version: 11.2.1(postcss@8.5.10) stylelint: specifier: ^17.6.0 - version: 17.6.0(typescript@6.0.2) + version: 17.9.0(typescript@6.0.3) stylelint-config-concentric: specifier: ^2.0.2 - version: 2.0.2(stylelint@17.6.0(typescript@6.0.2)) + version: 2.0.2(stylelint@17.9.0(typescript@6.0.3)) stylelint-config-recommended: specifier: ^18.0.0 - version: 18.0.0(stylelint@17.6.0(typescript@6.0.2)) + version: 18.0.0(stylelint@17.9.0(typescript@6.0.3)) stylelint-no-unused-selectors: specifier: ^1.0.40 - version: 1.0.40(stylelint@17.6.0(typescript@6.0.2)) + version: 1.0.40(stylelint@17.9.0(typescript@6.0.3)) stylelint-value-no-unknown-custom-properties: specifier: ^6.1.1 - version: 6.1.1(stylelint@17.6.0(typescript@6.0.2)) + version: 6.1.1(stylelint@17.9.0(typescript@6.0.3)) typescript: specifier: ~6.0.2 - version: 6.0.2 + version: 6.0.3 typescript-eslint: specifier: ^8.58.0 - version: 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2) + version: 8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3) vite: specifier: ^8.0.4 - version: 8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3) + version: 8.0.10(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3) vite-plugin-checker: specifier: ^0.13.0 - version: 0.13.0(eslint@9.39.4(jiti@2.6.1))(meow@14.1.0)(optionator@0.9.4)(stylelint@17.6.0(typescript@6.0.2))(typescript@6.0.2)(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3)) + version: 0.13.0(eslint@9.39.4(jiti@2.6.1))(meow@14.1.0)(optionator@0.9.4)(stylelint@17.9.0(typescript@6.0.3))(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3)) vite-plugin-svgr: specifier: ^5.2.0 - version: 5.2.0(typescript@6.0.2)(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3)) - vite-tsconfig-paths: - specifier: ^6.1.1 - version: 6.1.1(typescript@6.0.2)(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3)) + version: 5.2.0(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3)) packages: @@ -287,6 +290,10 @@ packages: '@cacheable/utils@2.4.1': resolution: {integrity: sha512-eiFgzCbIneyMlLOmNG4g9xzF7Hv3Mga4LjxjcSC/ues6VYq2+gUbQI8JqNuw/ZM8tJIeIaBGpswAsqV2V7ApgA==} + '@colors/colors@1.5.0': + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} + '@csstools/cascade-layer-name-parser@3.0.0': resolution: {integrity: sha512-/3iksyevwRfSJx5yH0RkcrcYXwuhMQx3Juqf40t97PeEy2/Mz2TItZ/z/216qpe4GgOyFBP8MKIwVvytzHmfIQ==} engines: {node: '>=20.19.0'} @@ -298,15 +305,15 @@ packages: resolution: {integrity: sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==} engines: {node: '>=20.19.0'} - '@csstools/css-calc@3.1.1': - resolution: {integrity: sha512-HJ26Z/vmsZQqs/o3a6bgKslXGFAungXGbinULZO3eMsOyNJHeBBZfup5FiZInOghgoM4Hwnmw+OgbJCNg1wwUQ==} + '@csstools/css-calc@3.2.0': + resolution: {integrity: sha512-bR9e6o2BDB12jzN/gIbjHa5wLJ4UjD1CB9pM7ehlc0ddk6EBz+yYS1EV2MF55/HUxrHcB/hehAyt5vhsA3hx7w==} engines: {node: '>=20.19.0'} peerDependencies: '@csstools/css-parser-algorithms': ^4.0.0 '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-color-parser@4.0.2': - resolution: {integrity: sha512-0GEfbBLmTFf0dJlpsNU7zwxRIH0/BGEMuXLTCvFYxuL1tNhqzTbtnFICyJLTNK4a+RechKP75e7w42ClXSnJQw==} + '@csstools/css-color-parser@4.1.0': + resolution: {integrity: sha512-U0KhLYmy2GVj6q4T3WaAe6NPuFYCPQoE3b0dRGxejWDgcPp8TP7S5rVdM5ZrFaqu4N67X8YaPBw14dQSYx3IyQ==} engines: {node: '>=20.19.0'} peerDependencies: '@csstools/css-parser-algorithms': ^4.0.0 @@ -318,8 +325,8 @@ packages: peerDependencies: '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.1.2': - resolution: {integrity: sha512-5GkLzz4prTIpoyeUiIu3iV6CSG3Plo7xRVOFPKI7FVEJ3mZ0A8SwK0XU3Gl7xAkiQ+mDyam+NNp875/C5y+jSA==} + '@csstools/css-syntax-patches-for-csstree@1.1.3': + resolution: {integrity: sha512-SH60bMfrRCJF3morcdk57WklujF4Jr/EsQUzqkarfHXEFcAR1gg7fS/chAE922Sehgzc1/+Tz5H3Ypa1HiEKrg==} peerDependencies: css-tree: ^3.2.1 peerDependenciesMeta: @@ -340,8 +347,8 @@ packages: '@csstools/normalize.css@12.1.1': resolution: {integrity: sha512-YAYeJ+Xqh7fUou1d1j9XHl44BmsuThiTr4iNrgCQ3J27IbhXsxXDGZ1cXv8Qvs99d4rBbLiSKy3+WZiet32PcQ==} - '@csstools/postcss-alpha-function@2.0.3': - resolution: {integrity: sha512-8GqzD3JnfpKJSVxPIC0KadyAfB5VRzPZdv7XQ4zvK1q0ku+uHVUAS2N/IDavQkW40gkuUci64O0ea6QB/zgCSw==} + '@csstools/postcss-alpha-function@2.0.4': + resolution: {integrity: sha512-fti7+GybzvfMrv5TSU6x8rWtXWOth5nLefT5w5AKJ3F3T0bZoxlRqajF0ZUgTtnytfMd4dQ8n5UiaNmsjFA65A==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 @@ -352,26 +359,26 @@ packages: peerDependencies: postcss: ^8.4 - '@csstools/postcss-color-function-display-p3-linear@2.0.2': - resolution: {integrity: sha512-TWUwSe1+2KdYGGWTx5LR4JQN07vKHAeSho+bGYRgow+9cs3dqgOqS1f/a1odiX30ESmZvwIudJ86wzeiDR6UGg==} + '@csstools/postcss-color-function-display-p3-linear@2.0.3': + resolution: {integrity: sha512-u8QNV2TKOxG6cqK4ZrJkpctnxdrwdNTMrkyokmCi+iuLpJegOraA0cqC7HoxF2tHhxjuXc+BxwY/Qd62SwvanQ==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - '@csstools/postcss-color-function@5.0.2': - resolution: {integrity: sha512-CjBdFemUFcAh3087MEJhZcO+QT1b8S75agysa1rU9TEC1YecznzwV+jpMxUc0JRBEV4ET2PjLssqmndR9IygeA==} + '@csstools/postcss-color-function@5.0.3': + resolution: {integrity: sha512-BiBukIeQ7rPjx9A//9+qgJugBjX6FY9eWiojbnfIJCPulWrl8J07rCgQbFkloTXena+a6Aw5xa25weU+3MA75A==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - '@csstools/postcss-color-mix-function@4.0.2': - resolution: {integrity: sha512-PFKQKswFqZrYKpajZsP4lhqjU/6+J5PTOWq1rKiFnniKsf4LgpGXrgHS/C6nn5Rc51LX0n4dWOWqY5ZN2i5IjA==} + '@csstools/postcss-color-mix-function@4.0.3': + resolution: {integrity: sha512-M8ju3iqHRXtW1/5HYuOmi9WFR5rGGFgqkPh+kXkv/eG56oYK/WYtTeIwJgdcro7lRwjlo4Ut8xqbV3Iovkwfrw==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - '@csstools/postcss-color-mix-variadic-function-arguments@2.0.2': - resolution: {integrity: sha512-zEchsghpDH/6SytyjKu9TIPm4hiiWcur102cENl54cyIwTZsa+2MBJl/vtyALZ+uQ17h27L4waD+0Ow96sgZow==} + '@csstools/postcss-color-mix-variadic-function-arguments@2.0.3': + resolution: {integrity: sha512-tL46UyFjIjz7mDywoPOe/JgOpvMic0rsTUfdMBB1OHrUcCtE8MQpBILzYl/cAOtinJGu+ZQLuDhqTgTBOoeg3g==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 @@ -382,14 +389,14 @@ packages: peerDependencies: postcss: ^8.4 - '@csstools/postcss-contrast-color-function@3.0.2': - resolution: {integrity: sha512-fwOz/m+ytFPz4aIph2foQS9nEDOdOjYcN5bgwbGR2jGUV8mYaeD/EaTVMHTRb/zqB65y2qNwmcFcE6VQty69Pw==} + '@csstools/postcss-contrast-color-function@3.0.3': + resolution: {integrity: sha512-YcohXq+/hfYeobKirg3oXGivDaaTfOPv568bE3jYQCn9ILpFz+RgyJR/kF7ZWh5560TTlTjeCqF4ZmVsj2zwnw==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - '@csstools/postcss-exponential-functions@3.0.1': - resolution: {integrity: sha512-WHJ52Uk0AVUIICEYRY9xFHJZAuq0ZVg0f8xzqUN2zRFrZvGgRPpFwxK7h9FWvqKIOueOwN6hnJD23A8FwsUiVw==} + '@csstools/postcss-exponential-functions@3.0.2': + resolution: {integrity: sha512-WDrfdFJXF4M67+wniEGr/5XVzsmn1rt2lL1YAlTfE7x7XDlRstTc5e+HuFoGv6jkiMWTwPsiADJaLwsnGC3UjQ==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 @@ -406,20 +413,20 @@ packages: peerDependencies: postcss: ^8.4 - '@csstools/postcss-gamut-mapping@3.0.2': - resolution: {integrity: sha512-IrXAW3KQ3Sxm29C3/4mYQ/iA0Q5OH9YFOPQ2w24iIlXpD06A9MHvmQapP2vAGtQI3tlp2Xw5LIdm9F8khARfOA==} + '@csstools/postcss-gamut-mapping@3.0.3': + resolution: {integrity: sha512-3v5ZvcVuynhFh5qCJX2LIJ9Iry8/SvxfOEj6vDngNxbH/3OKTZBFLgK+DgLuIbsP1DLA9LLH3Rn7jmRxXgEDLA==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - '@csstools/postcss-gradients-interpolation-method@6.0.2': - resolution: {integrity: sha512-saQHvD1PD/zCdn+kxCWCcQOdXZBljr8L6BKlCLs0w8GXYfo3SHdWL1HZQ+I1hVCPlU+MJPJJbZJjG/jHRJSlAw==} + '@csstools/postcss-gradients-interpolation-method@6.0.3': + resolution: {integrity: sha512-wrRIaRv1dkq30a8nvYWtSAf41bwCl+sVzLBKGnqeOwk81aSktKN3NattJpkiPyoOtEoFqChisl3WH3Csj/rOsw==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - '@csstools/postcss-hwb-function@5.0.2': - resolution: {integrity: sha512-ChR0+pKc/2cs900jakiv8dLrb69aez5P3T+g+wfJx1j6mreAe8orKTiMrVBk+DZvCRqpdOA2m8VoFms64A3Dew==} + '@csstools/postcss-hwb-function@5.0.3': + resolution: {integrity: sha512-bHz0uc/PBg2wJEAlGinUf494nMyuXsVKH/fExc2xGkvL6WHOKlxzx/lkn+2AVCQACtWBLVRCBDgDnkYr4RSC9w==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 @@ -478,8 +485,8 @@ packages: peerDependencies: postcss: ^8.4 - '@csstools/postcss-media-minmax@3.0.1': - resolution: {integrity: sha512-I+CrmZt23fyejMItpLQFOg9gPXkDBBDjTqRT0UxCTZlYZfGrzZn4z+2kbXLRwDfR59OK8zaf26M4kwYwG0e1MA==} + '@csstools/postcss-media-minmax@3.0.2': + resolution: {integrity: sha512-+ABxs2ZhJDhy+B9PJg7pgkGq6/d3XPXsWl7+6yZfAk4b2ba6aQ1h2AiTn04XwS6rpMpZEF3tONli/ubfu4y8AQ==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 @@ -508,8 +515,8 @@ packages: peerDependencies: postcss: ^8.4 - '@csstools/postcss-oklab-function@5.0.2': - resolution: {integrity: sha512-3d/Wcnp2uW6Io0Tajl0croeUo46gwOVQI9N32PjA/HVQo6z1iL7yp19Gp+6e5E5CDKGpW7U822MsDVo2XK1z0Q==} + '@csstools/postcss-oklab-function@5.0.3': + resolution: {integrity: sha512-vTMgJFMwMt9gnPvhKaDnMR7E/h9Nb+rPUv825SY5VUo4PWj+w0OH/N2NqgvjYeubaA3BVckbKDlvADATRpD4Hw==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 @@ -532,14 +539,14 @@ packages: peerDependencies: postcss: ^8.4 - '@csstools/postcss-random-function@3.0.1': - resolution: {integrity: sha512-SvKGfmj+WHfn4bWHaBYlkXDyU3SlA3fL8aaYZ8Op6M8tunNf3iV9uZyZZGWMCbDw0sGeoTmYZW9nmKN8Qi/ctg==} + '@csstools/postcss-random-function@3.0.2': + resolution: {integrity: sha512-iQ3vfX1LIqRXX7P1/ol45EpJ5CTWdQCAfdpTlHlsRPU4jMQeepmeNjQ0F60bj8RWTS1RkJ318fzzq4mUlyZ7hA==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - '@csstools/postcss-relative-color-syntax@4.0.2': - resolution: {integrity: sha512-HaMN+qMURinllszbps2AhXKaLeibg/2VW6FriYDrqE58ji82+z2S3/eLloywVOY8BQCJ9lZMdy6TcRQNbn9u3w==} + '@csstools/postcss-relative-color-syntax@4.0.3': + resolution: {integrity: sha512-SZSImz4KufmLi0dRwYivWXlza+7HF84SRApY8R48SyWgn+f0gDvmCn7D2Ie4CED7qU0JJK+YfCUC1HVlaQ10dg==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 @@ -550,14 +557,14 @@ packages: peerDependencies: postcss: ^8.4 - '@csstools/postcss-sign-functions@2.0.1': - resolution: {integrity: sha512-C3br0qcHJkQ0qSGUBnDJHXQdO8XObnCpGwai5m1L2tv2nCjt0vRHG6A9aVCQHvh08OqHNM2ty1dYDNNXV99YAQ==} + '@csstools/postcss-sign-functions@2.0.2': + resolution: {integrity: sha512-vOxkkMCMVnyaj7CW03uKR2R/zhJaCrptsXlm31HgI/dqC1lSIGnmu5W7N68x23XwcSgc8fE/fg0jKj4x1XFH4w==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - '@csstools/postcss-stepped-value-functions@5.0.1': - resolution: {integrity: sha512-vZf7zPzRb7xIi2o5Z9q6wyeEAjoRCg74O2QvYxmQgxYO5V5cdBv4phgJDyOAOP3JHy4abQlm2YaEUS3gtGQo0g==} + '@csstools/postcss-stepped-value-functions@5.0.2': + resolution: {integrity: sha512-4PtqkRoBcMSxZG00gcDv+nq7cxVUua+Yd7TmG16qzJjdolyICHkx1RfhNL5mKSnWOLxUnk/IdxAoWN+KU7E/ng==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 @@ -580,8 +587,8 @@ packages: peerDependencies: postcss: ^8.4 - '@csstools/postcss-trigonometric-functions@5.0.1': - resolution: {integrity: sha512-e8me32Mhl8JeBnxVJgsQUYpV4Md4KiyvpILpQlaY/eK1Gwdb04kasiTTswPQ5q7Z8+FppJZ2Z4d8HRfn6rjD3w==} + '@csstools/postcss-trigonometric-functions@5.0.2': + resolution: {integrity: sha512-hRansZmQk1HH11WGUNlWy8H/DCB9Wy6zDbRcyBfF2UUP+V2fubK+qwmq0q6LIDje5gRzxlKyWhgFYxPy1ohivA==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 @@ -610,9 +617,15 @@ packages: peerDependencies: postcss: ^8.4 + '@emnapi/core@1.10.0': + resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} + '@emnapi/core@1.9.2': resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==} + '@emnapi/runtime@1.10.0': + resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} + '@emnapi/runtime@1.9.2': resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==} @@ -684,14 +697,14 @@ packages: '@fastify/busboy@3.2.0': resolution: {integrity: sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==} - '@graphql-codegen/add@6.0.0': - resolution: {integrity: sha512-biFdaURX0KTwEJPQ1wkT6BRgNasqgQ5KbCI1a3zwtLtO7XTo7/vKITPylmiU27K5DSOWYnY/1jfSqUAEBuhZrQ==} + '@graphql-codegen/add@6.0.1': + resolution: {integrity: sha512-MSylSekjpVWbOBw2A/2ssk1fPY54sYb6Qk2C4AX5u7s2R+2pMQ9ws7DTXo8VU9qwTgWwVp6vGfdQ0AMpAn4Iug==} engines: {node: '>=16'} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - '@graphql-codegen/cli@6.2.1': - resolution: {integrity: sha512-E1B+5nBda2l89Pci5M0HcEj2Hmx2yhORFX+1T3rmwpQjdOiulo+h9JifWxKomUpjfbmU1YkBSd47CCGLFPU10A==} + '@graphql-codegen/cli@6.3.1': + resolution: {integrity: sha512-I5KkyX1SgQZPojMeQTRydB6fml4cysZq/mIdhNW4rmqdoOcTgdMPq1Tl+wtRp1VpBAOrBazJUJh1nAqJMMSPIQ==} engines: {node: '>=16'} hasBin: true peerDependencies: @@ -701,8 +714,8 @@ packages: '@parcel/watcher': optional: true - '@graphql-codegen/client-preset@5.2.4': - resolution: {integrity: sha512-k4f9CoepkVznXRReCHBVnG/FeQVQgIOhgtkaJ6I9FcQRzUkrm9ASmQjOdNdMlZt0DHTU4nbVxIBGZW7gk1RavA==} + '@graphql-codegen/client-preset@5.3.0': + resolution: {integrity: sha512-K9FON+j7qyxAUDuSGqI3ofb7lWTBs16oPTYpu14lhdL4DKZQSHLyc8EMYU9e3KcyQ/13gU/d6culOppzAuexLA==} engines: {node: '>=16'} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 @@ -711,44 +724,44 @@ packages: graphql-sock: optional: true - '@graphql-codegen/core@5.0.1': - resolution: {integrity: sha512-eQD7aXpKkKvaydMv5Bu0FnKCPnNMAhZ3vZW+K4Rl9IAC2w5PDv9lJhs3YTWM9W58zNOZpGQGT2F0ekS3QNIiKw==} + '@graphql-codegen/core@5.0.2': + resolution: {integrity: sha512-7RX0wwjoWPlLG/tUmpaTK91ZZqHcACNWpRL0nGnnJaJrORie9pgmX8JPrcwBgYiHSC+3ERo9xY91RFPem/VrpQ==} engines: {node: '>=16'} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - '@graphql-codegen/gql-tag-operations@5.1.4': - resolution: {integrity: sha512-tDj/0a1U7rDH3PQgLeA+PlgBNb593MIJ43oAOKMRgJPwIQ9T7p2oqBRLxwfFZFTDLwnwsGZ7xIKqIcGgyAIj5Q==} + '@graphql-codegen/gql-tag-operations@5.2.0': + resolution: {integrity: sha512-B9gtJ4ziqpIv+7mHqwjtpYLFOuv0GmmRGpNDoWKM2VIx4OQqgI84d6OHKYCVeO7yu3mUr0QPvUgkSyuLVrdukA==} engines: {node: '>=16'} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - '@graphql-codegen/introspection@5.0.1': - resolution: {integrity: sha512-dX6U8o0Sddhuw491e5DTE1Vf8h4SN+8bldQ+XcK6imS7eVqduond1uZjLNgFejQFWfd7x0KWldKqyy/9Ilwtlw==} + '@graphql-codegen/introspection@5.0.2': + resolution: {integrity: sha512-2Y1xC4A/6yudxvpyHLF6wcrZSm1BBGsaxabbZJCWebImXdYNU+yAdbiiaHfYrHMUEVgPnjo/qo4gt0m8JqeRHQ==} engines: {node: '>=16'} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - '@graphql-codegen/plugin-helpers@6.2.1': - resolution: {integrity: sha512-shRr26TfVZ6KFBjzRYUj02gLNh6yaECz9gTGgI6riANw5sSH9PONwTsBRYkEgU+6IXiL7VQeCumahvxSGFbRlQ==} + '@graphql-codegen/plugin-helpers@6.3.0': + resolution: {integrity: sha512-Auc+/B7okDx9+pVgLVliZtZLYh6iltWXlnzzM+bRE+zh1T4r3hKbnr8xAmtT937ArfSgk5GHcQHr8LfPYnrRBg==} engines: {node: '>=16'} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - '@graphql-codegen/schema-ast@5.0.1': - resolution: {integrity: sha512-svLffXddnXxq1qFXQqqh+zYrxdiMnIKm+CXCUv0MYhLh0R4L5vpnaTzIUCk3icHNNXhKRm2uBD70+K8VY0xiCg==} + '@graphql-codegen/schema-ast@5.0.2': + resolution: {integrity: sha512-jl1F/9IjRkJisEb9B0ayG4QGqYlPldLRy8ojDdmL9NE1NsdB5ROfxQnSqyC3g+wuvBhWX7kZgMRQYn3RU1I5bA==} engines: {node: '>=16'} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - '@graphql-codegen/typed-document-node@6.1.7': - resolution: {integrity: sha512-VLL9hB+YPigc/W2QYCkSNMZrkKv42nTchb9mJ0h5VY98YmW/zWb6NeYM80iHSpk8ZvHsuUT5geA53/s1phO2NQ==} + '@graphql-codegen/typed-document-node@6.1.8': + resolution: {integrity: sha512-+qDdiJSQ7Ol+vpLMAH8ZJok50CvlYxA6seQ7cwEa3emXt8MmH5hh3zdc9unQlPc7bynoJHRCgoKk7E0B7hry0w==} engines: {node: '>=16'} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - '@graphql-codegen/typescript-operations@5.0.9': - resolution: {integrity: sha512-jJFdJKMS5Cqisb5QMi7xXHPsJH9yHBMYOxBc8laFkFjHk/AOqJK90qCKbO9lwwTMPZUDe6N/HslmA0ax4J0zsg==} + '@graphql-codegen/typescript-operations@5.1.0': + resolution: {integrity: sha512-JlmjbFl0EnsfMDIYvTE1Q0kAOrntVEZ+ZfBqWTP91g4e0F/TzuwJ/V4tiFmeDf5dx/rf9AK4VkPehIdxu7TYhw==} engines: {node: '>=16'} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 @@ -757,21 +770,21 @@ packages: graphql-sock: optional: true - '@graphql-codegen/typescript-urql@5.0.0': - resolution: {integrity: sha512-NpNLcuvmh63EgfV5Dz4gcprcTpdAKWo0vNBk1PduXF+gJD0G7F3sufdDXJndV3QDGi83hAzqd6+JwRR1KK0csg==} + '@graphql-codegen/typescript-urql@5.0.1': + resolution: {integrity: sha512-kRxsZtkGMt2EC3itsqCwVXIgCfSnN+hDy/wSsFEi31WrbZgMVPn89Bqcv3Pel+zRxEwS5Osc9Pnl9pbVZND1fg==} engines: {node: '>= 16.0.0'} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 graphql-tag: ^2.0.0 - '@graphql-codegen/typescript@5.0.9': - resolution: {integrity: sha512-YlIZ4nqdFdzr5vxuNtQtZnnMYuZ5cLYB2HaGhGI2zvqHxCmkBjIRpu/5sfccawKy23wetV+aoWvoNqxGKIryig==} + '@graphql-codegen/typescript@5.0.10': + resolution: {integrity: sha512-Pa8OFmL9TdhEYnLYJLYA9EhP8eEeivP/YDYq4Nb8LQaL7GXm4TGX8zELYaCM9Fu8M3iZb7iQGMt7qc+1lXz8XQ==} engines: {node: '>=16'} peerDependencies: graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - '@graphql-codegen/visitor-plugin-common@6.2.4': - resolution: {integrity: sha512-iwiVCc7Mv8/XAa3K35AdFQ9chJSDv/gYEnBeQFF/Sq/W8EyJoHypOGOTTLk7OSrWO4xea65ggv0e7fGt7rPJjQ==} + '@graphql-codegen/visitor-plugin-common@6.3.0': + resolution: {integrity: sha512-vGBoE+4huzZyNhyGSAhXAkdROHlwKxxuziZm4XtP1mxe7nuI+VgyOmXebafLijbmuDsptPXQN0C/htL54O8hrg==} engines: {node: '>=16'} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 @@ -780,8 +793,8 @@ packages: resolution: {integrity: sha512-Pz8wB3K0iU6ae9S1fWfsmJX24CcGeTo6hE7T44ucmV/ALKRj+bxClmqrYcDT7v3f0d12Rh4FAXBb6gon+WkDpQ==} engines: {node: '>=20.0.0'} - '@graphql-tools/apollo-engine-loader@8.0.28': - resolution: {integrity: sha512-MzgDrUuoxp6dZeo54zLBL3cEJKJtM3N/2RqK0rbPxPq5X2z6TUA7EGg8vIFTUkt5xelAsUrm8/4ai41ZDdxOng==} + '@graphql-tools/apollo-engine-loader@8.0.30': + resolution: {integrity: sha512-hUydKGGECrWloERMmfoMzHZi12X99AM9geCGF5XVsv4iMRl/Iyuet24th4kC9bZ8MlAdCwAwtUsCyv9uRfYwSA==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -792,14 +805,14 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/code-file-loader@8.1.30': - resolution: {integrity: sha512-BMMg/9xowN3yOHpOhLH/9w8Lu7Fp7UiUAuVri+gl8RDroBC0JGm93v6prhr8U276AlVFGAy3wAb/28TJKOtlAg==} + '@graphql-tools/code-file-loader@8.1.32': + resolution: {integrity: sha512-gR5mNQjn0BugDL8a4A+ovS2KEvU52RNOGnbwiq9oWAEHiSv7iqJu77bpWARTzlE1ZFPK5MSQe9218+1t5PbXmQ==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/delegate@12.0.13': - resolution: {integrity: sha512-Aei3SI5HezLt7kKQNbX/GrZv5c5YibdbP0N6BvuEWQYG+lpRO3RRX2fZ+g+KshJOGuTJQFK1umIjki++vKoJ+A==} + '@graphql-tools/delegate@12.0.14': + resolution: {integrity: sha512-/xCDM8zlCk1Lccww9asOIpxna9IFpIlol4yGsBD9Y2+3/Zu5k4/HzDC8LKJtw5MxdG+uJN1l9nRepr4GeBC4kA==} engines: {node: '>=20.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -828,62 +841,62 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/executor-legacy-ws@1.1.26': - resolution: {integrity: sha512-rlFHk8XoRCXjARQAlHTgtisyE5KJxMb9UyR4hRbD6tLlYjmzNf9ms8GjsLYe/j1QpHJ7fNDm9aXqj1+evhQ/MQ==} + '@graphql-tools/executor-legacy-ws@1.1.28': + resolution: {integrity: sha512-O4uj93GG9iUb3s32eyhUohvyfA8mLhN8FvGzEdK628hFQPhZN75yurtVFrR08DHex71mQ3wYCCFkErpwdJbDDQ==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/executor@1.5.1': - resolution: {integrity: sha512-n94Qcu875Mji9GQ52n5UbgOTxlgvFJicBPYD+FRks9HKIQpdNPjkkrKZUYNG51XKa+bf03rxNflm4+wXhoHHrA==} + '@graphql-tools/executor@1.5.3': + resolution: {integrity: sha512-mgBFC0bsrZPZLu9EnydpMnAuQ8Iiq0CEbUcsmvXsm2/iYektGHDN/+bmb7hicA6dWZtdPfklYJmr21WD0GnOfA==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/git-loader@8.0.34': - resolution: {integrity: sha512-0j9Cemf1dlIqRf9+Eqm1fGilQ7exYocW8dxpfXxbngvpPZ5TpOaNVruxOvfh7M+RIfd4yU4vSGr9tgj2TodDUw==} + '@graphql-tools/git-loader@8.0.36': + resolution: {integrity: sha512-PDDakesRu8FJYHJLf9/gkTweh8M19Bymz9i+vOlk9OTs9XmNcCqKM+1S610KX2AodvuBFz/xbesjTtTJIppLPg==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/github-loader@9.1.0': - resolution: {integrity: sha512-S/nlKtnmX3JzTrGwbPyXw+GKGj/1+A1lRQ73QEMDMjQK3TXygoKml5WqZwHEvp6qp3Jdncx9FHUzg9nge+rizQ==} + '@graphql-tools/github-loader@9.1.2': + resolution: {integrity: sha512-jhRJncj9Wkr1Cd8Mo3QI2oG6fTw5ILr1/OXcHIqx744NBj8pPwQBXmQzZqh7MXxbekl2EAcum7SJIjq1HpYcPA==} engines: {node: '>=20.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/graphql-file-loader@8.1.12': - resolution: {integrity: sha512-Nma7gBgJoUbqXWTmdHjouo36tjzewA8MptVcHoH7widzkciaUVzBhriHzqICFB/dVxig//g9MX8s1XawZo7UAg==} + '@graphql-tools/graphql-file-loader@8.1.14': + resolution: {integrity: sha512-CfAcsSEVkkHfEXLFzrd5rUYpcQEGWNV8lfc1Tb1p5m9HnYICzDDH08I5V33iMrEDza3GuujjjRBYqplBkqwIow==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/graphql-tag-pluck@8.3.29': - resolution: {integrity: sha512-aKX6ooaSjROHhGqlW1B2pARKjWk1OQOLvmQJe8GmP9vvKwjxuTl9FgZazjWvhN0GO9LFxd/JGzx0xCiXE6KQZw==} + '@graphql-tools/graphql-tag-pluck@8.3.31': + resolution: {integrity: sha512-ema2RRPZGj8TKruNElyDBHVCNFMxioGIVfLBuiA+GdfmRGt95b/i7Uksnj4EwItA6MCmhxokxZoa/fl6mJt3tw==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/import@7.1.12': - resolution: {integrity: sha512-QSsdPsdJ7yCgQ5XODyKYpC7NlB9R1Koi0R3418PT7GiRm+9O8gYXSs/23dumcOnpiLrnf4qR2aytBn1+JOAhnA==} + '@graphql-tools/import@7.1.14': + resolution: {integrity: sha512-aqLcu04aEidszbXM6M0PWWL8bP17eX9sxXwjYWpglLvIRd4NFqb3C9QzBY8pleqXNMtWqXktlm9BQjevgSrirQ==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/json-file-loader@8.0.26': - resolution: {integrity: sha512-kwy9IFi5QtXXTLBgWkvA1RqsZeJDn0CxsTbhNlziCzmga9fNo7qtZ18k9FYIq3EIoQQlok+b7W7yeyJATA2xhw==} + '@graphql-tools/json-file-loader@8.0.28': + resolution: {integrity: sha512-qgCsSkPArnjlNkcYpgGKiXxCTNkrAT9E+l1LhR+Por2jTlKBBeZ8stortkQ/PNDDjuL0WPrLQmHKhNPHabnB3A==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/load@8.1.8': - resolution: {integrity: sha512-gxO662b64qZSToK3N6XUxWG5E6HOUjlg5jEnmGvD4bMtGJ0HwEe/BaVZbBQemCfLkxYjwRIBiVfOY9o0JyjZJg==} + '@graphql-tools/load@8.1.10': + resolution: {integrity: sha512-hjcvfEFtwtc8vGi46wtpmGWadNzfEhzbjqinyFIZuIZPlR4aYdWQtqWtY/RMM4Ew4t1USkMNm6xrqC2TH1vCSA==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/merge@9.1.7': - resolution: {integrity: sha512-Y5E1vTbTabvcXbkakdFUt4zUIzB1fyaEnVmIWN0l0GMed2gdD01TpZWLUm4RNAxpturvolrb24oGLQrBbPLSoQ==} + '@graphql-tools/merge@9.1.9': + resolution: {integrity: sha512-iHUWNjRHeQRYdgIMIuChThOwoKzA9vrzYeslgfBo5eUYEyHGZCoDPjAavssoYXLwstYt1dZj2J22jSzc2DrN0Q==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -894,32 +907,32 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/relay-operation-optimizer@7.1.2': - resolution: {integrity: sha512-n/yNuj9aQVdk1bxHvnbqQdvZ5P3Ru8L7BoDlBGK9OXr2Q44XBhFIonqaxREqAWyMme5WnE+DjUswa5H70PQbRg==} + '@graphql-tools/relay-operation-optimizer@7.1.4': + resolution: {integrity: sha512-cwOD/GEo/R//1uGCP0/urIxsMFoUgzkJVyMt9BDM2HhQhU6rSgH5l6lFukAFTJyPJVdyeOdYm2i0Jj5vYWbHTw==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/schema@10.0.31': - resolution: {integrity: sha512-ZewRgWhXef6weZ0WiP7/MV47HXiuFbFpiDUVLQl6mgXsWSsGELKFxQsyUCBos60Qqy1JEFAIu3Ns6GGYjGkqkQ==} + '@graphql-tools/schema@10.0.33': + resolution: {integrity: sha512-O6P3RIftO0jafnSsFAqpjurUuUxJ43s/AdPVLQsBkI6y4Ic/tKm4C1Qm1KKQsCDTOxXPJClh/v3g7k7yLKCFBQ==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/url-loader@9.1.0': - resolution: {integrity: sha512-G3Ul5sLsLOJlfT4LkdQSKcHoJ+4CuSeUbRT1XjBXZSgNkeXZt2MXHJQX0X8+b4mJq7fI3thcfbiB+5sEUlnT7g==} + '@graphql-tools/url-loader@9.1.2': + resolution: {integrity: sha512-pVSiPrfWQKb3jq23Pl7EjbB2uv3tgZLnWo/axkmg4itAEZ5s/vV/jKa8P1HZzUnSVUTR+8tcEZVeNsUbzFCbkg==} engines: {node: '>=20.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/utils@11.0.0': - resolution: {integrity: sha512-bM1HeZdXA2C3LSIeLOnH/bcqSgbQgKEDrjxODjqi3y58xai2TkNrtYcQSoWzGbt9VMN1dORGjR7Vem8SPnUFQA==} + '@graphql-tools/utils@11.1.0': + resolution: {integrity: sha512-PtFVG4r8Z2LEBSaPYQMusBiB3o6kjLVJyjCLbnWem/SpSuM21v6LTmgpkXfYU1qpBV2UGsFyuEnSJInl8fR1Ag==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/wrap@11.1.13': - resolution: {integrity: sha512-oWdhddkcFy9vKjvAZiw7oH/1mrgg0uMpwdeFeFt7S/MlLiySx+Vuk7kjARktjUBl+yAMt9q1/BADnoT+5vH0hw==} + '@graphql-tools/wrap@11.1.14': + resolution: {integrity: sha512-ebSVT7apxr+88q3Wy0i4AyRmJ42I0SuMqjPIn1fqW14yCTQRZG8YLuIALG1gKR936+GkfMLOrADh6egJvdlN6Q==} engines: {node: '>=20.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -929,12 +942,16 @@ packages: peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@humanfs/core@0.19.1': - resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + '@humanfs/core@0.19.2': + resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} engines: {node: '>=18.18.0'} - '@humanfs/node@0.16.7': - resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} + '@humanfs/node@0.16.8': + resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==} + engines: {node: '>=18.18.0'} + + '@humanfs/types@0.15.0': + resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==} engines: {node: '>=18.18.0'} '@humanwhocodes/module-importer@1.0.1': @@ -1120,11 +1137,17 @@ packages: '@keyv/serialize@1.1.1': resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==} + '@kwsites/file-exists@1.1.1': + resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==} + + '@kwsites/promise-deferred@1.1.1': + resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==} + '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} - '@napi-rs/wasm-runtime@1.1.2': - resolution: {integrity: sha512-sNXv5oLJ7ob93xkZ1XnxisYhGYXfaG9f65/ZgYuAu3qt7b3NadcOEhLvx28hv31PgX8SZJRYrAIPQilQmFpLVw==} + '@napi-rs/wasm-runtime@1.1.4': + resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==} peerDependencies: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 @@ -1141,138 +1164,135 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@oxc-parser/binding-android-arm-eabi@0.121.0': - resolution: {integrity: sha512-n07FQcySwOlzap424/PLMtOkbS7xOu8nsJduKL8P3COGHKgKoDYXwoAHCbChfgFpHnviehrLWIPX0lKGtbEk/A==} + '@oxc-parser/binding-android-arm-eabi@0.127.0': + resolution: {integrity: sha512-0LC7ye4hvqbIKxAzThzvswgHLFu2AURKzYLeSVvLdu2TBOYWQDmHnTqPLeA597BcUCxiLqLsS4CJ5uoI5WYWCQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxc-parser/binding-android-arm64@0.121.0': - resolution: {integrity: sha512-/Dd1xIXboYAicw+twT2utxPD7bL8qh7d3ej0qvaYIMj3/EgIrGR+tSnjCUkiCT6g6uTC0neSS4JY8LxhdSU/sA==} + '@oxc-parser/binding-android-arm64@0.127.0': + resolution: {integrity: sha512-b5jtVTH6AU5CJXHNdj7Jj9IEiR9yVjjnwHzPJhGyHGPdcsZSzBCkS9GBbV33niRMvKthDwQRFRJfI4a+k4PvYg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxc-parser/binding-darwin-arm64@0.121.0': - resolution: {integrity: sha512-A0jNEvv7QMtCO1yk205t3DWU9sWUjQ2KNF0hSVO5W9R9r/R1BIvzG01UQAfmtC0dQm7sCrs5puixurKSfr2bRQ==} + '@oxc-parser/binding-darwin-arm64@0.127.0': + resolution: {integrity: sha512-obCE8B7ISKkJidjlhv9xRGJPOSDG2Yu6PRga9Ruaz35uintHxbp1Ki/Yc71wx4rj3Edrm0a1kzG1TAwit0wFpg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxc-parser/binding-darwin-x64@0.121.0': - resolution: {integrity: sha512-SsHzipdxTKUs3I9EOAPmnIimEeJOemqRlRDOp9LIj+96wtxZejF51gNibmoGq8KoqbT1ssAI5po/E3J+vEtXGA==} + '@oxc-parser/binding-darwin-x64@0.127.0': + resolution: {integrity: sha512-JL6Xb5IwPQT8rUzlpsX7E+AgfcdNklXNPFp8pjCQQ5MQOQo5rtEB2ui+3Hgg9Sn7Y9Egj6YOLLiHhLpdAe12Aw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxc-parser/binding-freebsd-x64@0.121.0': - resolution: {integrity: sha512-v1APOTkCp+RWOIDAHRoaeW/UoaHF15a60E8eUL6kUQXh+i4K7PBwq2Wi7jm8p0ymID5/m/oC1w3W31Z/+r7HQw==} + '@oxc-parser/binding-freebsd-x64@0.127.0': + resolution: {integrity: sha512-SDQ/3MQFw58fqQz3Z1PhSKFF3JoCF4gmlNjziDm8X02tTahCw0qJbd7FGPDKw1i4VTBZene9JPyC3mHtSvi+wA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxc-parser/binding-linux-arm-gnueabihf@0.121.0': - resolution: {integrity: sha512-PmqPQuqHZyFVWA4ycr0eu4VnTMmq9laOHZd+8R359w6kzuNZPvmmunmNJ8ybkm769A0nCoVp3TJ6dUz7B3FYIQ==} + '@oxc-parser/binding-linux-arm-gnueabihf@0.127.0': + resolution: {integrity: sha512-Av+D1MIqzV0YMGPT9we2SIZaMKD7Cxs4CvXSx/yxaWHewZjYEjScpOf5igc8IILASViw4WTnjlwUdI1KzVtDHQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-parser/binding-linux-arm-musleabihf@0.121.0': - resolution: {integrity: sha512-vF24htj+MOH+Q7y9A8NuC6pUZu8t/C2Fr/kDOi2OcNf28oogr2xadBPXAbml802E8wRAVfbta6YLDQTearz+jw==} + '@oxc-parser/binding-linux-arm-musleabihf@0.127.0': + resolution: {integrity: sha512-Cs2fdJ8cPpFdeebj6p4dag8A4+56hPvZ0AhQQzlaLswGz1tz7bXt1nETLeorrM9+AMcWFFkqxcXwDGfTVidY8g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-parser/binding-linux-arm64-gnu@0.121.0': - resolution: {integrity: sha512-wjH8cIG2Lu/3d64iZpbYr73hREMgKAfu7fqpXjgM2S16y2zhTfDIp8EQjxO8vlDtKP5Rc7waZW72lh8nZtWrpA==} + '@oxc-parser/binding-linux-arm64-gnu@0.127.0': + resolution: {integrity: sha512-qdOfTcT6SY8gsJrrV92uyEUyjqMGPpIB5JZUG6QN5dukYd+7/j0kX6MwK1DgQj39jtUYixxPiaRUiEN1+0CXgQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-arm64-musl@0.121.0': - resolution: {integrity: sha512-qT663J/W8yQFw3dtscbEi9LKJevr20V7uWs2MPGTnvNZ3rm8anhhE16gXGpxDOHeg9raySaSHKhd4IGa3YZvuw==} + '@oxc-parser/binding-linux-arm64-musl@0.127.0': + resolution: {integrity: sha512-EoTCZneNFU/P2qrpEM+RHmQwt+CvDkyGESG6qhr7KaegXLZwePfbrkCDfAk8/rhxbDUVGsZILX+2tqPzFtoFWA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxc-parser/binding-linux-ppc64-gnu@0.121.0': - resolution: {integrity: sha512-mYNe4NhVvDBbPkAP8JaVS8lC1dsoJZWH5WCjpw5E+sjhk1R08wt3NnXYUzum7tIiWPfgQxbCMcoxgeemFASbRw==} + '@oxc-parser/binding-linux-ppc64-gnu@0.127.0': + resolution: {integrity: sha512-zALjmZYgxFLHjXeudcDF0xFGNydTAtkAeXAr2EuC17ywCyFxcmQra4w0BMde0Yi/re4Bi4iwEoEXtYN7l6eBLQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-riscv64-gnu@0.121.0': - resolution: {integrity: sha512-+QiFoGxhAbaI/amqX567784cDyyuZIpinBrJNxUzb+/L2aBRX67mN6Jv40pqduHf15yYByI+K5gUEygCuv0z9w==} + '@oxc-parser/binding-linux-riscv64-gnu@0.127.0': + resolution: {integrity: sha512-fPP8M6zQLS7Jz7o9d5ArUSuAuSK3e+WCYVrCpdzeCOejidtZExJ9tjhDrAd3HEPqARBCPmdpqxESPFqy44vkBQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-riscv64-musl@0.121.0': - resolution: {integrity: sha512-9ykEgyTa5JD/Uhv2sttbKnCfl2PieUfOjyxJC/oDL2UO0qtXOtjPLl7H8Kaj5G7p3hIvFgu3YWvAxvE0sqY+hQ==} + '@oxc-parser/binding-linux-riscv64-musl@0.127.0': + resolution: {integrity: sha512-7IcC4Ao02oGpfnjt+X/oF4U2mllo2qoSkw5xxiXNKL9MCTsTiAC6616beOuehdxGcnz1bRoPC1RQ2f1GQDdN+g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxc-parser/binding-linux-s390x-gnu@0.121.0': - resolution: {integrity: sha512-DB1EW5VHZdc1lIRjOI3bW/wV6R6y0xlfvdVrqj6kKi7Ayu2U3UqUBdq9KviVkcUGd5Oq+dROqvUEEFRXGAM7EQ==} + '@oxc-parser/binding-linux-s390x-gnu@0.127.0': + resolution: {integrity: sha512-pbXIhiNFHoqWeqDNLiJ9JkpHz1IM9k4DXa66x+1GTWMG7iLxtkXgE53iiuKSXwmk3zIYmaPVfBvgcAhS583K4Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-x64-gnu@0.121.0': - resolution: {integrity: sha512-s4lfobX9p4kPTclvMiH3gcQUd88VlnkMTF6n2MTMDAyX5FPNRhhRSFZK05Ykhf8Zy5NibV4PbGR6DnK7FGNN6A==} + '@oxc-parser/binding-linux-x64-gnu@0.127.0': + resolution: {integrity: sha512-MYCguB9RvBvlSd6gbuNI7QwiLoCCAlGnlRJFPrzLI6U1/9wkC/WK6LtBAUln55H1Ctqw45PWmqrobKoMhsYQzQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-x64-musl@0.121.0': - resolution: {integrity: sha512-P9KlyTpuBuMi3NRGpJO8MicuGZfOoqZVRP1WjOecwx8yk4L/+mrCRNc5egSi0byhuReblBF2oVoDSMgV9Bj4Hw==} + '@oxc-parser/binding-linux-x64-musl@0.127.0': + resolution: {integrity: sha512-5eY0B/bxf1xIUxb4NOTvOI3KWtBQfPWYyKAzgcrCt0mDibSZygVpO1Pz8bkeiSZ5Jj9+M09dkggG3H8I5d0Uyg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxc-parser/binding-openharmony-arm64@0.121.0': - resolution: {integrity: sha512-R+4jrWOfF2OAPPhj3Eb3U5CaKNAH9/btMveMULIrcNW/hjfysFQlF8wE0GaVBr81dWz8JLgQlsxwctoL78JwXw==} + '@oxc-parser/binding-openharmony-arm64@0.127.0': + resolution: {integrity: sha512-Gld0ajrFTUXNtdw20fVBuTQx66FA75nIVg+//pPfR3sXkuABB4mTBhl3r9JNzrJpgW//qiwxf0nWXUWGJSL3UQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxc-parser/binding-wasm32-wasi@0.121.0': - resolution: {integrity: sha512-5TFISkPTymKvsmIlKasPVTPuWxzCcrT8pM+p77+mtQbIZDd1UC8zww4CJcRI46kolmgrEX6QpKO8AvWMVZ+ifw==} - engines: {node: '>=14.0.0'} + '@oxc-parser/binding-wasm32-wasi@0.127.0': + resolution: {integrity: sha512-T6KVD7rhLzFlwGRXMnxUFfkCZD8FHnb968wVXW1mXzgRFc5RNXOBY2mPPDZ77x5Ln76ltLMgtPg0cOkU1NSrEQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] - '@oxc-parser/binding-win32-arm64-msvc@0.121.0': - resolution: {integrity: sha512-V0pxh4mql4XTt3aiEtRNUeBAUFOw5jzZNxPABLaOKAWrVzSr9+XUaB095lY7jqMf5t8vkfh8NManGB28zanYKw==} + '@oxc-parser/binding-win32-arm64-msvc@0.127.0': + resolution: {integrity: sha512-Ujvw4X+LD1CCGULcsQcvb4YNVoBGqt+JHgNNzGGaCImELiZLk477ifUH53gIbE7EKd933NdTi25JWEr9K2HwXw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxc-parser/binding-win32-ia32-msvc@0.121.0': - resolution: {integrity: sha512-4Ob1qvYMPnlF2N9rdmKdkQFdrq16QVcQwBsO8yiPZXof0fHKFF+LmQV501XFbi7lHyrKm8rlJRfQ/M8bZZPVLw==} + '@oxc-parser/binding-win32-ia32-msvc@0.127.0': + resolution: {integrity: sha512-0cwxKO7KHQQQfo4Uf4B2SQrhgm+cJaP9OvFFhx52Tkg4bezsacu83GB2/In5bC415Ueeym+kXdnge/57rbSfTw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxc-parser/binding-win32-x64-msvc@0.121.0': - resolution: {integrity: sha512-BOp1KCzdboB1tPqoCPXgntgFs0jjeSyOXHzgxVFR7B/qfr3F8r4YDacHkTOUNXtDgM8YwKnkf3rE5gwALYX7NA==} + '@oxc-parser/binding-win32-x64-msvc@0.127.0': + resolution: {integrity: sha512-rOrnSQSCbhI2kowr9XxE7m9a8oQXnBHjnS6j95LxxAnEZ0+Fz20WlRXG4ondQb+ejjt2KOsa65sE6++L6kUd+w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@oxc-project/types@0.121.0': - resolution: {integrity: sha512-CGtOARQb9tyv7ECgdAlFxi0Fv7lmzvmlm2rpD/RdijOO9rfk/JvB1CjT8EnoD+tjna/IYgKKw3IV7objRb+aYw==} - - '@oxc-project/types@0.122.0': - resolution: {integrity: sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA==} + '@oxc-project/types@0.127.0': + resolution: {integrity: sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==} '@oxc-resolver/binding-android-arm-eabi@11.19.1': resolution: {integrity: sha512-aUs47y+xyXHUKlbhqHUjBABjvycq6YSD7bpxSW7vplUmdzAlJ93yXY6ZR0c1o1x5A/QKbENCvs3+NlY8IpIVzg==} @@ -1382,106 +1402,118 @@ packages: cpu: [x64] os: [win32] + '@poppinss/cliui@6.8.1': + resolution: {integrity: sha512-o/ssbwr+r6woG65rk9eFHnn9dVUphZr/Rk+4+05ENVMBWYpYhTJGdE9RobTG5JLFubvO4gWIyFeNlC+I4EM6eA==} + + '@poppinss/colors@4.1.6': + resolution: {integrity: sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==} + + '@poppinss/validator-lite@2.1.2': + resolution: {integrity: sha512-UhSG1ouT6r67VbEFHK/8ax3EMZYHioew9PqGmEZjV41G15aPZi6cyhXtBVvF9xqkHMflA5V680k7bQzV0kfD5w==} + + '@quansync/fs@1.0.0': + resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==} + '@repeaterjs/repeater@3.0.6': resolution: {integrity: sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==} - '@rolldown/binding-android-arm64@1.0.0-rc.12': - resolution: {integrity: sha512-pv1y2Fv0JybcykuiiD3qBOBdz6RteYojRFY1d+b95WVuzx211CRh+ytI/+9iVyWQ6koTh5dawe4S/yRfOFjgaA==} + '@rolldown/binding-android-arm64@1.0.0-rc.17': + resolution: {integrity: sha512-s70pVGhw4zqGeFnXWvAzJDlvxhlRollagdCCKRgOsgUOH3N1l0LIxf83AtGzmb5SiVM4Hjl5HyarMRfdfj3DaQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.0-rc.12': - resolution: {integrity: sha512-cFYr6zTG/3PXXF3pUO+umXxt1wkRK/0AYT8lDwuqvRC+LuKYWSAQAQZjCWDQpAH172ZV6ieYrNnFzVVcnSflAg==} + '@rolldown/binding-darwin-arm64@1.0.0-rc.17': + resolution: {integrity: sha512-4ksWc9n0mhlZpZ9PMZgTGjeOPRu8MB1Z3Tz0Mo02eWfWCHMW1zN82Qz/pL/rC+yQa+8ZnutMF0JjJe7PjwasYw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-rc.12': - resolution: {integrity: sha512-ZCsYknnHzeXYps0lGBz8JrF37GpE9bFVefrlmDrAQhOEi4IOIlcoU1+FwHEtyXGx2VkYAvhu7dyBf75EJQffBw==} + '@rolldown/binding-darwin-x64@1.0.0-rc.17': + resolution: {integrity: sha512-SUSDOI6WwUVNcWxd02QEBjLdY1VPHvlEkw6T/8nYG322iYWCTxRb1vzk4E+mWWYehTp7ERibq54LSJGjmouOsw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-rc.12': - resolution: {integrity: sha512-dMLeprcVsyJsKolRXyoTH3NL6qtsT0Y2xeuEA8WQJquWFXkEC4bcu1rLZZSnZRMtAqwtrF/Ib9Ddtpa/Gkge9Q==} + '@rolldown/binding-freebsd-x64@1.0.0-rc.17': + resolution: {integrity: sha512-hwnz3nw9dbJ05EDO/PvcjaaewqqDy7Y1rn1UO81l8iIK1GjenME75dl16ajbvSSMfv66WXSRCYKIqfgq2KCfxw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12': - resolution: {integrity: sha512-YqWjAgGC/9M1lz3GR1r1rP79nMgo3mQiiA+Hfo+pvKFK1fAJ1bCi0ZQVh8noOqNacuY1qIcfyVfP6HoyBRZ85Q==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.17': + resolution: {integrity: sha512-IS+W7epTcwANmFSQFrS1SivEXHtl1JtuQA9wlxrZTcNi6mx+FDOYrakGevvvTwgj2JvWiK8B29/qD9BELZPyXQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12': - resolution: {integrity: sha512-/I5AS4cIroLpslsmzXfwbe5OmWvSsrFuEw3mwvbQ1kDxJ822hFHIx+vsN/TAzNVyepI/j/GSzrtCIwQPeKCLIg==} + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.17': + resolution: {integrity: sha512-e6usGaHKW5BMNZOymS1UcEYGowQMWcgZ71Z17Sl/h2+ZziNJ1a9n3Zvcz6LdRyIW5572wBCTH/Z+bKuZouGk9Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.12': - resolution: {integrity: sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw==} + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.17': + resolution: {integrity: sha512-b/CgbwAJpmrRLp02RPfhbudf5tZnN9nsPWK82znefso832etkem8H7FSZwxrOI9djcdTP7U6YfNhbRnh7djErg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12': - resolution: {integrity: sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g==} + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.17': + resolution: {integrity: sha512-4EII1iNGRUN5WwGbF/kOh/EIkoDN9HsupgLQoXfY+D1oyJm7/F4t5PYU5n8SWZgG0FEwakyM8pGgwcBYruGTlA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12': - resolution: {integrity: sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og==} + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.17': + resolution: {integrity: sha512-AH8oq3XqQo4IibpVXvPeLDI5pzkpYn0WiZAfT05kFzoJ6tQNzwRdDYQ45M8I/gslbodRZwW8uxLhbSBbkv96rA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.12': - resolution: {integrity: sha512-RNrafz5bcwRy+O9e6P8Z/OCAJW/A+qtBczIqVYwTs14pf4iV1/+eKEjdOUta93q2TsT/FI0XYDP3TCky38LMAg==} + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.17': + resolution: {integrity: sha512-cLnjV3xfo7KslbU41Z7z8BH/E1y5mzUYzAqih1d1MDaIGZRCMqTijqLv76/P7fyHuvUcfGsIpqCdddbxLLK9rA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.0.0-rc.12': - resolution: {integrity: sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig==} + '@rolldown/binding-linux-x64-musl@1.0.0-rc.17': + resolution: {integrity: sha512-0phclDw1spsL7dUB37sIARuis2tAgomCJXAHZlpt8PXZ4Ba0dRP1e+66lsRqrfhISeN9bEGNjQs+T/Fbd7oYGw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.0.0-rc.12': - resolution: {integrity: sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA==} + '@rolldown/binding-openharmony-arm64@1.0.0-rc.17': + resolution: {integrity: sha512-0ag/hEgXOwgw4t8QyQvUCxvEg+V0KBcA6YuOx9g0r02MprutRF5dyljgm3EmR02O292UX7UeS6HzWHAl6KgyhA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.0-rc.12': - resolution: {integrity: sha512-ykGiLr/6kkiHc0XnBfmFJuCjr5ZYKKofkx+chJWDjitX+KsJuAmrzWhwyOMSHzPhzOHOy7u9HlFoa5MoAOJ/Zg==} - engines: {node: '>=14.0.0'} + '@rolldown/binding-wasm32-wasi@1.0.0-rc.17': + resolution: {integrity: sha512-LEXei6vo0E5wTGwpkJ4KoT3OZJRnglwldt5ziLzOlc6qqb55z4tWNq2A+PFqCJuvWWdP53CVhG1Z9NtToDPJrA==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12': - resolution: {integrity: sha512-5eOND4duWkwx1AzCxadcOrNeighiLwMInEADT0YM7xeEOOFcovWZCq8dadXgcRHSf3Ulh1kFo/qvzoFiCLOL1Q==} + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.17': + resolution: {integrity: sha512-gUmyzBl3SPMa6hrqFUth9sVfcLBlYsbMzBx5PlexMroZStgzGqlZ26pYG89rBb45Mnia+oil6YAIFeEWGWhoZA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.12': - resolution: {integrity: sha512-PyqoipaswDLAZtot351MLhrlrh6lcZPo2LSYE+VDxbVk24LVKAGOuE4hb8xZQmrPAuEtTZW8E6D2zc5EUZX4Lw==} + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.17': + resolution: {integrity: sha512-3hkiolcUAvPB9FLb3UZdfjVVNWherN1f/skkGWJP/fgSQhYUZpSIRr0/I8ZK9TkF3F7kxvJAk0+IcKvPHk9qQg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@rolldown/plugin-babel@0.2.2': - resolution: {integrity: sha512-q9pE8+47bQNHb5eWVcE6oXppA+JTSwvnrhH53m0ZuHuK5MLvwsLoWrWzBTFQqQ06BVxz1gp0HblLsch8o6pvZw==} + '@rolldown/plugin-babel@0.2.3': + resolution: {integrity: sha512-+zEk16yGlz1F9STiRr6uG9hmIXb6nprjLczV/htGptYuLoCuxb+itZ03RKCEeOhBpDDd1NU7qF6x1VLMUp62bw==} engines: {node: '>=22.12.0 || ^24.0.0'} peerDependencies: '@babel/core': ^7.29.0 || ^8.0.0-rc.1 @@ -1497,8 +1529,8 @@ packages: vite: optional: true - '@rolldown/pluginutils@1.0.0-rc.12': - resolution: {integrity: sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw==} + '@rolldown/pluginutils@1.0.0-rc.17': + resolution: {integrity: sha512-n8iosDOt6Ig1UhJ2AYqoIhHWh/isz0xpicHTzpKBeotdVsTEcxsSA/i3EVM7gQAj0rU27OLAxCjzlj15IWY7bg==} '@rolldown/pluginutils@1.0.0-rc.7': resolution: {integrity: sha512-qujRfC8sFVInYSPPMLQByRh7zhwkGFS4+tyMQ83srV1qrxL4g8E2tyxVVyxd0+8QeBM1mIk9KbWxkegRr76XzA==} @@ -1515,10 +1547,19 @@ packages: '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + '@simple-git/args-pathspec@1.0.3': + resolution: {integrity: sha512-ngJMaHlsWDTfjyq9F3VIQ8b7NXbBLq5j9i5bJ6XLYtD6qlDXT7fdKY2KscWWUF8t18xx052Y/PUO1K1TRc9yKA==} + + '@simple-git/argv-parser@1.1.1': + resolution: {integrity: sha512-Q9lBcfQ+VQCpQqGJFHe5yooOS5hGdLFFbJ5R+R5aDsnkPCahtn1hSkMcORX65J2Z5lxSkD0lQorMsncuBQxYUw==} + '@sindresorhus/merge-streams@4.0.0': resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} engines: {node: '>=18'} + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + '@svgr/babel-plugin-add-jsx-attribute@8.0.0': resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==} engines: {node: '>=14'} @@ -1596,6 +1637,12 @@ packages: react: ^18.2.0 react-dom: ^18.2.0 + '@togglecorp/vite-plugin-validate-env@2.2.1': + resolution: {integrity: sha512-K39bpXSOdliJPMNfHuK17pszgWWNRJfaB4NRDQBuWx9h4O4/qF1nl7DpwBqSB006e3E284jZAZEw2r7RoHdG4w==} + engines: {node: '>=22'} + peerDependencies: + vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + '@tybys/wasm-util@0.10.1': resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} @@ -1639,63 +1686,63 @@ packages: '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} - '@typescript-eslint/eslint-plugin@8.58.0': - resolution: {integrity: sha512-RLkVSiNuUP1C2ROIWfqX+YcUfLaSnxGE/8M+Y57lopVwg9VTYYfhuz15Yf1IzCKgZj6/rIbYTmJCUSqr76r0Wg==} + '@typescript-eslint/eslint-plugin@8.59.0': + resolution: {integrity: sha512-HyAZtpdkgZwpq8Sz3FSUvCR4c+ScbuWa9AksK2Jweub7w4M3yTz4O11AqVJzLYjy/B9ZWPyc81I+mOdJU/bDQw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.58.0 + '@typescript-eslint/parser': ^8.59.0 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.58.0': - resolution: {integrity: sha512-rLoGZIf9afaRBYsPUMtvkDWykwXwUPL60HebR4JgTI8mxfFe2cQTu3AGitANp4b9B2QlVru6WzjgB2IzJKiCSA==} + '@typescript-eslint/parser@8.59.0': + resolution: {integrity: sha512-TI1XGwKbDpo9tRW8UDIXCOeLk55qe9ZFGs8MTKU6/M08HWTw52DD/IYhfQtOEhEdPhLMT26Ka/x7p70nd3dzDg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.58.0': - resolution: {integrity: sha512-8Q/wBPWLQP1j16NxoPNIKpDZFMaxl7yWIoqXWYeWO+Bbd2mjgvoF0dxP2jKZg5+x49rgKdf7Ck473M8PC3V9lg==} + '@typescript-eslint/project-service@8.59.0': + resolution: {integrity: sha512-Lw5ITrR5s5TbC19YSvlr63ZfLaJoU6vtKTHyB0GQOpX0W7d5/Ir6vUahWi/8Sps/nOukZQ0IB3SmlxZnjaKVnw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@8.58.0': - resolution: {integrity: sha512-W1Lur1oF50FxSnNdGp3Vs6P+yBRSmZiw4IIjEeYxd8UQJwhUF0gDgDD/W/Tgmh73mxgEU3qX0Bzdl/NGuSPEpQ==} + '@typescript-eslint/scope-manager@8.59.0': + resolution: {integrity: sha512-UzR16Ut8IpA3Mc4DbgAShlPPkVm8xXMWafXxB0BocaVRHs8ZGakAxGRskF7FId3sdk9lgGD73GSFaWmWFDE4dg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.58.0': - resolution: {integrity: sha512-doNSZEVJsWEu4htiVC+PR6NpM+pa+a4ClH9INRWOWCUzMst/VA9c4gXq92F8GUD1rwhNvRLkgjfYtFXegXQF7A==} + '@typescript-eslint/tsconfig-utils@8.59.0': + resolution: {integrity: sha512-91Sbl3s4Kb3SybliIY6muFBmHVv+pYXfybC4Oolp3dvk8BvIE3wOPc+403CWIT7mJNkfQRGtdqghzs2+Z91Tqg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.58.0': - resolution: {integrity: sha512-aGsCQImkDIqMyx1u4PrVlbi/krmDsQUs4zAcCV6M7yPcPev+RqVlndsJy9kJ8TLihW9TZ0kbDAzctpLn5o+lOg==} + '@typescript-eslint/type-utils@8.59.0': + resolution: {integrity: sha512-3TRiZaQSltGqGeNrJzzr1+8YcEobKH9rHnqIp/1psfKFmhRQDNMGP5hBufanYTGznwShzVLs3Mz+gDN7HkWfXg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.58.0': - resolution: {integrity: sha512-O9CjxypDT89fbHxRfETNoAnHj/i6IpRK0CvbVN3qibxlLdo5p5hcLmUuCCrHMpxiWSwKyI8mCP7qRNYuOJ0Uww==} + '@typescript-eslint/types@8.59.0': + resolution: {integrity: sha512-nLzdsT1gdOgFxxxwrlNVUBzSNBEEHJ86bblmk4QAS6stfig7rcJzWKqCyxFy3YRRHXDWEkb2NralA1nOYkkm/A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.58.0': - resolution: {integrity: sha512-7vv5UWbHqew/dvs+D3e1RvLv1v2eeZ9txRHPnEEBUgSNLx5ghdzjHa0sgLWYVKssH+lYmV0JaWdoubo0ncGYLA==} + '@typescript-eslint/typescript-estree@8.59.0': + resolution: {integrity: sha512-O9Re9P1BmBLFJyikRbQpLku/QA3/AueZNO9WePLBwQrvkixTmDe8u76B6CYUAITRl/rHawggEqUGn5QIkVRLMw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.58.0': - resolution: {integrity: sha512-RfeSqcFeHMHlAWzt4TBjWOAtoW9lnsAGiP3GbaX9uVgTYYrMbVnGONEfUCiSss+xMHFl+eHZiipmA8WkQ7FuNA==} + '@typescript-eslint/utils@8.59.0': + resolution: {integrity: sha512-I1R/K7V07XsMJ12Oaxg/O9GfrysGTmCRhvZJBv0RE0NcULMzjqVpR5kRRQjHsz3J/bElU7HwCO7zkqL+MSUz+g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@8.58.0': - resolution: {integrity: sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ==} + '@typescript-eslint/visitor-keys@8.59.0': + resolution: {integrity: sha512-/uejZt4dSere1bx12WLlPfv8GktzcaDtuJ7s42/HEZ5zGj9oxRaD4bj7qwSunXkf+pbAhFt2zjpHYUiT5lHf0Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@unrs/resolver-binding-android-arm-eabi@1.11.1': @@ -1869,16 +1916,28 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - ajv@6.14.0: - resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} + ajv@6.15.0: + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} ajv@8.18.0: resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} + ansi-escapes@3.2.0: + resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==} + engines: {node: '>=4'} + ansi-escapes@7.3.0: resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==} engines: {node: '>=18'} + ansi-regex@3.0.1: + resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} + engines: {node: '>=4'} + + ansi-regex@4.1.1: + resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} + engines: {node: '>=6'} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -1887,6 +1946,10 @@ packages: resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} engines: {node: '>=12'} + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -1895,6 +1958,9 @@ packages: resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -1970,8 +2036,8 @@ packages: resolution: {integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==} engines: {node: '>=8'} - autoprefixer@10.4.27: - resolution: {integrity: sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==} + autoprefixer@10.5.0: + resolution: {integrity: sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: @@ -1987,8 +2053,8 @@ packages: aws4@1.13.2: resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==} - axe-core@4.11.2: - resolution: {integrity: sha512-byD6KPdvo72y/wj2T/4zGEvvlis+PsZsn/yPS3pEO+sFpcrqRpX/TJCxvVaEsNeMrfQbCr7w163YqoD9IYwHXw==} + axe-core@4.11.3: + resolution: {integrity: sha512-zBQouZixDTbo3jMGqHKyePxYxr1e5W8UdTmBQ7sNtaA9M2bE32daxxPLS/jojhKOHxQ7LWwPjfiwf/fhaJWzlg==} engines: {node: '>=4'} axobject-query@4.1.0: @@ -2005,16 +2071,16 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - baseline-browser-mapping@2.10.16: - resolution: {integrity: sha512-Lyf3aK28zpsD1yQMiiHD4RvVb6UdMoo8xzG2XzFIfR9luPzOpcBlAsT/qfB1XWS1bxWT+UtE4WmQgsp297FYOA==} + baseline-browser-mapping@2.10.21: + resolution: {integrity: sha512-Q+rUQ7Uz8AHM7DEaNdwvfFCTq7a43lNTzuS94eiWqwyxfV/wJv+oUivef51T91mmRY4d4A1u9rcSvkeufCVXlA==} engines: {node: '>=6.0.0'} hasBin: true bcrypt-pbkdf@1.0.2: resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} - brace-expansion@1.1.13: - resolution: {integrity: sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==} + brace-expansion@1.1.14: + resolution: {integrity: sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==} brace-expansion@5.0.5: resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} @@ -2039,8 +2105,8 @@ packages: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} - call-bind@1.0.8: - resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + call-bind@1.0.9: + resolution: {integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==} engines: {node: '>= 0.4'} call-bound@1.0.4: @@ -2054,12 +2120,16 @@ packages: camel-case@4.1.2: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001786: - resolution: {integrity: sha512-4oxTZEvqmLLrERwxO76yfKM7acZo310U+v4kqexI2TL1DkkUEMT8UijrxxcnVdxR3qkVf5awGRX+4Z6aPHVKrA==} + caniuse-lite@1.0.30001790: + resolution: {integrity: sha512-bOoxfJPyYo+ds6W0YfptaCWbFnJYjh2Y1Eow5lRv+vI2u8ganPZqNm1JwNh0t2ELQCqIWg4B3dWEusgAmsoyOw==} capital-case@1.0.4: resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} @@ -2067,6 +2137,10 @@ packages: caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -2077,6 +2151,9 @@ packages: change-case@4.1.2: resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + chardet@2.1.1: resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} @@ -2084,26 +2161,62 @@ packages: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} + cli-boxes@4.0.1: + resolution: {integrity: sha512-5IOn+jcCEHEraYolBPs/sT4BxYCe2nHg374OPiItB1O96KZFseS2gthU4twyYzeDcFew4DaUM/xwc5BQf08JJw==} + engines: {node: '>=18.20 <19 || >=20.10'} + + cli-cursor@2.1.0: + resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==} + engines: {node: '>=4'} + cli-cursor@5.0.0: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-table3@0.6.5: + resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} + engines: {node: 10.* || >= 12.*} + + cli-table@0.3.11: + resolution: {integrity: sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==} + engines: {node: '>= 0.2.0'} + cli-truncate@5.2.0: resolution: {integrity: sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==} engines: {node: '>=20'} + cli-width@2.2.1: + resolution: {integrity: sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==} + cli-width@4.1.0: resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} engines: {node: '>= 12'} + cliui@5.0.0: + resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==} + cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} @@ -2113,10 +2226,17 @@ packages: colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + colors@1.0.3: + resolution: {integrity: sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==} + engines: {node: '>=0.1.90'} + combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + common-tags@1.8.2: resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} engines: {node: '>=4.0.0'} @@ -2266,6 +2386,10 @@ packages: supports-color: optional: true + decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -2273,6 +2397,9 @@ packages: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} @@ -2281,6 +2408,9 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} + defu@6.1.7: + resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} + delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -2340,8 +2470,8 @@ packages: resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} engines: {node: '>=12'} - dotenv@17.4.1: - resolution: {integrity: sha512-k8DaKGP6r1G30Lx8V4+pCsLzKr8vLmV2paqEj1Y55GdAgJuIqpRp5FfajGF8KtwMxCz9qJc6wUIJnm053d/WCw==} + dotenv@17.4.2: + resolution: {integrity: sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==} engines: {node: '>=12'} dunder-proto@1.0.1: @@ -2351,12 +2481,15 @@ packages: ecc-jsbn@0.1.2: resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} - electron-to-chromium@1.5.332: - resolution: {integrity: sha512-7OOtytmh/rINMLwaFTbcMVvYXO3AUm029X0LcyfYk0B557RlPkdpTpnH9+htMlfu5dKwOmT0+Zs2Aw+lnn6TeQ==} + electron-to-chromium@1.5.344: + resolution: {integrity: sha512-4MxfbmNDm+KPh066EZy+eUnkcDPcZ35wNmOWzFuh/ijvHsve6kbLTLURy88uCNK5FbpN+yk2nQY6BYh1GEt+wg==} emoji-regex@10.6.0: resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} + emoji-regex@7.0.3: + resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2382,8 +2515,8 @@ packages: error-ex@1.3.4: resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} - es-abstract@1.24.1: - resolution: {integrity: sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==} + es-abstract@1.24.2: + resolution: {integrity: sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==} engines: {node: '>= 0.4'} es-define-property@1.0.1: @@ -2394,8 +2527,8 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-iterator-helpers@1.3.1: - resolution: {integrity: sha512-zWwRvqWiuBPr0muUG/78cW3aHROFCNIQ3zpmYDpwdbnt2m+xlNyRWpHBpa2lJjSBit7BQ+RXA1iwbSmu5yJ/EQ==} + es-iterator-helpers@1.3.2: + resolution: {integrity: sha512-HVLACW1TppGYjJ8H6/jqH/pqOtKRw6wMlrB23xfExmFWxFquAIWCmwoLsOyN96K4a5KbmOf5At9ZUO3GZbetAw==} engines: {node: '>= 0.4'} es-object-atoms@1.1.1: @@ -2418,6 +2551,10 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -2516,11 +2653,11 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 - eslint-plugin-react-hooks@7.0.1: - resolution: {integrity: sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==} + eslint-plugin-react-hooks@7.1.1: + resolution: {integrity: sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==} engines: {node: '>=18'} peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0 eslint-plugin-react-refresh@0.4.26: resolution: {integrity: sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==} @@ -2599,9 +2736,17 @@ packages: eventemitter3@5.0.4: resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} + extend-shallow@2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} + extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + extsprintf@1.3.0: resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} engines: {'0': node >=0.6.0} @@ -2645,6 +2790,10 @@ packages: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} + figures@2.0.0: + resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} + engines: {node: '>=4'} + file-entry-cache@11.1.2: resolution: {integrity: sha512-N2WFfK12gmrK1c1GXOqiAJ1tc5YE+R53zvQ+t5P8S5XhnmKYVB5eZEiLNZKDSmoG8wqqbF9EXYBBW/nef19log==} @@ -2656,6 +2805,10 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + find-up@3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} + find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} @@ -2697,6 +2850,13 @@ packages: fraction.js@5.3.4: resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} + fs-exists-sync@0.1.0: + resolution: {integrity: sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg==} + engines: {node: '>=0.10.0'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -2744,8 +2904,8 @@ packages: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} - get-tsconfig@4.13.7: - resolution: {integrity: sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==} + get-tsconfig@4.14.0: + resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} getpass@0.1.7: resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} @@ -2758,6 +2918,10 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + global-modules@2.0.0: resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} engines: {node: '>=6'} @@ -2770,8 +2934,8 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} - globals@17.4.0: - resolution: {integrity: sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw==} + globals@17.5.0: + resolution: {integrity: sha512-qoV+HK2yFl/366t2/Cb3+xxPUo5BuMynomoDmiaZBIdbs+0pYbjfZU+twLhGKp4uCZ/+NbtpVepH5bGCxRyy2g==} engines: {node: '>=18'} globalthis@1.0.4: @@ -2789,9 +2953,6 @@ packages: globjoin@0.1.4: resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==} - globrex@0.1.2: - resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -2848,6 +3009,10 @@ packages: resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} engines: {node: '>= 0.4'} + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} @@ -2875,8 +3040,8 @@ packages: resolution: {integrity: sha512-iZyKG96/JwPz1N55vj2Ie2vXbhu440zfUfJvSwEqEbeLluk7NnapfGqa7LH0mOsnDxTF85Mx8/dyR6HfqcbmbQ==} engines: {node: '>=20'} - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + hasown@2.0.3: + resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==} engines: {node: '>= 0.4'} header-case@2.0.4: @@ -2945,9 +3110,20 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + inquirer@6.5.2: + resolution: {integrity: sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==} + engines: {node: '>=6.0.0'} + internal-slot@1.1.0: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} @@ -3001,6 +3177,10 @@ packages: resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} engines: {node: '>= 0.4'} + is-extendable@0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -3009,6 +3189,10 @@ packages: resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} engines: {node: '>= 0.4'} + is-fullwidth-code-point@2.0.0: + resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} + engines: {node: '>=4'} + is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -3140,6 +3324,10 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + js-yaml@3.14.2: + resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==} + hasBin: true + js-yaml@4.1.1: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true @@ -3213,8 +3401,12 @@ packages: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} - knip@6.3.0: - resolution: {integrity: sha512-g6dVPoTw6iNm3cubC5IWxVkVsd0r5hXhTBTbAGIEQN53GdA2ZM/slMTPJ7n5l8pBebNQPHpxjmKxuR4xVQ2/hQ==} + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + + knip@6.6.2: + resolution: {integrity: sha512-ma2p+SvgIs1GZZLUV9QJrLkb9gGNBQHk7fcrtt3aVhiW2XEXH/yfMOU88F7ZdriYuBYkB53djPNYMWb2pKVl/g==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -3310,10 +3502,22 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + lint@0.8.19: + resolution: {integrity: sha512-i9iqBX/OO2+zSE7hEDXJ0rdLMxvBluK2T/xbCKAhEgyHE1q6kjp1HJGOVagkVB0f0UZ+FnW/wM3smsihQN0tFw==} + hasBin: true + listr2@9.0.5: resolution: {integrity: sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==} engines: {node: '>=20.0.0'} + loadash@1.0.0: + resolution: {integrity: sha512-xlX5HBsXB3KG0FJbJJG/3kYWCfsCyCSus3T+uHVu6QL6YxAdggmm3QeyLgn54N2yi5/UE6xxL5ZWJAAiHzHYEg==} + deprecated: Package is unsupport. Please use the lodash package instead. + + locate-path@3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} + locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -3330,6 +3534,10 @@ packages: lodash@4.18.1: resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} + log-symbols@2.2.0: + resolution: {integrity: sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==} + engines: {node: '>=4'} + log-symbols@4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} @@ -3338,6 +3546,10 @@ packages: resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} engines: {node: '>=18'} + log-update@7.2.0: + resolution: {integrity: sha512-iLs7dGSyjZiUgvrUvuD3FndAxVJk+TywBkkkwUSm9HdYoskJalWg5qVsEiXeufPvRVPbCUmNQewg798rx+sPXg==} + engines: {node: '>=20'} + loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -3394,6 +3606,10 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + mimic-fn@1.2.0: + resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==} + engines: {node: '>=4'} + mimic-function@5.0.1: resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} engines: {node: '>=18'} @@ -3408,9 +3624,19 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + moment@2.30.1: + resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + mute-stream@0.0.7: + resolution: {integrity: sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==} + mute-stream@2.0.0: resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} engines: {node: ^18.17.0 || >=20.5.0} @@ -3444,8 +3670,8 @@ packages: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - node-releases@2.0.37: - resolution: {integrity: sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==} + node-releases@2.0.38: + resolution: {integrity: sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==} normalize-path@2.1.1: resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} @@ -3497,6 +3723,13 @@ packages: resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@2.0.1: + resolution: {integrity: sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==} + engines: {node: '>=4'} + onetime@7.0.0: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} @@ -3512,25 +3745,45 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} + ora@3.4.0: + resolution: {integrity: sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==} + engines: {node: '>=6'} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + own-keys@1.0.1: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} - oxc-parser@0.121.0: - resolution: {integrity: sha512-ek9o58+SCv6AV7nchiAcUJy1DNE2CC5WRdBcO0mF+W4oRjNQfPO7b3pLjTHSFECpHkKGOZSQxx3hk8viIL5YCg==} + oxc-parser@0.127.0: + resolution: {integrity: sha512-bkgD4qHlN7WxLdX8bLXdaU54TtQtAIg/ZBAfm0aje/mo3MRDo3P0hZSgr4U7O3xfX+fQmR5AP04JS/TGcZLcFA==} engines: {node: ^20.19.0 || >=22.12.0} oxc-resolver@11.19.1: resolution: {integrity: sha512-qE/CIg/spwrTBFt5aKmwe3ifeDdLfA2NESN30E42X/lII5ClF8V7Wt6WIJhcGZjp0/Q+nQ+9vgxGk//xZNX2hg==} + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} + p-locate@3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} + p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + param-case@3.0.4: resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} @@ -3558,10 +3811,18 @@ packages: path-case@3.0.4: resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} + path-exists@3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -3631,8 +3892,8 @@ packages: peerDependencies: postcss: ^8.4.6 - postcss-color-functional-notation@8.0.2: - resolution: {integrity: sha512-tbmkk6teYpJzFcGwPIhN1gkvxqGHvNx2PMb8Y3S5Ktyn7xOlvD98XzQ99MFY5mAyvXWclDG+BgoJKYJXFJOp5Q==} + postcss-color-functional-notation@8.0.3: + resolution: {integrity: sha512-MyaFK+3PusD7F2+qlMDP6+zfSgHWP17AtmvHQs44W3+Qbb39VptVDVRJ4Lf7gHSVffW5ekEy/XrsZ0S0t34hrA==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 @@ -3708,8 +3969,8 @@ packages: peerDependencies: postcss: ^8.4 - postcss-lab-function@8.0.2: - resolution: {integrity: sha512-1ZIAh8ODhZdnAb09Aq2BTenePKS1G/kUR0FwvzkQDfFtSOV64Ycv27YvV11fDycEvhIcEmgYkLABXKRiWcXRuA==} + postcss-lab-function@8.0.3: + resolution: {integrity: sha512-rUa27RLVXjMn1aDkHEt5dRsK80+bAACPr8w5Ow0BkIlfH6gEk0Mh1I0REkYhtp4UhKFw1HLEk3AzvKBi6BGOqw==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 @@ -3762,8 +4023,8 @@ packages: peerDependencies: postcss: ^8.4 - postcss-preset-env@11.2.0: - resolution: {integrity: sha512-eNYpuj68cjGjvZMoSAbHilaCt3yIyzBL1cVuSGJfvJewsaBW/U6dI2bqCJl3iuZsL+yvBobcy4zJFA/3I68IHQ==} + postcss-preset-env@11.2.1: + resolution: {integrity: sha512-dqL7WR5wg9yP/+6pTHIsIeIpK6XVghJDE4/r4ZSdr5ExrbLiN5x78gly0Xs0MLGbHy2oT3WWNfbxowmnw9BurQ==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 @@ -3813,8 +4074,8 @@ packages: resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==} engines: {node: '>=6.0.0'} - postcss@8.5.9: - resolution: {integrity: sha512-7a70Nsot+EMX9fFU3064K/kdHWZqGVY+BADLyXc8Dfv+mTLLVl6JzJpPaCZ2kQL9gIJvKXSLMHhqdRRjwQeFtw==} + postcss@8.5.10: + resolution: {integrity: sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.1.2: @@ -3825,6 +4086,15 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} + prettier@1.19.1: + resolution: {integrity: sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==} + engines: {node: '>=4'} + hasBin: true + + pretty-hrtime@1.0.3: + resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==} + engines: {node: '>= 0.8'} + prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} @@ -3846,6 +4116,9 @@ packages: resolution: {integrity: sha512-mzR4sElr1bfCaPJe7m8ilJ6ZXdDaGoObcYR0ZHSsktM/Lt21MVHj5De30GQH2eiZ1qGRTO7LCAzQsUeXTNexWQ==} engines: {node: '>=0.6'} + quansync@1.0.0: + resolution: {integrity: sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -3859,10 +4132,10 @@ packages: peerDependencies: react: '>= 16.3.0' - react-dom@19.2.4: - resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==} + react-dom@19.2.5: + resolution: {integrity: sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag==} peerDependencies: - react: ^19.2.4 + react: ^19.2.5 react-focus-lock@2.13.7: resolution: {integrity: sha512-20lpZHEQrXPb+pp1tzd4ULL6DyO5D2KnR0G69tTDdydrmNhU7pdFmbQUYVyHUgp+xN29IuFR0PVuhOmvaZL9Og==} @@ -3906,8 +4179,8 @@ packages: '@types/react': optional: true - react-router@7.14.0: - resolution: {integrity: sha512-m/xR9N4LQLmAS0ZhkY2nkPA1N7gQ5TUVa5n8TgANuDTARbn1gt+zLPXEm7W0XDTbrQ2AJSJKhoa6yx1D8BcpxQ==} + react-router@7.14.2: + resolution: {integrity: sha512-yCqNne6I8IB6rVCH7XUvlBK7/QKyqypBFGv+8dj4QBFJiiRX+FG7/nkdAvGElyvVZ/HQP5N19wzteuTARXi5Gw==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' @@ -3926,8 +4199,8 @@ packages: '@types/react': optional: true - react@19.2.4: - resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==} + react@19.2.5: + resolution: {integrity: sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==} engines: {node: '>=0.10.0'} readdirp@4.1.2: @@ -3951,6 +4224,10 @@ packages: remove-trailing-spaces@1.0.9: resolution: {integrity: sha512-xzG7w5IRijvIkHIjDk65URsJJ7k4J95wmcArY5PRcmjldIOl7oTvG8+X2Ag690R7SfwiOcHrWZKVc1Pp5WIOzA==} + replace-in-file@3.4.4: + resolution: {integrity: sha512-ehq0dFsxSpfPiPLBU5kli38Ud8bZL0CQKG8WQVbvhmyilXaMJ8y4LtDZs/K3MD8C0+rHbsfW8c9r2bUEy0B/6Q==} + hasBin: true + request-promise-core@1.1.4: resolution: {integrity: sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==} engines: {node: '>=0.10.0'} @@ -3977,6 +4254,9 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -3995,8 +4275,8 @@ packages: resolve.imports@1.2.7: resolution: {integrity: sha512-q+UNv8vIE8wiB3BYjN9cAEtx17TnV6PoQSBWLCWaI9DDumevUifHY5ocKL4S5qcETHm++Gia3EdNJO81IW3PaQ==} - resolve@1.22.11: - resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} + resolve@1.22.12: + resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==} engines: {node: '>= 0.4'} hasBin: true @@ -4005,6 +4285,10 @@ packages: engines: {node: '>= 0.4'} hasBin: true + restore-cursor@2.0.0: + resolution: {integrity: sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==} + engines: {node: '>=4'} + restore-cursor@5.1.0: resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} engines: {node: '>=18'} @@ -4020,16 +4304,24 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rolldown@1.0.0-rc.12: - resolution: {integrity: sha512-yP4USLIMYrwpPHEFB5JGH1uxhcslv6/hL0OyvTuY+3qlOSJvZ7ntYnoWpehBxufkgN0cvXxppuTu5hHa/zPh+A==} + rolldown@1.0.0-rc.17: + resolution: {integrity: sha512-ZrT53oAKrtA4+YtBWPQbtPOxIbVDbxT0orcYERKd63VJTF13zPcgXTvD4843L8pcsI7M6MErt8QtON6lrB9tyA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true + run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - safe-array-concat@1.1.3: - resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + rxjs@6.6.7: + resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} + engines: {npm: '>=2.0.0'} + + safe-array-concat@1.1.4: + resolution: {integrity: sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==} engines: {node: '>=0.4'} safe-buffer@5.2.1: @@ -4046,8 +4338,8 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sanitize-html@2.17.2: - resolution: {integrity: sha512-EnffJUl46VE9uvZ0XeWzObHLurClLlT12gsOk1cHyP2Ol1P0BnBnsXmShlBmWVJM+dKieQI68R0tsPY5m/B+Jg==} + sanitize-html@2.17.3: + resolution: {integrity: sha512-Kn4srCAo2+wZyvCNKCSyB2g8RQ8IkX/gQs2uqoSRNu5t9I2qvUyAVvRDiFUVAiX3N3PNuwStY0eNr+ooBHVWEg==} sanitize.css@13.0.0: resolution: {integrity: sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==} @@ -4071,6 +4363,9 @@ packages: sentence-case@3.0.4: resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + set-cookie-parser@2.7.2: resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==} @@ -4098,8 +4393,8 @@ packages: resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} engines: {node: '>= 0.4'} - side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + side-channel-list@1.0.1: + resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} engines: {node: '>= 0.4'} side-channel-map@1.0.1: @@ -4121,6 +4416,9 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + simple-git@3.36.0: + resolution: {integrity: sha512-cGQjLjK8bxJw4QuYT7gxHw3/IouVESbhahSsHrX97MzCL1gu2u7oy38W6L2ZIGECEfIBG4BabsWDPjBxJENv9Q==} + slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -4159,6 +4457,9 @@ packages: sponge-case@1.0.1: resolution: {integrity: sha512-dblb9Et4DAtiZ5YSUZHLl4XhH4uK80GhAZrVXdN4O2P4gQ40Wa5UIOPUHlA/nFd2PLblBZWUioLMMAVrgpoYcA==} + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + sshpk@1.18.0: resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} engines: {node: '>=0.10.0'} @@ -4182,6 +4483,14 @@ packages: string-template@1.0.0: resolution: {integrity: sha512-SLqR3GBUXuoPP5MmYtD7ompvXiG87QjT6lzOszyXjTM86Uu7At7vNnt2xgyTLq5o9T4IxTYFyGxcULqpsmsfdg==} + string-width@2.1.1: + resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} + engines: {node: '>=4'} + + string-width@3.1.0: + resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==} + engines: {node: '>=6'} + string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -4217,6 +4526,14 @@ packages: resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} engines: {node: '>= 0.4'} + strip-ansi@4.0.0: + resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} + engines: {node: '>=4'} + + strip-ansi@5.2.0: + resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} + engines: {node: '>=6'} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -4266,8 +4583,8 @@ packages: peerDependencies: stylelint: '>=16' - stylelint@17.6.0: - resolution: {integrity: sha512-tokrsMIVAR9vAQ/q3UVEr7S0dGXCi7zkCezPRnS2kqPUulvUh5Vgfwngrk4EoAoW7wnrThqTdnTFN5Ra7CaxIg==} + stylelint@17.9.0: + resolution: {integrity: sha512-xO0jeY6z1/urFL5L/BZLmB1yYlbRiRMQnYH6ArZIDWJ+SZXGssOY7XoYb1JIv/L220+EBnwwJXJS4Mt/F96SvA==} engines: {node: '>=20.19.0'} hasBin: true @@ -4275,6 +4592,10 @@ packages: resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} engines: {node: '>=18'} + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -4307,6 +4628,13 @@ packages: resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} engines: {node: '>=10.0.0'} + terminal-size@4.0.1: + resolution: {integrity: sha512-avMLDQpUI9I5XFrklECw1ZEUPJhqzcwSWsyyI8blhRLT+8N1jLJWLWWYQpB2q2xthq8xDvjZPISVh53T/+CLYQ==} + engines: {node: '>=18'} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + timeout-signal@2.0.0: resolution: {integrity: sha512-YBGpG4bWsHoPvofT6y/5iqulfXIiIErl5B0LdtHT1mGXDFTAhhRrbUpTvBgYbovr+3cKblya2WAOcpoy90XguA==} engines: {node: '>=16'} @@ -4314,13 +4642,17 @@ packages: tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + tinyglobby@0.2.16: + resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} engines: {node: '>=12.0.0'} title-case@3.0.3: resolution: {integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==} + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -4345,21 +4677,11 @@ packages: ts-log@2.2.7: resolution: {integrity: sha512-320x5Ggei84AxzlXp91QkIGSw5wgaLT6GeAH0KsqDmRZdVWW2OiSeVvElVoatk3f7nicwXlElXsoFkARiGE2yg==} - tsconfck@3.1.6: - resolution: {integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==} - engines: {node: ^18 || >=20} - hasBin: true - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - tslib@2.6.3: - resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -4394,8 +4716,8 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} - typescript-eslint@8.58.0: - resolution: {integrity: sha512-e2TQzKfaI85fO+F3QywtX+tCTsu/D3WW5LVU6nz8hTFKFZ8yBJ6mSYRpXqdR3mFjPWmO0eWsTa5f+UpAOe/FMA==} + typescript-eslint@8.59.0: + resolution: {integrity: sha512-BU3ONW9X+v90EcCH9ZS6LMackcVtxRLlI3XrYyqZIwVSHIk7Qf7bFw1z0M9Q0IUxhTMZCf8piY9hTYaNEIASrw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -4406,13 +4728,13 @@ packages: engines: {node: '>=4.2.0'} hasBin: true - typescript@6.0.2: - resolution: {integrity: sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==} + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} engines: {node: '>=14.17'} hasBin: true - unbash@2.2.0: - resolution: {integrity: sha512-X2wH19RAPZE3+ldGicOkoj/SIA83OIxcJ6Cuaw23hf8Xc6fQpvZXY0SftE2JgS0QhYLUG4uwodSI3R53keyh7w==} + unbash@3.0.0: + resolution: {integrity: sha512-FeFPZ/WFT0mbRCuydiZzpPFlrYN8ZUpphQKoq4EeElVIYjYyGzPMxQR/simUwCOJIyVhpFk4RbtyO7RuMpMnHA==} engines: {node: '>=14'} unbox-primitive@1.1.0: @@ -4423,6 +4745,12 @@ packages: resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==} engines: {node: '>=0.10.0'} + unconfig-core@7.5.0: + resolution: {integrity: sha512-Su3FauozOGP44ZmKdHy2oE6LPjk51M/TRRjHv2HNCWiDvfvCoxC2lno6jevMA91MYAdCdwP05QnWdWpSbncX/w==} + + unconfig@7.5.0: + resolution: {integrity: sha512-oi8Qy2JV4D3UQ0PsopR28CzdQ3S/5A1zwsUwp/rosSbfhJ5z7b90bIyTwi/F7hCLD4SGcZVjDzd4XoUQcEanvA==} + undici-types@7.16.0: resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} @@ -4462,8 +4790,8 @@ packages: urlpattern-polyfill@10.1.0: resolution: {integrity: sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==} - urql@5.0.1: - resolution: {integrity: sha512-r58gYlWvCTC19QvkTaARaCLV9/bp870byH/qbLaw3S7f8i/bC6x2Szub8RVXptiMxWmqq5dyVBjUL9G+xPEuqg==} + urql@5.0.2: + resolution: {integrity: sha512-hiBR9GNbMPMZpv9Yd40EMCc94d8eAkGcmt5jcrKVfp26ScjluAQLCEKetJ4SXLy5DJG59Y6gbuA+2yquzh20/w==} peerDependencies: '@urql/core': ^6.0.0 react: '>= 16.8.0' @@ -4542,13 +4870,8 @@ packages: peerDependencies: vite: '>=3.0.0' - vite-tsconfig-paths@6.1.1: - resolution: {integrity: sha512-2cihq7zliibCCZ8P9cKJrQBkfgdvcFkOOc3Y02o3GWUDLgqjWsZudaoiuOwO/gzTzy17cS5F7ZPo4bsnS4DGkg==} - peerDependencies: - vite: '*' - - vite@8.0.5: - resolution: {integrity: sha512-nmu43Qvq9UopTRfMx2jOYW5l16pb3iDC1JH6yMuPkpVbzK0k+L7dfsEDH4jRgYFmsg0sTAqkojoZgzLMlwHsCQ==} + vite@8.0.10: + resolution: {integrity: sha512-rZuUu9j6J5uotLDs+cAA4O5H4K1SfPliUlQwqa6YEwSrWDZzP4rhm00oJR5snMewjxF5V/K3D4kctsUTsIU9Mw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -4604,6 +4927,9 @@ packages: resolution: {integrity: sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A==} engines: {node: 20 || >=22} + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + web-streams-polyfill@3.3.3: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} @@ -4637,6 +4963,9 @@ packages: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} engines: {node: '>= 0.4'} + which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + which-typed-array@1.1.20: resolution: {integrity: sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==} engines: {node: '>= 0.4'} @@ -4657,6 +4986,14 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} + wrap-ansi@10.0.0: + resolution: {integrity: sha512-SGcvg80f0wUy2/fXES19feHMz8E0JoXv2uNgHOu4Dgi2OrCy1lqwFYEJz1BLbDI0exjPMe/ZdzZ/YpGECBG/aQ==} + engines: {node: '>=20'} + + wrap-ansi@5.1.0: + resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==} + engines: {node: '>=6'} + wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} @@ -4669,10 +5006,21 @@ packages: resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} engines: {node: '>=18'} + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + write-file-atomic@7.0.1: resolution: {integrity: sha512-OTIk8iR8/aCRWBqvxrzxR0hgxWpnYBblY1S5hDWBQfk/VFmJwzmJgQFN3WsoUKHISv2eAwe+PpbUzyL1CKTLXg==} engines: {node: ^20.17.0 || >=22.9.0} + write-yaml@1.0.0: + resolution: {integrity: sha512-QFB0QwNlUTSsICNb1HV+822MvFpTC1gtKcOfm0B9oqz4qOQXbRuMSxWPWryTEFBEZDWbI5zXabXArvShXTdLiA==} + engines: {node: '>=0.10.0'} + + write@0.3.3: + resolution: {integrity: sha512-e63bsTAFxFUU8OGClhjhhf2R72Njpq6DDTOFFBxDkfZFwoRRKZUx9rll6g/TvY0UcCdKE2OroYZje0v9ROzmfA==} + engines: {node: '>=0.10.0'} + ws@7.5.10: resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} engines: {node: '>=8.3.0'} @@ -4703,6 +5051,9 @@ packages: xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -4715,10 +5066,16 @@ packages: engines: {node: '>= 14.6'} hasBin: true + yargs-parser@13.1.2: + resolution: {integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==} + yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} + yargs@13.3.2: + resolution: {integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==} + yargs@17.7.2: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} @@ -4878,6 +5235,9 @@ snapshots: hashery: 1.5.1 keyv: 5.6.0 + '@colors/colors@1.5.0': + optional: true + '@csstools/cascade-layer-name-parser@3.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) @@ -4885,15 +5245,15 @@ snapshots: '@csstools/color-helpers@6.0.2': {} - '@csstools/css-calc@3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + '@csstools/css-calc@3.2.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-color-parser@4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + '@csstools/css-color-parser@4.1.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: '@csstools/color-helpers': 6.0.2 - '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-calc': 3.2.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 @@ -4901,7 +5261,7 @@ snapshots: dependencies: '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.1.2(css-tree@3.2.1)': + '@csstools/css-syntax-patches-for-csstree@1.1.3(css-tree@3.2.1)': optionalDependencies: css-tree: 3.2.1 @@ -4914,283 +5274,283 @@ snapshots: '@csstools/normalize.css@12.1.1': {} - '@csstools/postcss-alpha-function@2.0.3(postcss@8.5.9)': + '@csstools/postcss-alpha-function@2.0.4(postcss@8.5.10)': dependencies: - '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.1.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.9) - '@csstools/utilities': 3.0.0(postcss@8.5.9) - postcss: 8.5.9 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.10) + '@csstools/utilities': 3.0.0(postcss@8.5.10) + postcss: 8.5.10 - '@csstools/postcss-cascade-layers@6.0.0(postcss@8.5.9)': + '@csstools/postcss-cascade-layers@6.0.0(postcss@8.5.10)': dependencies: '@csstools/selector-specificity': 6.0.0(postcss-selector-parser@7.1.1) - postcss: 8.5.9 + postcss: 8.5.10 postcss-selector-parser: 7.1.1 - '@csstools/postcss-color-function-display-p3-linear@2.0.2(postcss@8.5.9)': + '@csstools/postcss-color-function-display-p3-linear@2.0.3(postcss@8.5.10)': dependencies: - '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.1.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.9) - '@csstools/utilities': 3.0.0(postcss@8.5.9) - postcss: 8.5.9 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.10) + '@csstools/utilities': 3.0.0(postcss@8.5.10) + postcss: 8.5.10 - '@csstools/postcss-color-function@5.0.2(postcss@8.5.9)': + '@csstools/postcss-color-function@5.0.3(postcss@8.5.10)': dependencies: - '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.1.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.9) - '@csstools/utilities': 3.0.0(postcss@8.5.9) - postcss: 8.5.9 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.10) + '@csstools/utilities': 3.0.0(postcss@8.5.10) + postcss: 8.5.10 - '@csstools/postcss-color-mix-function@4.0.2(postcss@8.5.9)': + '@csstools/postcss-color-mix-function@4.0.3(postcss@8.5.10)': dependencies: - '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.1.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.9) - '@csstools/utilities': 3.0.0(postcss@8.5.9) - postcss: 8.5.9 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.10) + '@csstools/utilities': 3.0.0(postcss@8.5.10) + postcss: 8.5.10 - '@csstools/postcss-color-mix-variadic-function-arguments@2.0.2(postcss@8.5.9)': + '@csstools/postcss-color-mix-variadic-function-arguments@2.0.3(postcss@8.5.10)': dependencies: - '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.1.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.9) - '@csstools/utilities': 3.0.0(postcss@8.5.9) - postcss: 8.5.9 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.10) + '@csstools/utilities': 3.0.0(postcss@8.5.10) + postcss: 8.5.10 - '@csstools/postcss-content-alt-text@3.0.0(postcss@8.5.9)': + '@csstools/postcss-content-alt-text@3.0.0(postcss@8.5.10)': dependencies: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.9) - '@csstools/utilities': 3.0.0(postcss@8.5.9) - postcss: 8.5.9 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.10) + '@csstools/utilities': 3.0.0(postcss@8.5.10) + postcss: 8.5.10 - '@csstools/postcss-contrast-color-function@3.0.2(postcss@8.5.9)': + '@csstools/postcss-contrast-color-function@3.0.3(postcss@8.5.10)': dependencies: - '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.1.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.9) - '@csstools/utilities': 3.0.0(postcss@8.5.9) - postcss: 8.5.9 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.10) + '@csstools/utilities': 3.0.0(postcss@8.5.10) + postcss: 8.5.10 - '@csstools/postcss-exponential-functions@3.0.1(postcss@8.5.9)': + '@csstools/postcss-exponential-functions@3.0.2(postcss@8.5.10)': dependencies: - '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-calc': 3.2.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.9 + postcss: 8.5.10 - '@csstools/postcss-font-format-keywords@5.0.0(postcss@8.5.9)': + '@csstools/postcss-font-format-keywords@5.0.0(postcss@8.5.10)': dependencies: - '@csstools/utilities': 3.0.0(postcss@8.5.9) - postcss: 8.5.9 + '@csstools/utilities': 3.0.0(postcss@8.5.10) + postcss: 8.5.10 postcss-value-parser: 4.2.0 - '@csstools/postcss-font-width-property@1.0.0(postcss@8.5.9)': + '@csstools/postcss-font-width-property@1.0.0(postcss@8.5.10)': dependencies: - '@csstools/utilities': 3.0.0(postcss@8.5.9) - postcss: 8.5.9 + '@csstools/utilities': 3.0.0(postcss@8.5.10) + postcss: 8.5.10 - '@csstools/postcss-gamut-mapping@3.0.2(postcss@8.5.9)': + '@csstools/postcss-gamut-mapping@3.0.3(postcss@8.5.10)': dependencies: - '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.1.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.9 + postcss: 8.5.10 - '@csstools/postcss-gradients-interpolation-method@6.0.2(postcss@8.5.9)': + '@csstools/postcss-gradients-interpolation-method@6.0.3(postcss@8.5.10)': dependencies: - '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.1.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.9) - '@csstools/utilities': 3.0.0(postcss@8.5.9) - postcss: 8.5.9 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.10) + '@csstools/utilities': 3.0.0(postcss@8.5.10) + postcss: 8.5.10 - '@csstools/postcss-hwb-function@5.0.2(postcss@8.5.9)': + '@csstools/postcss-hwb-function@5.0.3(postcss@8.5.10)': dependencies: - '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.1.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.9) - '@csstools/utilities': 3.0.0(postcss@8.5.9) - postcss: 8.5.9 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.10) + '@csstools/utilities': 3.0.0(postcss@8.5.10) + postcss: 8.5.10 - '@csstools/postcss-ic-unit@5.0.0(postcss@8.5.9)': + '@csstools/postcss-ic-unit@5.0.0(postcss@8.5.10)': dependencies: - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.9) - '@csstools/utilities': 3.0.0(postcss@8.5.9) - postcss: 8.5.9 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.10) + '@csstools/utilities': 3.0.0(postcss@8.5.10) + postcss: 8.5.10 postcss-value-parser: 4.2.0 - '@csstools/postcss-initial@3.0.0(postcss@8.5.9)': + '@csstools/postcss-initial@3.0.0(postcss@8.5.10)': dependencies: - postcss: 8.5.9 + postcss: 8.5.10 - '@csstools/postcss-is-pseudo-class@6.0.0(postcss@8.5.9)': + '@csstools/postcss-is-pseudo-class@6.0.0(postcss@8.5.10)': dependencies: '@csstools/selector-specificity': 6.0.0(postcss-selector-parser@7.1.1) - postcss: 8.5.9 + postcss: 8.5.10 postcss-selector-parser: 7.1.1 - '@csstools/postcss-light-dark-function@3.0.0(postcss@8.5.9)': + '@csstools/postcss-light-dark-function@3.0.0(postcss@8.5.10)': dependencies: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.9) - '@csstools/utilities': 3.0.0(postcss@8.5.9) - postcss: 8.5.9 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.10) + '@csstools/utilities': 3.0.0(postcss@8.5.10) + postcss: 8.5.10 - '@csstools/postcss-logical-float-and-clear@4.0.0(postcss@8.5.9)': + '@csstools/postcss-logical-float-and-clear@4.0.0(postcss@8.5.10)': dependencies: - postcss: 8.5.9 + postcss: 8.5.10 - '@csstools/postcss-logical-overflow@3.0.0(postcss@8.5.9)': + '@csstools/postcss-logical-overflow@3.0.0(postcss@8.5.10)': dependencies: - postcss: 8.5.9 + postcss: 8.5.10 - '@csstools/postcss-logical-overscroll-behavior@3.0.0(postcss@8.5.9)': + '@csstools/postcss-logical-overscroll-behavior@3.0.0(postcss@8.5.10)': dependencies: - postcss: 8.5.9 + postcss: 8.5.10 - '@csstools/postcss-logical-resize@4.0.0(postcss@8.5.9)': + '@csstools/postcss-logical-resize@4.0.0(postcss@8.5.10)': dependencies: - postcss: 8.5.9 + postcss: 8.5.10 postcss-value-parser: 4.2.0 - '@csstools/postcss-logical-viewport-units@4.0.0(postcss@8.5.9)': + '@csstools/postcss-logical-viewport-units@4.0.0(postcss@8.5.10)': dependencies: '@csstools/css-tokenizer': 4.0.0 - '@csstools/utilities': 3.0.0(postcss@8.5.9) - postcss: 8.5.9 + '@csstools/utilities': 3.0.0(postcss@8.5.10) + postcss: 8.5.10 - '@csstools/postcss-media-minmax@3.0.1(postcss@8.5.9)': + '@csstools/postcss-media-minmax@3.0.2(postcss@8.5.10)': dependencies: - '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-calc': 3.2.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 '@csstools/media-query-list-parser': 5.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - postcss: 8.5.9 + postcss: 8.5.10 - '@csstools/postcss-media-queries-aspect-ratio-number-values@4.0.0(postcss@8.5.9)': + '@csstools/postcss-media-queries-aspect-ratio-number-values@4.0.0(postcss@8.5.10)': dependencies: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 '@csstools/media-query-list-parser': 5.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - postcss: 8.5.9 + postcss: 8.5.10 - '@csstools/postcss-mixins@1.0.0(postcss@8.5.9)': + '@csstools/postcss-mixins@1.0.0(postcss@8.5.10)': dependencies: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.9 + postcss: 8.5.10 - '@csstools/postcss-nested-calc@5.0.0(postcss@8.5.9)': + '@csstools/postcss-nested-calc@5.0.0(postcss@8.5.10)': dependencies: - '@csstools/utilities': 3.0.0(postcss@8.5.9) - postcss: 8.5.9 + '@csstools/utilities': 3.0.0(postcss@8.5.10) + postcss: 8.5.10 postcss-value-parser: 4.2.0 - '@csstools/postcss-normalize-display-values@5.0.1(postcss@8.5.9)': + '@csstools/postcss-normalize-display-values@5.0.1(postcss@8.5.10)': dependencies: - postcss: 8.5.9 + postcss: 8.5.10 postcss-value-parser: 4.2.0 - '@csstools/postcss-oklab-function@5.0.2(postcss@8.5.9)': + '@csstools/postcss-oklab-function@5.0.3(postcss@8.5.10)': dependencies: - '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.1.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.9) - '@csstools/utilities': 3.0.0(postcss@8.5.9) - postcss: 8.5.9 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.10) + '@csstools/utilities': 3.0.0(postcss@8.5.10) + postcss: 8.5.10 - '@csstools/postcss-position-area-property@2.0.0(postcss@8.5.9)': + '@csstools/postcss-position-area-property@2.0.0(postcss@8.5.10)': dependencies: - postcss: 8.5.9 + postcss: 8.5.10 - '@csstools/postcss-progressive-custom-properties@5.0.0(postcss@8.5.9)': + '@csstools/postcss-progressive-custom-properties@5.0.0(postcss@8.5.10)': dependencies: - postcss: 8.5.9 + postcss: 8.5.10 postcss-value-parser: 4.2.0 - '@csstools/postcss-property-rule-prelude-list@2.0.0(postcss@8.5.9)': + '@csstools/postcss-property-rule-prelude-list@2.0.0(postcss@8.5.10)': dependencies: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.9 + postcss: 8.5.10 - '@csstools/postcss-random-function@3.0.1(postcss@8.5.9)': + '@csstools/postcss-random-function@3.0.2(postcss@8.5.10)': dependencies: - '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-calc': 3.2.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.9 + postcss: 8.5.10 - '@csstools/postcss-relative-color-syntax@4.0.2(postcss@8.5.9)': + '@csstools/postcss-relative-color-syntax@4.0.3(postcss@8.5.10)': dependencies: - '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.1.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.9) - '@csstools/utilities': 3.0.0(postcss@8.5.9) - postcss: 8.5.9 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.10) + '@csstools/utilities': 3.0.0(postcss@8.5.10) + postcss: 8.5.10 - '@csstools/postcss-scope-pseudo-class@5.0.0(postcss@8.5.9)': + '@csstools/postcss-scope-pseudo-class@5.0.0(postcss@8.5.10)': dependencies: - postcss: 8.5.9 + postcss: 8.5.10 postcss-selector-parser: 7.1.1 - '@csstools/postcss-sign-functions@2.0.1(postcss@8.5.9)': + '@csstools/postcss-sign-functions@2.0.2(postcss@8.5.10)': dependencies: - '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-calc': 3.2.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.9 + postcss: 8.5.10 - '@csstools/postcss-stepped-value-functions@5.0.1(postcss@8.5.9)': + '@csstools/postcss-stepped-value-functions@5.0.2(postcss@8.5.10)': dependencies: - '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-calc': 3.2.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.9 + postcss: 8.5.10 - '@csstools/postcss-syntax-descriptor-syntax-production@2.0.0(postcss@8.5.9)': + '@csstools/postcss-syntax-descriptor-syntax-production@2.0.0(postcss@8.5.10)': dependencies: '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.9 + postcss: 8.5.10 - '@csstools/postcss-system-ui-font-family@2.0.0(postcss@8.5.9)': + '@csstools/postcss-system-ui-font-family@2.0.0(postcss@8.5.10)': dependencies: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.9 + postcss: 8.5.10 - '@csstools/postcss-text-decoration-shorthand@5.0.3(postcss@8.5.9)': + '@csstools/postcss-text-decoration-shorthand@5.0.3(postcss@8.5.10)': dependencies: '@csstools/color-helpers': 6.0.2 - postcss: 8.5.9 + postcss: 8.5.10 postcss-value-parser: 4.2.0 - '@csstools/postcss-trigonometric-functions@5.0.1(postcss@8.5.9)': + '@csstools/postcss-trigonometric-functions@5.0.2(postcss@8.5.10)': dependencies: - '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-calc': 3.2.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.9 + postcss: 8.5.10 - '@csstools/postcss-unset-value@5.0.0(postcss@8.5.9)': + '@csstools/postcss-unset-value@5.0.0(postcss@8.5.10)': dependencies: - postcss: 8.5.9 + postcss: 8.5.10 '@csstools/selector-resolve-nested@4.0.0(postcss-selector-parser@7.1.1)': dependencies: @@ -5200,9 +5560,15 @@ snapshots: dependencies: postcss-selector-parser: 7.1.1 - '@csstools/utilities@3.0.0(postcss@8.5.9)': + '@csstools/utilities@3.0.0(postcss@8.5.10)': dependencies: - postcss: 8.5.9 + postcss: 8.5.10 + + '@emnapi/core@1.10.0': + dependencies: + '@emnapi/wasi-threads': 1.2.1 + tslib: 2.8.1 + optional: true '@emnapi/core@1.9.2': dependencies: @@ -5210,6 +5576,11 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/runtime@1.10.0': + dependencies: + tslib: 2.8.1 + optional: true + '@emnapi/runtime@1.9.2': dependencies: tslib: 2.8.1 @@ -5266,7 +5637,7 @@ snapshots: '@eslint/eslintrc@3.3.5': dependencies: - ajv: 6.14.0 + ajv: 6.15.0 debug: 4.4.3 espree: 10.4.0 globals: 14.0.0 @@ -5301,38 +5672,38 @@ snapshots: '@fastify/busboy@3.2.0': {} - '@graphql-codegen/add@6.0.0(graphql@16.13.2)': + '@graphql-codegen/add@6.0.1(graphql@16.13.2)': dependencies: - '@graphql-codegen/plugin-helpers': 6.2.1(graphql@16.13.2) + '@graphql-codegen/plugin-helpers': 6.3.0(graphql@16.13.2) graphql: 16.13.2 - tslib: 2.6.3 + tslib: 2.8.1 - '@graphql-codegen/cli@6.2.1(@types/node@24.12.2)(graphql@16.13.2)(typescript@6.0.2)': + '@graphql-codegen/cli@6.3.1(@types/node@24.12.2)(graphql@16.13.2)(typescript@6.0.3)': dependencies: '@babel/generator': 7.29.1 '@babel/template': 7.28.6 '@babel/types': 7.29.0 - '@graphql-codegen/client-preset': 5.2.4(graphql@16.13.2) - '@graphql-codegen/core': 5.0.1(graphql@16.13.2) - '@graphql-codegen/plugin-helpers': 6.2.1(graphql@16.13.2) - '@graphql-tools/apollo-engine-loader': 8.0.28(graphql@16.13.2) - '@graphql-tools/code-file-loader': 8.1.30(graphql@16.13.2) - '@graphql-tools/git-loader': 8.0.34(graphql@16.13.2) - '@graphql-tools/github-loader': 9.1.0(@types/node@24.12.2)(graphql@16.13.2) - '@graphql-tools/graphql-file-loader': 8.1.12(graphql@16.13.2) - '@graphql-tools/json-file-loader': 8.0.26(graphql@16.13.2) - '@graphql-tools/load': 8.1.8(graphql@16.13.2) - '@graphql-tools/merge': 9.1.7(graphql@16.13.2) - '@graphql-tools/url-loader': 9.1.0(@types/node@24.12.2)(graphql@16.13.2) - '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + '@graphql-codegen/client-preset': 5.3.0(graphql@16.13.2) + '@graphql-codegen/core': 5.0.2(graphql@16.13.2) + '@graphql-codegen/plugin-helpers': 6.3.0(graphql@16.13.2) + '@graphql-tools/apollo-engine-loader': 8.0.30(graphql@16.13.2) + '@graphql-tools/code-file-loader': 8.1.32(graphql@16.13.2) + '@graphql-tools/git-loader': 8.0.36(graphql@16.13.2) + '@graphql-tools/github-loader': 9.1.2(@types/node@24.12.2)(graphql@16.13.2) + '@graphql-tools/graphql-file-loader': 8.1.14(graphql@16.13.2) + '@graphql-tools/json-file-loader': 8.0.28(graphql@16.13.2) + '@graphql-tools/load': 8.1.10(graphql@16.13.2) + '@graphql-tools/merge': 9.1.9(graphql@16.13.2) + '@graphql-tools/url-loader': 9.1.2(@types/node@24.12.2)(graphql@16.13.2) + '@graphql-tools/utils': 11.1.0(graphql@16.13.2) '@inquirer/prompts': 7.10.1(@types/node@24.12.2) '@whatwg-node/fetch': 0.10.13 chalk: 4.1.2 - cosmiconfig: 9.0.1(typescript@6.0.2) + cosmiconfig: 9.0.1(typescript@6.0.3) debounce: 2.2.0 detect-indent: 6.1.0 graphql: 16.13.2 - graphql-config: 5.1.6(@types/node@24.12.2)(graphql@16.13.2)(typescript@6.0.2) + graphql-config: 5.1.6(@types/node@24.12.2)(graphql@16.13.2)(typescript@6.0.3) is-glob: 4.0.3 jiti: 2.6.1 json-to-pretty-yaml: 1.2.2 @@ -5356,118 +5727,118 @@ snapshots: - typescript - utf-8-validate - '@graphql-codegen/client-preset@5.2.4(graphql@16.13.2)': + '@graphql-codegen/client-preset@5.3.0(graphql@16.13.2)': dependencies: '@babel/helper-plugin-utils': 7.28.6 '@babel/template': 7.28.6 - '@graphql-codegen/add': 6.0.0(graphql@16.13.2) - '@graphql-codegen/gql-tag-operations': 5.1.4(graphql@16.13.2) - '@graphql-codegen/plugin-helpers': 6.2.1(graphql@16.13.2) - '@graphql-codegen/typed-document-node': 6.1.7(graphql@16.13.2) - '@graphql-codegen/typescript': 5.0.9(graphql@16.13.2) - '@graphql-codegen/typescript-operations': 5.0.9(graphql@16.13.2) - '@graphql-codegen/visitor-plugin-common': 6.2.4(graphql@16.13.2) + '@graphql-codegen/add': 6.0.1(graphql@16.13.2) + '@graphql-codegen/gql-tag-operations': 5.2.0(graphql@16.13.2) + '@graphql-codegen/plugin-helpers': 6.3.0(graphql@16.13.2) + '@graphql-codegen/typed-document-node': 6.1.8(graphql@16.13.2) + '@graphql-codegen/typescript': 5.0.10(graphql@16.13.2) + '@graphql-codegen/typescript-operations': 5.1.0(graphql@16.13.2) + '@graphql-codegen/visitor-plugin-common': 6.3.0(graphql@16.13.2) '@graphql-tools/documents': 1.0.1(graphql@16.13.2) - '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + '@graphql-tools/utils': 11.1.0(graphql@16.13.2) '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.2) graphql: 16.13.2 - tslib: 2.6.3 + tslib: 2.8.1 - '@graphql-codegen/core@5.0.1(graphql@16.13.2)': + '@graphql-codegen/core@5.0.2(graphql@16.13.2)': dependencies: - '@graphql-codegen/plugin-helpers': 6.2.1(graphql@16.13.2) - '@graphql-tools/schema': 10.0.31(graphql@16.13.2) - '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + '@graphql-codegen/plugin-helpers': 6.3.0(graphql@16.13.2) + '@graphql-tools/schema': 10.0.33(graphql@16.13.2) + '@graphql-tools/utils': 11.1.0(graphql@16.13.2) graphql: 16.13.2 - tslib: 2.6.3 + tslib: 2.8.1 - '@graphql-codegen/gql-tag-operations@5.1.4(graphql@16.13.2)': + '@graphql-codegen/gql-tag-operations@5.2.0(graphql@16.13.2)': dependencies: - '@graphql-codegen/plugin-helpers': 6.2.1(graphql@16.13.2) - '@graphql-codegen/visitor-plugin-common': 6.2.4(graphql@16.13.2) - '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + '@graphql-codegen/plugin-helpers': 6.3.0(graphql@16.13.2) + '@graphql-codegen/visitor-plugin-common': 6.3.0(graphql@16.13.2) + '@graphql-tools/utils': 11.1.0(graphql@16.13.2) auto-bind: 4.0.0 graphql: 16.13.2 - tslib: 2.6.3 + tslib: 2.8.1 - '@graphql-codegen/introspection@5.0.1(graphql@16.13.2)': + '@graphql-codegen/introspection@5.0.2(graphql@16.13.2)': dependencies: - '@graphql-codegen/plugin-helpers': 6.2.1(graphql@16.13.2) - '@graphql-codegen/visitor-plugin-common': 6.2.4(graphql@16.13.2) + '@graphql-codegen/plugin-helpers': 6.3.0(graphql@16.13.2) + '@graphql-codegen/visitor-plugin-common': 6.3.0(graphql@16.13.2) graphql: 16.13.2 - tslib: 2.6.3 + tslib: 2.8.1 - '@graphql-codegen/plugin-helpers@6.2.1(graphql@16.13.2)': + '@graphql-codegen/plugin-helpers@6.3.0(graphql@16.13.2)': dependencies: - '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + '@graphql-tools/utils': 11.1.0(graphql@16.13.2) change-case-all: 1.0.15 common-tags: 1.8.2 graphql: 16.13.2 import-from: 4.0.0 - tslib: 2.6.3 + tslib: 2.8.1 - '@graphql-codegen/schema-ast@5.0.1(graphql@16.13.2)': + '@graphql-codegen/schema-ast@5.0.2(graphql@16.13.2)': dependencies: - '@graphql-codegen/plugin-helpers': 6.2.1(graphql@16.13.2) - '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + '@graphql-codegen/plugin-helpers': 6.3.0(graphql@16.13.2) + '@graphql-tools/utils': 11.1.0(graphql@16.13.2) graphql: 16.13.2 - tslib: 2.6.3 + tslib: 2.8.1 - '@graphql-codegen/typed-document-node@6.1.7(graphql@16.13.2)': + '@graphql-codegen/typed-document-node@6.1.8(graphql@16.13.2)': dependencies: - '@graphql-codegen/plugin-helpers': 6.2.1(graphql@16.13.2) - '@graphql-codegen/visitor-plugin-common': 6.2.4(graphql@16.13.2) + '@graphql-codegen/plugin-helpers': 6.3.0(graphql@16.13.2) + '@graphql-codegen/visitor-plugin-common': 6.3.0(graphql@16.13.2) auto-bind: 4.0.0 change-case-all: 1.0.15 graphql: 16.13.2 - tslib: 2.6.3 + tslib: 2.8.1 - '@graphql-codegen/typescript-operations@5.0.9(graphql@16.13.2)': + '@graphql-codegen/typescript-operations@5.1.0(graphql@16.13.2)': dependencies: - '@graphql-codegen/plugin-helpers': 6.2.1(graphql@16.13.2) - '@graphql-codegen/typescript': 5.0.9(graphql@16.13.2) - '@graphql-codegen/visitor-plugin-common': 6.2.4(graphql@16.13.2) + '@graphql-codegen/plugin-helpers': 6.3.0(graphql@16.13.2) + '@graphql-codegen/typescript': 5.0.10(graphql@16.13.2) + '@graphql-codegen/visitor-plugin-common': 6.3.0(graphql@16.13.2) auto-bind: 4.0.0 graphql: 16.13.2 - tslib: 2.6.3 + tslib: 2.8.1 - '@graphql-codegen/typescript-urql@5.0.0(graphql-tag@2.12.6(graphql@16.13.2))(graphql@16.13.2)': + '@graphql-codegen/typescript-urql@5.0.1(graphql-tag@2.12.6(graphql@16.13.2))(graphql@16.13.2)': dependencies: - '@graphql-codegen/plugin-helpers': 6.2.1(graphql@16.13.2) - '@graphql-codegen/visitor-plugin-common': 6.2.4(graphql@16.13.2) + '@graphql-codegen/plugin-helpers': 6.3.0(graphql@16.13.2) + '@graphql-codegen/visitor-plugin-common': 6.3.0(graphql@16.13.2) auto-bind: 4.0.0 graphql: 16.13.2 graphql-tag: 2.12.6(graphql@16.13.2) tslib: 2.8.1 - '@graphql-codegen/typescript@5.0.9(graphql@16.13.2)': + '@graphql-codegen/typescript@5.0.10(graphql@16.13.2)': dependencies: - '@graphql-codegen/plugin-helpers': 6.2.1(graphql@16.13.2) - '@graphql-codegen/schema-ast': 5.0.1(graphql@16.13.2) - '@graphql-codegen/visitor-plugin-common': 6.2.4(graphql@16.13.2) + '@graphql-codegen/plugin-helpers': 6.3.0(graphql@16.13.2) + '@graphql-codegen/schema-ast': 5.0.2(graphql@16.13.2) + '@graphql-codegen/visitor-plugin-common': 6.3.0(graphql@16.13.2) auto-bind: 4.0.0 graphql: 16.13.2 - tslib: 2.6.3 + tslib: 2.8.1 - '@graphql-codegen/visitor-plugin-common@6.2.4(graphql@16.13.2)': + '@graphql-codegen/visitor-plugin-common@6.3.0(graphql@16.13.2)': dependencies: - '@graphql-codegen/plugin-helpers': 6.2.1(graphql@16.13.2) + '@graphql-codegen/plugin-helpers': 6.3.0(graphql@16.13.2) '@graphql-tools/optimize': 2.0.0(graphql@16.13.2) - '@graphql-tools/relay-operation-optimizer': 7.1.2(graphql@16.13.2) - '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + '@graphql-tools/relay-operation-optimizer': 7.1.4(graphql@16.13.2) + '@graphql-tools/utils': 11.1.0(graphql@16.13.2) auto-bind: 4.0.0 change-case-all: 1.0.15 dependency-graph: 1.0.0 graphql: 16.13.2 graphql-tag: 2.12.6(graphql@16.13.2) parse-filepath: 1.0.2 - tslib: 2.6.3 + tslib: 2.8.1 '@graphql-hive/signal@2.0.0': {} - '@graphql-tools/apollo-engine-loader@8.0.28(graphql@16.13.2)': + '@graphql-tools/apollo-engine-loader@8.0.30(graphql@16.13.2)': dependencies: - '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + '@graphql-tools/utils': 11.1.0(graphql@16.13.2) '@whatwg-node/fetch': 0.10.13 graphql: 16.13.2 sync-fetch: 0.6.0 @@ -5475,16 +5846,16 @@ snapshots: '@graphql-tools/batch-execute@10.0.8(graphql@16.13.2)': dependencies: - '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + '@graphql-tools/utils': 11.1.0(graphql@16.13.2) '@whatwg-node/promise-helpers': 1.3.2 dataloader: 2.2.3 graphql: 16.13.2 tslib: 2.8.1 - '@graphql-tools/code-file-loader@8.1.30(graphql@16.13.2)': + '@graphql-tools/code-file-loader@8.1.32(graphql@16.13.2)': dependencies: - '@graphql-tools/graphql-tag-pluck': 8.3.29(graphql@16.13.2) - '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + '@graphql-tools/graphql-tag-pluck': 8.3.31(graphql@16.13.2) + '@graphql-tools/utils': 11.1.0(graphql@16.13.2) globby: 11.1.0 graphql: 16.13.2 tslib: 2.8.1 @@ -5492,12 +5863,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@graphql-tools/delegate@12.0.13(graphql@16.13.2)': + '@graphql-tools/delegate@12.0.14(graphql@16.13.2)': dependencies: '@graphql-tools/batch-execute': 10.0.8(graphql@16.13.2) - '@graphql-tools/executor': 1.5.1(graphql@16.13.2) - '@graphql-tools/schema': 10.0.31(graphql@16.13.2) - '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + '@graphql-tools/executor': 1.5.3(graphql@16.13.2) + '@graphql-tools/schema': 10.0.33(graphql@16.13.2) + '@graphql-tools/utils': 11.1.0(graphql@16.13.2) '@repeaterjs/repeater': 3.0.6 '@whatwg-node/promise-helpers': 1.3.2 dataloader: 2.2.3 @@ -5513,13 +5884,13 @@ snapshots: '@graphql-tools/executor-common@1.0.6(graphql@16.13.2)': dependencies: '@envelop/core': 5.5.1 - '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + '@graphql-tools/utils': 11.1.0(graphql@16.13.2) graphql: 16.13.2 '@graphql-tools/executor-graphql-ws@3.1.5(graphql@16.13.2)': dependencies: '@graphql-tools/executor-common': 1.0.6(graphql@16.13.2) - '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + '@graphql-tools/utils': 11.1.0(graphql@16.13.2) '@whatwg-node/disposablestack': 0.0.6 graphql: 16.13.2 graphql-ws: 6.0.8(graphql@16.13.2)(ws@8.20.0) @@ -5536,7 +5907,7 @@ snapshots: dependencies: '@graphql-hive/signal': 2.0.0 '@graphql-tools/executor-common': 1.0.6(graphql@16.13.2) - '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + '@graphql-tools/utils': 11.1.0(graphql@16.13.2) '@repeaterjs/repeater': 3.0.6 '@whatwg-node/disposablestack': 0.0.6 '@whatwg-node/fetch': 0.10.13 @@ -5547,9 +5918,9 @@ snapshots: transitivePeerDependencies: - '@types/node' - '@graphql-tools/executor-legacy-ws@1.1.26(graphql@16.13.2)': + '@graphql-tools/executor-legacy-ws@1.1.28(graphql@16.13.2)': dependencies: - '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + '@graphql-tools/utils': 11.1.0(graphql@16.13.2) '@types/ws': 8.18.1 graphql: 16.13.2 isomorphic-ws: 5.0.0(ws@8.20.0) @@ -5559,9 +5930,9 @@ snapshots: - bufferutil - utf-8-validate - '@graphql-tools/executor@1.5.1(graphql@16.13.2)': + '@graphql-tools/executor@1.5.3(graphql@16.13.2)': dependencies: - '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + '@graphql-tools/utils': 11.1.0(graphql@16.13.2) '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.2) '@repeaterjs/repeater': 3.0.6 '@whatwg-node/disposablestack': 0.0.6 @@ -5569,10 +5940,10 @@ snapshots: graphql: 16.13.2 tslib: 2.8.1 - '@graphql-tools/git-loader@8.0.34(graphql@16.13.2)': + '@graphql-tools/git-loader@8.0.36(graphql@16.13.2)': dependencies: - '@graphql-tools/graphql-tag-pluck': 8.3.29(graphql@16.13.2) - '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + '@graphql-tools/graphql-tag-pluck': 8.3.31(graphql@16.13.2) + '@graphql-tools/utils': 11.1.0(graphql@16.13.2) graphql: 16.13.2 is-glob: 4.0.3 micromatch: 4.0.8 @@ -5581,11 +5952,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@graphql-tools/github-loader@9.1.0(@types/node@24.12.2)(graphql@16.13.2)': + '@graphql-tools/github-loader@9.1.2(@types/node@24.12.2)(graphql@16.13.2)': dependencies: '@graphql-tools/executor-http': 3.2.1(@types/node@24.12.2)(graphql@16.13.2) - '@graphql-tools/graphql-tag-pluck': 8.3.29(graphql@16.13.2) - '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + '@graphql-tools/graphql-tag-pluck': 8.3.31(graphql@16.13.2) + '@graphql-tools/utils': 11.1.0(graphql@16.13.2) '@whatwg-node/fetch': 0.10.13 '@whatwg-node/promise-helpers': 1.3.2 graphql: 16.13.2 @@ -5595,54 +5966,54 @@ snapshots: - '@types/node' - supports-color - '@graphql-tools/graphql-file-loader@8.1.12(graphql@16.13.2)': + '@graphql-tools/graphql-file-loader@8.1.14(graphql@16.13.2)': dependencies: - '@graphql-tools/import': 7.1.12(graphql@16.13.2) - '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + '@graphql-tools/import': 7.1.14(graphql@16.13.2) + '@graphql-tools/utils': 11.1.0(graphql@16.13.2) globby: 11.1.0 graphql: 16.13.2 tslib: 2.8.1 unixify: 1.0.0 - '@graphql-tools/graphql-tag-pluck@8.3.29(graphql@16.13.2)': + '@graphql-tools/graphql-tag-pluck@8.3.31(graphql@16.13.2)': dependencies: '@babel/core': 7.29.0 '@babel/parser': 7.29.2 '@babel/plugin-syntax-import-assertions': 7.28.6(@babel/core@7.29.0) '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 - '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + '@graphql-tools/utils': 11.1.0(graphql@16.13.2) graphql: 16.13.2 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@graphql-tools/import@7.1.12(graphql@16.13.2)': + '@graphql-tools/import@7.1.14(graphql@16.13.2)': dependencies: - '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + '@graphql-tools/utils': 11.1.0(graphql@16.13.2) graphql: 16.13.2 resolve-from: 5.0.0 tslib: 2.8.1 - '@graphql-tools/json-file-loader@8.0.26(graphql@16.13.2)': + '@graphql-tools/json-file-loader@8.0.28(graphql@16.13.2)': dependencies: - '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + '@graphql-tools/utils': 11.1.0(graphql@16.13.2) globby: 11.1.0 graphql: 16.13.2 tslib: 2.8.1 unixify: 1.0.0 - '@graphql-tools/load@8.1.8(graphql@16.13.2)': + '@graphql-tools/load@8.1.10(graphql@16.13.2)': dependencies: - '@graphql-tools/schema': 10.0.31(graphql@16.13.2) - '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + '@graphql-tools/schema': 10.0.33(graphql@16.13.2) + '@graphql-tools/utils': 11.1.0(graphql@16.13.2) graphql: 16.13.2 p-limit: 3.1.0 tslib: 2.8.1 - '@graphql-tools/merge@9.1.7(graphql@16.13.2)': + '@graphql-tools/merge@9.1.9(graphql@16.13.2)': dependencies: - '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + '@graphql-tools/utils': 11.1.0(graphql@16.13.2) graphql: 16.13.2 tslib: 2.8.1 @@ -5651,27 +6022,27 @@ snapshots: graphql: 16.13.2 tslib: 2.8.1 - '@graphql-tools/relay-operation-optimizer@7.1.2(graphql@16.13.2)': + '@graphql-tools/relay-operation-optimizer@7.1.4(graphql@16.13.2)': dependencies: '@ardatan/relay-compiler': 13.0.1(graphql@16.13.2) - '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + '@graphql-tools/utils': 11.1.0(graphql@16.13.2) graphql: 16.13.2 tslib: 2.8.1 - '@graphql-tools/schema@10.0.31(graphql@16.13.2)': + '@graphql-tools/schema@10.0.33(graphql@16.13.2)': dependencies: - '@graphql-tools/merge': 9.1.7(graphql@16.13.2) - '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + '@graphql-tools/merge': 9.1.9(graphql@16.13.2) + '@graphql-tools/utils': 11.1.0(graphql@16.13.2) graphql: 16.13.2 tslib: 2.8.1 - '@graphql-tools/url-loader@9.1.0(@types/node@24.12.2)(graphql@16.13.2)': + '@graphql-tools/url-loader@9.1.2(@types/node@24.12.2)(graphql@16.13.2)': dependencies: '@graphql-tools/executor-graphql-ws': 3.1.5(graphql@16.13.2) '@graphql-tools/executor-http': 3.2.1(@types/node@24.12.2)(graphql@16.13.2) - '@graphql-tools/executor-legacy-ws': 1.1.26(graphql@16.13.2) - '@graphql-tools/utils': 11.0.0(graphql@16.13.2) - '@graphql-tools/wrap': 11.1.13(graphql@16.13.2) + '@graphql-tools/executor-legacy-ws': 1.1.28(graphql@16.13.2) + '@graphql-tools/utils': 11.1.0(graphql@16.13.2) + '@graphql-tools/wrap': 11.1.14(graphql@16.13.2) '@types/ws': 8.18.1 '@whatwg-node/fetch': 0.10.13 '@whatwg-node/promise-helpers': 1.3.2 @@ -5687,7 +6058,7 @@ snapshots: - crossws - utf-8-validate - '@graphql-tools/utils@11.0.0(graphql@16.13.2)': + '@graphql-tools/utils@11.1.0(graphql@16.13.2)': dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.2) '@whatwg-node/promise-helpers': 1.3.2 @@ -5695,11 +6066,11 @@ snapshots: graphql: 16.13.2 tslib: 2.8.1 - '@graphql-tools/wrap@11.1.13(graphql@16.13.2)': + '@graphql-tools/wrap@11.1.14(graphql@16.13.2)': dependencies: - '@graphql-tools/delegate': 12.0.13(graphql@16.13.2) - '@graphql-tools/schema': 10.0.31(graphql@16.13.2) - '@graphql-tools/utils': 11.0.0(graphql@16.13.2) + '@graphql-tools/delegate': 12.0.14(graphql@16.13.2) + '@graphql-tools/schema': 10.0.33(graphql@16.13.2) + '@graphql-tools/utils': 11.1.0(graphql@16.13.2) '@whatwg-node/promise-helpers': 1.3.2 graphql: 16.13.2 tslib: 2.8.1 @@ -5708,32 +6079,37 @@ snapshots: dependencies: graphql: 16.13.2 - '@humanfs/core@0.19.1': {} + '@humanfs/core@0.19.2': + dependencies: + '@humanfs/types': 0.15.0 - '@humanfs/node@0.16.7': + '@humanfs/node@0.16.8': dependencies: - '@humanfs/core': 0.19.1 + '@humanfs/core': 0.19.2 + '@humanfs/types': 0.15.0 '@humanwhocodes/retry': 0.4.3 + '@humanfs/types@0.15.0': {} + '@humanwhocodes/module-importer@1.0.1': {} '@humanwhocodes/momoa@3.3.10': {} '@humanwhocodes/retry@0.4.3': {} - '@ifrc-go/icons@2.0.1(react@19.2.4)': + '@ifrc-go/icons@2.0.1(react@19.2.5)': dependencies: - react: 19.2.4 + react: 19.2.5 - '@ifrc-go/ui@2.0.0-beta.2(@ifrc-go/icons@2.0.1(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@ifrc-go/ui@2.0.0-beta.2(@ifrc-go/icons@2.0.1(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@ifrc-go/icons': 2.0.1(react@19.2.4) + '@ifrc-go/icons': 2.0.1(react@19.2.5) '@togglecorp/fujs': 2.2.0 jiti: 2.6.1 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - react-focus-on: 3.10.2(@types/react@19.2.14)(react@19.2.4) - sanitize-html: 2.17.2 + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + react-focus-on: 3.10.2(@types/react@19.2.14)(react@19.2.5) + sanitize-html: 2.17.3 transitivePeerDependencies: - '@types/react' @@ -5889,14 +6265,29 @@ snapshots: '@keyv/serialize@1.1.1': {} + '@kwsites/file-exists@1.1.1': + dependencies: + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + '@kwsites/promise-deferred@1.1.1': {} + '@napi-rs/wasm-runtime@0.2.12': dependencies: - '@emnapi/core': 1.9.2 - '@emnapi/runtime': 1.9.2 + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@tybys/wasm-util': 0.10.1 + optional: true + + '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 '@tybys/wasm-util': 0.10.1 optional: true - '@napi-rs/wasm-runtime@1.1.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': + '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': dependencies: '@emnapi/core': 1.9.2 '@emnapi/runtime': 1.9.2 @@ -5915,74 +6306,71 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 - '@oxc-parser/binding-android-arm-eabi@0.121.0': + '@oxc-parser/binding-android-arm-eabi@0.127.0': optional: true - '@oxc-parser/binding-android-arm64@0.121.0': + '@oxc-parser/binding-android-arm64@0.127.0': optional: true - '@oxc-parser/binding-darwin-arm64@0.121.0': + '@oxc-parser/binding-darwin-arm64@0.127.0': optional: true - '@oxc-parser/binding-darwin-x64@0.121.0': + '@oxc-parser/binding-darwin-x64@0.127.0': optional: true - '@oxc-parser/binding-freebsd-x64@0.121.0': + '@oxc-parser/binding-freebsd-x64@0.127.0': optional: true - '@oxc-parser/binding-linux-arm-gnueabihf@0.121.0': + '@oxc-parser/binding-linux-arm-gnueabihf@0.127.0': optional: true - '@oxc-parser/binding-linux-arm-musleabihf@0.121.0': + '@oxc-parser/binding-linux-arm-musleabihf@0.127.0': optional: true - '@oxc-parser/binding-linux-arm64-gnu@0.121.0': + '@oxc-parser/binding-linux-arm64-gnu@0.127.0': optional: true - '@oxc-parser/binding-linux-arm64-musl@0.121.0': + '@oxc-parser/binding-linux-arm64-musl@0.127.0': optional: true - '@oxc-parser/binding-linux-ppc64-gnu@0.121.0': + '@oxc-parser/binding-linux-ppc64-gnu@0.127.0': optional: true - '@oxc-parser/binding-linux-riscv64-gnu@0.121.0': + '@oxc-parser/binding-linux-riscv64-gnu@0.127.0': optional: true - '@oxc-parser/binding-linux-riscv64-musl@0.121.0': + '@oxc-parser/binding-linux-riscv64-musl@0.127.0': optional: true - '@oxc-parser/binding-linux-s390x-gnu@0.121.0': + '@oxc-parser/binding-linux-s390x-gnu@0.127.0': optional: true - '@oxc-parser/binding-linux-x64-gnu@0.121.0': + '@oxc-parser/binding-linux-x64-gnu@0.127.0': optional: true - '@oxc-parser/binding-linux-x64-musl@0.121.0': + '@oxc-parser/binding-linux-x64-musl@0.127.0': optional: true - '@oxc-parser/binding-openharmony-arm64@0.121.0': + '@oxc-parser/binding-openharmony-arm64@0.127.0': optional: true - '@oxc-parser/binding-wasm32-wasi@0.121.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': + '@oxc-parser/binding-wasm32-wasi@0.127.0': dependencies: - '@napi-rs/wasm-runtime': 1.1.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' + '@emnapi/core': 1.9.2 + '@emnapi/runtime': 1.9.2 + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) optional: true - '@oxc-parser/binding-win32-arm64-msvc@0.121.0': + '@oxc-parser/binding-win32-arm64-msvc@0.127.0': optional: true - '@oxc-parser/binding-win32-ia32-msvc@0.121.0': + '@oxc-parser/binding-win32-ia32-msvc@0.127.0': optional: true - '@oxc-parser/binding-win32-x64-msvc@0.121.0': + '@oxc-parser/binding-win32-x64-msvc@0.127.0': optional: true - '@oxc-project/types@0.121.0': {} - - '@oxc-project/types@0.122.0': {} + '@oxc-project/types@0.127.0': {} '@oxc-resolver/binding-android-arm-eabi@11.19.1': optional: true @@ -6032,9 +6420,9 @@ snapshots: '@oxc-resolver/binding-openharmony-arm64@11.19.1': optional: true - '@oxc-resolver/binding-wasm32-wasi@11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': + '@oxc-resolver/binding-wasm32-wasi@11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': dependencies: - '@napi-rs/wasm-runtime': 1.1.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' @@ -6049,68 +6437,89 @@ snapshots: '@oxc-resolver/binding-win32-x64-msvc@11.19.1': optional: true + '@poppinss/cliui@6.8.1': + dependencies: + '@poppinss/colors': 4.1.6 + cli-boxes: 4.0.1 + cli-table3: 0.6.5 + cli-truncate: 5.2.0 + log-update: 7.2.0 + pretty-hrtime: 1.0.3 + string-width: 8.2.0 + supports-color: 10.2.2 + terminal-size: 4.0.1 + + '@poppinss/colors@4.1.6': + dependencies: + kleur: 4.1.5 + + '@poppinss/validator-lite@2.1.2': {} + + '@quansync/fs@1.0.0': + dependencies: + quansync: 1.0.0 + '@repeaterjs/repeater@3.0.6': {} - '@rolldown/binding-android-arm64@1.0.0-rc.12': + '@rolldown/binding-android-arm64@1.0.0-rc.17': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-rc.12': + '@rolldown/binding-darwin-arm64@1.0.0-rc.17': optional: true - '@rolldown/binding-darwin-x64@1.0.0-rc.12': + '@rolldown/binding-darwin-x64@1.0.0-rc.17': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-rc.12': + '@rolldown/binding-freebsd-x64@1.0.0-rc.17': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.17': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12': + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.17': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.12': + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.17': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12': + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.17': optional: true - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12': + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.17': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.12': + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.17': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-rc.12': + '@rolldown/binding-linux-x64-musl@1.0.0-rc.17': optional: true - '@rolldown/binding-openharmony-arm64@1.0.0-rc.12': + '@rolldown/binding-openharmony-arm64@1.0.0-rc.17': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-rc.12(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': + '@rolldown/binding-wasm32-wasi@1.0.0-rc.17': dependencies: - '@napi-rs/wasm-runtime': 1.1.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12': + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.17': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.12': + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.17': optional: true - '@rolldown/plugin-babel@0.2.2(@babel/core@7.29.0)(@babel/runtime@7.29.2)(rolldown@1.0.0-rc.12(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2))(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3))': + '@rolldown/plugin-babel@0.2.3(@babel/core@7.29.0)(@babel/runtime@7.29.2)(rolldown@1.0.0-rc.17)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3))': dependencies: '@babel/core': 7.29.0 picomatch: 4.0.4 - rolldown: 1.0.0-rc.12(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + rolldown: 1.0.0-rc.17 optionalDependencies: '@babel/runtime': 7.29.2 - vite: 8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3) + vite: 8.0.10(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3) - '@rolldown/pluginutils@1.0.0-rc.12': {} + '@rolldown/pluginutils@1.0.0-rc.17': {} '@rolldown/pluginutils@1.0.0-rc.7': {} @@ -6122,8 +6531,16 @@ snapshots: '@rtsao/scc@1.1.0': {} + '@simple-git/args-pathspec@1.0.3': {} + + '@simple-git/argv-parser@1.1.1': + dependencies: + '@simple-git/args-pathspec': 1.0.3 + '@sindresorhus/merge-streams@4.0.0': {} + '@standard-schema/spec@1.1.0': {} + '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -6168,12 +6585,12 @@ snapshots: '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.29.0) '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.29.0) - '@svgr/core@8.1.0(typescript@6.0.2)': + '@svgr/core@8.1.0(typescript@6.0.3)': dependencies: '@babel/core': 7.29.0 '@svgr/babel-preset': 8.1.0(@babel/core@7.29.0) camelcase: 6.3.0 - cosmiconfig: 8.3.6(typescript@6.0.2) + cosmiconfig: 8.3.6(typescript@6.0.3) snake-case: 3.0.4 transitivePeerDependencies: - supports-color @@ -6184,11 +6601,11 @@ snapshots: '@babel/types': 7.29.0 entities: 4.5.0 - '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@6.0.2))': + '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@6.0.3))': dependencies: '@babel/core': 7.29.0 '@svgr/babel-preset': 8.1.0(@babel/core@7.29.0) - '@svgr/core': 8.1.0(typescript@6.0.2) + '@svgr/core': 8.1.0(typescript@6.0.3) '@svgr/hast-util-to-babel-ast': 8.0.0 svg-parser: 2.0.4 transitivePeerDependencies: @@ -6198,12 +6615,20 @@ snapshots: dependencies: '@babel/runtime-corejs3': 7.29.2 - '@togglecorp/toggle-form@2.0.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@togglecorp/toggle-form@2.0.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@babel/runtime-corejs3': 7.29.2 '@togglecorp/fujs': 2.2.0 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + + '@togglecorp/vite-plugin-validate-env@2.2.1(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3))': + dependencies: + '@poppinss/cliui': 6.8.1 + '@poppinss/validator-lite': 2.1.2 + '@standard-schema/spec': 1.1.0 + unconfig: 7.5.0 + vite: 8.0.10(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3) '@tybys/wasm-util@0.10.1': dependencies: @@ -6258,95 +6683,95 @@ snapshots: dependencies: '@types/node': 24.12.2 - '@typescript-eslint/eslint-plugin@8.58.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2))(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2)': + '@typescript-eslint/eslint-plugin@8.59.0(@typescript-eslint/parser@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3))(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2) - '@typescript-eslint/scope-manager': 8.58.0 - '@typescript-eslint/type-utils': 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2) - '@typescript-eslint/utils': 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2) - '@typescript-eslint/visitor-keys': 8.58.0 + '@typescript-eslint/parser': 8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/scope-manager': 8.59.0 + '@typescript-eslint/type-utils': 8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/utils': 8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.59.0 eslint: 9.39.4(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.5.0(typescript@6.0.2) - typescript: 6.0.2 + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2)': + '@typescript-eslint/parser@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3)': dependencies: - '@typescript-eslint/scope-manager': 8.58.0 - '@typescript-eslint/types': 8.58.0 - '@typescript-eslint/typescript-estree': 8.58.0(typescript@6.0.2) - '@typescript-eslint/visitor-keys': 8.58.0 + '@typescript-eslint/scope-manager': 8.59.0 + '@typescript-eslint/types': 8.59.0 + '@typescript-eslint/typescript-estree': 8.59.0(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.59.0 debug: 4.4.3 eslint: 9.39.4(jiti@2.6.1) - typescript: 6.0.2 + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.58.0(typescript@6.0.2)': + '@typescript-eslint/project-service@8.59.0(typescript@6.0.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.58.0(typescript@6.0.2) - '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/tsconfig-utils': 8.59.0(typescript@6.0.3) + '@typescript-eslint/types': 8.59.0 debug: 4.4.3 - typescript: 6.0.2 + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.58.0': + '@typescript-eslint/scope-manager@8.59.0': dependencies: - '@typescript-eslint/types': 8.58.0 - '@typescript-eslint/visitor-keys': 8.58.0 + '@typescript-eslint/types': 8.59.0 + '@typescript-eslint/visitor-keys': 8.59.0 - '@typescript-eslint/tsconfig-utils@8.58.0(typescript@6.0.2)': + '@typescript-eslint/tsconfig-utils@8.59.0(typescript@6.0.3)': dependencies: - typescript: 6.0.2 + typescript: 6.0.3 - '@typescript-eslint/type-utils@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2)': + '@typescript-eslint/type-utils@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3)': dependencies: - '@typescript-eslint/types': 8.58.0 - '@typescript-eslint/typescript-estree': 8.58.0(typescript@6.0.2) - '@typescript-eslint/utils': 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/types': 8.59.0 + '@typescript-eslint/typescript-estree': 8.59.0(typescript@6.0.3) + '@typescript-eslint/utils': 8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3) debug: 4.4.3 eslint: 9.39.4(jiti@2.6.1) - ts-api-utils: 2.5.0(typescript@6.0.2) - typescript: 6.0.2 + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.58.0': {} + '@typescript-eslint/types@8.59.0': {} - '@typescript-eslint/typescript-estree@8.58.0(typescript@6.0.2)': + '@typescript-eslint/typescript-estree@8.59.0(typescript@6.0.3)': dependencies: - '@typescript-eslint/project-service': 8.58.0(typescript@6.0.2) - '@typescript-eslint/tsconfig-utils': 8.58.0(typescript@6.0.2) - '@typescript-eslint/types': 8.58.0 - '@typescript-eslint/visitor-keys': 8.58.0 + '@typescript-eslint/project-service': 8.59.0(typescript@6.0.3) + '@typescript-eslint/tsconfig-utils': 8.59.0(typescript@6.0.3) + '@typescript-eslint/types': 8.59.0 + '@typescript-eslint/visitor-keys': 8.59.0 debug: 4.4.3 minimatch: 10.2.5 semver: 7.7.4 - tinyglobby: 0.2.15 - ts-api-utils: 2.5.0(typescript@6.0.2) - typescript: 6.0.2 + tinyglobby: 0.2.16 + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2)': + '@typescript-eslint/utils@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.58.0 - '@typescript-eslint/types': 8.58.0 - '@typescript-eslint/typescript-estree': 8.58.0(typescript@6.0.2) + '@typescript-eslint/scope-manager': 8.59.0 + '@typescript-eslint/types': 8.59.0 + '@typescript-eslint/typescript-estree': 8.59.0(typescript@6.0.3) eslint: 9.39.4(jiti@2.6.1) - typescript: 6.0.2 + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.58.0': + '@typescript-eslint/visitor-keys@8.59.0': dependencies: - '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/types': 8.59.0 eslint-visitor-keys: 5.0.1 '@unrs/resolver-binding-android-arm-eabi@1.11.1': @@ -6423,12 +6848,12 @@ snapshots: transitivePeerDependencies: - graphql - '@vitejs/plugin-react@6.0.1(@rolldown/plugin-babel@0.2.2(@babel/core@7.29.0)(@babel/runtime@7.29.2)(rolldown@1.0.0-rc.12(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2))(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3)))(babel-plugin-react-compiler@1.0.0)(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3))': + '@vitejs/plugin-react@6.0.1(@rolldown/plugin-babel@0.2.3(@babel/core@7.29.0)(@babel/runtime@7.29.2)(rolldown@1.0.0-rc.17)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3)))(babel-plugin-react-compiler@1.0.0)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3))': dependencies: '@rolldown/pluginutils': 1.0.0-rc.7 - vite: 8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3) + vite: 8.0.10(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3) optionalDependencies: - '@rolldown/plugin-babel': 0.2.2(@babel/core@7.29.0)(@babel/runtime@7.29.2)(rolldown@1.0.0-rc.12(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2))(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3)) + '@rolldown/plugin-babel': 0.2.3(@babel/core@7.29.0)(@babel/runtime@7.29.2)(rolldown@1.0.0-rc.17)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3)) babel-plugin-react-compiler: 1.0.0 '@whatwg-node/disposablestack@0.0.6': @@ -6471,7 +6896,7 @@ snapshots: acorn@8.16.0: {} - ajv@6.14.0: + ajv@6.15.0: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 @@ -6485,20 +6910,34 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + ansi-escapes@3.2.0: {} + ansi-escapes@7.3.0: dependencies: environment: 1.1.0 + ansi-regex@3.0.1: {} + + ansi-regex@4.1.1: {} + ansi-regex@5.0.1: {} ansi-regex@6.2.2: {} + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 ansi-styles@6.2.3: {} + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + argparse@2.0.1: {} aria-hidden@1.2.6: @@ -6516,10 +6955,10 @@ snapshots: array-includes@3.1.9: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.24.2 es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 is-string: 1.1.1 @@ -6529,51 +6968,51 @@ snapshots: array.prototype.findlast@1.2.5: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.24.2 es-errors: 1.3.0 es-object-atoms: 1.1.1 es-shim-unscopables: 1.1.0 array.prototype.findlastindex@1.2.6: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.24.2 es-errors: 1.3.0 es-object-atoms: 1.1.1 es-shim-unscopables: 1.1.0 array.prototype.flat@1.3.3: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.24.2 es-shim-unscopables: 1.1.0 array.prototype.flatmap@1.3.3: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.24.2 es-shim-unscopables: 1.1.0 array.prototype.tosorted@1.1.4: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.24.2 es-errors: 1.3.0 es-shim-unscopables: 1.1.0 arraybuffer.prototype.slice@1.0.4: dependencies: array-buffer-byte-length: 1.0.2 - call-bind: 1.0.8 + call-bind: 1.0.9 define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.24.2 es-errors: 1.3.0 get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 @@ -6594,13 +7033,13 @@ snapshots: auto-bind@4.0.0: {} - autoprefixer@10.4.27(postcss@8.5.9): + autoprefixer@10.5.0(postcss@8.5.10): dependencies: browserslist: 4.28.2 - caniuse-lite: 1.0.30001786 + caniuse-lite: 1.0.30001790 fraction.js: 5.3.4 picocolors: 1.1.1 - postcss: 8.5.9 + postcss: 8.5.10 postcss-value-parser: 4.2.0 available-typed-arrays@1.0.7: @@ -6611,7 +7050,7 @@ snapshots: aws4@1.13.2: {} - axe-core@4.11.2: {} + axe-core@4.11.3: {} axobject-query@4.1.0: {} @@ -6623,13 +7062,13 @@ snapshots: balanced-match@4.0.4: {} - baseline-browser-mapping@2.10.16: {} + baseline-browser-mapping@2.10.21: {} bcrypt-pbkdf@1.0.2: dependencies: tweetnacl: 0.14.5 - brace-expansion@1.1.13: + brace-expansion@1.1.14: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 @@ -6646,10 +7085,10 @@ snapshots: browserslist@4.28.2: dependencies: - baseline-browser-mapping: 2.10.16 - caniuse-lite: 1.0.30001786 - electron-to-chromium: 1.5.332 - node-releases: 2.0.37 + baseline-browser-mapping: 2.10.21 + caniuse-lite: 1.0.30001790 + electron-to-chromium: 1.5.344 + node-releases: 2.0.38 update-browserslist-db: 1.2.3(browserslist@4.28.2) cacheable@2.3.4: @@ -6665,7 +7104,7 @@ snapshots: es-errors: 1.3.0 function-bind: 1.1.2 - call-bind@1.0.8: + call-bind@1.0.9: dependencies: call-bind-apply-helpers: 1.0.2 es-define-property: 1.0.1 @@ -6684,9 +7123,11 @@ snapshots: pascal-case: 3.1.2 tslib: 2.8.1 + camelcase@5.3.1: {} + camelcase@6.3.0: {} - caniuse-lite@1.0.30001786: {} + caniuse-lite@1.0.30001790: {} capital-case@1.0.4: dependencies: @@ -6696,6 +7137,12 @@ snapshots: caseless@0.12.0: {} + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -6729,43 +7176,83 @@ snapshots: snake-case: 3.0.4 tslib: 2.8.1 + chardet@0.7.0: {} + chardet@2.1.1: {} chokidar@4.0.3: dependencies: readdirp: 4.1.2 + cli-boxes@4.0.1: {} + + cli-cursor@2.1.0: + dependencies: + restore-cursor: 2.0.0 + cli-cursor@5.0.0: dependencies: restore-cursor: 5.1.0 + cli-spinners@2.9.2: {} + + cli-table3@0.6.5: + dependencies: + string-width: 4.2.3 + optionalDependencies: + '@colors/colors': 1.5.0 + + cli-table@0.3.11: + dependencies: + colors: 1.0.3 + cli-truncate@5.2.0: dependencies: slice-ansi: 8.0.0 string-width: 8.2.0 + cli-width@2.2.1: {} + cli-width@4.1.0: {} + cliui@5.0.0: + dependencies: + string-width: 3.1.0 + strip-ansi: 5.2.0 + wrap-ansi: 5.1.0 + cliui@8.0.1: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + clone@1.0.4: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + color-convert@2.0.1: dependencies: color-name: 1.1.4 + color-name@1.1.3: {} + color-name@1.1.4: {} colord@2.9.3: {} colorette@2.0.20: {} + colors@1.0.3: {} + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 + commander@2.20.3: {} + common-tags@1.8.2: {} concat-map@0.0.1: {} @@ -6786,23 +7273,23 @@ snapshots: core-util-is@1.0.2: {} - cosmiconfig@8.3.6(typescript@6.0.2): + cosmiconfig@8.3.6(typescript@6.0.3): dependencies: import-fresh: 3.3.1 js-yaml: 4.1.1 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: - typescript: 6.0.2 + typescript: 6.0.3 - cosmiconfig@9.0.1(typescript@6.0.2): + cosmiconfig@9.0.1(typescript@6.0.3): dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 js-yaml: 4.1.1 parse-json: 5.2.0 optionalDependencies: - typescript: 6.0.2 + typescript: 6.0.3 cross-inspect@1.0.1: dependencies: @@ -6814,23 +7301,23 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - css-blank-pseudo@8.0.1(postcss@8.5.9): + css-blank-pseudo@8.0.1(postcss@8.5.10): dependencies: - postcss: 8.5.9 + postcss: 8.5.10 postcss-selector-parser: 7.1.1 css-functions-list@3.3.3: {} - css-has-pseudo@8.0.0(postcss@8.5.9): + css-has-pseudo@8.0.0(postcss@8.5.10): dependencies: '@csstools/selector-specificity': 6.0.0(postcss-selector-parser@7.1.1) - postcss: 8.5.9 + postcss: 8.5.10 postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 - css-prefers-color-scheme@11.0.0(postcss@8.5.9): + css-prefers-color-scheme@11.0.0(postcss@8.5.10): dependencies: - postcss: 8.5.9 + postcss: 8.5.10 css-tree@3.2.1: dependencies: @@ -6895,10 +7382,16 @@ snapshots: dependencies: ms: 2.1.3 + decamelize@1.2.0: {} + deep-is@0.1.4: {} deepmerge@4.3.1: {} + defaults@1.0.4: + dependencies: + clone: 1.0.4 + define-data-property@1.1.4: dependencies: es-define-property: 1.0.1 @@ -6911,6 +7404,8 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 + defu@6.1.7: {} + delayed-stream@1.0.0: {} dependency-graph@1.0.0: {} @@ -6959,7 +7454,7 @@ snapshots: dotenv-cli@11.0.0: dependencies: cross-spawn: 7.0.6 - dotenv: 17.4.1 + dotenv: 17.4.2 dotenv-expand: 12.0.3 minimist: 1.2.8 @@ -6969,7 +7464,7 @@ snapshots: dotenv@16.6.1: {} - dotenv@17.4.1: {} + dotenv@17.4.2: {} dunder-proto@1.0.1: dependencies: @@ -6982,10 +7477,12 @@ snapshots: jsbn: 0.1.1 safer-buffer: 2.1.2 - electron-to-chromium@1.5.332: {} + electron-to-chromium@1.5.344: {} emoji-regex@10.6.0: {} + emoji-regex@7.0.3: {} + emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} @@ -7002,12 +7499,12 @@ snapshots: dependencies: is-arrayish: 0.2.1 - es-abstract@1.24.1: + es-abstract@1.24.2: dependencies: array-buffer-byte-length: 1.0.2 arraybuffer.prototype.slice: 1.0.4 available-typed-arrays: 1.0.7 - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 data-view-buffer: 1.0.2 data-view-byte-length: 1.0.2 @@ -7026,7 +7523,7 @@ snapshots: has-property-descriptors: 1.0.2 has-proto: 1.2.0 has-symbols: 1.1.0 - hasown: 2.0.2 + hasown: 2.0.3 internal-slot: 1.1.0 is-array-buffer: 3.0.5 is-callable: 1.2.7 @@ -7044,7 +7541,7 @@ snapshots: object.assign: 4.1.7 own-keys: 1.0.1 regexp.prototype.flags: 1.5.4 - safe-array-concat: 1.1.3 + safe-array-concat: 1.1.4 safe-push-apply: 1.0.0 safe-regex-test: 1.1.0 set-proto: 1.0.0 @@ -7063,12 +7560,12 @@ snapshots: es-errors@1.3.0: {} - es-iterator-helpers@1.3.1: + es-iterator-helpers@1.3.2: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.24.2 es-errors: 1.3.0 es-set-tostringtag: 2.1.0 function-bind: 1.1.2 @@ -7081,7 +7578,6 @@ snapshots: internal-slot: 1.1.0 iterator.prototype: 1.1.5 math-intrinsics: 1.1.0 - safe-array-concat: 1.1.3 es-object-atoms@1.1.1: dependencies: @@ -7092,11 +7588,11 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 has-tostringtag: 1.0.2 - hasown: 2.0.2 + hasown: 2.0.3 es-shim-unscopables@1.1.0: dependencies: - hasown: 2.0.2 + hasown: 2.0.3 es-to-primitive@1.3.0: dependencies: @@ -7106,6 +7602,8 @@ snapshots: escalade@3.2.0: {} + escape-string-regexp@1.0.5: {} + escape-string-regexp@4.0.0: {} escodegen@1.14.3: @@ -7121,25 +7619,25 @@ snapshots: dependencies: confusing-browser-globals: 1.0.11 eslint: 9.39.4(jiti@2.6.1) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.4(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.4(jiti@2.6.1)) object.assign: 4.1.7 object.entries: 1.1.9 semver: 6.3.1 - eslint-config-airbnb@19.0.4(eslint-plugin-import@2.32.0)(eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.4(jiti@2.6.1)))(eslint-plugin-react-hooks@7.0.1(eslint@9.39.4(jiti@2.6.1)))(eslint-plugin-react@7.37.5(eslint@9.39.4(jiti@2.6.1)))(eslint@9.39.4(jiti@2.6.1)): + eslint-config-airbnb@19.0.4(eslint-plugin-import@2.32.0)(eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.4(jiti@2.6.1)))(eslint-plugin-react-hooks@7.1.1(eslint@9.39.4(jiti@2.6.1)))(eslint-plugin-react@7.37.5(eslint@9.39.4(jiti@2.6.1)))(eslint@9.39.4(jiti@2.6.1)): dependencies: eslint: 9.39.4(jiti@2.6.1) eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.4(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.4(jiti@2.6.1)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.4(jiti@2.6.1)) eslint-plugin-react: 7.37.5(eslint@9.39.4(jiti@2.6.1)) - eslint-plugin-react-hooks: 7.0.1(eslint@9.39.4(jiti@2.6.1)) + eslint-plugin-react-hooks: 7.1.1(eslint@9.39.4(jiti@2.6.1)) object.assign: 4.1.7 object.entries: 1.1.9 eslint-import-context@0.1.9(unrs-resolver@1.11.1): dependencies: - get-tsconfig: 4.13.7 + get-tsconfig: 4.14.0 stable-hash-x: 0.2.0 optionalDependencies: unrs-resolver: 1.11.1 @@ -7157,21 +7655,21 @@ snapshots: debug: 4.4.3 eslint: 9.39.4(jiti@2.6.1) eslint-import-context: 0.1.9(unrs-resolver@1.11.1) - get-tsconfig: 4.13.7 + get-tsconfig: 4.14.0 is-bun-module: 2.0.0 stable-hash-x: 0.2.0 - tinyglobby: 0.2.15 + tinyglobby: 0.2.16 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.4(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.4(jiti@2.6.1)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.4(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.4(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/parser': 8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3) eslint: 9.39.4(jiti@2.6.1) eslint-import-resolver-node: 0.3.10 eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.6.1)) @@ -7187,7 +7685,7 @@ snapshots: dependencies: eslint: 9.39.4(jiti@2.6.1) - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.4(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.4(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -7198,8 +7696,8 @@ snapshots: doctrine: 2.1.0 eslint: 9.39.4(jiti@2.6.1) eslint-import-resolver-node: 0.3.10 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.4(jiti@2.6.1)) - hasown: 2.0.2 + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.4(jiti@2.6.1)) + hasown: 2.0.3 is-core-module: 2.16.1 is-glob: 4.0.3 minimatch: 3.1.5 @@ -7210,7 +7708,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/parser': 8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -7222,12 +7720,12 @@ snapshots: array-includes: 3.1.9 array.prototype.flatmap: 1.3.3 ast-types-flow: 0.0.8 - axe-core: 4.11.2 + axe-core: 4.11.3 axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 eslint: 9.39.4(jiti@2.6.1) - hasown: 2.0.2 + hasown: 2.0.3 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 minimatch: 3.1.5 @@ -7235,7 +7733,7 @@ snapshots: safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 - eslint-plugin-react-hooks@7.0.1(eslint@9.39.4(jiti@2.6.1)): + eslint-plugin-react-hooks@7.1.1(eslint@9.39.4(jiti@2.6.1)): dependencies: '@babel/core': 7.29.0 '@babel/parser': 7.29.2 @@ -7257,10 +7755,10 @@ snapshots: array.prototype.flatmap: 1.3.3 array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 - es-iterator-helpers: 1.3.1 + es-iterator-helpers: 1.3.2 eslint: 9.39.4(jiti@2.6.1) estraverse: 5.3.0 - hasown: 2.0.2 + hasown: 2.0.3 jsx-ast-utils: 3.3.5 minimatch: 3.1.5 object.entries: 1.1.9 @@ -7297,11 +7795,11 @@ snapshots: '@eslint/eslintrc': 3.3.5 '@eslint/js': 9.39.4 '@eslint/plugin-kit': 0.4.1 - '@humanfs/node': 0.16.7 + '@humanfs/node': 0.16.8 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 '@types/estree': 1.0.8 - ajv: 6.14.0 + ajv: 6.15.0 chalk: 4.1.2 cross-spawn: 7.0.6 debug: 4.4.3 @@ -7354,8 +7852,18 @@ snapshots: eventemitter3@5.0.4: {} + extend-shallow@2.0.1: + dependencies: + is-extendable: 0.1.1 + extend@3.0.2: {} + external-editor@3.1.0: + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + extsprintf@1.3.0: {} fast-deep-equal@3.1.3: {} @@ -7393,6 +7901,10 @@ snapshots: node-domexception: 1.0.0 web-streams-polyfill: 3.3.3 + figures@2.0.0: + dependencies: + escape-string-regexp: 1.0.5 + file-entry-cache@11.1.2: dependencies: flat-cache: 6.1.22 @@ -7405,6 +7917,10 @@ snapshots: dependencies: to-regex-range: 5.0.1 + find-up@3.0.0: + dependencies: + locate-path: 3.0.0 + find-up@5.0.0: dependencies: locate-path: 6.0.0 @@ -7449,6 +7965,10 @@ snapshots: fraction.js@5.3.4: {} + fs-exists-sync@0.1.0: {} + + fs.realpath@1.0.0: {} + fsevents@2.3.3: optional: true @@ -7456,11 +7976,11 @@ snapshots: function.prototype.name@1.1.8: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 define-properties: 1.2.1 functions-have-names: 1.2.3 - hasown: 2.0.2 + hasown: 2.0.3 is-callable: 1.2.7 functions-have-names@1.2.3: {} @@ -7483,7 +8003,7 @@ snapshots: get-proto: 1.0.1 gopd: 1.2.0 has-symbols: 1.1.0 - hasown: 2.0.2 + hasown: 2.0.3 math-intrinsics: 1.1.0 get-nonce@1.0.1: {} @@ -7499,7 +8019,7 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 - get-tsconfig@4.13.7: + get-tsconfig@4.14.0: dependencies: resolve-pkg-maps: 1.0.0 @@ -7515,6 +8035,15 @@ snapshots: dependencies: is-glob: 4.0.3 + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.5 + once: 1.4.0 + path-is-absolute: 1.0.1 + global-modules@2.0.0: dependencies: global-prefix: 3.0.0 @@ -7527,7 +8056,7 @@ snapshots: globals@14.0.0: {} - globals@17.4.0: {} + globals@17.5.0: {} globalthis@1.0.4: dependencies: @@ -7554,21 +8083,19 @@ snapshots: globjoin@0.1.4: {} - globrex@0.1.2: {} - gopd@1.2.0: {} graceful-fs@4.2.11: {} - graphql-config@5.1.6(@types/node@24.12.2)(graphql@16.13.2)(typescript@6.0.2): + graphql-config@5.1.6(@types/node@24.12.2)(graphql@16.13.2)(typescript@6.0.3): dependencies: - '@graphql-tools/graphql-file-loader': 8.1.12(graphql@16.13.2) - '@graphql-tools/json-file-loader': 8.0.26(graphql@16.13.2) - '@graphql-tools/load': 8.1.8(graphql@16.13.2) - '@graphql-tools/merge': 9.1.7(graphql@16.13.2) - '@graphql-tools/url-loader': 9.1.0(@types/node@24.12.2)(graphql@16.13.2) - '@graphql-tools/utils': 11.0.0(graphql@16.13.2) - cosmiconfig: 8.3.6(typescript@6.0.2) + '@graphql-tools/graphql-file-loader': 8.1.14(graphql@16.13.2) + '@graphql-tools/json-file-loader': 8.0.28(graphql@16.13.2) + '@graphql-tools/load': 8.1.10(graphql@16.13.2) + '@graphql-tools/merge': 9.1.9(graphql@16.13.2) + '@graphql-tools/url-loader': 9.1.2(@types/node@24.12.2)(graphql@16.13.2) + '@graphql-tools/utils': 11.1.0(graphql@16.13.2) + cosmiconfig: 8.3.6(typescript@6.0.3) graphql: 16.13.2 jiti: 2.6.1 minimatch: 10.2.5 @@ -7599,11 +8126,13 @@ snapshots: har-validator@5.1.5: dependencies: - ajv: 6.14.0 + ajv: 6.15.0 har-schema: 2.0.0 has-bigints@1.1.0: {} + has-flag@3.0.0: {} + has-flag@4.0.0: {} has-flag@5.0.1: {} @@ -7626,7 +8155,7 @@ snapshots: dependencies: hookified: 1.15.1 - hasown@2.0.2: + hasown@2.0.3: dependencies: function-bind: 1.1.2 @@ -7693,12 +8222,35 @@ snapshots: imurmurhash@0.1.4: {} + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + ini@1.3.8: {} + inquirer@6.5.2: + dependencies: + ansi-escapes: 3.2.0 + chalk: 2.4.2 + cli-cursor: 2.1.0 + cli-width: 2.2.1 + external-editor: 3.1.0 + figures: 2.0.0 + lodash: 4.18.1 + mute-stream: 0.0.7 + run-async: 2.4.1 + rxjs: 6.6.7 + string-width: 2.1.1 + strip-ansi: 5.2.0 + through: 2.3.8 + internal-slot@1.1.0: dependencies: es-errors: 1.3.0 - hasown: 2.0.2 + hasown: 2.0.3 side-channel: 1.1.0 invariant@2.2.4: @@ -7714,7 +8266,7 @@ snapshots: is-array-buffer@3.0.5: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 get-intrinsic: 1.3.0 @@ -7745,7 +8297,7 @@ snapshots: is-core-module@2.16.1: dependencies: - hasown: 2.0.2 + hasown: 2.0.3 is-data-view@1.0.2: dependencies: @@ -7758,12 +8310,16 @@ snapshots: call-bound: 1.0.4 has-tostringtag: 1.0.2 + is-extendable@0.1.1: {} + is-extglob@2.1.1: {} is-finalizationregistry@1.1.1: dependencies: call-bound: 1.0.4 + is-fullwidth-code-point@2.0.0: {} + is-fullwidth-code-point@3.0.0: {} is-fullwidth-code-point@5.1.0: @@ -7806,7 +8362,7 @@ snapshots: call-bound: 1.0.4 gopd: 1.2.0 has-tostringtag: 1.0.2 - hasown: 2.0.2 + hasown: 2.0.3 is-relative@1.0.0: dependencies: @@ -7885,6 +8441,11 @@ snapshots: js-tokens@4.0.0: {} + js-yaml@3.14.2: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + js-yaml@4.1.1: dependencies: argparse: 2.0.1 @@ -7974,21 +8535,22 @@ snapshots: kind-of@6.0.3: {} - knip@6.3.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2): + kleur@4.1.5: {} + + knip@6.6.2(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0): dependencies: - '@nodelib/fs.walk': 1.2.8 - fast-glob: 3.3.3 + fdir: 6.5.0(picomatch@4.0.4) formatly: 0.3.0 - get-tsconfig: 4.13.7 + get-tsconfig: 4.14.0 jiti: 2.6.1 minimist: 1.2.8 - oxc-parser: 0.121.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) - oxc-resolver: 11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) - picocolors: 1.1.1 + oxc-parser: 0.127.0 + oxc-resolver: 11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) picomatch: 4.0.4 smol-toml: 1.6.1 strip-json-comments: 5.0.3 - unbash: 2.2.0 + tinyglobby: 0.2.16 + unbash: 3.0.0 yaml: 2.8.3 zod: 4.3.6 transitivePeerDependencies: @@ -8062,6 +8624,24 @@ snapshots: lines-and-columns@1.2.4: {} + lint@0.8.19: + dependencies: + chalk: 2.4.2 + cli-table: 0.3.11 + commander: 2.20.3 + inquirer: 6.5.2 + js-yaml: 4.1.1 + loadash: 1.0.0 + moment: 2.30.1 + ora: 3.4.0 + prettier: 1.19.1 + replace-in-file: 3.4.4 + request: 2.88.2 + simple-git: 3.36.0 + write-yaml: 1.0.0 + transitivePeerDependencies: + - supports-color + listr2@9.0.5: dependencies: cli-truncate: 5.2.0 @@ -8071,6 +8651,13 @@ snapshots: rfdc: 1.4.1 wrap-ansi: 9.0.2 + loadash@1.0.0: {} + + locate-path@3.0.0: + dependencies: + p-locate: 3.0.0 + path-exists: 3.0.0 + locate-path@6.0.0: dependencies: p-locate: 5.0.0 @@ -8083,6 +8670,10 @@ snapshots: lodash@4.18.1: {} + log-symbols@2.2.0: + dependencies: + chalk: 2.4.2 + log-symbols@4.1.0: dependencies: chalk: 4.1.2 @@ -8096,6 +8687,14 @@ snapshots: strip-ansi: 7.2.0 wrap-ansi: 9.0.2 + log-update@7.2.0: + dependencies: + ansi-escapes: 7.3.0 + cli-cursor: 5.0.0 + slice-ansi: 8.0.0 + strip-ansi: 7.2.0 + wrap-ansi: 10.0.0 + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 @@ -8139,6 +8738,8 @@ snapshots: dependencies: mime-db: 1.52.0 + mimic-fn@1.2.0: {} + mimic-function@5.0.1: {} minimatch@10.2.5: @@ -8147,12 +8748,20 @@ snapshots: minimatch@3.1.5: dependencies: - brace-expansion: 1.1.13 + brace-expansion: 1.1.14 minimist@1.2.8: {} + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + + moment@2.30.1: {} + ms@2.1.3: {} + mute-stream@0.0.7: {} + mute-stream@2.0.0: {} nanoid@3.3.11: {} @@ -8181,7 +8790,7 @@ snapshots: fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 - node-releases@2.0.37: {} + node-releases@2.0.38: {} normalize-path@2.1.1: dependencies: @@ -8206,7 +8815,7 @@ snapshots: object.assign@4.1.7: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 define-properties: 1.2.1 es-object-atoms: 1.1.1 @@ -8215,31 +8824,39 @@ snapshots: object.entries@1.1.9: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 define-properties: 1.2.1 es-object-atoms: 1.1.1 object.fromentries@2.0.8: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.24.2 es-object-atoms: 1.1.1 object.groupby@1.0.3: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.24.2 object.values@1.2.1: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 define-properties: 1.2.1 es-object-atoms: 1.1.1 + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@2.0.1: + dependencies: + mimic-fn: 1.2.0 + onetime@7.0.0: dependencies: mimic-function: 5.0.1 @@ -8264,41 +8881,49 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 + ora@3.4.0: + dependencies: + chalk: 2.4.2 + cli-cursor: 2.1.0 + cli-spinners: 2.9.2 + log-symbols: 2.2.0 + strip-ansi: 5.2.0 + wcwidth: 1.0.1 + + os-tmpdir@1.0.2: {} + own-keys@1.0.1: dependencies: get-intrinsic: 1.3.0 object-keys: 1.1.1 safe-push-apply: 1.0.0 - oxc-parser@0.121.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2): + oxc-parser@0.127.0: dependencies: - '@oxc-project/types': 0.121.0 + '@oxc-project/types': 0.127.0 optionalDependencies: - '@oxc-parser/binding-android-arm-eabi': 0.121.0 - '@oxc-parser/binding-android-arm64': 0.121.0 - '@oxc-parser/binding-darwin-arm64': 0.121.0 - '@oxc-parser/binding-darwin-x64': 0.121.0 - '@oxc-parser/binding-freebsd-x64': 0.121.0 - '@oxc-parser/binding-linux-arm-gnueabihf': 0.121.0 - '@oxc-parser/binding-linux-arm-musleabihf': 0.121.0 - '@oxc-parser/binding-linux-arm64-gnu': 0.121.0 - '@oxc-parser/binding-linux-arm64-musl': 0.121.0 - '@oxc-parser/binding-linux-ppc64-gnu': 0.121.0 - '@oxc-parser/binding-linux-riscv64-gnu': 0.121.0 - '@oxc-parser/binding-linux-riscv64-musl': 0.121.0 - '@oxc-parser/binding-linux-s390x-gnu': 0.121.0 - '@oxc-parser/binding-linux-x64-gnu': 0.121.0 - '@oxc-parser/binding-linux-x64-musl': 0.121.0 - '@oxc-parser/binding-openharmony-arm64': 0.121.0 - '@oxc-parser/binding-wasm32-wasi': 0.121.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) - '@oxc-parser/binding-win32-arm64-msvc': 0.121.0 - '@oxc-parser/binding-win32-ia32-msvc': 0.121.0 - '@oxc-parser/binding-win32-x64-msvc': 0.121.0 - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - - oxc-resolver@11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2): + '@oxc-parser/binding-android-arm-eabi': 0.127.0 + '@oxc-parser/binding-android-arm64': 0.127.0 + '@oxc-parser/binding-darwin-arm64': 0.127.0 + '@oxc-parser/binding-darwin-x64': 0.127.0 + '@oxc-parser/binding-freebsd-x64': 0.127.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.127.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.127.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.127.0 + '@oxc-parser/binding-linux-arm64-musl': 0.127.0 + '@oxc-parser/binding-linux-ppc64-gnu': 0.127.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.127.0 + '@oxc-parser/binding-linux-riscv64-musl': 0.127.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.127.0 + '@oxc-parser/binding-linux-x64-gnu': 0.127.0 + '@oxc-parser/binding-linux-x64-musl': 0.127.0 + '@oxc-parser/binding-openharmony-arm64': 0.127.0 + '@oxc-parser/binding-wasm32-wasi': 0.127.0 + '@oxc-parser/binding-win32-arm64-msvc': 0.127.0 + '@oxc-parser/binding-win32-ia32-msvc': 0.127.0 + '@oxc-parser/binding-win32-x64-msvc': 0.127.0 + + oxc-resolver@11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0): optionalDependencies: '@oxc-resolver/binding-android-arm-eabi': 11.19.1 '@oxc-resolver/binding-android-arm64': 11.19.1 @@ -8316,7 +8941,7 @@ snapshots: '@oxc-resolver/binding-linux-x64-gnu': 11.19.1 '@oxc-resolver/binding-linux-x64-musl': 11.19.1 '@oxc-resolver/binding-openharmony-arm64': 11.19.1 - '@oxc-resolver/binding-wasm32-wasi': 11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + '@oxc-resolver/binding-wasm32-wasi': 11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) '@oxc-resolver/binding-win32-arm64-msvc': 11.19.1 '@oxc-resolver/binding-win32-ia32-msvc': 11.19.1 '@oxc-resolver/binding-win32-x64-msvc': 11.19.1 @@ -8324,14 +8949,24 @@ snapshots: - '@emnapi/core' - '@emnapi/runtime' + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 + p-locate@3.0.0: + dependencies: + p-limit: 2.3.0 + p-locate@5.0.0: dependencies: p-limit: 3.1.0 + p-try@2.2.0: {} + param-case@3.0.4: dependencies: dot-case: 3.0.4 @@ -8368,8 +9003,12 @@ snapshots: dot-case: 3.0.4 tslib: 2.8.1 + path-exists@3.0.0: {} + path-exists@4.0.0: {} + path-is-absolute@1.0.1: {} + path-key@3.1.1: {} path-key@4.0.0: {} @@ -8400,250 +9039,250 @@ snapshots: possible-typed-array-names@1.1.0: {} - postcss-attribute-case-insensitive@8.0.0(postcss@8.5.9): + postcss-attribute-case-insensitive@8.0.0(postcss@8.5.10): dependencies: - postcss: 8.5.9 + postcss: 8.5.10 postcss-selector-parser: 7.1.1 - postcss-browser-comments@6.0.2(browserslist@4.28.2)(postcss@8.5.9): + postcss-browser-comments@6.0.2(browserslist@4.28.2)(postcss@8.5.10): dependencies: browserslist: 4.28.2 - postcss: 8.5.9 + postcss: 8.5.10 - postcss-clamp@4.1.0(postcss@8.5.9): + postcss-clamp@4.1.0(postcss@8.5.10): dependencies: - postcss: 8.5.9 + postcss: 8.5.10 postcss-value-parser: 4.2.0 - postcss-color-functional-notation@8.0.2(postcss@8.5.9): + postcss-color-functional-notation@8.0.3(postcss@8.5.10): dependencies: - '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.1.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.9) - '@csstools/utilities': 3.0.0(postcss@8.5.9) - postcss: 8.5.9 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.10) + '@csstools/utilities': 3.0.0(postcss@8.5.10) + postcss: 8.5.10 - postcss-color-hex-alpha@11.0.0(postcss@8.5.9): + postcss-color-hex-alpha@11.0.0(postcss@8.5.10): dependencies: - '@csstools/utilities': 3.0.0(postcss@8.5.9) - postcss: 8.5.9 + '@csstools/utilities': 3.0.0(postcss@8.5.10) + postcss: 8.5.10 postcss-value-parser: 4.2.0 - postcss-color-rebeccapurple@11.0.0(postcss@8.5.9): + postcss-color-rebeccapurple@11.0.0(postcss@8.5.10): dependencies: - '@csstools/utilities': 3.0.0(postcss@8.5.9) - postcss: 8.5.9 + '@csstools/utilities': 3.0.0(postcss@8.5.10) + postcss: 8.5.10 postcss-value-parser: 4.2.0 - postcss-custom-media@12.0.1(postcss@8.5.9): + postcss-custom-media@12.0.1(postcss@8.5.10): dependencies: '@csstools/cascade-layer-name-parser': 3.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 '@csstools/media-query-list-parser': 5.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - postcss: 8.5.9 + postcss: 8.5.10 - postcss-custom-properties@15.0.1(postcss@8.5.9): + postcss-custom-properties@15.0.1(postcss@8.5.10): dependencies: '@csstools/cascade-layer-name-parser': 3.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/utilities': 3.0.0(postcss@8.5.9) - postcss: 8.5.9 + '@csstools/utilities': 3.0.0(postcss@8.5.10) + postcss: 8.5.10 postcss-value-parser: 4.2.0 - postcss-custom-selectors@9.0.1(postcss@8.5.9): + postcss-custom-selectors@9.0.1(postcss@8.5.10): dependencies: '@csstools/cascade-layer-name-parser': 3.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.9 + postcss: 8.5.10 postcss-selector-parser: 7.1.1 - postcss-dir-pseudo-class@10.0.0(postcss@8.5.9): + postcss-dir-pseudo-class@10.0.0(postcss@8.5.10): dependencies: - postcss: 8.5.9 + postcss: 8.5.10 postcss-selector-parser: 7.1.1 - postcss-double-position-gradients@7.0.0(postcss@8.5.9): + postcss-double-position-gradients@7.0.0(postcss@8.5.10): dependencies: - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.9) - '@csstools/utilities': 3.0.0(postcss@8.5.9) - postcss: 8.5.9 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.10) + '@csstools/utilities': 3.0.0(postcss@8.5.10) + postcss: 8.5.10 postcss-value-parser: 4.2.0 - postcss-focus-visible@11.0.0(postcss@8.5.9): + postcss-focus-visible@11.0.0(postcss@8.5.10): dependencies: - postcss: 8.5.9 + postcss: 8.5.10 postcss-selector-parser: 7.1.1 - postcss-focus-within@10.0.0(postcss@8.5.9): + postcss-focus-within@10.0.0(postcss@8.5.10): dependencies: - postcss: 8.5.9 + postcss: 8.5.10 postcss-selector-parser: 7.1.1 - postcss-font-variant@5.0.0(postcss@8.5.9): + postcss-font-variant@5.0.0(postcss@8.5.10): dependencies: - postcss: 8.5.9 + postcss: 8.5.10 - postcss-gap-properties@7.0.0(postcss@8.5.9): + postcss-gap-properties@7.0.0(postcss@8.5.10): dependencies: - postcss: 8.5.9 + postcss: 8.5.10 - postcss-image-set-function@8.0.0(postcss@8.5.9): + postcss-image-set-function@8.0.0(postcss@8.5.10): dependencies: - '@csstools/utilities': 3.0.0(postcss@8.5.9) - postcss: 8.5.9 + '@csstools/utilities': 3.0.0(postcss@8.5.10) + postcss: 8.5.10 postcss-value-parser: 4.2.0 - postcss-lab-function@8.0.2(postcss@8.5.9): + postcss-lab-function@8.0.3(postcss@8.5.10): dependencies: - '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.1.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.9) - '@csstools/utilities': 3.0.0(postcss@8.5.9) - postcss: 8.5.9 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.10) + '@csstools/utilities': 3.0.0(postcss@8.5.10) + postcss: 8.5.10 - postcss-logical@9.0.0(postcss@8.5.9): + postcss-logical@9.0.0(postcss@8.5.10): dependencies: - postcss: 8.5.9 + postcss: 8.5.10 postcss-value-parser: 4.2.0 - postcss-nested@7.0.2(postcss@8.5.9): + postcss-nested@7.0.2(postcss@8.5.10): dependencies: - postcss: 8.5.9 + postcss: 8.5.10 postcss-selector-parser: 7.1.1 - postcss-nesting@14.0.0(postcss@8.5.9): + postcss-nesting@14.0.0(postcss@8.5.10): dependencies: '@csstools/selector-resolve-nested': 4.0.0(postcss-selector-parser@7.1.1) '@csstools/selector-specificity': 6.0.0(postcss-selector-parser@7.1.1) - postcss: 8.5.9 + postcss: 8.5.10 postcss-selector-parser: 7.1.1 - postcss-normalize@13.0.1(browserslist@4.28.2)(postcss@8.5.9): + postcss-normalize@13.0.1(browserslist@4.28.2)(postcss@8.5.10): dependencies: '@csstools/normalize.css': 12.1.1 browserslist: 4.28.2 - postcss: 8.5.9 - postcss-browser-comments: 6.0.2(browserslist@4.28.2)(postcss@8.5.9) + postcss: 8.5.10 + postcss-browser-comments: 6.0.2(browserslist@4.28.2)(postcss@8.5.10) sanitize.css: 13.0.0 - postcss-opacity-percentage@3.0.0(postcss@8.5.9): + postcss-opacity-percentage@3.0.0(postcss@8.5.10): dependencies: - postcss: 8.5.9 + postcss: 8.5.10 - postcss-overflow-shorthand@7.0.0(postcss@8.5.9): + postcss-overflow-shorthand@7.0.0(postcss@8.5.10): dependencies: - postcss: 8.5.9 + postcss: 8.5.10 postcss-value-parser: 4.2.0 - postcss-page-break@3.0.4(postcss@8.5.9): + postcss-page-break@3.0.4(postcss@8.5.10): dependencies: - postcss: 8.5.9 + postcss: 8.5.10 - postcss-place@11.0.0(postcss@8.5.9): + postcss-place@11.0.0(postcss@8.5.10): dependencies: - postcss: 8.5.9 + postcss: 8.5.10 postcss-value-parser: 4.2.0 - postcss-preset-env@11.2.0(postcss@8.5.9): - dependencies: - '@csstools/postcss-alpha-function': 2.0.3(postcss@8.5.9) - '@csstools/postcss-cascade-layers': 6.0.0(postcss@8.5.9) - '@csstools/postcss-color-function': 5.0.2(postcss@8.5.9) - '@csstools/postcss-color-function-display-p3-linear': 2.0.2(postcss@8.5.9) - '@csstools/postcss-color-mix-function': 4.0.2(postcss@8.5.9) - '@csstools/postcss-color-mix-variadic-function-arguments': 2.0.2(postcss@8.5.9) - '@csstools/postcss-content-alt-text': 3.0.0(postcss@8.5.9) - '@csstools/postcss-contrast-color-function': 3.0.2(postcss@8.5.9) - '@csstools/postcss-exponential-functions': 3.0.1(postcss@8.5.9) - '@csstools/postcss-font-format-keywords': 5.0.0(postcss@8.5.9) - '@csstools/postcss-font-width-property': 1.0.0(postcss@8.5.9) - '@csstools/postcss-gamut-mapping': 3.0.2(postcss@8.5.9) - '@csstools/postcss-gradients-interpolation-method': 6.0.2(postcss@8.5.9) - '@csstools/postcss-hwb-function': 5.0.2(postcss@8.5.9) - '@csstools/postcss-ic-unit': 5.0.0(postcss@8.5.9) - '@csstools/postcss-initial': 3.0.0(postcss@8.5.9) - '@csstools/postcss-is-pseudo-class': 6.0.0(postcss@8.5.9) - '@csstools/postcss-light-dark-function': 3.0.0(postcss@8.5.9) - '@csstools/postcss-logical-float-and-clear': 4.0.0(postcss@8.5.9) - '@csstools/postcss-logical-overflow': 3.0.0(postcss@8.5.9) - '@csstools/postcss-logical-overscroll-behavior': 3.0.0(postcss@8.5.9) - '@csstools/postcss-logical-resize': 4.0.0(postcss@8.5.9) - '@csstools/postcss-logical-viewport-units': 4.0.0(postcss@8.5.9) - '@csstools/postcss-media-minmax': 3.0.1(postcss@8.5.9) - '@csstools/postcss-media-queries-aspect-ratio-number-values': 4.0.0(postcss@8.5.9) - '@csstools/postcss-mixins': 1.0.0(postcss@8.5.9) - '@csstools/postcss-nested-calc': 5.0.0(postcss@8.5.9) - '@csstools/postcss-normalize-display-values': 5.0.1(postcss@8.5.9) - '@csstools/postcss-oklab-function': 5.0.2(postcss@8.5.9) - '@csstools/postcss-position-area-property': 2.0.0(postcss@8.5.9) - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.9) - '@csstools/postcss-property-rule-prelude-list': 2.0.0(postcss@8.5.9) - '@csstools/postcss-random-function': 3.0.1(postcss@8.5.9) - '@csstools/postcss-relative-color-syntax': 4.0.2(postcss@8.5.9) - '@csstools/postcss-scope-pseudo-class': 5.0.0(postcss@8.5.9) - '@csstools/postcss-sign-functions': 2.0.1(postcss@8.5.9) - '@csstools/postcss-stepped-value-functions': 5.0.1(postcss@8.5.9) - '@csstools/postcss-syntax-descriptor-syntax-production': 2.0.0(postcss@8.5.9) - '@csstools/postcss-system-ui-font-family': 2.0.0(postcss@8.5.9) - '@csstools/postcss-text-decoration-shorthand': 5.0.3(postcss@8.5.9) - '@csstools/postcss-trigonometric-functions': 5.0.1(postcss@8.5.9) - '@csstools/postcss-unset-value': 5.0.0(postcss@8.5.9) - autoprefixer: 10.4.27(postcss@8.5.9) + postcss-preset-env@11.2.1(postcss@8.5.10): + dependencies: + '@csstools/postcss-alpha-function': 2.0.4(postcss@8.5.10) + '@csstools/postcss-cascade-layers': 6.0.0(postcss@8.5.10) + '@csstools/postcss-color-function': 5.0.3(postcss@8.5.10) + '@csstools/postcss-color-function-display-p3-linear': 2.0.3(postcss@8.5.10) + '@csstools/postcss-color-mix-function': 4.0.3(postcss@8.5.10) + '@csstools/postcss-color-mix-variadic-function-arguments': 2.0.3(postcss@8.5.10) + '@csstools/postcss-content-alt-text': 3.0.0(postcss@8.5.10) + '@csstools/postcss-contrast-color-function': 3.0.3(postcss@8.5.10) + '@csstools/postcss-exponential-functions': 3.0.2(postcss@8.5.10) + '@csstools/postcss-font-format-keywords': 5.0.0(postcss@8.5.10) + '@csstools/postcss-font-width-property': 1.0.0(postcss@8.5.10) + '@csstools/postcss-gamut-mapping': 3.0.3(postcss@8.5.10) + '@csstools/postcss-gradients-interpolation-method': 6.0.3(postcss@8.5.10) + '@csstools/postcss-hwb-function': 5.0.3(postcss@8.5.10) + '@csstools/postcss-ic-unit': 5.0.0(postcss@8.5.10) + '@csstools/postcss-initial': 3.0.0(postcss@8.5.10) + '@csstools/postcss-is-pseudo-class': 6.0.0(postcss@8.5.10) + '@csstools/postcss-light-dark-function': 3.0.0(postcss@8.5.10) + '@csstools/postcss-logical-float-and-clear': 4.0.0(postcss@8.5.10) + '@csstools/postcss-logical-overflow': 3.0.0(postcss@8.5.10) + '@csstools/postcss-logical-overscroll-behavior': 3.0.0(postcss@8.5.10) + '@csstools/postcss-logical-resize': 4.0.0(postcss@8.5.10) + '@csstools/postcss-logical-viewport-units': 4.0.0(postcss@8.5.10) + '@csstools/postcss-media-minmax': 3.0.2(postcss@8.5.10) + '@csstools/postcss-media-queries-aspect-ratio-number-values': 4.0.0(postcss@8.5.10) + '@csstools/postcss-mixins': 1.0.0(postcss@8.5.10) + '@csstools/postcss-nested-calc': 5.0.0(postcss@8.5.10) + '@csstools/postcss-normalize-display-values': 5.0.1(postcss@8.5.10) + '@csstools/postcss-oklab-function': 5.0.3(postcss@8.5.10) + '@csstools/postcss-position-area-property': 2.0.0(postcss@8.5.10) + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.10) + '@csstools/postcss-property-rule-prelude-list': 2.0.0(postcss@8.5.10) + '@csstools/postcss-random-function': 3.0.2(postcss@8.5.10) + '@csstools/postcss-relative-color-syntax': 4.0.3(postcss@8.5.10) + '@csstools/postcss-scope-pseudo-class': 5.0.0(postcss@8.5.10) + '@csstools/postcss-sign-functions': 2.0.2(postcss@8.5.10) + '@csstools/postcss-stepped-value-functions': 5.0.2(postcss@8.5.10) + '@csstools/postcss-syntax-descriptor-syntax-production': 2.0.0(postcss@8.5.10) + '@csstools/postcss-system-ui-font-family': 2.0.0(postcss@8.5.10) + '@csstools/postcss-text-decoration-shorthand': 5.0.3(postcss@8.5.10) + '@csstools/postcss-trigonometric-functions': 5.0.2(postcss@8.5.10) + '@csstools/postcss-unset-value': 5.0.0(postcss@8.5.10) + autoprefixer: 10.5.0(postcss@8.5.10) browserslist: 4.28.2 - css-blank-pseudo: 8.0.1(postcss@8.5.9) - css-has-pseudo: 8.0.0(postcss@8.5.9) - css-prefers-color-scheme: 11.0.0(postcss@8.5.9) + css-blank-pseudo: 8.0.1(postcss@8.5.10) + css-has-pseudo: 8.0.0(postcss@8.5.10) + css-prefers-color-scheme: 11.0.0(postcss@8.5.10) cssdb: 8.8.0 - postcss: 8.5.9 - postcss-attribute-case-insensitive: 8.0.0(postcss@8.5.9) - postcss-clamp: 4.1.0(postcss@8.5.9) - postcss-color-functional-notation: 8.0.2(postcss@8.5.9) - postcss-color-hex-alpha: 11.0.0(postcss@8.5.9) - postcss-color-rebeccapurple: 11.0.0(postcss@8.5.9) - postcss-custom-media: 12.0.1(postcss@8.5.9) - postcss-custom-properties: 15.0.1(postcss@8.5.9) - postcss-custom-selectors: 9.0.1(postcss@8.5.9) - postcss-dir-pseudo-class: 10.0.0(postcss@8.5.9) - postcss-double-position-gradients: 7.0.0(postcss@8.5.9) - postcss-focus-visible: 11.0.0(postcss@8.5.9) - postcss-focus-within: 10.0.0(postcss@8.5.9) - postcss-font-variant: 5.0.0(postcss@8.5.9) - postcss-gap-properties: 7.0.0(postcss@8.5.9) - postcss-image-set-function: 8.0.0(postcss@8.5.9) - postcss-lab-function: 8.0.2(postcss@8.5.9) - postcss-logical: 9.0.0(postcss@8.5.9) - postcss-nesting: 14.0.0(postcss@8.5.9) - postcss-opacity-percentage: 3.0.0(postcss@8.5.9) - postcss-overflow-shorthand: 7.0.0(postcss@8.5.9) - postcss-page-break: 3.0.4(postcss@8.5.9) - postcss-place: 11.0.0(postcss@8.5.9) - postcss-pseudo-class-any-link: 11.0.0(postcss@8.5.9) - postcss-replace-overflow-wrap: 4.0.0(postcss@8.5.9) - postcss-selector-not: 9.0.0(postcss@8.5.9) - - postcss-pseudo-class-any-link@11.0.0(postcss@8.5.9): - dependencies: - postcss: 8.5.9 + postcss: 8.5.10 + postcss-attribute-case-insensitive: 8.0.0(postcss@8.5.10) + postcss-clamp: 4.1.0(postcss@8.5.10) + postcss-color-functional-notation: 8.0.3(postcss@8.5.10) + postcss-color-hex-alpha: 11.0.0(postcss@8.5.10) + postcss-color-rebeccapurple: 11.0.0(postcss@8.5.10) + postcss-custom-media: 12.0.1(postcss@8.5.10) + postcss-custom-properties: 15.0.1(postcss@8.5.10) + postcss-custom-selectors: 9.0.1(postcss@8.5.10) + postcss-dir-pseudo-class: 10.0.0(postcss@8.5.10) + postcss-double-position-gradients: 7.0.0(postcss@8.5.10) + postcss-focus-visible: 11.0.0(postcss@8.5.10) + postcss-focus-within: 10.0.0(postcss@8.5.10) + postcss-font-variant: 5.0.0(postcss@8.5.10) + postcss-gap-properties: 7.0.0(postcss@8.5.10) + postcss-image-set-function: 8.0.0(postcss@8.5.10) + postcss-lab-function: 8.0.3(postcss@8.5.10) + postcss-logical: 9.0.0(postcss@8.5.10) + postcss-nesting: 14.0.0(postcss@8.5.10) + postcss-opacity-percentage: 3.0.0(postcss@8.5.10) + postcss-overflow-shorthand: 7.0.0(postcss@8.5.10) + postcss-page-break: 3.0.4(postcss@8.5.10) + postcss-place: 11.0.0(postcss@8.5.10) + postcss-pseudo-class-any-link: 11.0.0(postcss@8.5.10) + postcss-replace-overflow-wrap: 4.0.0(postcss@8.5.10) + postcss-selector-not: 9.0.0(postcss@8.5.10) + + postcss-pseudo-class-any-link@11.0.0(postcss@8.5.10): + dependencies: + postcss: 8.5.10 postcss-selector-parser: 7.1.1 - postcss-replace-overflow-wrap@4.0.0(postcss@8.5.9): + postcss-replace-overflow-wrap@4.0.0(postcss@8.5.10): dependencies: - postcss: 8.5.9 + postcss: 8.5.10 postcss-resolve-nested-selector@0.1.6: {} - postcss-safe-parser@7.0.1(postcss@8.5.9): + postcss-safe-parser@7.0.1(postcss@8.5.10): dependencies: - postcss: 8.5.9 + postcss: 8.5.10 - postcss-selector-not@9.0.0(postcss@8.5.9): + postcss-selector-not@9.0.0(postcss@8.5.10): dependencies: - postcss: 8.5.9 + postcss: 8.5.10 postcss-selector-parser: 7.1.1 postcss-selector-parser@6.1.2: @@ -8668,7 +9307,7 @@ snapshots: picocolors: 0.2.1 source-map: 0.6.1 - postcss@8.5.9: + postcss@8.5.10: dependencies: nanoid: 3.3.11 picocolors: 1.1.1 @@ -8678,6 +9317,10 @@ snapshots: prelude-ls@1.2.1: {} + prettier@1.19.1: {} + + pretty-hrtime@1.0.3: {} + prop-types@15.8.1: dependencies: loose-envify: 1.4.0 @@ -8702,97 +9345,99 @@ snapshots: qs@6.5.5: {} + quansync@1.0.0: {} + queue-microtask@1.2.3: {} - react-clientside-effect@1.2.8(react@19.2.4): + react-clientside-effect@1.2.8(react@19.2.5): dependencies: '@babel/runtime': 7.29.2 - react: 19.2.4 + react: 19.2.5 - react-cookie@8.1.0(@types/react@19.2.14)(react@19.2.4): + react-cookie@8.1.0(@types/react@19.2.14)(react@19.2.5): dependencies: '@types/hoist-non-react-statics': 3.3.7(@types/react@19.2.14) hoist-non-react-statics: 3.3.2 - react: 19.2.4 + react: 19.2.5 universal-cookie: 8.1.0 transitivePeerDependencies: - '@types/react' - react-dom@19.2.4(react@19.2.4): + react-dom@19.2.5(react@19.2.5): dependencies: - react: 19.2.4 + react: 19.2.5 scheduler: 0.27.0 - react-focus-lock@2.13.7(@types/react@19.2.14)(react@19.2.4): + react-focus-lock@2.13.7(@types/react@19.2.14)(react@19.2.5): dependencies: '@babel/runtime': 7.29.2 focus-lock: 1.3.6 prop-types: 15.8.1 - react: 19.2.4 - react-clientside-effect: 1.2.8(react@19.2.4) - use-callback-ref: 1.3.3(@types/react@19.2.14)(react@19.2.4) - use-sidecar: 1.1.3(@types/react@19.2.14)(react@19.2.4) + react: 19.2.5 + react-clientside-effect: 1.2.8(react@19.2.5) + use-callback-ref: 1.3.3(@types/react@19.2.14)(react@19.2.5) + use-sidecar: 1.1.3(@types/react@19.2.14)(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 - react-focus-on@3.10.2(@types/react@19.2.14)(react@19.2.4): + react-focus-on@3.10.2(@types/react@19.2.14)(react@19.2.5): dependencies: aria-hidden: 1.2.6 - react: 19.2.4 - react-focus-lock: 2.13.7(@types/react@19.2.14)(react@19.2.4) - react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) - react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.4) + react: 19.2.5 + react-focus-lock: 2.13.7(@types/react@19.2.14)(react@19.2.5) + react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.5) + react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.5) tslib: 2.8.1 - use-sidecar: 1.1.3(@types/react@19.2.14)(react@19.2.4) + use-sidecar: 1.1.3(@types/react@19.2.14)(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 react-is@16.13.1: {} - react-remove-scroll-bar@2.3.8(@types/react@19.2.14)(react@19.2.4): + react-remove-scroll-bar@2.3.8(@types/react@19.2.14)(react@19.2.5): dependencies: - react: 19.2.4 - react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.4) + react: 19.2.5 + react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.5) tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.14 - react-remove-scroll@2.7.2(@types/react@19.2.14)(react@19.2.4): + react-remove-scroll@2.7.2(@types/react@19.2.14)(react@19.2.5): dependencies: - react: 19.2.4 - react-remove-scroll-bar: 2.3.8(@types/react@19.2.14)(react@19.2.4) - react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.4) + react: 19.2.5 + react-remove-scroll-bar: 2.3.8(@types/react@19.2.14)(react@19.2.5) + react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.5) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.2.14)(react@19.2.4) - use-sidecar: 1.1.3(@types/react@19.2.14)(react@19.2.4) + use-callback-ref: 1.3.3(@types/react@19.2.14)(react@19.2.5) + use-sidecar: 1.1.3(@types/react@19.2.14)(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 - react-router@7.14.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + react-router@7.14.2(react-dom@19.2.5(react@19.2.5))(react@19.2.5): dependencies: cookie: 1.1.1 - react: 19.2.4 + react: 19.2.5 set-cookie-parser: 2.7.2 optionalDependencies: - react-dom: 19.2.4(react@19.2.4) + react-dom: 19.2.5(react@19.2.5) - react-style-singleton@2.2.3(@types/react@19.2.14)(react@19.2.4): + react-style-singleton@2.2.3(@types/react@19.2.14)(react@19.2.5): dependencies: get-nonce: 1.0.1 - react: 19.2.4 + react: 19.2.5 tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.14 - react@19.2.4: {} + react@19.2.5: {} readdirp@4.1.2: {} reflect.getprototypeof@1.0.10: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.24.2 es-errors: 1.3.0 es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 @@ -8801,7 +9446,7 @@ snapshots: regexp.prototype.flags@1.5.4: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 define-properties: 1.2.1 es-errors: 1.3.0 get-proto: 1.0.1 @@ -8814,6 +9459,12 @@ snapshots: remove-trailing-spaces@1.0.9: {} + replace-in-file@3.4.4: + dependencies: + chalk: 2.4.2 + glob: 7.2.3 + yargs: 13.3.2 + request-promise-core@1.1.4(request@2.88.2): dependencies: lodash: 4.18.1 @@ -8853,6 +9504,8 @@ snapshots: require-from-string@2.0.2: {} + require-main-filename@2.0.0: {} + resolve-from@4.0.0: {} resolve-from@5.0.0: {} @@ -8865,8 +9518,9 @@ snapshots: dependencies: pattern-key-compare: 1.0.0 - resolve@1.22.11: + resolve@1.22.12: dependencies: + es-errors: 1.3.0 is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -8880,6 +9534,11 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + restore-cursor@2.0.0: + dependencies: + onetime: 2.0.1 + signal-exit: 3.0.7 + restore-cursor@5.1.0: dependencies: onetime: 7.0.0 @@ -8891,37 +9550,40 @@ snapshots: rfdc@1.4.1: {} - rolldown@1.0.0-rc.12(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2): + rolldown@1.0.0-rc.17: dependencies: - '@oxc-project/types': 0.122.0 - '@rolldown/pluginutils': 1.0.0-rc.12 + '@oxc-project/types': 0.127.0 + '@rolldown/pluginutils': 1.0.0-rc.17 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-rc.12 - '@rolldown/binding-darwin-arm64': 1.0.0-rc.12 - '@rolldown/binding-darwin-x64': 1.0.0-rc.12 - '@rolldown/binding-freebsd-x64': 1.0.0-rc.12 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.12 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.12 - '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.12 - '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.12 - '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.12 - '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.12 - '@rolldown/binding-linux-x64-musl': 1.0.0-rc.12 - '@rolldown/binding-openharmony-arm64': 1.0.0-rc.12 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.12(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) - '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.12 - '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.12 - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' + '@rolldown/binding-android-arm64': 1.0.0-rc.17 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.17 + '@rolldown/binding-darwin-x64': 1.0.0-rc.17 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.17 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.17 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.17 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.17 + '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.17 + '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.17 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.17 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.17 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.17 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.17 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.17 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.17 + + run-async@2.4.1: {} run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - safe-array-concat@1.1.3: + rxjs@6.6.7: dependencies: - call-bind: 1.0.8 + tslib: 1.14.1 + + safe-array-concat@1.1.4: + dependencies: + call-bind: 1.0.9 call-bound: 1.0.4 get-intrinsic: 1.3.0 has-symbols: 1.1.0 @@ -8942,14 +9604,14 @@ snapshots: safer-buffer@2.1.2: {} - sanitize-html@2.17.2: + sanitize-html@2.17.3: dependencies: deepmerge: 4.3.1 escape-string-regexp: 4.0.0 htmlparser2: 10.1.0 is-plain-object: 5.0.0 parse-srcset: 1.0.2 - postcss: 8.5.9 + postcss: 8.5.10 sanitize.css@13.0.0: {} @@ -8969,6 +9631,8 @@ snapshots: tslib: 2.8.1 upper-case-first: 2.0.2 + set-blocking@2.0.0: {} + set-cookie-parser@2.7.2: {} set-function-length@1.2.2: @@ -9001,7 +9665,7 @@ snapshots: shell-quote@1.8.3: {} - side-channel-list@1.0.0: + side-channel-list@1.0.1: dependencies: es-errors: 1.3.0 object-inspect: 1.13.4 @@ -9025,7 +9689,7 @@ snapshots: dependencies: es-errors: 1.3.0 object-inspect: 1.13.4 - side-channel-list: 1.0.0 + side-channel-list: 1.0.1 side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 @@ -9033,6 +9697,16 @@ snapshots: signal-exit@4.1.0: {} + simple-git@3.36.0: + dependencies: + '@kwsites/file-exists': 1.1.1 + '@kwsites/promise-deferred': 1.1.1 + '@simple-git/args-pathspec': 1.0.3 + '@simple-git/argv-parser': 1.1.1 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + slash@3.0.0: {} slash@5.1.0: {} @@ -9068,6 +9742,8 @@ snapshots: dependencies: tslib: 2.8.1 + sprintf-js@1.0.3: {} + sshpk@1.18.0: dependencies: asn1: 0.2.6 @@ -9093,6 +9769,17 @@ snapshots: string-template@1.0.0: {} + string-width@2.1.1: + dependencies: + is-fullwidth-code-point: 2.0.0 + strip-ansi: 4.0.0 + + string-width@3.1.0: + dependencies: + emoji-regex: 7.0.3 + is-fullwidth-code-point: 2.0.0 + strip-ansi: 5.2.0 + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -9112,16 +9799,16 @@ snapshots: string.prototype.includes@2.0.1: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.24.2 string.prototype.matchall@4.0.12: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.24.2 es-errors: 1.3.0 es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 @@ -9135,31 +9822,39 @@ snapshots: string.prototype.repeat@1.0.0: dependencies: define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.24.2 string.prototype.trim@1.2.10: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 define-data-property: 1.1.4 define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.24.2 es-object-atoms: 1.1.1 has-property-descriptors: 1.0.2 string.prototype.trimend@1.0.9: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 define-properties: 1.2.1 es-object-atoms: 1.1.1 string.prototype.trimstart@1.0.8: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 define-properties: 1.2.1 es-object-atoms: 1.1.1 + strip-ansi@4.0.0: + dependencies: + ansi-regex: 3.0.1 + + strip-ansi@5.2.0: + dependencies: + ansi-regex: 4.1.1 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -9174,16 +9869,16 @@ snapshots: strip-json-comments@5.0.3: {} - stylelint-config-concentric@2.0.2(stylelint@17.6.0(typescript@6.0.2)): + stylelint-config-concentric@2.0.2(stylelint@17.9.0(typescript@6.0.3)): dependencies: - stylelint: 17.6.0(typescript@6.0.2) - stylelint-order: 1.0.0(stylelint@17.6.0(typescript@6.0.2)) + stylelint: 17.9.0(typescript@6.0.3) + stylelint-order: 1.0.0(stylelint@17.9.0(typescript@6.0.3)) - stylelint-config-recommended@18.0.0(stylelint@17.6.0(typescript@6.0.2)): + stylelint-config-recommended@18.0.0(stylelint@17.9.0(typescript@6.0.3)): dependencies: - stylelint: 17.6.0(typescript@6.0.2) + stylelint: 17.9.0(typescript@6.0.3) - stylelint-no-unused-selectors@1.0.40(stylelint@17.6.0(typescript@6.0.2)): + stylelint-no-unused-selectors@1.0.40(stylelint@17.9.0(typescript@6.0.3)): dependencies: '@babel/parser': 7.29.2 '@babel/traverse': 7.29.0 @@ -9193,7 +9888,7 @@ snapshots: postcss-resolve-nested-selector: 0.1.6 postcss-selector-parser: 6.1.2 string-template: 1.0.0 - stylelint: 17.6.0(typescript@6.0.2) + stylelint: 17.9.0(typescript@6.0.3) typescript: 3.9.10 transitivePeerDependencies: - bufferutil @@ -9201,30 +9896,30 @@ snapshots: - supports-color - utf-8-validate - stylelint-order@1.0.0(stylelint@17.6.0(typescript@6.0.2)): + stylelint-order@1.0.0(stylelint@17.9.0(typescript@6.0.3)): dependencies: lodash: 4.18.1 postcss: 7.0.39 postcss-sorting: 4.1.0 - stylelint: 17.6.0(typescript@6.0.2) + stylelint: 17.9.0(typescript@6.0.3) - stylelint-value-no-unknown-custom-properties@6.1.1(stylelint@17.6.0(typescript@6.0.2)): + stylelint-value-no-unknown-custom-properties@6.1.1(stylelint@17.9.0(typescript@6.0.3)): dependencies: postcss-value-parser: 4.2.0 - resolve: 1.22.11 - stylelint: 17.6.0(typescript@6.0.2) + resolve: 1.22.12 + stylelint: 17.9.0(typescript@6.0.3) - stylelint@17.6.0(typescript@6.0.2): + stylelint@17.9.0(typescript@6.0.3): dependencies: - '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-calc': 3.2.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-syntax-patches-for-csstree': 1.1.2(css-tree@3.2.1) + '@csstools/css-syntax-patches-for-csstree': 1.1.3(css-tree@3.2.1) '@csstools/css-tokenizer': 4.0.0 '@csstools/media-query-list-parser': 5.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/selector-resolve-nested': 4.0.0(postcss-selector-parser@7.1.1) '@csstools/selector-specificity': 6.0.0(postcss-selector-parser@7.1.1) colord: 2.9.3 - cosmiconfig: 9.0.1(typescript@6.0.2) + cosmiconfig: 9.0.1(typescript@6.0.3) css-functions-list: 3.3.3 css-tree: 3.2.1 debug: 4.4.3 @@ -9243,8 +9938,8 @@ snapshots: micromatch: 4.0.8 normalize-path: 3.0.0 picocolors: 1.1.1 - postcss: 8.5.9 - postcss-safe-parser: 7.0.1(postcss@8.5.9) + postcss: 8.5.10 + postcss-safe-parser: 7.0.1(postcss@8.5.10) postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 string-width: 8.2.0 @@ -9258,6 +9953,10 @@ snapshots: supports-color@10.2.2: {} + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -9293,11 +9992,15 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 + terminal-size@4.0.1: {} + + through@2.3.8: {} + timeout-signal@2.0.0: {} tiny-invariant@1.3.3: {} - tinyglobby@0.2.15: + tinyglobby@0.2.16: dependencies: fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 @@ -9306,6 +10009,10 @@ snapshots: dependencies: tslib: 2.8.1 + tmp@0.0.33: + dependencies: + os-tmpdir: 1.0.2 + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -9325,16 +10032,12 @@ snapshots: dependencies: punycode: 2.3.1 - ts-api-utils@2.5.0(typescript@6.0.2): + ts-api-utils@2.5.0(typescript@6.0.3): dependencies: - typescript: 6.0.2 + typescript: 6.0.3 ts-log@2.2.7: {} - tsconfck@3.1.6(typescript@6.0.2): - optionalDependencies: - typescript: 6.0.2 - tsconfig-paths@3.15.0: dependencies: '@types/json5': 0.0.29 @@ -9342,7 +10045,7 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 - tslib@2.6.3: {} + tslib@1.14.1: {} tslib@2.8.1: {} @@ -9368,7 +10071,7 @@ snapshots: typed-array-byte-length@1.0.3: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 for-each: 0.3.5 gopd: 1.2.0 has-proto: 1.2.0 @@ -9377,7 +10080,7 @@ snapshots: typed-array-byte-offset@1.0.4: dependencies: available-typed-arrays: 1.0.7 - call-bind: 1.0.8 + call-bind: 1.0.9 for-each: 0.3.5 gopd: 1.2.0 has-proto: 1.2.0 @@ -9386,29 +10089,29 @@ snapshots: typed-array-length@1.0.7: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.9 for-each: 0.3.5 gopd: 1.2.0 is-typed-array: 1.1.15 possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2): + typescript-eslint@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.58.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2))(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2) - '@typescript-eslint/parser': 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2) - '@typescript-eslint/typescript-estree': 8.58.0(typescript@6.0.2) - '@typescript-eslint/utils': 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/eslint-plugin': 8.59.0(@typescript-eslint/parser@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3))(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/parser': 8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.59.0(typescript@6.0.3) + '@typescript-eslint/utils': 8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3) eslint: 9.39.4(jiti@2.6.1) - typescript: 6.0.2 + typescript: 6.0.3 transitivePeerDependencies: - supports-color typescript@3.9.10: {} - typescript@6.0.2: {} + typescript@6.0.3: {} - unbash@2.2.0: {} + unbash@3.0.0: {} unbox-primitive@1.1.0: dependencies: @@ -9419,6 +10122,19 @@ snapshots: unc-path-regex@0.1.2: {} + unconfig-core@7.5.0: + dependencies: + '@quansync/fs': 1.0.0 + quansync: 1.0.0 + + unconfig@7.5.0: + dependencies: + '@quansync/fs': 1.0.0 + defu: 6.1.7 + jiti: 2.6.1 + quansync: 1.0.0 + unconfig-core: 7.5.0 + undici-types@7.16.0: {} unicorn-magic@0.3.0: {} @@ -9477,23 +10193,23 @@ snapshots: urlpattern-polyfill@10.1.0: {} - urql@5.0.1(@urql/core@6.0.1(graphql@16.13.2))(react@19.2.4): + urql@5.0.2(@urql/core@6.0.1(graphql@16.13.2))(react@19.2.5): dependencies: '@urql/core': 6.0.1(graphql@16.13.2) - react: 19.2.4 + react: 19.2.5 wonka: 6.3.6 - use-callback-ref@1.3.3(@types/react@19.2.14)(react@19.2.4): + use-callback-ref@1.3.3(@types/react@19.2.14)(react@19.2.5): dependencies: - react: 19.2.4 + react: 19.2.5 tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.14 - use-sidecar@1.1.3(@types/react@19.2.14)(react@19.2.4): + use-sidecar@1.1.3(@types/react@19.2.14)(react@19.2.5): dependencies: detect-node-es: 1.1.0 - react: 19.2.4 + react: 19.2.5 tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.14 @@ -9508,7 +10224,7 @@ snapshots: core-util-is: 1.0.2 extsprintf: 1.3.0 - vite-plugin-checker@0.13.0(eslint@9.39.4(jiti@2.6.1))(meow@14.1.0)(optionator@0.9.4)(stylelint@17.6.0(typescript@6.0.2))(typescript@6.0.2)(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3)): + vite-plugin-checker@0.13.0(eslint@9.39.4(jiti@2.6.1))(meow@14.1.0)(optionator@0.9.4)(stylelint@17.9.0(typescript@6.0.3))(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3)): dependencies: '@babel/code-frame': 7.29.0 chokidar: 4.0.3 @@ -9517,52 +10233,39 @@ snapshots: picomatch: 4.0.4 proper-lockfile: 4.1.2 tiny-invariant: 1.3.3 - tinyglobby: 0.2.15 - vite: 8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3) + tinyglobby: 0.2.16 + vite: 8.0.10(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3) vscode-uri: 3.1.0 optionalDependencies: eslint: 9.39.4(jiti@2.6.1) meow: 14.1.0 optionator: 0.9.4 - stylelint: 17.6.0(typescript@6.0.2) - typescript: 6.0.2 + stylelint: 17.9.0(typescript@6.0.3) + typescript: 6.0.3 - vite-plugin-svgr@5.2.0(typescript@6.0.2)(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3)): + vite-plugin-svgr@5.2.0(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3)): dependencies: '@rollup/pluginutils': 5.3.0 - '@svgr/core': 8.1.0(typescript@6.0.2) - '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@6.0.2)) - vite: 8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3) + '@svgr/core': 8.1.0(typescript@6.0.3) + '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@6.0.3)) + vite: 8.0.10(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3) transitivePeerDependencies: - rollup - supports-color - typescript - vite-tsconfig-paths@6.1.1(typescript@6.0.2)(vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3)): - dependencies: - debug: 4.4.3 - globrex: 0.1.2 - tsconfck: 3.1.6(typescript@6.0.2) - vite: 8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3) - transitivePeerDependencies: - - supports-color - - typescript - - vite@8.0.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3): + vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)(yaml@2.8.3): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 - postcss: 8.5.9 - rolldown: 1.0.0-rc.12(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) - tinyglobby: 0.2.15 + postcss: 8.5.10 + rolldown: 1.0.0-rc.17 + tinyglobby: 0.2.16 optionalDependencies: '@types/node': 24.12.2 fsevents: 2.3.3 jiti: 2.6.1 yaml: 2.8.3 - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' vscode-uri@3.1.0: {} @@ -9578,6 +10281,10 @@ snapshots: walk-up-path@4.0.0: {} + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + web-streams-polyfill@3.3.3: {} webidl-conversions@4.0.2: {} @@ -9627,10 +10334,12 @@ snapshots: is-weakmap: 2.0.2 is-weakset: 2.0.4 + which-module@2.0.1: {} + which-typed-array@1.1.20: dependencies: available-typed-arrays: 1.0.7 - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 for-each: 0.3.5 get-proto: 1.0.1 @@ -9649,6 +10358,18 @@ snapshots: word-wrap@1.2.5: {} + wrap-ansi@10.0.0: + dependencies: + ansi-styles: 6.2.3 + string-width: 8.2.0 + strip-ansi: 7.2.0 + + wrap-ansi@5.1.0: + dependencies: + ansi-styles: 3.2.1 + string-width: 3.1.0 + strip-ansi: 5.2.0 + wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 @@ -9667,10 +10388,23 @@ snapshots: string-width: 7.2.0 strip-ansi: 7.2.0 + wrappy@1.0.2: {} + write-file-atomic@7.0.1: dependencies: signal-exit: 4.1.0 + write-yaml@1.0.0: + dependencies: + extend-shallow: 2.0.1 + js-yaml: 3.14.2 + write: 0.3.3 + + write@0.3.3: + dependencies: + fs-exists-sync: 0.1.0 + mkdirp: 0.5.6 + ws@7.5.10: {} ws@8.20.0: {} @@ -9679,14 +10413,34 @@ snapshots: xmlchars@2.2.0: {} + y18n@4.0.3: {} + y18n@5.0.8: {} yallist@3.1.1: {} yaml@2.8.3: {} + yargs-parser@13.1.2: + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + yargs-parser@21.1.1: {} + yargs@13.3.2: + dependencies: + cliui: 5.0.0 + find-up: 3.0.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 3.1.0 + which-module: 2.0.1 + y18n: 4.0.3 + yargs-parser: 13.1.2 + yargs@17.7.2: dependencies: cliui: 8.0.1 diff --git a/stylelint.config.js b/stylelint.config.js index a2125f7..4b4e399 100644 --- a/stylelint.config.js +++ b/stylelint.config.js @@ -1,5 +1,6 @@ import path from 'path'; +// eslint-disable-next-line no-undef const __filename = new URL(import.meta.url).pathname; const __dirname = path.dirname(__filename); diff --git a/tsconfig.app.json b/tsconfig.app.json index 6f824de..f1e3191 100644 --- a/tsconfig.app.json +++ b/tsconfig.app.json @@ -21,7 +21,6 @@ "types": ["vite/client"], "skipLibCheck": true, - /* Bundler mode */ "moduleResolution": "bundler", "allowImportingTsExtensions": true, "verbatimModuleSyntax": true, @@ -29,11 +28,10 @@ "noEmit": true, "jsx": "react-jsx", - /* Linting */ "strict": true, "noUnusedLocals": false, "noUnusedParameters": true, - "erasableSyntaxOnly": true, + "erasableSyntaxOnly": false, "noFallthroughCasesInSwitch": true }, "include": ["app"] diff --git a/tsconfig.node.json b/tsconfig.node.json index d3c52ea..0fbee78 100644 --- a/tsconfig.node.json +++ b/tsconfig.node.json @@ -7,18 +7,16 @@ "types": ["node"], "skipLibCheck": true, - /* Bundler mode */ "moduleResolution": "bundler", "allowImportingTsExtensions": true, "verbatimModuleSyntax": true, "moduleDetection": "force", "noEmit": true, - /* Linting */ "noUnusedLocals": true, "noUnusedParameters": true, "erasableSyntaxOnly": true, "noFallthroughCasesInSwitch": true }, - "include": ["vite.config.ts"] + "include": ["vite.config.ts", "env.ts", "env.d.ts"] } diff --git a/vite.config.ts b/vite.config.ts index 94d722d..529b989 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -4,8 +4,7 @@ import { execSync } from 'child_process'; import { defineConfig } from 'vite'; import checker from 'vite-plugin-checker'; import svgr from 'vite-plugin-svgr'; -import tsconfigPaths from 'vite-tsconfig-paths'; - +import { ValidateEnv as validateEnv } from '@togglecorp/vite-plugin-validate-env'; /* Get commit hash */ function getCommitHash(): string { if (process.env.APP_COMMIT_HASH) { @@ -42,10 +41,15 @@ export default defineConfig(({ mode }) => { }) : undefined, svgr(), + validateEnv({ + configFile: 'env', + }), react(), - tsconfigPaths(), babel({ presets: [reactCompilerPreset()] }), - ], + ], + resolve: { + tsconfigPaths: true // Add this instead + }, css: { devSourcemap: isProd, modules: { diff --git a/web-app-serve/.gitignore b/web-app-serve/.gitignore new file mode 100644 index 0000000..4c49bd7 --- /dev/null +++ b/web-app-serve/.gitignore @@ -0,0 +1 @@ +.env diff --git a/web-app-serve/docker-compose.yml b/web-app-serve/docker-compose.yml new file mode 100644 index 0000000..89ac405 --- /dev/null +++ b/web-app-serve/docker-compose.yml @@ -0,0 +1,12 @@ +name: ercs-eoc-serve + +services: + web-app-serve: + build: + context: ../ + target: web-app-serve + environment: + APPLY_CONFIG__ENABLE_DEBUG: true + env_file: .env + ports: + - '8050:80' \ No newline at end of file From 957bf7aee0586e97639d7efe1b6c4bef75aecc9c Mon Sep 17 00:00:00 2001 From: crssstha Date: Tue, 21 Apr 2026 16:29:47 +0545 Subject: [PATCH 07/13] feat(home): added active operation map --- app/App.tsx | 9 + app/Root/index.tsx | 38 +- app/components/ActiveOperation/index.tsx | 571 ++++++++++++++++++ app/components/ActiveOperation/type.ts | 128 ++++ app/components/ActiveOperation/utils.ts | 183 ++++++ app/components/BaseMap/index.tsx | 121 ++++ app/components/BaseMap/styles.module.css | 9 + app/components/GlobalMap/index.tsx | 177 ++++++ app/components/GoMapContainer/index.tsx | 345 +++++++++++ .../GoMapContainer/styles.module.css | 75 +++ app/components/MapPopup/index.tsx | 76 +++ app/components/MapPopup/styles.module.css | 46 ++ app/declarations/turf.d.ts | 1 + app/hooks/useCountryRaw.ts | 74 +++ app/hooks/useInputState.ts | 43 ++ app/main.tsx | 1 + app/utils/constants.ts | 69 +++ app/utils/map.ts | 54 ++ app/utils/requestHelper.ts | 99 +++ app/utils/tableHelpers/index.ts | 179 ++++++ app/utils/tableHelpers/styles.module.css | 31 + app/views/Home/index.tsx | 7 +- package.json | 8 + pnpm-lock.yaml | 345 ++++++++++- 24 files changed, 2675 insertions(+), 14 deletions(-) create mode 100644 app/components/ActiveOperation/index.tsx create mode 100644 app/components/ActiveOperation/type.ts create mode 100644 app/components/ActiveOperation/utils.ts create mode 100644 app/components/BaseMap/index.tsx create mode 100644 app/components/BaseMap/styles.module.css create mode 100644 app/components/GlobalMap/index.tsx create mode 100644 app/components/GoMapContainer/index.tsx create mode 100644 app/components/GoMapContainer/styles.module.css create mode 100644 app/components/MapPopup/index.tsx create mode 100644 app/components/MapPopup/styles.module.css create mode 100644 app/declarations/turf.d.ts create mode 100644 app/hooks/useCountryRaw.ts create mode 100644 app/hooks/useInputState.ts create mode 100644 app/utils/constants.ts create mode 100644 app/utils/map.ts create mode 100644 app/utils/requestHelper.ts create mode 100644 app/utils/tableHelpers/index.ts create mode 100644 app/utils/tableHelpers/styles.module.css diff --git a/app/App.tsx b/app/App.tsx index e19254f..9f0c187 100644 --- a/app/App.tsx +++ b/app/App.tsx @@ -2,6 +2,7 @@ import { createBrowserRouter, RouterProvider, } from 'react-router'; +import mapboxgl from 'mapbox-gl'; import type { RouteConfig } from '#root/config/routes.ts'; import routes from '#root/config/routes.ts'; @@ -30,6 +31,14 @@ function mapRoute(routeConfig: RouteConfig) { }; } +mapboxgl.accessToken = import.meta.env.APP_MAPBOX_TOKEN; +mapboxgl.setRTLTextPlugin( + 'https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-rtl-text/v0.2.3/mapbox-gl-rtl-text.js', + // eslint-disable-next-line no-console + (err) => { console.error(err); }, + true, +); + const router = createBrowserRouter([ { errorElement: , diff --git a/app/Root/index.tsx b/app/Root/index.tsx index 97dfd1e..dd2920b 100644 --- a/app/Root/index.tsx +++ b/app/Root/index.tsx @@ -1,11 +1,13 @@ import { Suspense, + useMemo, useState, } from 'react'; import { Cookies } from 'react-cookie'; import { Outlet } from 'react-router'; import { AlertContainer } from '@ifrc-go/ui'; import { AlertContext } from '@ifrc-go/ui/contexts'; +import { RequestContext } from '@togglecorp/toggle-request'; import { cacheExchange } from '@urql/exchange-graphcache'; import { Client, @@ -16,6 +18,12 @@ import { import UserContext, { type UserContextInterface } from '#contexts/UserContext'; import type { MeQuery } from '#generated/types/graphql'; import useAlertContextProviderValue from '#hooks/useAlertContextProviderValue'; +import { + processError, + processOptions, + processResponse, + processUrls, +} from '#utils/requestHelper'; const COOKIE_NAME = `ERCS-${import.meta.env.APP_ENVIRONMENT}-CSRFTOKEN`; const GRAPHQL_ENDPOINT = `${import.meta.env.APP_GRAPHQL_ENDPOINT}/graphql/`; @@ -40,25 +48,33 @@ const gqlClient = new Client({ function Root() { const [user, setUser] = useState(); const authenticated = !!user; - // eslint-disable-next-line react/jsx-no-constructed-context-values - const userContext: UserContextInterface = { + const userContext: UserContextInterface = useMemo(() => ({ authenticated, user, setUser, + }), [authenticated, user]); - }; + const requestContextValue = useMemo(() => ({ + transformUrl: processUrls, + transformOptions: processOptions, + transformResponse: processResponse, + transformError: processError, + }), []); const alertContextValue = useAlertContextProviderValue(); return ( - - - - - - - - + + + + + + + + + + + ); } diff --git a/app/components/ActiveOperation/index.tsx b/app/components/ActiveOperation/index.tsx new file mode 100644 index 0000000..98a78b8 --- /dev/null +++ b/app/components/ActiveOperation/index.tsx @@ -0,0 +1,571 @@ +import { + useMemo, + useState, +} from 'react'; +import { + Button, + Container, + DateInput, + LegendItem, + ListView, + Pager, + RadioInput, + SelectInput, + Table, + TextOutput, +} from '@ifrc-go/ui'; +import { SortContext } from '@ifrc-go/ui/contexts'; +import { + createDateColumn, + createProgressColumn, + createStringColumn, + getPercentage, + hasSomeDefinedValue, + resolveToComponent, + sumSafe, +} from '@ifrc-go/ui/utils'; +import { + isDefined, + isNotDefined, + listToGroupList, + mapToMap, + unique, +} from '@togglecorp/fujs'; +import { + MapBounds, + MapLayer, + MapSource, +} from '@togglecorp/re-map'; +import { useRequest } from '@togglecorp/toggle-request'; + +import GlobalMap, { type AdminZeroFeatureProperties } from '#components/GlobalMap'; +import GoMapContainer from '#components/GoMapContainer'; +import Link from '#components/Link'; +import MapPopup from '#components/MapPopup'; +import useFilterState from '#hooks/useFilterState'; +import useInputState from '#hooks/useInputState'; +import { + DEFAULT_MAP_PADDING, + DURATION_MAP_ZOOM, +} from '#utils/constants'; +import { getCountryListBoundingBox } from '#utils/map'; +import { + createAppealCodeColumn, + createBudgetColumn, + createDisasterTypeColumn, + createEventColumn, +} from '#utils/tableHelpers'; + +import type { + AppealListItem, + AppealResponse, + AppealTypeOption, + ClickedPoint, + CountryDataTypeResponse, + EmergencyTypeListResponse, +} from './type'; +import { + APPEAL_TYPE_DREF, + APPEAL_TYPE_EAP, + APPEAL_TYPE_EMERGENCY, + APPEAL_TYPE_MULTIPLE, + appealKeySelector, + appealTypeKeySelector, + appealTypeLabelSelector, + basePointLayerOptions, + COLOR_DREF, + COLOR_EAP, + COLOR_EMERGENCY_APPEAL, + COLOR_MULTIPLE_TYPES, + optionKeySelector, + optionLabelSelector, + outerCircleLayerOptionsForFinancialRequirements, + outerCircleLayerOptionsForPeopleTargeted, + type ScaleOption, +} from './utils'; + +const sourceOptions: mapboxgl.GeoJSONSourceRaw = { + type: 'geojson', +}; + +const appealTypeOptions : AppealTypeOption[] = [ + { + key: 0, + value: 'DREF', + }, + { + key: 1, + value: 'Emergency Appeal', + }, + { + key: 2, + value: 'International Appeal', + }, + { + key: 3, + value: 'Forecast Based Action', + }, +]; + +const now = new Date().toISOString(); + +const IfrcGoUrl = import.meta.env.APP_GO_URL; + +const countryId = 65; // ethiopia + +function ActiveOperation() { + const [scaleBy, setScaleBy] = useInputState('peopleTargeted'); + const [presentationMode, setPresentationMode] = useState(false); + const { + filter, + filtered, + limit, + page, + rawFilter, + setFilter, + setFilterField, + setPage, + sortState, + offset, + } = useFilterState<{ + appeal?: AppealTypeOption['key'], + district?: number[], + displacement?: number, + startDateAfter?: string, + startDateBefore?: string, + }>({ + filter: {}, + pageSize: 5, + }); + + const isFiltered = hasSomeDefinedValue(rawFilter); + const { response: countryData } = useRequest( + { + url: '/api/v2/country/', + method: 'GET', + query: { id: countryId }, + pathVariables: {}, + }, + ); + + const queryParams = { + atype: filter.appeal, + dtype: filter.displacement, + district: hasSomeDefinedValue(filter.district) ? filter.district : undefined, + end_date__gt: now, + start_date__gte: filter.startDateAfter, + start_date__lte: filter.startDateBefore, + limit, + offset, + region: undefined, + country: countryId, + }; + const [ + clickedPoint, + setClickedPoint, + ] = useState(); + + const { response, pending, error } = useRequest( + { + url: '/api/v2/appeal/', + method: 'GET', + query: queryParams, + skip: isNotDefined(countryData), + pathVariables: {}, + }, + ); + + const { response: disasterResponse } = useRequest( + { + url: '/api/v2/disaster_type/', + method: 'GET', + pathVariables: {}, + }, + ); + + const countryGroupedAppeal = listToGroupList( + response?.results ?? [], + (appeal) => appeal.country.iso3 ?? '', + ); + + const countryCentroidGeoJson = (): GeoJSON.FeatureCollection => { + const countryToOperationTypeMap = mapToMap( + countryGroupedAppeal, + (key) => key, + (appealList) => { + const uniqueAppealList = unique( + appealList.map((appeal) => appeal.atype), + ); + + const peopleTargeted = sumSafe( + appealList.map((appeal) => appeal.num_beneficiaries), + ); + const financialRequirements = sumSafe( + appealList.map((appeal) => appeal.amount_requested), + ); + + if (uniqueAppealList.length > 1) { + return { + appealType: APPEAL_TYPE_MULTIPLE, + peopleTargeted, + financialRequirements, + }; + } + + return { + appealType: uniqueAppealList[0], + peopleTargeted, + financialRequirements, + }; + }, + ); + + const iso3 = countryData?.results[0].iso3; + const operation = iso3 ? countryToOperationTypeMap[iso3] : undefined; + + return { + type: 'FeatureCollection' as const, + features: (countryData?.results[0] ? [countryData.results[0]] : []) + ?.map((country) => { + if ( + (!country.independent && isNotDefined(country.record_type)) + || isNotDefined(country.centroid) + || isNotDefined(country.iso3) + ) { + return undefined; + } + + if (isNotDefined(operation)) { + return undefined; + } + + return { + type: 'Feature' as const, + geometry: country.centroid as { + type: 'Point', + coordinates: [number, number], + }, + properties: { + id: country.iso3, + appealType: operation.appealType, + peopleTargeted: operation.peopleTargeted, + financialRequirements: operation.financialRequirements, + }, + }; + }).filter(isDefined) ?? [], + }; + }; + + const scaleOptions: ScaleOption[] = ([ + { value: 'peopleTargeted', label: '# of people targeted' }, + { value: 'financialRequirements', label: 'IFRC financial requirements' }, + ]); + + const legendOptions = ([ + { + value: APPEAL_TYPE_EMERGENCY, + label: 'Emergency Appeal', + color: COLOR_EMERGENCY_APPEAL, + }, + { + value: APPEAL_TYPE_DREF, + label: 'DREF', + color: COLOR_DREF, + }, + { + value: APPEAL_TYPE_EAP, + label: 'Early Action Protocol Activation', + color: COLOR_EAP, + }, + { + value: APPEAL_TYPE_MULTIPLE, + label: 'Multiple Types', + color: COLOR_MULTIPLE_TYPES, + }, + ]); + + const bbox = getCountryListBoundingBox(countryData?.results ?? []); + + const heading = resolveToComponent( + 'Active Operations Map ({numAppeals})', + { numAppeals: response?.count ?? 0 }, + ); + + const popupDetails = clickedPoint + ? countryGroupedAppeal[clickedPoint.featureProperties.iso3] + : undefined; + + const handlePointClose = () => { + setClickedPoint(undefined); + }; + + const handleCountryClick = ( + featureProperties: AdminZeroFeatureProperties, + lngLat: mapboxgl.LngLatLike, + ) => { + setClickedPoint({ + featureProperties, + lngLat, + }); + + return true; + }; + + const columns = [ + createDateColumn( + 'start_date', + 'Start Date', + (item) => item.start_date, + { sortable: true }, + ), + createStringColumn( + 'atype', + 'Appeal Type', + (item) => item.atype_display, + { sortable: true }, + ), + createAppealCodeColumn( + 'code', + 'Code', + (item) => item.code, + ), + createEventColumn( + 'operation', + 'operation', + (item) => item.name, + (item) => ({ + href: `https://goadmin-stage.ifrc.org/emergencies/${item.event}/details`, + external: true, + }), + ), + createDisasterTypeColumn( + 'dtype', + 'Disater Type', + (item) => item.dtype?.name, + { sortable: true }, + ), + createBudgetColumn( + 'amount_requested', + 'Amount Requested', + (item) => item.amount_requested, + { sortable: true }, + ), + createProgressColumn( + 'amount_funded', + 'Amount funded', + // FIXME: use progress function + (item) => ( + getPercentage( + item.amount_funded, + item.amount_requested, + ) + ), + { sortable: true }, + ), + ].filter(isDefined); + + const handleClearFiltersButtonClick = (() => { + setFilter({}); + }); + + const disasterTypes = disasterResponse?.results.map((disaster) => ({ + key: disaster.id, + value: disaster.name, + })) ?? []; + + return ( + + View all Emergencies + + )} + filters={( + <> + + + + + + + )} + footerActions={( + + )} + > + + + + + {legendOptions.map((legendItem) => ( + + ))} + + + )} + /> + + + + + {clickedPoint?.lngLat && ( + + + {popupDetails?.map( + (appeal) => ( + + + + + + + + ), + )} + + + )} + {isDefined(bbox) && ( + + )} + + +
+ + + ); +} + +export default ActiveOperation; diff --git a/app/components/ActiveOperation/type.ts b/app/components/ActiveOperation/type.ts new file mode 100644 index 0000000..186837a --- /dev/null +++ b/app/components/ActiveOperation/type.ts @@ -0,0 +1,128 @@ +import type { AdminZeroFeatureProperties } from '#components/GlobalMap'; + + interface PaginatedResponse { + count: number; + next: string | null; + previous: string | null; + results: T[]; +} + +export type AppealResponse = PaginatedResponse; + +export interface DisasterResponse { + aid: string; + id: string; + name: string; + dtype: DisasterType; + atype: number; + atype_display: string; + status: number; + status_display: string; + code: string; + sector: string; + num_beneficiaries: number; + amount_requested: number; + amount_funded: number; + start_date: string; + end_date: string; + real_data_update: string; + created_at: string; + modified_at: string; + event: number | null; + needs_confirmation: boolean; + country: Country; + region: Region; +} + +export interface DisasterType { + id: number; + summary: string; + name: string; + translation_module_original_language: string; +} + +export interface Country { + iso: string; + iso3: string; + id: number; + record_type: number; + record_type_display: string; + region: number; + independent: boolean; + is_deprecated: boolean; + fdrs: string; + average_household_size: number | null; + society_name: string; + name: string; + translation_module_original_language: string; +} + +export interface Region { + name: number; + id: number; + region_name: string; + label: string; + translation_module_original_language: string; +} + +export type AppealTypeOption = { + key: number; + value: string; +}; + +export type AppealListItem = NonNullable[number]; + +export interface ClickedPoint { + featureProperties: AdminZeroFeatureProperties; + lngLat: mapboxgl.LngLatLike; +} + +type EmergencyType = { + id: number; + name: string; + summary: string; + translation_module_original_language: string; +}; + +export type EmergencyTypeListResponse = PaginatedResponse; + +type GeoPolygon = { + type: 'Polygon'; + coordinates: number[][][]; +}; + +type GeoPoint = { + type: 'Point'; + coordinates: number[]; +}; + +export type CountryDataType = { + iso: string; + iso3: string; + society_url: string; + region: number; + key_priorities: string | null; + inform_score: number | null; + id: number; + url_ifrc: string; + record_type: number; + record_type_display: string; + bbox: GeoPolygon; + centroid: GeoPoint; + independent: boolean; + is_deprecated: boolean; + fdrs: string; + links: unknown[]; + address_1: string; + address_2: string; + city_code: string; + phone: string; + website: string; + emails: string[]; + society_name: string; + name: string; + overview: string | null; + translation_module_original_language: string; +}; + +export type CountryDataTypeResponse = PaginatedResponse; diff --git a/app/components/ActiveOperation/utils.ts b/app/components/ActiveOperation/utils.ts new file mode 100644 index 0000000..519bdce --- /dev/null +++ b/app/components/ActiveOperation/utils.ts @@ -0,0 +1,183 @@ +import type { + CircleLayer, + CirclePaint, +} from 'mapbox-gl'; + +import { + COLOR_BLACK, + COLOR_BLUE, + COLOR_ORANGE, + COLOR_RED, + COLOR_YELLOW, +} from '#utils/constants'; + +import type { + AppealListItem, + AppealTypeOption, +} from './type'; + +export const COLOR_EMERGENCY_APPEAL = COLOR_RED; +export const COLOR_DREF = COLOR_YELLOW; +export const COLOR_EAP = COLOR_BLUE; +export const COLOR_MULTIPLE_TYPES = COLOR_ORANGE; + +// FIXME: these must be a constant defined somewhere else +export const APPEAL_TYPE_DREF = 0; +export const APPEAL_TYPE_EMERGENCY = 1; +// const APPEAL_TYPE_INTERNATIONAL = 2; // TODO: we are not showing this? +export const APPEAL_TYPE_EAP = 3; +export const APPEAL_TYPE_MULTIPLE = -1; + +const circleColor: CirclePaint['circle-color'] = [ + 'match', + ['get', 'appealType'], + APPEAL_TYPE_DREF, + + COLOR_DREF, + APPEAL_TYPE_EMERGENCY, + COLOR_EMERGENCY_APPEAL, + APPEAL_TYPE_EAP, + COLOR_EAP, + APPEAL_TYPE_MULTIPLE, + COLOR_MULTIPLE_TYPES, + COLOR_BLACK, +]; +const basePointPaint: CirclePaint = { + 'circle-radius': 5, + 'circle-color': circleColor, + 'circle-opacity': 0.8, +}; + +export const basePointLayerOptions: Omit = { + type: 'circle', + paint: basePointPaint, +}; + +const baseOuterCirclePaint: CirclePaint = { + 'circle-color': circleColor, + 'circle-opacity': 0.4, +}; + +const outerCirclePaintForFinancialRequirements: CirclePaint = { + ...baseOuterCirclePaint, + 'circle-radius': [ + 'interpolate', + ['linear', 1], + ['get', 'financialRequirements'], + 1000, + 7, + 10000, + 9, + 100000, + 11, + 1000000, + 15, + ], +}; + +const outerCirclePaintForPeopleTargeted: CirclePaint = { + ...baseOuterCirclePaint, + 'circle-radius': [ + 'interpolate', + ['linear', 1], + ['get', 'peopleTargeted'], + 1000, + 7, + 10000, + 9, + 100000, + 11, + 1000000, + 15, + ], +}; + +export const outerCircleLayerOptionsForFinancialRequirements: Omit = { + type: 'circle', + paint: outerCirclePaintForFinancialRequirements, +}; + +export const outerCircleLayerOptionsForPeopleTargeted: Omit = { + type: 'circle', + paint: outerCirclePaintForPeopleTargeted, +}; + +export interface ScaleOption { + label: string; + value: 'financialRequirements' | 'peopleTargeted'; +} + +export function optionKeySelector(option: ScaleOption) { + return option.value; +} + +export function optionLabelSelector(option: ScaleOption) { + return option.label; +} + +export const EthiopiaCountryData = { + iso: 'ET', + iso3: 'ETH', + society_url: 'http://www.redcrosseth.org/', + region: 0, + key_priorities: null, + inform_score: null, + id: 65, + url_ifrc: 'https://www.ifrc.org/national-societies-directory/ethiopian-red-cross-society', + record_type: 1, + record_type_display: 'Country', + bbox: { + type: 'Polygon', + coordinates: [ + [ + [ + 41.08749389076502, + 0.021048236623353, + ], + [ + 48.00201415347367, + 8.006641317439508, + ], + [ + 38.340911859897744, + 16.34780593622264, + ], + [ + 31.42501830617139, + 8.339226238130758, + ], + [ + 41.08749389076502, + 0.021048236623353, + ], + ], + ], + }, + centroid: { + type: 'Point', + coordinates: [ + 39.655151361666455, + 8.559294026448153, + ], + }, + independent: true, + is_deprecated: false, + fdrs: 'DET001', + links: [], + address_1: 'Ras Desta Damtew Avenue', + address_2: 'P.O. Box 195', + city_code: 'Addis Ababa', + phone: '(251) 115 15 90 74 / 115 51 91 44 / 115 51 91 71', + website: 'http://www.redcrosseth.org', + emails: [ + 'ercsinfo@redcrosseth.org', + ], + society_name: 'Ethiopian Red Cross Society', + name: 'Ethiopia', + overview: null, + translation_module_original_language: 'en', +}; + +export const appealKeySelector = (option: AppealListItem) => option.id; +export const appealTypeKeySelector = (option: AppealTypeOption) => option.key; +export const appealTypeLabelSelector = (option: AppealTypeOption) => option.value; diff --git a/app/components/BaseMap/index.tsx b/app/components/BaseMap/index.tsx new file mode 100644 index 0000000..ec4a793 --- /dev/null +++ b/app/components/BaseMap/index.tsx @@ -0,0 +1,121 @@ +import { + useContext, + useMemo, +} from 'react'; +import { LanguageContext } from '@ifrc-go/ui/contexts'; +import { ErrorBoundary } from '@sentry/react'; +import Map, { + MapLayer, + MapSource, +} from '@togglecorp/re-map'; +import { type SymbolLayer } from 'mapbox-gl'; + +import { + defaultMapOptions, + defaultMapStyle, + defaultNavControlOptions, + defaultNavControlPosition, +} from '#utils/map'; + +import styles from './styles.module.css'; + +type MapProps = Parameters[0]; + +type overrides = 'mapStyle' | 'mapOptions' | 'navControlShown' | 'navControlPosition' | 'navControlOptions' | 'scaleControlShown'; + +export type Props = Omit & { + baseLayers?: React.ReactNode; + withDisclaimer?: boolean; +} & Partial>; + +function BaseMap(props: Props) { + const { + baseLayers, + mapStyle, + mapOptions, + navControlShown, + navControlPosition, + navControlOptions, + scaleControlShown, + children, + ...otherProps + } = props; + + const { currentLanguage } = useContext(LanguageContext); + + const adminLabelLayerOptions : Omit = useMemo( + () => { + // ar, es, fr + let label: string; + if (currentLanguage === 'es') { + label = 'name_es'; + } else if (currentLanguage === 'ar') { + label = 'name_ar'; + } else if (currentLanguage === 'fr') { + label = 'name_fr'; + } else { + label = 'name'; + } + + return { + type: 'symbol', + layout: { + 'text-field': ['get', label], + }, + }; + }, + [currentLanguage], + ); + + return ( + + + + + + {baseLayers} + + {children} + + ); +} + +function BaseMapWithErrorBoundary(props: Props) { + return ( + + Failed to load map! + + )} + > + + + ); +} + +export default BaseMapWithErrorBoundary; diff --git a/app/components/BaseMap/styles.module.css b/app/components/BaseMap/styles.module.css new file mode 100644 index 0000000..4224164 --- /dev/null +++ b/app/components/BaseMap/styles.module.css @@ -0,0 +1,9 @@ +.map-error { + display: flex; + align-items: center; + justify-content: center; + background-color: var(--go-ui-color-background); + min-height: 20rem; + color: var(--go-ui-color-red); + font-size: var(--go-ui-font-size-lg); +} diff --git a/app/components/GlobalMap/index.tsx b/app/components/GlobalMap/index.tsx new file mode 100644 index 0000000..aa4bce2 --- /dev/null +++ b/app/components/GlobalMap/index.tsx @@ -0,0 +1,177 @@ +import { + useMemo, + useState, +} from 'react'; +import { MapLayer } from '@togglecorp/re-map'; +import { + type Expression, + type FillLayer, + type FillPaint, + type LngLatLike, + type MapboxGeoJSONFeature, +} from 'mapbox-gl'; + +import BaseMap, { type Props as BaseMapProps } from '#components/BaseMap'; +import { COLOR_BLACK } from '#utils/constants'; + +export interface AdminZeroFeatureProperties { + country_id: number; + disputed: boolean; + independent: boolean; + is_deprecated: boolean; + name: string; + name_ar: string; + name_es: string; + name_fr: string; + record_type: any; + + // NOTE: we check for undefined iso3 before triggering + // onClick and onHover + iso3: string; + + fdrs?: string; + iso?: string; + region_id?: number; +} + +const KOSOVO_ISO3 = 'XKX'; +const WESTERN_SAHARA_ISO3 = 'ESH'; + +const overlappedDisputedCountriesIso3 = [ + KOSOVO_ISO3, + WESTERN_SAHARA_ISO3, +]; + +const adminZeroHighlightPaint: FillPaint = { + 'fill-color': COLOR_BLACK, + 'fill-opacity': [ + 'case', + ['all', + ['==', ['feature-state', 'hovered'], true], + ['!=', ['get', 'iso3'], null], + ], + 0.2, + 0, + ], +}; + +interface Props extends BaseMapProps { + adminZeroFillPaint?: mapboxgl.FillPaint, + onAdminZeroFillHover?: ( + hoveredFeatureProperties: AdminZeroFeatureProperties | undefined + ) => void; + onAdminZeroFillClick?: ( + clickedFeatureProperties: AdminZeroFeatureProperties, + lngLat: LngLatLike, + ) => void; +} + +function GlobalMap(props: Props) { + const { + onAdminZeroFillHover: onHover, + onAdminZeroFillClick: onClick, + adminZeroFillPaint, + baseLayers, + ...baseMapProps + } = props; + + const [hoveredCountryIso3, setHoveredCountryIso3] = useState(); + + const handleFeatureMouseEnter = (feature: MapboxGeoJSONFeature) => { + const hoveredFeatureProperties = feature.properties as ( + AdminZeroFeatureProperties | undefined + ); + + setHoveredCountryIso3(hoveredFeatureProperties?.iso3); + + if (onHover) { + onHover(hoveredFeatureProperties); + } + }; + + const handleFeatureMouseLeave = () => { + setHoveredCountryIso3(undefined); + + if (onHover) { + onHover(undefined); + } + }; + + const handleClick = (feature: MapboxGeoJSONFeature, lngLat: LngLatLike) => { + if (onClick) { + onClick( + feature.properties as AdminZeroFeatureProperties, + lngLat, + ); + } + + return true; + }; + + const fillSortKey = useMemo(() => [ + 'match', + ['get', 'iso3'], + // NOTE: Hovered geoarea should be at the top + hoveredCountryIso3 ?? '???', + 2, + // NOTE: After that, we should have geoarea that is 100% + // included in another geoarea + ...(overlappedDisputedCountriesIso3.filter( + (iso3) => !(iso3 === hoveredCountryIso3), + ).flatMap((iso3) => [iso3, 1])), + // NOTE: Everything else should be after that + 0, + ], [hoveredCountryIso3]); + + const adminZeroHighlightLayerOptions = useMemo>( + () => ({ + type: 'fill', + layout: { + visibility: 'visible', + 'fill-sort-key': fillSortKey, + }, + paint: adminZeroHighlightPaint, + filter: ['!=', ['get', 'iso3'], null], + }), + [fillSortKey], + ); + + const adminZeroBaseLayerOptions = useMemo>( + () => ({ + type: 'fill', + layout: { + visibility: 'visible', + 'fill-sort-key': fillSortKey, + }, + paint: adminZeroFillPaint, + }), + [fillSortKey, adminZeroFillPaint], + ); + + return ( + + + {(onHover || onClick) && ( + + )} + {baseLayers} + + )} + /> + ); +} + +export default GlobalMap; diff --git a/app/components/GoMapContainer/index.tsx b/app/components/GoMapContainer/index.tsx new file mode 100644 index 0000000..c39268f --- /dev/null +++ b/app/components/GoMapContainer/index.tsx @@ -0,0 +1,345 @@ +import { + useCallback, + useEffect, + useRef, +} from 'react'; +import { + ArtboardLineIcon, + CloseFillIcon, + CloseLineIcon, + DownloadTwoLineIcon, +} from '@ifrc-go/icons'; +import { + Button, + Container, + DateOutput, + IconButton, + InfoPopup, + Label, + ListView, + RawButton, +} from '@ifrc-go/ui'; +import { useBooleanState } from '@ifrc-go/ui/hooks'; +import { resolveToComponent } from '@ifrc-go/ui/utils'; +import { + _cs, + isDefined, +} from '@togglecorp/fujs'; +import { MapContainer } from '@togglecorp/re-map'; + +import Link from '#components/Link'; +import goLogo from '#resources/image/logo.png'; + +// import FileSaver from 'file-saver'; +// import { toPng } from 'html-to-image'; +import styles from './styles.module.css'; + +interface Props { + className?: string; + title: string; + footer?: React.ReactNode; + withoutDownloadButton?: boolean; + withPresentationMode?: boolean; + presentationModeAdditionalBeforeContent?: React.ReactNode; + presentationModeAdditionalAfterContent?: React.ReactNode; + onPresentationModeChange?: (newPresentationMode: boolean) => void; + children?: React.ReactNode; +} + +function GoMapContainer(props: Props) { + const mbToken = import.meta.env.APP_MAPBOX_TOKEN; + const { + className, + title = 'IFRC GO - Map', + footer, + withoutDownloadButton = false, + withPresentationMode = false, + presentationModeAdditionalBeforeContent, + presentationModeAdditionalAfterContent, + onPresentationModeChange, + children, + } = props; + + const mapSources = resolveToComponent( + 'Sources: ICRC,', + { + uncodsLink: ( + + UNCODs + + ), + }, + ); + + const [ + printMode, + { + setTrue: enterPrintMode, + setFalse: exitPrintMode, + }, + ] = useBooleanState(false); + + const [ + presentationMode, + { + setTrue: setPresentationModeTrue, + setFalse: setPresentationModeFalse, + }, + ] = useBooleanState(false); + + const containerRef = useRef(null) as React.RefObject; + + const enterPresentationMode = useCallback(() => { + if (isDefined(containerRef.current)) { + containerRef.current.requestFullscreen(); + } + }, []); + + const exitPresentationMode = useCallback(() => { + if (isDefined(document.fullscreenElement)) { + document.exitFullscreen(); + } + }, []); + + const handleFullScreenChange = useCallback(() => { + if (isDefined(document.fullscreenElement)) { + setPresentationModeTrue(); + } else { + setPresentationModeFalse(); + } + }, [setPresentationModeTrue, setPresentationModeFalse]); + + useEffect(() => { + document.addEventListener('fullscreenchange', handleFullScreenChange); + + return (() => { + document.removeEventListener('fullscreenchange', handleFullScreenChange); + }); + }, [handleFullScreenChange]); + + useEffect(() => { + if (isDefined(onPresentationModeChange)) { + onPresentationModeChange(presentationMode); + } + }, [presentationMode, onPresentationModeChange]); + + // const alert = useAlert(); + // const handleDownloadClick = useCallback(() => { + // if (!containerRef?.current) { + // alert.show( + // "Failed to download map. Try again.", + // { variant: 'danger' }, + // ); + // exitPrintMode(); + // return; + // } + // toPng(containerRef.current, { skipAutoScale: false }) + // .then((data) => FileSaver.saveAs(data, title)) + // .finally(exitPrintMode); + // }, [exitPrintMode, title, alert]); + + return ( + + {title} + + + )} + headerActions={( + <> + {printMode && ( + + + + + + + + + )} + {presentationMode && ( + + + + )} + {printMode && ( + + IFRC GO logo + + )} + + )} + spacing={presentationMode ? 'xl' : 'none'} + withPadding={presentationMode} + > + + {presentationMode && presentationModeAdditionalBeforeContent} +
+ + + + + {mapSources} + + + + © Mapbox + + + © OpenStreetMap + + + Improve this map + + + + )} + /> + {withPresentationMode && !printMode && !presentationMode && ( + + )} + {!printMode && !presentationMode && !withoutDownloadButton && ( + + + + )} +
+ {children} +
+
+ {footer && ( + + {footer} + + )} + {presentationMode && presentationModeAdditionalAfterContent} +
+
+ ); +} + +export default GoMapContainer; diff --git a/app/components/GoMapContainer/styles.module.css b/app/components/GoMapContainer/styles.module.css new file mode 100644 index 0000000..05411bc --- /dev/null +++ b/app/components/GoMapContainer/styles.module.css @@ -0,0 +1,75 @@ +.go-map-container { + .go-icon { + height: var(--go-ui-height-compact-status-icon); + } + + .relative-wrapper { + position: relative; + isolation: isolate; + + .map { + height: var(--go-ui-height-map-md); + } + + .download-button { + position: absolute; + top: 5rem; + /* NOTE: Exactly as mapbox */ + right: 10px; + border: var(--go-ui-width-separator-md) solid var(--go-ui-color-separator); + border-radius: var(--go-ui-border-radius-md); + background-color: var(--go-ui-color-foreground); + padding: 0 var(--go-ui-spacing-2xs); + font-size: var(--go-ui-height-icon-multiplier); + } + + .map-disclaimer { + position: absolute; + bottom: var(--go-ui-spacing-xs); + left: calc(var(--mapbox-icon-width) + var(--go-ui-spacing-sm)); + background-color: var(--go-ui-color-white); + padding: 0 var(--go-ui-spacing-2xs); + font-size: var(--go-ui-font-size-sm); + } + + .presentation-mode-button { + position: absolute; + top: var(--go-ui-spacing-sm); + left: var(--go-ui-spacing-sm); + } + + .content { + position: absolute; + bottom: calc(1.5rem + 2 * var(--go-ui-spacing-xs)); + left: var(--go-ui-spacing-sm); + } + } + + &.print-mode { + position: relative; + border: var(--go-ui-width-separator-thin) solid var(--go-ui-color-separator); + + .relative-wrapper { + border-top: var(--go-ui-width-separator-lg) solid var(--go-ui-color-primary-red); + + .map { + height: calc(var(--go-ui-width-separator-lg) + var(--go-ui-height-map-md)); + } + } + + .floating-actions { + position: absolute; + top: 0; + right: 0; + transform: translateY(-100%); + background-color: var(--go-ui-color-foreground); + } + } + + &.presentation-mode { + background-color: var(--go-ui-color-background); + width: 100vw; + height: 100vh; + overflow: auto; + } +} diff --git a/app/components/MapPopup/index.tsx b/app/components/MapPopup/index.tsx new file mode 100644 index 0000000..e247b8a --- /dev/null +++ b/app/components/MapPopup/index.tsx @@ -0,0 +1,76 @@ +import { useMemo } from 'react'; +import { CloseLineIcon } from '@ifrc-go/icons'; +import { + Button, + Container, + type ContainerProps, +} from '@ifrc-go/ui'; +import { _cs } from '@togglecorp/fujs'; +import { MapPopup as BasicMapPopup } from '@togglecorp/re-map'; + +import styles from './styles.module.css'; + +interface Props extends ContainerProps { + coordinates: mapboxgl.LngLatLike; + children: React.ReactNode; + onCloseButtonClick: () => void; + popupClassName?: string; +} + +function MapPopup(props: Props) { + const { + children, + coordinates, + onCloseButtonClick, + headerActions, + popupClassName, + ...containerProps + } = props; + + const popupOptions = useMemo(() => ({ + closeButton: false, + closeOnClick: false, + closeOnMove: false, + offset: 8, + className: _cs(styles.mapPopup, popupClassName), + maxWidth: 'unset', + }), [popupClassName]); + + return ( + + ); +} + +export default MapPopup; diff --git a/app/components/MapPopup/styles.module.css b/app/components/MapPopup/styles.module.css new file mode 100644 index 0000000..f4918d0 --- /dev/null +++ b/app/components/MapPopup/styles.module.css @@ -0,0 +1,46 @@ +.map-popup { + display: flex; + padding: 0; + width: 20rem; + min-height: 10rem; + max-height: 20rem; + overflow: auto; + font-family: var(--go-ui-font-family-sans-serif); + font-size: var(--go-ui-font-size-md); + + & :global(.mapboxgl-tip) { + flex-shrink: 0; + } + + & :global(.mapboxgl-popup-content) { + display: flex; + flex-direction: column; + flex-grow: 1; + padding: 0; + overflow: auto; + } + + & :global(.mapboxgl-popup-content > div) { + display: flex; + flex-direction: column; + flex-grow: 1; + padding: 0; + overflow: auto; + } + + .container { + flex-grow: 1; + border: var(--go-ui-width-separator-thin) solid var(--go-ui-color-separator); + width: 100%; + height: 100%; + overflow: auto; + + .close-button { + font-size: var(--go-ui-height-icon-multiplier); + } + + .content { + overflow: auto; + } + } +} diff --git a/app/declarations/turf.d.ts b/app/declarations/turf.d.ts new file mode 100644 index 0000000..f88a728 --- /dev/null +++ b/app/declarations/turf.d.ts @@ -0,0 +1 @@ +declare module '@turf/bbox'; diff --git a/app/hooks/useCountryRaw.ts b/app/hooks/useCountryRaw.ts new file mode 100644 index 0000000..644caa9 --- /dev/null +++ b/app/hooks/useCountryRaw.ts @@ -0,0 +1,74 @@ +import { + useContext, + useEffect, + useMemo, +} from 'react'; +import { isDefined } from '@togglecorp/fujs'; + +import DomainContext, { type Countries } from '#contexts/domain'; + +type CountryFromResponse = NonNullable[number]; + +export type Country = CountryFromResponse; + +type ListProps = { + region?: number; + id?: never; + iso3?: never; +} + +type PropsForId = { + id: number; + iso3?: never; + region?: never; +} + +type PropsForIso3 = { + iso3: string; + id?: never; + region?: never; +} + +function useCountryRaw(props?: ListProps): Array | undefined +function useCountryRaw(props: PropsForId): Country | undefined +function useCountryRaw(props: PropsForIso3): Country | undefined +function useCountryRaw( + props?: ListProps | PropsForId | PropsForIso3, +): (Country | undefined | Array) { + const { countries: countriesUnsafe, register } = useContext(DomainContext); + + useEffect( + () => { + register('country'); + }, + [register], + ); + + const countries = countriesUnsafe?.results; + + const returnValue = useMemo( + () => { + const id = props?.id; + if (isDefined(id)) { + return countries?.find((country) => country.id === id); + } + + const iso3 = props?.iso3; + if (isDefined(iso3)) { + return countries?.find((country) => country.iso3 === iso3); + } + + const region = props?.region; + if (isDefined(region)) { + return countries?.filter((country) => country.region === region); + } + + return countries; + }, + [countries, props?.id, props?.iso3, props?.region], + ); + + return returnValue; +} + +export default useCountryRaw; diff --git a/app/hooks/useInputState.ts b/app/hooks/useInputState.ts new file mode 100644 index 0000000..f731be6 --- /dev/null +++ b/app/hooks/useInputState.ts @@ -0,0 +1,43 @@ +import React, { + useEffect, + useRef, +} from 'react'; + +type ValueOrSetterFn = T | ((value: T) => T); +function isSetterFn(value: ValueOrSetterFn): value is ((value: T) => T) { + return typeof value === 'function'; +} + +function useInputState( + initialValue: T, + sideEffect?: (newValue: T, oldValue: T) => T, +) { + const [value, setValue] = React.useState(initialValue); + const sideEffectRef = useRef(sideEffect); + + useEffect( + () => { + sideEffectRef.current = sideEffect; + }, + [sideEffect], + ); + + type SetValue = React.Dispatch>; + const setValueSafe: SetValue = React.useCallback((newValueOrSetter) => { + setValue((oldValue) => { + const newValue = isSetterFn(newValueOrSetter) + ? newValueOrSetter(oldValue) + : newValueOrSetter; + + if (sideEffectRef.current) { + return sideEffectRef.current(newValue, oldValue); + } + + return newValue; + }); + }, []); + + return [value, setValueSafe] as const; +} + +export default useInputState; diff --git a/app/main.tsx b/app/main.tsx index 9423c0a..036064f 100644 --- a/app/main.tsx +++ b/app/main.tsx @@ -1,4 +1,5 @@ import '@ifrc-go/ui/index.css'; +import 'mapbox-gl/dist/mapbox-gl.css'; import './index.css'; import { StrictMode } from 'react'; diff --git a/app/utils/constants.ts b/app/utils/constants.ts new file mode 100644 index 0000000..6741e04 --- /dev/null +++ b/app/utils/constants.ts @@ -0,0 +1,69 @@ +export const defaultChartMargin = { + top: 0, + right: 0, + bottom: 0, + left: 0, +}; + +export const defaultChartPadding = { + top: 10, + right: 10, + bottom: 10, + left: 10, +}; + +// Map +export const DURATION_MAP_ZOOM = 1000; +export const DEFAULT_MAP_PADDING = 50; + +// Storage + +export const KEY_USER_STORAGE = 'user'; +export const KEY_LANGUAGE_STORAGE = 'language'; + +// Search page + +export const KEY_URL_SEARCH = 'keyword'; +export const SEARCH_TEXT_LENGTH_MIN = 3; + +// Risk + +export const COLOR_HAZARD_CYCLONE = '#a4bede'; +export const COLOR_HAZARD_DROUGHT = '#b68fba'; +export const COLOR_HAZARD_FOOD_INSECURITY = '#b7c992'; +export const COLOR_HAZARD_FLOOD = '#5a80b0'; +export const COLOR_HAZARD_EARTHQUAKE = '#eca48c'; +export const COLOR_HAZARD_STORM = '#97b8c2'; +export const COLOR_HAZARD_WILDFIRE = '#ff5014'; + +// FIXME: should these constants satisfy an existing enum? +export const CATEGORY_RISK_VERY_LOW = 1; +export const CATEGORY_RISK_LOW = 2; +export const CATEGORY_RISK_MEDIUM = 3; +export const CATEGORY_RISK_HIGH = 4; +export const CATEGORY_RISK_VERY_HIGH = 5; + +// Colors + +export const COLOR_WHITE = '#ffffff'; +// export const COLOR_TEXT = '#313131'; +// export const COLOR_TEXT_ON_DARK = '#ffffff'; +export const COLOR_LIGHT_GREY = '#e0e0e0'; +export const COLOR_DARK_GREY = '#a5a5a5'; +export const COLOR_BLACK = '#000000'; +// const COLOR_LIGHT_YELLOW = '#ffd470'; +export const COLOR_YELLOW = '#ff9e00'; +export const COLOR_BLUE = '#4c5d9b'; +export const COLOR_LIGHT_BLUE = '#c7d3e0'; +export const COLOR_ORANGE = '#ff8000'; +export const COLOR_RED = '#f5333f'; +export const COLOR_GREEN = '#8BB656'; +// const COLOR_DARK_RED = '#730413'; +export const COLOR_PRIMARY_BLUE = '#011e41'; +export const COLOR_PRIMARY_RED = '#f5333f'; + +export const COLOR_ACTIVE_REGION = '#7d8b9d'; + +// Import template + +export const FONT_FAMILY_HEADER = 'Montserrat'; diff --git a/app/utils/map.ts b/app/utils/map.ts new file mode 100644 index 0000000..c7ffb3f --- /dev/null +++ b/app/utils/map.ts @@ -0,0 +1,54 @@ +import { isDefined } from '@togglecorp/fujs'; +import getBbox from '@turf/bbox'; +import type { + Map, + NavigationControl, +} from 'mapbox-gl'; + +import type { CountryDataType } from '#components/ActiveOperation/type'; + +export const defaultMapStyle = 'mapbox://styles/go-ifrc/ckrfe16ru4c8718phmckdfjh0'; +export const localUnitMapStyle = 'mapbox://styles/go-ifrc/clvvgugzh00x501pc1n00b8cz'; + +type NavControlOptions = NonNullable[0]>; +export const defaultNavControlOptions: NavControlOptions = { + showCompass: false, +}; + +type ControlPosition = NonNullable[1]>; +export const defaultNavControlPosition: ControlPosition = 'top-right'; + +export const defaultMapOptions: Omit = { + logoPosition: 'bottom-left' as const, + zoom: 1.5, + minZoom: 1, + maxZoom: 18, + scrollZoom: false, + pitchWithRotate: false, + dragRotate: false, + renderWorldCopies: true, + attributionControl: false, + preserveDrawingBuffer: true, + // interactive: false, +}; + +export function getCountryListBoundingBox(countryList:CountryDataType[]) { + if (countryList.length < 1) { + return undefined; + } + + const countryWithBbox = countryList.filter((country) => isDefined(country.bbox)); + + if (countryWithBbox.length < 1) { + return undefined; + } + const collection = { + type: 'FeatureCollection' as const, + features: countryWithBbox.map((country) => ({ + type: 'Feature' as const, + geometry: country.bbox, + })), + }; + + return getBbox(collection); +} diff --git a/app/utils/requestHelper.ts b/app/utils/requestHelper.ts new file mode 100644 index 0000000..30c1a27 --- /dev/null +++ b/app/utils/requestHelper.ts @@ -0,0 +1,99 @@ +import { isFalsyString } from '@togglecorp/fujs'; +import type { ContextInterface } from '@togglecorp/toggle-request'; + +const GO_API = import.meta.env.APP_GO_API; +const JSON_TYPE = 'application/json'; + +type GoContextInterface = ContextInterface< + unknown, + ResponseError, + unknown, + unknown +>; + +type ResponseError = { + status: number; + originalResponse: Response, + responseText: string; +} + +export const processUrls: GoContextInterface['transformUrl'] = (url) => { + if (isFalsyString(url)) { + return ''; + } + if (/^https?:\/\//i.test(url)) { + return url; + } + return GO_API + url; +}; +export const processOptions: GoContextInterface['transformOptions'] = ( + _, + requestOptions, +) => { + const { + body, + headers, + method = 'GET', + ...otherOptions + } = requestOptions; + + const defaultHeaders: HeadersInit = {}; + + const requestBody = body ? JSON.stringify(body) : undefined; + + const contentType: string = JSON_TYPE; + + const specificHeaders = { + Accept: contentType, + 'Content-Type': contentType, + }; + + return { + method, + headers: { + ...defaultHeaders, + ...specificHeaders, + ...headers, + }, + body: requestBody, + ...otherOptions, + }; +}; + +export const processResponse = async (res: Response) => { + const text = await res.text(); + if (res.status >= 200 && res.status < 300) { + return res.headers.get('content-type')?.split('; ')[0] === JSON_TYPE + ? JSON.parse(text) + : text; + } + return { status: res.status, originalResponse: res.clone(), responseText: text }; +}; + +export const processError: GoContextInterface['transformError'] = (err, url, opts) => { + const getMessage = () => { + if (err === 'network') return 'Cannot connect with the server!'; + if (err === 'parse') return 'There was a problem parsing the response from server'; + if (`${err?.status}`[0] === '5') return 'Internal server error!'; + if (!err?.responseText) return 'Empty error response from server!'; + if (opts.method === 'GET') return 'Failed to load data'; + + if (err?.originalResponse?.headers.get('content-type') === JSON_TYPE) { + try { + const json = JSON.parse(err.responseText); + if (typeof json?.statusCode === 'number') return json.error_message; + if (json?.errors?.non_field_errors) return json.errors.non_field_errors.join(' '); + // eslint-disable-next-line no-empty + } catch {} + } + + return err?.responseText ?? 'Some error occurred while performing this action.'; + }; + + return { + reason: typeof err === 'string' ? err : 'server', + value: { messageForNotification: getMessage() }, + status: typeof err === 'object' ? err.status : undefined, + debugMessage: JSON.stringify({ url, error: err }), + }; +}; diff --git a/app/utils/tableHelpers/index.ts b/app/utils/tableHelpers/index.ts new file mode 100644 index 0000000..e5b8d51 --- /dev/null +++ b/app/utils/tableHelpers/index.ts @@ -0,0 +1,179 @@ +import { + type Column, + HeaderCell, + type HeaderCellProps, + type NumberOutputProps, + type SortDirection, +} from '@ifrc-go/ui'; +import { + createNumberColumn, + createStringColumn, +} from '@ifrc-go/ui/utils'; +import { _cs } from '@togglecorp/fujs'; + +import Link, { type Props as LinkProps } from '#components/Link'; + +import styles from './styles.module.css'; + +type Options = { + sortable?: boolean, + defaultSortDirection?: SortDirection, + + columnClassName?: string; + headerCellRendererClassName?: string; + headerContainerClassName?: string; + cellRendererClassName?: string; + cellContainerClassName?: string; + columnWidth?: Column['columnWidth']; + columnStretch?: Column['columnStretch']; + columnStyle?: Column['columnStyle']; + + headerInfoTitle?: HeaderCellProps['infoTitle']; + headerInfoDescription?: HeaderCellProps['infoDescription']; +} + +export function createLinkColumn( + id: string, + title: string, + accessor: (item: D) => React.ReactNode, + rendererParams: (item: D) => LinkProps, + options?: Options, +) { + const item: Column & { + valueSelector: (item: D) => string | undefined | null, + valueComparator: (foo: D, bar: D) => number, + } = { + id, + title, + headerCellRenderer: HeaderCell, + headerCellRendererParams: { + sortable: options?.sortable, + infoTitle: options?.headerInfoTitle, + infoDescription: options?.headerInfoDescription, + }, + cellRenderer: Link, + cellRendererParams: (_: K, datum: D): LinkProps => ({ + children: accessor(datum) || '--', + withUnderline: true, + ...rendererParams(datum), + }), + valueSelector: () => '', + valueComparator: () => 0, + cellRendererClassName: options?.cellRendererClassName, + columnClassName: options?.columnClassName, + headerCellRendererClassName: options?.headerCellRendererClassName, + cellContainerClassName: options?.cellContainerClassName, + columnWidth: options?.columnWidth, + columnStretch: options?.columnStretch, + columnStyle: options?.columnStyle, + }; + + return item; +} + +export function createCountryColumn( + id: string, + title: string, + accessor: (item: D) => React.ReactNode, + rendererParams: (item: D) => LinkProps, + options?: Options, +) { + return createLinkColumn( + id, + title, + accessor, + rendererParams, + { + ...options, + columnClassName: _cs(styles.country, options?.columnClassName), + }, + ); +} + +export function createEventColumn( + id: string, + title: string, + accessor: (item: D) => React.ReactNode, + rendererParams: (item: D) => LinkProps, + options?: Options, +) { + return createLinkColumn( + id, + title, + accessor, + rendererParams, + { + ...options, + columnClassName: _cs(styles.event, options?.columnClassName), + }, + ); +} + +export function createDisasterTypeColumn( + id: string, + title: string, + accessor: (item: D) => string | undefined | null, + options?: Options, +) { + return createStringColumn( + id, + title, + accessor, + { + ...options, + columnClassName: _cs(styles.disasterType, options?.columnClassName), + }, + ); +} + +export function createTitleColumn( + id: string, + title: string, + accessor: (item: D) => string | undefined | null, + options?: Options, +) { + return createStringColumn( + id, + title, + accessor, + { + ...options, + columnClassName: _cs(styles.title, options?.columnClassName), + }, + ); +} + +export function createAppealCodeColumn( + id: string, + title: string, + accessor: (item: D) => string | undefined | null, + options?: Options, +) { + return createStringColumn( + id, + title, + accessor, + { + ...options, + columnClassName: _cs(styles.appealCode, options?.columnClassName), + }, + ); +} + +export function createBudgetColumn( + id: string, + title: string, + accessor: (item: D) => number | undefined | null, + options?: Options, +) { + return createNumberColumn( + id, + title, + accessor, + { + suffix: ' CHF', + ...options, + columnClassName: _cs(styles.budget, options?.columnClassName), + }, + ); +} diff --git a/app/utils/tableHelpers/styles.module.css b/app/utils/tableHelpers/styles.module.css new file mode 100644 index 0000000..d7df63f --- /dev/null +++ b/app/utils/tableHelpers/styles.module.css @@ -0,0 +1,31 @@ +.region-list { + min-width: 8rem; +} + +.country-list { + min-width: 8rem; +} + +.country { + min-width: 8rem; +} + +.event { + min-width: 14rem; +} + +.title { + min-width: 14rem; +} + +.appeal-code { + min-width: 8rem; +} + +.disaster-type { + min-width: 8rem; +} + +.budget { + min-width: 8rem; +} diff --git a/app/views/Home/index.tsx b/app/views/Home/index.tsx index 9359a8f..9f5bc62 100644 --- a/app/views/Home/index.tsx +++ b/app/views/Home/index.tsx @@ -10,6 +10,7 @@ import { ListView, } from '@ifrc-go/ui'; +import ActiveOperation from '#components/ActiveOperation'; import InfoCard from '#components/InfoCard'; import KeyCard from '#components/KeyCard'; import Page from '#components/Page'; @@ -71,12 +72,16 @@ function Home() { + } title="Operational Dashboards" description="Real-time emergency alerts and early warning system monitoring across regions" /> - + } value="Emergency Response Dashboard" diff --git a/package.json b/package.json index 8063259..8442d4a 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "build": "tsc -b && vite build", "lint": "eslint .", "preview": "vite preview", + "prelint": "pnpm generate:type", "lint:css": "stylelint \"./app/**/*.css\"", "generate:type": "graphql-codegen --require dotenv/config --config codegen.ts", "typecheck": "tsc" @@ -16,12 +17,18 @@ "@graphql-codegen/cli": "^6.2.1", "@ifrc-go/icons": "^2.0.1", "@ifrc-go/ui": "2.0.0-beta.2", + "@sentry/react": "^10.49.0", "@togglecorp/fujs": "^2.2.0", + "@togglecorp/re-map": "^0.3.0", "@togglecorp/toggle-form": "^2.0.4", + "@togglecorp/toggle-request": "1.0.0-beta.3", + "@turf/bbox": "^7.0.0", + "@turf/buffer": "^7.0.0", "@urql/exchange-graphcache": "^9.0.0", "graphql": "^16.13.2", "knip": "^6.3.0", "lint": "^0.8.19", + "mapbox-gl": "^1.13.3", "react": "^19.2.4", "react-cookie": "^8.1.0", "react-dom": "^19.2.4", @@ -38,6 +45,7 @@ "@rolldown/plugin-babel": "^0.2.2", "@togglecorp/vite-plugin-validate-env": "^2.2.1", "@types/babel__core": "^7.20.5", + "@types/mapbox-gl": "^1.13.3", "@types/node": "^24.12.2", "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c1caa57..944bf28 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,12 +17,27 @@ importers: '@ifrc-go/ui': specifier: 2.0.0-beta.2 version: 2.0.0-beta.2(@ifrc-go/icons@2.0.1(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@sentry/react': + specifier: ^10.49.0 + version: 10.49.0(react@19.2.4) '@togglecorp/fujs': specifier: ^2.2.0 version: 2.2.0 + '@togglecorp/re-map': + specifier: ^0.3.0 + version: 0.3.0(mapbox-gl@1.13.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@togglecorp/toggle-form': specifier: ^2.0.4 version: 2.0.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@togglecorp/toggle-request': + specifier: 1.0.0-beta.3 + version: 1.0.0-beta.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@turf/bbox': + specifier: ^7.0.0 + version: 7.3.5 + '@turf/buffer': + specifier: ^7.0.0 + version: 7.3.5 '@urql/exchange-graphcache': specifier: ^9.0.0 version: 9.0.0(@urql/core@6.0.1(graphql@16.13.2))(graphql@16.13.2) @@ -35,6 +50,9 @@ importers: lint: specifier: ^0.8.19 version: 0.8.19 + mapbox-gl: + specifier: ^1.13.3 + version: 1.13.3 react: specifier: ^19.2.4 version: 19.2.5 @@ -78,6 +96,9 @@ importers: '@types/babel__core': specifier: ^7.20.5 version: 7.20.5 + '@types/mapbox-gl': + specifier: ^1.13.3 + version: 1.13.10 '@types/node': specifier: ^24.12.2 version: 24.12.2 @@ -1137,6 +1158,38 @@ packages: '@keyv/serialize@1.1.1': resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==} + '@mapbox/geojson-rewind@0.5.2': + resolution: {integrity: sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA==} + hasBin: true + + '@mapbox/geojson-types@1.0.2': + resolution: {integrity: sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw==} + + '@mapbox/jsonlint-lines-primitives@2.0.2': + resolution: {integrity: sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==} + engines: {node: '>= 0.6'} + + '@mapbox/mapbox-gl-supported@1.5.0': + resolution: {integrity: sha512-/PT1P6DNf7vjEEiPkVIRJkvibbqWtqnyGaBz3nfRdcxclNSnSdaLU5tfAgcD7I8Yt5i+L19s406YLl1koLnLbg==} + peerDependencies: + mapbox-gl: '>=0.32.1 <2.0.0' + + '@mapbox/point-geometry@0.1.0': + resolution: {integrity: sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==} + + '@mapbox/tiny-sdf@1.2.5': + resolution: {integrity: sha512-cD8A/zJlm6fdJOk6DqPUV8mcpyJkRz2x2R+/fYcWDYG3oWbG7/L7Yl/WqQ1VZCjnL9OTIMAn6c+BC5Eru4sQEw==} + + '@mapbox/unitbezier@0.0.0': + resolution: {integrity: sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA==} + + '@mapbox/vector-tile@1.3.1': + resolution: {integrity: sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==} + + '@mapbox/whoots-js@3.1.0': + resolution: {integrity: sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==} + engines: {node: '>=6.0.0'} + '@kwsites/file-exists@1.1.1': resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==} @@ -1547,6 +1600,36 @@ packages: '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + '@sentry-internal/browser-utils@10.49.0': + resolution: {integrity: sha512-n0QRx0Ysx6mPfIydTkz7VP0FmwM+/EqMZiRqdsU3aTYsngE9GmEDV0OL1bAy6a8N/C1xf9vntkuAtj6N/8Z51w==} + engines: {node: '>=18'} + + '@sentry-internal/feedback@10.49.0': + resolution: {integrity: sha512-JNsUBGv0faCFE7MeZUH99Y9lU9qq3LBALbLxpE1x7ngNrQnVYRlcFgdqaD/btNBKr8awjYL8gmcSkHBWskGqLQ==} + engines: {node: '>=18'} + + '@sentry-internal/replay-canvas@10.49.0': + resolution: {integrity: sha512-7D/NrgH1Qwx5trDYaaTSSJmCb1yVQQLqFG4G/S9x2ltzl9876lSGJL8UeW8ReNQgF3CDAcwbmm/9aXaVSBUNZA==} + engines: {node: '>=18'} + + '@sentry-internal/replay@10.49.0': + resolution: {integrity: sha512-IEy4lwHVMiRE3JAcn+kFKjsTgalDOCSTf20SoFd+nkt6rN/k1RDyr4xpdfF//Kj3UdeTmbuibYjK5H/FLhhnGg==} + engines: {node: '>=18'} + + '@sentry/browser@10.49.0': + resolution: {integrity: sha512-bGCHc+wK2Dx67YoSbmtlt04alqWfQ+dasD/GVipVOq50gvw/BBIDHTEWRJEjACl+LrvszeY54V+24p8z4IgysA==} + engines: {node: '>=18'} + + '@sentry/core@10.49.0': + resolution: {integrity: sha512-UaFeum3LUM1mB0d67jvKnqId1yWQjyqmaDV6kWngG03x+jqXb08tJdGpSoxjXZe13jFBbiBL/wKDDYIK7rCK4g==} + engines: {node: '>=18'} + + '@sentry/react@10.49.0': + resolution: {integrity: sha512-WdfJve0orTiumr25Ozgs2p2KaJR9xV82Z5V9IYBi0TadsurSWK6xI6SAFjw84tQht9Fp8q4UCn3QYCnApF4BfA==} + engines: {node: '>=18'} + peerDependencies: + react: ^16.14.0 || 17.x || 18.x || 19.x + '@simple-git/args-pathspec@1.0.3': resolution: {integrity: sha512-ngJMaHlsWDTfjyq9F3VIQ8b7NXbBLq5j9i5bJ6XLYtD6qlDXT7fdKY2KscWWUF8t18xx052Y/PUO1K1TRc9yKA==} @@ -1631,12 +1714,49 @@ packages: '@togglecorp/fujs@2.2.0': resolution: {integrity: sha512-OuoQ9Bj7SiI2sTLpaM/HivU6HpSbZ3ANBIn7f9KUz5eFcfwBBEDvjI+4ah6WktJEYTUKY4RxX37z64qOrTJSwA==} + '@togglecorp/re-map@0.3.0': + resolution: {integrity: sha512-tCohiZxUt5tkuAmzTz8qZu2foliPkj1ZyNnS3Z4He9ZDKOuGrZy0mwRe8QDDDTF+lIULD4gQMaQIENaWRls/Uw==} + peerDependencies: + mapbox-gl: ^1.13.0 + react: ^17.0.2 + react-dom: ^17.0.2 + '@togglecorp/toggle-form@2.0.4': resolution: {integrity: sha512-+EzRzXK/PKlisu44yARpxOkoeowz+0oKk2Rl3CdhxtBfTVfzG28aHAklDTubTBssS8hneGBTav2aInCqmwChfg==} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 + '@togglecorp/toggle-request@1.0.0-beta.3': + resolution: {integrity: sha512-q36QiIGkmWtJUrgrpLvPbwIx9MrRZI/dNqI0P16oLQuboc2ZBvWjBWnfHgIlzWDj3gGgBfAzaSzS+DTlNF3tQw==} + peerDependencies: + react: ^17.0.2 + react-dom: ^17.0.2 + + '@turf/bbox@7.3.5': + resolution: {integrity: sha512-oG1ya/HtBjAIg4TimbWx+nOYPbY0bCvt82Bq8tm6sBw3qqtbOyRSfDz79Sq90TnH7DXJprJ1qnVGKNtZ6jemfw==} + + '@turf/buffer@7.3.5': + resolution: {integrity: sha512-TGls3nYtWzviKHT00XVBfHKa7Z2oIZKqiHN7R0xErGwMSAR7YhxVROhxq/iyIsWZjl1SlPwweZZIxWILQuxpZA==} + + '@turf/center@7.3.5': + resolution: {integrity: sha512-eub5/Kfdmn89ZqwCONHI7astmTDEtN5M6+JfOkgoSyhKKFhUJYNxUyH1F/vCtIP7j1K369Vs4L9TYiuGapvIKQ==} + + '@turf/clone@7.3.5': + resolution: {integrity: sha512-qfIaHj3410QEcTpiCRnTzhq8YrUp2gWrUIPLBAEFykopNxJkq1du1VrRzvuAo36ap2UV7KppkS6wGNypbcxswQ==} + + '@turf/helpers@7.3.5': + resolution: {integrity: sha512-E/NMGV5MwbjjP7AJXBtsanC3yY8N2MQ87IGdIgkB2ji5AtBpwnH4L3gEqpYN4RlCJJWbLbzO91BbKv2waUd0eg==} + + '@turf/jsts@2.7.2': + resolution: {integrity: sha512-zAezGlwWHPyU0zxwcX2wQY3RkRpwuoBmhhNE9HY9kWhFDkCxZ3aWK5URKwa/SWKJbj9aztO+8vtdiBA28KVJFg==} + + '@turf/meta@7.3.5': + resolution: {integrity: sha512-r+ohqxoyqeigFB0oFrQx/YEHIkOKqcKpCjvZkvZs7Tkv+IFco5MezAd2zd4rzK+0DfFgDP3KpJc7HqrYjvEjhg==} + + '@turf/projection@7.3.5': + resolution: {integrity: sha512-G4bejYKT0vCQZryMhEoS9aLmP7ThDg6nb3zi3wPzELiTrGNOd2YgkWVheQDGCk4hcqEIWZc9fI2alaRSSkkLVw==} + '@togglecorp/vite-plugin-validate-env@2.2.1': resolution: {integrity: sha512-K39bpXSOdliJPMNfHuK17pszgWWNRJfaB4NRDQBuWx9h4O4/qF1nl7DpwBqSB006e3E284jZAZEw2r7RoHdG4w==} engines: {node: '>=22'} @@ -1661,6 +1781,9 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/geojson@7946.0.16': + resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} + '@types/hoist-non-react-statics@3.3.7': resolution: {integrity: sha512-PQTyIulDkIDro8P+IHbKCsw7U2xxBYflVzW/FgWdCAePD9xGSidgA76/GeJ6lBKoblyhf9pBY763gbrN+1dI8g==} peerDependencies: @@ -1672,6 +1795,9 @@ packages: '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + '@types/mapbox-gl@1.13.10': + resolution: {integrity: sha512-0oUy5d5nT3L480MRviAnaBUEXuWCG/7M4ZQo0n8eJ/LLMgJ0nMbjv7M+qoPl4TAj6yVVWKTvkukXvW9QHH1GVw==} + '@types/node@24.12.2': resolution: {integrity: sha512-A1sre26ke7HDIuY/M23nd9gfB+nrmhtYyMINbjI1zHJxYteKR6qSMX56FsmjMcDb3SMcjJg5BiRRgOCC/yBD0g==} @@ -2315,6 +2441,9 @@ packages: resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + csscolorparser@1.0.3: + resolution: {integrity: sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==} + cssdb@8.8.0: resolution: {integrity: sha512-QbLeyz2Bgso1iRlh7IpWk6OKa3lLNGXsujVjDMPl9rOZpxKeiG69icLpbLCFxeURwmcdIfZqQyhlooKJYM4f8Q==} @@ -2336,6 +2465,12 @@ packages: csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + d3-array@1.2.4: + resolution: {integrity: sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==} + + d3-geo@1.7.1: + resolution: {integrity: sha512-O4AempWAr+P5qbk2bC2FuN/sDW4z+dN2wDf9QV3bxQt4M5HfOEeXLgJ/UKQW0+o1Dj8BE+L5kiDbdWUMjsmQpw==} + damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} @@ -2478,6 +2613,9 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} + earcut@2.2.4: + resolution: {integrity: sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==} + ecc-jsbn@0.1.2: resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} @@ -2880,6 +3018,9 @@ packages: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} + geojson-vt@3.2.1: + resolution: {integrity: sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==} + get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} @@ -2900,6 +3041,10 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + get-symbol-description@1.1.0: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} @@ -2910,6 +3055,9 @@ packages: getpass@0.1.7: resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} + gl-matrix@3.4.4: + resolution: {integrity: sha512-latSnyDNt/8zYUB6VIJ6PCh2jBjJX6gnDsoCZ7LyW7GkqrD51EWwa9qCoGixj8YqBtETQK/xY7OmpTF8xz1DdQ==} + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -2996,6 +3144,9 @@ packages: resolution: {integrity: sha512-5bJ+nf/UCpAjHM8i06fl7eLyVC9iuNAjm9qzkiu2ZGhM0VscSvS6WDPfAwkdkBuoXGM9FJSbKl6wylMwP9Ktig==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + grid-index@1.1.0: + resolution: {integrity: sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA==} + har-schema@2.0.0: resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} engines: {node: '>=4'} @@ -3084,6 +3235,9 @@ packages: resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} engines: {node: '>=0.10.0'} + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -3387,10 +3541,17 @@ packages: resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} engines: {node: '>=0.6.0'} + jsts@2.7.1: + resolution: {integrity: sha512-x2wSZHEBK20CY+Wy+BPE7MrFQHW6sIsdaGUMEqmGAio+3gFzQaBYPwLRonUfQf9Ak8pBieqj9tUofX1+WtAEIg==} + engines: {node: '>= 12'} + jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} + kdbush@3.0.0: + resolution: {integrity: sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew==} + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -3567,6 +3728,10 @@ packages: resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} engines: {node: '>=0.10.0'} + mapbox-gl@1.13.3: + resolution: {integrity: sha512-p8lJFEiqmEQlyv+DQxFAOG/XPWN0Wp7j/Psq93Zywz7qt9CcUKFYDBOoOEKzqe6gudHVJY8/Bhqw6VDpX2lSBg==} + engines: {node: '>=6.4.0'} + math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} @@ -3634,6 +3799,9 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + murmurhash-js@1.0.0: + resolution: {integrity: sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==} + mute-stream@0.0.7: resolution: {integrity: sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==} @@ -3849,6 +4017,10 @@ packages: pattern-key-compare@1.0.0: resolution: {integrity: sha512-7wi8a7OFmdx4Hx31+KY9kcD7gO+MWWupXtlAx7ANqoE8Pypl501FsDAPX2tSYLOuafED82A0Mv3lzeNfn82Jlg==} + pbf@3.3.0: + resolution: {integrity: sha512-XDF38WCH3z5OV/OVa8GKUNtLAyneuzbCisx7QUCF8Q6Nutx0WnJrQe5O+kOtBlLfRNUws98Y58Lblp+NJG5T4Q==} + hasBin: true + performance-now@2.1.0: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} @@ -4078,6 +4250,9 @@ packages: resolution: {integrity: sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==} engines: {node: ^10 || ^12 || >=14} + potpack@1.0.2: + resolution: {integrity: sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==} + prelude-ls@1.1.2: resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} engines: {node: '>= 0.8.0'} @@ -4101,6 +4276,9 @@ packages: proper-lockfile@4.1.2: resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} + protocol-buffers-schema@3.6.1: + resolution: {integrity: sha512-VG2K63Igkiv9p76tk1lilczEK1cT+kCjKtkdhw1dQZV3k3IXJbd3o6Ho8b9zJZaHSnT2hKe4I+ObmX9w6m5SmQ==} + psl@1.15.0: resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} @@ -4122,6 +4300,9 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + quickselect@2.0.0: + resolution: {integrity: sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==} + react-clientside-effect@1.2.8: resolution: {integrity: sha512-ma2FePH0z3px2+WOu6h+YycZcEvFmmxIlAb62cF52bG86eMySciO/EQZeQMXd07kPCYB0a1dWDT5J+KE9mCDUw==} peerDependencies: @@ -4268,6 +4449,9 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + resolve-protobuf-schema@2.1.0: + resolution: {integrity: sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==} + resolve.exports@1.1.1: resolution: {integrity: sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==} engines: {node: '>=10'} @@ -4316,6 +4500,9 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + rw@1.3.3: + resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} + rxjs@6.6.7: resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} engines: {npm: '>=2.0.0'} @@ -4588,6 +4775,9 @@ packages: engines: {node: '>=20.19.0'} hasBin: true + supercluster@7.1.5: + resolution: {integrity: sha512-EulshI3pGUM66o6ZdH3ReiFcvHpM3vAigyK+vcxdjpJyEbIIrtbmBdY23mGgnI24uXiGFvrGq9Gkum/8U7vJWg==} + supports-color@10.2.2: resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} engines: {node: '>=18'} @@ -4646,6 +4836,9 @@ packages: resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} engines: {node: '>=12.0.0'} + tinyqueue@2.0.3: + resolution: {integrity: sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==} + title-case@3.0.3: resolution: {integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==} @@ -4916,6 +5109,9 @@ packages: vscode-uri@3.1.0: resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} + vt-pbf@3.1.3: + resolution: {integrity: sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==} + w3c-hr-time@1.0.2: resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} deprecated: Use your platform's native performance.now() and performance.timeOrigin. @@ -6265,6 +6461,31 @@ snapshots: '@keyv/serialize@1.1.1': {} + '@mapbox/geojson-rewind@0.5.2': + dependencies: + get-stream: 6.0.1 + minimist: 1.2.8 + + '@mapbox/geojson-types@1.0.2': {} + + '@mapbox/jsonlint-lines-primitives@2.0.2': {} + + '@mapbox/mapbox-gl-supported@1.5.0(mapbox-gl@1.13.3)': + dependencies: + mapbox-gl: 1.13.3 + + '@mapbox/point-geometry@0.1.0': {} + + '@mapbox/tiny-sdf@1.2.5': {} + + '@mapbox/unitbezier@0.0.0': {} + + '@mapbox/vector-tile@1.3.1': + dependencies: + '@mapbox/point-geometry': 0.1.0 + + '@mapbox/whoots-js@3.1.0': {} + '@kwsites/file-exists@1.1.1': dependencies: debug: 4.4.3 @@ -6531,6 +6752,40 @@ snapshots: '@rtsao/scc@1.1.0': {} + '@sentry-internal/browser-utils@10.49.0': + dependencies: + '@sentry/core': 10.49.0 + + '@sentry-internal/feedback@10.49.0': + dependencies: + '@sentry/core': 10.49.0 + + '@sentry-internal/replay-canvas@10.49.0': + dependencies: + '@sentry-internal/replay': 10.49.0 + '@sentry/core': 10.49.0 + + '@sentry-internal/replay@10.49.0': + dependencies: + '@sentry-internal/browser-utils': 10.49.0 + '@sentry/core': 10.49.0 + + '@sentry/browser@10.49.0': + dependencies: + '@sentry-internal/browser-utils': 10.49.0 + '@sentry-internal/feedback': 10.49.0 + '@sentry-internal/replay': 10.49.0 + '@sentry-internal/replay-canvas': 10.49.0 + '@sentry/core': 10.49.0 + + '@sentry/core@10.49.0': {} + + '@sentry/react@10.49.0(react@19.2.4)': + dependencies: + '@sentry/browser': 10.49.0 + '@sentry/core': 10.49.0 + react: 19.2.4 + '@simple-git/args-pathspec@1.0.3': {} '@simple-git/argv-parser@1.1.1': @@ -6615,7 +6870,7 @@ snapshots: dependencies: '@babel/runtime-corejs3': 7.29.2 - '@togglecorp/toggle-form@2.0.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@togglecorp/toggle-form@2.0.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@babel/runtime-corejs3': 7.29.2 '@togglecorp/fujs': 2.2.0 @@ -6658,6 +6913,8 @@ snapshots: '@types/estree@1.0.8': {} + '@types/geojson@7946.0.16': {} + '@types/hoist-non-react-statics@3.3.7(@types/react@19.2.14)': dependencies: '@types/react': 19.2.14 @@ -6667,6 +6924,10 @@ snapshots: '@types/json5@0.0.29': {} + '@types/mapbox-gl@1.13.10': + dependencies: + '@types/geojson': 7946.0.16 + '@types/node@24.12.2': dependencies: undici-types: 7.16.0 @@ -7324,6 +7585,8 @@ snapshots: mdn-data: 2.27.1 source-map-js: 1.2.1 + csscolorparser@1.0.3: {} + cssdb@8.8.0: {} cssesc@3.0.0: {} @@ -7338,6 +7601,12 @@ snapshots: csstype@3.2.3: {} + d3-array@1.2.4: {} + + d3-geo@1.7.1: + dependencies: + d3-array: 1.2.4 + damerau-levenshtein@1.0.8: {} dashdash@1.14.1: @@ -7472,6 +7741,8 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 + earcut@2.2.4: {} + ecc-jsbn@0.1.2: dependencies: jsbn: 0.1.1 @@ -7989,6 +8260,8 @@ snapshots: gensync@1.0.0-beta.2: {} + geojson-vt@3.2.1: {} + get-caller-file@2.0.5: {} get-east-asian-width@1.5.0: {} @@ -8013,6 +8286,8 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 + get-stream@6.0.1: {} + get-symbol-description@1.1.0: dependencies: call-bound: 1.0.4 @@ -8027,6 +8302,8 @@ snapshots: dependencies: assert-plus: 1.0.0 + gl-matrix@3.4.4: {} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -8122,6 +8399,8 @@ snapshots: graphql@16.13.2: {} + grid-index@1.1.0: {} + har-schema@2.0.0: {} har-validator@5.1.5: @@ -8205,6 +8484,8 @@ snapshots: dependencies: safer-buffer: 2.1.2 + ieee754@1.2.1: {} + ignore@5.3.2: {} ignore@7.0.5: {} @@ -8518,6 +8799,8 @@ snapshots: json-schema: 0.4.0 verror: 1.10.0 + jsts@2.7.1: {} + jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.9 @@ -8525,6 +8808,8 @@ snapshots: object.assign: 4.1.7 object.values: 1.2.1 + kdbush@3.0.0: {} + keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -8713,6 +8998,31 @@ snapshots: map-cache@0.2.2: {} + mapbox-gl@1.13.3: + dependencies: + '@mapbox/geojson-rewind': 0.5.2 + '@mapbox/geojson-types': 1.0.2 + '@mapbox/jsonlint-lines-primitives': 2.0.2 + '@mapbox/mapbox-gl-supported': 1.5.0(mapbox-gl@1.13.3) + '@mapbox/point-geometry': 0.1.0 + '@mapbox/tiny-sdf': 1.2.5 + '@mapbox/unitbezier': 0.0.0 + '@mapbox/vector-tile': 1.3.1 + '@mapbox/whoots-js': 3.1.0 + csscolorparser: 1.0.3 + earcut: 2.2.4 + geojson-vt: 3.2.1 + gl-matrix: 3.4.4 + grid-index: 1.1.0 + murmurhash-js: 1.0.0 + pbf: 3.3.0 + potpack: 1.0.2 + quickselect: 2.0.0 + rw: 1.3.3 + supercluster: 7.1.5 + tinyqueue: 2.0.3 + vt-pbf: 3.1.3 + math-intrinsics@1.1.0: {} mathml-tag-names@4.0.0: {} @@ -8760,6 +9070,8 @@ snapshots: ms@2.1.3: {} + murmurhash-js@1.0.0: {} + mute-stream@0.0.7: {} mute-stream@2.0.0: {} @@ -9025,6 +9337,11 @@ snapshots: pattern-key-compare@1.0.0: {} + pbf@3.3.0: + dependencies: + ieee754: 1.2.1 + resolve-protobuf-schema: 2.1.0 + performance-now@2.1.0: {} picocolors@0.2.1: {} @@ -9313,6 +9630,8 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + potpack@1.0.2: {} + prelude-ls@1.1.2: {} prelude-ls@1.2.1: {} @@ -9333,6 +9652,8 @@ snapshots: retry: 0.12.0 signal-exit: 3.0.7 + protocol-buffers-schema@3.6.1: {} + psl@1.15.0: dependencies: punycode: 2.3.1 @@ -9349,7 +9670,9 @@ snapshots: queue-microtask@1.2.3: {} - react-clientside-effect@1.2.8(react@19.2.5): + quickselect@2.0.0: {} + + react-clientside-effect@1.2.8(react@19.2.4): dependencies: '@babel/runtime': 7.29.2 react: 19.2.5 @@ -9512,6 +9835,10 @@ snapshots: resolve-pkg-maps@1.0.0: {} + resolve-protobuf-schema@2.1.0: + dependencies: + protocol-buffers-schema: 3.6.1 + resolve.exports@1.1.1: {} resolve.imports@1.2.7: @@ -9577,6 +9904,8 @@ snapshots: dependencies: queue-microtask: 1.2.3 + rw@1.3.3: {} + rxjs@6.6.7: dependencies: tslib: 1.14.1 @@ -9951,6 +10280,10 @@ snapshots: - supports-color - typescript + supercluster@7.1.5: + dependencies: + kdbush: 3.0.0 + supports-color@10.2.2: {} supports-color@5.5.0: @@ -10005,6 +10338,8 @@ snapshots: fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 + tinyqueue@2.0.3: {} + title-case@3.0.3: dependencies: tslib: 2.8.1 @@ -10269,6 +10604,12 @@ snapshots: vscode-uri@3.1.0: {} + vt-pbf@3.1.3: + dependencies: + '@mapbox/point-geometry': 0.1.0 + '@mapbox/vector-tile': 1.3.1 + pbf: 3.3.0 + w3c-hr-time@1.0.2: dependencies: browser-process-hrtime: 1.0.0 From cc79da3a8c1507a9f6a7e4f75303c7e8c27bd88d Mon Sep 17 00:00:00 2001 From: crssstha Date: Tue, 28 Apr 2026 17:02:00 +0545 Subject: [PATCH 08/13] feat(data-and-report): added data and report, galleries, team pages --- app/Root/config/routes.ts | 10 +- app/Root/index.tsx | 9 +- app/components/GlobalMap/index.tsx | 2 +- app/components/PdfViewer/index.tsx | 76 +++++ app/components/PdfViewer/styles.module.css | 4 + app/components/PreloadMessage/index.tsx | 17 ++ .../PreloadMessage/styles.module.css | 11 + app/hooks/useCountryRaw.ts | 74 ----- app/hooks/useFilterState.ts | 2 +- app/resources/image/loginbackground.jpg | Bin 0 -> 151260 bytes app/utils/map.ts | 2 +- app/views/DataAndReport/AIsummary/index.tsx | 61 ++++ .../DataAndReport/AIsummary/styles.module.css | 6 + .../DataAndReport/ReportDetail/index.tsx | 138 +++++++++ .../ReportDetail/styles.module.css | 15 + app/views/DataAndReport/index.tsx | 214 ++++++++++++-- app/views/DataAndReport/styles.module.css | 14 + app/views/Galleries/Photos/index.tsx | 142 ++++++++++ app/views/Galleries/Photos/styles.module.css | 37 +++ app/views/Galleries/index.tsx | 222 ++++++++------- app/views/GuestLayout/index.tsx | 6 +- app/views/GuestLayout/styles.module.css | 4 - .../Home}/ActiveOperation/index.tsx | 5 +- .../Home}/ActiveOperation/type.ts | 0 .../Home}/ActiveOperation/utils.ts | 63 ----- app/views/Home/index.tsx | 10 +- app/views/Members/index.tsx | 152 ---------- app/views/OurWork/index.tsx | 4 +- app/views/TeamList/Members/index.tsx | 264 ++++++++++++++++++ backend | 2 +- package.json | 1 + pnpm-lock.yaml | 152 ++++++++++ 32 files changed, 1279 insertions(+), 440 deletions(-) create mode 100644 app/components/PdfViewer/index.tsx create mode 100644 app/components/PdfViewer/styles.module.css create mode 100644 app/components/PreloadMessage/index.tsx create mode 100644 app/components/PreloadMessage/styles.module.css delete mode 100644 app/hooks/useCountryRaw.ts create mode 100644 app/resources/image/loginbackground.jpg create mode 100644 app/views/DataAndReport/AIsummary/index.tsx create mode 100644 app/views/DataAndReport/AIsummary/styles.module.css create mode 100644 app/views/DataAndReport/ReportDetail/index.tsx create mode 100644 app/views/DataAndReport/ReportDetail/styles.module.css create mode 100644 app/views/DataAndReport/styles.module.css create mode 100644 app/views/Galleries/Photos/index.tsx create mode 100644 app/views/Galleries/Photos/styles.module.css rename app/{components => views/Home}/ActiveOperation/index.tsx (99%) rename app/{components => views/Home}/ActiveOperation/type.ts (100%) rename app/{components => views/Home}/ActiveOperation/utils.ts (62%) delete mode 100644 app/views/Members/index.tsx create mode 100644 app/views/TeamList/Members/index.tsx diff --git a/app/Root/config/routes.ts b/app/Root/config/routes.ts index a5936ce..a640e79 100644 --- a/app/Root/config/routes.ts +++ b/app/Root/config/routes.ts @@ -26,6 +26,13 @@ const dataAndReport: RouteConfig = { load: () => import('#views/DataAndReport'), visibility: 'is-anything', }; + +const reportDetail: RouteConfig = { + index: true, + path: '/data-and-report/:id', + load: () => import('#views/DataAndReport/ReportDetail'), + visibility: 'is-anything', +}; const capacityAndResources: RouteConfig = { index: true, path: '/capacity-and-resources', @@ -61,7 +68,7 @@ const cookie: RouteConfig = { const team: RouteConfig = { index: true, path: '/team/:id', - load: () => import('#views/Members'), + load: () => import('#views/TeamList/Members'), visibility: 'is-authenticated', }; @@ -91,6 +98,7 @@ const routes = { team, teamList, login, + reportDetail, }; export type RouteKeys = keyof typeof routes; diff --git a/app/Root/index.tsx b/app/Root/index.tsx index dd2920b..849a55d 100644 --- a/app/Root/index.tsx +++ b/app/Root/index.tsx @@ -15,6 +15,7 @@ import { Provider as UrqlProvider, } from 'urql'; +import PreloadMessage from '#components/PreloadMessage'; import UserContext, { type UserContextInterface } from '#contexts/UserContext'; import type { MeQuery } from '#generated/types/graphql'; import useAlertContextProviderValue from '#hooks/useAlertContextProviderValue'; @@ -68,7 +69,13 @@ function Root() { - + + loading... + + )} + > diff --git a/app/components/GlobalMap/index.tsx b/app/components/GlobalMap/index.tsx index aa4bce2..39de995 100644 --- a/app/components/GlobalMap/index.tsx +++ b/app/components/GlobalMap/index.tsx @@ -23,7 +23,7 @@ export interface AdminZeroFeatureProperties { name_ar: string; name_es: string; name_fr: string; - record_type: any; + record_type: string; // NOTE: we check for undefined iso3 before triggering // onClick and onHover diff --git a/app/components/PdfViewer/index.tsx b/app/components/PdfViewer/index.tsx new file mode 100644 index 0000000..55aeea1 --- /dev/null +++ b/app/components/PdfViewer/index.tsx @@ -0,0 +1,76 @@ +import 'react-pdf/dist/Page/AnnotationLayer.css'; +import 'react-pdf/dist/Page/TextLayer.css'; + +import { + useCallback, + useState, +} from 'react'; +import { + Document, + Page as PdfPage, + pdfjs, +} from 'react-pdf'; + +pdfjs.GlobalWorkerOptions.workerSrc = `https://unpkg.com/pdfjs-dist@${pdfjs.version}/build/pdf.worker.min.mjs`; + +interface PdfViewerProps { + file: string; + loadingMessage?: React.ReactNode; + errorMessage?: React.ReactNode; +} + +function PdfViewer({ + file, + loadingMessage =

Loading PDF…

, + errorMessage =

Failed to load PDF.

, +}: PdfViewerProps) { + const [numPages, setNumPages] = useState(0); + const [loadedPages, setLoadedPages] = useState(0); + const [containerWidth, setContainerWidth] = useState(); + + const allPagesLoaded = numPages > 0 && loadedPages === numPages; + const onContainerRef = useCallback((node: HTMLDivElement | null): void => { + if (node) { + setContainerWidth(node.getBoundingClientRect().width); + } + }, []); + + const onDocumentLoadSuccess = useCallback( + ({ numPages: nextNumPages }: { numPages: number }): void => { + setNumPages(nextNumPages); + }, + [], + ); + + const onPageLoadSuccess = useCallback((): void => { + setLoadedPages((prev) => prev + 1); + }, []); + return ( +
+ {!allPagesLoaded && loadingMessage} +
+ + {Array.from({ length: numPages }, (_, index) => ( + + ))} + +
+
+ ); +} + +export default PdfViewer; diff --git a/app/components/PdfViewer/styles.module.css b/app/components/PdfViewer/styles.module.css new file mode 100644 index 0000000..f3e7f99 --- /dev/null +++ b/app/components/PdfViewer/styles.module.css @@ -0,0 +1,4 @@ +.pdfPage :global(canvas) { + width: 100% !important; + height: 100% !important; +} \ No newline at end of file diff --git a/app/components/PreloadMessage/index.tsx b/app/components/PreloadMessage/index.tsx new file mode 100644 index 0000000..f68d626 --- /dev/null +++ b/app/components/PreloadMessage/index.tsx @@ -0,0 +1,17 @@ +import styles from './styles.module.css'; + +interface Props { + children?: React.ReactNode; +} + +function PreloadMessage(props: Props) { + const { children } = props; + + return ( +
+ {children} +
+ ); +} + +export default PreloadMessage; diff --git a/app/components/PreloadMessage/styles.module.css b/app/components/PreloadMessage/styles.module.css new file mode 100644 index 0000000..a71eda0 --- /dev/null +++ b/app/components/PreloadMessage/styles.module.css @@ -0,0 +1,11 @@ +.preload-message { + display: flex; + align-items: center; + flex-direction: column; + flex-grow: 1; + justify-content: center; + background-color: var(--go-ui-color-background); + height: 100vh; + text-align: center; + font-size: var(--go-ui-font-size-lg); +} diff --git a/app/hooks/useCountryRaw.ts b/app/hooks/useCountryRaw.ts deleted file mode 100644 index 644caa9..0000000 --- a/app/hooks/useCountryRaw.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { - useContext, - useEffect, - useMemo, -} from 'react'; -import { isDefined } from '@togglecorp/fujs'; - -import DomainContext, { type Countries } from '#contexts/domain'; - -type CountryFromResponse = NonNullable[number]; - -export type Country = CountryFromResponse; - -type ListProps = { - region?: number; - id?: never; - iso3?: never; -} - -type PropsForId = { - id: number; - iso3?: never; - region?: never; -} - -type PropsForIso3 = { - iso3: string; - id?: never; - region?: never; -} - -function useCountryRaw(props?: ListProps): Array | undefined -function useCountryRaw(props: PropsForId): Country | undefined -function useCountryRaw(props: PropsForIso3): Country | undefined -function useCountryRaw( - props?: ListProps | PropsForId | PropsForIso3, -): (Country | undefined | Array) { - const { countries: countriesUnsafe, register } = useContext(DomainContext); - - useEffect( - () => { - register('country'); - }, - [register], - ); - - const countries = countriesUnsafe?.results; - - const returnValue = useMemo( - () => { - const id = props?.id; - if (isDefined(id)) { - return countries?.find((country) => country.id === id); - } - - const iso3 = props?.iso3; - if (isDefined(iso3)) { - return countries?.find((country) => country.iso3 === iso3); - } - - const region = props?.region; - if (isDefined(region)) { - return countries?.filter((country) => country.region === region); - } - - return countries; - }, - [countries, props?.id, props?.iso3, props?.region], - ); - - return returnValue; -} - -export default useCountryRaw; diff --git a/app/hooks/useFilterState.ts b/app/hooks/useFilterState.ts index 14a62d9..d6b2292 100644 --- a/app/hooks/useFilterState.ts +++ b/app/hooks/useFilterState.ts @@ -73,7 +73,7 @@ function useFilterState(options: { ordering = defaultOrdering, page = 1, pageSize = 10, - debounceTime = 200, + debounceTime = 300, } = options; const [state, dispatch] = useReducer, [FilterActions]>( diff --git a/app/resources/image/loginbackground.jpg b/app/resources/image/loginbackground.jpg new file mode 100644 index 0000000000000000000000000000000000000000..79f9430e2abbb1a4096d23801c5b764631011573 GIT binary patch literal 151260 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
#WEJj7mUsc3pg>l6juZn?77P`Gr^e9bw1u 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 luTp6u_8&$ri0&~G7U=18c3hE4(I(W + } + spacing="sm" + contentAlignment="center" + > + AI Summary + + + A cholera outbreak was declared in Arsi Zone, + Ethiopia on 17 May 2025 and is spreading to nearby areas. + By mid-June, 201 cases (92% severe) and 2 deaths were reported. + The outbreak is rapidly increasing, with over 62,000 people in need of assistance. + + + A cholera outbreak was declared in Arsi Zone, + Ethiopia on 17 May 2025 and is spreading to nearby areas. + By mid-June, 201 cases (92% severe) and 2 deaths were reported. + The outbreak is rapidly increasing, with over 62,000 people in need of assistance. + + + A cholera outbreak was declared in Arsi Zone, + Ethiopia on 17 May 2025 and is spreading to nearby areas. + By mid-June, 201 cases (92% severe) and 2 deaths were reported. + The outbreak is rapidly increasing, with over 62,000 people in need of assistance. + + + A cholera outbreak was declared in Arsi Zone, + Ethiopia on 17 May 2025 and is spreading to nearby areas. + By mid-June, 201 cases (92% severe) and 2 deaths were reported. + The outbreak is rapidly increasing, with over 62,000 people in need of assistance. + + + A cholera outbreak was declared in Arsi Zone, + Ethiopia on 17 May 2025 and is spreading to nearby areas. + By mid-June, 201 cases (92% severe) and 2 deaths were reported. + The outbreak is rapidly increasing, with over 62,000 people in need of assistance. + + + + ); +} + +export default AIsummary; diff --git a/app/views/DataAndReport/AIsummary/styles.module.css b/app/views/DataAndReport/AIsummary/styles.module.css new file mode 100644 index 0000000..352d823 --- /dev/null +++ b/app/views/DataAndReport/AIsummary/styles.module.css @@ -0,0 +1,6 @@ +.aiSummary{ + background: var(--go-ui-color-primary-red) ; + padding-top: var(--go-ui-spacing-4xl) !important; + height: 100%; + color: var(--go-ui-color-white); +} \ No newline at end of file diff --git a/app/views/DataAndReport/ReportDetail/index.tsx b/app/views/DataAndReport/ReportDetail/index.tsx new file mode 100644 index 0000000..6f1cc01 --- /dev/null +++ b/app/views/DataAndReport/ReportDetail/index.tsx @@ -0,0 +1,138 @@ +import { useParams } from 'react-router'; +import { + Container, + Description, + Heading, + InlineView, + ListView, + PageContainer, +} from '@ifrc-go/ui'; +import { encodeDate } from '@togglecorp/fujs'; +import { gql } from 'urql'; + +import PdfViewer from '#components/PdfViewer'; +import { useReportQuery } from '#generated/types/graphql'; +import AIsummary from '#views/DataAndReport/AIsummary'; + +import styles from './styles.module.css'; + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +const REPORT_QUERY = gql` + query Report($pk: ID!) { + report(pk: $pk) { + contentType + description + disasterType + file { + name + size + url + } + publishedAt + owner + iframeUrl + id + title + regionId + } + } +`; + +function ReportDetail() { + const { id } = useParams<{ id: string }>(); + + const [{ fetching, data }] = useReportQuery({ + variables: { pk: id! }, + pause: !id, + }); + + const reportData = data?.report; + const aiSummaryAvailable = !reportData?.iframeUrl; + + return ( + + + + + + + + Published Date: + + + {encodeDate(new Date(reportData?.publishedAt))} + + + )} + after={( + + + Published By: + + + {reportData?.owner ?? 'Anonymous'} + + + )} + /> + + + {reportData?.title} + + + {reportData?.description} + + + + {reportData?.file?.url + ? + : ( +